您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Livetube配信での目障りな緑コテによるコメントの表示/非表示設定機能を提供する
当前为
// ==UserScript== // @name Livetube Handle Cleaner // @namespace https://greasyfork.org/ja/users/8279-nistim // @version 0.2 // @description Livetube配信での目障りな緑コテによるコメントの表示/非表示設定機能を提供する // @author nistim // @match http://livetube.cc/*/* // @match http://*.livetube.cc/*/* // @grant none // ==/UserScript== (function() { // ライブフラグ var liveFlag = false; // 配信画面へコテ選択セレクトボックスとボタンを追加する $("#comment_form").after("緑コテ名<select id='handleList'><option value='invalid'>コテ選択</option></select><button id='toggleVisible' disabled='disabled'>コテ選択</button>"); // 配信がライブ状態の場合 if($("#breadcrumbs .xright").html().indexOf("Live") != -1) { // ライブフラグを立てる liveFlag = true; } // コテ選択セレクトボックスの選択時処理 $("#handleList").change(function() { // 表示状態コテ選択の場合 if($("#handleList option:selected").val() == "visible") { // ボタンのテキストを「非表示」に設定し、有効化する $("#toggleVisible").text("非表示").removeAttr("disabled"); } // 非表示状態コテ選択の場合 else if($("#handleList option:selected").val() == "invisible") { // ボタンのテキストを「表示」に設定し、有効化する $("#toggleVisible").text("表示").removeAttr("disabled"); } // その他の場合 else { // ボタンのテキストを「コテ選択」に設定し、無効化する $("#toggleVisible").text("コテ選択").attr("disabled", "disabled"); } }); // コテ選択ボタンのクリック時処理 $("#toggleVisible").click(function() { // 選択中コテが表示状態の場合 if($("#handleList option:selected").val() == "visible") { // オプションの値を「非表示」、文字色を「赤色」に設定する $("#handleList option:selected").val("invisible").css("color", "red"); // ボタンのテキストを「表示」に設定する $("#toggleVisible").text("表示"); } // 選択中コテが非表示状態の場合 else { // オプションの値を「表示」、文字色を「緑色」に設定する $("#handleList option:selected").val("visible").css("color", "green"); // ボタンのテキストを「表示」に設定する $("#toggleVisible").text("非表示"); } // コテの表示状態を変更する changeVisible($("#handleList option:selected").text(), null); // 自動でスクロールする場合 if($("#auto_scroll_check").is(":checked")) { // スクロール処理を実行する SmoothScroll($("#right_pane"), $("#right_pane_bottom")); } }); // #comments直下div要素からのコテ取得 // target:コテ文字列 function getHandle(target) { // Liveの場合 if(liveFlag === true) { // 取得したコテを返す return(target.find("div:has(a) > a:first").text()); } // 録画の場合 else { // 取得したコテを返す return(target.find("div:has(a) > span:first > a:first").text()); } } // コテの表示/非表示状態変更処理 // handle:コテ文字列 // target:#comments直下のdiv要素 function changeVisible(handle, target) { // 一時取得用コテ var tmpHandle = null; // 表示状態値(「継承」) var displayValue = "inherit"; // コテ選択セレクトボックス内のオプション要素分のループ処理 $("#handleList option").each(function() { // テキストとコテが一致する場合 if($(this).text() == handle) { // 表示状態が非表示の場合 if($(this).val() == "invisible") { // 表示状態値を「非表示」に設定する displayValue = "none"; } // 引数に対象が設定されている場合 if(target) { // 対象の表示状態を設定する target.css("display", displayValue); } // 引数に対象が設定されていない場合 else { // #comments直下のdiv要素分のループ処理 $("#comments > div").each(function() { // コメントのdiv要素からコテを取得する tmpHandle = getHandle($(this)); // コテが一致する場合 if(handle == tmpHandle) { // 一致したdiv要素の表示状態を設定する $(this).css("display", displayValue); } }); } // ループ処理を終了する return false; } }); } // コメント確認処理 // commentOBJ:#comments直下のdiv要素群 function checkComment(commentOBJ) { // コテ var handle = ""; // コテの登録有無 var handleExist = false; // コメントオブジェクト分のループ処理 $.each(commentOBJ, function() { // コメントからコテを取得する handle = getHandle($(this)); // コメントにコテが含まれている場合 if(handle) { // コテの登録有無を無しで初期化する handleExist = false; // コテ選択セレクトボックス内のオプション要素分のループ処理 $("#handleList option").each(function() { // コテ選択セレクトボックスにコテが登録済みの場合 if($(this).text() == handle) { // コテ登録有りに設定する handleExist = true; // ループ処理を終了する return false; } }); // コテ選択セレクトボックスにコテが登録されていない場合 if(handleExist === false) { // コテ選択セレクトボックスにコテを登録する $("#handleList").append($("<option>").val("visible").html(handle).css("color", "green")); } // コテの表示状態を変更する changeVisible(handle, $(this)); } }); } // LoadComments()を上書きするためのwindowを取得する var root = typeof unsafeWindow == "undefined" ? window : unsafeWindow ; // Livetubeコメントロード関数を一部改変 root.LoadComments = function() { var http = $.ajax( { url: comment_shard_host + "/stream/" + comment_entry_id + ".comments." + $("#comments").children().length, type: "GET", cache: false }) .done(function(data, text_status, xhr) { var comment_index = $("#comments").children().length; var initial_load = comment_index == 0; var header_json = $.parseJSON(xhr.getResponseHeader("X-JSON")); if(data != null && data.length > 0 && header_json.n == comment_index) { /* 追加箇所 **********************************************/ // コメントのデータをDOM要素に変換する var dataOBJ = $.parseHTML(data); // 追加されるコメントを確認する checkComment(dataOBJ); /*********************************************************/ /* 変更箇所 **********************************************/ //$("#comments").append(data); // コメントのデータを追加する $("#comments").append(dataOBJ); /*********************************************************/ if(!$("#display_all_comments_check").is(":checked")) { ProcessDisplayAllComment(); } if(!initial_load && $("#auto_scroll_check").is(":checked")) { SmoothScroll($("#right_pane"), $("#right_pane_bottom")); } /* 変更箇所 **********************************************/ //$("#comments_num").text(comment_index + $.parseHTML(data).length); // コメント数を更新する $("#comments_num").text(comment_index + dataOBJ.length); /*********************************************************/ if(!$("#display_user_image_check").is(":checked")) { ToggleUserImage(); } if(header_json.vi && $("#viewing")) { $("#viewing").text(header_json.vi); } if(header_json.v && $("#view")) { $("#view").text(header_json.v); } if(header_json.cc) { if(header_json.marks) { DisplayMarks(header_json.marks, header_json.cc); if(header_json.mark_thresh) { DisplayMarkThresh(header_json.mark_thresh); } } else { CoolComment(header_json.cc); } } if(header_json.m && $("#mirrors_num")) { $("#mirrors_num").text(header_json.m); } if(header_json.b && $("#bands")) { $("#bands").text(header_json.b); } if(header_json.r && $("#mirrors")) { RenderRoutes(header_json.r); } } LoadComments(); }) .fail(function(xhr, text_status, error) { setTimeout(LoadComments, 4000); }); }; // 改変前のコメントロード関数で読み込んだコメントを確認する // 以降のコメントは改変後のコメントロード関数で確認される checkComment($("#comments").children()); })();