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

Side by Side Diff: chrome/browser/resources/options/autofill_options.js

Issue 6034005: DOMUI: Implement the new-style Autofill options page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes 2. Created 10 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 var OptionsPage = options.OptionsPage; 6 const OptionsPage = options.OptionsPage;
7 7 const ArrayDataModel = cr.ui.ArrayDataModel;
8 // The offset of the first profile in either the address list or the credit 8 const ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
9 // card list. Consists of the header and the horizontal rule.
10 const addressOffset = 2;
11 const creditCardOffset = 3;
12 9
13 ///////////////////////////////////////////////////////////////////////////// 10 /////////////////////////////////////////////////////////////////////////////
14 // AutoFillOptions class: 11 // AutoFillOptions class:
15 //
16 // TODO(jhawkins): Replace <select> with a DOMUI List.
17 12
18 /** 13 /**
19 * Encapsulated handling of AutoFill options page. 14 * Encapsulated handling of AutoFill options page.
20 * @constructor 15 * @constructor
21 */ 16 */
22 function AutoFillOptions() { 17 function AutoFillOptions() {
23 this.numAddresses = 0;
24 this.numCreditCards = 0;
25 this.activeNavTab = null;
26 this.addressGUIDs = null;
27 this.creditCardGUIDs = null;
28 OptionsPage.call(this, 18 OptionsPage.call(this,
29 'autoFillOptions', 19 'autoFillOptions',
30 templateData.autoFillOptionsTitle, 20 templateData.autoFillOptionsTitle,
31 'autofill-options'); 21 'autofill-options');
32 } 22 }
33 23
34 cr.addSingletonGetter(AutoFillOptions); 24 cr.addSingletonGetter(AutoFillOptions);
35 25
36 AutoFillOptions.prototype = { 26 AutoFillOptions.prototype = {
37 __proto__: OptionsPage.prototype, 27 __proto__: OptionsPage.prototype,
38 28
29 /**
30 * The address list.
31 * @type {DeletableItemList}
32 * @private
33 */
34 addressList_: null,
35
36 /**
37 * The credit card list.
38 * @type {DeletableItemList}
39 * @private
40 */
41 creditCardList_: null,
42
39 initializePage: function() { 43 initializePage: function() {
40 OptionsPage.prototype.initializePage.call(this); 44 OptionsPage.prototype.initializePage.call(this);
41 45
46 this.createAddressList_();
47 this.createCreditCardList_();
48
42 var self = this; 49 var self = this;
43 $('profile-list').onchange = function(event) { 50 $('autofill-add-address').onclick = function(event) {
44 self.updateButtonState_();
45 };
46 $('profile-list').addEventListener('dblclick', function(event) {
47 if ($('autoFillEnabled').checked)
48 self.editProfile_();
49 });
50 $('add-address-button').onclick = function(event) {
51 self.showAddAddressOverlay_(); 51 self.showAddAddressOverlay_();
52 }; 52 };
53 $('add-credit-card-button').onclick = function(event) { 53 $('autofill-add-creditcard').onclick = function(event) {
54 self.showAddCreditCardOverlay_(); 54 self.showAddCreditCardOverlay_();
55 }; 55 };
56 $('autofill-edit-button').onclick = function(event) {
57 self.editProfile_();
58 };
59 $('autofill-remove-button').onclick = function(event) {
60 self.removeProfile_();
61 };
62 56
63 Preferences.getInstance().addEventListener('autofill.enabled', 57 // TODO(jhawkins): What happens when AutoFill is disabled whilst on the
64 this.updateButtonState_.bind(this)); 58 // AutoFill options page?
65 }, 59 },
66 60
67 /** 61 /**
62 * Creates, decorates and initializes the address list.
63 * @private
64 */
65 createAddressList_: function() {
66 this.addressList_ = $('address-list');
67 options.autoFillOptions.AutoFillList.decorate(this.addressList_);
68 this.addressList_.selectionModel = new ListSingleSelectionModel;
69 this.addressList_.autoExpands = true;
70 },
71
72 /**
73 * Creates, decorates and initializes the credit card list.
74 * @private
75 */
76 createCreditCardList_: function() {
77 this.creditCardList_ = $('creditcard-list');
78 options.autoFillOptions.AutoFillList.decorate(this.creditCardList_);
79 this.creditCardList_.selectionModel = new ListSingleSelectionModel;
80 this.creditCardList_.autoExpands = true;
81 },
82
83 /**
68 * Shows the 'Add address' overlay, specifically by loading the 84 * Shows the 'Add address' overlay, specifically by loading the
69 * 'Edit address' overlay, emptying the input fields and modifying the 85 * 'Edit address' overlay, emptying the input fields and modifying the
70 * overlay title. 86 * overlay title.
71 * @private 87 * @private
72 */ 88 */
73 showAddAddressOverlay_: function() { 89 showAddAddressOverlay_: function() {
74 var title = localStrings.getString('addAddressTitle'); 90 var title = localStrings.getString('addAddressTitle');
75 AutoFillEditAddressOverlay.setTitle(title); 91 AutoFillEditAddressOverlay.setTitle(title);
76 AutoFillEditAddressOverlay.clearInputFields(); 92 AutoFillEditAddressOverlay.clearInputFields();
77 OptionsPage.showOverlay('autoFillEditAddressOverlay'); 93 OptionsPage.showOverlay('autoFillEditAddressOverlay');
78 }, 94 },
79 95
80 /** 96 /**
81 * Shows the 'Edit address' overlay, using the data in |address| to fill the
82 * input fields. |address| is a list with one item, an associative array
83 * that contains the address data.
84 * @private
85 */
86 showEditAddressOverlay_: function(address) {
87 var title = localStrings.getString('editAddressTitle');
88 AutoFillEditAddressOverlay.setTitle(title);
89 AutoFillEditAddressOverlay.loadAddress(address[0]);
90 OptionsPage.showOverlay('autoFillEditAddressOverlay');
91 },
92
93 /**
94 * Shows the 'Add credit card' overlay, specifically by loading the 97 * Shows the 'Add credit card' overlay, specifically by loading the
95 * 'Edit credit card' overlay, emptying the input fields and modifying the 98 * 'Edit credit card' overlay, emptying the input fields and modifying the
96 * overlay title. 99 * overlay title.
97 * @private 100 * @private
98 */ 101 */
99 showAddCreditCardOverlay_: function() { 102 showAddCreditCardOverlay_: function() {
100 var title = localStrings.getString('addCreditCardTitle'); 103 var title = localStrings.getString('addCreditCardTitle');
101 AutoFillEditCreditCardOverlay.setTitle(title); 104 AutoFillEditCreditCardOverlay.setTitle(title);
102 AutoFillEditCreditCardOverlay.clearInputFields(); 105 AutoFillEditCreditCardOverlay.clearInputFields();
103 OptionsPage.showOverlay('autoFillEditCreditCardOverlay'); 106 OptionsPage.showOverlay('autoFillEditCreditCardOverlay');
104 }, 107 },
105 108
106 /** 109 /**
110 * Updates the data model for the address list with the values from
111 * |entries|.
112 * @param {Array} entries The list of addresses.
113 */
114 setAddressList_: function(entries) {
115 this.addressList_.dataModel = new ArrayDataModel(entries);
116 },
117
118 /**
119 * Updates the data model for the credit card list with the values from
120 * |entries|.
121 * @param {Array} entries The list of credit cards.
122 */
123 setCreditCardList_: function(entries) {
124 this.creditCardList_.dataModel = new ArrayDataModel(entries);
125 },
126
127 /**
128 * Removes the AutoFill profile represented by |guid|.
129 * @param {String} guid The GUID of the profile to remove.
130 * @private
131 */
132 removeAutoFillProfile_: function(guid) {
133 chrome.send('removeAutoFillProfile', [guid]);
134 },
135
136 /**
137 * Requests profile data for the profile represented by |guid| from the
138 * PersonalDataManager. Once the data is loaded, the AutoFillOptionsHandler
139 * calls showEdit[Address,CreditCard]Overlay(), depending on the type of the
140 * profile.
141 * @param {String} guid The GUID of the profile to edit.
142 * @private
143 */
144 loadProfileEditor_: function(guid) {
145 chrome.send('loadProfileEditor', [guid]);
146 },
147
148 /**
149 * Shows the 'Edit address' overlay, using the data in |address| to fill the
150 * input fields. |address| is a list with one item, an associative array
151 * that contains the address data.
152 * @private
153 */
154 showEditAddressOverlay_: function(address) {
155 var title = localStrings.getString('editAddressTitle');
156 AutoFillEditAddressOverlay.setTitle(title);
157 AutoFillEditAddressOverlay.loadAddress(address[0]);
158 OptionsPage.showOverlay('autoFillEditAddressOverlay');
159 },
160
161 /**
107 * Shows the 'Edit credit card' overlay, using the data in |credit_card| to 162 * Shows the 'Edit credit card' overlay, using the data in |credit_card| to
108 * fill the input fields. |address| is a list with one item, an associative 163 * fill the input fields. |address| is a list with one item, an associative
109 * array that contains the credit card data. 164 * array that contains the credit card data.
110 * @private 165 * @private
111 */ 166 */
112 showEditCreditCardOverlay_: function(creditCard) { 167 showEditCreditCardOverlay_: function(creditCard) {
113 var title = localStrings.getString('editCreditCardTitle'); 168 var title = localStrings.getString('editCreditCardTitle');
114 AutoFillEditCreditCardOverlay.setTitle(title); 169 AutoFillEditCreditCardOverlay.setTitle(title);
115 AutoFillEditCreditCardOverlay.loadCreditCard(creditCard[0]); 170 AutoFillEditCreditCardOverlay.loadCreditCard(creditCard[0]);
116 OptionsPage.showOverlay('autoFillEditCreditCardOverlay'); 171 OptionsPage.showOverlay('autoFillEditCreditCardOverlay');
117 }, 172 },
118
119 /**
120 * Resets the address list. This method leaves the header and horizontal
121 * rule unchanged.
122 * @private
123 */
124 resetAddresses_: function() {
125 var profiles = $('profile-list');
126 for (var i = 0; i < this.numAddresses; ++i)
127 profiles.remove(addressOffset);
128 this.numAddresses = 0;
129 },
130
131 /**
132 * Resets the credit card list. This method leaves the header and horizontal
133 * rule unchanged.
134 * @private
135 */
136 resetCreditCards_: function() {
137 var profiles = $('profile-list');
138 var offset = this.numAddresses + addressOffset + creditCardOffset;
139 for (var i = 0; i < this.numCreditCards; ++i)
140 profiles.remove(offset);
141 this.numCreditCards = 0;
142 },
143
144 /**
145 * Updates the address list with the given entries.
146 * @private
147 * @param {Array} address List of addresses.
148 */
149 updateAddresses_: function(addresses) {
150 this.resetAddresses_();
151 var profileList = $('profile-list');
152 var blankAddress = profileList.options[addressOffset];
153 this.numAddresses = addresses.length;
154 this.addressGUIDs = new Array(this.numAddresses);
155 for (var i = 0; i < this.numAddresses; i++) {
156 var address = addresses[i];
157 var option = new Option(address['label']);
158 this.addressGUIDs[i] = address['guid'];
159 profileList.add(option, blankAddress);
160 }
161
162 this.updateButtonState_();
163 },
164
165 /**
166 * Updates the credit card list with the given entries.
167 * @private
168 * @param {Array} creditCards List of credit cards.
169 */
170 updateCreditCards_: function(creditCards) {
171 this.resetCreditCards_();
172 var profileList = $('profile-list');
173 this.numCreditCards = creditCards.length;
174 this.creditCardGUIDs = new Array(this.numCreditCards);
175 for (var i = 0; i < this.numCreditCards; i++) {
176 var creditCard = creditCards[i];
177 var option = new Option(creditCard['label']);
178 this.creditCardGUIDs[i] = creditCard['guid'];
179 profileList.add(option, null);
180 }
181
182 this.updateButtonState_();
183 },
184
185 /**
186 * Sets the enabled state of the AutoFill Add Address and Credit Card
187 * buttons on the current state of the |autoFillEnabled| checkbox.
188 * Sets the enabled state of the AutoFill Edit and Remove buttons based on
189 * the current selection in the profile list.
190 * @private
191 */
192 updateButtonState_: function() {
193 var disabled = !$('autoFillEnabled').checked;
194 $('add-address-button').disabled = disabled;
195 $('add-credit-card-button').disabled = disabled;
196
197 disabled = disabled || ($('profile-list').selectedIndex == -1);
198 $('autofill-remove-button').disabled = disabled;
199 $('autofill-edit-button').disabled = disabled;
200 },
201
202 /**
203 * Calls into the browser to load either an address or a credit card,
204 * depending on the selected index. The browser calls back into either
205 * editAddress() or editCreditCard() which show their respective editors.
206 * @private
207 */
208 editProfile_: function() {
209 var idx = $('profile-list').selectedIndex;
210 if ((profileIndex = this.getAddressIndex_(idx)) != -1) {
211 chrome.send('editAddress', [this.addressGUIDs[profileIndex]]);
212 } else if ((profileIndex = this.getCreditCardIndex_(idx)) != -1) {
213 chrome.send('editCreditCard', [this.creditCardGUIDs[profileIndex]]);
214 }
215 },
216
217 /**
218 * Removes the currently selected profile, whether it's an address or a
219 * credit card.
220 * @private
221 */
222 removeProfile_: function() {
223 var idx = $('profile-list').selectedIndex;
224 if ((profileIndex = this.getAddressIndex_(idx)) != -1)
225 chrome.send('removeAddress', [this.addressGUIDs[profileIndex]]);
226 else if ((profileIndex = this.getCreditCardIndex_(idx)) != -1)
227 chrome.send('removeCreditCard', [this.creditCardGUIDs[profileIndex]]);
228 },
229
230 /**
231 * Returns the index into the address list based on |index|, the index into
232 * the select control. Returns -1 if this is not an address index.
233 * @private
234 */
235 getAddressIndex_: function(index) {
236 index -= addressOffset;
237 if (index >= 0 && index < this.numAddresses)
238 return index;
239
240 return -1;
241 },
242
243 /**
244 * Returns the index into the credit card list based on |index|, the index
245 * into the select control. Returns -1 if this is not a credit card index.
246 * @private
247 */
248 getCreditCardIndex_: function(index) {
249 index -= addressOffset + this.numAddresses + creditCardOffset;
250 if (index >= 0 && index < this.numCreditCards)
251 return index;
252
253 return -1;
254 },
255
256 /**
257 * Returns true if |index| points to a credit card profile.
258 * @private
259 */
260 profileIndexIsCreditCard_: function(index) {
261 index -= addressOffset + this.numAddresses + creditCardOffset;
262 return (index >= 0 && index < this.numCreditCards);
263 }
264 }; 173 };
265 174
266 AutoFillOptions.updateAddresses = function(addresses) { 175 AutoFillOptions.setAddressList = function(entries) {
267 AutoFillOptions.getInstance().updateAddresses_(addresses); 176 AutoFillOptions.getInstance().setAddressList_(entries);
177 };
178
179 AutoFillOptions.setCreditCardList = function(entries) {
180 AutoFillOptions.getInstance().setCreditCardList_(entries);
181 };
182
183 AutoFillOptions.removeAutoFillProfile = function(guid) {
184 AutoFillOptions.getInstance().removeAutoFillProfile_(guid);
185 };
186
187 AutoFillOptions.loadProfileEditor = function(guid) {
188 AutoFillOptions.getInstance().loadProfileEditor_(guid);
268 }; 189 };
269 190
270 AutoFillOptions.editAddress = function(address) { 191 AutoFillOptions.editAddress = function(address) {
271 AutoFillOptions.getInstance().showEditAddressOverlay_(address); 192 AutoFillOptions.getInstance().showEditAddressOverlay_(address);
272 }; 193 };
273 194
274 AutoFillOptions.updateCreditCards = function(creditCards) {
275 AutoFillOptions.getInstance().updateCreditCards_(creditCards);
276 };
277
278 AutoFillOptions.editCreditCard = function(creditCard) { 195 AutoFillOptions.editCreditCard = function(creditCard) {
279 AutoFillOptions.getInstance().showEditCreditCardOverlay_(creditCard); 196 AutoFillOptions.getInstance().showEditCreditCardOverlay_(creditCard);
280 }; 197 };
281 198
282 // Export 199 // Export
283 return { 200 return {
284 AutoFillOptions: AutoFillOptions 201 AutoFillOptions: AutoFillOptions
285 }; 202 };
286 203
287 }); 204 });
288 205
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698