root/java/sql-vyuka/web/hlavni.js @ 70:35080c0f610e

Revision 70:35080c0f610e, 7.6 KB (checked in by František Kučera <franta-hg@…>, 15 years ago)

úprava formátování.

RevLine 
[3]1/** ID html prvků */
2const vstupniPole = 'vstupniPole';
3const vystupniPole = 'vystupniPole';
4const napovedniPole = 'napovedniPole';
[20]5const stavovePole = 'stavovePole';
[3]6
7
[2]8/**
9 * Aby to fungovalo i v MSIE 6.
10 * @return AJAXový objekt.
11 */
12function getXmlHttpRequestObject() {
13    if (window.XMLHttpRequest) {
[70]14        return new XMLHttpRequest();
[2]15    } else if(window.ActiveXObject) {
[70]16        return new ActiveXObject("Microsoft.XMLHTTP");
[2]17    } else {
[70]18        alert(document.getElementById('lokalizace').nepodporovany.value);
19        return null;
[2]20    }
21}
22
[22]23
[2]24/** Náš AJAXový objekt. */
25var ajax = getXmlHttpRequestObject();
26
[22]27
[2]28/**
[3]29 * Vrací vstup od uživatele.
30 * @return SQL příkaz zadaný uživatelem.
31 **/
32function getSQL() {
[48]33    return document.getElementById('aplikace').vstupniPole.value;
[3]34}
35
[22]36
[3]37/**
[2]38 * Zobrazí text na požadovaném místě.
[22]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.
[2]41 **/
42function zobraz(text, kde) {
[19]43    if (kde == vstupniPole) {
[70]44        document.getElementById('aplikace').vstupniPole.value = vratEntity(text);
[20]45    } else if (kde == stavovePole)  {
[70]46        document.getElementById('aplikace').stavovePole.value = vratEntity(text);
[19]47    } else {
[70]48        document.getElementById(kde).innerHTML = text + '<p>&nbsp;<!-- Šťastné hackování ;-) --></p>';
[19]49    }
[2]50}
51
52
53/** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
[5]54function ajaxVykonatSQL() {
[2]55    if (ajax.readyState == 4 || ajax.readyState == 0) {
[70]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);
[2]65    }
[39]66    ulozURL();
[2]67}
[5]68
69
70/** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
71function ajaxZobrazitHistorii() {
72    if (ajax.readyState == 4 || ajax.readyState == 0) {
[70]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                aktivujHistorii();
80            }
81        };
82        ajax.send(null);
[5]83    }
84}
[38]85
86var pruvodceAktualniId = 0;
[39]87var urlOdkaz = new Array();
88urlOdkaz['pruvodce'] = null;
[38]89
90function ajaxPruvodcePredchozi() {
91    ajaxPruvodceNaviguj('predchozi', pruvodceAktualniId, null);
92}
93
94function ajaxPruvodceZpet() {
[66]95    try {
[70]96        window.back();
97        nactiURL();
[66]98    } catch (e) {
[70]99    // není historie
[66]100    }
[38]101}
102
103function ajaxPruvodceVpred() {
[66]104    try {
[70]105        window.forward();
106        nactiURL();
[66]107    } catch (e) {
[70]108    // není historie
[66]109    }
[38]110}
111
112function ajaxPruvodceNasledujici() {
113    ajaxPruvodceNaviguj('nasledujici', pruvodceAktualniId, null);
114}
115
116function ajaxPruvodceKod(kod) {
117    ajaxPruvodceNaviguj('podleKodu', 0, kod);
118}
119
120function ajaxPruvodceId(id) {
121    ajaxPruvodceNaviguj('podleId', id, null);
122
123}
124
[50]125function ajaxPruvodceNaviguj(akcePruvodce, id, kod) {
[38]126    if (ajax.readyState == 4 || ajax.readyState == 0) {
[70]127        ajax.open("POST", 'ajax.jspx?akce=napoveda&pruvodce=' + encodeURIComponent(akcePruvodce) + '&idPruvodce=' + encodeURIComponent(id) + '&kodPruvodce=' + encodeURIComponent(kod), true);
128        ajax.onreadystatechange = function() {
129            if (ajax.readyState == 4) {
130                zobraz(ajax.responseText, napovedniPole);
131                /** Uložíme si do paměti ID aktuální stránky */
132                if (document.getElementById('pruvodceData')) {
133                    pruvodceAktualniId = document.getElementById('pruvodceData').id.value;
134                } else {
135                    pruvodceAktualniId = 0;
136                }
137                /** Změníme URL v prohlížeči */
138                urlOdkaz['pruvodce']  = 'pruvodce=' + encodeURIComponent(pruvodceAktualniId);
139                ulozURL();
140                sestavStromy();
141                aktivujPruvodce();
142            }
143        };
144        ajax.send(null);
[38]145    }
146}
[39]147
148/**
[40]149 * Parametry si ukládáme za # do URL (window.location.hash)
150 * Můžeme měnit URL, aniž by prohlížeč obnovoval stránku.
151 * Uživatel si může URL zkopírovat a obnovit si příště stav aplikace.
[39]152 * @param parametr jméno parametru, který hledáme
153 * @return hodnota parametr
154 */
155function getParametr(parametr) {
156    parametr = parametr.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
157    //var regexS = "[\\?&]"+parametr+"=([^&#]*)";
[45]158    var regexS = "[\\#&]"+parametr+"=([^&]*)";
[39]159    var regex = new RegExp( regexS );
160    var results = regex.exec(window.location.hash);
161    if( results == null )
[70]162        return "";
[39]163    else
[70]164        return decodeURIComponent(results[1]);
[39]165}
166
167/**
168 * Uloží parametry (jako je SQL příkaz a stránka průvodce) do URL (za #),
169 * aby si uživatel mohl URL zkopírovat a příště si obnovit stav aplikace.
170 */
171function ulozURL() {
172    if (urlOdkaz['pruvodce']) {
[70]173        window.location.hash = urlOdkaz['pruvodce'] + '&sql=' + encodeURIComponent(getSQL());
[39]174    } else {
[70]175        window.location.hash = 'sql=' + encodeURIComponent(getSQL());
[39]176    }
177}
178/**
179 * Načte uložený stav aplikace z URL (SQL příkaz, průvodce).
180 */
[42]181function nactiURL() {
[40]182    /** Načteme uživatelův SQL příkaz z URL do vstupního pole */
[42]183    if (getParametr('sql')) {
[70]184        zobraz(getParametr('sql'), vstupniPole);
[39]185    }
[40]186   
187    /** Načteme pozici v nápovědě */
188    if (getParametr('pruvodce')) {
[70]189        ajaxPruvodceId(getParametr('pruvodce'));
[40]190    } else {
[70]191        ajaxPruvodceKod('vitejte');
[40]192    }
[39]193}
194
195window.onload = function() {
[42]196    nactiURL();
[70]197    document.getElementById("zahlavi").addEventListener('click', function () {
198        ajaxPruvodceKod('vitejte');
199    }, false);
[60]200}
201
202/**
203 * Přidá <pre> elementům v průvodci akci onclick,
204 * která se postará o načtení obsahu daného elementu do vstupního pole,
205 * aby uživatel tento kód nemusel opisovat.
[61]206 *
207 * Zpracuje odkazy na průvodce:
208 * převede href="@klíč" na správný javascriptový odkaz.
[60]209 */
210function aktivujPruvodce() {
[61]211    /** Ukázky SQL kódu */
[60]212    elementy = document.getElementsByTagName("pre");
213    for (var i = 0; i < elementy.length; i++) {
[70]214        if (elementy[i].parentNode.id == napovedniPole) {
215            elementy[i].title = document.getElementById('lokalizace').klikniProNacteniPrikladu.value;
216            elementy[i].onclick = function() {
217                zobraz(this.innerHTML, 'vstupniPole');
218                return true;
219            };
220        }
[60]221    }
[61]222
223    /** Aktivace interních odkazů na průvodce */
224    elementy = document.getElementsByTagName("a");
225    for (var j = 0; j < elementy.length; j++) {
[70]226        var odkaz = elementy[j].getAttribute("href");
227        if (odkaz.substring(0, 1) == '@') {
228            elementy[j].href = "javascript:ajaxPruvodceKod('" + odkaz.substring(1, odkaz.length) + "');";
229        }
[61]230    }
[60]231}
232
233/**
[64]234 * Přidá <td> elementům v historii akci onclick,
235 * která se postará o načtení obsahu daného elementu do vstupního pole,
236 * aby uživatel tento kód nemusel opisovat.
237 */
238function aktivujHistorii() {
[65]239    radky = document.getElementsByTagName("tr");
240    for (var i = 1; i < radky.length; i++) {
[70]241        if (radky[i].parentNode.parentNode.parentNode.id == vystupniPole) {
242            radky[i].childNodes[1].title = document.getElementById('lokalizace').klikniProNacteniHistorie.value;
243            radky[i].childNodes[1].style.cursor = 'pointer';
244            radky[i].childNodes[1].onclick = function() {
245                zobraz(this.innerHTML, 'vstupniPole');
246                return true;
247            };
248        }
[64]249    }
250}
251
252/**
[60]253 * Převede HTML entity zpět na znaky,
254 * aby se správně zobrazily ve vstupním nebo stavovém poli.
255 */
256function vratEntity (text) {
257    var vysledek = text;
258    vysledek = vysledek.replace('&lt;', '<', 'g');
259    vysledek = vysledek.replace('&gt;', '>', 'g');
260    vysledek = vysledek.replace('&amp;', '&', 'g');
[64]261    vysledek = vysledek.replace('&nbsp;', ' ', 'g');
262    vysledek = vysledek.replace('&#160;', ' ', 'g');
[60]263    return vysledek;
264
265}
Note: See TracBrowser for help on using the browser.