MediaWiki:Gadget-ImageCheck.js
Z WikiSkript
Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.
- Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
- Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
- Internet Explorer / Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5
- Opera: Stiskněte Ctrl-F5.
/**
* Zjištění kontroly obrázku učitelem
*
* @file
* @author User:Slepi
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL 3.0
*/
imageCheck = {
/* pole obrázků daného článku */
imagesArray : [],
/* startovací funkce: pokud jsme v hlavním jmenném prostoru a díváme se na článek */
start : function() {
if (mw.config.get("wgNamespaceNumber") === 0 && mw.config.get("wgAction") === "view") {
imageCheck.getImages();
}
},
/* zpracování obrázků v článku */
getImages : function() {
/* seznam všech obrázků v článku */
var images = document.querySelectorAll(".image");
/* každý obrázek zkontrolujeme přes API */
Array.prototype.forEach.call(images, function(element, i){
/* textový odkaz obrázku */
var imageHref = element.getAttribute("href");
/* vezmu si jen textovou část odkazu (třeba "Soubor:Obrazek.png") */
var imageLink = imageHref.substr(imageHref.indexOf("Soubor"));
/* obrázek vložím do výsledkového pole */
imageCheck.imagesArray[imageLink] = element;
/* odkaz projedu přes API, zdali obsahuje kategorii "Zkontrolováno" */
imageCheck.tryAPI(imageLink);
});
},
/**
* zkontaktování API a zjištění, zdali obrázek má kontrolu učitelem
*
* @param {imageLink} Textová část odkazu na obrázek (ve tvaru "Soubor:Obrazek.png")
*/
tryAPI : function(imageLink) {
/* kontakt na API */
var request = new XMLHttpRequest();
var apiAddress = mw.config.get("wgServer") + "/api.php?action=query&format=json&prop=categories&titles=" + imageLink;
/* otevřeme API komunikaci */
request.open("GET", apiAddress, true);
/* zpracování dat API */
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
var data = JSON.parse(request.responseText);
/* pokud mi API nevrátí žádné kategorie, nemá cenu pokračovat */
if(typeof data.query.pages[Object.keys(data.query.pages)[0]].categories === "undefined") {
return false;
}
/* získám seznam kategorií */
categories = data.query.pages[Object.keys(data.query.pages)[0]].categories;
/* projdu kategorie: pokud je zkontrolováno, vrátím true a přidám CSS třídu imagecheck */
for (i=0; i < categories.length; i++) {
if (categories[i].title === "Kategorie:Zkontrolované články") {
imageCheck.imagesArray[imageLink].className += " imagecheck";
return true;
}
}
}
};
/* odeslat API požadavek */
request.send();
},
};
/* Zahájit po načtení stránky */
if (document.readyState != "loading"){
imageCheck.start();
} else {
document.addEventListener('DOMContentLoaded', imageCheck.start);
}