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

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

Issue 3140026: DOMUI: Implement the 'Remove...' button on the AutoFill page. (Closed)
Patch Set: DOMUI fixes. Created 10 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 | « chrome/browser/dom_ui/autofill_options_handler.cc ('k') | no next file » | 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) 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 var OptionsPage = options.OptionsPage;
7 7
8 // The offset of the first profile in either the address list or the credit 8 // The offset of the first profile in either the address list or the credit
9 // card list. Consists of the header and the horizontal rule. 9 // card list. Consists of the header and the horizontal rule.
10 const profileOffset = 2; 10 const addressOffset = 2;
11 const creditCardOffset = 3;
11 12
12 ///////////////////////////////////////////////////////////////////////////// 13 /////////////////////////////////////////////////////////////////////////////
13 // AutoFillOptions class: 14 // AutoFillOptions class:
14 // 15 //
15 // TODO(jhawkins): Replace <select> with a DOMUI List. 16 // TODO(jhawkins): Replace <select> with a DOMUI List.
16 17
17 /** 18 /**
18 * Encapsulated handling of AutoFill options page. 19 * Encapsulated handling of AutoFill options page.
19 * @constructor 20 * @constructor
20 */ 21 */
21 function AutoFillOptions() { 22 function AutoFillOptions() {
22 this.numAddresses = 0; 23 this.numAddresses = 0;
23 this.numCreditCards = 0; 24 this.numCreditCards = 0;
24 this.activeNavTab = null; 25 this.activeNavTab = null;
26 this.addressIDs = null;
27 this.creditCardIDs = null;
25 OptionsPage.call(this, 'autoFillOptions', 28 OptionsPage.call(this, 'autoFillOptions',
26 templateData.autoFillOptionsTitle, 29 templateData.autoFillOptionsTitle,
27 'autoFillOptionsPage'); 30 'autoFillOptionsPage');
28 } 31 }
29 32
30 cr.addSingletonGetter(AutoFillOptions); 33 cr.addSingletonGetter(AutoFillOptions);
31 34
32 AutoFillOptions.prototype = { 35 AutoFillOptions.prototype = {
33 __proto__: OptionsPage.prototype, 36 __proto__: OptionsPage.prototype,
34 37
35 initializePage: function() { 38 initializePage: function() {
36 OptionsPage.prototype.initializePage.call(this); 39 OptionsPage.prototype.initializePage.call(this);
37 40
38 var self = this; 41 var self = this;
39 $('profileList').onchange = function(event) { 42 $('profileList').onchange = function(event) {
40 self.updateButtonState_(); 43 self.updateButtonState_();
41 }; 44 };
42 $('addAddressButton').onclick = function(event) { 45 $('addAddressButton').onclick = function(event) {
43 self.showAddAddressOverlay_(); 46 self.showAddAddressOverlay_();
44 }; 47 };
45 $('addCreditCardButton').onclick = function(event) { 48 $('addCreditCardButton').onclick = function(event) {
46 self.showAddCreditCardOverlay_(); 49 self.showAddCreditCardOverlay_();
47 }; 50 };
51 $('autoFillRemoveButton').onclick = function(event) {
52 self.removeProfile_();
53 };
48 54
49 Preferences.getInstance().addEventListener('autofill.enabled', 55 Preferences.getInstance().addEventListener('autofill.enabled',
50 cr.bind(self.updateEnabledState_, self)); 56 cr.bind(self.updateEnabledState_, self));
51 }, 57 },
52 58
53 /** 59 /**
54 * Sets the enabled state of the button controls based on the current state 60 * Sets the enabled state of the button controls based on the current state
55 * of the |autoFillEnabled| checkbox. 61 * of the |autoFillEnabled| checkbox.
56 * @private 62 * @private
57 */ 63 */
58 updateEnabledState_: function() { 64 updateEnabledState_: function() {
59 var checkbox = $('autoFillEnabled'); 65 var disabled = !$('autoFillEnabled').checked;
60 $('addAddressButton').disabled = $('addCreditCardButton').disabled = 66 $('addAddressButton').disabled = disabled;
61 $('editButton').disabled = $('autoFillRemoveButton').disabled = 67 $('addCreditCardButton').disabled = disabled;
62 !checkbox.checked; 68 $('autoFillEditButton').disabled = disabled;
69 $('autoFillRemoveButton').disabled = disabled;
63 }, 70 },
64 71
65 /** 72 /**
66 * Shows the 'Add address' overlay, specifically by loading the 73 * Shows the 'Add address' overlay, specifically by loading the
67 * 'Edit address' overlay, emptying the input fields and modifying the 74 * 'Edit address' overlay, emptying the input fields and modifying the
68 * overlay title. 75 * overlay title.
69 * @private 76 * @private
70 */ 77 */
71 showAddAddressOverlay_: function() { 78 showAddAddressOverlay_: function() {
72 var title = localStrings.getString('addAddressTitle'); 79 var title = localStrings.getString('addAddressTitle');
(...skipping 16 matching lines...) Expand all
89 }, 96 },
90 97
91 /** 98 /**
92 * Resets the address list. This method leaves the header and horizontal 99 * Resets the address list. This method leaves the header and horizontal
93 * rule unchanged. 100 * rule unchanged.
94 * @private 101 * @private
95 */ 102 */
96 resetAddresses_: function() { 103 resetAddresses_: function() {
97 var profiles = $('profileList'); 104 var profiles = $('profileList');
98 for (var i = 0; i < this.numAddresses; ++i) 105 for (var i = 0; i < this.numAddresses; ++i)
99 profiles.remove(profileOffset); 106 profiles.remove(addressOffset);
107 this.numAddresses = 0;
100 }, 108 },
101 109
102 /** 110 /**
103 * Resets the credit card list. This method leaves the header and horizontal 111 * Resets the credit card list. This method leaves the header and horizontal
104 * rule unchanged. 112 * rule unchanged.
105 * @private 113 * @private
106 */ 114 */
107 resetCreditCards_: function() { 115 resetCreditCards_: function() {
108 var profiles = $('profileList'); 116 var profiles = $('profileList');
109 var offset = this.numAddresses + profileOffset; 117 var offset = this.numAddresses + addressOffset + creditCardOffset;
110 for (var i = 0; i < this.numCreditCards; ++i) 118 for (var i = 0; i < this.numCreditCards; ++i)
111 profiles.remove(offset); 119 profiles.remove(offset);
120 this.numCreditCards = 0;
112 }, 121 },
113 122
114 /** 123 /**
115 * Updates the address list with the given entries. 124 * Updates the address list with the given entries.
116 * @private 125 * @private
117 * @param {Array} address List of addresses. 126 * @param {Array} address List of addresses.
118 */ 127 */
119 updateAddresses_: function(addresses) { 128 updateAddresses_: function(addresses) {
120 this.resetAddresses_(); 129 this.resetAddresses_();
121 profileList = $('profileList'); 130 var profileList = $('profileList');
122 var blankAddress = 131 var blankAddress = profileList.options[addressOffset];
123 profileList.options[profileOffset + this.numAddresses];
124 this.numAddresses = addresses.length; 132 this.numAddresses = addresses.length;
133 this.addressIDs = new Array(this.numAddresses);
125 for (var i = 0; i < this.numAddresses; i++) { 134 for (var i = 0; i < this.numAddresses; i++) {
126 var address = addresses[i]; 135 var address = addresses[i];
127 var option = new Option(address['label']); 136 var option = new Option(address['label']);
137 this.addressIDs[i] = address['unique_id'];
128 profileList.add(option, blankAddress); 138 profileList.add(option, blankAddress);
129 } 139 }
130 140
131 this.updateButtonState_(); 141 this.updateButtonState_();
132 }, 142 },
133 143
134 /** 144 /**
135 * Updates the credit card list with the given entries. 145 * Updates the credit card list with the given entries.
136 * @private 146 * @private
137 * @param {Array} creditCards List of credit cards. 147 * @param {Array} creditCards List of credit cards.
138 */ 148 */
139 updateCreditCards_: function(creditCards) { 149 updateCreditCards_: function(creditCards) {
140 this.resetCreditCards_(); 150 this.resetCreditCards_();
141 profileList = $('profileList'); 151 var profileList = $('profileList');
142 this.numCreditCards = creditCards.length; 152 this.numCreditCards = creditCards.length;
153 this.creditCardIDs = new Array(this.numCreditCards);
143 for (var i = 0; i < this.numCreditCards; i++) { 154 for (var i = 0; i < this.numCreditCards; i++) {
144 var creditCard = creditCards[i]; 155 var creditCard = creditCards[i];
145 var option = new Option(creditCard['label']); 156 var option = new Option(creditCard['label']);
157 this.creditCardIDs[i] = creditCard['unique_id'];
146 profileList.add(option, null); 158 profileList.add(option, null);
147 } 159 }
148 160
149 this.updateButtonState_(); 161 this.updateButtonState_();
150 }, 162 },
151 163
152 /** 164 /**
153 * Sets the enabled state of the AutoFill Edit and Remove buttons based on 165 * Sets the enabled state of the AutoFill Edit and Remove buttons based on
154 * the current selection in the profile list. 166 * the current selection in the profile list.
155 * @private 167 * @private
156 */ 168 */
157 updateButtonState_: function() { 169 updateButtonState_: function() {
158 $('autoFillRemoveButton').disabled = $('autoFillEditButton').disabled = 170 $('autoFillRemoveButton').disabled = $('autoFillEditButton').disabled =
159 ($('profileList').selectedIndex == -1); 171 ($('profileList').selectedIndex == -1);
160 }, 172 },
173
174 /**
175 * Removes the currently selected profile, whether it's an address or a
176 * credit card.
177 * @private
178 */
179 removeProfile_: function() {
180 var idx = $('profileList').selectedIndex;
181 if ((profileIndex = this.getAddressIndex_(idx)) != -1)
182 chrome.send('removeAddress', [String(this.addressIDs[profileIndex])]);
183 else if ((profileIndex = this.getCreditCardIndex_(idx)) != -1)
184 chrome.send('removeCreditCard',
185 [String(this.creditCardIDs[profileIndex])]);
186 },
187
188 /**
189 * Returns the index into the address list based on |index|, the index into
190 * the select control. Returns -1 if this is not an address index.
191 * @private
192 */
193 getAddressIndex_: function(index) {
194 index -= addressOffset;
195 if (index >= 0 && index < this.numAddresses)
196 return index;
197
198 return -1;
199 },
200
201 /**
202 * Returns the index into the credit card list based on |index|, the index
203 * into the select control. Returns -1 if this is not a credit card index.
204 * @private
205 */
206 getCreditCardIndex_: function(index) {
207 index -= addressOffset + this.numAddresses + creditCardOffset;
208 if (index >= 0 && index < this.numCreditCards)
209 return index;
210
211 return -1;
212 },
213
214 /**
215 * Returns true if |index| points to a credit card profile.
216 * @private
217 */
218 profileIndexIsCreditCard_: function(index) {
219 index -= addressOffset + this.numAddresses + creditCardOffset;
220 return (index >= 0 && index < this.numCreditCards);
221 }
161 }; 222 };
162 223
163 AutoFillOptions.updateAddresses = function(addresses) { 224 AutoFillOptions.updateAddresses = function(addresses) {
164 AutoFillOptions.getInstance().updateAddresses_(addresses); 225 AutoFillOptions.getInstance().updateAddresses_(addresses);
165 }; 226 };
166 227
167 AutoFillOptions.updateCreditCards = function(creditCards) { 228 AutoFillOptions.updateCreditCards = function(creditCards) {
168 AutoFillOptions.getInstance().updateCreditCards_(creditCards); 229 AutoFillOptions.getInstance().updateCreditCards_(creditCards);
169 }; 230 };
170 231
171 // Export 232 // Export
172 return { 233 return {
173 AutoFillOptions: AutoFillOptions 234 AutoFillOptions: AutoFillOptions
174 }; 235 };
175 236
176 }); 237 });
177 238
OLDNEW
« no previous file with comments | « chrome/browser/dom_ui/autofill_options_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698