Home | History | Annotate | Download | only in resources
      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.VBox}
     29  */
     30 WebInspector.DatabaseTableView = function(database, tableName)
     31 {
     32     WebInspector.VBox.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.SortableDataGrid.create(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.VBox.prototype
    101 }
    102