提交 70380398 authored 作者: Thomas Mueller's avatar Thomas Mueller

Auto-complete on Tab. Formatting.

上级 7cf52f0b
...@@ -46,8 +46,8 @@ function buildTableAliases(input) { ...@@ -46,8 +46,8 @@ function buildTableAliases(input) {
var last = ""; var last = "";
for(var i=0; i<list.length; i++) { for(var i=0; i<list.length; i++) {
var word = list[i].toUpperCase(); var word = list[i].toUpperCase();
if(word != "AS") { if (word != "AS") {
if(columnsByTable[last]) { if (columnsByTable[last]) {
tableAliases[word] = last; tableAliases[word] = last;
} }
last = word; last = word;
...@@ -61,11 +61,11 @@ function splitSQL(s) { ...@@ -61,11 +61,11 @@ function splitSQL(s) {
var e = s.length; var e = s.length;
for(var i=0; i<e; i++) { for(var i=0; i<e; i++) {
var ch = s.charAt(i); var ch = s.charAt(i);
if(ch == '_' || (ch >= 'A' && ch <= 'Z')) { if (ch == '_' || (ch >= 'A' && ch <= 'Z')) {
var start = i; var start = i;
do { do {
ch = s.charAt(++i); ch = s.charAt(++i);
} while(ch == '_' || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z')); } while (ch == '_' || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z'));
list[list.length] = s.substring(start, i); list[list.length] = s.substring(start, i);
} }
} }
...@@ -76,22 +76,22 @@ function help() { ...@@ -76,22 +76,22 @@ function help() {
var input = document.h2query.sql; var input = document.h2query.sql;
setSelection(input); setSelection(input);
var pos = input.selectionStart; var pos = input.selectionStart;
if(pos > 0) { if (pos > 0) {
var s = input.value.substring(0, pos).toUpperCase(); var s = input.value.substring(0, pos).toUpperCase();
var e = pos-1; var e = pos-1;
for(; e>=0; e-=1) { for(; e>=0; e-=1) {
var ch = s.charAt(e); var ch = s.charAt(e);
if(ch != '_' && (ch < '0' || ch > '9') && (ch < 'A' || ch > 'Z')) { if (ch != '_' && (ch < '0' || ch > '9') && (ch < 'A' || ch > 'Z')) {
break; break;
} }
} }
s = s.substring(e+1, s.length); s = s.substring(e+1, s.length);
buildTableAliases(input.value); buildTableAliases(input.value);
if(!columnsByTable[s]) { if (!columnsByTable[s]) {
s = tableAliases[s]; s = tableAliases[s];
} }
if(columnsByTable[s]) { if (columnsByTable[s]) {
if(top.h2menu.goToTable(s)) { if (top.h2menu.goToTable(s)) {
top.h2menu.document.location='tables.do?jsessionid=${sessionId}#' + s; top.h2menu.document.location='tables.do?jsessionid=${sessionId}#' + s;
// top.h2menu.window.blur(); // top.h2menu.window.blur();
document.h2query.sql.focus(); document.h2query.sql.focus();
...@@ -101,7 +101,7 @@ function help() { ...@@ -101,7 +101,7 @@ function help() {
} }
function setSelection(element) { function setSelection(element) {
if(document.all && !is_opera) { if (document.all && !is_opera) {
try { try {
var range = document.selection.createRange(); var range = document.selection.createRange();
var copy = range.duplicate(); var copy = range.duplicate();
...@@ -122,20 +122,20 @@ function set(field, combo) { ...@@ -122,20 +122,20 @@ function set(field, combo) {
} }
function trim(s) { function trim(s) {
while(s.charAt(0)==' ' && s.length>0) { while (s.charAt(0)==' ' && s.length>0) {
s=s.substring(1); s=s.substring(1);
} }
while(s.charAt(s.length-1)==' ' && s.length>0) { while (s.charAt(s.length-1)==' ' && s.length>0) {
s=s.substring(0, s.length-1); s=s.substring(0, s.length-1);
} }
return s; return s;
} }
function trimCommas(s) { function trimCommas(s) {
while(s.charAt(0)==',' && s.length>0) { while (s.charAt(0)==',' && s.length>0) {
s=s.substring(1); s=s.substring(1);
} }
while(s.charAt(s.length-1)==',' && s.length>0) { while (s.charAt(s.length-1)==',' && s.length>0) {
s=s.substring(0, s.length-1); s=s.substring(0, s.length-1);
} }
return s; return s;
...@@ -150,10 +150,10 @@ function insertText(s, isTable) { ...@@ -150,10 +150,10 @@ function insertText(s, isTable) {
s = decodeURIComponent(s); s = decodeURIComponent(s);
var field = document.h2query.sql; var field = document.h2query.sql;
var last = s.substring(s.length-1); var last = s.substring(s.length-1);
if(last != '.' && last != '\'' && last != '"' && last > ' ') { if (last != '.' && last != '\'' && last != '"' && last > ' ') {
s += ' '; s += ' ';
} }
if(isTable && trim(field.value)=='') { if (isTable && trim(field.value)=='') {
field.value = 'SELECT * FROM ' + s; field.value = 'SELECT * FROM ' + s;
} else { } else {
if (document.selection) { if (document.selection) {
...@@ -177,7 +177,7 @@ function insertText(s, isTable) { ...@@ -177,7 +177,7 @@ function insertText(s, isTable) {
} }
function showAutoComplete() { function showAutoComplete() {
if(showAutoCompleteWait==0) { if (showAutoCompleteWait==0) {
showAutoCompleteWait=5; showAutoCompleteWait=5;
setTimeout('showAutoCompleteNow()', 100); setTimeout('showAutoCompleteNow()', 100);
} else { } else {
...@@ -190,7 +190,7 @@ function showAutoCompleteNow() { ...@@ -190,7 +190,7 @@ function showAutoCompleteNow() {
setSelection(input); setSelection(input);
var pos = input.selectionStart; var pos = input.selectionStart;
var s = input.value.substring(0, pos); var s = input.value.substring(0, pos);
if(s != lastQuery) { if (s != lastQuery) {
lastQuery = s; lastQuery = s;
retrieveList(s); retrieveList(s);
} }
...@@ -199,60 +199,60 @@ function showAutoCompleteNow() { ...@@ -199,60 +199,60 @@ function showAutoCompleteNow() {
function keyDown(event) { function keyDown(event) {
var key=event.keyCode? event.keyCode : event.charCode; var key=event.keyCode? event.keyCode : event.charCode;
if(key == null) { if (key == null) {
return false; return false;
} }
if (key == 13 && (event.ctrlKey || event.metaKey)) { if (key == 13 && (event.ctrlKey || event.metaKey)) {
// ctrl + return, cmd + return // ctrl + return, cmd + return
submitAll(); submitAll();
return false; return false;
} else if(key == 13 && event.shiftKey) { } else if (key == 13 && event.shiftKey) {
// shift + return // shift + return
submitSelected(); submitSelected();
return false; return false;
} else if(key == 32 && (event.ctrlKey || event.altKey)) { } else if (key == 32 && (event.ctrlKey || event.altKey)) {
// ctrl + space // ctrl + space
autoCompleteManual = true; autoCompleteManual = true;
lastQuery = null; lastQuery = null;
lastList = ''; lastList = '';
showAutoCompleteNow(); showAutoCompleteNow();
return false; return false;
} else if(key == 190 && autoComplete==0) { } else if (key == 190 && autoComplete == 0) {
// dot // dot
help(); help();
return true; return true;
} }
var table = getAutoCompleteTable(); var table = getAutoCompleteTable();
if(table.rows.length > 0) { if (table.rows.length > 0) {
if(key == 27) { if (key == 27) {
// escape // escape
while(table.rows.length > 0) { while (table.rows.length > 0) {
table.deleteRow(0); table.deleteRow(0);
} }
showOutput(''); showOutput('');
return false; return false;
} else if((key == 13 && !event.shiftKey) || (key==9 && !event.shiftKey)) { } else if (key == 9 && !event.shiftKey) {
// enter or tab // tab
if(table.rows.length > selectedRow) { if (table.rows.length > selectedRow) {
var row = table.rows[selectedRow]; var row = table.rows[selectedRow];
if(row.cells.length>1) { if (row.cells.length>1) {
insertText(row.cells[1].innerHTML); insertText(row.cells[1].innerHTML);
} }
if(autoComplete == 0) { if (autoComplete == 0) {
setAutoComplete(0); setAutoComplete(0);
} }
return false; return false;
} }
} else if(key == 38 && !event.shiftKey) { } else if (key == 38 && !event.shiftKey) {
// up // up
if(table.rows.length > selectedRow) { if (table.rows.length > selectedRow) {
selectedRow = selectedRow <= 0 ? table.rows.length-1 : selectedRow-1; selectedRow = selectedRow <= 0 ? table.rows.length-1 : selectedRow-1;
highlightRow(selectedRow); highlightRow(selectedRow);
} }
return false; return false;
} else if(key == 40 && !event.shiftKey) { } else if (key == 40 && !event.shiftKey) {
// down // down
if(table.rows.length > selectedRow) { if (table.rows.length > selectedRow) {
selectedRow = selectedRow >= table.rows.length-1 ? 0 : selectedRow+1; selectedRow = selectedRow >= table.rows.length-1 ? 0 : selectedRow+1;
highlightRow(selectedRow); highlightRow(selectedRow);
} }
...@@ -270,13 +270,13 @@ function keyDown(event) { ...@@ -270,13 +270,13 @@ function keyDown(event) {
function keyUp(event) { function keyUp(event) {
var key = event == null ? 0 : (event.keyCode ? event.keyCode : event.charCode); var key = event == null ? 0 : (event.keyCode ? event.keyCode : event.charCode);
if(autoComplete != 0) { if (autoComplete != 0) {
if(key != 37 && key != 38 && key != 39 && key != 40) { if (key != 37 && key != 38 && key != 39 && key != 40) {
// left, right, up, down: don't show autocomplete // left, right, up, down: don't show autocomplete
showAutoComplete(); showAutoComplete();
} }
} }
if(key == 13 && event.shiftKey) { if (key == 13 && event.shiftKey) {
// shift + return // shift + return
return false; return false;
} }
...@@ -285,13 +285,13 @@ function keyUp(event) { ...@@ -285,13 +285,13 @@ function keyUp(event) {
function setAutoComplete(value) { function setAutoComplete(value) {
autoComplete = value; autoComplete = value;
if(value != 1) { if (value != 1) {
var s = lastList; var s = lastList;
lastList = ''; lastList = '';
showList(s); showList(s);
} else { } else {
var table = getAutoCompleteTable(); var table = getAutoCompleteTable();
while(table.rows.length > 0) { while (table.rows.length > 0) {
table.deleteRow(0); table.deleteRow(0);
} }
showOutput(''); showOutput('');
...@@ -299,7 +299,7 @@ function setAutoComplete(value) { ...@@ -299,7 +299,7 @@ function setAutoComplete(value) {
} }
function highlightRow(row) { function highlightRow(row) {
if(row != null) { if (row != null) {
selectedRow = row; selectedRow = row;
} }
var table = getAutoCompleteTable(); var table = getAutoCompleteTable();
...@@ -312,7 +312,7 @@ function highlightThisRow(row) { ...@@ -312,7 +312,7 @@ function highlightThisRow(row) {
var r = table.rows[i]; var r = table.rows[i];
var col = (r == row) ? '#95beff' : ''; var col = (r == row) ? '#95beff' : '';
var cells = r.cells; var cells = r.cells;
if(cells.length > 0) { if (cells.length > 0) {
cells[0].style.backgroundColor = col; cells[0].style.backgroundColor = col;
} }
} }
...@@ -330,19 +330,19 @@ function showOutput(x) { ...@@ -330,19 +330,19 @@ function showOutput(x) {
} }
function showList(s) { function showList(s) {
if(lastList == s) { if (lastList == s) {
return; return;
} }
lastList = s; lastList = s;
var list = s.length == 0 ? null : s.split('|'); var list = s.length == 0 ? null : s.split('|');
var table = getAutoCompleteTable(); var table = getAutoCompleteTable();
if(table == null) { if (table == null) {
return; return;
} }
while(table.rows.length > 0) { while (table.rows.length > 0) {
table.deleteRow(0); table.deleteRow(0);
} }
if(autoComplete==0) { if (autoComplete==0) {
return; return;
} }
selectedRow = 0; selectedRow = 0;
...@@ -352,7 +352,7 @@ function showList(s) { ...@@ -352,7 +352,7 @@ function showList(s) {
for(var i=0; list != null && i<list.length; i++) { for(var i=0; list != null && i<list.length; i++) {
var kv = list[i].split('#'); var kv = list[i].split('#');
var type = kv[0]; var type = kv[0];
if(type > 0 && autoComplete != 2 && !autoCompleteManual) { if (type > 0 && autoComplete != 2 && !autoCompleteManual) {
continue; continue;
} }
var row = doc.createElement("tr"); var row = doc.createElement("tr");
...@@ -360,14 +360,14 @@ function showList(s) { ...@@ -360,14 +360,14 @@ function showList(s) {
var cell = doc.createElement("td"); var cell = doc.createElement("td");
var key = kv[1]; var key = kv[1];
var value = kv[2]; var value = kv[2];
if(!key || !value) { if (!key || !value) {
break; break;
} }
count++; count++;
cell.className = 'autoComp' + type; cell.className = 'autoComp' + type;
key = decodeURIComponent(key); key = decodeURIComponent(key);
row.onmouseover = function(){highlightThisRow(this)}; row.onmouseover = function(){highlightThisRow(this)};
if(!document.all || is_opera) { if (!document.all || is_opera) {
row.onclick = function(){insertText(this.cells[1].innerHTML);keyUp()}; row.onclick = function(){insertText(this.cells[1].innerHTML);keyUp()};
} }
// addEvent(row, "click", function(e){var row=e?e.target:window.event.srcElement;alert(row);insertText(row.cells[1].innerHTML)}); // addEvent(row, "click", function(e){var row=e?e.target:window.event.srcElement;alert(row);insertText(row.cells[1].innerHTML)});
...@@ -384,7 +384,7 @@ function showList(s) { ...@@ -384,7 +384,7 @@ function showList(s) {
cell.appendChild(text); cell.appendChild(text);
row.appendChild(cell); row.appendChild(cell);
} }
if(count > 0) { if (count > 0) {
highlightRow(); highlightRow();
showOutput('none'); showOutput('none');
} else { } else {
...@@ -404,7 +404,7 @@ function retrieveList(s) { ...@@ -404,7 +404,7 @@ function retrieveList(s) {
function addEvent(element, eventType, fn) { function addEvent(element, eventType, fn) {
// cross-browser event handling for IE5+, NS6 and Mozilla by Scott Andrew // cross-browser event handling for IE5+, NS6 and Mozilla by Scott Andrew
if(fn == null) { if (fn == null) {
return; return;
} }
if (element.addEventListener) { if (element.addEventListener) {
...@@ -419,13 +419,13 @@ function addEvent(element, eventType, fn) { ...@@ -419,13 +419,13 @@ function addEvent(element, eventType, fn) {
function sendAsyncRequest(url) { function sendAsyncRequest(url) {
req = false; req = false;
if(window.XMLHttpRequest) { if (window.XMLHttpRequest) {
try { try {
req = new XMLHttpRequest(); req = new XMLHttpRequest();
} catch(e) { } catch(e) {
req = false; req = false;
} }
} else if(window.ActiveXObject) { } else if (window.ActiveXObject) {
try { try {
req = new ActiveXObject("Msxml2.XMLHTTP"); req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) { } catch(e) {
...@@ -436,7 +436,7 @@ function sendAsyncRequest(url) { ...@@ -436,7 +436,7 @@ function sendAsyncRequest(url) {
} }
} }
} }
if(req) { if (req) {
req.onreadystatechange = processAsyncResponse; req.onreadystatechange = processAsyncResponse;
req.open("GET", url, true); req.open("GET", url, true);
req.send(""); req.send("");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论