您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
スレ本文を検索してカタログでスレッド監視しちゃう
当前为
// ==UserScript== // @name futaba_thread_highlighter // @namespace https://github.com/himuro-majika // @description スレ本文を検索してカタログでスレッド監視しちゃう // @include http://*.2chan.net/*/futaba.php?mode=cat* // @version 1.5 // @require http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPUExURYv4i2PQYy2aLUe0R////zorx9oAAAAFdFJOU/////8A+7YOUwAAAElJREFUeNqUj1EOwDAIQoHn/c88bX+2fq0kRsAoUXVAfwzCttWsDWzw0kNVWd2tZ5K9gqmMZB8libt4pSg6YlO3RnTzyxePAAMAzqMDgTX8hYYAAAAASUVORK5CYII= // ==/UserScript== this.$ = this.jQuery = jQuery.noConflict(true); (function ($) { var serverName = document.domain.match(/^[^.]+/); var pathName = location.pathname.match(/[^/]+/); var serverFullPath = serverName + "_" + pathName; var akahukuloadstat; init(); function init(){ console.log("futaba_thread_highlighter commmon: " + GM_getValue("_futaba_thread_search_words", "")); console.log("futaba_thread_highlighter indivisual: " + getCurrentIndivValue()); GM_registerMenuCommand("スレッド検索ワード編集", editWords); setStyle(); makecontainer(); makeConfigUI(); highlight(); setInterval(check_akahuku_reload, "100"); } /* *設定画面表示 */ function editWords(){ var word_commmon = GM_getValue("_futaba_thread_search_words", ""); var word_indiv = getCurrentIndivValue(); $("#futaba_thread_highlighter_searchword_common").val(word_commmon); $("#futaba_thread_highlighter_searchword_individual").val(word_indiv); var $config_container_ = $("#futaba_thread_highlighter_config_container"); $config_container_.fadeIn(100); } /* * 表示中の板の個別検索ワードの取得 */ function getCurrentIndivValue() { var indivobj = getIndivObj(); var str_CurrentIndiv; if(indivobj !== "") { str_CurrentIndiv = indivobj[serverFullPath]; } else { str_CurrentIndiv = ""; } return str_CurrentIndiv; } /* * 板毎の個別検索ワードのオブジェクトを取得 */ function getIndivObj() { var indivVal = GM_getValue("search_words_indiv", ""); var obj_indiv; if(indivVal !== "") { obj_indiv = JSON.parse(indivVal); } else { obj_indiv = ""; } return obj_indiv; } /* * 検索ワードを設定 */ function setSearchWords() { var input_common = $("#futaba_thread_highlighter_searchword_common").val(); var input_indiv = $("#futaba_thread_highlighter_searchword_individual").val(); GM_setValue("_futaba_thread_search_words", input_common); console.log("futaba_thread_highlighter: common searchword updated - " + input_common); setIndivValue(input_indiv); $("#futaba_thread_highlighter_config_container").fadeOut(100); highlight(true); /* * 板毎の個別検索ワードを保存 */ function setIndivValue(val) { var obj_indiv = getIndivObj(); if(obj_indiv === ""){ obj_indiv = {}; } obj_indiv[serverFullPath] = val; var jsonstring = JSON.stringify(obj_indiv); GM_setValue("search_words_indiv", jsonstring); console.log("futaba_thread_highlighter: indivisual searchword updated@" + serverFullPath + " - " + val); } } /* *スレピックアップ表示エリアの設定 */ function makecontainer() { var $pickup_thread_area = $("<div>", { id: "futaba_thread_highlighter_container" }); $("body > table[align]").before($pickup_thread_area); var $container_header = $("<div>", { id: "futaba_thread_highlighter_container_header", text: "スレッド検索該当スレッド", css: { "background-color": "#F0E0D6", fontWeight: "bolder" } }); $pickup_thread_area.append($container_header); //設定ボタン var $button = $("<span>", { id: "futaba_thread_highlighter_searchword", text: "[設定]", css: { cursor: "pointer", }, click: function() { editWords(); } }); $button.hover(function () { $(this).css({ backgroundColor:"#EEAA88" }); }, function () { $(this).css({ backgroundColor:"#F0E0D6" }); }); $container_header.append($button); var $pickup_thread_container = $("<div>", { id: "futaba_thread_highlighter_highlighted_threads", css: { "display": "flex", "flex-wrap": "wrap", } }); $pickup_thread_area.append($pickup_thread_container); } /* * 設定画面 */ function makeConfigUI() { var $config_container = $("<div>", { id: "futaba_thread_highlighter_config_container", css: { position: "fixed", "z-index": "1001", left: "50%", top: "50%", "margin-left": "-400px", "margin-top": "-50px", "background-color": "rgba(240, 192, 214, 0.95)", width: "800px", //height: "100px", display: "none", fontWeight: "normal", "box-shadow": "3px 3px 5px #853e52", "border": "1px outset", "border-radius": "10px", "padding": "5px", } }); $("#futaba_thread_highlighter_container_header").append($config_container); $config_container.append( $("<div>").css("text-align", "center").append( $("<div>").text("スレ本文に含まれる語句を入力してください。 | を挟むと複数指定できます。正規表現使用可。"), $("<div>").text("例 : ").append( $("<span>").text("妹がレイ|悪魔がおる|みなもちゃんかわいい|つまんね").css({ "background-color": "#ffeeee", }) ) ), $("<div>").css("margin-top", "1em").append( $("<div>").append( $("<label>").text("全板共通").attr("for", "futaba_thread_highlighter_searchword_common"), $("<input>").attr("id","futaba_thread_highlighter_searchword_common").css("width", "54em") ), $("<div>").append( $("<label>").text("各板個別").attr("for", "futaba_thread_highlighter_searchword_individual"), $("<input>").attr("id","futaba_thread_highlighter_searchword_individual").css("width", "54em") ) ), $("<div>").css({ "text-align": "center", "margin-top": "1em", }).append( $("<span>").css("margin-right", "1em").append( $("<input>", { class: "futaba_thread_highlighter_config_button", type: "button", val: "更新", click: function(){ setSearchWords(); }, }) ), $("<span>").css("margin-left", "1em").append( $("<input>", { class: "futaba_thread_highlighter_config_button", type: "button", val: "キャンセル", click: function(){ $config_container.fadeOut(100); }, }) ) ) ); $(".futaba_thread_highlighter_config_button").css({ "cursor": "pointer", "background-color": "#FFECFD", "border": "2px outset #96ABFF", "border-radius": "5px", }).hover(function() { $(this).css("background-color", "#CCE9FF"); }, function() { $(this).css("background-color", "#FFECFD"); }); } /* *赤福の動的リロードの状態を取得 */ function check_akahuku_reload() { if ( get_akahuku_reloading_status() === 0 || get_akahuku_reloading_status() == 1 ) { akahukuloadstat = true; } else if ( get_akahuku_reloading_status() == 2 || get_akahuku_reloading_status() == 3 ) { if ( akahukuloadstat ) { highlight(); } akahukuloadstat = false; } function get_akahuku_reloading_status() { var $acrs = $("#akahuku_catalog_reload_status"); //赤福 var $fvw = $("#fvw_mes"); //ふたクロ var relstat; if ( $acrs.length ) { //赤福 if ( $acrs.text().match(/ロード中/) ) { relstat = 0; } else if ( $acrs.text().match(/更新中/) ) { relstat = 1; } else if ( $acrs.text().match(/完了しました/) ) { relstat = 2; } else { relstat = 3; } } if ( $fvw.length ){ //ふたクロ if ( $fvw.text().match(/Now Loading/) ) { relstat = 0; } else if ( $fvw.text().match(/更新しました/) ) { relstat = 2; } else { relstat = 3; } } return relstat; } } /* *カタログを検索して強調表示 */ function highlight(isWordsChanged) { var Start = new Date().getTime();//count parsing time var words = ""; var words_common = GM_getValue("_futaba_thread_search_words", ""); var words_indiv = getCurrentIndivValue(); if( words_common !== "" ) { words += words_common; if( words_indiv !== "" ) { words += "|" + words_indiv; } } else { words += words_indiv; } //console.log(words); try { var re = new RegExp(words, "i"); } catch (e) { alert("検索ワードのパターンが無効です\n\n" + e); editWords(); return; } if( words !== "" ) { removeOldHighlighted(); $("body > table[align] td small").each(function(){ if( $(this).text().match(re) ) { if ( !$(this).children(".futaba_thread_highlighter_matchedword").length ) { $(this).html($(this).html().replace(re, "<span class='futaba_thread_highlighter_matchedword'>" + $(this).text().match(re) + "</span>")); } if ( $(this).parent("a").length ) { //文字スレ $(this).parent().parent("td").addClass("futaba_thread_highlighter_highlighted"); } else { $(this).parent("td").addClass("futaba_thread_highlighter_highlighted"); } } }); pickup_highlighted(); } else { removeOldHighlighted(); pickup_highlighted(); } function removeOldHighlighted() { if(isWordsChanged) { $(".futaba_thread_highlighter_highlighted").removeClass("futaba_thread_highlighter_highlighted"); $(".futaba_thread_highlighter_matchedword").each(function(){ $(this).replaceWith($(this).text()); }); } } console.log('futaba_thread_highlighter - Parsing@' + serverFullPath + ': '+((new Date()).getTime()-Start) +'msec');//log parsing time } /* *強調表示したスレを先頭にピックアップ */ function pickup_highlighted() { if ( $("#futaba_thread_highlighter_highlighted_threads .futaba_thread_highlighter_pickuped").length ) { $("#futaba_thread_highlighter_highlighted_threads .futaba_thread_highlighter_pickuped").remove(); } var highlighted = $("body > table .futaba_thread_highlighter_highlighted").clone(); $("#futaba_thread_highlighter_highlighted_threads").append(highlighted); //要素の中身を整形 highlighted.each(function(){ if ( !$(this).children("small").length ) { //文字スレ //console.log($(this).children("a").html()); //$(this).children("a").replaceWith("<div class='futaba_thread_highlighter_pickuped_caption'>" + $(this).html() + "</div>"); } else { $(this).children("small").replaceWith("<div class='futaba_thread_highlighter_pickuped_caption'>" + $(this).children("small").html() + "</div>"); $(this).children("br").replaceWith(); } $(this).replaceWith("<div class='futaba_thread_highlighter_pickuped'>" + $(this).html() + "</div>"); }); var $pickuped = $(".futaba_thread_highlighter_pickuped"); $pickuped.each(function(){ var width = $(this).find("img").attr("width"); $(this).css({ //スレ画の幅に合わせる width: width, }); }); } /* *スタイル設定 */ function setStyle() { var css = //マッチ文字列の背景色 ".futaba_thread_highlighter_matchedword {" + " background-color: #ff0;" + "}" + //セルの背景色 ".futaba_thread_highlighter_highlighted {" + " background-color: #FFDFE9 !important;" + "}" + //ピックアップスレ ".futaba_thread_highlighter_pickuped {" + " min-width: 70px;" + " margin: 1px;" + " background-color: #FFDFE9;" + " border-radius: 5px;" + " word-wrap: break-word;" + "}" + //ピックアップスレ本文 ".futaba_thread_highlighter_pickuped_caption {" + " font-size: small;" + " background-color: #ffdfe9;" + "}"; GM_addStyle(css); } })(jQuery);