MediaWiki:UploadForm.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.
/**
 * Změna formuláře pro upload souborů
 *
 * @file Úprava formuláře pro upload souborů ve WikiSkriptech
 * @license https://www.gnu.org/licenses/gpl.html GNU General Public License 3.0
 */


var uploadForm = {

    /**
     * Popisky polí a nápověda
     */

    // Pole "Popis"
    popis: "Popis:",
    napoveda_popis: "",

    // Pole "Zdroj"
    // popisek by měl informovat o možnosti Vlastní dílo
    zdroj: "Zdroj:",
    napoveda_zdroj: "Uveďte zdroj, ze kterého jste soubor získali. Nejlépe zadejte internetovou stránku či citaci knihy. Pakliže je soubor vaším dílem, zatrhněte možnost Vlastní dílo (jako výchozí licence bude nastavena CC-BY 4.0).",
    popisek_zatr_zdroj: "Vlastní dílo:",

    // Pole "Autor"
    autor: "Autor:",
    napoveda_autor: "",

    // Pole "Datum"
    // popisek by měl informovat o možnosti Dnešní datum
    datum: "Datum:",
    napoveda_datum: "Doporučujeme uvést datum ve formátu RRRR-MM-DD, případně RRRR-MM nebo RRRR. Pro vložení dnešního data zatrhněte možnost Dnešní datum.",
    popisek_zatr_datum: "Dnešní datum:",

    // Pole licence je generováno kódem MediaWiki

    // Pole "Kategorie"
    kategorie: "Kategorie:",
    napoveda_kategorie: "Zde uveďte kategorie, do kterých lze váš soubor zařadit, oddělené čárkou.<br />Odkaz na seznam kategorií (otevírá se v novém okně):" + ' <a href="' + mw.config.get("wgServer") + mw.config.get("wgArticlePath").replace("$1", "WikiSkripta:Portál_kategorií") + '" target="_blank">Seznam kategorií</a>',

    /**
     * Chybová hláška v případě nezadání parametru.
     *
     * @param {parametr} Chybějící parametr souboru.
     *
     * @return {boolean} False v případě chybějícího parametru.
     */
    nezadanyParametr: function(parametr) {

        window.alert("Nebyl zadán " + parametr + " souboru.\nDoplňte prosím chybějící informaci a odešlete soubor znovu.");

        return false;

    },

    /**
     * Vyplnění polí v případě zatrhnutí vlastní práce.
     *
     * @param {formular} Odkaz na formulář předaný předešlou funkcí.
     */
    vlastniPrace: function(formular) {

        if (formular.elements["vlastniprace"].checked === true) {

            formular.elements["mySource"].value = "{{vlastní dílo}}";
            formular.elements["mySource"].disabled = true;
            formular.elements["myAuthor"].value = "[[Uživatel:" + mw.config.get("wgUserName") + "|" + mw.config.get("wgUserName") + "]]";
            formular.elements["myAuthor"].disabled = true;

            // licence: předvolení licence "CC-BY"
            zvolenaLicence = formular.elements["wpLicense"].selectedIndex;
            formular.elements["wpLicense"].selectedIndex = 2;

        } else {

            formular.elements["mySource"].disabled = false;
            formular.elements["myAuthor"].disabled = false;
            formular.elements["wpLicense"].selectedIndex = zvolenaLicence;

        }

    },

    /**
     * Vyplnění pole dnešního data.
     *
     * @param {formular} Odkaz na formulář předaný předešlou funkcí.
     */
    dnesniDatum: function(formular) {

        if (formular.elements["dnesnidatum"].checked === true) {

            // datum
            dnesni_datum = new Date();

            // rok
            vyplneni_rok = dnesni_datum.getFullYear();

            // měsíc
            vyplneni_mesic = (dnesni_datum.getMonth() + 1);
            if (vyplneni_mesic < 10) vyplneni_mesic = "0" + vyplneni_mesic;

            // den
            vyplneni_den = dnesni_datum.getDate();
            if (vyplneni_den < 10) vyplneni_den = "0" + vyplneni_den;

            // kompletní datum
            vyplneni_data = vyplneni_rok + "-" + vyplneni_mesic + "-" + vyplneni_den;

            formular.elements["myDate"].value = vyplneni_data;
            formular.elements["myDate"].disabled = true;

        } else {

            formular.elements["myDate"].disabled = false;

        }
    },

    /**
     * Odeslání formuláře.
     *
     * @param {formular} Odkaz na formulář předaný předešlou funkcí.
     */
    odeslatFormular: function(formular) {

        // proměnné čtené z formuláře, test zadání
        mujPopis = formular.elements['myDesc'].value;
        if (!mujPopis) { uploadForm.nezadanyParametr("popis"); return false; }

        mujZdroj = formular.elements['mySource'].value;
        if (!mujZdroj) { uploadForm.nezadanyParametr("zdroj"); return false; }

        mujDatum = formular.elements['myDate'].value;

        mujAutor = formular.elements['myAuthor'].value;
        if (!mujAutor) { uploadForm.nezadanyParametr("autor"); return false; }

        mujKategorie = formular.elements['myCategory'].value;
        if (!mujKategorie) mujKategorie="Nezařazené soubory";

        // kejkle s licencemi - načíst do šablony a smazat z MediaWiki pole
        mediaLicence = formular.elements['wpLicense'].options[formular.elements['wpLicense'].selectedIndex].value;

        if (mediaLicence) {

            mujLicence = "{{" + mediaLicence + "}}";

        } else {

            mujLicence = "{{bez licence}}";

            testLicence = window.confirm("Nezadali jste žádnou licenci.\n\nPokud vám žádná z nabízených možností nevyhovuje, doplňte prosím licenci ručně po načtení souboru.\nPokud si s licencemi nevíte rady, klidně pokračujte dále a po načtení souboru prosím kontaktujte některého z redaktorů. Rádi vám pomůžeme.\n\nOpravdu chcete na WikiSkripta nahrát soubor bez licence?");

            if(!testLicence) return false;
        }

        // vymazání oficiální sekce s licencemi při odeslání souboru
        formular.elements['wpLicense'].options[formular.elements['wpLicense'].selectedIndex].value = "";

        // úprava kategorií
        mujKategorieSplit = mujKategorie.split(",");
        mujKategorie="";

        for(i=0;i<mujKategorieSplit.length;i++) {

            mujKategorie += "[[Kategorie:" + trim(mujKategorieSplit[i]) + "]]\n";
        }

        // přidání souboru do kategorie podle typu souboru
        if (mujKategorie.search(/Obrázky|Flashové animace|Zvuky|Textové soubory|Komprimované archivy|Videa|Prezentace|Tabulky/) === -1) {

            nazevSouboru = formular.elements["wpDestFile"].value.split(".");

            switch(nazevSouboru[nazevSouboru.length-1].toLowerCase()) {
                case "png":
                case "gif":
                case "jpg":
                case "jpeg":
                case "djvu":
                case "svg":
                case "ai":
                case "psd":
                  mujKategorie += "[[Kategorie:Obrázky]]\n";
                  break;
                case "swf":
                case "xap":
                  mujKategorie += "[[Kategorie:Flashové animace]]\n";
                  break;
                case "mp3":
                case "ogg":
                case "oga":
                  mujKategorie += "[[Kategorie:Zvuky]]\n";
                  break;
                case "pdf":
                case "doc":
                case "docx":
                  mujKategorie += "[[Kategorie:Textové soubory]]\n";
                  break;
                case "zip":
                  mujKategorie += "[[Kategorie:Komprimované archivy]]\n";
                  break;
                case "ogg":
                case "mp4":
                  mujKategorie += "[[Kategorie:Videa]]\n";
                  break;  
                case "ppt":
                case "pptx":
                  mujKategorie += "[[Kategorie:Prezentace]]\n";
                  break;
                case "xls":
                case "xlsx":
                  mujKategorie += "[[Kategorie:Tabulky]]\n";
                  break; 
            }
        }

        // začlenění údajů do šablony Soubor
        formular_popis = "{{Soubor\n|popis = ";
        formular_popis += mujPopis;
        formular_popis += "\n|zdroj = ";
        formular_popis += mujZdroj;
        formular_popis += "\n|datum = ";
        formular_popis += mujDatum;
        formular_popis += "\n|autor = ";
        formular_popis += mujAutor;
        formular_popis += "\n|licence = ";
        formular_popis += mujLicence;
        formular_popis += "\n}}\n";
        formular_popis += mujKategorie;

        // vložení šablony Soubor zpět do formuláře
        document.getElementById("wpUploadDescription").value = formular_popis;

        // odeslání (simulace kliku na ODESLAT)
        var tlacitkoOdeslat = document.getElementsByName("wpUpload")[0];
        tlacitkoOdeslat.click();

        return false;
    },

    /**
     * Vytvoření nového řádku
     *
     * @param {jmeno} Label formulářového pole.
     * @param {id} ID formulářového pole.
     * @param {napoveda} Nápověda k formulářovému poli.
     * @param {pop_checkbox} Popis checkboxu.
     * @param {nabidka_checkboxu} ID checkboxu.
     * @param {funkce_checkboxu} Odkaz na javascriptovou funkci, kterou vyvolá kliknutí do checkboxu.
     */
    vytvoritRadek: function(jmeno, id, napoveda, pop_checkbox, nabidka_checkboxu, funkce_checkboxu) {

        // základ nového řádku
        novyradek = '<tr><td class="mw-label"><label for="' + id + '">' + jmeno + '</label></td><td class="mw-input"><input type="text" id="' + id + '" name="' + id + '" size="60" class="mw-input" onblur="this.value = trim(this.value);" />';

        // checkbox
        if (nabidka_checkboxu && funkce_checkboxu) {
            novyradek += '<br /><label for="' + nabidka_checkboxu + '">' + pop_checkbox + '</label><input type="checkbox" name="' + nabidka_checkboxu + '" id="' + nabidka_checkboxu + '" onclick="uploadForm.' + funkce_checkboxu + '(document.forms[\'mw-upload-form\']);" />';
        }

        // nápověda
        if (napoveda || napoveda !== " ") {
            novyradek += '<div class="htmlform-tip">' + napoveda + '</div>';
        }

        // konec řádku
        novyradek+="</td></tr>";

        // vložit řádek do formuláře
        $(".mw-htmlform-field-Licenses").before(novyradek);

    },

    /**
     * Změna formuláře - startovací funkce
     */
    start: function() {

        // jestli nejsem na Upload, zastavit
        if(mw.config.get("wgPageName") !== "Speciální:Načíst_soubor" && mw.config.get("wgPageName") !== "Special:Upload") return false;

        // pokud jsem již na další stránce s varováním, nespouštět funkci
        if(document.getElementById("uploadwarning")) return;

        // pokud nejsem přihlášený, nespouštět funkci
        if(!mw.config.get("wgUserName")) return;

        // pokud načítám novou verzi souboru, nespouštět funkci
        wpReUpload = mw.util.getParamValue('wpForReUpload'); // zjistí get parametr z url adresy
        if(wpReUpload !== null) return;

        // pokud je již zobrazena chyba, nespouštět funkci
        if($(".error").length > 0) return;

        // odkaz na formulář
        if(document.forms["mw-upload-form"]) formular = document.forms["mw-upload-form"];

        // odkaz na tabulku s formulářem v proměnné "tabulka"
        if(document.getElementById("mw-htmlform-description")) tabulka = document.getElementById("mw-htmlform-description");

        // pokud existuje smazaná verze souboru a je již zobrazeno varování, nespouštět
        // a nezobrazovat pole s licencí a edittools
        if (mw.config.get("wgUploadSourceIds").length === 0) {
            tabulka.deleteRow(4);
            tabulka.deleteRow(3);
            return false;
        }

        // schovat tlačítko submit
        $('input[name="wpUpload"]').css({"visibility":"hidden", "position":"absolute"});

        // schovat řádek s původním polem "Popis:"
        $(".mw-htmlform-field-HTMLTextAreaField").css({"visibility":"hidden", "position":"absolute"})

        // úplně smazat řádek s Edittools
        $(".mw-editTools").hide();

        // vložit nový řádek: popis obrázku
        uploadForm.vytvoritRadek(uploadForm.popis, "myDesc", uploadForm.napoveda_popis);

        // vložit nový řádek: zdroj
        uploadForm.vytvoritRadek(uploadForm.zdroj, "mySource", uploadForm.napoveda_zdroj, uploadForm.popisek_zatr_zdroj, "vlastniprace", "vlastniPrace");

        // vložit nový řádek: autor
        uploadForm.vytvoritRadek(uploadForm.autor, "myAuthor", uploadForm.napoveda_autor);

        // vložit nový řádek: datum
        uploadForm.vytvoritRadek(uploadForm.datum, "myDate", uploadForm.napoveda_datum, uploadForm.popisek_zatr_datum, "dnesnidatum", "dnesniDatum");

        // vložit nový řádek: kategorie
        uploadForm.vytvoritRadek(uploadForm.kategorie, "myCategory", uploadForm.napoveda_kategorie);

        // vložit nový řádek: tlačítko pro odeslání
        $('table#mw-htmlform-options tr:last').after('<tr><td></td><td><button onclick="return uploadForm.odeslatFormular(document.forms[\'mw-upload-form\']);">Načíst soubor</button></td></tr>');
    }
}

/**
 * Spustit to!
 */
$(uploadForm.start());