您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Livetube配信での目障りな緑コテによるコメントの表示/非表示設定機能を提供する
- // ==UserScript==
- // @name Livetube Handle Cleaner
- // @namespace https://greasyfork.org/ja/users/8279-nistim
- // @version 0.21
- // @description Livetube配信での目障りな緑コテによるコメントの表示/非表示設定機能を提供する
- // @author nistim
- // @match *://livetube.cc/*/*
- // @match *://*.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());
- })();