PTT Long Change

Change on PTT.cc.

当前为 2018-06-02 提交的版本,查看 最新版本

// ==UserScript==
// @name        	PTT Long Change
// @description     Change on PTT.cc.
// @author          Lalong
// @include       	https://www.ptt.cc/bbs/*
// @include       	https://www.ptt.cc/man/*
// @include       	https://www.ptt.cc/ask/over18*
// @version       	2.0.0
// @require         https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @namespace       https://greasyfork.org/zh-TW/scripts/33714-ptt-long-change
// @grant			GM_addStyle
// ==/UserScript==

GM_addStyle ( `
.topbar{
background-color:rgba(0, 0, 136, 0.4);opacity: 0;transition: opacity 0.3s;
}
.topbar:hover{
background-color:rgba(10, 106, 196, 0.4);opacity:1;
}
.push-userid:hover{
cursor:pointer;
}
.push-userid.activeId{
background-color:#444;
}
.pushIdSelect{
background-color:navy;
}
.pwe-floor{
position:absolute;left:-4.5em;width:4em;text-align:right;color:gray;
}
a{
text-decoration:none;
}
.pwe-hover{
width:auto;
color:white;
background-color:grey;
}
.id-backColor{
background-color:#113f1b;
}
.id-backColor.pushIdSelect{
background-color:navy;
}
.id_dropDown{
border-radius:0px 10px 10px 10px;
position: absolute;
background-color: #444;
z-index: 90;
white-space: nowrap;
display:none;
}

.drop-menu{
display: block;
padding: 1ex;
color: #aaa;
line-height: 1em;
}
` );

var board = $('.board').eq(0).text().split(' ')[1];//看板名稱

$(document).ready(function(){

    //skip已滿18自動
    if( $('.btn-big').length  > 0){$('.btn-big')[0].click();}
    //背景塗黑
    $('body').css('background-color','black');
    //頂端bar隱形樣式
    $('#topbar-container').addClass('topbar');
    //底部bar去除
    $('#navigation-container').remove();
    //頂端bar右邊兩個去除
    $('.right').remove();

    var poName =$('.article-meta-value').eq(0).text().split(' ')[0];

    //真‧推文的樓層
    var pushes = $('.f2').nextAll('.push');
    var snNormal=0,snPush=0,snBad=0,snString='';
    for(var i = 0; i<pushes.length; i++){
        var iNum = i + 1;
        var oMain=pushes.eq(i);
        //push-tag:'→ ','推 ','噓 '
        switch(oMain.children('.push-tag').text())
        {
            case '→ ':
                snNormal++;
                snString='第 '+snNormal+' → ';
                break;
            case '推 ':
                snPush++;
                snString='第 '+snPush+' 推 ';
                break;
            case '噓 ':
                snBad++;
                snString='第 '+snBad+' 噓 ';
                break;
        }
        var sPush = "<span class='pwe-floor' data-hover='"+snString+"'>"+iNum+"樓 </span>";
        oMain.prepend(sPush);
        oMain.hover(function(){
            var oFinal=$(this).children('.pwe-floor');
            oFinal.attr('data-floor',$(this).children('.pwe-floor').text());
            oFinal.text(oFinal.attr('data-hover'));
            oFinal.addClass('pwe-hover');
        },function(){
            var oFinal=$(this).children('.pwe-floor');
            oFinal.text(oFinal.attr('data-floor'));
            oFinal.removeClass('pwe-hover');
        });
    }

    //先append div
    var dropDownHtml='<div class="id_dropDown"></div>';
    $('body').append(dropDownHtml);

    //含簽名檔的推文ID變色
    var pushesAll=$('.push');
    for(var j=0; j<pushesAll.length; j++){
        var pushesAllId = pushesAll.eq(j).children('.push-userid');
        var pushEqJ=pushesAll.eq(j);
        var id = pushesAllId.text().trim();
        if(id == poName){ //作者推文底色
            pushEqJ.addClass('id-backColor');
        }
        //推文設定id
        pushesAllId.attr('id',id);
        pushesAllId.addClass(id);
        pushEqJ.click(changeColor);
        pushesAllId.click(activeColor);
        pushesAllId.click(dropDownMenu);
    }

    body_click();

    //更改標題為連結同標題看板搜尋
    var article_meta = $('.article-meta-value').eq(2);
    var title = article_meta.text();//標題名稱
    var linktitle = title.replace('Re:','').trim();//去掉Re:的標題名稱
    article_meta.html('<a href="https://www.ptt.cc/bbs/'+board+'/search?q=thread%3A'+linktitle+'">'+title+'</a>');

    //Imgur網址隱藏(ptt網頁版會自動開圖)
    var allA=$('a');
    for(var aItem=0;aItem< allA.length;aItem++)
    {
        var aTarget=$('a').eq(aItem);
        if(/(?=.*imgur)/.test(aTarget.prop('href'))){
            aTarget.css('color','black');
        }
    }

    //去除低調
    $('.f0').removeClass('f0');

    //自動更新推文打開
    $('#article-polling').click();

})();

function changeColor(){
    var id = $(this).children('.push-userid').prop('id');
    var target = $('.'+id).parent();
    if(target.hasClass('pushIdSelect')){
        target.removeClass('pushIdSelect');
    }
    else{
        $('.push').removeClass('pushIdSelect');
        target.addClass('pushIdSelect');
    }
};
function activeColor(){
     var target = $(this);
    if(!target.hasClass('activeId')){
        $('.push-userid').removeClass('activeId');
        target.addClass('activeId');
    }
};
function dropDownMenu(){
    var _this=$(this);
    _this.addClass('NowDropDown');
    var idDropDown=$('.id_dropDown');
    var iOffset=_this.offset();
    var top=iOffset.top+_this.outerHeight();
    var left=iOffset.left;

    if(idDropDown.hasClass('menuShow')){
        idDropDown.animate({top:top}, 100, 'linear');
        idDropDown.animate({left:left}, 100, 'linear');
    }
    else{
        idDropDown.css('top',top);
        idDropDown.css('left',left);
        idDropDown.fadeIn(100);
        idDropDown.addClass('menuShow');
    }
    writeDropMenu(_this.prop('id'));
};

function writeDropMenu(sId){
    //var sBoard=$('.article-metaline-right').find('.article-meta-value').text().trim();
    var sHtml='';
    sHtml += '<div>';
    sHtml += '<a href="/bbs/'+board+'/search?q=author:'+sId+'" class="drop-menu">Search 此板 '+sId+' 的文章</a>';
    sHtml += '<a href="/bbs/ALLPOST/search?q=author:'+sId+'" class="drop-menu">Search ALLPOST 板 '+sId+' 的文章</a>';
    sHtml += '<a href="https://www.google.com/search?q=site%3Aptt.cc%20'+sId+'" target="_blank" class="drop-menu">Google '+sId+'</a>';
    sHtml += '</div></div>';
    $('.id_dropDown').html(sHtml);
}

function body_click(){
    $(document).on('click', function (evt) {
        if(!$(evt.target).parent().parent().hasClass('id_dropDown') && !$(evt.target).hasClass('NowDropDown')){
             $('.push-userid').removeClass('activeId',100);
            $('.NowDropDown').removeClass('NowDropDown');
            $('.id_dropDown').removeClass('menuShow');
            $('.id_dropDown').fadeOut(100);
        }
    });
};