| Index: chrome/browser/resources/options/autofill_options.js
|
| diff --git a/chrome/browser/resources/options/autofill_options.js b/chrome/browser/resources/options/autofill_options.js
|
| index 0c630fd06e2b5fbc39f7eca2c6c21689d7536737..a3637c44f87f9638dcf8bfeb03d81bee824304cc 100644
|
| --- a/chrome/browser/resources/options/autofill_options.js
|
| +++ b/chrome/browser/resources/options/autofill_options.js
|
| @@ -3,28 +3,18 @@
|
| // found in the LICENSE file.
|
|
|
| cr.define('options', function() {
|
| - var OptionsPage = options.OptionsPage;
|
| -
|
| - // The offset of the first profile in either the address list or the credit
|
| - // card list. Consists of the header and the horizontal rule.
|
| - const addressOffset = 2;
|
| - const creditCardOffset = 3;
|
| + const OptionsPage = options.OptionsPage;
|
| + const ArrayDataModel = cr.ui.ArrayDataModel;
|
| + const ListSingleSelectionModel = cr.ui.ListSingleSelectionModel;
|
|
|
| /////////////////////////////////////////////////////////////////////////////
|
| // AutoFillOptions class:
|
| - //
|
| - // TODO(jhawkins): Replace <select> with a DOMUI List.
|
|
|
| /**
|
| * Encapsulated handling of AutoFill options page.
|
| * @constructor
|
| */
|
| function AutoFillOptions() {
|
| - this.numAddresses = 0;
|
| - this.numCreditCards = 0;
|
| - this.activeNavTab = null;
|
| - this.addressGUIDs = null;
|
| - this.creditCardGUIDs = null;
|
| OptionsPage.call(this,
|
| 'autoFillOptions',
|
| templateData.autoFillOptionsTitle,
|
| @@ -36,32 +26,58 @@ cr.define('options', function() {
|
| AutoFillOptions.prototype = {
|
| __proto__: OptionsPage.prototype,
|
|
|
| + /**
|
| + * The address list.
|
| + * @type {DeletableItemList}
|
| + * @private
|
| + */
|
| + addressList_: null,
|
| +
|
| + /**
|
| + * The credit card list.
|
| + * @type {DeletableItemList}
|
| + * @private
|
| + */
|
| + creditCardList_: null,
|
| +
|
| initializePage: function() {
|
| OptionsPage.prototype.initializePage.call(this);
|
|
|
| + this.createAddressList_();
|
| + this.createCreditCardList_();
|
| +
|
| var self = this;
|
| - $('profile-list').onchange = function(event) {
|
| - self.updateButtonState_();
|
| - };
|
| - $('profile-list').addEventListener('dblclick', function(event) {
|
| - if ($('autoFillEnabled').checked)
|
| - self.editProfile_();
|
| - });
|
| - $('add-address-button').onclick = function(event) {
|
| + $('autofill-add-address').onclick = function(event) {
|
| self.showAddAddressOverlay_();
|
| };
|
| - $('add-credit-card-button').onclick = function(event) {
|
| + $('autofill-add-creditcard').onclick = function(event) {
|
| self.showAddCreditCardOverlay_();
|
| };
|
| - $('autofill-edit-button').onclick = function(event) {
|
| - self.editProfile_();
|
| - };
|
| - $('autofill-remove-button').onclick = function(event) {
|
| - self.removeProfile_();
|
| - };
|
|
|
| - Preferences.getInstance().addEventListener('autofill.enabled',
|
| - this.updateButtonState_.bind(this));
|
| + // TODO(jhawkins): What happens when AutoFill is disabled whilst on the
|
| + // AutoFill options page?
|
| + },
|
| +
|
| + /**
|
| + * Creates, decorates and initializes the address list.
|
| + * @private
|
| + */
|
| + createAddressList_: function() {
|
| + this.addressList_ = $('address-list');
|
| + options.autoFillOptions.AutoFillList.decorate(this.addressList_);
|
| + this.addressList_.selectionModel = new ListSingleSelectionModel;
|
| + this.addressList_.autoExpands = true;
|
| + },
|
| +
|
| + /**
|
| + * Creates, decorates and initializes the credit card list.
|
| + * @private
|
| + */
|
| + createCreditCardList_: function() {
|
| + this.creditCardList_ = $('creditcard-list');
|
| + options.autoFillOptions.AutoFillList.decorate(this.creditCardList_);
|
| + this.creditCardList_.selectionModel = new ListSingleSelectionModel;
|
| + this.creditCardList_.autoExpands = true;
|
| },
|
|
|
| /**
|
| @@ -78,19 +94,6 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| - * Shows the 'Edit address' overlay, using the data in |address| to fill the
|
| - * input fields. |address| is a list with one item, an associative array
|
| - * that contains the address data.
|
| - * @private
|
| - */
|
| - showEditAddressOverlay_: function(address) {
|
| - var title = localStrings.getString('editAddressTitle');
|
| - AutoFillEditAddressOverlay.setTitle(title);
|
| - AutoFillEditAddressOverlay.loadAddress(address[0]);
|
| - OptionsPage.showOverlay('autoFillEditAddressOverlay');
|
| - },
|
| -
|
| - /**
|
| * Shows the 'Add credit card' overlay, specifically by loading the
|
| * 'Edit credit card' overlay, emptying the input fields and modifying the
|
| * overlay title.
|
| @@ -104,177 +107,91 @@ cr.define('options', function() {
|
| },
|
|
|
| /**
|
| - * Shows the 'Edit credit card' overlay, using the data in |credit_card| to
|
| - * fill the input fields. |address| is a list with one item, an associative
|
| - * array that contains the credit card data.
|
| - * @private
|
| + * Updates the data model for the address list with the values from
|
| + * |entries|.
|
| + * @param {Array} entries The list of addresses.
|
| */
|
| - showEditCreditCardOverlay_: function(creditCard) {
|
| - var title = localStrings.getString('editCreditCardTitle');
|
| - AutoFillEditCreditCardOverlay.setTitle(title);
|
| - AutoFillEditCreditCardOverlay.loadCreditCard(creditCard[0]);
|
| - OptionsPage.showOverlay('autoFillEditCreditCardOverlay');
|
| + setAddressList_: function(entries) {
|
| + this.addressList_.dataModel = new ArrayDataModel(entries);
|
| },
|
|
|
| /**
|
| - * Resets the address list. This method leaves the header and horizontal
|
| - * rule unchanged.
|
| - * @private
|
| + * Updates the data model for the credit card list with the values from
|
| + * |entries|.
|
| + * @param {Array} entries The list of credit cards.
|
| */
|
| - resetAddresses_: function() {
|
| - var profiles = $('profile-list');
|
| - for (var i = 0; i < this.numAddresses; ++i)
|
| - profiles.remove(addressOffset);
|
| - this.numAddresses = 0;
|
| + setCreditCardList_: function(entries) {
|
| + this.creditCardList_.dataModel = new ArrayDataModel(entries);
|
| },
|
|
|
| /**
|
| - * Resets the credit card list. This method leaves the header and horizontal
|
| - * rule unchanged.
|
| + * Removes the AutoFill profile represented by |guid|.
|
| + * @param {String} guid The GUID of the profile to remove.
|
| * @private
|
| */
|
| - resetCreditCards_: function() {
|
| - var profiles = $('profile-list');
|
| - var offset = this.numAddresses + addressOffset + creditCardOffset;
|
| - for (var i = 0; i < this.numCreditCards; ++i)
|
| - profiles.remove(offset);
|
| - this.numCreditCards = 0;
|
| + removeAutoFillProfile_: function(guid) {
|
| + chrome.send('removeAutoFillProfile', [guid]);
|
| },
|
|
|
| /**
|
| - * Updates the address list with the given entries.
|
| + * Requests profile data for the profile represented by |guid| from the
|
| + * PersonalDataManager. Once the data is loaded, the AutoFillOptionsHandler
|
| + * calls showEdit[Address,CreditCard]Overlay(), depending on the type of the
|
| + * profile.
|
| + * @param {String} guid The GUID of the profile to edit.
|
| * @private
|
| - * @param {Array} address List of addresses.
|
| */
|
| - updateAddresses_: function(addresses) {
|
| - this.resetAddresses_();
|
| - var profileList = $('profile-list');
|
| - var blankAddress = profileList.options[addressOffset];
|
| - this.numAddresses = addresses.length;
|
| - this.addressGUIDs = new Array(this.numAddresses);
|
| - for (var i = 0; i < this.numAddresses; i++) {
|
| - var address = addresses[i];
|
| - var option = new Option(address['label']);
|
| - this.addressGUIDs[i] = address['guid'];
|
| - profileList.add(option, blankAddress);
|
| - }
|
| -
|
| - this.updateButtonState_();
|
| + loadProfileEditor_: function(guid) {
|
| + chrome.send('loadProfileEditor', [guid]);
|
| },
|
|
|
| /**
|
| - * Updates the credit card list with the given entries.
|
| - * @private
|
| - * @param {Array} creditCards List of credit cards.
|
| - */
|
| - updateCreditCards_: function(creditCards) {
|
| - this.resetCreditCards_();
|
| - var profileList = $('profile-list');
|
| - this.numCreditCards = creditCards.length;
|
| - this.creditCardGUIDs = new Array(this.numCreditCards);
|
| - for (var i = 0; i < this.numCreditCards; i++) {
|
| - var creditCard = creditCards[i];
|
| - var option = new Option(creditCard['label']);
|
| - this.creditCardGUIDs[i] = creditCard['guid'];
|
| - profileList.add(option, null);
|
| - }
|
| -
|
| - this.updateButtonState_();
|
| - },
|
| -
|
| - /**
|
| - * Sets the enabled state of the AutoFill Add Address and Credit Card
|
| - * buttons on the current state of the |autoFillEnabled| checkbox.
|
| - * Sets the enabled state of the AutoFill Edit and Remove buttons based on
|
| - * the current selection in the profile list.
|
| - * @private
|
| - */
|
| - updateButtonState_: function() {
|
| - var disabled = !$('autoFillEnabled').checked;
|
| - $('add-address-button').disabled = disabled;
|
| - $('add-credit-card-button').disabled = disabled;
|
| -
|
| - disabled = disabled || ($('profile-list').selectedIndex == -1);
|
| - $('autofill-remove-button').disabled = disabled;
|
| - $('autofill-edit-button').disabled = disabled;
|
| - },
|
| -
|
| - /**
|
| - * Calls into the browser to load either an address or a credit card,
|
| - * depending on the selected index. The browser calls back into either
|
| - * editAddress() or editCreditCard() which show their respective editors.
|
| - * @private
|
| - */
|
| - editProfile_: function() {
|
| - var idx = $('profile-list').selectedIndex;
|
| - if ((profileIndex = this.getAddressIndex_(idx)) != -1) {
|
| - chrome.send('editAddress', [this.addressGUIDs[profileIndex]]);
|
| - } else if ((profileIndex = this.getCreditCardIndex_(idx)) != -1) {
|
| - chrome.send('editCreditCard', [this.creditCardGUIDs[profileIndex]]);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Removes the currently selected profile, whether it's an address or a
|
| - * credit card.
|
| + * Shows the 'Edit address' overlay, using the data in |address| to fill the
|
| + * input fields. |address| is a list with one item, an associative array
|
| + * that contains the address data.
|
| * @private
|
| */
|
| - removeProfile_: function() {
|
| - var idx = $('profile-list').selectedIndex;
|
| - if ((profileIndex = this.getAddressIndex_(idx)) != -1)
|
| - chrome.send('removeAddress', [this.addressGUIDs[profileIndex]]);
|
| - else if ((profileIndex = this.getCreditCardIndex_(idx)) != -1)
|
| - chrome.send('removeCreditCard', [this.creditCardGUIDs[profileIndex]]);
|
| + showEditAddressOverlay_: function(address) {
|
| + var title = localStrings.getString('editAddressTitle');
|
| + AutoFillEditAddressOverlay.setTitle(title);
|
| + AutoFillEditAddressOverlay.loadAddress(address[0]);
|
| + OptionsPage.showOverlay('autoFillEditAddressOverlay');
|
| },
|
|
|
| /**
|
| - * Returns the index into the address list based on |index|, the index into
|
| - * the select control. Returns -1 if this is not an address index.
|
| + * Shows the 'Edit credit card' overlay, using the data in |credit_card| to
|
| + * fill the input fields. |address| is a list with one item, an associative
|
| + * array that contains the credit card data.
|
| * @private
|
| */
|
| - getAddressIndex_: function(index) {
|
| - index -= addressOffset;
|
| - if (index >= 0 && index < this.numAddresses)
|
| - return index;
|
| -
|
| - return -1;
|
| + showEditCreditCardOverlay_: function(creditCard) {
|
| + var title = localStrings.getString('editCreditCardTitle');
|
| + AutoFillEditCreditCardOverlay.setTitle(title);
|
| + AutoFillEditCreditCardOverlay.loadCreditCard(creditCard[0]);
|
| + OptionsPage.showOverlay('autoFillEditCreditCardOverlay');
|
| },
|
| + };
|
|
|
| - /**
|
| - * Returns the index into the credit card list based on |index|, the index
|
| - * into the select control. Returns -1 if this is not a credit card index.
|
| - * @private
|
| - */
|
| - getCreditCardIndex_: function(index) {
|
| - index -= addressOffset + this.numAddresses + creditCardOffset;
|
| - if (index >= 0 && index < this.numCreditCards)
|
| - return index;
|
| + AutoFillOptions.setAddressList = function(entries) {
|
| + AutoFillOptions.getInstance().setAddressList_(entries);
|
| + };
|
|
|
| - return -1;
|
| - },
|
| + AutoFillOptions.setCreditCardList = function(entries) {
|
| + AutoFillOptions.getInstance().setCreditCardList_(entries);
|
| + };
|
|
|
| - /**
|
| - * Returns true if |index| points to a credit card profile.
|
| - * @private
|
| - */
|
| - profileIndexIsCreditCard_: function(index) {
|
| - index -= addressOffset + this.numAddresses + creditCardOffset;
|
| - return (index >= 0 && index < this.numCreditCards);
|
| - }
|
| + AutoFillOptions.removeAutoFillProfile = function(guid) {
|
| + AutoFillOptions.getInstance().removeAutoFillProfile_(guid);
|
| };
|
|
|
| - AutoFillOptions.updateAddresses = function(addresses) {
|
| - AutoFillOptions.getInstance().updateAddresses_(addresses);
|
| + AutoFillOptions.loadProfileEditor = function(guid) {
|
| + AutoFillOptions.getInstance().loadProfileEditor_(guid);
|
| };
|
|
|
| AutoFillOptions.editAddress = function(address) {
|
| AutoFillOptions.getInstance().showEditAddressOverlay_(address);
|
| };
|
|
|
| - AutoFillOptions.updateCreditCards = function(creditCards) {
|
| - AutoFillOptions.getInstance().updateCreditCards_(creditCards);
|
| - };
|
| -
|
| AutoFillOptions.editCreditCard = function(creditCard) {
|
| AutoFillOptions.getInstance().showEditCreditCardOverlay_(creditCard);
|
| };
|
|
|