1 /* 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 /** 27 * @constructor 28 * @extends {WebInspector.View} 29 */ 30 WebInspector.DatabaseTableView = function(database, tableName) 31 { 32 WebInspector.View.call(this); 33 34 this.database = database; 35 this.tableName = tableName; 36 37 this.element.classList.add("storage-view"); 38 this.element.classList.add("table"); 39 40 this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item"); 41 this.refreshButton.addEventListener("click", this._refreshButtonClicked, this); 42 } 43 44 WebInspector.DatabaseTableView.prototype = { 45 wasShown: function() 46 { 47 this.update(); 48 }, 49 50 get statusBarItems() 51 { 52 return [this.refreshButton.element]; 53 }, 54 55 /** 56 * @param {string} tableName 57 * @return {string} 58 */ 59 _escapeTableName: function(tableName) 60 { 61 return tableName.replace(/\"/g, "\"\""); 62 }, 63 64 update: function() 65 { 66 this.database.executeSql("SELECT * FROM \"" + this._escapeTableName(this.tableName) + "\"", this._queryFinished.bind(this), this._queryError.bind(this)); 67 }, 68 69 _queryFinished: function(columnNames, values) 70 { 71 this.detachChildViews(); 72 this.element.removeChildren(); 73 74 var dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, values); 75 if (!dataGrid) { 76 this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("The %s\ntable is empty.", this.tableName)); 77 this._emptyView.show(this.element); 78 return; 79 } 80 dataGrid.show(this.element); 81 dataGrid.autoSizeColumns(5); 82 }, 83 84 _queryError: function(error) 85 { 86 this.detachChildViews(); 87 this.element.removeChildren(); 88 89 var errorMsgElement = document.createElement("div"); 90 errorMsgElement.className = "storage-table-error"; 91 errorMsgElement.textContent = WebInspector.UIString("An error occurred trying to\nread the %s table.", this.tableName); 92 this.element.appendChild(errorMsgElement); 93 }, 94 95 _refreshButtonClicked: function(event) 96 { 97 this.update(); 98 }, 99 100 __proto__: WebInspector.View.prototype 101 } 102