4chan GET Modified fixed

GET script

  1. // ==UserScript==
  2. // @name 4chan GET Modified fixed
  3. // @description GET script
  4. // @namespace HERPDERP
  5. // @include http*://boards.4chan.org/*
  6. // @include http*://boards.4channel.org/*
  7. // @version 0.9.3
  8. // @grant GM_xmlhttpRequest
  9. // @homepage http://userscripts.org/scripts/show/117715
  10. // ==/UserScript==
  11. var first = true, n = 0, l = 0, m = 0;
  12. var offset = 1; //how early it starts posting (default is 1, or 1 post before)
  13. var sticky = true; //posting box follows you as you scroll down the page
  14. var postrange = 20; //number of posts to use for post rate calc
  15. var dots = ".";
  16.  
  17. function progress() {
  18. if (dots == "...")
  19. dots = ".";
  20. else
  21. dots += ".";
  22. document.getElementsByName("getstatus")[0].innerHTML = "Waiting for: " + n + dots;
  23. }
  24.  
  25. function check_post() {
  26. if (n == 0) return;
  27. progress();
  28. var k = first ? n : (n-offset);
  29. GM_xmlhttpRequest({
  30. method: "HEAD",
  31. url: "http://sys.4chan.org" + location.pathname.match(/\/[^\/]+\//)[0] + "imgboard.php?res=" + k,
  32. onload: function(response) {
  33. if (response.status == 200) {
  34. if (first) {
  35. alert(n + " already posted!");
  36. document.getElementsByName("txtpostnumber")[0].value = n;
  37. document.getElementsByName("txtpostnumber")[0].focus();
  38. document.getElementsByName("getstatus")[0].innerHTML = "Ready...";
  39. n = 0;
  40. } else {
  41. document.getElementsByName("qrsubmit")[0].click();
  42. document.getElementsByName("getstatus")[0].innerHTML = "Ready...";
  43. document.getElementsByName("txtpostnumber")[0].value = "";
  44. }
  45. } else {
  46. first = false;
  47. check_post();
  48. }
  49. }
  50. });
  51. }
  52.  
  53. function postrates() {
  54. if (n == 0) return;
  55. progress();
  56. GM_xmlhttpRequest({
  57. method: "HEAD",
  58. url: "http://sys.4chan.org" + location.pathname.match(/\/[^\/]+\//)[0] + "imgboard.php?res=" + n,
  59. onload: function(response) {
  60. if (response.status == 200) {
  61. if (first) {
  62. alert(n + " passed");
  63. document.getElementsByName("txtpostnumber")[0].value = n;
  64. document.getElementsByName("txtpostnumber")[0].focus();
  65. document.getElementsByName("getstatus")[0].innerHTML = "Ready...";
  66. n = 0;
  67. } else {
  68. if (l == 0) {
  69. l = (new Date()).getTime() / 1000;
  70. n = (n + postrange);
  71. document.getElementsByName("getstatus")[0].innerHTML = "Waiting for: " + n + "...";
  72. postrates();
  73. }
  74. else {
  75. m = Math.round((new Date()).getTime() / 1000 - l);
  76. alert(postrange + " posts in " + m + " seconds. Average post time: " + Math.round((postrange / m)*100)/100 + "/s");
  77. document.getElementsByName("getstatus")[0].innerHTML = "Ready...";
  78. }
  79. }
  80. } else {
  81. first = false;
  82. postrates();
  83. }
  84. }
  85. });
  86. }
  87.  
  88. function setup() {
  89. getbox = window.document.createElement('div');
  90. getbox.innerHTML = "<table border='0' cellpadding='0' cellspacing='1' id='getbox' style='width: 200px;'> <tbody> <tr> <td colspan='2'> <label name='getstatus'>Ready...</label></td> </tr> <tr> <td colspan='2' style='text-align: center;'> <input name='txtpostnumber' size='24' style='width: 95%' type='text' /></td> </tr> <tr> <td style='text-align: center; width: 32%;'> <input name='btqrpost' style='width: 100%' type='button' value='Post' /></td> <td style='text-align: center; width: 36%;'> <input name='btpostrate' style='width: 100%' type='button' value='Post Rate' /></td> </tr> </tbody> </table>";
  91. if (sticky == true) {
  92. getbox.style.position = "fixed";
  93. }
  94. else {
  95. getbox.style.position = "absolute";
  96. }
  97. getbox.style.right = "20px";
  98. getbox.style.top = "39px";
  99. window.document.getElementsByTagName("body")[0].appendChild(getbox);
  100.  
  101. document.getElementsByName("btqrpost")[0].addEventListener("click", function(e) {
  102. if (document.getElementById("qr")) {
  103. var inputs = document.getElementsByTagName('input');
  104. for (var j=0; j < inputs.length; j++)
  105. {
  106. inp = inputs[j];
  107. if (inp.getAttribute('type') == 'submit' && inp.getAttribute('value') == "Submit" && inp.getAttribute('id') != "com_submit")
  108. {
  109. inputs[j].name = "qrsubmit"
  110. }
  111. }
  112. first = true;
  113. document.getElementsByName("txtpostnumber")[0].value = document.getElementsByName("txtpostnumber")[0].value.replace(/[^0123456789]/g, "");
  114. n = parseInt(document.getElementsByName("txtpostnumber")[0].value);
  115. if (!isNaN(n)) {
  116. document.getElementsByName("getstatus")[0].innerHTML = "Waiting for: " + n + "...";
  117. check_post();
  118. }
  119. else
  120. alert("Invalid Number");
  121. }
  122. else
  123. alert("4chan X Quick Reply is not Open");
  124. }, false);
  125.  
  126. document.getElementsByName("btpostrate")[0].addEventListener("click", function(e) {
  127. document.getElementsByName("txtpostnumber")[0].value = document.getElementsByName("txtpostnumber")[0].value.replace(/[^0123456789]/g, "");
  128. n = parseInt(document.getElementsByName("txtpostnumber")[0].value);
  129. if (!isNaN(n)) {
  130. document.getElementsByName("txtpostnumber")[0].value = "";
  131. document.getElementsByName("getstatus")[0].innerHTML = "Waiting for: " + n + "...";
  132. l = 0;
  133. postrates();
  134. }
  135. else
  136. alert("Invalid Number");
  137. }, false);
  138.  
  139. }
  140.  
  141. setup();