AddTweetButtonToCustomTest

コードテストにツイートボタンを追加します

作者のサイトでサポートを受ける。または、このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
  1. // ==UserScript==
  2. // @name AddTweetButtonToCustomTest
  3. // @namespace https://greasyfork.org/ja/scripts/369839-addtweetbuttontocustomtest
  4. // @version 1.0.1
  5. // @description コードテストにツイートボタンを追加します
  6. // @author keymoon
  7. // @license MIT
  8. // @homepage https://greasyfork.org/ja/scripts/369839-addtweetbuttontocustomtest
  9. // @supportURL https://twitter.com/kymn_
  10. // @match https://beta.atcoder.jp/contests/*/custom_test
  11. // @match https://*.contest.atcoder.jp/custom_test
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. var outputElem = getOutputElem();
  16. console.log(outputElem)
  17.  
  18. var tweetStr = trimForTweet(outputElem.text())
  19.  
  20. var tweetScript =
  21. `<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>`;
  22. var tweetBtn =
  23. `<a href="https://twitter.com/intent/tweet?text=${tweetStr}" class="btn btn-default col-xs-offset-8 col-xs-4" rel="nofollow" onclick="window.open(encodeURI(decodeURI(this.href)),'twwindow','width=550, height=450, personalbar=0, toolbar=0, scrollbars=1'); return false;">ツイート</a>`;
  24. outputElem.after(tweetScript)
  25. outputElem.after(tweetBtn)
  26.  
  27. function getOutputElem() {
  28. return $(isBeta() ? '#stdout' : 'textarea[name="output"]');
  29. function isBeta() {
  30. return location.href.split("//")[1].substr(0,4) === "beta";
  31. }
  32. }
  33.  
  34. function trimForTweet(str) {
  35. var tweetStr = "";
  36. var count = 0;
  37. Array.prototype.forEach.call(str,
  38. function(c) {
  39. if(isHalf(c)) count += 1;
  40. else count += 2;
  41. if (count <= 280) tweetStr += c;
  42. function isHalf(c){
  43. if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) ||
  44. (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
  45. return true;
  46. }
  47. }
  48. });
  49. return encodeURI(tweetStr);
  50. }
  51. })();