| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.ViewportDataGrid} | 7 * @extends {WebInspector.ViewportDataGrid} |
| 8 * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columnsArray | 8 * @param {!Array<!WebInspector.DataGrid.ColumnDescriptor>} columnsArray |
| 9 * @param {function(!WebInspector.DataGridNode, string, string, string)=} editCa
llback | 9 * @param {function(!WebInspector.DataGridNode, string, string, string)=} editCa
llback |
| 10 * @param {function(!WebInspector.DataGridNode)=} deleteCallback | 10 * @param {function(!WebInspector.DataGridNode)=} deleteCallback |
| 11 * @param {function()=} refreshCallback | 11 * @param {function()=} refreshCallback |
| 12 * @param {function(!WebInspector.ContextMenu, !WebInspector.DataGridNode)=} con
textMenuCallback | 12 * @param {function(!WebInspector.ContextMenu, !WebInspector.DataGridNode)=} con
textMenuCallback |
| 13 */ | 13 */ |
| 14 WebInspector.SortableDataGrid = function(columnsArray, editCallback, deleteCallb
ack, refreshCallback, contextMenuCallback) | 14 WebInspector.SortableDataGrid = function(columnsArray, editCallback, deleteCallb
ack, refreshCallback, contextMenuCallback) |
| 15 { | 15 { |
| 16 WebInspector.ViewportDataGrid.call(this, columnsArray, editCallback, deleteC
allback, refreshCallback, contextMenuCallback); | 16 WebInspector.ViewportDataGrid.call(this, columnsArray, editCallback, deleteC
allback, refreshCallback, contextMenuCallback); |
| 17 /** @type {!WebInspector.SortableDataGrid.NodeComparator} */ | 17 /** @type {!WebInspector.SortableDataGrid.NodeComparator} */ |
| 18 this._sortingFunction = WebInspector.SortableDataGrid.TrivialComparator; | 18 this._sortingFunction = WebInspector.SortableDataGrid.TrivialComparator; |
| 19 this.setRootNode(new WebInspector.SortableDataGridNode()); | 19 this.setRootNode(new WebInspector.SortableDataGridNode()); |
| 20 }; | 20 }; |
| 21 | 21 |
| 22 /** @typedef {function(!WebInspector.DataGridNode, !WebInspector.DataGridNode):n
umber} */ | 22 /** @typedef {function(!WebInspector.DataGridNode, !WebInspector.DataGridNode):n
umber} */ |
| 23 WebInspector.SortableDataGrid.NodeComparator; | 23 WebInspector.SortableDataGrid.NodeComparator; |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * @param {!WebInspector.DataGridNode} a | 26 * @param {!WebInspector.DataGridNode} a |
| 27 * @param {!WebInspector.DataGridNode} b | 27 * @param {!WebInspector.DataGridNode} b |
| 28 * @return {number} | 28 * @return {number} |
| 29 */ | 29 */ |
| 30 WebInspector.SortableDataGrid.TrivialComparator = function(a, b) | 30 WebInspector.SortableDataGrid.TrivialComparator = function(a, b) |
| 31 { | 31 { |
| 32 return 0; | 32 return 0; |
| 33 }; | 33 }; |
| 34 | 34 |
| 35 /** | 35 /** |
| 36 * @param {string} columnIdentifier | 36 * @param {string} columnId |
| 37 * @param {!WebInspector.DataGridNode} a | 37 * @param {!WebInspector.DataGridNode} a |
| 38 * @param {!WebInspector.DataGridNode} b | 38 * @param {!WebInspector.DataGridNode} b |
| 39 * @return {number} | 39 * @return {number} |
| 40 */ | 40 */ |
| 41 WebInspector.SortableDataGrid.NumericComparator = function(columnIdentifier, a,
b) | 41 WebInspector.SortableDataGrid.NumericComparator = function(columnId, a, b) |
| 42 { | 42 { |
| 43 var aValue = a.data[columnIdentifier]; | 43 var aValue = a.data[columnId]; |
| 44 var bValue = b.data[columnIdentifier]; | 44 var bValue = b.data[columnId]; |
| 45 var aNumber = Number(aValue instanceof Node ? aValue.textContent : aValue); | 45 var aNumber = Number(aValue instanceof Node ? aValue.textContent : aValue); |
| 46 var bNumber = Number(bValue instanceof Node ? bValue.textContent : bValue); | 46 var bNumber = Number(bValue instanceof Node ? bValue.textContent : bValue); |
| 47 return aNumber < bNumber ? -1 : (aNumber > bNumber ? 1 : 0); | 47 return aNumber < bNumber ? -1 : (aNumber > bNumber ? 1 : 0); |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 /** | 50 /** |
| 51 * @param {string} columnIdentifier | 51 * @param {string} columnId |
| 52 * @param {!WebInspector.DataGridNode} a | 52 * @param {!WebInspector.DataGridNode} a |
| 53 * @param {!WebInspector.DataGridNode} b | 53 * @param {!WebInspector.DataGridNode} b |
| 54 * @return {number} | 54 * @return {number} |
| 55 */ | 55 */ |
| 56 WebInspector.SortableDataGrid.StringComparator = function(columnIdentifier, a, b
) | 56 WebInspector.SortableDataGrid.StringComparator = function(columnId, a, b) |
| 57 { | 57 { |
| 58 var aValue = a.data[columnIdentifier]; | 58 var aValue = a.data[columnId]; |
| 59 var bValue = b.data[columnIdentifier]; | 59 var bValue = b.data[columnId]; |
| 60 var aString = aValue instanceof Node ? aValue.textContent : String(aValue); | 60 var aString = aValue instanceof Node ? aValue.textContent : String(aValue); |
| 61 var bString = bValue instanceof Node ? bValue.textContent : String(bValue); | 61 var bString = bValue instanceof Node ? bValue.textContent : String(bValue); |
| 62 return aString < bString ? -1 : (aString > bString ? 1 : 0); | 62 return aString < bString ? -1 : (aString > bString ? 1 : 0); |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 /** | 65 /** |
| 66 * @param {!WebInspector.SortableDataGrid.NodeComparator} comparator | 66 * @param {!WebInspector.SortableDataGrid.NodeComparator} comparator |
| 67 * @param {boolean} reverseMode | 67 * @param {boolean} reverseMode |
| 68 * @param {!WebInspector.DataGridNode} a | 68 * @param {!WebInspector.DataGridNode} a |
| 69 * @param {!WebInspector.DataGridNode} b | 69 * @param {!WebInspector.DataGridNode} b |
| 70 * @return {number} | 70 * @return {number} |
| 71 */ | 71 */ |
| 72 WebInspector.SortableDataGrid.Comparator = function(comparator, reverseMode, a,
b) | 72 WebInspector.SortableDataGrid.Comparator = function(comparator, reverseMode, a,
b) |
| 73 { | 73 { |
| 74 return reverseMode ? comparator(b, a) : comparator(a, b); | 74 return reverseMode ? comparator(b, a) : comparator(a, b); |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 /** | 77 /** |
| 78 * @param {!Array.<string>} columnNames | 78 * @param {!Array.<string>} columnNames |
| 79 * @param {!Array.<string>} values | 79 * @param {!Array.<string>} values |
| 80 * @return {?WebInspector.SortableDataGrid} | 80 * @return {?WebInspector.SortableDataGrid} |
| 81 */ | 81 */ |
| 82 WebInspector.SortableDataGrid.create = function(columnNames, values) | 82 WebInspector.SortableDataGrid.create = function(columnNames, values) |
| 83 { | 83 { |
| 84 var numColumns = columnNames.length; | 84 var numColumns = columnNames.length; |
| 85 if (!numColumns) | 85 if (!numColumns) |
| 86 return null; | 86 return null; |
| 87 | 87 |
| 88 var columns = []; | 88 var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */
([]); |
| 89 for (var i = 0; i < columnNames.length; ++i) | 89 for (var i = 0; i < columnNames.length; ++i) |
| 90 columns.push({ title: columnNames[i], width: columnNames[i].length, sort
able: true }); | 90 columns.push({ id: String(i), title: columnNames[i], width: columnNames[
i].length, sortable: true }); |
| 91 | 91 |
| 92 var nodes = []; | 92 var nodes = []; |
| 93 for (var i = 0; i < values.length / numColumns; ++i) { | 93 for (var i = 0; i < values.length / numColumns; ++i) { |
| 94 var data = {}; | 94 var data = {}; |
| 95 for (var j = 0; j < columnNames.length; ++j) | 95 for (var j = 0; j < columnNames.length; ++j) |
| 96 data[j] = values[numColumns * i + j]; | 96 data[j] = values[numColumns * i + j]; |
| 97 | 97 |
| 98 var node = new WebInspector.SortableDataGridNode(data); | 98 var node = new WebInspector.SortableDataGridNode(data); |
| 99 node.selectable = false; | 99 node.selectable = false; |
| 100 nodes.push(node); | 100 nodes.push(node); |
| 101 } | 101 } |
| 102 | 102 |
| 103 var dataGrid = new WebInspector.SortableDataGrid(columns); | 103 var dataGrid = new WebInspector.SortableDataGrid(columns); |
| 104 var length = nodes.length; | 104 var length = nodes.length; |
| 105 var rootNode = dataGrid.rootNode(); | 105 var rootNode = dataGrid.rootNode(); |
| 106 for (var i = 0; i < length; ++i) | 106 for (var i = 0; i < length; ++i) |
| 107 rootNode.appendChild(nodes[i]); | 107 rootNode.appendChild(nodes[i]); |
| 108 | 108 |
| 109 dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, sortD
ataGrid); | 109 dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, sortD
ataGrid); |
| 110 | 110 |
| 111 function sortDataGrid() | 111 function sortDataGrid() |
| 112 { | 112 { |
| 113 var nodes = dataGrid.rootNode().children; | 113 var nodes = dataGrid.rootNode().children; |
| 114 var sortColumnIdentifier = dataGrid.sortColumnIdentifier(); | 114 var sortColumnId = dataGrid.sortColumnId(); |
| 115 if (!sortColumnIdentifier) | 115 if (!sortColumnId) |
| 116 return; | 116 return; |
| 117 | 117 |
| 118 var columnIsNumeric = true; | 118 var columnIsNumeric = true; |
| 119 for (var i = 0; i < nodes.length; i++) { | 119 for (var i = 0; i < nodes.length; i++) { |
| 120 var value = nodes[i].data[sortColumnIdentifier]; | 120 var value = nodes[i].data[sortColumnId]; |
| 121 if (isNaN(value instanceof Node ? value.textContent : value)) { | 121 if (isNaN(value instanceof Node ? value.textContent : value)) { |
| 122 columnIsNumeric = false; | 122 columnIsNumeric = false; |
| 123 break; | 123 break; |
| 124 } | 124 } |
| 125 } | 125 } |
| 126 | 126 |
| 127 var comparator = columnIsNumeric ? WebInspector.SortableDataGrid.Numeric
Comparator : WebInspector.SortableDataGrid.StringComparator; | 127 var comparator = columnIsNumeric ? WebInspector.SortableDataGrid.Numeric
Comparator : WebInspector.SortableDataGrid.StringComparator; |
| 128 dataGrid.sortNodes(comparator.bind(null, sortColumnIdentifier), !dataGri
d.isSortOrderAscending()); | 128 dataGrid.sortNodes(comparator.bind(null, sortColumnId), !dataGrid.isSort
OrderAscending()); |
| 129 } | 129 } |
| 130 return dataGrid; | 130 return dataGrid; |
| 131 }; | 131 }; |
| 132 | 132 |
| 133 WebInspector.SortableDataGrid.prototype = { | 133 WebInspector.SortableDataGrid.prototype = { |
| 134 /** | 134 /** |
| 135 * @param {!WebInspector.DataGridNode} node | 135 * @param {!WebInspector.DataGridNode} node |
| 136 */ | 136 */ |
| 137 insertChild: function(node) | 137 insertChild: function(node) |
| 138 { | 138 { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 { | 178 { |
| 179 this.children.sort(this.dataGrid._sortingFunction); | 179 this.children.sort(this.dataGrid._sortingFunction); |
| 180 for (var i = 0; i < this.children.length; ++i) | 180 for (var i = 0; i < this.children.length; ++i) |
| 181 this.children[i].recalculateSiblings(i); | 181 this.children[i].recalculateSiblings(i); |
| 182 for (var child of this.children) | 182 for (var child of this.children) |
| 183 child._sortChildren(); | 183 child._sortChildren(); |
| 184 }, | 184 }, |
| 185 | 185 |
| 186 __proto__: WebInspector.ViewportDataGridNode.prototype | 186 __proto__: WebInspector.ViewportDataGridNode.prototype |
| 187 }; | 187 }; |
| OLD | NEW |