Livetube Thumbnail Filter

Livetubeトップページの配信サムネイルをフィルタリングする機能を提供する

  1. // ==UserScript==
  2. // @name Livetube Thumbnail Filter
  3. // @namespace https://greasyfork.org/ja/users/8279-nistim
  4. // @version 0.1
  5. // @description Livetubeトップページの配信サムネイルをフィルタリングする機能を提供する
  6. // @author nistim
  7. // @match http://livetube.cc/
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. $(function()
  12. {
  13. // サムネイル一覧のdiv要素にIDを追加する
  14. $("#contentBox h3:contains('配信中の動画')").next().attr('id', 'thumbnails');
  15. // サムネイル一覧の上部に入力フォームを追加する
  16. $("#thumbnails").before("フィルタ:<input type='text' id='searchForm' style='margin: 0px 0px 0.6em 0px;' size='50'>");
  17. // 入力フォームへのキー入力時処理
  18. $("#searchForm").keyup(function()
  19. {
  20. // フォームに文字が入力されている場合
  21. if(!$(this).val())
  22. {
  23. // 全サムネイルを表示する
  24. $('#thumbnails div:hidden').show();
  25. }
  26. // フォームに文字が入力されていない場合
  27. else
  28. {
  29. // フィルタの文字列一覧を取得し設定する
  30. var keywords = this.value.split(/\s/);
  31. // 全サムネイルを一旦消去する
  32. $("#thumbnails div:visible").hide();
  33. // 全サムネイルのうち、キーワードを含むものだけをフィルタして表示する
  34. $("#thumbnails div").filter(function()
  35. {
  36. // フィルタ用の戻り値
  37. var returnValue = true;
  38. // #thumbnails divのthis設定
  39. var _this = $(this);
  40. // フィルタに含まれるキーワードの検索用ループ処理
  41. jQuery.each(keywords, function(index, keyword)
  42. {
  43. // キーワード一致有無
  44. var wordMatch = false;
  45. // サムネイルを構成するdiv要素に含まれるa要素を検索する
  46. _this.find("a").each(function()
  47. {
  48. // a要素のURLにキーワードが含まれる場合
  49. if(RegExp(keyword, "i").test(decodeURI(this.href).replace(/http:\/\/livetube\.cc\/(tag\.)?/, "")))
  50. {
  51. // 表示するために戻り値をtrueに設定する
  52. wordMatch = true;
  53. // a要素の検索処理を終了する
  54. return false;
  55. }
  56. });
  57. // キーワード一致有無をフィルタ用の戻り値に設定する
  58. returnValue = wordMatch;
  59. // キーワードが一致しなかった場合
  60. if(!wordMatch)
  61. {
  62. // キーワードの検索処理を終了する
  63. return false;
  64. }
  65. });
  66. // フィルタ用の戻り値を返す
  67. return returnValue;
  68. }).show();
  69. // デザイン用のdiv要素を表示する
  70. $("#thumbnails div:last-child").show();
  71. }
  72. });
  73. });