ageverification.dev — Abbreviation Helper

Document is almost unreadable with all its acronyms and abbreviations

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         ageverification.dev — Abbreviation Helper
// @namespace    fabulous.cupcake.jp.net
// @version      2025.07.27.3
// @description  Document is almost unreadable with all its acronyms and abbreviations
// @author       FabulousCupcake
// @match        https://ageverification.dev/*
// @grant        none
// ==/UserScript==

const ABBREVS = [
    ["AP", "Attestation Provider"],
    ["ARF", "Architecture and Reference Framework"],
    ["AV app", "Age Verification App"],
    ["AVI", "Age Verification App Instance"],
    ["AVAP", "Age Verification App Provider"],
    ["CA", "Certificate Authority"],
    ["DG CNECT", "Directorate General Network, Content and Technology"],
    ["eIDAS", "Electronic Identification, Authentication and Trust Services"],
    ["EU", "European Union"],
    ["EUDI", "European Digital Identity"],
    ["EUDIW /EUDI Wallet", "European Digital Identity Wallet"],
    ["LoA", "Level of Assurance"],
    ["U", "User"],
    ["RP", "Relying Party"],
    ["T-Scy", "Scytáles & T-Systems Age consortium"],
    ["WB", "Web Browser (or web app)"],
    ["ZKP", "Zero Knowledge Proof"],

    ["ETSI", "European Telecommunications Standards Institute"],
];

const applyAbbreviationHints = (string) => {
    let result = string;
    ABBREVS.forEach(a => {
        const [abbr, title] = a;
        const el = `<abbr title="${title}">${abbr}</abbr>`;
        const pattern = new RegExp(`([ (])${abbr}(s?[ .,;?!)])`, "g");
        result = result.replaceAll(pattern, `$1${el}$2`);
    });

    return result;
}

const processAllParagraphs = () => {
    const paragraphs = document.querySelectorAll(`article p`);
    paragraphs.forEach(p => {
        const walker = document.createTreeWalker(p, NodeFilter.SHOW_TEXT);
        while (true) {
            const node = walker.nextNode();
            if (!node) break;

            const el = applyAbbreviationHints(node.nodeValue);
            node.parentNode.insertAdjacentHTML("afterbegin", el);
            node.remove();
        }
    });
}

const main = () => {
    processAllParagraphs();
}

main();