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 26WebInspector.DatabaseTableView = function(database, tableName) 27{ 28 WebInspector.View.call(this); 29 30 this.database = database; 31 this.tableName = tableName; 32 33 this.element.addStyleClass("storage-view"); 34 this.element.addStyleClass("table"); 35 36 this.refreshButton = document.createElement("button"); 37 this.refreshButton.title = WebInspector.UIString("Refresh"); 38 this.refreshButton.className = "refresh-storage-status-bar-item status-bar-item"; 39 this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false); 40} 41 42WebInspector.DatabaseTableView.prototype = { 43 show: function(parentElement) 44 { 45 WebInspector.View.prototype.show.call(this, parentElement); 46 this.update(); 47 }, 48 49 get statusBarItems() 50 { 51 return [this.refreshButton]; 52 }, 53 54 update: function() 55 { 56 function queryTransaction(tx) 57 { 58 tx.executeSql("SELECT * FROM " + this.tableName, null, InspectorController.wrapCallback(this._queryFinished.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this))); 59 } 60 61 this.database.database.transaction(InspectorController.wrapCallback(queryTransaction.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this))); 62 }, 63 64 _queryFinished: function(tx, result) 65 { 66 this.element.removeChildren(); 67 68 var dataGrid = WebInspector.panels.databases.dataGridForResult(result); 69 if (!dataGrid) { 70 var emptyMsgElement = document.createElement("div"); 71 emptyMsgElement.className = "storage-table-empty"; 72 emptyMsgElement.textContent = WebInspector.UIString("The “%s”\ntable is empty.", this.tableName); 73 this.element.appendChild(emptyMsgElement); 74 return; 75 } 76 77 this.element.appendChild(dataGrid.element); 78 }, 79 80 _queryError: function(tx, error) 81 { 82 this.element.removeChildren(); 83 84 var errorMsgElement = document.createElement("div"); 85 errorMsgElement.className = "storage-table-error"; 86 errorMsgElement.textContent = WebInspector.UIString("An error occurred trying to\nread the “%s” table.", this.tableName); 87 this.element.appendChild(errorMsgElement); 88 }, 89 90 _refreshButtonClicked: function(event) 91 { 92 this.update(); 93 } 94} 95 96WebInspector.DatabaseTableView.prototype.__proto__ = WebInspector.View.prototype; 97