Klávesové zkratky pro vykonání příkazu (ctrl+enter) a zobrazení historie (ctrl+h). A možnost zadávat tabulátor jako součást SQL.
1.1 --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java Fri May 29 00:36:44 2009 +0200
1.2 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Servlet.java Fri May 29 01:31:01 2009 +0200
1.3 @@ -22,6 +22,8 @@
1.4 vykonat,
1.5 /** Vypíše historii SQL příkazů daného uživatele. */
1.6 historie,
1.7 + /** Nápověda – průvodce */
1.8 + napoveda,
1.9 /** Vypíše nějaké nepotřebné informace. */
1.10 test,
1.11 /** Pokud je požadovaná akce nesmysl. */
1.12 @@ -64,6 +66,9 @@
1.13 case historie:
1.14 out.println(a.getHistorie(uzivatel));
1.15 break;
1.16 + case napoveda:
1.17 + out.println("<p>Nápověda bude…</p>");
1.18 + break;
1.19 case test:
1.20 out.println("<p>AJAX jede!</p>");
1.21 out.println("<ol>");
2.1 --- a/java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx Fri May 29 00:36:44 2009 +0200
2.2 +++ b/java/sql-vyuka/web/WEB-INF/casti/aplikace.jspx Fri May 29 01:31:01 2009 +0200
2.3 @@ -23,7 +23,7 @@
2.4 <div class="vnitrekBloku">
2.5 <form action="#" name="aplikace">
2.6 <fieldset>
2.7 - <textarea id="vstupniPole" name="vstupniPole" rows="100" cols="1000"><fmt:message key="vychozi.sql"/></textarea>
2.8 + <textarea id="vstupniPole" name="vstupniPole" rows="100" cols="1000" onkeypress="javascript:checkTab(event);"><fmt:message key="vychozi.sql"/></textarea>
2.9 <button class="zobrazitHistorii"
2.10 name="zobrazitHistorii"
2.11 title="Vypíše historii SQL příkazů."
3.1 --- a/java/sql-vyuka/web/index.jsp Fri May 29 00:36:44 2009 +0200
3.2 +++ b/java/sql-vyuka/web/index.jsp Fri May 29 01:31:01 2009 +0200
3.3 @@ -11,6 +11,8 @@
3.4 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
3.5 <link href="styl.css" type="text/css" rel="StyleSheet"/>
3.6 <script type="text/javaScript" src="hlavni.js"></script>
3.7 + <script type="text/javaScript" src="vstupniPole.js"></script>
3.8 + <script type="text/javaScript" src="klavesoveZkratky.js"></script>
3.9 <title><fmt:message key="nazev"/></title>
3.10 </head>
3.11 <body>
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/java/sql-vyuka/web/klavesoveZkratky.js Fri May 29 01:31:01 2009 +0200
4.3 @@ -0,0 +1,30 @@
4.4 +/** Klávesové zkratky pro celou stránku */
4.5 +
4.6 +var isCtrl = false;
4.7 +
4.8 +document.onkeyup = function(e) {
4.9 + if(e.which == 17) {
4.10 + isCtrl = false;
4.11 + }
4.12 +}
4.13 +
4.14 +document.onkeydown = function(e) {
4.15 + if(e.which == 17) {
4.16 + isCtrl = true;
4.17 + }
4.18 +
4.19 + if (isCtrl) {
4.20 + if (e.which == 13) {
4.21 + /** ctrl+enter → vykonáme SQL */
4.22 + ajaxVykonatSQL();
4.23 + return false;
4.24 + } else if (e.which == 72) {
4.25 + /** ctrl+h → uobrazíme historii */
4.26 + ajaxZobrazitHistorii();
4.27 + return false;
4.28 + }
4.29 + return true;
4.30 + } else {
4.31 + return true;
4.32 + }
4.33 +}
4.34 \ No newline at end of file
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/java/sql-vyuka/web/vstupniPole.js Fri May 29 01:31:01 2009 +0200
5.3 @@ -0,0 +1,67 @@
5.4 +/** Umožní zadávat tabulátor */
5.5 +
5.6 +var tab = "\t";
5.7 +
5.8 +function checkTab(evt) {
5.9 +
5.10 + var t = evt.target;
5.11 + var ss = t.selectionStart;
5.12 + var se = t.selectionEnd;
5.13 +
5.14 +
5.15 + // Tabulátor
5.16 + if (evt.keyCode == 9) {
5.17 + evt.preventDefault();
5.18 +
5.19 + // Víceřádkový výběr
5.20 + if (ss != se && t.value.slice(ss,se).indexOf("\n") != -1) {
5.21 + var pre = t.value.slice(0,ss);
5.22 + var sel = t.value.slice(ss,se).replace(/\n/g,"\n"+tab);
5.23 + var post = t.value.slice(se,t.value.length);
5.24 + t.value = pre.concat(tab).concat(sel).concat(post);
5.25 + t.selectionStart = ss + tab.length;
5.26 + t.selectionEnd = se + tab.length;
5.27 + }
5.28 +
5.29 + // Jednořádkový nebo žádný výběr
5.30 + else {
5.31 + t.value = t.value.slice(0,ss).concat(tab).concat(t.value.slice(ss,t.value.length));
5.32 + if (ss == se) {
5.33 + t.selectionStart = t.selectionEnd = ss + tab.length;
5.34 + }
5.35 + else {
5.36 + t.selectionStart = ss + tab.length;
5.37 + t.selectionEnd = se + tab.length;
5.38 + }
5.39 + }
5.40 + }
5.41 +
5.42 + // Backspace
5.43 + else if (evt.keyCode==8 && t.value.slice(ss - 4,ss) == tab) {
5.44 + evt.preventDefault();
5.45 + t.value = t.value.slice(0,ss - 4).concat(t.value.slice(ss,t.value.length));
5.46 + t.selectionStart = t.selectionEnd = ss - tab.length;
5.47 + }
5.48 +
5.49 + // Delete
5.50 + else if (evt.keyCode==46 && t.value.slice(se,se + 4) == tab) {
5.51 + evt.preventDefault();
5.52 + t.value = t.value.slice(0,ss).concat(t.value.slice(ss + 4,t.value.length));
5.53 + t.selectionStart = t.selectionEnd = ss;
5.54 + }
5.55 +
5.56 + // Doleva
5.57 + else if (evt.keyCode == 37 && t.value.slice(ss - 4,ss) == tab) {
5.58 + alert("levá");
5.59 + evt.preventDefault();
5.60 + t.selectionStart = t.selectionEnd = ss - 4;
5.61 + }
5.62 +
5.63 +
5.64 + // Doprava
5.65 + else if (evt.keyCode == 39 && t.value.slice(ss,ss + 4) == tab) {
5.66 + alert("pravá");
5.67 + evt.preventDefault();
5.68 + t.selectionStart = t.selectionEnd = ss + 4;
5.69 + }
5.70 +}
5.71 \ No newline at end of file