OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 * @fileoverview This implements a table header. | 6 * @fileoverview This implements a table header. |
7 */ | 7 */ |
8 | 8 |
9 cr.define('cr.ui.table', function() { | 9 cr.define('cr.ui.table', function() { |
10 /** @const */ var TableSplitter = cr.ui.TableSplitter; | 10 /** @const */ var TableSplitter = cr.ui.TableSplitter; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 resize: function() { | 51 resize: function() { |
52 var cm = this.table_.columnModel; | 52 var cm = this.table_.columnModel; |
53 | 53 |
54 var headerCells = this.querySelectorAll('.table-header-cell'); | 54 var headerCells = this.querySelectorAll('.table-header-cell'); |
55 if (headerCells.length != cm.size) { | 55 if (headerCells.length != cm.size) { |
56 this.redraw(); | 56 this.redraw(); |
57 return; | 57 return; |
58 } | 58 } |
59 | 59 |
60 for (var i = 0; i < cm.size; i++) { | 60 for (var i = 0; i < cm.size; i++) { |
61 headerCells[i].style.width = cm.getWidth(i) + '%'; | 61 headerCells[i].style.width = cm.getWidth(i) + 'px'; |
62 } | 62 } |
63 this.placeSplitters_(this.querySelectorAll('.table-header-splitter')); | 63 this.placeSplitters_(this.querySelectorAll('.table-header-splitter')); |
64 }, | 64 }, |
65 | 65 |
66 batchCount_: 0, | 66 batchCount_: 0, |
67 | 67 |
68 startBatchUpdates: function() { | 68 startBatchUpdates: function() { |
69 this.batchCount_++; | 69 this.batchCount_++; |
70 }, | 70 }, |
71 | 71 |
(...skipping 15 matching lines...) Expand all Loading... |
87 | 87 |
88 this.updateWidth(); | 88 this.updateWidth(); |
89 this.headerInner_.textContent = ''; | 89 this.headerInner_.textContent = ''; |
90 | 90 |
91 if (!cm || ! dm) { | 91 if (!cm || ! dm) { |
92 return; | 92 return; |
93 } | 93 } |
94 | 94 |
95 for (var i = 0; i < cm.size; i++) { | 95 for (var i = 0; i < cm.size; i++) { |
96 var cell = this.ownerDocument.createElement('div'); | 96 var cell = this.ownerDocument.createElement('div'); |
97 cell.style.width = cm.getWidth(i) + '%'; | 97 cell.style.width = cm.getWidth(i) + 'px'; |
98 cell.className = 'table-header-cell'; | 98 cell.className = 'table-header-cell'; |
99 if (dm.isSortable(cm.getId(i))) | 99 if (dm.isSortable(cm.getId(i))) |
100 cell.addEventListener('click', | 100 cell.addEventListener('click', |
101 this.createSortFunction_(i).bind(this)); | 101 this.createSortFunction_(i).bind(this)); |
102 | 102 |
103 cell.appendChild(this.createHeaderLabel_(i)); | 103 cell.appendChild(this.createHeaderLabel_(i)); |
104 this.headerInner_.appendChild(cell); | 104 this.headerInner_.appendChild(cell); |
105 } | 105 } |
106 this.appendSplitters_(); | 106 this.appendSplitters_(); |
107 }, | 107 }, |
108 | 108 |
109 /** | 109 /** |
110 * Appends column splitters to the table header. | 110 * Appends column splitters to the table header. |
111 */ | 111 */ |
112 appendSplitters_: function() { | 112 appendSplitters_: function() { |
113 var cm = this.table_.columnModel; | 113 var cm = this.table_.columnModel; |
114 var splitters = []; | 114 var splitters = []; |
115 for (var i = 0; i < cm.size - 1; i++) { | 115 for (var i = 0; i < cm.size; i++) { |
116 // splitter should use CSS for background image. | 116 // splitter should use CSS for background image. |
117 var splitter = new TableSplitter({table: this.table_}); | 117 var splitter = new TableSplitter({table: this.table_}); |
118 splitter.columnIndex = i; | 118 splitter.columnIndex = i; |
119 splitter.addEventListener('dblclick', | 119 splitter.addEventListener('dblclick', |
120 this.handleDblClick_.bind(this, i)); | 120 this.handleDblClick_.bind(this, i)); |
121 | 121 |
122 this.headerInner_.appendChild(splitter); | 122 this.headerInner_.appendChild(splitter); |
123 splitters.push(splitter); | 123 splitters.push(splitter); |
124 } | 124 } |
125 this.placeSplitters_(splitters); | 125 this.placeSplitters_(splitters); |
126 }, | 126 }, |
127 | 127 |
128 /** | 128 /** |
129 * Place splitters to right positions. | 129 * Place splitters to right positions. |
130 * @param {Array.<HTMLElement>|NodeList} splitters Array of splitters. | 130 * @param {Array.<HTMLElement>|NodeList} splitters Array of splitters. |
131 */ | 131 */ |
132 placeSplitters_: function(splitters) { | 132 placeSplitters_: function(splitters) { |
133 var rtl = this.ownerDocument.defaultView.getComputedStyle(this). | |
134 direction == 'rtl'; | |
135 var cm = this.table_.columnModel; | 133 var cm = this.table_.columnModel; |
136 var leftPercent = 0; | 134 var place = 0; |
137 for (var i = 0; i < cm.size - 1; i++) { | 135 for (var i = 0; i < cm.size; i++) { |
138 leftPercent += cm.getWidth(i); | 136 place += cm.getWidth(i); |
139 splitters[i].style.left = rtl ? 100 - leftPercent + '%' : | 137 splitters[i].style.webkitMarginStart = place + 'px'; |
140 leftPercent + '%'; | |
141 } | 138 } |
142 }, | 139 }, |
143 | 140 |
144 /** | 141 /** |
145 * Renders column header. Appends text label and sort arrow if needed. | 142 * Renders column header. Appends text label and sort arrow if needed. |
146 * @param {number} index Column index. | 143 * @param {number} index Column index. |
147 */ | 144 */ |
148 createHeaderLabel_: function(index) { | 145 createHeaderLabel_: function(index) { |
149 var cm = this.table_.columnModel; | 146 var cm = this.table_.columnModel; |
150 var dm = this.table_.dataModel; | 147 var dm = this.table_.dataModel; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 /** | 228 /** |
232 * Rectangular area around the splitters sensitive to touch events | 229 * Rectangular area around the splitters sensitive to touch events |
233 * (in pixels). | 230 * (in pixels). |
234 */ | 231 */ |
235 TableHeader.TOUCH_DRAG_AREA_WIDTH = 30; | 232 TableHeader.TOUCH_DRAG_AREA_WIDTH = 30; |
236 | 233 |
237 return { | 234 return { |
238 TableHeader: TableHeader | 235 TableHeader: TableHeader |
239 }; | 236 }; |
240 }); | 237 }); |
OLD | NEW |