java/sql-vyuka/web/hlavni.js
author František Kučera <franta-hg@frantovo.cz>
Tue Jul 14 18:08:07 2009 +0200 (2009-07-14)
changeset 50 1eb68e2ac637
parent 49 083966fa9d9d
child 57 6c2933b1d391
permissions -rw-r--r--
Svislý posuvník pro nápovědní pole.
     1 /** ID html prvků */
     2 const vstupniPole = 'vstupniPole';
     3 const vystupniPole = 'vystupniPole';
     4 const napovedniPole = 'napovedniPole';
     5 const stavovePole = 'stavovePole';
     6 
     7 
     8 /**
     9  * Aby to fungovalo i v MSIE 6.
    10  * @return AJAXový objekt.
    11  */
    12 function getXmlHttpRequestObject() {
    13     if (window.XMLHttpRequest) {
    14         return new XMLHttpRequest();
    15     } else if(window.ActiveXObject) {
    16         return new ActiveXObject("Microsoft.XMLHTTP");
    17     } else {
    18         alert(document.getElementById('lokalizace').nepodporovany.value);
    19         return null;
    20     }
    21 }
    22 
    23 
    24 /** Náš AJAXový objekt. */
    25 var ajax = getXmlHttpRequestObject();
    26 
    27 
    28 /**
    29  * Vrací vstup od uživatele.
    30  * @return SQL příkaz zadaný uživatelem.
    31  **/
    32 function getSQL() {
    33     return document.getElementById('aplikace').vstupniPole.value;
    34 }
    35 
    36 
    37 /**
    38  * Zobrazí text na požadovaném místě.
    39  * @param text text k zobrazení. V případě formulářů prostý text, v ostatních případech HTML text.
    40  * @param kde id prvku, do kterého se má text vypsat.
    41  **/
    42 function zobraz(text, kde) {
    43     if (kde == vstupniPole) {
    44         document.getElementById('aplikace').vstupniPole.value = text;
    45     } else if (kde == stavovePole)  {
    46         document.getElementById('aplikace').stavovePole.value = text;
    47     } else {
    48         document.getElementById(kde).innerHTML = text + '<p>&nbsp;<!-- Šťastné hackování ;-) --></p>';
    49     }
    50 }
    51 
    52 
    53 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
    54 function ajaxVykonatSQL() {
    55     if (ajax.readyState == 4 || ajax.readyState == 0) {
    56         zobraz(document.getElementById('lokalizace').probihaSQL.value, stavovePole);
    57         ajax.open("POST", 'ajax.jspx?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true);
    58         ajax.onreadystatechange = function() {
    59             if (ajax.readyState == 4) {
    60                 zobraz(ajax.responseText, vystupniPole);
    61                 zobraz('', stavovePole);
    62             }
    63         };
    64         ajax.send(null);
    65     }
    66     ulozURL();
    67 }
    68 
    69 
    70 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
    71 function ajaxZobrazitHistorii() {
    72     if (ajax.readyState == 4 || ajax.readyState == 0) {
    73         zobraz(document.getElementById('lokalizace').probihaHistorie.value, stavovePole);
    74         ajax.open("POST", 'ajax.jspx?akce=historie', true);
    75         ajax.onreadystatechange = function() {
    76             if (ajax.readyState == 4) {
    77                 zobraz(ajax.responseText, vystupniPole);
    78                 zobraz('', stavovePole);
    79             }
    80         };
    81         ajax.send(null);
    82     }
    83 }
    84 
    85 var pruvodceAktualniId = 0;
    86 var urlOdkaz = new Array();
    87 urlOdkaz['pruvodce'] = null;
    88 
    89 function ajaxPruvodcePredchozi() {
    90     ajaxPruvodceNaviguj('predchozi', pruvodceAktualniId, null);
    91 }
    92 
    93 function ajaxPruvodceZpet() {
    94     /** TODO: historie navigace */
    95     alert('Tato funkce se teprve připravuje.');
    96 }
    97 
    98 function ajaxPruvodceVpred() {
    99     /** TODO: historie navigace */
   100     alert('Tato funkce se teprve připravuje.');
   101 }
   102 
   103 function ajaxPruvodceNasledujici() {
   104     ajaxPruvodceNaviguj('nasledujici', pruvodceAktualniId, null);
   105 }
   106 
   107 function ajaxPruvodceKod(kod) {
   108     ajaxPruvodceNaviguj('podleKodu', 0, kod);
   109 }
   110 
   111 function ajaxPruvodceId(id) {
   112     ajaxPruvodceNaviguj('podleId', id, null);
   113 
   114 }
   115 
   116 function ajaxPruvodceNaviguj(akcePruvodce, id, kod) {
   117     if (ajax.readyState == 4 || ajax.readyState == 0) {
   118         ajax.open("POST", 'ajax.jspx?akce=napoveda&pruvodce=' + encodeURIComponent(akcePruvodce) + '&idPruvodce=' + encodeURIComponent(id) + '&kodPruvodce=' + encodeURIComponent(kod), true);
   119         ajax.onreadystatechange = function() {
   120             if (ajax.readyState == 4) {
   121                 zobraz(ajax.responseText, napovedniPole);
   122                 /** Uložíme si do paměti ID aktuální stránky */
   123                 if (document.pruvodceData) {
   124                     pruvodceAktualniId = document.pruvodceData.id.value
   125                 } else {
   126                     pruvodceAktualniId = 0;
   127                 }
   128                 /** Změníme URL v prohlížeči */
   129                 urlOdkaz['pruvodce']  = 'pruvodce=' + encodeURIComponent(pruvodceAktualniId);
   130                 ulozURL();
   131                 sestavStromy();
   132                 }
   133         };
   134         ajax.send(null);
   135     }
   136 }
   137 
   138 /**
   139  * Parametry si ukládáme za # do URL (window.location.hash)
   140  * Můžeme měnit URL, aniž by prohlížeč obnovoval stránku.
   141  * Uživatel si může URL zkopírovat a obnovit si příště stav aplikace.
   142  * @param parametr jméno parametru, který hledáme
   143  * @return hodnota parametr
   144  */
   145 function getParametr(parametr) {
   146     parametr = parametr.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
   147     //var regexS = "[\\?&]"+parametr+"=([^&#]*)";
   148     var regexS = "[\\#&]"+parametr+"=([^&]*)";
   149     var regex = new RegExp( regexS );
   150     var results = regex.exec(window.location.hash);
   151     if( results == null )
   152         return "";
   153     else
   154         return decodeURIComponent(results[1]);
   155 }
   156 
   157 /**
   158  * Uloží parametry (jako je SQL příkaz a stránka průvodce) do URL (za #),
   159  * aby si uživatel mohl URL zkopírovat a příště si obnovit stav aplikace.
   160  */
   161 function ulozURL() {
   162     if (urlOdkaz['pruvodce']) {
   163         window.location.hash = urlOdkaz['pruvodce'] + '&sql=' + encodeURIComponent(getSQL());
   164     } else {
   165         window.location.hash = 'sql=' + encodeURIComponent(getSQL());
   166     }
   167 }
   168 /**
   169  * Načte uložený stav aplikace z URL (SQL příkaz, průvodce).
   170  */
   171 function nactiURL() {
   172     /** Načteme uživatelův SQL příkaz z URL do vstupního pole */
   173     if (getParametr('sql')) {
   174         zobraz(getParametr('sql'), vstupniPole);
   175     }
   176     
   177     /** Načteme pozici v nápovědě */
   178     if (getParametr('pruvodce')) {
   179         ajaxPruvodceId(getParametr('pruvodce'));
   180     } else {
   181         ajaxPruvodceKod('vitejte');
   182     }
   183 }
   184 
   185 window.onload = function() {
   186     nactiURL();
   187 }