MediaWiki:Citace.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.
/**
 * Nástroj Citace: bibliografické záznamy a citace
 *
 * @file Bibliografické záznamy a citace
 * @license https://www.gnu.org/licenses/gpl.html GNU General Public License 3.0
 */

/* ======================== Texty ===================================================== */

baseTextCitace = '<p><span style="float: right;"><a href="#" onclick="return createCitationForm();">Obnovit</a>&nbsp;•&nbsp;<a href="#" onclick="return closeCitationBox()">Zavřít</a></span></p><h2>Citace</h2>';

/* ======================== Pomocné funkce ============================================ */

// FUNKCE ZÍSKÁVAJÍCÍ SOUŘADNICE ROLOVANÉHO OKNA
// http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
function getScrollXY() {
  // souřadnice
  var scrOfX = 0, scrOfY = 0;

  // Netscape
  if( typeof( window.pageYOffset ) == 'number' ) {
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;

  // DOM
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;

  // IE6
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }

  // výstup
  return [ scrOfX, scrOfY ];
}

// FUNKCE ZPRACOVÁVAJÍCÍ CITACE A VKLÁDAJÍCÍ JE DO TEXTU
// parametr "formular": odkaz na formulář
// paramer "typ": typ citovaného zdroje
function zpracovatCitace(formular, typ) {
  // zpracování ISSN (nemusí být vždy uvedeno)
  if(formular.elements["issn"]) {
    if(formular.elements["issn"].value == "")
      formular.elements["issn"].value = "-";
  }

  // zpracování ISBN (nemusí být vždy ucedeno)
  if(formular.elements["isbn"]) {
    if(formular.elements["isbn"].value == "")
      formular.elements["isbn"].value = "-";
  }

  // úvod výstupu: začátek šablony Citace
  var output = "{{Citace\n| typ = " + typ + "\n";

  // procházení polí formuláře a vkládání do šablony
  var i = 0;
  for(i=0; i<formular.elements.length; i++) {

    // textová pole
    if(formular.elements[i] && formular.elements[i].type == "text" && formular.elements[i].value != "") {
      // informace od uživatele
      vlozenaInfo = trim(formular.elements[i].value);

      // zabezpečení posledního znaku
      viPosledniZnak = vlozenaInfo.charAt(vlozenaInfo.length - 1);
      if(viPosledniZnak == "." || viPosledniZnak == ",") vlozenaInfo = vlozenaInfo.substring(0, vlozenaInfo.length-1);

      // výstup
      output += "| " + formular.elements[i].id + " = " + vlozenaInfo + "\n";

    // checkboxy (např. "kolektiv")
    } else if (formular.elements[i] && formular.elements[i].type == "checkbox") {
      if(formular.elements[i].checked == true)
        output += "| " + formular.elements[i].id + " = ano\n";
    }
  }

  // závěr citační šablony
  output += "}}\n";

  // vložení do textu na místo pomocné spleti znaků
  novyOutput = document.getElementById("wpTextbox1").value;
  novyOutput = novyOutput.replace("--//--//--", output);
  document.getElementById("wpTextbox1").value = novyOutput;

  // zavřít udělátko
  closeCitationBox();

  return false;
}

// FUNKCE VKLÁDAJÍCÍ POMOCNOU SPLEŤ ZNAKŮ NA POZICI KURZORU V TEXTOVÉM POLI
// parametr "textovePole": ID textového pole, které měníme
function vlozitTextAreaSpletZnaku(textovePole) {

  pridanyText = "--//--//--";

  // vyhledání zadaného ID
  if(!document.getElementById(textovePole)) return;
  textovePole = document.getElementById(textovePole);

  // Microsoft Internet Explorer
  if (document.selection) {
    textovePole.focus();

    // vložení do výběru
    oblastVlozeni = document.selection.createRange();
    oblastVlozeni.text = pridanyText;
  }

  // ostatní prohlížeče
  else if (textovePole.selectionStart || textovePole.selectionStart == 0) {

    // vložení do pole a aktualizace celého textu
    startText = textovePole.selectionStart;
    endText = textovePole.selectionEnd;
    aktualniText = textovePole.value;
    textovePole.value = aktualniText.substring(0, startText);
    textovePole.value += pridanyText;
    textovePole.value += aktualniText.substring(endText, aktualniText.length);
    textovePole.selectionStart = startText + pridanyText.length;
    textovePole.selectionEnd = startText + pridanyText.length;
  }

  // nepodporující prohlížeče: vložení textu na konec pole
  else {
    textovePole.value += pridanyText;
  }
}

// FUNKCE VYTVÁŘEJÍCÍ POVINNÉ PARAMETRY
// parametr "poleParametru": pole se všemi povinnými parametry daného zdroje
function classPovinneCitace(poleParametru) {
  for (i in poleParametru) {
    document.getElementById(poleParametru[i]).className += " povinnyParCitace";
  }
}

/* =================== Hlavní funkce pro zobrazení formulářů ========================== */

// FUNKCE TVOŘÍCÍ TLAČÍTKO CITACE DO EDITAČNÍ LIŠTY
function createCitationButton() {

  // bez editace skončit
  if(mw.config.get("wgAction") == "view" || !document.getElementById("wpTextbox1")) return;

  // staré prohlížeče ukončit
  // časem zde bude náhradní kód pro staré prohlížeče (nové okno)
  if (!window.XMLHttpRequest) return;

  // přidání CSS stylu
  mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/index.php?title=MediaWiki:Citace.css&action=raw&ctype=text/css", "text/css" );

  // vytvoření divu pro overlay
  overlayDiv = document.createElement("div");
  overlayDiv.className = "overlay_div_cit";
  overlayDiv.id = "overlay_div_cit";
  overlayDiv.onclick = function(){closeCitationBox();};

  // zapozicování na stránku a zafixování při rolování
  kam = getScrollXY();
  overlayDiv.style.top = kam[0];
  overlayDiv.style.position = "fixed";

  // přidání divu na stránku
  document.body.appendChild(overlayDiv);

  // blok s textem
  contentDiv = document.createElement("div");
  contentDiv.className = "content_div_cit";
  contentDiv.id = "content_div_cit";

  // zapozicování bloku
  contentDiv.style.top = 20 + kam[0];
  contentDiv.style.position = "fixed";

  // přidání bloku na stránku
  document.body.appendChild(contentDiv);
}

// FUNKCE ZAVÍRAJÍCÍ BOX S CITACEMI PO KLIKNUTÍ NA "ZAVŘÍT"
function closeCitationBox() {
  document.getElementById('overlay_div_cit').style.display = 'none';
  document.getElementById('content_div_cit').style.display = 'none';
  document.getElementById('wpTextbox1').value = document.getElementById('wpTextbox1').value.replace('--//--//--', '');
  //document.forms['editform'].elements['wpTextbox1'].focus();

  return false;
}

// FUNKCE VRACEJÍCÍ ŘÁDEK FORMULÁŘE S POŽADOVANÝM ÚDAJEM
// parametr "popis": udává popis políčka
// parametr "parametr": udává parametr šablony Citace
// parametr "typ": udává typ vstupu (text, checkbox, aj.)
function createCitationFormRow(popis, parametr, typ) {

  // defaultní typ vstupu: text
  if(!typ) typ =  "text";

  // výroba řádku
  output = '<div><p><label for="' + parametr + '">' + popis + ':&nbsp;</label><input type="' + typ + '" name="' + parametr + '" id="' + parametr +'" /></p></div>';

  // výstup
  return output;
}

// FUNKCE VRACEJÍCÍ ŘÁDEK PRO KONKRÉTNÍ PARAMETR ŠABLONY CITACE
// parametr "parametr": parametr šablony
function createCitationInput(parametr){
  // pole řádků
  output = {

  // autoři
  "korporace" : createCitationFormRow("Název korporace", "korporace"),
  "příjmení1" : createCitationFormRow("Příjmení prvního autora", "příjmení1"),
  "jméno1" : createCitationFormRow("Jméno prvního autora", "jméno1"),
  "příjmení2" : createCitationFormRow("Příjmení druhého autora", "příjmení2"),
  "jméno2" : createCitationFormRow("Jméno druhého autora", "jméno2"),
  "příjmení3" : createCitationFormRow("Příjmení třetího autora", "příjmení3"),
  "jméno3" : createCitationFormRow("Jméno třetího autora", "jméno3"),
  "kolektiv" : createCitationFormRow("Kolektiv", "kolektiv", "checkbox"),
  "autor_sborníku" : createCitationFormRow("Pořadatel sborníku", "autor_sborníku"),
  "odpovědnost" : createCitationFormRow("Autor/autoři", "odpovědnost"),
  "instituce" : createCitationFormRow("Instituce", "instituce"),
  "ústav" : createCitationFormRow("Ústav", "ústav"),
  "příjmení" : createCitationFormRow("Příjmení přednášejícího", "příjmení"),//parametr příjmení u přednášky
  "jméno" : createCitationFormRow("Jméno přednášejícího", "jméno"),//parametr jméno u přednášky

  // názvy
  "titul" : createCitationFormRow("Název", "titul"),
  "článek" : createCitationFormRow("Název článku", "článek"),
  "název" : createCitationFormRow("Název", "název"),
  "podnázev" : createCitationFormRow("Podnázev", "podnázev"),
  "časopis" : createCitationFormRow("Časopis", "časopis"),
  "sbírka" : createCitationFormRow("Sbírka", "sbírka"),
  "seriálová_publikace" : createCitationFormRow("Název seriálové publikace", "seriálová_publikace"),
  "označení" : createCitationFormRow("Označení dokumentu", "označení"),
  "sborník" : createCitationFormRow("Název sborníku", "sborník"),
  "dokument" : createCitationFormRow("Název dokumentu", "dokument"),
  "téma" : createCitationFormRow("Název přednášky", "téma"),
  "příspěvek" : createCitationFormRow("Název příspěvku", "příspěvek"),
  "název_konference" : createCitationFormRow("Název konference", "název_konference"),

  // popisy a vydavatelé
  "url" : createCitationFormRow("Dostupné z WWW", "url"),
  "vydání" : createCitationFormRow("Vydání", "vydání"),
  "místo" : createCitationFormRow("Místo (město)", "místo"),
  "země" : createCitationFormRow("Země", "země"),
  "vydavatel" : createCitationFormRow("Vydavatel", "vydavatel"),
  "rok" : createCitationFormRow("Rok", "rok"),
  "datum_revize" : createCitationFormRow("Datum poslední revize", "datum_revize"),
  "citováno" : createCitationFormRow("Datum citování", "citováno"),
  "ročník" : createCitationFormRow("Ročník", "ročník"),
  "číslo" : createCitationFormRow("Číslo", "číslo"),
  "rozsah" : createCitationFormRow("Počet stran", "rozsah"),
  "edice" : createCitationFormRow("Edice", "edice"),
  "svazek" : createCitationFormRow("Svazek", "svazek"),
  "volume" : createCitationFormRow("Volume", "svazek"),
  "kapitola" : createCitationFormRow("Číslo kapitoly", "kapitola"),
  "název_kapitoly" : createCitationFormRow("Název kapitoly", "název_kapitoly"),
  "strany" : createCitationFormRow("Citované strany", "strany"),
  "poznámky" : createCitationFormRow("Další údaje a poznámky", "poznámky"),
  "isbn" : createCitationFormRow("ISBN", "isbn"),
  "issn" : createCitationFormRow("ISSN", "issn"),
  "pmid" : createCitationFormRow("PMID", "pmid"),
  "doi" : createCitationFormRow("DOI", "doi"),
  "předmět" : createCitationFormRow("Předmět, jehož byla přednáška součástí", "předmět"),
  "obor": createCitationFormRow("Obor, pro nějž je předmět určen", "obor"),
  "fakulta" : createCitationFormRow("Fakulta", "fakulta"),
  "univerzita" : createCitationFormRow("Název vysoké školy", "univerzita"),
  "datum" : createCitationFormRow("Datum", "datum") //parametr datum u přednášky
  };

  // výstup
  return output[parametr];
}

// VYTVOŘENÍ FORMULÁŘE PRO CITACE
function createCitationForm() {

  // přidání spleti znaků pro pozdější změnu
  if(document.getElementById('wpTextbox1').value.indexOf('--//--//--') == -1) vlozitTextAreaSpletZnaku("wpTextbox1");
  document.getElementById('wpTextbox1').blur();

  overlayDiv = document.getElementById("overlay_div_cit");
  contentDiv = document.getElementById("content_div_cit");

  // zviditelnění divu overlay_div_cit
  overlayDiv.style.display = "block";

  // zviditelnění divu overlay_div_cit
  contentDiv.style.display = "block";

  // text
  contentDiv.innerHTML = baseTextCitace;
  contentDiv.innerHTML += "<p>Následující nástroje vám pomohou správně ocitovat použitou literaturu. Po vyplnění formuláře se do vašeho článku automaticky vloží šablona citací. Můžete využít rychlé citace pomocí specifických čísel. Pokud si s citací chcete pohrát, níže vyberte typ zdroje, ze kterého jste čerpali.</p>";

  //pole pro automatické vyplnění pomocí přímého vložení ISBN
  contentDiv.innerHTML +=
    '<form onsubmit="return false;" id="formISBN">' +
    '<label for="isbn">Rychlá citace knihy pomocí <b>ISBN</b>:</label>&nbsp;<input type="text" id="isbn" name="isbn" />&nbsp;' +
    '<input type="button" class="mw-ui-button" onclick="zpracovatISBN(document.forms[\'formISBN\'].elements[\'isbn\'].value)" value="Získat citaci pomocí ISBN" />&nbsp;<span id="isbn_wait"><span class="spinner-border spinner-border-sm text-secondary" role="status"></span>&nbsp;Prosím čekejte&hellip;</span>' +
    '</form><br />';
    
  //pole pro automatické vyplnění pomocí přímého vložení PMID
  contentDiv.innerHTML +=
    '<form onsubmit="return false;" id="formPMID">' +
    '<label for="pmid">Rychlá citace článku pomocí <b>PMID</b>:</label>&nbsp;<input type="text" id="pmid" name="pmid" />&nbsp;' +
    '<input type="button" class="mw-ui-button" onclick="zpracovatPMID(document.forms[\'formPMID\'].elements[\'pmid\'].value)" value="Získat citaci pomocí PMID" />&nbsp;<span id="pmid_wait"><span class="spinner-border spinner-border-sm text-secondary" role="status"></span>&nbsp;Prosím čekejte&hellip;</span>' +
    '</form><br />';

  // pole pro automatické vyplnění pomocí DOI
  contentDiv.innerHTML +=
    '<form onsubmit="return false;" id="formDOI">' +
    '<label for="doi">Rychlá citace článku pomocí <b>DOI</b>:</label>&nbsp;<input type="text" id="doi" name="doi" />&nbsp;' +
    '<input type="button" class="mw-ui-button" onclick="zpracovatDOI(document.forms[\'formDOI\'].elements[\'doi\'].value)" value="Získat citaci pomocí DOI" />&nbsp;<span id="doi_wait"><span class="spinner-border spinner-border-sm text-secondary" role="status"></span>&nbsp;Prosím čekejte&hellip;</span>' +
    '</form><br />';
    
  // základní nabídka
  contentDiv.innerHTML +=
    "<h4>Knihy a sborníky</h4>" +
    "<ul>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('kniha');\">" +
    "kniha</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('kapitola');\">" +
    "kapitola z knihy (shodný autor)</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('sborník');\">" +
    "kapitola z knihy (jiný autor), sborník</a></li>" +
    "</ul>" +
    "<h4>Články, práce a periodické materiály</h4>" +
    "<ul>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('článek');\">" +
    "článek</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('akademická_práce');\">" +
    "akademická práce (bakalářská, diplomová, habilitační,...)</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('seriálová_publikace');\">" +
    "seriálová publikace</a></li>" +
    "</ul>" +
    "<h4>Elektronické zdroje</h4>" +
    "<ul>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('web');\">" +
    "internetová stránka</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('cd');\">" +
    "nosič CD, DVD a další</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('db');\">" +
    "databáze</a></li>" +
    "</ul>" +
    "<h4>Oficiální materiály</h4>" +
    "<ul>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('firemní_literatura');\">" +
    "firemní literatura</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('legislativní_dokument');\">" +
    "legislativní dokument, zákon, předpis</a></li>" +
    "<li>" +
    "<a href=\"#\" onclick=\"return createCitationTypeForm('standard');\">" +
    "standard, norma, patent</a></li>" +
    "</ul>" +
    "<h4>Jiné</h4>" +
    "<ul>" +
    "<li>" +
    "<a href=\"#\"# onclick=\"return createCitationTypeForm('přednáška');\">" +
    "přednáška na vysoké škole</a></li>" +
    "<li>" +
    "<a href=\"#\"# onclick=\"return createCitationTypeForm('konference');\">" +
    "příspěvek na konferenci</a></li>" +
    "</ul>";

	document.getElementById("isbn_wait").style.visibility= "hidden";
    document.getElementById("pmid_wait").style.visibility= "hidden";
    document.getElementById("doi_wait").style.visibility= "hidden";
  return false;
}


/* ============================= ISBN ================================================= */

// FUNKCE PRO ZPRACOVÁNÍ ISBN
function zpracovatISBN(formularX) {
  document.getElementById("isbn_wait").style.visibility= "visible";
  isbn = formularX.replace(/[^a-z0-9]/gi, '');

  // pokud je isbn, pak zjistit citační údaje
  if (isbn) {
    var urlISBN = "https://www.wikiskripta.eu/extensions/citace/isbng.php?isbn=" + isbn;

    $.ajax({
      url: urlISBN
    }).done(function(data){

      // dobrý formát ISBN, ale neplatné číslo...
      if (data.indexOf("{") == -1) {
        document.getElementById("isbn_wait").style.visibility= "hidden";
        window.alert("Knihu se zadaným ISBN jsme nenašli v databázi.");
        document.forms["formISBN"].elements["isbn"].value = "";
        return false;
      }

      // správné ISBN získá šablonu Citace z PHP skriptu
      // vložení do textu na místo pomocné spleti znaků
      novyOutput = document.getElementById("wpTextbox1").value;
      novyOutput = novyOutput.replace("--//--//--", data);
      document.getElementById("wpTextbox1").value = novyOutput;

      // zavřít udělátko
      document.getElementById("isbn_wait").style.visibility= "hidden";
      closeCitationBox();
      return false;
    });
  } else {
    // špatný formát ISBN
    document.getElementById("isbn_wait").style.visibility= "hidden";
    window.alert("Prosím, vložte ISBN.");
    document.forms["formISBN"].elements["isbn"].value = "";
    return false;
  }
}


/* ============================= PMID ================================================= */

// FUNKCE PRO ZPRACOVÁNÍ PMID
function zpracovatPMID(formularX) {
  document.getElementById("pmid_wait").style.visibility= "visible";
  pmid = formularX;
  exptest = /^\d+$/;

  // pokud je pmid pravé, pak zjistit citační údaje
  if (exptest.test(pmid) == true) {
    var urlPMID = "https://www.wikiskripta.eu/extensions/citace/pmid.php?pmid=" + pmid;

    $.ajax({
      url: urlPMID
    }).done(function(data){

      // dobrý formát PMID, ale neplatné číslo...
      if (data.indexOf("{{") == -1) {
        document.getElementById("pmid_wait").style.visibility= "hidden";
        window.alert("Článek se zadaným PMID jsme nenašli v databázi.");
        document.forms["formPMID"].elements["pmid"].value = "";
        return false;
      }

      // správné PMID získá šablonu Citace z PHP skriptu
      // vložení do textu na místo pomocné spleti znaků
      novyOutput = document.getElementById("wpTextbox1").value;
      novyOutput = novyOutput.replace("--//--//--", data);
      document.getElementById("wpTextbox1").value = novyOutput;

      // zavřít udělátko
      document.getElementById("pmid_wait").style.visibility= "hidden";
      closeCitationBox();
      return false;
    });
  } else {
    // špatný formát PMID
    document.getElementById("pmid_wait").style.visibility= "hidden";
    window.alert("Zadali jste neplatné číslo PMID. Prosím, zkuste jej zadat znovu.");
    document.forms["formPMID"].elements["pmid"].value = "";
    return false;
  }
}

/* ============================= DOI ================================================= */

// FUNKCE PRO ZPRACOVÁNÍ DOI
function zpracovatDOI(formularX) {
  document.getElementById("doi_wait").style.visibility= "visible";
  doi = formularX;
  exptest = /^10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])\S)+$/;

  // pokud je doi pravé, pak zjistit citační údaje
  if (exptest.test(doi) == true) {
    var urlDOI = "https://www.wikiskripta.eu/extensions/citace/doi.php?doi=" + doi;

    $.ajax({
      url: urlDOI
    }).done(function(data){

      // dobrý formát DOI, ale neplatné číslo...
      if (data == "0") {
        document.getElementById("doi_wait").style.visibility= "hidden";
        window.alert("Článek se zadaným DOI jsme nenašli v databázi.");
        document.forms["formDOI"].elements["doi"].value = "";
        return false;
      }

      // správné DOI získá šablonu Citace z PHP skriptu
      // vložení do textu na místo pomocné spleti znaků
      novyOutput = document.getElementById("wpTextbox1").value;
      novyOutput = novyOutput.replace("--//--//--", data);
      document.getElementById("wpTextbox1").value = novyOutput;

      // zavřít udělátko
      document.getElementById("doi_wait").style.visibility= "hidden";
      closeCitationBox();
      return false;
    });
  } else {
    // špatný formát DOI
    document.getElementById("doi_wait").style.visibility= "hidden";
    window.alert("Zadali jste neplatné číslo DOI. Prosím, zkuste jej zadat znovu.");
    document.forms["formDOI"].elements["doi"].value = "";
    return false;
  }
}


/* ====================== Definitivní citační formulář ================================ */

// FUNKCE POMÁHAJÍCÍ UKÁZAT VÍCE AUTORŮ VE FORMULÁŘI
function showNextAuthors() {
	$("#citDalsiAutoriForm, #citKorporaceForm").fadeIn();
	$("#citHide").fadeOut();
}

// FUNKCE PRO PŘEPIS CITAČNÍHO BOXU NA FORMULÁŘ K DANÉMU KONKRÉTNÍMU TYPU CITACE
// parametr "typ": typ zdroje
function createCitationTypeForm(typ) {

  // citační box
  contentDiv = document.getElementById("content_div_cit");

  // začátek výstupu: info o citaci
  output = '<h3>Typ citace: ' + typ.replace("_", " ") + '</h3>';

  // nápověda
  output += '<p>Následující formulář vám pomůže vytvořit citaci. Prosím, vždy uveďte autory, pokud je to možné. Další vyžadovaná políčka jsou zvýrazněna červeně. Po stisknutí tlačítka <b>Vytvořit citaci</b> bude do vašeho článku vložena šablona s citovaným zdrojem.<br><small>Pokud jste omylem vybrali nesprávný typ citovaného zdroje, můžete se vrátit na předchozí stránku stisknutím <b>Obnovit</b> nahoře vpravo. Odkaz <b>Zavřít</b> tamtéž úplně zavře toto okno a vrátí vás k editaci článku.</small></p>';

  // začátek formuláře
  // kapitola se cituje jako kniha, seriálová publikace jako článek
  output += '<form onsubmit="return zpracovatCitace(this, \'' + (typ == "kapitola" ? "kniha" : (typ == "seriálová_publikace" ? "článek" : typ)) + '\');">';

  // autoři
  switch(typ) {
  case "kniha" :
  case "kapitola" :
  case "sborník" :
  case "článek" :
  case "seriálová_publikace" :
  case "web" :
  case "cd" :
  case "firemní_literatura" :
  case "akademická_práce" :
    output += '<div><fieldset><legend>Autoři</legend>';
    output += '<div id="citKorporaceForm">';
    output += createCitationInput("korporace");
    output += '</div>';
    output += createCitationInput("příjmení1");
    output += createCitationInput("jméno1");
    output += '<div id="citDalsiAutoriForm">';
    output += createCitationInput("příjmení2");
    output += createCitationInput("jméno2");
    output += createCitationInput("příjmení3");
    output += createCitationInput("jméno3");
    output += '</div>';
    output += createCitationInput("kolektiv");
    output += '<a href="javascript:showNextAuthors()" id="citHide">Více autorů či korporace&hellip;</a>';
    output += '</fieldset></div>';
    break;
  default :
    break;
  }


  // ostatní parametry
  switch(typ) {

    // knižní typy
    case "sborník" :
      output += '<div><fieldset><legend>Název příspěvku nebo kapitoly</legend>';
      output += createCitationInput("titul");
      output += createCitationInput("podnázev");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Údaje o sborníku nebo knize</legend>';
      output += createCitationInput("sborník");
      output += createCitationInput("autor_sborníku");
      output += '<div class="prefsectiontip">Autora prosím vyplňte ve formátu: "PŘÍJMENÍ, Jméno". Případné iniciály prosím uveďte bez teček.</div>';
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Údaje o dostupnosti</legend>';
      output += createCitationInput("url");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Údaje o vydání</legend>';
      output += createCitationInput("vydání");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Nakladatelské údaje a fyzický popis</legend>';
      output += createCitationInput("místo");
      output += createCitationInput("vydavatel");
      output += createCitationInput("rok");
      output += createCitationInput("rozsah");
      output += createCitationInput("edice");
      output += createCitationInput("svazek");
      output += createCitationInput("strany");
      output += createCitationInput("poznámky");
      output += createCitationInput("isbn");
      output += '</fieldset></div>';
      break;
    case "kapitola" :
    case "firemní_literatura" :
      output += '<div><fieldset><legend>Údaje o kapitole</legend>';
      output += createCitationInput("kapitola");
      output += createCitationInput("název_kapitoly");
      output += '</fieldset></div>';
    case "kniha" :
      output += '<div><fieldset><legend>Údaje o názvu</legend>';
      output += createCitationInput("titul");
      output += createCitationInput("podnázev");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Údaje o dostupnosti</legend>';
      output += createCitationInput("url");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Údaje o vydání</legend>';
      output += createCitationInput("vydání");
      output += '</fieldset></div>';
      output += '<div><fieldset><legend>Nakladatelské údaje a fyzický popis</legend>';
      output += createCitationInput("místo");
      output += createCitationInput("vydavatel");
      output += createCitationInput("rok");
      output += createCitationInput("rozsah");
      output += createCitationInput("edice");
      output += createCitationInput("svazek");
      output += createCitationInput("strany");
      output += createCitationInput("poznámky");
      output += createCitationInput("isbn");
      output += '</fieldset></div>';
      break;

    // článkové typy
    case "seriálová_publikace" :
      output += '<div><fieldset><legend>Údaje o publikaci</legend>';
      output += createCitationInput("seriálová_publikace");
      output += '</fieldset></div>';
    case "článek" :
      output += '<div><fieldset><legend>Článek/Publikace</legend>';
      output += createCitationInput("článek");
      output += '</fieldset></div>';
      if (typ == "článek") {
        output += '<div><fieldset><legend>Údaje o časopise</legend>';
        output += createCitationInput("časopis");
      } else if (typ == "seriálová_publikace") {
        output += '<div><fieldset><legend>Údaje o publikaci</legend>';
      }
      output += createCitationInput("url");
      output += createCitationInput("rok");
      output += createCitationInput("ročník");
      output += createCitationInput("volume");
      output += createCitationInput("číslo");
      output += createCitationInput("strany");
      output += createCitationInput("poznámky");
      output += createCitationInput("issn");
      output += '</fieldset></div>';
      break;

    // elektronické zdroje
    case "db" :
      output += '<div><fieldset><legend>Údaje o odpovědnosti, autorech</legend>';
      output += createCitationInput("odpovědnost");
      output += '</fieldset></div>';
    case "web" :
      output += '<div><fieldset><legend>Údaje o dostupnosti</legend>';
      output += createCitationInput("url");
      output += '</fieldset></div>';
    case "cd" :
      output += '<div><fieldset><legend>Údaje o zdroji</legend>';
      output += createCitationInput("název");
      output += createCitationInput("podnázev");
      output += createCitationInput("vydavatel");
      output += createCitationInput("rok");
      output += createCitationInput("datum_revize");
      output += createCitationInput("citováno");
      output += '</fieldset></div>';
      break;

    // legislativní dokument
    case "legislativní_dokument" :
      output += '<div><fieldset><legend>Údaje o legislativním dokumentu</legend>';
      output += createCitationInput("země");
      output += createCitationInput("instituce");
      output += createCitationInput("dokument");
      output += createCitationInput("sbírka");
      output += createCitationInput("rok");
      output += createCitationInput("poznámky");
      output += createCitationInput("strany");
      output += createCitationInput("url");
      output += '</fieldset></div>';
      break;

    // standard
    case "standard" :
      output += '<div><fieldset><legend>Údaje o standardu, normě</legend>';
      output += createCitationInput("označení");
      output += createCitationInput("název");
      output += createCitationInput("místo");
      output += createCitationInput("instituce");
      output += createCitationInput("rok");
      output += createCitationInput("poznámky");
      output += createCitationInput("strany");
      output += createCitationInput("url");
      output += '</fieldset></div>';
      break;

    // akademická literatura
    case "akademická_práce" :
      output += '<div><fieldset><legend>Údaje o akademické práci</legend>';
      output += createCitationInput("název");
      output += createCitationInput("podnázev");
      output += createCitationInput("místo");
      output += createCitationInput("ústav");
      output += createCitationInput("rok");
      output += createCitationInput("url");
      output += createCitationInput("strany");
      output += createCitationInput("poznámky");
      output += '</fieldset></div>';
      break;

    case "přednáška":
      output += '<div><fieldset><legend>Údaje o přednášce na vysoké škole</legend>';
      output += createCitationInput("příjmení");
      output += createCitationInput("jméno");
      output += createCitationInput("téma");
      output += createCitationInput("předmět");
      output += createCitationInput("obor");
      output += createCitationInput("fakulta");
      output += createCitationInput("univerzita");
      output += createCitationInput("místo");
      output += createCitationInput("datum");
      output += createCitationInput("url");
      output += createCitationInput("poznámky");
      output += '</fieldset></div>';
      break;

    case "konference":
      output += '<div><fieldset><legend>Údaje o příspěvku na konferenci</legend>';
      output += createCitationInput("příjmení");
      output += createCitationInput("jméno");
      output += createCitationInput("příspěvek");
      output += createCitationInput("název_konference");
      output += createCitationInput("místo");
      output += createCitationInput("datum");
      output += createCitationInput("url");
      output += createCitationInput("poznámky");
      output += '</fieldset></div>';
      break;
  }

  if (typ == "článek") {
    output += "<div><fieldset><legend>Další identifikátory</legend>";
    output += createCitationInput("pmid");
    output += '<div class="prefsectiontip">Zde můžete uvést PMID číslo článku v databázi PubMed.</div>';
    output += createCitationInput("doi");
    output += '<div class="prefsectiontip">Pokud je článek k dispozici pod identifikátorem DOI, můžete jej zde zadat.</div>';
    output += "</fieldset></div>";
  }

  // tlačítko pro odeslání a závěr formuláře
  output += '<input type="submit" class="mw-ui-button mw-ui-progressive" value="Vytvořit citaci" />&nbsp;';
  output += '<input type="reset" class="mw-ui-button" value="Vyčistit formulář" /></form>';
  output += '<p>&nbsp;</p>';

  // kýžený výstup: přepis formuláře a zablokování odkazu
  contentDiv.innerHTML = baseTextCitace + output;

  // povinné parametry jednotlivých zdrojů:
  polePovinnychParametru = new Array();
  switch (typ) {
    case "kniha":
    case "kapitola":
      polePovinnychParametru = ["titul", "vydání", "rok", "isbn"];
      break;
    case "sborník":
      polePovinnychParametru = ["titul", "vydání", "autor_sborníku", "rok"];
      break;
    case "článek":
      polePovinnychParametru = ["článek", "časopis", "strany", "rok", "ročník", "svazek", "issn"];
      break;
    case "seriálová_publikace":
      polePovinnychParametru = ["článek", "název", "seriálová_publikace", "strany", "rok", "svazek", "ročník", "issn"];
      break;
    case "web":
      polePovinnychParametru = ["příjmení1", "korporace", "název", "citováno", "url"];
      break;
    case "cd":
      polePovinnychParametru = ["citováno", "název"];
      break;
    case "db":
      polePovinnychParametru = ["název", "odpovědnost", "citováno", "url"];
      break;
    case "firemní_literatura":
      polePovinnychParametru = ["titul", "vydavatel", "rok"];
      break;
    case "legislativní_dokument":
      polePovinnychParametru = ["země", "dokument", "rok"];
      break;
    case "standard":
      polePovinnychParametru = ["označení", "název", "rok"];
      break;
    case "akademická_práce":
      polePovinnychParametru = ["název", "místo", "rok"];
      break;
    case "přednáška":
      polePovinnychParametru = ["příjmení", "téma", "předmět", "obor", "fakulta", "univerzita", "místo", "datum"];
      break;
    case "konference":
      polePovinnychParametru = ["příjmení", "příspěvek", "název_konference", "místo", "datum"];
      break;
  }

  // vytvořit třídy pro povinné parametry
  classPovinneCitace(polePovinnychParametru);

  // vyplnit datum, je-li potřeba
  if(document.getElementById("citováno")) {

    datumCitace = document.getElementById("citováno");

    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;

    datumCitace.value = vyplneni_data;
    datumCitace.onclick = function() {
      document.getElementById("citováno").value = "";
      document.getElementById("citováno").onclick = null;
    }
  }
  
  // nascrollovat nahoru;
  document.getElementById("content_div_cit").scrollTop = 0;

  // konec
  return false;
}

/* ================================= Spouštěcí funkce ================================= */

// spuštění všeho
$(createCitationButton);

// tlačítko samotné
function insertCitationButton() {
  $('#wpTextbox1').wikiEditor('addToToolbar', {
    'section': 'main',
    'group': 'insert',
    'tools': {'citation': {
      label: 'Vytvořit citaci',
      type: 'button',
      icon: 'https://www.wikiskripta.eu/images/thumb/2/29/Citace.png/19px-Citace.png',
      action: {type: 'callback',
        execute: function(context){createCitationForm();}
      }
    }}
  });
}

// kontrola načtení všech potřebných modulů a spuštění...
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
	mw.loader.using( 'user.options' ).then( function () {
		// This can be the string "0" if the user disabled the preference ([[phab:T54542#555387]])
		if ( mw.user.options.get( 'usebetatoolbar' ) == 1 ) {
			$.when(
				mw.loader.using( 'ext.wikiEditor' ), $.ready
			).then( insertCitationButton );
		}
	} );
}