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 3 // found in the LICENSE file. 4 5 cr.define('options', function() { 6 const OptionsPage = options.OptionsPage; 7 const ArrayDataModel = cr.ui.ArrayDataModel; 8 9 ///////////////////////////////////////////////////////////////////////////// 10 // AutofillOptions class: 11 12 /** 13 * Encapsulated handling of Autofill options page. 14 * @constructor 15 */ 16 function AutofillOptions() { 17 OptionsPage.call(this, 18 'autofill', 19 templateData.autofillOptionsPageTabTitle, 20 'autofill-options'); 21 } 22 23 cr.addSingletonGetter(AutofillOptions); 24 25 AutofillOptions.prototype = { 26 __proto__: OptionsPage.prototype, 27 28 /** 29 * The address list. 30 * @type {DeletableItemList} 31 * @private 32 */ 33 addressList_: null, 34 35 /** 36 * The credit card list. 37 * @type {DeletableItemList} 38 * @private 39 */ 40 creditCardList_: null, 41 42 initializePage: function() { 43 OptionsPage.prototype.initializePage.call(this); 44 45 this.createAddressList_(); 46 this.createCreditCardList_(); 47 48 var self = this; 49 $('autofill-add-address').onclick = function(event) { 50 self.showAddAddressOverlay_(); 51 }; 52 $('autofill-add-creditcard').onclick = function(event) { 53 self.showAddCreditCardOverlay_(); 54 }; 55 56 // TODO(jhawkins): What happens when Autofill is disabled whilst on the 57 // Autofill options page? 58 }, 59 60 /** 61 * Creates, decorates and initializes the address list. 62 * @private 63 */ 64 createAddressList_: function() { 65 this.addressList_ = $('address-list'); 66 options.autofillOptions.AutofillAddressList.decorate(this.addressList_); 67 this.addressList_.autoExpands = true; 68 }, 69 70 /** 71 * Creates, decorates and initializes the credit card list. 72 * @private 73 */ 74 createCreditCardList_: function() { 75 this.creditCardList_ = $('creditcard-list'); 76 options.autofillOptions.AutofillCreditCardList.decorate( 77 this.creditCardList_); 78 this.creditCardList_.autoExpands = true; 79 }, 80 81 /** 82 * Shows the 'Add address' overlay, specifically by loading the 83 * 'Edit address' overlay, emptying the input fields and modifying the 84 * overlay title. 85 * @private 86 */ 87 showAddAddressOverlay_: function() { 88 var title = localStrings.getString('addAddressTitle'); 89 AutofillEditAddressOverlay.setTitle(title); 90 AutofillEditAddressOverlay.clearInputFields(); 91 OptionsPage.navigateToPage('autofillEditAddress'); 92 }, 93 94 /** 95 * Shows the 'Add credit card' overlay, specifically by loading the 96 * 'Edit credit card' overlay, emptying the input fields and modifying the 97 * overlay title. 98 * @private 99 */ 100 showAddCreditCardOverlay_: function() { 101 var title = localStrings.getString('addCreditCardTitle'); 102 AutofillEditCreditCardOverlay.setTitle(title); 103 AutofillEditCreditCardOverlay.clearInputFields(); 104 OptionsPage.navigateToPage('autofillEditCreditCard'); 105 }, 106 107 /** 108 * Updates the data model for the address list with the values from 109 * |entries|. 110 * @param {Array} entries The list of addresses. 111 */ 112 setAddressList_: function(entries) { 113 this.addressList_.dataModel = new ArrayDataModel(entries); 114 }, 115 116 /** 117 * Updates the data model for the credit card list with the values from 118 * |entries|. 119 * @param {Array} entries The list of credit cards. 120 */ 121 setCreditCardList_: function(entries) { 122 this.creditCardList_.dataModel = new ArrayDataModel(entries); 123 }, 124 125 /** 126 * Removes the Autofill address represented by |guid|. 127 * @param {String} guid The GUID of the address to remove. 128 * @private 129 */ 130 removeAddress_: function(guid) { 131 chrome.send('removeAddress', [guid]); 132 }, 133 134 /** 135 * Removes the Autofill credit card represented by |guid|. 136 * @param {String} guid The GUID of the credit card to remove. 137 * @private 138 */ 139 removeCreditCard_: function(guid) { 140 chrome.send('removeCreditCard', [guid]); 141 }, 142 143 /** 144 * Requests profile data for the address represented by |guid| from the 145 * PersonalDataManager. Once the data is loaded, the AutofillOptionsHandler 146 * calls showEditAddressOverlay(). 147 * @param {String} guid The GUID of the address to edit. 148 * @private 149 */ 150 loadAddressEditor_: function(guid) { 151 chrome.send('loadAddressEditor', [guid]); 152 }, 153 154 /** 155 * Requests profile data for the credit card represented by |guid| from the 156 * PersonalDataManager. Once the data is loaded, the AutofillOptionsHandler 157 * calls showEditCreditCardOverlay(). 158 * @param {String} guid The GUID of the credit card to edit. 159 * @private 160 */ 161 loadCreditCardEditor_: function(guid) { 162 chrome.send('loadCreditCardEditor', [guid]); 163 }, 164 165 /** 166 * Shows the 'Edit address' overlay, using the data in |address| to fill the 167 * input fields. |address| is a list with one item, an associative array 168 * that contains the address data. 169 * @private 170 */ 171 showEditAddressOverlay_: function(address) { 172 var title = localStrings.getString('editAddressTitle'); 173 AutofillEditAddressOverlay.setTitle(title); 174 AutofillEditAddressOverlay.loadAddress(address); 175 OptionsPage.navigateToPage('autofillEditAddress'); 176 }, 177 178 /** 179 * Shows the 'Edit credit card' overlay, using the data in |credit_card| to 180 * fill the input fields. |address| is a list with one item, an associative 181 * array that contains the credit card data. 182 * @private 183 */ 184 showEditCreditCardOverlay_: function(creditCard) { 185 var title = localStrings.getString('editCreditCardTitle'); 186 AutofillEditCreditCardOverlay.setTitle(title); 187 AutofillEditCreditCardOverlay.loadCreditCard(creditCard); 188 OptionsPage.navigateToPage('autofillEditCreditCard'); 189 }, 190 }; 191 192 AutofillOptions.setAddressList = function(entries) { 193 AutofillOptions.getInstance().setAddressList_(entries); 194 }; 195 196 AutofillOptions.setCreditCardList = function(entries) { 197 AutofillOptions.getInstance().setCreditCardList_(entries); 198 }; 199 200 AutofillOptions.removeAddress = function(guid) { 201 AutofillOptions.getInstance().removeAddress_(guid); 202 }; 203 204 AutofillOptions.removeCreditCard = function(guid) { 205 AutofillOptions.getInstance().removeCreditCard_(guid); 206 }; 207 208 AutofillOptions.loadAddressEditor = function(guid) { 209 AutofillOptions.getInstance().loadAddressEditor_(guid); 210 }; 211 212 AutofillOptions.loadCreditCardEditor = function(guid) { 213 AutofillOptions.getInstance().loadCreditCardEditor_(guid); 214 }; 215 216 AutofillOptions.editAddress = function(address) { 217 AutofillOptions.getInstance().showEditAddressOverlay_(address); 218 }; 219 220 AutofillOptions.editCreditCard = function(creditCard) { 221 AutofillOptions.getInstance().showEditCreditCardOverlay_(creditCard); 222 }; 223 224 // Export 225 return { 226 AutofillOptions: AutofillOptions 227 }; 228 229 }); 230 231