diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js')
-rw-r--r-- | Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js b/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js new file mode 100644 index 000000000..e3461c916 --- /dev/null +++ b/Source/WebInspectorUI/UserInterface/Views/DatabaseTableContentView.js @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2013, 2015 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. AND ITS CONTRIBUTORS ``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 ITS 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.DatabaseTableContentView = class DatabaseTableContentView extends WebInspector.ContentView +{ + constructor(representedObject) + { + super(representedObject); + + this.element.classList.add("database-table"); + + this._refreshButtonNavigationItem = new WebInspector.ButtonNavigationItem("database-table-refresh", WebInspector.UIString("Refresh"), "Images/ReloadFull.svg", 13, 13); + this._refreshButtonNavigationItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._refreshButtonClicked, this); + this._messageTextViewElement = null; + + this.update(); + } + + // Public + + get navigationItems() + { + return [this._refreshButtonNavigationItem]; + } + + update() + { + this.representedObject.database.executeSQL("SELECT * FROM \"" + this._escapeTableName(this.representedObject.name) + "\"", this._queryFinished.bind(this), this._queryError.bind(this)); + } + + saveToCookie(cookie) + { + cookie.type = WebInspector.ContentViewCookieType.DatabaseTable; + cookie.host = this.representedObject.host; + cookie.name = this.representedObject.name; + cookie.database = this.representedObject.database.name; + } + + get scrollableElements() + { + if (!this._dataGrid) + return []; + return [this._dataGrid.scrollContainer]; + } + + // Private + + _escapeTableName(name) + { + return name.replace(/\"/g, "\"\""); + } + + _queryFinished(columnNames, values) + { + // It would be nice to do better than creating a new data grid each time the table is updated, but the table updating + // doesn't happen very frequently. Additionally, using DataGrid's createSortableDataGrid makes our code much cleaner and it knows + // how to sort arbitrary columns. + if (this._dataGrid) { + this.removeSubview(this._dataGrid); + this._dataGrid = null; + } + + if (this._messageTextViewElement) + this._messageTextViewElement.remove(); + + if (columnNames.length) { + this._dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, values); + + this.addSubview(this._dataGrid); + this._dataGrid.updateLayout(); + return; + } + + // We were returned a table with no columns. This can happen when a table has + // no data, the SELECT query only returns column names when there is data. + this._messageTextViewElement = WebInspector.createMessageTextView(WebInspector.UIString("The ā%sā\ntable is empty.").format(this.representedObject.name), false); + this.element.appendChild(this._messageTextViewElement); + } + + _queryError(error) + { + if (this._dataGrid) { + this.removeSubview(this._dataGrid); + this._dataGrid = null; + } + + if (this._messageTextViewElement) + this._messageTextViewElement.remove(); + + this._messageTextViewElement = WebInspector.createMessageTextView(WebInspector.UIString("An error occurred trying to read the ā%sā table.").format(this.representedObject.name), true); + this.element.appendChild(this._messageTextViewElement); + } + + _refreshButtonClicked() + { + this.update(); + } +}; |