MediaWiki:UploadForm.js (upgrade)

From WikiLectures

/*

 */

/* ============ UPLOAD FILE FORM ===============
   author:    Slepi [[User:Slepi]]
   date:      02/2009, last update 07/2009
   license:   Wikilectures (wikien.lf1.cuni.cz)
   =============================================
*/

// POPISKY A NÁPOVĚDY K JEDNOTLIVÝM POLÍM
// ZDE MŮŽETE JEDNODUŠE UPRAVOVAT TEXTY FORMULÁŘE

// Pole "Popis"
var popisek_popis = "Description:";
var napoveda_popis = "";

// Pole "Zdroj"
// popisek by měl informovat o možnosti Vlastní dílo
var popisek_zdroj = "Source:";
var napoveda_zdroj = "Please enter the source of the file. If the file is your own work, please check My own work.";
var popisek_zatr_zdroj = "Own work:";

// Pole "Autor"
var popisek_autor = "Author:";
var napoveda_autor = "";

// Pole "Datum"
// popisek by měl informovat o možnosti Dnešní datum
var popisek_datum = "Date:";
var napoveda_datum = "We recommend write the date in YYYY-MM-DD or YYYY-MM or YYYY. Or you can check the box Today.";
var popisek_zatr_datum = "Today:";

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

// Pole "Kategorie"
var popisek_kategorie = "Categories:";
var napoveda_kategorie = "Enter categories, which are suitable for your file, and split them by a comma (,).";
var popis_odkazu_kategorii = "Link to categories list (open in new window):";
var odkaz_seznam_kategorii = "Category:Categories";

/* ==== VLASTNÍ KÓD SKRIPTU - prosím neupravujte, nejste-li si jistí jeho funkcí ==== */

// FUNKCE SCHOVÁVAJÍCÍ DANÝ ELEMENT PODLE ID
function schovat(id) {
  schovanyElement = document.getElementById(id);
  schovanyElement.style.visibility = "hidden";
  schovanyElement.style.position = "absolute";
}

// FUNKCE VRACEJÍCÍ UŽIVATELE ZPĚT
// nevyplnil-li některé důležité pole
function nezadanyParametr(parametr) {
  window.alert("You did not enter a "+parametr+" of the file!");
}



// OBECNÉ PROMĚNNÉ POUŽÍVANÉ V CELÉM KÓDU

// odesílací formulář - je definován ve funkci zmenitFormular()
var formular = "";

// tlačítko "Odeslat" - je definováno ve funkci zmenitFormular()
var tlacitkoOdeslat = "";

// FUNKCE VYPLŇUJÍCÍ POLE V PŘÍPADĚ VLASTNÍ PRÁCE
function vlastniPraceFce() {
  if (formular.elements["vlastniprace"].checked == true) {
    formular.elements["mySource"].value = "{{vlastní dílo}}";
    formular.elements["mySource"].disabled = true;
    formular.elements["myAuthor"].value = "~~~";
    formular.elements["myAuthor"].disabled = true;
  } else {
    formular.elements["mySource"].disabled = false;
    formular.elements["myAuthor"].disabled = false;
  }
}

// FUNKCE VYPLŇUJÍCÍ POLE DATUM DNEŠNÍM DATEM
function dnesniDatumFce() {
  if (formular.elements["dnesnidatum"].checked == true) {
    dnesni_datum = new Date();

    vyplneni_rok = dnesni_datum.getFullYear();
    vyplneni_mesic = (dnesni_datum.getMonth() + 1);
    if (vyplneni_mesic < 10) vyplneni_mesic = "0" + vyplneni_mesic;
    vyplneni_den = dnesni_datum.getDate();
    if (vyplneni_den < 10) vyplneni_den = "0" + vyplneni_den;
    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;
  }
}

// FUNKCE ODESÍLAJÍCÍ FORMULÁŘ
// při uploadu souboru
function odeslatFormular () {

  // proměnné čtené z formuláře, test zadání
  mujPopis = formular.elements['myDesc'].value;
  if (!mujPopis) {nezadanyParametr("popis"); return false;}
  mujZdroj = formular.elements['mySource'].value;
  if (!mujZdroj) {nezadanyParametr("zdroj"); return false;}
  mujDatum = formular.elements['myDate'].value;
  mujAutor = formular.elements['myAuthor'].value;
  if (!mujAutor) {nezadanyParametr("autor"); return false;}
  mujKategorie = formular.elements['myCategory'].value;
  if (!mujKategorie) mujKategorie="Uncategorized files";

  // 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 = "{{";
    mujLicence += MediaLicence;
    mujLicence += "}}";
  } else { mujLicence = "{{bez licence}}"; }
  formular.elements['wpLicense'].options[formular.elements['wpLicense'].selectedIndex].value = "";

  // Úprava kategorií
  mujKategorieSplit=mujKategorie.split(",");
  mujKategorie="";
  for(i=0;i<mujKategorieSplit.length;i++) {
    mujKategorie += "[[Category:"+mujKategorieSplit[i]+"]]\n";
  }

  // začlenění údajů do šablony Soubor
  formular_popis = "{{File\n|description = ";
  formular_popis += mujPopis;
  formular_popis += "\n|source = ";
  formular_popis += mujZdroj;
  formular_popis += "\n|date = ";
  formular_popis += mujDatum;
  formular_popis += "\n|author = ";
  formular_popis += mujAutor;
  formular_popis += "\n|license = ";
  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)
  puvodniSubmity = document.getElementsByName("wpUpload");
  var tlacitkoOdeslat = puvodniSubmity[0];
  tlacitkoOdeslat.click();

  return false;
}

// FUNKCE ZÍSKÁVAJÍCÍ GET PROMĚNNÉ Z URL ADRESY
// zdroj: http://snipplr.com/view.php?codeview&id=799

function getUrlVars() {
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

  for(var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}

// FUNKCE VYTVÁŘEJÍCÍ ŘÁDEK V TABULCE
// s formulářovým políčkem, jeho popiskem a nápovědou,
// případně checkboxem s onclick funkcí
function vytvoritRadek (jmeno, id, cislo_radku, nabidka_checkboxu, funkce_checkboxu) {

  eval("radek_" + jmeno + " = tabulka.insertRow(" + cislo_radku + ");");
  eval("radek_" + jmeno + "_0 = radek_" + jmeno + ".insertCell(0);");
  eval("radek_" + jmeno + "_1 = radek_" + jmeno + ".insertCell(1);");
  eval("radek_" + jmeno + "_0.className = 'mw-label';");
  eval("radek_" + jmeno + "_1.className = 'mw-input';");

  eval(jmeno + "_label = document.createElement('label');");
  eval("radek_" + jmeno + "_0.appendChild(" + jmeno + "_label);");
  eval(jmeno + "_label.setAttribute('for', '" + id + "');");
  eval(jmeno + "_label_text = document.createTextNode(popisek_" + jmeno + ");");
  eval(jmeno + "_label.appendChild(" + jmeno + "_label_text);");

  eval(jmeno + "_pole = document.createElement('input');");
  eval(jmeno + "_pole.setAttribute('type', 'text');");
  eval("radek_" + jmeno + "_1.appendChild(" + jmeno + "_pole);");
  eval(jmeno + "_pole.setAttribute('id', '" + id + "');");
  eval(jmeno + "_pole.setAttribute('name', '" + id + "');");
  eval(jmeno + "_pole.setAttribute('size', '60');");
  eval(jmeno + "_pole.className='mw-input';");

  if (nabidka_checkboxu && funkce_checkboxu) {

    eval("radek_" + jmeno + "_1.appendChild(document.createElement('br'));");
    eval(jmeno + "_zatr_label = document.createElement('label');");
    eval("radek_" + jmeno + "_1.appendChild(" + jmeno + "_zatr_label);");
    eval(jmeno + "_zatr_label.setAttribute('for', '" + nabidka_checkboxu + "');");
    eval(jmeno + "_zatr_label_text = document.createTextNode('- '+ popisek_zatr_" + jmeno + ");");
    eval(jmeno + "_zatr_label.appendChild(" + jmeno + "_zatr_label_text);");

    eval(jmeno + "_zatr = document.createElement('input');" +
    jmeno + "_zatr.setAttribute('type', 'checkbox');" +
    "radek_" + jmeno + "_1.appendChild(" + jmeno + "_zatr);" +
    jmeno + "_zatr.setAttribute('name', '" + nabidka_checkboxu + "');" +
    jmeno + "_zatr.setAttribute('id', '" + nabidka_checkboxu + "');" +
    jmeno + "_zatr.onclick = " + funkce_checkboxu + ";")
  }

  podminka_napoveda = "if (napoveda_" + jmeno + "|| napoveda_" + jmeno + "!= ' ') {" +
    jmeno + "_hint = document.createElement('div');" +
    "radek_" + jmeno + "_1.appendChild(" + jmeno + "_hint);" +
    jmeno + "_hint.className = 'prefsectiontip';" +
    jmeno + "_hint_text = document.createTextNode(napoveda_" + jmeno + ");" +
    jmeno + "_hint.appendChild(" + jmeno + "_hint_text);}";
  eval(podminka_napoveda);
}

// FUNKCE MĚNÍCÍ FORMULÁŘ
// uploadu souboru
function zmenitFormular() {

  // jestli nejsem na Upload, zastavit
  if(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(!wgUserName) return;

  // pokud načítám novou verzi souboru, nespouštět funkci
  wpReUpload = getUrlVars();
  if(wpReUpload['wpReUpload']) return;

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

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

  // schovat tlačítko submit
  puvodniSubmity = document.getElementsByName("wpUpload");
  var tlacitkoOdeslat = puvodniSubmity[0];
  tlacitkoOdeslat.setAttribute("id", "idOdesilaciTlacitko");
  schovat("idOdesilaciTlacitko");

  // úplně smazat řádek s původním polem "Popis:"
  tabulka.rows[3].id = "schovanyRadekPopis";
  schovat("schovanyRadekPopis");

  // úplně smazat řádek s Edittools
  tabulka.deleteRow(9);

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

  // vložit nový řádek: zdroj
  vytvoritRadek("zdroj", "mySource", "4", "vlastniprace", "vlastniPraceFce");

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

  // vložit nový řádek: datum
  vytvoritRadek("datum", "myDate", "6", "dnesnidatum", "dnesniDatumFce");

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

  if (napoveda_kategorie || napoveda_kategorie != " ") {
    komplethelp_kategorie = napoveda_kategorie;
    if (popis_odkazu_kategorii && odkaz_seznam_kategorii) {
      komplethelp_kategorie += '<br />' + popis_odkazu_kategorii;
      preodkaz_seznam = wgServer + wgArticlePath;
      odkaz_seznam_kategorii = preodkaz_seznam.replace("$1", odkaz_seznam_kategorii);
      komplethelp_kategorie += ' <a href="' + odkaz_seznam_kategorii + '" target="_blank">';
      komplethelp_kategorie += 'Seznam kategorií</a>.';
    }
    kategorie_hint.innerHTML = komplethelp_kategorie;
  }

  // vložit nový řádek: tlačítko pro odeslání
  radek_submit = tabulka.insertRow(10);
  radek_submit_0 = radek_submit.insertCell(0);
  radek_submit_1 = radek_submit.insertCell(1);
  radek_submit_1.className = "mw-input";


  submit_tlacitko = document.createElement("button");
  radek_submit_1.appendChild(submit_tlacitko);
  submit_tlacitko_text = document.createTextNode("Upload File");
  submit_tlacitko.appendChild(submit_tlacitko_text);
  submit_tlacitko.onclick = function () {return odeslatFormular();};
}

// SPUSTIT
addOnloadHook(zmenitFormular);

/* 

*/