Index: third_party/WebKit/WebCore/inspector/front-end/DatabaseQueryView.js |
=================================================================== |
--- third_party/WebKit/WebCore/inspector/front-end/DatabaseQueryView.js (revision 9391) |
+++ third_party/WebKit/WebCore/inspector/front-end/DatabaseQueryView.js (working copy) |
@@ -1,199 +1,199 @@ |
-/* |
- * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-WebInspector.DatabaseQueryView = function(database) |
-{ |
- WebInspector.View.call(this); |
- |
- this.database = database; |
- |
- this.element.addStyleClass("database-view"); |
- this.element.addStyleClass("query"); |
- this.element.tabIndex = 0; |
- |
- this.element.addEventListener("selectstart", this._selectStart.bind(this), false); |
- |
- this.promptElement = document.createElement("div"); |
- this.promptElement.className = "database-query-prompt"; |
- this.promptElement.appendChild(document.createElement("br")); |
- this.promptElement.handleKeyEvent = this._promptKeyDown.bind(this); |
- this.element.appendChild(this.promptElement); |
- |
- this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " "); |
-} |
- |
-WebInspector.DatabaseQueryView.prototype = { |
- show: function(parentElement) |
- { |
- WebInspector.View.prototype.show.call(this, parentElement); |
- |
- function moveBackIfOutside() |
- { |
- if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) |
- this.prompt.moveCaretToEndOfPrompt(); |
- } |
- |
- setTimeout(moveBackIfOutside.bind(this), 0); |
- }, |
- |
- completions: function(wordRange, bestMatchOnly) |
- { |
- var prefix = wordRange.toString().toLowerCase(); |
- if (!prefix.length) |
- return; |
- |
- var results = []; |
- |
- function accumulateMatches(textArray) |
- { |
- if (bestMatchOnly && results.length) |
- return; |
- for (var i = 0; i < textArray.length; ++i) { |
- var text = textArray[i].toLowerCase(); |
- if (text.length < prefix.length) |
- continue; |
- if (text.indexOf(prefix) !== 0) |
- continue; |
- results.push(textArray[i]); |
- if (bestMatchOnly) |
- return; |
- } |
- } |
- |
- accumulateMatches(this.database.tableNames.map(function(name) { return name + " " })); |
- accumulateMatches(["SELECT ", "FROM ", "WHERE ", "LIMIT ", "DELETE FROM ", "CREATE ", "DROP ", "TABLE ", "INDEX ", "UPDATE ", "INSERT INTO ", "VALUES ("]); |
- |
- return results; |
- }, |
- |
- _promptKeyDown: function(event) |
- { |
- switch (event.keyIdentifier) { |
- case "Enter": |
- this._enterKeyPressed(event); |
- return; |
- } |
- |
- this.prompt.handleKeyEvent(event); |
- }, |
- |
- _selectStart: function(event) |
- { |
- if (this._selectionTimeout) |
- clearTimeout(this._selectionTimeout); |
- |
- this.prompt.clearAutoComplete(); |
- |
- function moveBackIfOutside() |
- { |
- delete this._selectionTimeout; |
- if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) |
- this.prompt.moveCaretToEndOfPrompt(); |
- this.prompt.autoCompleteSoon(); |
- } |
- |
- this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); |
- }, |
- |
- _enterKeyPressed: function(event) |
- { |
- event.preventDefault(); |
- event.stopPropagation(); |
- |
- this.prompt.clearAutoComplete(true); |
- |
- var query = this.prompt.text; |
- if (!query.length) |
- return; |
- |
- this.prompt.history.push(query); |
- this.prompt.historyOffset = 0; |
- this.prompt.text = ""; |
- |
- function queryTransaction(tx) |
- { |
- tx.executeSql(query, null, InspectorController.wrapCallback(this._queryFinished.bind(this, query)), InspectorController.wrapCallback(this._executeSqlError.bind(this, query))); |
- } |
- |
- this.database.database.transaction(InspectorController.wrapCallback(queryTransaction.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this, query))); |
- }, |
- |
- _queryFinished: function(query, tx, result) |
- { |
- var dataGrid = WebInspector.panels.databases.dataGridForResult(result); |
- dataGrid.element.addStyleClass("inline"); |
- this._appendQueryResult(query, dataGrid.element); |
- |
- if (query.match(/^create /i) || query.match(/^drop table /i)) |
- WebInspector.panels.databases.updateDatabaseTables(this.database); |
- }, |
- |
- _queryError: function(query, error) |
- { |
- if (error.code == 1) |
- var message = error.message; |
- else if (error.code == 2) |
- var message = WebInspector.UIString("Database no longer has expected version."); |
- else |
- var message = WebInspector.UIString("An unexpected error %s occured.", error.code); |
- |
- this._appendQueryResult(query, message, "error"); |
- }, |
- |
- _executeSqlError: function(query, tx, error) |
- { |
- this._queryError(query, error); |
- }, |
- |
- _appendQueryResult: function(query, result, resultClassName) |
- { |
- var element = document.createElement("div"); |
- element.className = "database-user-query"; |
- |
- var commandTextElement = document.createElement("span"); |
- commandTextElement.className = "database-query-text"; |
- commandTextElement.textContent = query; |
- element.appendChild(commandTextElement); |
- |
- var resultElement = document.createElement("div"); |
- resultElement.className = "database-query-result"; |
- |
- if (resultClassName) |
- resultElement.addStyleClass(resultClassName); |
- |
- if (typeof result === "string" || result instanceof String) |
- resultElement.textContent = result; |
- else if (result && result.nodeName) |
- resultElement.appendChild(result); |
- |
- if (resultElement.childNodes.length) |
- element.appendChild(resultElement); |
- |
- this.element.insertBefore(element, this.promptElement); |
- this.promptElement.scrollIntoView(false); |
- } |
-} |
- |
-WebInspector.DatabaseQueryView.prototype.__proto__ = WebInspector.View.prototype; |
+/* |
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions |
+ * are met: |
+ * 1. Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * 2. Redistributions in binary form must reproduce the above copyright |
+ * notice, this list of conditions and the following disclaimer in the |
+ * documentation and/or other materials provided with the distribution. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ */ |
+ |
+WebInspector.DatabaseQueryView = function(database) |
+{ |
+ WebInspector.View.call(this); |
+ |
+ this.database = database; |
+ |
+ this.element.addStyleClass("storage-view"); |
+ this.element.addStyleClass("query"); |
+ this.element.tabIndex = 0; |
+ |
+ this.element.addEventListener("selectstart", this._selectStart.bind(this), false); |
+ |
+ this.promptElement = document.createElement("div"); |
+ this.promptElement.className = "database-query-prompt"; |
+ this.promptElement.appendChild(document.createElement("br")); |
+ this.promptElement.handleKeyEvent = this._promptKeyDown.bind(this); |
+ this.element.appendChild(this.promptElement); |
+ |
+ this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " "); |
+} |
+ |
+WebInspector.DatabaseQueryView.prototype = { |
+ show: function(parentElement) |
+ { |
+ WebInspector.View.prototype.show.call(this, parentElement); |
+ |
+ function moveBackIfOutside() |
+ { |
+ if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) |
+ this.prompt.moveCaretToEndOfPrompt(); |
+ } |
+ |
+ setTimeout(moveBackIfOutside.bind(this), 0); |
+ }, |
+ |
+ completions: function(wordRange, bestMatchOnly) |
+ { |
+ var prefix = wordRange.toString().toLowerCase(); |
+ if (!prefix.length) |
+ return; |
+ |
+ var results = []; |
+ |
+ function accumulateMatches(textArray) |
+ { |
+ if (bestMatchOnly && results.length) |
+ return; |
+ for (var i = 0; i < textArray.length; ++i) { |
+ var text = textArray[i].toLowerCase(); |
+ if (text.length < prefix.length) |
+ continue; |
+ if (text.indexOf(prefix) !== 0) |
+ continue; |
+ results.push(textArray[i]); |
+ if (bestMatchOnly) |
+ return; |
+ } |
+ } |
+ |
+ accumulateMatches(this.database.tableNames.map(function(name) { return name + " " })); |
+ accumulateMatches(["SELECT ", "FROM ", "WHERE ", "LIMIT ", "DELETE FROM ", "CREATE ", "DROP ", "TABLE ", "INDEX ", "UPDATE ", "INSERT INTO ", "VALUES ("]); |
+ |
+ return results; |
+ }, |
+ |
+ _promptKeyDown: function(event) |
+ { |
+ switch (event.keyIdentifier) { |
+ case "Enter": |
+ this._enterKeyPressed(event); |
+ return; |
+ } |
+ |
+ this.prompt.handleKeyEvent(event); |
+ }, |
+ |
+ _selectStart: function(event) |
+ { |
+ if (this._selectionTimeout) |
+ clearTimeout(this._selectionTimeout); |
+ |
+ this.prompt.clearAutoComplete(); |
+ |
+ function moveBackIfOutside() |
+ { |
+ delete this._selectionTimeout; |
+ if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) |
+ this.prompt.moveCaretToEndOfPrompt(); |
+ this.prompt.autoCompleteSoon(); |
+ } |
+ |
+ this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); |
+ }, |
+ |
+ _enterKeyPressed: function(event) |
+ { |
+ event.preventDefault(); |
+ event.stopPropagation(); |
+ |
+ this.prompt.clearAutoComplete(true); |
+ |
+ var query = this.prompt.text; |
+ if (!query.length) |
+ return; |
+ |
+ this.prompt.history.push(query); |
+ this.prompt.historyOffset = 0; |
+ this.prompt.text = ""; |
+ |
+ function queryTransaction(tx) |
+ { |
+ tx.executeSql(query, null, InspectorController.wrapCallback(this._queryFinished.bind(this, query)), InspectorController.wrapCallback(this._executeSqlError.bind(this, query))); |
+ } |
+ |
+ this.database.database.transaction(InspectorController.wrapCallback(queryTransaction.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this, query))); |
+ }, |
+ |
+ _queryFinished: function(query, tx, result) |
+ { |
+ var dataGrid = WebInspector.panels.databases.dataGridForResult(result); |
+ dataGrid.element.addStyleClass("inline"); |
+ this._appendQueryResult(query, dataGrid.element); |
+ |
+ if (query.match(/^create /i) || query.match(/^drop table /i)) |
+ WebInspector.panels.databases.updateDatabaseTables(this.database); |
+ }, |
+ |
+ _queryError: function(query, error) |
+ { |
+ if (error.code == 1) |
+ var message = error.message; |
+ else if (error.code == 2) |
+ var message = WebInspector.UIString("Database no longer has expected version."); |
+ else |
+ var message = WebInspector.UIString("An unexpected error %s occured.", error.code); |
+ |
+ this._appendQueryResult(query, message, "error"); |
+ }, |
+ |
+ _executeSqlError: function(query, tx, error) |
+ { |
+ this._queryError(query, error); |
+ }, |
+ |
+ _appendQueryResult: function(query, result, resultClassName) |
+ { |
+ var element = document.createElement("div"); |
+ element.className = "database-user-query"; |
+ |
+ var commandTextElement = document.createElement("span"); |
+ commandTextElement.className = "database-query-text"; |
+ commandTextElement.textContent = query; |
+ element.appendChild(commandTextElement); |
+ |
+ var resultElement = document.createElement("div"); |
+ resultElement.className = "database-query-result"; |
+ |
+ if (resultClassName) |
+ resultElement.addStyleClass(resultClassName); |
+ |
+ if (typeof result === "string" || result instanceof String) |
+ resultElement.textContent = result; |
+ else if (result && result.nodeName) |
+ resultElement.appendChild(result); |
+ |
+ if (resultElement.childNodes.length) |
+ element.appendChild(resultElement); |
+ |
+ this.element.insertBefore(element, this.promptElement); |
+ this.promptElement.scrollIntoView(false); |
+ } |
+} |
+ |
+WebInspector.DatabaseQueryView.prototype.__proto__ = WebInspector.View.prototype; |