Startpage.com Autopager

Autopager for startpage.com

当前为 2015-05-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Startpage.com Autopager
  3. // @namespace https://greasyfork.org/users/5174-jesuis-parapluie
  4. // @author jesuis-parapluie
  5. //
  6. // @description Autopager for startpage.com
  7. //
  8. // @include /^https?://(.+\.)?startpage\.com\/?do\/(meta)?search.*$/
  9. //
  10. // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
  11. //
  12. // @grant GM_xmlhttpRequest
  13. // @grant GM_getValue
  14. // @grant GM_setValue
  15. //
  16. // @version 0.0.4
  17. // ==/UserScript==
  18.  
  19. (function ($) {
  20. "use strict";
  21. /*jslint browser:true, regexp: true, newcap:true */
  22. /*global $, jQuery, GM_xmlhttpRequest, GM_getValue, GM_setValue */
  23. var addAutoPager = function () {
  24. var breaker = $('<div>', {
  25. 'class': 'breaker',
  26. 'style': 'clear: both; line-height: 20px; text-align: center; margin-top: 20px; margin-bottom: 20px; background: rgb(230, 230, 230); font-style: italic;',
  27. 'html': 'loading page <span class="nr" style="margin-left: 10px;">Loading page </span>'
  28. });
  29. breaker.css('width', $('#results_content .result').css('width'));
  30. $(document).bind('scroll', function () {
  31. var pos = $('#results_content').height() - $('#footer').height() - $('#head').height() - $('#results_header').height() - $('html,body').scrollTop(),
  32. form = $('#nextnavbar form'),
  33. data = "",
  34. br,
  35. s;
  36. if (!$('#results_content').hasClass('loading') && pos < 400) {
  37. $('#results_content').addClass('loading');
  38. br = breaker.clone();
  39. s = parseInt($('#pnform').html().match(/.*&nbsp;(\d+)&nbsp;.*/).pop(), 10) + 1;
  40. br.find('.nr').html('- ' + s + ' -');
  41. $('#results, #video_results').last().append(br);
  42.  
  43. form.find("input[type=\"hidden\"]").each(function () {
  44. data += "&" + $(this).attr('name') + "=" + $(this).attr('value');
  45. });
  46. data = data.substring(1);
  47. GM_xmlhttpRequest({
  48. method: "POST",
  49. url: form.attr('action'),
  50. data: data,
  51. headers: {
  52. "Content-Type": "application/x-www-form-urlencoded"
  53. },
  54. onload: function (response) {
  55. if ($(response.responseText).find('#results, #video_results').size()) {
  56. $('.classified').hide();
  57. br.after($(response.responseText).find('#results, #video_results').html());
  58. br.css('font-style', 'normal');
  59. br.html('Page ' + br.find('.nr').html());
  60. $('#search_footer').html($(response.responseText).find('#search_footer').html());
  61. } else {
  62. $('.breaker').last().remove();
  63. }
  64. $('#results_content').removeClass('loading');
  65. },
  66. onerror: function () {
  67. $('.breaker').last().remove();
  68. $('#results_content').removeClass('loading');
  69. }
  70. });
  71.  
  72. }
  73. });
  74. };
  75. $(function () {
  76. var link = $('<div>', {
  77. 'class': 'autopager',
  78. 'style': 'color:#608BD6;cursor:pointer;margin-top: 10px;font-weight:bold;text-align:center;',
  79. 'html': 'Autopager <span style="color:#D5402C;">off</span>'
  80. }).click(function () {
  81. if ($(this).hasClass('isOn')) {
  82. $(this).removeClass('isOn');
  83. $(this).find('span').text('off');
  84. GM_setValue('SP-Autopager', false);
  85. $(document).unbind('scroll');
  86. } else {
  87. $(this).addClass('isOn');
  88. $(this).find('span').text('on');
  89. GM_setValue('SP-Autopager', true);
  90. addAutoPager();
  91. }
  92. });
  93. if ($('#results, #video_results').hasClass('no_side_bar')) {
  94. $('#results_header').append(link);
  95. } else {
  96. $('#side_bar').prepend(link);
  97. }
  98. if (GM_getValue('SP-Autopager', false)) {
  99. link.addClass('isOn');
  100. link.find('span').text('on');
  101. addAutoPager();
  102. }
  103. });
  104. }(jQuery));