| 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 |