Infinite scroll for YouTube

Implementation infinite scroll at youtube.com's search result page.

  1. // ==UserScript==
  2. // @name Infinite scroll for YouTube
  3. // @name:ja YouTubeで無限スクロール
  4. // @namespace https://twitter.com/sititou70
  5. // @description Implementation infinite scroll at youtube.com's search result page.
  6. // @description:ja YouTube.comの検索結果で無限スクロールを実現します。
  7. // @include /https*:\/\/www\.youtube\.com\/.*/
  8. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js
  9. // @version 1.1
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. jQuery.noConflict();
  14. (function($){
  15. //exclude iframe document
  16. if ($("html").attr("lang") === "")return;
  17. //get scroll value
  18. var get_scroll_value = function(){
  19. return $(window).scrollTop();
  20. };
  21. //get and set next page
  22. var get_next_page = function(){
  23. if(now_loading)return;
  24. if(next_page_url == "last_page" || next_page_url == "undefined")return;
  25. now_loading = true;
  26. $(result_list_selector).append("<div style='text-align: center;' id='infinite_scroll_for_youyube_loading_massage'>loading next page...</div>");
  27. $.ajax({
  28. type: "GET",
  29. url: next_page_url,
  30. dataType: "html",
  31. }).done(function(res){
  32. now_loading = false;
  33. $(result_list_selector).append($(res).find(result_list_selector + " > li"));
  34. $("#infinite_scroll_for_youyube_loading_massage").remove();
  35. next_page_url = get_next_page_url($(res));
  36. if(next_page_url == "last_page"){
  37. $(result_list_selector).append("<div style='text-align: center;' id='infinite_scroll_for_youyube_loading_massage'>loaded last page</div>");
  38. }
  39. }).fail(function(){
  40. console.log("fail ajax");
  41. });
  42. };
  43. //get next page url from page dom jquery object
  44. var get_next_page_url = function(dom){
  45. var url = dom.find(".branded-page-box > a").last().attr("href");
  46. if(typeof url == "undefined")return "undefined";
  47. if(url == next_page_url)return "last_page";
  48. return url;
  49. };
  50. //it is called when the scrolls
  51. $(window).scroll(function(){
  52. if(next_page_url == "undefined")next_page_url = get_next_page_url($("html"));
  53. if($(".branded-page-box").offset().top - $(window).height() < get_scroll_value() + adjust_scroll_px){
  54. get_next_page();
  55. }
  56. });
  57. var now_loading = false;
  58. var next_page_url = get_next_page_url($("html"));
  59. var result_list_selector = "#results > ol > li:nth-child(2) > ol";
  60. var adjust_scroll_px = 300;
  61. })(jQuery);