15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
34a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.Database} database
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDatabaseView = function(database)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("indexedDBViews.css");
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.element.classList.add("indexed-db-database-view");
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersListElement = this.element.createChild("ol", "outline-disclosure");
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline = new TreeOutline(this._headersListElement);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.expandTreeElementsWhenArrowing = true;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._securityOriginTreeElement = new TreeElement("", null, false);
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._securityOriginTreeElement.selectable = false;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._securityOriginTreeElement);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nameTreeElement = new TreeElement("", null, false);
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nameTreeElement.selectable = false;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._nameTreeElement);
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._intVersionTreeElement = new TreeElement("", null, false);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._intVersionTreeElement.selectable = false;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._intVersionTreeElement);
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._stringVersionTreeElement = new TreeElement("", null, false);
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._stringVersionTreeElement.selectable = false;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._headersTreeOutline.appendChild(this._stringVersionTreeElement);
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.update(database);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDatabaseView.prototype = {
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _formatHeader: function(name, value)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var fragment = document.createDocumentFragment();
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        fragment.createChild("div", "attribute-name").textContent = name + ":";
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        fragment.createChild("div", "attribute-value source-code").textContent = value;
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return fragment;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshDatabase: function()
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._securityOriginTreeElement.title = this._formatHeader(WebInspector.UIString("Security origin"), this._database.databaseId.securityOrigin);
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._nameTreeElement.title = this._formatHeader(WebInspector.UIString("Name"), this._database.databaseId.name);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._stringVersionTreeElement.title = this._formatHeader(WebInspector.UIString("String Version"), this._database.version);
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._intVersionTreeElement.title = this._formatHeader(WebInspector.UIString("Integer Version"), this._database.intVersion);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
89a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.IndexedDBModel.Database} database
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    update: function(database)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._database = database;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._refreshDatabase();
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
104a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel} model
105a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
106a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore
107a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.IndexedDBModel.Index} index
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDataView = function(model, databaseId, objectStore, index)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
111d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.registerRequiredCSS("indexedDBViews.css");
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._model = model;
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._databaseId = databaseId;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isIndex = !!index;
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
118a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.element.classList.add("indexed-db-data-view");
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var editorToolbar = this._createEditorToolbar();
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.element.appendChild(editorToolbar);
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._dataGridContainer = this.element.createChild("div", "fill");
124a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this._dataGridContainer.classList.add("data-grid-container");
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._refreshButton.addEventListener("click", this._refreshButtonClicked, this);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear object store"), "clear-storage-status-bar-item");
130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._clearButton.addEventListener("click", this._clearButtonClicked, this);
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._pageSize = 50;
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._skipCount = 0;
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.update(objectStore, index);
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._entries = [];
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDataView.prototype = {
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
141a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.DataGrid}
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createDataGrid: function()
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var keyPath = this._isIndex ? this._index.keyPath : this._objectStore.keyPath;
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var columns = [];
148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        columns.push({id: "number", title: WebInspector.UIString("#"), width: "50px"});
149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        columns.push({id: "key", titleDOMFragment: this._keyColumnHeaderFragment(WebInspector.UIString("Key"), keyPath)});
150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (this._isIndex)
151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            columns.push({id: "primaryKey", titleDOMFragment: this._keyColumnHeaderFragment(WebInspector.UIString("Primary key"), this._objectStore.keyPath)});
152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        columns.push({id: "value", title: WebInspector.UIString("Value")});
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var dataGrid = new WebInspector.DataGrid(columns);
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return dataGrid;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} prefix
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {*} keyPath
161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!DocumentFragment}
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _keyColumnHeaderFragment: function(prefix, keyPath)
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var keyColumnHeaderFragment = document.createDocumentFragment();
1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        keyColumnHeaderFragment.createTextChild(prefix);
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (keyPath === null)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return keyColumnHeaderFragment;
169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        keyColumnHeaderFragment.createTextChild(" (" + WebInspector.UIString("Key path: "));
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (keyPath instanceof Array) {
1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            keyColumnHeaderFragment.createTextChild("[");
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < keyPath.length; ++i) {
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (i != 0)
1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci                    keyColumnHeaderFragment.createTextChild(", ");
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                keyColumnHeaderFragment.appendChild(this._keyPathStringFragment(keyPath[i]));
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            keyColumnHeaderFragment.createTextChild("]");
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var keyPathString = /** @type {string} */ (keyPath);
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            keyColumnHeaderFragment.appendChild(this._keyPathStringFragment(keyPathString));
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        keyColumnHeaderFragment.createTextChild(")");
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return keyColumnHeaderFragment;
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} keyPathString
189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!DocumentFragment}
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _keyPathStringFragment: function(keyPathString)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var keyPathStringFragment = document.createDocumentFragment();
194197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        keyPathStringFragment.createTextChild("\"");
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var keyPathSpan = keyPathStringFragment.createChild("span", "source-code console-formatted-string");
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        keyPathSpan.textContent = keyPathString;
197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        keyPathStringFragment.createTextChild("\"");
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return keyPathStringFragment;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
202a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Element}
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _createEditorToolbar: function()
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var editorToolbar = document.createElement("div");
207a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        editorToolbar.classList.add("status-bar");
208a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        editorToolbar.classList.add("data-view-toolbar");
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageBackButton = editorToolbar.createChild("button", "back-button");
211a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._pageBackButton.classList.add("status-bar-item");
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageBackButton.title = WebInspector.UIString("Show previous page.");
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageBackButton.disabled = true;
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageBackButton.appendChild(document.createElement("img"));
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageBackButton.addEventListener("click", this._pageBackButtonClicked.bind(this), false);
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        editorToolbar.appendChild(this._pageBackButton);
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageForwardButton = editorToolbar.createChild("button", "forward-button");
219a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this._pageForwardButton.classList.add("status-bar-item");
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageForwardButton.title = WebInspector.UIString("Show next page.");
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageForwardButton.disabled = true;
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageForwardButton.appendChild(document.createElement("img"));
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pageForwardButton.addEventListener("click", this._pageForwardButtonClicked.bind(this), false);
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        editorToolbar.appendChild(this._pageForwardButton);
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._keyInputElement = editorToolbar.createChild("input", "key-input");
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._keyInputElement.placeholder = WebInspector.UIString("Start from key");
2285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this._keyInputElement.addEventListener("paste", this._keyInputChanged.bind(this), false);
2295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this._keyInputElement.addEventListener("cut", this._keyInputChanged.bind(this), false);
2305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this._keyInputElement.addEventListener("keypress", this._keyInputChanged.bind(this), false);
2315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        this._keyInputElement.addEventListener("keydown", this._keyInputChanged.bind(this), false);
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return editorToolbar;
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _pageBackButtonClicked: function()
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._skipCount = Math.max(0, this._skipCount - this._pageSize);
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateData(false);
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _pageForwardButtonClicked: function()
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._skipCount = this._skipCount + this._pageSize;
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateData(false);
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _keyInputChanged: function()
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        window.setTimeout(this._updateData.bind(this, false), 0);
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
254a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore
255a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?WebInspector.IndexedDBModel.Index} index
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    update: function(objectStore, index)
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._objectStore = objectStore;
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._index = index;
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._dataGrid)
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._dataGrid.detach();
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dataGrid = this._createDataGrid();
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dataGrid.show(this._dataGridContainer);
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._skipCount = 0;
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateData(true);
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} keyString
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _parseKey: function(keyString)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result;
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        try {
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            result = JSON.parse(keyString);
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } catch (e) {
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            result = keyString;
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return result;
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} force
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateData: function(force)
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var key = this._parseKey(this._keyInputElement.value);
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var pageSize = this._pageSize;
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var skipCount = this._skipCount;
293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._refreshButton.setEnabled(false);
294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._clearButton.setEnabled(!this._isIndex);
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!force && this._lastKey === key && this._lastPageSize === pageSize && this._lastSkipCount === skipCount)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._lastKey !== key || this._lastPageSize !== pageSize) {
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            skipCount = 0;
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._skipCount = 0;
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._lastKey = key;
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._lastPageSize = pageSize;
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._lastSkipCount = skipCount;
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
308a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!WebInspector.IndexedDBModel.Entry>} entries
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean} hasMore
31009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.IDBDataView}
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(entries, hasMore)
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._refreshButton.setEnabled(true);
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.clear();
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._entries = entries;
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < entries.length; ++i) {
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var data = {};
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                data["number"] = i + skipCount;
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                data["key"] = entries[i].key;
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                data["primaryKey"] = entries[i].primaryKey;
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                data["value"] = entries[i].value;
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var primaryKey = JSON.stringify(this._isIndex ? entries[i].primaryKey : entries[i].key);
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var node = new WebInspector.IDBDataGridNode(data);
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._dataGrid.rootNode().appendChild(node);
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pageBackButton.disabled = skipCount === 0;
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pageForwardButton.disabled = !hasMore;
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
333c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var idbKeyRange = key ? window.IDBKeyRange.lowerBound(key) : null;
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._isIndex)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._model.loadIndexData(this._databaseId, this._objectStore.name, this._index.name, idbKeyRange, skipCount, pageSize, callback.bind(this));
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._model.loadObjectStoreData(this._databaseId, this._objectStore.name, idbKeyRange, skipCount, pageSize, callback.bind(this));
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _refreshButtonClicked: function(event)
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._updateData(true);
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _clearButtonClicked: function(event)
346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
34709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
34809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.IDBDataView}
34909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function cleared() {
351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._clearButton.setEnabled(true);
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._updateData(true);
353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._clearButton.setEnabled(false);
355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._model.clearObjectStore(this._databaseId, this._objectStore.name, cleared.bind(this));
356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get statusBarItems()
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return [this._refreshButton.element, this._clearButton.element];
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    clear: function()
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._dataGrid.rootNode().removeChildren();
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._entries = [];
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
369d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.DataGridNode}
375e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @param {!Object.<string, *>} data
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDataGridNode = function(data)
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.DataGridNode.call(this, data, false);
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.selectable = false;
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IDBDataGridNode.prototype = {
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
385a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Element}
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createCell: function(columnIdentifier)
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var cell = WebInspector.DataGridNode.prototype.createCell.call(this, columnIdentifier);
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var value = this.data[columnIdentifier];
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        switch (columnIdentifier) {
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "value":
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "key":
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "primaryKey":
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            cell.removeChildren();
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._formatValue(cell, value);
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        default:
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return cell;
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _formatValue: function(cell, value)
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var type = value.subtype || value.type;
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var contents = cell.createChild("div", "source-code console-formatted-" + type);
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        switch (type) {
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "object":
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "array":
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var section = new WebInspector.ObjectPropertiesSection(value, value.description)
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            section.editable = false;
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            section.skipProto = true;
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            contents.appendChild(section.element);
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        case "string":
419a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            contents.classList.add("primitive-value");
420197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            contents.createTextChildren("\"", value.description, "\"");
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        default:
423a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            contents.classList.add("primitive-value");
424197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            contents.createTextChild(value.description);
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.DataGridNode.prototype
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
430