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

Side by Side Diff: chrome/browser/resources/policy.js

Issue 8555009: Fix display and progressive disclosure for multi-line values in about:policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments, make hide/show proper links. Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 * This variable structure is here to document the structure that the template 6 * This variable structure is here to document the structure that the template
7 * expects to correctly populate the page. 7 * expects to correctly populate the page.
8 */ 8 */
9 var policyDataFormat = { 9 var policyDataFormat = {
10 // Whether any of the policies in 'policies' have a value. 10 // Whether any of the policies in 'policies' have a value.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 if (this.noActivePolicies_) 73 if (this.noActivePolicies_)
74 $('no-policies').hidden = false; 74 $('no-policies').hidden = false;
75 if (policyData.status.displayStatusSection) 75 if (policyData.status.displayStatusSection)
76 $('status-section').hidden = false;; 76 $('status-section').hidden = false;;
77 77
78 // This is the javascript code that processes the template: 78 // This is the javascript code that processes the template:
79 var input = new JsEvalContext(policyData); 79 var input = new JsEvalContext(policyData);
80 var output = $('data-template'); 80 var output = $('data-template');
81 jstProcess(input, output); 81 jstProcess(input, output);
82 this.setToggleEventHandlers_(); 82
83 var toggles = document.querySelectorAll('.policy-set * .toggler');
84 for (var i = 0; i < toggles.length; i++) {
85 toggles[i].hidden = true;
86 toggles[i].onclick = function() {
87 Policy.getInstance().toggleCellExpand_(this);
88 };
89 }
90
91 var containers = document.querySelectorAll('.text-container');
92 for (var i = 0; i < containers.length; i++)
93 this.initTextContainer_(containers[i])
83 }, 94 },
84 95
85 /** 96 /**
86 * Filters the table of policies by name. 97 * Filters the table of policies by name.
87 * @param {string} term The search string. 98 * @param {string} term The search string.
88 */ 99 */
89 filterTable: function(term) { 100 filterTable: function(term) {
90 this.searchTerm_ = term.toLowerCase(); 101 this.searchTerm_ = term.toLowerCase();
91 var table = $('policy-table'); 102 var table = $('policy-table');
92 var showUnsent = $('toggle-unsent-policies').checked; 103 var showUnsent = $('toggle-unsent-policies').checked;
(...skipping 24 matching lines...) Expand all
117 128
118 var tableRows = document.getElementsByClassName('policy-unset'); 129 var tableRows = document.getElementsByClassName('policy-unset');
119 for (var i = 0; i < tableRows.length; i++) 130 for (var i = 0; i < tableRows.length; i++)
120 tableRows[i].hidden = !($('toggle-unsent-policies').checked); 131 tableRows[i].hidden = !($('toggle-unsent-policies').checked);
121 132
122 // Filter table again in case a search was active. 133 // Filter table again in case a search was active.
123 this.filterTable(this.searchTerm_); 134 this.filterTable(this.searchTerm_);
124 }, 135 },
125 136
126 /** 137 /**
127 * Set event handlers for the "Show more"/"Hide" links generated by
128 * jstemplate.
129 * @private
130 */
131 setToggleEventHandlers_: function() {
132 var toggles = document.querySelectorAll('.policy-set * .toggler');
133 for (var i = 0; i < toggles.length; i++) {
134 toggles[i].onclick = function() {
135 Policy.getInstance().toggleCellExpand_(this);
136 };
137 }
138 },
139
140 /**
141 * Expands or collapses a table cell that has overflowing text. 138 * Expands or collapses a table cell that has overflowing text.
142 * @param {Object} toggler The toggler that was clicked on. 139 * @param {Object} toggler The toggler that was clicked on.
143 * @private 140 * @private
144 */ 141 */
145 toggleCellExpand_: function(toggler) { 142 toggleCellExpand_: function(toggler) {
146 var tableCell = toggler.parentElement; 143 var textContainer = toggler.parentElement;
147 var textContainer = tableCell.querySelector('.text-container'); 144 textContainer.collapsed = !textContainer.collapsed;
148 145
149 if (textContainer.collapsed) 146 if (textContainer.collapsed)
147 this.collapseCell_(textContainer);
148 else
150 this.expandCell_(textContainer); 149 this.expandCell_(textContainer);
151 else
152 this.collapseCell_(textContainer);
153
154 textContainer.collapsed = !textContainer.collapsed;
155 var expand = tableCell.querySelector('.expand');
156 var collapse = tableCell.querySelector('.collapse');
157 expand.style.display = textContainer.collapsed ? '' : 'none';
158 collapse.style.display = textContainer.collapsed ? 'none' : '';
159 }, 150 },
160 151
161 /** 152 /**
162 * Collapses all expanded table cells and updates the visibility of the 153 * Collapses all expanded table cells and updates the visibility of the
163 * toggles accordingly. Should be called before the policy information in 154 * toggles accordingly. Should be called before the policy information in
164 * the table is updated. 155 * the table is updated.
165 */ 156 */
166 collapseExpandedCells: function() { 157 collapseExpandedCells: function() {
167 var toggles = document.querySelectorAll('.policy-set * .toggler'); 158 var textContainers = document.querySelectorAll('.text-expanded');
168 for (var i = 0; i < toggles.length; i++)
169 toggles[i].style.display = 'none';
170
171 var textContainers = document.querySelectorAll('.expanded');
172 for (var i = 0; i < textContainers.length; i++) 159 for (var i = 0; i < textContainers.length; i++)
173 this.collapseCell_(textContainers[i]); 160 this.collapseCell_(textContainers[i]);
174 }, 161 },
175 162
176 /** 163 /**
177 * Expands a table cell so that all the text it contains is visible. 164 * Expands a table cell so that all the text it contains is visible.
178 * @param {Object} textContainer The cell's div element that contains the 165 * @param {Object} textContainer The cell's div element that contains the
179 * text. 166 * text.
180 * @private 167 * @private
181 */ 168 */
182 expandCell_: function(textContainer) { 169 expandCell_: function(textContainer) {
183 textContainer.classList.remove('collapsed'); 170 textContainer.classList.remove('text-collapsed');
184 textContainer.classList.add('expanded'); 171 textContainer.classList.add('text-expanded');
172 textContainer.querySelector('.expand').hidden = true;
173 textContainer.querySelector('.collapse').hidden = false;
185 }, 174 },
186 175
187 /** 176 /**
188 * Collapses a table cell so that overflowing text is hidden. 177 * Collapses a table cell so that overflowing text is hidden.
189 * @param {Object} textContainer The cell's div element that contains the 178 * @param {Object} textContainer The cell's div element that contains the
190 * text. 179 * text.
191 * @private 180 * @private
192 */ 181 */
193 collapseCell_: function(textContainer) { 182 collapseCell_: function(textContainer) {
194 textContainer.classList.remove('expanded'); 183 textContainer.classList.remove('text-expanded');
195 textContainer.classList.add('collapsed'); 184 textContainer.classList.add('text-collapsed');
185 textContainer.querySelector('.expand').hidden = false;
186 textContainer.querySelector('.collapse').hidden = true;
187 },
188
189 /**
190 * Initializes a text container, showing the expand toggle if necessary.
191 * @param {Object} textContainer The text container element.
192 */
193 initTextContainer_: function(textContainer) {
194 textContainer.collapsed = true;
195 var textValue = textContainer.querySelector('.text-value');
196
197 // If the text is wider than the text container, the expand toggler should
198 // appear.
199 if (textContainer.offsetWidth < textValue.offsetWidth ||
200 textContainer.offsetHeight < textValue.offsetHeight) {
201 this.collapseCell_(textContainer);
202 }
196 } 203 }
197 }; 204 };
198 205
199 /** 206 /**
200 * Asks the C++ PolicyUIHandler to get details about policies and status 207 * Asks the C++ PolicyUIHandler to get details about policies and status
201 * information. The PolicyUIHandler should reply to returnData() (below). 208 * information. The PolicyUIHandler should reply to returnData() (below).
202 */ 209 */
203 Policy.requestData = function() { 210 Policy.requestData = function() {
204 chrome.send('requestData'); 211 chrome.send('requestData');
205 }; 212 };
(...skipping 25 matching lines...) Expand all
231 /** 238 /**
232 * Determines whether a policy should be visible or not. 239 * Determines whether a policy should be visible or not.
233 * @param {Object} policy An entry in the 'policies' array given by the above 240 * @param {Object} policy An entry in the 'policies' array given by the above
234 * PolicyDataFormat. 241 * PolicyDataFormat.
235 */ 242 */
236 Policy.shouldDisplayPolicy = function(policy) { 243 Policy.shouldDisplayPolicy = function(policy) {
237 return $('toggle-unsent-policies').checked || policy.set; 244 return $('toggle-unsent-policies').checked || policy.set;
238 }; 245 };
239 246
240 /** 247 /**
241 * Returns true if the "Show more" toggle should appear in a table cell and
242 * false if not.
243 * @param {Object} expandToggle The "Show more" DOM element.
244 */
245 Policy.shouldShowExpand = function(expandToggle) {
246 var textContainer =
247 expandToggle.parentNode.querySelector('.text-container');
248 textContainer.collapsed = true;
249 var cellText = textContainer.querySelector('.cell-text');
250
251 // If the text is wider than the text container, the expand toggler should
252 // appear.
253 return textContainer.offsetWidth < cellText.offsetWidth;
254 };
255
256 /**
257 * Initializes the page and loads the list of policies and the policy 248 * Initializes the page and loads the list of policies and the policy
258 * status data. 249 * status data.
259 */ 250 */
260 Policy.initialize = function() { 251 Policy.initialize = function() {
261 i18nTemplate.process(document, templateData); 252 i18nTemplate.process(document, templateData);
262 Policy.requestData(); 253 Policy.requestData();
263 254
264 // Set HTML event handlers. 255 // Set HTML event handlers.
265 $('fetch-policies-button').onclick = function(event) { 256 $('fetch-policies-button').onclick = function(event) {
266 this.disabled = true; 257 this.disabled = true;
(...skipping 12 matching lines...) Expand all
279 // Export 270 // Export
280 return { 271 return {
281 Policy: Policy 272 Policy: Policy
282 }; 273 };
283 }); 274 });
284 275
285 var Policy = policies.Policy; 276 var Policy = policies.Policy;
286 277
287 // Get data and have it displayed upon loading. 278 // Get data and have it displayed upon loading.
288 document.addEventListener('DOMContentLoaded', policies.Policy.initialize); 279 document.addEventListener('DOMContentLoaded', policies.Policy.initialize);
OLDNEW
« chrome/browser/resources/policy.html ('K') | « chrome/browser/resources/policy.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698