ETI Sig Fader

fades sigs

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        ETI Sig Fader
// @namespace   pendevin
// @description fades sigs
// @include     http://boards.endoftheinter.net/showmessages.php*
// @include     http://archives.endoftheinter.net/showmessages.php*
// @include     http://endoftheinter.net/inboxthread.php*
// @include     https://boards.endoftheinter.net/showmessages.php*
// @include     https://archives.endoftheinter.net/showmessages.php*
// @include     https://endoftheinter.net/inboxthread.php*
// @require     http://code.jquery.com/jquery-2.1.3.min.js
// @version     2.2
// @grant       none
// ==/UserScript==


//this is the opacity level you want in percentage. 100 is fully opaque (normal). 0 is fully transparent.
const SIG_OPACITY = 50;
//to change the color of the sig text, set USE_SIG_COLOR to true and change SIG_COLOR to your desired color (hex values like #000000 are fine)
const USE_SIG_COLOR = false;
const SIG_COLOR = 'black';
//if you want the sig to go to full opacity (like normal) when you mouse over it, set this to true
const SIG_FADE_IN = true;

//any other styles you want to apply to sigs can be added to elements with class sig


//ll breaks without noconflict jquery
this.$ = this.jQuery = jQuery.noConflict(true);

//adds a style to a document and returns the style object *JQUERY
//css is a string, id is an optional string that determines the object's id
function addStyle(css, id) {
    //create a style
    var style = $('<style type="text/css">');
    //add the css data to it
    style.html(css);
    if (id) {
        //remove any style that has our id
        $('#' + id).remove();
        //give our style the id after removing the other stuff. idk if it matters, but i'm too lazy to find out
        style.attr('id', id);
    }
    //add the style into the head
    $('head').append(style);
    //we're outta here
    return style;
}

//livelinks compatiblity *JQUERY
//calls the function on each message-container in a document, including ones added by livelinks
//place is an optional specialized location
function livelinks(func, extraParams, place) {
    if (extraParams == undefined) {
        extraParams = null;
    }
    if (place == undefined) {
        place = '.message-container';
    }
    //run the function on the message-containers currently on the page
    $('#u0_1 ' + place).each(function(i, container) {
        func(container, extraParams);
    });
    //run it on any message-containers added in the future
    $('#u0_1').on(
        'DOMNodeInserted',
        extraParams,
        function(e) {
            if ($(e.target).children(place).length) {
                $(e.target).children(place).each(function(i, container) {
                    func(container, e.data);
                });
            }
        }
    );
}

//puts sigs into their own element for easier styling
function processSigs(place) {
    place = $(place);
    var message = place.find('td.message');
    //make sure we haven't already done this
    if (!message.find('.sig').length) {
        //make sig container
        var sig = $('<span class="sig">');
        message.append(sig);
        //find the sig belt
        //this should be the last sig belt on the block
        var sigBelt = message.contents().filter(function(i) {
            if (this.textContent.search('^\n?---$') == 0) {
                return true;
            } else {
                return false;
            }
        }).last();
        //fallback for if there isn't a sig belt
        var sigIndex = message.contents().length;
        if (sigBelt.length) {
            var sigIndex = message.contents().index(sigBelt);
        }
        //stuff junk in sig container
        message.contents().slice(sigIndex).appendTo(sig);
    }

    //fuck with what happens when you hit the quote button because normal luelinks can't handle dese sigs
    var quote = place.find('.message-top > a[href*="&quote="]');
    //probably don't have to do this but you know just as a reminder that i ain't doin that shit or something
    quote.removeAttr('onclick');
    //the normal quote function
    var quoteFunc = function() {
        return window.QuickPost.publish('quote', quote[0]);
    };
    //move the sig belt out where it will be recognized, run the quote function, then move it back in
    quote.on('click', function(e) {
        e.preventDefault();
        sigBelt.insertBefore(sig);
        quoteFunc();
        sig.prepend(sigBelt);
    });
}

//fade the sigs
var css = '\
    .sig{\
        opacity:' + SIG_OPACITY / 100 + ';\
    }\
';
if (USE_SIG_COLOR) {
    css += '\
        .sig{\
            color:' + SIG_COLOR + ';\
        }\
    ';
}
if (SIG_FADE_IN) {
    css += '\
        .sig:hover{\
            opacity:1;\
        }\
    ';
}
addStyle(css, 'sigFader');

//activate the thing
livelinks(processSigs);