15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple 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 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.View} 29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columnsArray 30a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.DataGridNode, string, string, string)=} editCallback 31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.DataGridNode)=} deleteCallback 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {function()=} refreshCallback 33a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.ContextMenu, !WebInspector.DataGridNode)=} contextMenuCallback 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.DataGrid = function(columnsArray, editCallback, deleteCallback, refreshCallback, contextMenuCallback) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.View.call(this); 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.registerRequiredCSS("dataGrid.css"); 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this.element.className = "data-grid"; // Override 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.tabIndex = 0; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.addEventListener("keydown", this._keyDown.bind(this), false); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var headerContainer = document.createElementWithClass("div", "header-container"); 45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._headerTable = headerContainer.createChild("table", "header"); 47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Object.<string, !Element>} */ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTableHeaders = {}; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 51197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._scrollContainer = document.createElementWithClass("div", "data-container"); 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 53197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._dataTable = this._scrollContainer.createChild("table", "data"); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.addEventListener("mousedown", this._mouseDownInDataTable.bind(this), true); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.addEventListener("click", this._clickInDataTable.bind(this), true); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.addEventListener("contextmenu", this._contextMenuInDataTable.bind(this), true); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Add a createCallback which is different from editCallback and has different 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // behavior when creating a new node. 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (editCallback) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.addEventListener("dblclick", this._ondblclick.bind(this), false); 64c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {function(!WebInspector.DataGridNode, string, string, string)|undefined} */ 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._editCallback = editCallback; 66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {function(!WebInspector.DataGridNode)|undefined} */ 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._deleteCallback = deleteCallback; 68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {function()|undefined} */ 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._refreshCallback = refreshCallback; 70c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {function(!WebInspector.ContextMenu, !WebInspector.DataGridNode)|undefined} */ 7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._contextMenuCallback = contextMenuCallback; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.element.appendChild(headerContainer); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.appendChild(this._scrollContainer); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 77f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerRow = document.createElement("tr"); 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 79f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerTableColumnGroup = document.createElement("colgroup"); 80c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 81f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._dataTableColumnGroup = document.createElement("colgroup"); 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 84c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._topFillerRow = document.createElementWithClass("tr", "revealed"); 85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Element} */ 86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._bottomFillerRow = document.createElementWithClass("tr", "revealed"); 87c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this.setVerticalPadding(0, 0); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 89c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} */ 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._columnsArray = columnsArray; 91c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} */ 92f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._visibleColumnsArray = columnsArray; 93c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Object.<string, !WebInspector.DataGrid.ColumnDescriptor>} */ 94f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._columns = {}; 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 96e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** @type {?string} */ 97e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._cellClass = null; 98e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < columnsArray.length; ++i) { 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var column = columnsArray[i]; 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var columnIdentifier = column.identifier = column.id || i; 102f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._columns[columnIdentifier] = column; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (column.disclosure) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.disclosureColumnIdentifier = columnIdentifier; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cell = document.createElement("th"); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cell.className = columnIdentifier + "-column"; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cell.columnIdentifier = columnIdentifier; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTableHeaders[columnIdentifier] = cell; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var div = document.createElement("div"); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (column.titleDOMFragment) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) div.appendChild(column.titleDOMFragment); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) div.textContent = column.title; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cell.appendChild(div); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (column.sort) { 119e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) cell.classList.add(column.sort); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sortColumnCell = cell; 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (column.sortable) { 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cell.addEventListener("click", this._clickInHeaderCell.bind(this), false); 125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) cell.classList.add("sortable"); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTable.appendChild(this._headerTableColumnGroup); 130f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this.headerTableBody.appendChild(this._headerRow); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.appendChild(this._dataTableColumnGroup); 133197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.dataTableBody.appendChild(this._topFillerRow); 134197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.dataTableBody.appendChild(this._bottomFillerRow); 135f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 136f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._refreshHeader(); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 139c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._editing = false; 140c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {?WebInspector.DataGridNode} */ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode = null; 142c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.expandNodesWhenArrowing = false; 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.setRootNode(new WebInspector.DataGridNode()); 145c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {number} */ 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.indentWidth = 15; 147c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!Array.<!Element|{__index: number, __position: number}>} */ 148f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._resizers = []; 149c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._columnWidthsInitialized = false; 151c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {number} */ 152f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._cornerWidth = WebInspector.DataGrid.CornerWidth; 153c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {!WebInspector.DataGrid.ResizeMethod} */ 154c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._resizeMethod = WebInspector.DataGrid.ResizeMethod.Nearest; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 157f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Keep in sync with .data-grid col.corner style rule. 158f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebInspector.DataGrid.CornerWidth = 14; 159f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/** @typedef {!{id: ?string, editable: boolean, longText: ?boolean, sort: !WebInspector.DataGrid.Order, sortable: boolean, align: !WebInspector.DataGrid.Align}} */ 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DataGrid.ColumnDescriptor; 162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DataGrid.Events = { 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectedNode: "SelectedNode", 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) DeselectedNode: "DeselectedNode", 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) SortingChanged: "SortingChanged", 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ColumnsResized: "ColumnsResized" 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** @enum {string} */ 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DataGrid.Order = { 172e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Ascending: "sort-ascending", 173e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Descending: "sort-descending" 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** @enum {string} */ 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DataGrid.Align = { 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Center: "center", 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Right: "right" 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DataGrid.prototype = { 183e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 184e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} cellClass 185e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 186e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setCellClass: function(cellClass) 187e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 188e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._cellClass = cellClass; 189e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 190e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 191f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _refreshHeader: function() 192f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 193f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerTableColumnGroup.removeChildren(); 194f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._dataTableColumnGroup.removeChildren(); 195f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerRow.removeChildren(); 196197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._topFillerRow.removeChildren(); 197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._bottomFillerRow.removeChildren(); 198f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 199f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0; i < this._visibleColumnsArray.length; ++i) { 200f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var column = this._visibleColumnsArray[i]; 201f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var columnIdentifier = column.identifier; 202f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var headerColumn = this._headerTableColumnGroup.createChild("col"); 203f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var dataColumn = this._dataTableColumnGroup.createChild("col"); 204f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (column.width) { 205f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) headerColumn.style.width = column.width; 206f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) dataColumn.style.width = column.width; 207f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 208f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerRow.appendChild(this._headerTableHeaders[columnIdentifier]); 209c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._topFillerRow.createChild("td", "top-filler-td"); 210c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._bottomFillerRow.createChild("td", "bottom-filler-td"); 211f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 212f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 213f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerRow.createChild("th", "corner"); 214c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._topFillerRow.createChild("td", "corner").classList.add("top-filler-td"); 215c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._bottomFillerRow.createChild("td", "corner").classList.add("bottom-filler-td"); 216f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerTableColumnGroup.createChild("col", "corner"); 217f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._dataTableColumnGroup.createChild("col", "corner"); 218f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 219f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 221197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} top 222197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} bottom 223197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @protected 224197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 225197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch setVerticalPadding: function(top, bottom) 226197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 227197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._topFillerRow.style.height = top + "px"; 228c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (top || bottom) 229c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._bottomFillerRow.style.height = bottom + "px"; 230c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 231c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._bottomFillerRow.style.height = "auto"; 232197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 233197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 234197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!WebInspector.DataGridNode} rootNode 236c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @protected 237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setRootNode: function(rootNode) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._rootNode) { 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rootNode.removeChildren(); 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rootNode.dataGrid = null; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rootNode._isRoot = false; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** @type {!WebInspector.DataGridNode} */ 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._rootNode = rootNode; 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode._isRoot = true; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode.hasChildren = false; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode._expanded = true; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode._revealed = true; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode.dataGrid = this; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {!WebInspector.DataGridNode} 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rootNode: function() 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._rootNode; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _ondblclick: function(event) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._editing || this._editingNode) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var columnIdentifier = this.columnIdentifierFromNode(event.target); 268f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!columnIdentifier || !this._columns[columnIdentifier].editable) 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._startEditing(event.target); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!WebInspector.DataGridNode} node 275f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} cellIndex 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 277f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _startEditingColumnOfDataGridNode: function(node, cellIndex) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editing = true; 2807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {?WebInspector.DataGridNode} */ 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode = node; 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode.select(); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 284f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var element = this._editingNode._element.children[cellIndex]; 28509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebInspector.InplaceEditor.startEditing(element, this._startEditingConfig(element)); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.getSelection().setBaseAndExtent(element, 0, element, 1); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _startEditing: function(target) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var element = target.enclosingNodeOrSelfWithNodeName("td"); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode = this.dataGridNodeFromNode(target); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._editingNode) { 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.creationNode) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode = this.creationNode; 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Force editing the 1st column when editing the creation node 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._editingNode.isCreationNode) 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(this._editingNode, this._nextEditableColumn(-1)); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editing = true; 30709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebInspector.InplaceEditor.startEditing(element, this._startEditingConfig(element)); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) window.getSelection().setBaseAndExtent(element, 0, element, 1); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) renderInline: function() 313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 314a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.element.classList.add("inline"); 315f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._cornerWidth = 0; 316f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this.updateWidths(); 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _startEditingConfig: function(element) 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 32109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return new WebInspector.InplaceEditor.Config(this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent); 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _editingCommitted: function(element, newText, oldText, context, moveDirection) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var columnIdentifier = this.columnIdentifierFromNode(element); 327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!columnIdentifier) { 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._editingCancelled(element); 329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 331f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var column = this._columns[columnIdentifier]; 332f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var cellIndex = this._visibleColumnsArray.indexOf(column); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var textBeforeEditing = this._editingNode.data[columnIdentifier]; 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var currentEditingNode = this._editingNode; 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 33709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {boolean} wasChange 33809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.DataGrid} 33909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function moveToNextIfNeeded(wasChange) { 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!moveDirection) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (moveDirection === "forward") { 345f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var firstEditableColumn = this._nextEditableColumn(-1); 346f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (currentEditingNode.isCreationNode && cellIndex === firstEditableColumn && !wasChange) 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 349f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var nextEditableColumn = this._nextEditableColumn(cellIndex); 350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (nextEditableColumn !== -1) 351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(currentEditingNode, nextEditableColumn); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nextDataGridNode = currentEditingNode.traverseNextNode(true, null, true); 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (nextDataGridNode) 355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(nextDataGridNode, firstEditableColumn); 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (currentEditingNode.isCreationNode && wasChange) { 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addCreationNode(false); 358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(this.creationNode, firstEditableColumn); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (moveDirection === "backward") { 364f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var prevEditableColumn = this._nextEditableColumn(cellIndex, true); 365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (prevEditableColumn !== -1) 366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(currentEditingNode, prevEditableColumn); 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 368f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var lastEditableColumn = this._nextEditableColumn(this._visibleColumnsArray.length, true); 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nextDataGridNode = currentEditingNode.traversePreviousNode(true, true); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (nextDataGridNode) 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._startEditingColumnOfDataGridNode(nextDataGridNode, lastEditableColumn); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (textBeforeEditing == newText) { 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingCancelled(element); 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) moveToNextIfNeeded.call(this, false); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Update the text in the datagrid that we typed 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode.data[columnIdentifier] = newText; 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make the callback - expects an editing node (table row), the column number that is being edited, 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the text that used to be there, and the new text. 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editCallback(this._editingNode, columnIdentifier, textBeforeEditing, newText); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._editingNode.isCreationNode) 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.addCreationNode(false); 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingCancelled(element); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) moveToNextIfNeeded.call(this, true); 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _editingCancelled: function(element) 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 398c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._editing = false; 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._editingNode = null; 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 403f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} cellIndex 404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean=} moveBackward 405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {number} 406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 407f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _nextEditableColumn: function(cellIndex, moveBackward) 408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 409926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var increment = moveBackward ? -1 : 1; 410f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var columns = this._visibleColumnsArray; 411f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = cellIndex + increment; (i >= 0) && (i < columns.length); i += increment) { 412926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (columns[i].editable) 413926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return i; 414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return -1; 416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 417926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {?string} 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) sortColumnIdentifier: function() 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._sortColumnCell) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._sortColumnCell.columnIdentifier; 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {?string} 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 431926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) sortOrder: function() 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 433e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!this._sortColumnCell || this._sortColumnCell.classList.contains(WebInspector.DataGrid.Order.Ascending)) 434926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.DataGrid.Order.Ascending; 435e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._sortColumnCell.classList.contains(WebInspector.DataGrid.Order.Descending)) 436926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebInspector.DataGrid.Order.Descending; 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 443926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isSortOrderAscending: function() 444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 445e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return !this._sortColumnCell || this._sortColumnCell.classList.contains(WebInspector.DataGrid.Order.Ascending); 446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 447926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get headerTableBody() 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ("_headerTableBody" in this) 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._headerTableBody; 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTableBody = this._headerTable.getElementsByTagName("tbody")[0]; 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._headerTableBody) { 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTableBody = this.element.ownerDocument.createElement("tbody"); 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._headerTable.insertBefore(this._headerTableBody, this._headerTable.tFoot); 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._headerTableBody; 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get dataTableBody() 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ("_dataTableBody" in this) 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._dataTableBody; 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTableBody = this._dataTable.getElementsByTagName("tbody")[0]; 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._dataTableBody) { 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTableBody = this.element.ownerDocument.createElement("tbody"); 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._dataTable.insertBefore(this._dataTableBody, this._dataTable.tFoot); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._dataTableBody; 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 477f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) * @param {!Array.<number>} widths 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} minPercent 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number=} maxPercent 480f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) * @return {!Array.<number>} 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _autoSizeWidths: function(widths, minPercent, maxPercent) 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (minPercent) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) minPercent = Math.min(minPercent, Math.floor(100 / widths.length)); 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totalWidth = 0; 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < widths.length; ++i) 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalWidth += widths[i]; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var totalPercentWidth = 0; 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < widths.length; ++i) { 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var width = Math.round(100 * widths[i] / totalWidth); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (minPercent && width < minPercent) 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) width = minPercent; 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (maxPercent && width > maxPercent) 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) width = maxPercent; 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) totalPercentWidth += width; 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) widths[i] = width; 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var recoupPercent = totalPercentWidth - 100; 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (minPercent && recoupPercent > 0) { 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < widths.length; ++i) { 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (widths[i] > minPercent) { 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) --widths[i]; 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) --recoupPercent; 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!recoupPercent) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (maxPercent && recoupPercent < 0) { 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < widths.length; ++i) { 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (widths[i] < maxPercent) { 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ++widths[i]; 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ++recoupPercent; 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!recoupPercent) 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return widths; 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} minPercent 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number=} maxPercent 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number=} maxDescentLevel 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) autoSizeColumns: function(minPercent, maxPercent, maxDescentLevel) 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var widths = []; 534926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._columnsArray.length; ++i) 535926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) widths.push((this._columnsArray[i].title || "").length); 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) maxDescentLevel = maxDescentLevel || 0; 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var children = this._enumerateChildren(this._rootNode, [], maxDescentLevel + 1); 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < children.length; ++i) { 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = children[i]; 541926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var j = 0; j < this._columnsArray.length; ++j) { 542926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var text = node.data[this._columnsArray[j].identifier] || ""; 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (text.length > widths[j]) 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) widths[j] = text.length; 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) widths = this._autoSizeWidths(widths, minPercent, maxPercent); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 550926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._columnsArray.length; ++i) 551f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._columnsArray[i].weight = widths[i]; 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._columnWidthsInitialized = false; 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.updateWidths(); 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _enumerateChildren: function(rootNode, result, maxLevel) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!rootNode._isRoot) 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.push(rootNode); 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!maxLevel) 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < rootNode.children.length; ++i) 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._enumerateChildren(rootNode.children[i], result, maxLevel - 1); 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onResize: function() 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.updateWidths(); 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Updates the widths of the table, including the positions of the column 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // resizers. 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // IMPORTANT: This function MUST be called once after the element of the 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // DataGrid is attached to its parent element and every subsequent time the 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // width of the parent element is changed in order to make it possible to 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // resize the columns. 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this function is not called after the DataGrid is attached to its 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // parent element, then the DataGrid's columns will not be resizable. 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updateWidths: function() 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var headerTableColumns = this._headerTableColumnGroup.children; 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 586f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // Use container size to avoid changes of table width caused by change of column widths. 587f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var tableWidth = this.element.offsetWidth - this._cornerWidth; 58853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var numColumns = headerTableColumns.length - 1; // Do not process corner column. 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Do not attempt to use offsetes if we're not attached to the document tree yet. 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._columnWidthsInitialized && this.element.offsetWidth) { 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Give all the columns initial widths now so that during a resize, 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // when the two columns that get resized get a percent value for 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // their widths, all the other columns already have percent values 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // for their widths. 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < numColumns; i++) { 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var columnWidth = this.headerTableBody.rows[0].cells[i].offsetWidth; 598f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var column = this._visibleColumnsArray[i]; 599f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!column.weight) 600f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) column.weight = 100 * columnWidth / tableWidth; 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._columnWidthsInitialized = true; 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 604f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._applyColumnWeights(); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 60853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {string} name 60953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 61053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) setName: function(name) 61153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 61253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._columnWeightsSetting = WebInspector.settings.createSetting("dataGrid-" + name + "-columnWeights", {}); 61353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._loadColumnWeights(); 61453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 61553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 61653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _loadColumnWeights: function() 61753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 61853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!this._columnWeightsSetting) 61953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 62053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var weights = this._columnWeightsSetting.get(); 62153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (var i = 0; i < this._columnsArray.length; ++i) { 62253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var column = this._columnsArray[i]; 62353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var weight = weights[column.identifier]; 62453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (weight) 62553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) column.weight = weight; 62653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 627f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._applyColumnWeights(); 62853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 62953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 63053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _saveColumnWeights: function() 63153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 63253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!this._columnWeightsSetting) 63353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 63453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var weights = {}; 63553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (var i = 0; i < this._columnsArray.length; ++i) { 63653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var column = this._columnsArray[i]; 63753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) weights[column.identifier] = column.weight; 63853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 63953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._columnWeightsSetting.set(weights); 64053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 64153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 64253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) wasShown: function() 64353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 64453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._loadColumnWeights(); 64553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 64653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 647f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _applyColumnWeights: function() 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var tableWidth = this.element.offsetWidth - this._cornerWidth; 6505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (tableWidth <= 0) 6515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 6525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 653926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var sumOfWeights = 0.0; 654f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0; i < this._visibleColumnsArray.length; ++i) 655f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) sumOfWeights += this._visibleColumnsArray[i].weight; 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 657f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var sum = 0; 658f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var lastOffset = 0; 659f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 660f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0; i < this._visibleColumnsArray.length; ++i) { 661f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) sum += this._visibleColumnsArray[i].weight; 662f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var offset = (sum * tableWidth / sumOfWeights) | 0; 663f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var width = (offset - lastOffset) + "px"; 664926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._headerTableColumnGroup.children[i].style.width = width; 665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._dataTableColumnGroup.children[i].style.width = width; 666f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) lastOffset = offset; 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 669926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._positionResizers(); 670926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.DataGrid.Events.ColumnsResized); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 673926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 674f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!Object.<string, boolean>} columnsVisibility 675926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 676f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) setColumnsVisiblity: function(columnsVisibility) 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 678f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._visibleColumnsArray = []; 679f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0; i < this._columnsArray.length; ++i) { 680f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var column = this._columnsArray[i]; 681f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (columnsVisibility[column.identifier]) 682f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._visibleColumnsArray.push(column); 683f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 684f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._refreshHeader(); 685f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._applyColumnWeights(); 686f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var nodes = this._enumerateChildren(this.rootNode(), [], -1); 687f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0; i < nodes.length; ++i) 688f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) nodes[i].refresh(); 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get scrollContainer() 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._scrollContainer; 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _positionResizers: function() 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var headerTableColumns = this._headerTableColumnGroup.children; 69953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var numColumns = headerTableColumns.length - 1; // Do not process corner column. 70007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var left = []; 701f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var resizers = this._resizers; 702f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 703f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) while (resizers.length > numColumns - 1) 704f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizers.pop().remove(); 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 70607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (var i = 0; i < numColumns - 1; i++) { 70707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Get the width of the cell in the first (and only) row of the 70807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // header table in order to determine the width of the column, since 70907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // it is not possible to query a column for its width. 71007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch left[i] = (left[i-1] || 0) + this.headerTableBody.rows[0].cells[i].offsetWidth; 71107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 71207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make n - 1 resizers for n columns. 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < numColumns - 1; i++) { 715c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) var resizer = resizers[i]; 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resizer) { 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is the first call to updateWidth, so the resizers need 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to be created. 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resizer = document.createElement("div"); 720f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizer.__index = i; 721a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) resizer.classList.add("data-grid-resizer"); 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This resizer is associated with the column to its right. 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.installDragHandle(resizer, this._startResizerDragging.bind(this), this._resizerDragging.bind(this), this._endResizerDragging.bind(this), "col-resize"); 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.element.appendChild(resizer); 725f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizers.push(resizer); 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 727f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (resizer.__position !== left[i]) { 728f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizer.__position = left[i]; 729f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizer.style.left = left[i] + "px"; 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addCreationNode: function(hasChildren) 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.creationNode) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.creationNode.makeNormal(); 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var emptyData = {}; 740f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var column in this._columns) 741e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) emptyData[column] = null; 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.creationNode = new WebInspector.CreationDataGridNode(emptyData, hasChildren); 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.rootNode().appendChild(this.creationNode); 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _keyDown: function(event) 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.selectedNode || event.shiftKey || event.metaKey || event.ctrlKey || this._editing) 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var handled = false; 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nextSelectedNode; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.keyIdentifier === "Up" && !event.altKey) { 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = this.selectedNode.traversePreviousNode(true); 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (nextSelectedNode && !nextSelectedNode.selectable) 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = nextSelectedNode.traversePreviousNode(true); 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = nextSelectedNode ? true : false; 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (event.keyIdentifier === "Down" && !event.altKey) { 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = this.selectedNode.traverseNextNode(true); 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (nextSelectedNode && !nextSelectedNode.selectable) 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = nextSelectedNode.traverseNextNode(true); 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = nextSelectedNode ? true : false; 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (event.keyIdentifier === "Left") { 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.selectedNode.expanded) { 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.altKey) 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.collapseRecursively(); 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.collapse(); 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (this.selectedNode.parent && !this.selectedNode.parent._isRoot) { 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.selectedNode.parent.selectable) { 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = this.selectedNode.parent; 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = nextSelectedNode ? true : false; 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (this.selectedNode.parent) 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.parent.collapse(); 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (event.keyIdentifier === "Right") { 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.selectedNode.revealed) { 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.reveal(); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (this.selectedNode.hasChildren) { 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.selectedNode.expanded) { 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode = this.selectedNode.children[0]; 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = nextSelectedNode ? true : false; 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.altKey) 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.expandRecursively(); 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.selectedNode.expand(); 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (event.keyCode === 8 || event.keyCode === 46) { 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._deleteCallback) { 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._deleteCallback(this.selectedNode); 798926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.changeNodeAfterDeletion(); 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (isEnterKey(event)) { 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._editCallback) { 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) handled = true; 803926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._startEditing(this.selectedNode._element.children[this._nextEditableColumn(-1)]); 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (nextSelectedNode) { 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode.reveal(); 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextSelectedNode.select(); 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (handled) 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event.consume(true); 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 816926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) changeNodeAfterDeletion: function() 817926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 818926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nextSelectedNode = this.selectedNode.traverseNextNode(true); 819926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) while (nextSelectedNode && !nextSelectedNode.selectable) 820926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nextSelectedNode = nextSelectedNode.traverseNextNode(true); 821926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 822926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!nextSelectedNode || nextSelectedNode.isCreationNode) { 823926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nextSelectedNode = this.selectedNode.traversePreviousNode(true); 824926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) while (nextSelectedNode && !nextSelectedNode.selectable) 825926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nextSelectedNode = nextSelectedNode.traversePreviousNode(true); 826926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 827926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 828926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (nextSelectedNode) { 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nextSelectedNode.reveal(); 830926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nextSelectedNode.select(); 831926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 832926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 833926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 834926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 835926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!Node} target 836926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {?WebInspector.DataGridNode} 837926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dataGridNodeFromNode: function(target) 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rowElement = target.enclosingNodeOrSelfWithNodeName("tr"); 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return rowElement && rowElement._dataGridNode; 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 844926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 845926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!Node} target 846926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {?string} 847926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 848926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) columnIdentifierFromNode: function(target) 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 850926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var cellElement = target.enclosingNodeOrSelfWithNodeName("td"); 851926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return cellElement && cellElement.columnIdentifier_; 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _clickInHeaderCell: function(event) 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cell = event.target.enclosingNodeOrSelfWithNodeName("th"); 857c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!cell || (cell.columnIdentifier === undefined) || !cell.classList.contains("sortable")) 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var sortOrder = WebInspector.DataGrid.Order.Ascending; 861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if ((cell === this._sortColumnCell) && this.isSortOrderAscending()) 862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) sortOrder = WebInspector.DataGrid.Order.Descending; 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._sortColumnCell) 865e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._sortColumnCell.classList.remove(WebInspector.DataGrid.Order.Ascending, WebInspector.DataGrid.Order.Descending); 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sortColumnCell = cell; 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 868e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) cell.classList.add(sortOrder); 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 870926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.DataGrid.Events.SortingChanged); 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 873926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 874926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} columnIdentifier 875926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!WebInspector.DataGrid.Order} sortOrder 876926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) markColumnAsSortedBy: function(columnIdentifier, sortOrder) 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._sortColumnCell) 880e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._sortColumnCell.classList.remove(WebInspector.DataGrid.Order.Ascending, WebInspector.DataGrid.Order.Descending); 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._sortColumnCell = this._headerTableHeaders[columnIdentifier]; 882e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._sortColumnCell.classList.add(sortOrder); 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 88609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} columnIdentifier 88709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!Element} 88809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) headerTableHeader: function(columnIdentifier) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._headerTableHeaders[columnIdentifier]; 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _mouseDownInDataTable: function(event) 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var gridNode = this.dataGridNodeFromNode(event.target); 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!gridNode || !gridNode.selectable) 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (gridNode.isEventWithinDisclosureTriangle(event)) 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.metaKey) { 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (gridNode.selected) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.deselect(); 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.select(); 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.select(); 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _contextMenuInDataTable: function(event) 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var contextMenu = new WebInspector.ContextMenu(event); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var gridNode = this.dataGridNodeFromNode(event.target); 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._refreshCallback && (!gridNode || gridNode !== this.creationNode)) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.appendItem(WebInspector.UIString("Refresh"), this._refreshCallback.bind(this)); 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (gridNode && gridNode.selectable && !gridNode.isEventWithinDisclosureTriangle(event)) { 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._editCallback) { 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (gridNode === this.creationNode) 923926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add new" : "Add New"), this._startEditing.bind(this, event.target)); 924926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else { 925926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var columnIdentifier = this.columnIdentifierFromNode(event.target); 926f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (columnIdentifier && this._columns[columnIdentifier].editable) 927f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) contextMenu.appendItem(WebInspector.UIString("Edit \"%s\"", this._columns[columnIdentifier].title), this._startEditing.bind(this, event.target)); 928926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._deleteCallback && gridNode !== this.creationNode) 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.appendItem(WebInspector.UIString("Delete"), this._deleteCallback.bind(this, gridNode)); 93253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (this._contextMenuCallback) 93353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._contextMenuCallback(contextMenu, gridNode); 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contextMenu.show(); 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _clickInDataTable: function(event) 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var gridNode = this.dataGridNodeFromNode(event.target); 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!gridNode || !gridNode.hasChildren) 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!gridNode.isEventWithinDisclosureTriangle(event)) 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (gridNode.expanded) { 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.altKey) 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.collapseRecursively(); 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.collapse(); 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.altKey) 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.expandRecursively(); 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.expand(); 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 961c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 962c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!WebInspector.DataGrid.ResizeMethod} method 963c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 964c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) setResizeMethod: function(method) 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._resizeMethod = method; 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _startResizerDragging: function(event) 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentResizer = event.target; 975f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return true; 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _resizerDragging: function(event) 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var resizer = this._currentResizer; 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resizer) 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 984f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var tableWidth = this.element.offsetWidth; // Cache it early, before we invalidate layout. 985926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Constrain the dragpoint to be within the containing div of the 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // datagrid. 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dragPoint = event.clientX - this.element.totalOffsetLeft(); 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var firstRowCells = this.headerTableBody.rows[0].cells; 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var leftEdgeOfPreviousColumn = 0; 991f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // Constrain the dragpoint to be within the space made up by the 992f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // column directly to the left and the column directly to the right. 993f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var leftCellIndex = resizer.__index; 994f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var rightCellIndex = leftCellIndex + 1; 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < leftCellIndex; i++) 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) leftEdgeOfPreviousColumn += firstRowCells[i].offsetWidth; 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Differences for other resize methods 999c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._resizeMethod === WebInspector.DataGrid.ResizeMethod.Last) { 1000f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) rightCellIndex = this._resizers.length; 1001c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } else if (this._resizeMethod === WebInspector.DataGrid.ResizeMethod.First) { 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) leftEdgeOfPreviousColumn += firstRowCells[leftCellIndex].offsetWidth - firstRowCells[0].offsetWidth; 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) leftCellIndex = 0; 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rightEdgeOfNextColumn = leftEdgeOfPreviousColumn + firstRowCells[leftCellIndex].offsetWidth + firstRowCells[rightCellIndex].offsetWidth; 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Give each column some padding so that they don't disappear. 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var leftMinimum = leftEdgeOfPreviousColumn + this.ColumnResizePadding; 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var rightMaximum = rightEdgeOfNextColumn - this.ColumnResizePadding; 101153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (leftMinimum > rightMaximum) 101253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dragPoint = Number.constrain(dragPoint, leftMinimum, rightMaximum); 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1016f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var position = (dragPoint - this.CenterResizerOverBorderAdjustment); 1017f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizer.__position = position; 1018f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) resizer.style.left = position + "px"; 10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1020f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var pxLeftColumn = (dragPoint - leftEdgeOfPreviousColumn) + "px"; 1021f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerTableColumnGroup.children[leftCellIndex].style.width = pxLeftColumn; 1022f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._dataTableColumnGroup.children[leftCellIndex].style.width = pxLeftColumn; 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1024f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var pxRightColumn = (rightEdgeOfNextColumn - dragPoint) + "px"; 1025f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._headerTableColumnGroup.children[rightCellIndex].style.width = pxRightColumn; 1026f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._dataTableColumnGroup.children[rightCellIndex].style.width = pxRightColumn; 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1028f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var leftColumn = this._visibleColumnsArray[leftCellIndex]; 1029f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var rightColumn = this._visibleColumnsArray[rightCellIndex]; 1030926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (leftColumn.weight || rightColumn.weight) { 1031926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var sumOfWeights = leftColumn.weight + rightColumn.weight; 1032926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var delta = rightEdgeOfNextColumn - leftEdgeOfPreviousColumn; 1033926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) leftColumn.weight = (dragPoint - leftEdgeOfPreviousColumn) * sumOfWeights / delta; 1034926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) rightColumn.weight = (rightEdgeOfNextColumn - dragPoint) * sumOfWeights / delta; 1035926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1036926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._positionResizers(); 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event.preventDefault(); 1039926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.DataGrid.Events.ColumnsResized); 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1042f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 1043f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} columnId 1044f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {number} 1045f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 1046f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) columnOffset: function(columnId) 1047f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 10485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!this.element.offsetWidth) 10495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return 0; 1050f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 1; i < this._visibleColumnsArray.length; ++i) { 1051197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (columnId === this._visibleColumnsArray[i].identifier) { 1052197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (this._resizers[i - 1]) 1053197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._resizers[i - 1].__position; 1054197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1055f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 1056f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return 0; 1057f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 1058f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _endResizerDragging: function(event) 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentResizer = null; 106253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._saveColumnWeights(); 1063926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.DataGrid.Events.ColumnsResized); 10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 106653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ColumnResizePadding: 24, 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CenterResizerOverBorderAdjustment: 3, 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.View.prototype 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1073c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)/** @enum {string} */ 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DataGrid.ResizeMethod = { 10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Nearest: "nearest", 10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) First: "first", 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Last: "last" 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object} 1083a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?Object.<string, *>=} data 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} hasChildren 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DataGridNode = function(data, hasChildren) 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1088c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {?Element} */ 1089c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._element = null; 1090c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._expanded = false; 1092c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._selected = false; 1094c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {number|undefined} */ 1095c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._depth; 1096c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean|undefined} */ 1097c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._revealed; 1098c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 1099c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._attached = false; 1100c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {?{parent: !WebInspector.DataGridNode, index: number}} */ 1101c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._savedPosition = null; 1102c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._shouldRefreshChildren = true; 1104e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** @type {!Object.<string, *>} */ 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._data = data || {}; 1106e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** @type {boolean} */ 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.hasChildren = hasChildren || false; 1108e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** @type {!Array.<!WebInspector.DataGridNode>} */ 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children = []; 1110c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {?WebInspector.DataGrid} */ 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid = null; 1112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {?WebInspector.DataGridNode} */ 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.parent = null; 1114a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** @type {?WebInspector.DataGridNode} */ 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.previousSibling = null; 1116a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** @type {?WebInspector.DataGridNode} */ 11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.nextSibling = null; 1118c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {number} */ 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.disclosureToggleWidth = 10; 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DataGridNode.prototype = { 1123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** @type {boolean} */ 11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selectable: true, 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** @type {boolean} */ 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _isRoot: false, 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1129e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 1130e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!Element} 1131e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 1132e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) element: function() 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1134e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!this._element) { 1135e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.createElement(); 1136e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.createCells(); 1137e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1138e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return /** @type {!Element} */ (this._element); 1139e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1141e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 1142e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @protected 1143e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 1144e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) createElement: function() 1145e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._element = document.createElement("tr"); 11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._element._dataGridNode = this; 11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.hasChildren) 1150a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("parent"); 11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.expanded) 1152a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("expanded"); 11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.selected) 1154a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("selected"); 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.revealed) 1156a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("revealed"); 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 1160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @protected 1161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) createCells: function() 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1164197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._element.removeChildren(); 1165f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var columnsArray = this.dataGrid._visibleColumnsArray; 1166e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) for (var i = 0; i < columnsArray.length; ++i) 1167e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._element.appendChild(this.createCell(columnsArray[i].identifier)); 1168e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._element.appendChild(this._createTDWithClass("corner")); 11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get data() 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._data; 11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set data(x) 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._data = x || {}; 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.refresh(); 11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get revealed() 11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1184c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._revealed !== undefined) 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._revealed; 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var currentAncestor = this.parent; 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (currentAncestor && !currentAncestor._isRoot) { 11895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!currentAncestor.expanded) { 11905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._revealed = false; 11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentAncestor = currentAncestor.parent; 11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._revealed = true; 11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set hasChildren(x) 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._hasChildren === x) 12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._hasChildren = x; 12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._element) 12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._element.classList.toggle("parent", this._hasChildren); 1212d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._element.classList.toggle("expanded", this._hasChildren && this.expanded); 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get hasChildren() 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._hasChildren; 12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set revealed(x) 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._revealed === x) 12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._revealed = x; 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._element) 1228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._element.classList.toggle("revealed", this._revealed); 12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i].revealed = x && this.expanded; 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1234c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** 1235c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {number} 1236c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) */ 12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get depth() 12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1239c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (this._depth !== undefined) 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._depth; 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.parent && !this.parent._isRoot) 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._depth = this.parent.depth + 1; 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._depth = 0; 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._depth; 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get leftPadding() 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (typeof this._leftPadding === "number") 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._leftPadding; 1252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._leftPadding = this.depth * this.dataGrid.indentWidth; 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._leftPadding; 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get shouldRefreshChildren() 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._shouldRefreshChildren; 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set shouldRefreshChildren(x) 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._shouldRefreshChildren = x; 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x && this.expanded) 12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.expand(); 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get selected() 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._selected; 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set selected(x) 12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x) 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.select(); 12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.deselect(); 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get expanded() 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._expanded; 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1287e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 1288e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @param {boolean} x 1289e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set expanded(x) 12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (x) 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.expand(); 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.collapse(); 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) refresh: function() 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1300197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this.dataGrid) 1301c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._element = null; 1302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._element) 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.createCells(); 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1308e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} className 1309e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!Element} 1310e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 1311e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _createTDWithClass: function(className) 1312e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 1313e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var cell = document.createElementWithClass("td", className); 1314e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var cellClass = this.dataGrid._cellClass; 1315e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (cellClass) 1316e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) cell.classList.add(cellClass); 1317e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return cell; 1318e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1319e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1320e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 1321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} columnIdentifier 1322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {!Element} 1323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 1324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) createTD: function(columnIdentifier) 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1326e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var cell = this._createTDWithClass(columnIdentifier + "-column"); 1327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) cell.columnIdentifier_ = columnIdentifier; 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1329f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var alignment = this.dataGrid._columns[columnIdentifier].align; 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (alignment) 1331a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) cell.classList.add(alignment); 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return cell; 1334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} columnIdentifier 1338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {!Element} 1339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 1340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) createCell: function(columnIdentifier) 1341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var cell = this.createTD(columnIdentifier); 1343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var data = this.data[columnIdentifier]; 1345d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (data instanceof Node) { 1346d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) cell.appendChild(data); 1347d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 1348d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) cell.textContent = data; 1349f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (this.dataGrid._columns[columnIdentifier].longText) 1350d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) cell.title = data; 135153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (columnIdentifier === this.dataGrid.disclosureColumnIdentifier) { 1354a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) cell.classList.add("disclosure"); 13555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.leftPadding) 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cell.style.setProperty("padding-left", this.leftPadding + "px"); 13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return cell; 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number} 13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1365d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) nodeSelfHeight: function() 13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1367d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return 16; 13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1371a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DataGridNode} child 13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) appendChild: function(child) 13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.insertChild(child, this.children.length); 13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1379a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DataGridNode} child 13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} index 13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 13825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) insertChild: function(child, index) 13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!child) 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw("insertChild: Node can't be undefined or null."); 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (child.parent === this) 13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw("insertChild: Node is already a child of this node."); 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (child.parent) 13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.parent.removeChild(child); 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children.splice(index, 0, child); 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.hasChildren = true; 13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.parent = this; 13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.dataGrid = this.dataGrid; 1397c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) child.recalculateSiblings(index); 13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1399c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) child._depth = undefined; 1400c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) child._revealed = undefined; 1401c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) child._attached = false; 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child._shouldRefreshChildren = true; 14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var current = child.children[0]; 14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (current) { 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) current.dataGrid = this.dataGrid; 1407c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) current._depth = undefined; 1408c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) current._revealed = undefined; 1409c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) current._attached = false; 14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) current._shouldRefreshChildren = true; 14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) current = current.traverseNextNode(false, child, true); 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.expanded) 14155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child._attach(); 14165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.revealed) 14175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.revealed = false; 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1421a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DataGridNode} child 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeChild: function(child) 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!child) 14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw("removeChild: Node can't be undefined or null."); 14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (child.parent !== this) 14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw("removeChild: Node is not a child of this node."); 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.deselect(); 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child._detach(); 14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children.remove(child, true); 14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (child.previousSibling) 14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.previousSibling.nextSibling = child.nextSibling; 14375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (child.nextSibling) 14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.nextSibling.previousSibling = child.previousSibling; 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.dataGrid = null; 14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.parent = null; 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.nextSibling = null; 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.previousSibling = null; 14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.children.length <= 0) 14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.hasChildren = false; 14475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) removeChildren: function() 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) { 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var child = this.children[i]; 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.deselect(); 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child._detach(); 14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.dataGrid = null; 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.parent = null; 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.nextSibling = null; 14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.previousSibling = null; 14605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children = []; 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.hasChildren = false; 14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1466e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 1467e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @param {number} myIndex 1468e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 1469c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) recalculateSiblings: function(myIndex) 14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.parent) 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1474323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) var previousChild = this.parent.children[myIndex - 1] || null; 1475323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (previousChild) 14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) previousChild.nextSibling = this; 1477323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.previousSibling = previousChild; 14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1479323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) var nextChild = this.parent.children[myIndex + 1] || null; 1480323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (nextChild) 14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) nextChild.previousSibling = this; 1482323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.nextSibling = nextChild; 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) collapse: function() 14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 14875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isRoot) 14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 14895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._element) 1490a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.remove("expanded"); 14915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._expanded = false; 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 14955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i].revealed = false; 14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) collapseRecursively: function() 14995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var item = this; 15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (item) { 15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (item.expanded) 15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item.collapse(); 15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item = item.traverseNextNode(false, this, true); 15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1508926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) populate: function() { }, 1509926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expand: function() 15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.hasChildren || this.expanded) 15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isRoot) 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.revealed && !this._shouldRefreshChildren) 15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 15195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i].revealed = true; 15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._shouldRefreshChildren) { 15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 15235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i]._detach(); 15245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.populate(); 15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._attached) { 15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) { 15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var child = this.children[i]; 15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.revealed) 15315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.revealed = true; 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child._attach(); 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1536c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._shouldRefreshChildren = false; 15375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._element) 1540a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("expanded"); 15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._expanded = true; 15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expandRecursively: function() 15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var item = this; 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (item) { 15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item.expand(); 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) item = item.traverseNextNode(false, this); 15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reveal: function() 15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isRoot) 15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var currentAncestor = this.parent; 15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (currentAncestor && !currentAncestor._isRoot) { 15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!currentAncestor.expanded) 15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentAncestor.expand(); 15625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentAncestor = currentAncestor.parent; 15635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 15645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.element().scrollIntoViewIfNeeded(false); 15665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 15695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} supressSelectedEvent 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) select: function(supressSelectedEvent) 15725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.dataGrid || !this.selectable || this.selected) 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 15755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.dataGrid.selectedNode) 15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid.selectedNode.deselect(); 15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._selected = true; 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid.selectedNode = this; 15815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._element) 1583a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.add("selected"); 15845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!supressSelectedEvent) 15865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Events.SelectedNode); 15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) revealAndSelect: function() 15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isRoot) 15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.reveal(); 15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.select(); 15955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} supressDeselectedEvent 15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) deselect: function(supressDeselectedEvent) 16015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.dataGrid || this.dataGrid.selectedNode !== this || !this.selected) 16035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 16045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._selected = false; 16065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid.selectedNode = null; 16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._element) 1609a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._element.classList.remove("selected"); 16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!supressDeselectedEvent) 16125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dataGrid.dispatchEventToListeners(WebInspector.DataGrid.Events.DeselectedNode); 16135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1616926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} skipHidden 1617a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.DataGridNode=} stayWithin 1618926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean=} dontPopulate 1619a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Object=} info 1620a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?WebInspector.DataGridNode} 1621926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 16225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) traverseNextNode: function(skipHidden, stayWithin, dontPopulate, info) 16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!dontPopulate && this.hasChildren) 1625926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.populate(); 16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (info) 16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info.depthChange = 0; 16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = (!skipHidden || this.revealed) ? this.children[0] : null; 16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node && (!skipHidden || this.expanded)) { 16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (info) 16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info.depthChange = 1; 16345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return node; 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this === stayWithin) 16385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node = (!skipHidden || this.revealed) ? this.nextSibling : null; 16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node) 16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return node; 16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node = this; 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (node && !node._isRoot && !((!skipHidden || node.revealed) ? node.nextSibling : null) && node.parent !== stayWithin) { 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (info) 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info.depthChange -= 1; 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node = node.parent; 16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!node) 16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (!skipHidden || node.revealed) ? node.nextSibling : null; 16555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1657926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1658926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean} skipHidden 1659926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {boolean=} dontPopulate 1660a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?WebInspector.DataGridNode} 1661926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) traversePreviousNode: function(skipHidden, dontPopulate) 16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = (!skipHidden || this.revealed) ? this.previousSibling : null; 16655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!dontPopulate && node && node.hasChildren) 1666926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) node.populate(); 16675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (node && ((!skipHidden || (node.revealed && node.expanded)) ? node.children[node.children.length - 1] : null)) { 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!dontPopulate && node.hasChildren) 1670926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) node.populate(); 16715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node = ((!skipHidden || (node.revealed && node.expanded)) ? node.children[node.children.length - 1] : null); 16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node) 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return node; 16765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.parent || this.parent._isRoot) 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.parent; 16815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1683926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 1685926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 16865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isEventWithinDisclosureTriangle: function(event) 16875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.hasChildren) 16895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var cell = event.target.enclosingNodeOrSelfWithNodeName("td"); 1691a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!cell.classList.contains("disclosure")) 16925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1693926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 16945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var left = cell.totalOffsetLeft() + this.leftPadding; 16955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return event.pageX >= left && event.pageX <= left + this.disclosureToggleWidth; 16965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _attach: function() 16995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.dataGrid || this._attached) 17015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._attached = true; 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nextNode = null; 17065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var previousNode = this.traversePreviousNode(true, true); 1707e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var previousElement = previousNode ? previousNode.element() : this.dataGrid._topFillerRow; 1708e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.dataGrid.dataTableBody.insertBefore(this.element(), previousElement.nextSibling); 17095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.expanded) 17115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i]._attach(); 17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _detach: function() 17165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 17175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._attached) 17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._attached = false; 17215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1722591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (this._element) 1723591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._element.remove(); 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this.children.length; ++i) 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.children[i]._detach(); 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.wasDetached(); 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) wasDetached: function() 17325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) savePosition: function() 17365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._savedPosition) 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.parent) 17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) throw("savePosition: Node must have a parent."); 17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._savedPosition = { 17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parent: this.parent, 17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) index: this.parent.children.indexOf(this) 17455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 17465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) restorePosition: function() 17495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._savedPosition) 17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.parent !== this._savedPosition.parent) 17545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._savedPosition.parent.insertChild(this, this._savedPosition.index); 17555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1756c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._savedPosition = null; 17575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.Object.prototype 17605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.DataGridNode} 17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CreationDataGridNode = function(data, hasChildren) 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.DataGridNode.call(this, data, hasChildren); 1769c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) /** @type {boolean} */ 17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.isCreationNode = true; 17715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CreationDataGridNode.prototype = { 17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeNormal: function() 17755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1776c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this.isCreationNode = false; 17775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.DataGridNode.prototype 17805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1781