Wikipedysta:Zamkorus/Gadget-ProtectionIndicators.js
Wygląd
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);