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 |