Guest User

Untitled

a guest
Oct 31st, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1.  
  2.  
  3. this.$ = this.jQuery = jQuery.noConflict(true); // bug fix
  4.  
  5. var board = location.pathname.match(/\/[^\/]+\//)[0];
  6.  
  7. if (board != '/w/') {
  8. $(document).on('QRDialogCreation', bindMGET);
  9. }
  10. $(document).ready(findLatestPostNumber);
  11.  
  12. var latestPostNumber = -1;
  13. var targetPostNumber = -1;
  14.  
  15. var mGetSelect = $('<select title="mGET"></select>');
  16.  
  17. var targets = {
  18. dubs: function (postNumber) {
  19. var digits = postNumber % 100;
  20. if (digits == 99) {
  21. return postNumber + 1; // next dubs are 00
  22. } else {
  23. return postNumber + (11 - digits % 11);
  24. }
  25. },
  26. trips: function (postNumber) {
  27. var digits = postNumber % 1000;
  28. if (digits == 999) {
  29. return postNumber + 1; // next trips are 000
  30. } else {
  31. return postNumber + (111 - digits % 111);
  32. }
  33. },
  34. quads: function (postNumber) {
  35. var digits = postNumber % 10000;
  36. if (digits == 9999) {
  37. return postNumber + 1; // next quads are 0000
  38. } else {
  39. return postNumber + (1111 - digits % 1111);
  40. }
  41. },
  42. quints: function (postNumber) {
  43. var digits = postNumber % 100000;
  44. if (digits == 99999) {
  45. return postNumber + 1; // next quints are 00000
  46. } else {
  47. return postNumber + (11111 - digits % 11111);
  48. }
  49. },
  50. sixtynine: function (postNumber) {
  51. return postNumber + (69 - (postNumber % 100));
  52. },
  53. seven: function (postNumber) {
  54. return postNumber + (7 - (postNumber % 10));
  55. }
  56. };
  57. populateMGETSelect(targets);
  58.  
  59. function bindMGET() {
  60. var qr = $('#qr');
  61. var submitButton = qr.find('form #qr #file-n-submit input:submit'); //dialog forced-anon show-new-thread-option reply-to-thread or file-n-submit-container
  62. var postNumberDisplay = $('<strong style="padding-left: 25px">#</strong><i id="mGETPostNumberDisplay">~" "</i>');
  63.  
  64. $(document).on('MTargetPostNumberReached', function () {
  65. submitButton.trigger('click');
  66. });
  67.  
  68. $(document).on('MTargetPostNumberMissed', function () {
  69. document.dispatchEvent(new CustomEvent('CreateNotification', {
  70. type: 'warning',
  71. content: 'Missed target post number '+targetPostNumber
  72. }));
  73. targetPostNumber = -1;
  74. });
  75.  
  76. qr.find('div select')
  77. .after(postNumberDisplay)
  78. .after(mGetSelect)
  79. .after('<strong style="padding-left: 10px">GET?</strong>');
  80.  
  81. document.dispatchEvent(new CustomEvent('QRAddPreSubmitHook', {detail: mGETSubmit}));
  82.  
  83. console.log('mGET bound');
  84. }
  85.  
  86. function mGETSubmit() {
  87. if (latestPostNumber + 1 == targetPostNumber) {
  88. targetPostNumber = -1;
  89. return null;
  90. }
  91.  
  92. var selectedTarget = mGetSelect.find('option:selected').val();
  93. if (selectedTarget == 'none') {
  94. return null;
  95. }
  96.  
  97. console.log('Target is ' + selectedTarget);
  98. targetPostNumber = targets[selectedTarget](latestPostNumber);
  99.  
  100. return "Waiting for post number " + targetPostNumber;
  101. }
  102.  
  103. function urlForPostNumber(postNumber) {
  104. return "http://sys.4chan.org" + board + "imgboard.php?res=" + postNumber;
  105. }
  106.  
  107. function checkLatestPostNumber() {
  108. var url = urlForPostNumber(latestPostNumber + 1);
  109. GM_xmlhttpRequest({
  110. url: url,
  111. method: "HEAD",
  112. onload: function (res) {
  113. if (res.status == 200) {
  114. latestPostNumber++;
  115. checkLatestPostNumber();
  116. } else {
  117. var displayText = (targetPostNumber == -1) ?
  118. latestPostNumber + '' :
  119. latestPostNumber + ' +' + (targetPostNumber - latestPostNumber);
  120. $('#mGETPostNumberDisplay').text(displayText);
  121. if (latestPostNumber + 1 == targetPostNumber) {
  122. $(document).trigger('MTargetPostNumberReached');
  123. } else if (targetPostNumber <= latestPostNumber) {
  124. $(document).trigger('MTargetPostNumberMissed');
  125. }
  126. checkLatestPostNumber();
  127. }
  128. }
  129. });
  130. }
  131.  
  132. function findLatestPostNumber() {
  133. function guessLatestPostNumber() {
  134. console.log('Guessing latest post number');
  135. var postNumLinks = $('span.postNum a:nth-child(2)');
  136. postNumLinks.each(function (index, postNumLink) {
  137. var postNumber = parseInt(postNumLink.text.match(/(\d+)/)[0]);
  138. latestPostNumber = postNumber > latestPostNumber ? postNumber : latestPostNumber;
  139. });
  140. console.log('Guessed post number: ' + latestPostNumber);
  141. }
  142.  
  143. if (latestPostNumber == -1) { // we haven't taken a guess yet
  144. guessLatestPostNumber();
  145. }
  146.  
  147. checkLatestPostNumber();
  148. }
  149.  
  150. function populateMGETSelect(targets) {
  151. if (board == '/w/') {
  152. mGetSelect.prop('disabled', false);
  153. mGetSelect.append('<option value="none">disabled</option>');
  154. } else {
  155. mGetSelect.append('<option value="none">' + "None" + '</option>');
  156. for (var targetKey in targets) {
  157. mGetSelect.append('<option value="' + targetKey + '">' + targetKey + '</option>');
  158. }
  159. }
  160. }
  161.  
  162. console.log('mGET loaded');
Advertisement
Add Comment
Please, Sign In to add comment