Skriptit / superhissi.js

JavaScript-koodinpätkä superhissi.js toimii randomi.fi -palvelun Hissi-chathuoneessa antaen miltei jokaisen käyttäjän tekstille Hissin käyttäjätunnusluvun kahteen viimeiseen numeroon perustuvan uniikin väri-tyyliyhdistelmän (10 eri väriä normaalina tai kursiivina) ja muuttaa taustan miltei mustaksi, jotta värit erottuvat paremmin. Lisäksi käyttäjälista kutistuu tehden tilaa sen alle uutena ilmestyvälle minichatlogille, josta tekstit eivät poistu, vaikka niiden kirjoittaja bannataan. Näiden muutosten tarkoitus olisi helpottaa chatin seurantaa.

Versiossa 1.02 vanhat värit korvattu uusilla, tarkemmin harkituilla värellä. Jos joku vanhoja värejä kaipaa, ne olivat f3f3f3, f3c300, 9fcced, e68fac, c5b280, 8eb701, f48600, bf0131, 0067a6 ja 86568f.

Yleisluontoinen neuvo käyttäjäskriptejä koskien: käyttäjäskriptit varsinkin satunnaisemmasta lähteestä voivat sisältää haittakoodia, joten kannattaa copypastettaa ne tekoälylle tai parille ja kysyä, löytävätkö ne haittakoodia seasta.

// ==UserScript==
// @name         superhissi.js
// @version      1.02
// @description  Tunnuskohtainen väri/fontti ja sensuroimaton logi randomi.fi:n Hissiin
// @match        https://randomi.fi/chatroom/Hissi.html
// @run-at       document-end
// @grant        none
// ==/UserScript==

const style = document.createElement('style');
style.type = 'text/css';

style.innerHTML = `
.chat-window.userlist {
    max-height: 150px !important;
}
.panel.panel-default {
    background: #000000 !important;
}
.oldline:nth-child(even) {
    background-color: #0c0c0c !important;
}
.chat-window {
    border-color: #454545 !important;
}
.chat-window.userlist {
    color: #dddddd !important;
}
.small.oldtime {
    color: #dddddd !important;
}
.chatdata li .line2 {
    color: #7cb6ef !important;
}
.logi67 {
    margin-top: 10px;
    color: #ffffff !important;
    font: 12px monospace;
    overflow-y: auto;
    height: 200px;
    max-height: 200px;
}
.p67 {
    margin: 1px;
    padding: 1px;
    word-break: break-word;
}
`;

document.head.appendChild(style);

(function() {
    'use strict';

    let VARIT = {};
    VARIT = {
        0: '#ffffff', // Valkoinen, puhdas
        1: '#fcfc54', // Keltainen, EGA14
        2: '#54fcfc', // Vaaleansyaani, EGA11
        3: '#fd99fd', // Vaal.pun., oma EGA13-#ffffff 3-1 mix
        4: '#848484', // Harmaa, Kenneth L. Kelly
        5: '#00a800', // Vihreä, EGA2
        6: '#a85400', // Ruskea, EGA6
        7: '#fc5454', // Punainen, EGA12
        8: '#0067a6', // Sininen, Kenneth L. Kelly
        9: '#b93b86', // Purppura, oma EGA1-EGA12 1-1 mix
    };

    let TYYLIT = {};
    TYYLIT = {
        0: 'normal',
        1: 'italic',
        2: 'normal',
        3: 'italic',
        4: 'normal',
        5: 'italic',
        6: 'normal',
        7: 'italic',
        8: 'normal',
        9: 'italic',
    };

    function variRivi(rivi) {
        if (rivi.dataset.varitetty) return;
        const teksti = rivi.textContent;
        const [, toisViim, viimeinen] = teksti.match(/- \d*(\d)(\d):/) ?? [];
        if (viimeinen !== undefined && toisViim !== undefined) {
            rivi.style.color = VARIT[viimeinen];
            rivi.style.fontStyle = TYYLIT[toisViim];
            const teksti69 = rivi.textContent.trim();
            const p69 = document.createElement('p');
            p69.textContent = teksti69;
            p69.classList.add('p67');
            logi69.appendChild(p69);
            rivi.dataset.varitetty = '1';
        }
    }

    document.querySelectorAll('li.chat-line.oldline').forEach(variRivi);
    const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                if (node.nodeType !== 1) continue;
                if (node.matches('li.chat-line.oldline')) {
                    variRivi(node);
                }
                node.querySelectorAll?.('li.chat-line.oldline').forEach(variRivi);
            }
        }
    });

    const oikealla69 = document.querySelector('.col-sm-3.col-md-3.col-lg-2.chatblock2.hidden-xs');
    const logi69 = document.createElement('div');
    logi69.classList.add('logi67');
    oikealla69.appendChild(logi69);

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();