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);
}