Przejdź do zawartości

Wikipedysta:Zamkorus/Gadget-ProtectionIndicators.js

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez Zamkorus (dyskusja | edycje) o 05:22, 19 lis 2023. Może się ona znacząco różnić od aktualnej wersji.

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5.
  • Opera: Naciśnij klawisze Ctrl+F5.
// Część kodu pochodzi z https://www.wikidata.org/wiki/MediaWiki:Gadget-ProtectionIndicators.js
// Reszta mojego autorstwa z pomocą ChataGPT
(function (mw, $) {
    // Obiekt przechowujący tłumaczenia dla różnych języków
    var messages = {
        en: {
            "gadget-protection-autoconfirmed-null": "This page can only be edited by autoconfirmed users, editors, administrators, and bots (low level of protection).",
            "gadget-protection-editeditorprotected-null": "This page can only be edited by editors, administrators, and bots (medium level of protection).",
            "gadget-protection-sysop-null": "This page can only be edited by administrators (high level of protection).",
            "gadget-protection-null-autoconfirmed": "This page can only be moved by autoconfirmed users, editors, administrators, and bots.",
            "gadget-protection-null-editeditorprotected": "This page can only be moved by editors, administrators, and bots.",
            "gadget-protection-null-sysop": "This page can only be moved by administrators.",
            "gadget-protection-autoconfirmed-autoconfirmed": "This page can only be edited and moved by autoconfirmed users, editors, administrators, and bots (low level of protection).",
            "gadget-protection-editeditorprotected-editeditorprotected": "This page can only be edited and moved by editors, administrators, and bots (medium level of protection).",
            "gadget-protection-sysop-sysop": "This page can only be edited and moved by administrators (high level of protection).",
            "gadget-protection-autoconfirmed-editeditorprotected": "This page can only be edited by autoconfirmed users, editors, administrators, and bots, and moved by editors, administrators, and bots.",
            "gadget-protection-editeditorprotected-autoconfirmed": "This page can only be edited by editors, administrators, and bots, and moved by autoconfirmed users, editors, administrators, and bots.",
            "gadget-protection-sysop-autoconfirmed": "This page can only be edited by administrators, and moved by autoconfirmed users, editors, administrators, and bots.",
            "gadget-protection-autoconfirmed-sysop": "This page can only be edited by autoconfirmed users, editors, administrators, and bots, and moved by administrators.",
            "gadget-protection-editeditorprotected-sysop": "This page can only be edited by editors, administrators, and bots, and moved by administrators.",
            "gadget-protection-sysop-editeditorprotected": "This page can only be edited by administrators, and moved by editors, administrators, and bots.",
            "gadget-protection-autoconfirmedcreate": "This page can only be created by autoconfirmed users, editors, and administrators.",
            "gadget-protection-editeditorprotectedcreate": "This page can only be created by editors and administrators.",
            "gadget-protection-admincreate": "This page can only be created by administrators.",
            "gadget-protection-null-null": "Error occured while showing this comment. Please try again later.",
        },
        de: {
            "gadget-protection-autoconfirmed-null": "Diese Seite ist halbgeschützt.",
            "gadget-protection-sysop-null": "Diese Seite ist vollgeschützt.",
            "gadget-protection-null-editeditorprotected": "Diese Seite kann nur von Redakteuren, Administratoren und Bots bearbeitet werden (mittleres Schutzniveau).",
            "gadget-protection-null-sysop": "Diese Seite kann nur von Administratoren bearbeitet werden (hohes Schutzniveau).",
            "gadget-protection-null-autoconfirmed": "Diese Seite kann nur von automatisch bestätigten Benutzern, Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-editeditorprotected": "Diese Seite kann nur von Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-sysop": "Diese Seite kann nur von Administratoren verschoben werden.",
            "gadget-protection-autoconfirmed-autoconfirmed": "Diese Seite kann nur von automatisch bestätigten Benutzern, Redakteuren, Administratoren und Bots bearbeitet und verschoben werden (niedrige Schutzstufe).",
            "gadget-protection-editeditorprotected-editeditorprotected": "Diese Seite kann nur von Redakteuren, Administratoren und Bots bearbeitet und verschoben werden (mittleres Schutzniveau).",
            "gadget-protection-sysop-sysop": "Diese Seite kann nur von Administratoren bearbeitet und verschoben werden (hohes Schutzniveau).",
            "gadget-protection-autoconfirmed-editeditorprotected": "Diese Seite kann nur von automatisch bestätigten Benutzern, Redakteuren, Administratoren und Bots bearbeitet und von Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-editeditorprotected-autoconfirmed": "Diese Seite kann nur von Redakteuren, Administratoren und Bots bearbeitet und von automatisch bestätigten Benutzern, Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-sysop-autoconfirmed": "Diese Seite kann nur von Administratoren bearbeitet und von autobestätigten Benutzern, Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-autoconfirmed-sysop": "Diese Seite kann nur von autobestätigten Benutzern, Redakteuren, Administratoren und Bots bearbeitet und von Administratoren verschoben werden.",
            "gadget-protection-editeditorprotected-sysop": "Diese Seite kann nur von Redakteuren, Administratoren und Bots bearbeitet und von Administratoren verschoben werden.",
            "gadget-protection-sysop-editeditorprotected": "Diese Seite kann nur von Administratoren bearbeitet und von Redakteuren, Administratoren und Bots verschoben werden.",
            "gadget-protection-autoconfirmedcreate": "Diese Seite kann nur von automatisch bestätigten Benutzern, Redakteuren und Administratoren erstellt werden.",
            "gadget-protection-editeditorprotectedcreate": "Diese Seite kann nur von Redakteuren und Administratoren erstellt werden.",
            "gadget-protection-admincreate": "Diese Seite kann nur von Administratoren erstellt werden."
        },
        pl: {
            "gadget-protection-autoconfirmed-null": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty mogą edytować tę stronę (niski poziom zabezpieczenia).",
            "gadget-protection-editeditorprotected-null": "Tylko redaktorzy, administratorzy i boty mogą edytować tę stronę (średni poziom zabezpieczenia).",
            "gadget-protection-sysop-null": "Tylko administratorzy mogą edytować tę stronę (wysoki poziom zabezpieczenia).",
            "gadget-protection-null-autoconfirmed": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty mogą przenosić tę stronę.",
            "gadget-protection-null-editeditorprotected": "Tylko redaktorzy, administratorzy i boty mogą przenosić tę stronę.",
            "gadget-protection-null-sysop": "Tylko administratorzy mogą przenosić tę stronę.",
            "gadget-protection-autoconfirmed-autoconfirmed": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty mogą edytować i przenosić tę stronę (niski poziom zabezpieczenia).",
            "gadget-protection-editeditorprotected-editeditorprotected": "Tylko redaktorzy, administratorzy i boty mogą edytować i przenosić tę stronę (średni poziom zabezpieczenia).",
            "gadget-protection-sysop-sysop": "Tylko administratorzy mogą edytować i przenosić tę stronę (wysoki poziom zabezpieczenia).",
            "gadget-protection-autoconfirmed-editeditorprotected": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty mogą edytować tę stronę, a przenosić redaktorzy, administratorzy i boty.",
            "gadget-protection-editeditorprotected-autoconfirmed": "Tylko redaktorzy, administratorzy i boty mogą edytować tę stronę, a przenosić użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty.",
            "gadget-protection-sysop-autoconfirmed": "Tylko administratorzy mogą edytować tę stronę, a przenosić użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty.",
            "gadget-protection-autoconfirmed-sysop": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy, administratorzy i boty mogą edytować tę stronę, a przenosić administratorzy.",
            "gadget-protection-editeditorprotected-sysop": "Tylko redaktorzy, administratorzy i boty mogą edytować tę stronę, a przenosić administratorzy.",
            "gadget-protection-sysop-editeditorprotected": "Tylko administratorzy mogą edytować tę stronę, a przenosić redaktorzy, administratorzy i boty.",
            "gadget-protection-autoconfirmedcreate": "Tylko użytkownicy automatycznie zatwierdzeni, redaktorzy i administratorzy mogą utworzyć tę stronę.",
            "gadget-protection-editeditorprotectedcreate": "Tylko redaktorzy i administratorzy mogą utworzyć tę stronę.",
            "gadget-protection-admincreate": "Tylko administratorzy mogą utworzyć tę stronę.",
        },
    };

    function setMessages() {
        const userLang = mw.config.get("wgUserLanguage");
        const defaultLang = "en"; // Język domyślny
        let selectedMessages = messages[userLang] || messages[defaultLang];
        // Dodajemy logikę sprawdzającą, czy wszystkie klucze z języka użytkownika są dostępne
        for (var key in messages[defaultLang]) {
            if (!selectedMessages[key]) {
                selectedMessages[key] = messages[defaultLang][key];
            }
        }

        mw.messages.set(selectedMessages);
    }

    function determineLevel(restriction) {
        const protLevels = ["sysop", "editeditorprotected", "autoconfirmed"];
        if (Array.isArray(restriction) && restriction.length > 0) {
            // Check if the restriction matches any of the predefined levels
            const matchedLevel = protLevels.find(level => restriction.includes(level));
            return matchedLevel || null;
        }
        return null;
    }

    function conRestStr(editLevel, moveLevel, createLevel) {
        if (!editLevel && !moveLevel && createLevel) {
            // Both editLevel and moveLevel do not exist
            return `gadget-protection-${createLevel}create`;
        } else {
            // Both editLevel and moveLevel exist
            return `gadget-protection-${editLevel}-${moveLevel}`;
        }
    }

    function modifySVG(container, displaymode, edit, move, create, upload) {
        const s = "sysop";
        const e = "editeditorprotected";
        const a = "autoconfirmed";

        addClass = (element, className) => {
            if (element) element.classList.add(className);
        };

        removeClass = (element, className) => {
            if (element) element.classList.remove(className);
        };

        const padlocBody = container.querySelector("svg #padlocBody");
        const plus = container.querySelector("svg #plus");
        let changed = false;

        if (displaymode == 1) {
            switch (create) {
                case s: addClass(padlocBody, "adminRed"); changed = true; break;
                case e: addClass(padlocBody, "editorYellow"); changed = true; break;
                case a: addClass(padlocBody, "confirmedGreen"); changed = true; break;
            }

            if (changed) {
                removeClass(plus, "hideandseek");
                return true;
            }

            const closed = container.querySelector("svg #closed");
            const opened = container.querySelector("svg #opened");
            const arrow = container.querySelector("svg #arrow");
            const arrowInfill = container.querySelector("svg #arrowInfill");
            const cloudy = container.querySelector("svg #cloudy");
            const cloudyInfill = container.querySelector("svg #cloudyInfill");

            switch (edit) {
                case s: addClass(padlocBody, "adminRed"); changed = true; break;
                case e: addClass(padlocBody, "editorYellow"); changed = true; break;
                case a: addClass(padlocBody, "confirmedGreen"); changed = true; break;
                default:
                    removeClass(opened, "hideandseek");
                    addClass(closed, "hideandseek");
                    addClass(padlocBody, "unprotectedGray");
                    break;
            }



            switch (move) {
                case s: addClass(arrowInfill, "adminRed"); changed = true; break;
                case e: addClass(arrowInfill, "editorYellow"); changed = true; break;
                case a: addClass(arrowInfill, "confirmedGreen"); changed = true; break;
                default: addClass(arrowInfill, "unprotectedGray"); break;
            }

            removeClass(arrow, "hideandseek");

            switch (upload) {
                case s:  removeClass(cloudy, "hideandseek"); addClass(cloudyInfill, "adminRed"); changed = true; removeClass(cloudy, "hideandseek"); break;
                case e: removeClass(cloudy, "hideandseek"); addClass(cloudyInfill, "editorYellow"); changed = true; removeClass(cloudy, "hideandseek"); break;
                case a: removeClass(cloudy, "hideandseek"); addClass(cloudyInfill, "confirmedGreen"); changed = true; removeClass(cloudy, "hideandseek"); break;
            }


            return changed;
        } else {
            const admin = container.querySelector("svg #admin");
            const editor = container.querySelector("svg #editor");
            const autoconfirmed = container.querySelector("svg #autoconfirmed");
            switch (edit) {
                case s:
                    removeClass(admin, "hideandseek");
                    addClass(padlocBody, "adminRed");
                    return true;
                case e:
                    removeClass(editor, "hideandseek");
                    addClass(padlocBody, "editorYellow");
                    return true;
                case a:
                    removeClass(autoconfirmed, "hideandseek");
                    addClass(padlocBody, "confirmedGreen");
                    return true;
            }

            return false;
        }
    }
    async function init() {
        const url = "/media/wikipedia/commons/0/02/Template_padlock_icon.svg";
        const action = mw.config.get("wgAction");
        const $indicators = $(".mw-indicators").first();
        const displaymode = 1; // 0 - tylko edycja, 1 - wszystko

        if (action !== "view" || $indicators.find("#mw-indicator-protected").length > 0) {
            return;
        }

        const editLevel = determineLevel(mw.config.get("wgRestrictionEdit"));
        const moveLevel = determineLevel(mw.config.get("wgRestrictionMove"));
        const createLevel = determineLevel(mw.config.get("wgRestrictionCreate"));
        const uploadLevel = determineLevel(mw.config.get("wgRestrictionUpload"));

        if (!editLevel && !moveLevel && !createLevel && !uploadLevel) {
            console.log("Unprotected🔓");
            return;
        }

        setMessages();

        const protectText = mw.msg(conRestStr(editLevel, moveLevel, createLevel));

        const zibi = document.createElement("div");
        fetch(url)
            .then(response => response.text())
            .then(svgContent => {
                zibi.innerHTML = svgContent;
                zibi.style.height = "27px";
                zibi.id = "mw-indicator-protected";
                zibi.classList.add("mw-indicator");
                zibi.title = protectText;
                zibi.alt = protectText;

                if (modifySVG(zibi, displaymode, editLevel, moveLevel, createLevel, uploadLevel)) {
                    document.querySelector(".mw-indicators").appendChild(zibi);
                }
            })
            .catch(error => {
                console.error("Error fetching SVG:", error);
            });
    }

    $(init);
})(mediaWiki, jQuery);