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

Side by Side Diff: chrome/browser/resources/options2/autofill_edit_address_overlay.js

Issue 10824328: Reduce number of expensive calls to List.redraw() during load of settings page. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Addressed all comments. Created 8 years, 4 months 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
« no previous file with comments | « no previous file | chrome/browser/resources/options2/chromeos/network_list.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cr.define('options', function() { 5 cr.define('options', function() {
6 /** @const */ var OptionsPage = options.OptionsPage; 6 /** @const */ var OptionsPage = options.OptionsPage;
7 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; 7 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
8 8
9 // The GUID of the loaded address. 9 // The GUID of the loaded address.
10 var guid; 10 var guid;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 // Prevent 'blur' events on the OK and cancel buttons, which can trigger 54 // Prevent 'blur' events on the OK and cancel buttons, which can trigger
55 // insertion of new placeholder elements. The addition of placeholders 55 // insertion of new placeholder elements. The addition of placeholders
56 // affects layout, which interferes with being able to click on the 56 // affects layout, which interferes with being able to click on the
57 // buttons. 57 // buttons.
58 $('autofill-edit-address-apply-button').onmousedown = function(event) { 58 $('autofill-edit-address-apply-button').onmousedown = function(event) {
59 event.preventDefault(); 59 event.preventDefault();
60 }; 60 };
61 $('autofill-edit-address-cancel-button').onmousedown = function(event) { 61 $('autofill-edit-address-cancel-button').onmousedown = function(event) {
62 event.preventDefault(); 62 event.preventDefault();
63 } 63 };
64 64
65 self.guid = ''; 65 self.guid = '';
66 self.populateCountryList_(); 66 self.populateCountryList_();
67 self.clearInputFields_(); 67 self.clearInputFields_();
68 self.connectInputEvents_(); 68 self.connectInputEvents_();
69 }, 69 },
70 70
71 /** 71 /**
72 * Creates, decorates and initializes the multi-value lists for full name, 72 * Creates, decorates and initializes the multi-value lists for full name,
73 * phone, and email. 73 * phone, and email.
(...skipping 15 matching lines...) Expand all
89 89
90 /** 90 /**
91 * Updates the data model for the list named |listName| with the values from 91 * Updates the data model for the list named |listName| with the values from
92 * |entries|. 92 * |entries|.
93 * @param {String} listName The id of the list. 93 * @param {String} listName The id of the list.
94 * @param {Array} entries The list of items to be added to the list. 94 * @param {Array} entries The list of items to be added to the list.
95 */ 95 */
96 setMultiValueList_: function(listName, entries) { 96 setMultiValueList_: function(listName, entries) {
97 // Add data entries. 97 // Add data entries.
98 var list = $(listName); 98 var list = $(listName);
99 list.dataModel = new ArrayDataModel(entries);
100 99
101 // Add special entry for adding new values. 100 // Add special entry for adding new values.
102 list.dataModel.splice(list.dataModel.length, 0, null); 101 var augmentedList = entries.slice();
102 augmentedList.push(null);
103 list.dataModel = new ArrayDataModel(augmentedList);
103 104
104 // Update the status of the 'OK' button. 105 // Update the status of the 'OK' button.
105 this.inputFieldChanged_(); 106 this.inputFieldChanged_();
106 107
107 var self = this; 108 list.dataModel.addEventListener('splice',
108 list.dataModel.addEventListener( 109 this.inputFieldChanged_.bind(this));
109 'splice', function(event) { self.inputFieldChanged_(); }); 110 list.dataModel.addEventListener('change',
110 list.dataModel.addEventListener( 111 this.inputFieldChanged_.bind(this));
111 'change', function(event) { self.inputFieldChanged_(); });
112 }, 112 },
113 113
114 /** 114 /**
115 * Updates the data model for the name list with the values from |entries|.
116 * @param {Array} names The list of names to be added to the list.
117 */
118 setNameList_: function(names) {
119 // Add the given |names| as backing data for the list.
120 var list = $('full-name-list');
121 list.dataModel = new ArrayDataModel(names);
122
123 // Add special entry for adding new values.
124 list.dataModel.splice(list.dataModel.length, 0, null);
125
126 var self = this;
127 list.dataModel.addEventListener(
128 'splice', function(event) { self.inputFieldChanged_(); });
129 list.dataModel.addEventListener(
130 'change', function(event) { self.inputFieldChanged_(); });
131 },
132
133 /**
134 * Clears any uncommitted input, resets the stored GUID and dismisses the 115 * Clears any uncommitted input, resets the stored GUID and dismisses the
135 * overlay. 116 * overlay.
136 * @private 117 * @private
137 */ 118 */
138 dismissOverlay_: function() { 119 dismissOverlay_: function() {
139 this.clearInputFields_(); 120 this.clearInputFields_();
140 this.guid = ''; 121 this.guid = '';
141 OptionsPage.closeOverlay(); 122 OptionsPage.closeOverlay();
142 }, 123 },
143 124
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 country.disabled = countries[i].disabled; 249 country.disabled = countries[i].disabled;
269 countryList.appendChild(country); 250 countryList.appendChild(country);
270 } 251 }
271 }, 252 },
272 253
273 /** 254 /**
274 * Clears the value of each input field. 255 * Clears the value of each input field.
275 * @private 256 * @private
276 */ 257 */
277 clearInputFields_: function() { 258 clearInputFields_: function() {
278 this.setNameList_([]); 259 this.setMultiValueList_('full-name-list', []);
279 $('company-name').value = ''; 260 $('company-name').value = '';
280 $('addr-line-1').value = ''; 261 $('addr-line-1').value = '';
281 $('addr-line-2').value = ''; 262 $('addr-line-2').value = '';
282 $('city').value = ''; 263 $('city').value = '';
283 $('state').value = ''; 264 $('state').value = '';
284 $('postal-code').value = ''; 265 $('postal-code').value = '';
285 $('country').value = ''; 266 $('country').value = '';
286 this.setMultiValueList_('phone-list', []); 267 this.setMultiValueList_('phone-list', []);
287 this.setMultiValueList_('email-list', []); 268 this.setMultiValueList_('email-list', []);
288 269
289 this.countryChanged_(); 270 this.countryChanged_();
290 }, 271 },
291 272
292 /** 273 /**
293 * Loads the address data from |address|, sets the input fields based on 274 * Loads the address data from |address|, sets the input fields based on
294 * this data and stores the GUID of the address. 275 * this data and stores the GUID of the address.
295 * @private 276 * @private
296 */ 277 */
297 loadAddress_: function(address) { 278 loadAddress_: function(address) {
298 this.setInputFields_(address); 279 this.setInputFields_(address);
299 this.inputFieldChanged_(); 280 this.inputFieldChanged_();
300 this.guid = address['guid']; 281 this.guid = address['guid'];
301 }, 282 },
302 283
303 /** 284 /**
304 * Sets the value of each input field according to |address| 285 * Sets the value of each input field according to |address|
305 * @private 286 * @private
306 */ 287 */
307 setInputFields_: function(address) { 288 setInputFields_: function(address) {
308 this.setNameList_(address['fullName']); 289 this.setMultiValueList_('full-name-list', address['fullName']);
309 $('company-name').value = address['companyName']; 290 $('company-name').value = address['companyName'];
310 $('addr-line-1').value = address['addrLine1']; 291 $('addr-line-1').value = address['addrLine1'];
311 $('addr-line-2').value = address['addrLine2']; 292 $('addr-line-2').value = address['addrLine2'];
312 $('city').value = address['city']; 293 $('city').value = address['city'];
313 $('state').value = address['state']; 294 $('state').value = address['state'];
314 $('postal-code').value = address['postalCode']; 295 $('postal-code').value = address['postalCode'];
315 $('country').value = address['country']; 296 $('country').value = address['country'];
316 this.setMultiValueList_('phone-list', address['phone']); 297 this.setMultiValueList_('phone-list', address['phone']);
317 this.setMultiValueList_('email-list', address['email']); 298 this.setMultiValueList_('email-list', address['email']);
318 299
(...skipping 16 matching lines...) Expand all
335 AutofillEditAddressOverlay.setValidatedPhoneNumbers = function(numbers) { 316 AutofillEditAddressOverlay.setValidatedPhoneNumbers = function(numbers) {
336 AutofillEditAddressOverlay.getInstance().setMultiValueList_('phone-list', 317 AutofillEditAddressOverlay.getInstance().setMultiValueList_('phone-list',
337 numbers); 318 numbers);
338 }; 319 };
339 320
340 // Export 321 // Export
341 return { 322 return {
342 AutofillEditAddressOverlay: AutofillEditAddressOverlay 323 AutofillEditAddressOverlay: AutofillEditAddressOverlay
343 }; 324 };
344 }); 325 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/options2/chromeos/network_list.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698