Livetubeトップページの配信サムネイルをフィルタリングする機能を提供する
// ==UserScript==
// @name Livetube Thumbnail Filter
// @namespace https://greasyfork.org/ja/users/8279-nistim
// @version 0.1
// @description Livetubeトップページの配信サムネイルをフィルタリングする機能を提供する
// @author nistim
// @match http://livetube.cc/
// @grant none
// ==/UserScript==
$(function()
{
// サムネイル一覧のdiv要素にIDを追加する
$("#contentBox h3:contains('配信中の動画')").next().attr('id', 'thumbnails');
// サムネイル一覧の上部に入力フォームを追加する
$("#thumbnails").before("フィルタ:<input type='text' id='searchForm' style='margin: 0px 0px 0.6em 0px;' size='50'>");
// 入力フォームへのキー入力時処理
$("#searchForm").keyup(function()
{
// フォームに文字が入力されている場合
if(!$(this).val())
{
// 全サムネイルを表示する
$('#thumbnails div:hidden').show();
}
// フォームに文字が入力されていない場合
else
{
// フィルタの文字列一覧を取得し設定する
var keywords = this.value.split(/\s/);
// 全サムネイルを一旦消去する
$("#thumbnails div:visible").hide();
// 全サムネイルのうち、キーワードを含むものだけをフィルタして表示する
$("#thumbnails div").filter(function()
{
// フィルタ用の戻り値
var returnValue = true;
// #thumbnails divのthis設定
var _this = $(this);
// フィルタに含まれるキーワードの検索用ループ処理
jQuery.each(keywords, function(index, keyword)
{
// キーワード一致有無
var wordMatch = false;
// サムネイルを構成するdiv要素に含まれるa要素を検索する
_this.find("a").each(function()
{
// a要素のURLにキーワードが含まれる場合
if(RegExp(keyword, "i").test(decodeURI(this.href).replace(/http:\/\/livetube\.cc\/(tag\.)?/, "")))
{
// 表示するために戻り値をtrueに設定する
wordMatch = true;
// a要素の検索処理を終了する
return false;
}
});
// キーワード一致有無をフィルタ用の戻り値に設定する
returnValue = wordMatch;
// キーワードが一致しなかった場合
if(!wordMatch)
{
// キーワードの検索処理を終了する
return false;
}
});
// フィルタ用の戻り値を返す
return returnValue;
}).show();
// デザイン用のdiv要素を表示する
$("#thumbnails div:last-child").show();
}
});
});