MediaWiki:Gadget-vytvor-knihu.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.
/* <pre> */
var apiXmlContent;

//získá z API interní odkazy, na něž stránka odkazuje
function createBook() {
  var title;
  //získá název článku z url
  title = encodeURIComponent(mw.config.get("wgPageName"));
  //žádost API pomocí xmlHttpRequestu
  if (title != null) {
    var apiUrl = mw.config.get('wgServer') + '/api.php?action=query&titles=' + title + '&prop=revisions&rvprop=content&format=xml';
    getXMLHttpRequest("apiXmlContent", apiUrl, "parseApiRequest");
  }
}

/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function(token, newToken, ignoreCase) {
    var str, i = -1, _token;
    if((str = this.toString()) && typeof token === "string") {
        _token = ignoreCase === true? token.toLowerCase() : undefined;
        while((i = (
            _token !== undefined? 
                str.toLowerCase().indexOf(
                            _token, 
                            i >= 0? i + newToken.length : 0
                ) : str.indexOf(
                            token,
                            i >= 0? i + newToken.length : 0
                )
        )) !== -1 ) {
            str = str.substring(0, i)
                    .concat(newToken)
                    .concat(str.substring(i + token.length));
        }
    }
return str;
};

//projde odpověď API a přetvoří ji do kódu knihy
function parseApiRequest() {
  if (apiXmlContent.readyState == 4 && apiXmlContent.status == 200) {

    var content = apiXmlContent.responseXML.getElementsByTagName('rev')[0].childNodes[0].wholeText;
    content = content.replaceAll("[[", "\n:[[");
    content = content.replaceAll("#", "|");
    content = content.replaceAll("*", "|");

    //přeměň nadpisy uvozené rovnítky na nadpisy uvozené středníkem:
    nadpisPattern = /=+ ?(.*?) ?=+/gm;
    nadpisyMatch = content.match(nadpisPattern);
    var nadpis;
    var newNadpis;
    for (var i in nadpisyMatch) {
        nadpis = nadpisyMatch[i];
        newNadpis = nadpis.replace("=== ", "");
        newNadpis = newNadpis.replace(" ===", "");
        newNadpis = nadpis.replace("== ", "");
        newNadpis = newNadpis.replace(" ==", "");
        newNadpis = newNadpis.replace("==", "");
        newNadpis = nadpis.replace("= ", "");
        newNadpis = newNadpis.replace(" =", "");
        newNadpis = newNadpis.replaceAll("=", "");
        newNadpis = ";" + newNadpis;
        content = content.replace(nadpis, newNadpis);
    }

    //zjisti předmět, fakultu a obor:
    pattern = /Otázky z (.*?) \((.*?)\)/;
    regexMatch = pattern.exec(mw.config.get("wgTitle"));
    if (regexMatch) {
        predmet = regexMatch[1];
        obor = regexMatch[2];
    } else {
        //slovensky?
        pattern = /Otázky na skúšku z (.*?) \((.*?)\)/;
        regexMatch = pattern.exec(mw.config.get("wgTitle"));
        if (regexMatch) {
            predmet = regexMatch[1];
            obor = regexMatch[2];
        } else {
            predmet = mw.config.get("wgTitle");
            obor = mw.config.get("wgTitle");
        }
    }

    var bookCode = "<noinclude>{{Uložená kniha | vypracované zkouškové otázky z " + predmet + "}}</noinclude>\n\n";
    bookCode += "{{Netisknout|\n== Vypracované otázky z " + predmet + " ==\n";

    switch (obor) {
        case "1. LF, VL":
            bookCode += "=== 1. lékařská fakulta UK, obor Všeobecné lékařství ===\n\n";
            break;
        case "2. LF, VL":
            bookCode += "=== 2. lékařská fakulta UK, obor Všeobecné lékařství ===\n\n";
            break;
        case "3. LF, VL":
            bookCode += "=== 3. lékařská fakulta UK, obor Všeobecné lékařství ===\n\n";
            break;
        case "1. LF, ZL":
            bookCode += "=== 1. lékařská fakulta UK, obor Zubní lékařství ===\n\n";
            break;
        case "LFP, VL":
            bookCode += "=== Lékařská fakulta UK v Plzni, obor Všeobecné lékařství ===\n\n";
            break;
        case "LFHK, VL":
            bookCode += "=== Lékařská fakulta UK v Hradci Králové, obor Všeobecné lékařství ===\n\n";
            break;
        case "LF UPJŠ, VL":
            bookCode += "=== Lekárska fakulta Univerzity Pavla Jozefa Šafárika, Všeobecné lekárstvo ===\n\n";
            break;
    }
    bookCode += "\n\n:[[Portál:" + mw.config.get("wgTitle") + "|Obsah]]\n}}\n\n{{Abc | styl=decimal |\n";
    bookCode += content;
    bookCode += "\n}}\n\n<noinclude>[[Kategorie:Knihy|{{PAGENAME}}]]</noinclude>";

    //zbav se volných rádků:
    bookCode = bookCode.replaceAll("\n\n\|\n", "\n|\n");
    bookCode = bookCode.replaceAll("\n\|\n\n", "\n|\n");

    //spravně odkazované kategorie:
    bookCode = bookCode.replaceAll(":[[Kategorie:", "[[Kategorie:");
    
    noveokno=window.open();
    noveokno.document.write('<html><head><title>Vytvoř knihu</title></head><body><h1>Vytvoř knihu</h1><p>Klikněte prosím na následující text a on se označí. Potom jej zkopírujte, vložte na požadovanou stránku ve WikiSkriptech, zkontrolujte a uložte.</p><form><textarea cols="200" rows="20" readonly="readonly" onclick="this.select()">' + bookCode + '</textarea></body></html>');
    noveokno.document.close();
  }
}

//tlačítko do horního menu
jQuery( function( $ ) {
    if (mw.config.get("wgNamespaceNumber") == 100) {
      var knihaVypracovanychOtazekPortletLink = mw.util.addPortletLink(
          'p-coll-print_export',
          '#',
          'Kniha otázek',
          'javascript-link-kniha-vypracovanych-otazek',
          'vytvořit wikikód knihy vypracovaných otázek z tohoto seznamu',
          '',
          'coll-create_a_book'
      );
      $( knihaVypracovanychOtazekPortletLink ).click( function ( e ) {
           e.preventDefault();
           createBook();
      });
    }
    //addPortletLink('p-personal', 'JavaScript:createBook()', 'Kniha otázek', '', 'Vytvoří knihu ze seznamu zkouškových otázek', '', document.getElementById('pt-mycontris'));
} );

/* </pre> */