PTT Long Change

Change on PTT.cc.

// ==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.7.12
// @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{
height:31px;
display:inline-block;
transition: all 0.1s ease;
}
.push-userid:hover{
cursor:pointer;
}
.oPo{
position:absolute;
transition: all 0.1s ease;
display:inline-block;
cursor:pointer;
z-index:10;
}
.activeId{
background-color:#444;
border-radius:5px 5px 0px 0px;
}
.pushIdSelect{
background-color:navy;
}
a{
text-decoration:none;
}
a:visited{
color: #aaa;
}
a:hover{
color:black;
}
.pwe-floor{
position:absolute;
left:-4.5em;
width:4em;
text-align:right;
color:gray;
}
.pwe-hover{
border-radius:5px 0px 0px 5px;
text-align:center;
background-color:black;
color:white;
border:1.5px solid grey;
z-index: 5;
}
.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: 10;
white-space: nowrap;
display:none;
}
.drop-menu{
display: block;
padding: 1ex;
color: #aaa;
line-height: 1em;
}
.overlay{
position: absolute;
z-index:2;
background-color:#404040;
border-radius:3px 3px 3px 3px;
width:100%;
}
.overlay:hover, .title:hover{
background-color:#C0C0C0;
color:black;
cursor:pointer;
}
img{
cursor:pointer;
}
` );


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

$(document).ready(function(){
     var findA=$('a');
    var key=false;
    for(var aItem=0;aItem< findA.length;aItem++)
    {
        var aTarget=$('a').eq(aItem);
        if(/(?=.*imgur\.com\/a\/)/.test(aTarget.prop('href'))){
            setTimeout(mainF, 5000);
            key=true;
            break;
        }
    }
    if(!key){
        mainF();
    }
    //top bar
     $(document).scroll(function() {
         if( $(this).scrollTop() == 0 ){
             if($('#topbar-container').hasClass("topbar")){
                 $('#topbar-container').removeClass('topbar');
             }
         }
         else{
             if(!$('#topbar-container').hasClass("topbar")){
                 $('#topbar-container').addClass('topbar');
             }
         }
  });
});

function mainF(){
    //自動skip已滿18頁面
    if( $('.btn-big').length  > 0){$('.btn-big')[0].click();}
    //背景塗黑
    $('body').css('background-color','black');
    //頂端bar隱形樣式
    //$('#topbar-container').addClass('topbar');
    //$("#topbar").css({"background-color":"#0c0a66"})
    //底部bar去除
    $('#navigation-container').remove();
    //頂端bar右邊兩個去除
    //$(".right:contains('關於我們')").after('<input type="color" id="html5colorpicker" onchange="clickColor(0, -1, -1, 5)" value="#113f1b" style="width:5%;">');
    $('.right').remove();
    //$("#html5colorpicker").addClass("right").addClass("small");

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

    //真‧推文的樓層
    var floorTop=$('.f2:contains("※ 發信站: 批踢踢實業坊")');
    var pushes;
    if(floorTop.length>0){
        pushes = floorTop.nextAll('.push');
    }
    else{
        pushes = $('.push');
    }
    var snNormal=0,snPush=0,snBad=0,snString='',hoverColor='';
    for(var i = 0; i<pushes.length; i++){
        var iNum = i + 1;
        var oMain=pushes.eq(i);
        if(oMain.children('.push-tag').length > 0)
        {
        //push-tag:'→ ','推 ','噓 '
        switch(oMain.children('.push-tag').text())
        {
            case '→ ':
                snNormal++;
                snString='第 '+snNormal+' <span style="color:#f66;">→</span>';
                hoverColor = 'white';
                break;
            case '推 ':
                snPush++;
                snString='第 '+snPush+' 推';
                hoverColor = 'white';
                break;
            case '噓 ':
                snBad++;
                snString='第 '+snBad+' 噓';
                hoverColor = '#f66';
                break;
        }
        var sPush = "<span class='pwe-floor' data-hover='"+snString+"' data-color='"+hoverColor+"'>"+iNum+" 樓 </span>";
        oMain.prepend(sPush);
        oMain.hover(function(){
            var oFinal=$(this).children('.pwe-floor');
            var oPushTag=$(this).children('.push-tag');
            oFinal.attr('data-floor',$(this).children('.pwe-floor').text());
            //oFinal.text(oFinal.attr('data-hover').replace(/\ /g, ''));
            oFinal.html(oFinal.attr('data-hover'));
            var oLeft = oFinal.position().left;
            var tagWidth = oPushTag.width();
            var tagLeft = oPushTag.position().left;
            var setWidth = (tagLeft+tagWidth-oLeft-16)+'px';
            oFinal.css('width',setWidth);
            oFinal.css('color',oFinal.attr('data-color'));
            oFinal.addClass('pwe-hover');
        },function(){
            var oFinal=$(this).children('.pwe-floor');
            oFinal.html(oFinal.attr('data-floor'));
            oFinal.css({'width':'','color':''});
            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 oPo=$('#main-content').find('.article-meta-tag:contains("作者")').next();
    var oPoName = oPo.text().trim().split(' ')[0];
    oPo.attr('id',oPoName);
    oPo.addClass('oPo');
    oPo.addClass(oPoName);
    oPo.click(activeColor);
    oPo.click(dropDownMenu);

    //更改標題為連結同標題看板搜尋
    var title =$('#main-content').find('.article-meta-tag:contains("標題")').next();
    var linktitle = title.text().replace('Re:','').trim();//去掉Re:的標題名稱
    title.addClass('title');
    title.click(function(){
        window.location.href = 'https://www.ptt.cc/bbs/'+board+'/search?q=thread%3A'+linktitle;
    });

    //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');
        }
    }
    //Img點擊縮小放大
    $("img").click(slide);

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

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

    //移除"本網站已依台灣網站內容分級規定處理。此區域為限制級,未滿十八歲者不得瀏覽。"字眼
    $('.bbs-footer-message').remove();
};

function changeColor(){
    var id = $(this).children('.push-userid').prop('id');
    var target = $('.'+id).parent();
    if(target.hasClass('pushIdSelect')){
        target.removeClass('pushIdSelect');
    }
    else{
        $('.pushIdSelect').removeClass('pushIdSelect');
        target.addClass('pushIdSelect');
    }
};
function activeColor(){
     var target = $(this);
    if(!target.hasClass('activeId')){
        $('.oPo').removeClass('activeId',100);
        $('.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({left:left}, 100, 'linear');
        idDropDown.animate({top:top}, 100, 'linear');
    }
    else{
        idDropDown.css('top',top);
        idDropDown.css('left',left);
        idDropDown.fadeIn(150);
        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 PTT '+sId+'</a>';
    sHtml += '<a href="https://www.google.com/search?q='+sId+'" target="_blank" class="drop-menu" >Google '+sId+'</a>';
    sHtml += '</div></div>';
    $('.id_dropDown').html(sHtml);
}

function slide(){
    var target=$(this);
    if(!target.hasClass('imgSmall')){
        var pxHeight;
        var pxWidth;
        if(!target.hasClass('overDiv')){
            pxHeight = target.height()+'px';
            pxWidth = target.width();
            //var divWidth = target.parent().width()/2-pxWidth/2;
            target.parent().css('text-align','center');
            target.before('<div class="overlay">'+target.prop('src')+'</div>');
            target.prev().css('height','25px');
            //target.prev().css({'height':'25px','width':pxWidth+'px','left':divWidth+'px'});
            target.prev().click(clickDiv);
        }
        else{
            target.prev().show();
        }
        target.attr('data-height',pxHeight);
        target.addClass('imgSmall');
        target.addClass('overDiv');
        target.animate({width:pxWidth+'px'},1);
        target.animate({height:"0px"},100);
    }
}

function clickDiv(){
     var target=$(this).next();
    $(this).hide();
    if(target.hasClass('imgSmall')){
        target.removeClass('imgSmall');
        target.animate({height:target.attr('data-height')},101);
    }
}

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