Experimentální implementace historie – fungují tlačítka zpět a vpřed v prohlížeči i v aplikaci (v navigační liště), ale nepracuje úplně správně.
Běží v nekonečné smyčce s čekáním 200 ms. Procházení historie nemění SQL příkaz (záměrně), ale přesto někdy nepracuje tak, jak se čeká.
2 const vstupniPole = 'vstupniPole';
3 const vystupniPole = 'vystupniPole';
4 const napovedniPole = 'napovedniPole';
5 const stavovePole = 'stavovePole';
9 * Aby to fungovalo i v MSIE 6.
10 * @return AJAXový objekt.
12 function getXmlHttpRequestObject() {
13 if (window.XMLHttpRequest) {
14 return new XMLHttpRequest();
15 } else if(window.ActiveXObject) {
16 return new ActiveXObject("Microsoft.XMLHTTP");
18 alert(document.lokalizace.nepodporovany.value);
24 /** Náš AJAXový objekt. */
25 var ajax = getXmlHttpRequestObject();
29 * Vrací vstup od uživatele.
30 * @return SQL příkaz zadaný uživatelem.
33 return document.aplikace.vstupniPole.value;
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.
42 function zobraz(text, kde) {
43 if (kde == vstupniPole) {
44 document.aplikace.vstupniPole.value = text;
45 } else if (kde == stavovePole) {
46 document.aplikace.stavovePole.value = text;
48 document.getElementById(kde).innerHTML = text + '<p> <!-- Šťastné hackování ;-) --></p>';
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.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);
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.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);
85 var pruvodceAktualniId = 0;
86 var urlOdkaz = new Array();
87 urlOdkaz['pruvodce'] = null;
89 function ajaxPruvodcePredchozi() {
90 ajaxPruvodceNaviguj('predchozi', pruvodceAktualniId, null);
93 function ajaxPruvodceZpet() {
99 function ajaxPruvodceVpred() {
105 function ajaxPruvodceNasledujici() {
106 ajaxPruvodceNaviguj('nasledujici', pruvodceAktualniId, null);
109 function ajaxPruvodceKod(kod) {
110 ajaxPruvodceNaviguj('podleKodu', 0, kod);
113 function ajaxPruvodceId(id) {
114 ajaxPruvodceNaviguj('podleId', id, null);
118 function ajaxPruvodceNaviguj(akcePruvodce, id, kod) {
119 navigaceProhlizecem = false;
120 if (ajax.readyState == 4 || ajax.readyState == 0) {
121 ajax.open("POST", 'ajax.jspx?akce=napoveda&pruvodce=' + encodeURIComponent(akcePruvodce) + '&idPruvodce=' + encodeURIComponent(id) + '&kodPruvodce=' + encodeURIComponent(kod), true);
122 ajax.onreadystatechange = function() {
123 if (ajax.readyState == 4) {
124 zobraz(ajax.responseText, napovedniPole);
125 /** Uložíme si do paměti ID aktuální stránky */
126 if (document.pruvodceData) {
127 pruvodceAktualniId = document.pruvodceData.id.value
129 pruvodceAktualniId = 0;
131 /** Změníme URL v prohlížeči */
132 urlOdkaz['pruvodce'] = 'pruvodce=' + encodeURIComponent(pruvodceAktualniId);
141 * Parametry si ukládáme za # do URL (window.location.hash)
142 * Můžeme měnit URL, aniž by prohlížeč obnovoval stránku.
143 * Uživatel si může URL zkopírovat a obnovit si příště stav aplikace.
144 * @param parametr jméno parametru, který hledáme
145 * @return hodnota parametr
147 function getParametr(parametr) {
148 parametr = parametr.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
149 //var regexS = "[\\?&]"+parametr+"=([^&#]*)";
150 var regexS = "[\\#&]"+parametr+"=([^&#]*)";
151 var regex = new RegExp( regexS );
152 var results = regex.exec(window.location.hash);
153 if( results == null )
156 return decodeURIComponent(results[1]);
160 * Uloží parametry (jako je SQL příkaz a stránka průvodce) do URL (za #),
161 * aby si uživatel mohl URL zkopírovat a příště si obnovit stav aplikace.
164 if (urlOdkaz['pruvodce']) {
165 window.location.hash = urlOdkaz['pruvodce'] + '&sql=' + encodeURIComponent(getSQL());
167 window.location.hash = 'sql=' + encodeURIComponent(getSQL());
172 * Načte uloženou pozici průvodce.
174 function nactiURL() {
179 * Načte uložený stav aplikace z URL (SQL příkaz, průvodce).
181 function nactiURL(nacistSQL) {
182 /** Načteme uživatelův SQL příkaz z URL do vstupního pole */
183 if (nacistSQL && getParametr('sql')) {
184 zobraz(getParametr('sql'), vstupniPole);
187 /** Načteme pozici v nápovědě */
188 if (getParametr('pruvodce')) {
189 ajaxPruvodceId(getParametr('pruvodce'));
191 ajaxPruvodceKod('vitejte');
195 window.onload = function() {
199 var locationHash = location.hash;
200 var navigaceProhlizecem = false;
202 setInterval(function() {
203 if (location.hash != locationHash) {
204 if (navigaceProhlizecem) {
207 navigaceProhlizecem = false;
208 locationHash = location.hash;