2chScript

ブラウザから見る2ch.netを強化(新鯖のみ対応)

Version au 24/01/2017. Voir la dernière version.

// ==UserScript==
// @name         2chScript
// @namespace    https://greasyfork.org/ja/users/94414
// @version      0.1
// @description  ブラウザから見る2ch.netを強化(新鯖のみ対応)
// @author       Petitsurume
// @match        http://*.2ch.net/test/read.cgi/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js
// @grant   GM_getValue
// @grant   GM_setValue
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    $(function(){
        var ng_ids = JSON.parse(GM_getValue("2ch_ng_ids","[]"))
        var filter_flag=false
        console.log("NG:",ng_ids)
        function setNGCSS(){
            ng_ids.forEach(function(id){
                var $post = $('.post[data-userid="'+id+'"]')
                $post.find(".name").html("<b>あぼーん</b>")
                $post.find(".message").text("あぼーん")
                $post.find(".date").text("あぼーん(UserScript)")
            })
        }
        function addNG(id){
            ng_ids.push(id)
            GM_setValue("2ch_ng_ids",JSON.stringify(ng_ids))
            setNGCSS()
        }
        $(".post").each(function(){
            var $post = $(this)
            var $date = $post.find(".date")
            var $message = $post.find(".message")
            var userid = $post.data("userid")
            // 発言カウンター
            var $$counter = $("<span>")
            if($('.post[data-userid="'+userid+'"]').length > 5) $$counter.css("color","#a00"); else $$counter.css("color","#888")
            var count = "??"
            var _count=0
            $('.post[data-userid="'+userid+'"]').each(function(){
                _count++
                if($(this).data("id") == $post.data("id")) count=_count
            })
            $$counter.text(" ("+count+"/"+($('.post[data-userid="'+userid+'"]').length)+"回発言)")
            $date.append($$counter)
            // NGリンク
            var $$ng_link = $("<a>")
            $$ng_link.attr("href","#."+Math.random())
            $$ng_link.text("[IDをNG]")
            $$ng_link.css("margin-left","0.5em")
            $$ng_link.click(function(e){
                e.preventDefault()
                if(!confirm(userid+"をNGします")) return
                addNG($post.data("userid"))
            })
            $date.append($$ng_link)
            // 抽出リンク
            var $$filter_link = $("<a>")
            $$filter_link.attr("href","#."+Math.random())
            $$filter_link.text("[IDで抽出]")
            $$filter_link.css("margin-left","0.5em")
            $$filter_link.addClass("filter_link")
            $$filter_link.click(function(e){
                e.preventDefault()
                if(filter_flag){
                    filter_flag=false
                    $(".filter_link").text("[IDで抽出]")
                    $(".post").removeClass("filter_gisei")
                    return
                }
                $(".post").each(function(){
                    var $post=$(this)
                    if($post.data("userid") != userid) $post.addClass("filter_gisei")
                })
                $(".filter_link").text("[抽出をやめる]")
                filter_flag = true
            })
            $date.append($$filter_link)
            // リンク解析
            var $preview = $("<div>")
            $message.append($preview)
            $message.find("a").each(function(){
                var $link = $(this)
                var url =  $link.text()
                var hostname = $("<a>").attr("href",$link.text()).get(0).hostname
                if($link.text().substring(0,2) == ">>") { // アンカー
                    $link.attr("href",location.href.replace(location.hash,"")+"#"+$link.text().substring(2))
                    $link.attr("target","")
                }
                if(hostname == "i.imgur.com") { // imgur プレビュー
                    var $$img_a = $("<a>")
                    var $$img = $("<img>")
                    $$img.attr("src",url)
                    $$img_a.attr("href",url)
                    $$img.css("width","3em")
                    $$img.css("height","3em")
                    $$img_a.attr("target","_blank")
                    $$img_a.append($$img)
                    $preview.append($$img_a)
                }
            })
        })
        $("body").append($("<style>.filter_gisei{display:none;}</style>"))
        setNGCSS()
    })
})();