Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: chrome/browser/resources/shared/js/cr/ui/table/table_header.js

Issue 11280253: Fixing column widths in tables. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review fixes. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698