Index: chrome/browser/resources/options2/autofill_edit_address_overlay.js |
diff --git a/chrome/browser/resources/options2/autofill_edit_address_overlay.js b/chrome/browser/resources/options2/autofill_edit_address_overlay.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f41fd8cf4262d22e94a88bc33955765bb9145616 |
--- /dev/null |
+++ b/chrome/browser/resources/options2/autofill_edit_address_overlay.js |
@@ -0,0 +1,325 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+cr.define('options', function() { |
+ const OptionsPage = options.OptionsPage; |
+ const ArrayDataModel = cr.ui.ArrayDataModel; |
+ |
+ // The GUID of the loaded address. |
+ var guid; |
+ |
+ /** |
+ * AutofillEditAddressOverlay class |
+ * Encapsulated handling of the 'Add Page' overlay page. |
+ * @class |
+ */ |
+ function AutofillEditAddressOverlay() { |
+ OptionsPage.call(this, 'autofillEditAddress', |
+ templateData.autofillEditAddressTitle, |
+ 'autofill-edit-address-overlay'); |
+ } |
+ |
+ cr.addSingletonGetter(AutofillEditAddressOverlay); |
+ |
+ AutofillEditAddressOverlay.prototype = { |
+ __proto__: OptionsPage.prototype, |
+ |
+ /** |
+ * Initializes the page. |
+ */ |
+ initializePage: function() { |
+ OptionsPage.prototype.initializePage.call(this); |
+ |
+ this.createMultiValueLists_(); |
+ |
+ var self = this; |
+ $('autofill-edit-address-cancel-button').onclick = function(event) { |
+ self.dismissOverlay_(); |
+ } |
+ $('autofill-edit-address-apply-button').onclick = function(event) { |
+ self.saveAddress_(); |
+ self.dismissOverlay_(); |
+ } |
+ |
+ self.guid = ''; |
+ self.populateCountryList_(); |
+ self.clearInputFields_(); |
+ self.connectInputEvents_(); |
+ }, |
+ |
+ /** |
+ * Creates, decorates and initializes the multi-value lists for full name, |
+ * phone, and email. |
+ * @private |
+ */ |
+ createMultiValueLists_: function() { |
+ var list = $('full-name-list'); |
+ options.autofillOptions.AutofillNameValuesList.decorate(list); |
+ list.autoExpands = true; |
+ |
+ list = $('phone-list'); |
+ options.autofillOptions.AutofillPhoneValuesList.decorate(list); |
+ list.autoExpands = true; |
+ |
+ list = $('email-list'); |
+ options.autofillOptions.AutofillValuesList.decorate(list); |
+ list.autoExpands = true; |
+ }, |
+ |
+ /** |
+ * Updates the data model for the list named |listName| with the values from |
+ * |entries|. |
+ * @param {String} listName The id of the list. |
+ * @param {Array} entries The list of items to be added to the list. |
+ */ |
+ setMultiValueList_: function(listName, entries) { |
+ // Add data entries. |
+ var list = $(listName); |
+ list.dataModel = new ArrayDataModel(entries); |
+ |
+ // Add special entry for adding new values. |
+ list.dataModel.splice(list.dataModel.length, 0, null); |
+ |
+ // Update the status of the 'OK' button. |
+ this.inputFieldChanged_(); |
+ |
+ var self = this; |
+ list.dataModel.addEventListener( |
+ 'splice', function(event) { self.inputFieldChanged_(); }); |
+ list.dataModel.addEventListener( |
+ 'change', function(event) { self.inputFieldChanged_(); }); |
+ }, |
+ |
+ /** |
+ * Updates the data model for the name list with the values from |entries|. |
+ * @param {Array} names The list of names to be added to the list. |
+ */ |
+ setNameList_: function(names) { |
+ // Add the given |names| as backing data for the list. |
+ var list = $('full-name-list'); |
+ list.dataModel = new ArrayDataModel(names); |
+ |
+ // Add special entry for adding new values. |
+ list.dataModel.splice(list.dataModel.length, 0, null); |
+ |
+ var self = this; |
+ list.dataModel.addEventListener( |
+ 'splice', function(event) { self.inputFieldChanged_(); }); |
+ list.dataModel.addEventListener( |
+ 'change', function(event) { self.inputFieldChanged_(); }); |
+ }, |
+ |
+ /** |
+ * Clears any uncommitted input, resets the stored GUID and dismisses the |
+ * overlay. |
+ * @private |
+ */ |
+ dismissOverlay_: function() { |
+ this.clearInputFields_(); |
+ this.guid = ''; |
+ OptionsPage.closeOverlay(); |
+ }, |
+ |
+ /** |
+ * Aggregates the values in the input fields into an array and sends the |
+ * array to the Autofill handler. |
+ * @private |
+ */ |
+ saveAddress_: function() { |
+ var address = new Array(); |
+ address[0] = this.guid; |
+ var list = $('full-name-list'); |
+ address[1] = list.dataModel.slice(0, list.dataModel.length - 1); |
+ address[2] = $('company-name').value; |
+ address[3] = $('addr-line-1').value; |
+ address[4] = $('addr-line-2').value; |
+ address[5] = $('city').value; |
+ address[6] = $('state').value; |
+ address[7] = $('postal-code').value; |
+ address[8] = $('country').value; |
+ list = $('phone-list'); |
+ address[9] = list.dataModel.slice(0, list.dataModel.length - 1); |
+ list = $('email-list'); |
+ address[10] = list.dataModel.slice(0, list.dataModel.length - 1); |
+ |
+ chrome.send('setAddress', address); |
+ }, |
+ |
+ /** |
+ * Connects each input field to the inputFieldChanged_() method that enables |
+ * or disables the 'Ok' button based on whether all the fields are empty or |
+ * not. |
+ * @private |
+ */ |
+ connectInputEvents_: function() { |
+ var self = this; |
+ $('company-name').oninput = $('addr-line-1').oninput = |
+ $('addr-line-2').oninput = $('city').oninput = $('state').oninput = |
+ $('postal-code').oninput = function(event) { |
+ self.inputFieldChanged_(); |
+ } |
+ |
+ $('country').onchange = function(event) { |
+ self.countryChanged_(); |
+ } |
+ }, |
+ |
+ /** |
+ * Checks the values of each of the input fields and disables the 'Ok' |
+ * button if all of the fields are empty. |
+ * @private |
+ */ |
+ inputFieldChanged_: function() { |
+ // Length of lists are tested for <= 1 due to the "add" placeholder item |
+ // in the list. |
+ var disabled = |
+ $('full-name-list').items.length <= 1 && |
+ !$('company-name').value && |
+ !$('addr-line-1').value && !$('addr-line-2').value && |
+ !$('city').value && !$('state').value && !$('postal-code').value && |
+ !$('country').value && $('phone-list').items.length <= 1 && |
+ $('email-list').items.length <= 1; |
+ $('autofill-edit-address-apply-button').disabled = disabled; |
+ }, |
+ |
+ /** |
+ * Updates the postal code and state field labels appropriately for the |
+ * selected country. |
+ * @private |
+ */ |
+ countryChanged_: function() { |
+ var countryCode = $('country').value; |
+ if (!countryCode) |
+ countryCode = templateData.defaultCountryCode; |
+ |
+ var details = templateData.autofillCountryData[countryCode]; |
+ var postal = $('postal-code-label'); |
+ postal.textContent = details['postalCodeLabel']; |
+ $('state-label').textContent = details['stateLabel']; |
+ |
+ // Also update the 'Ok' button as needed. |
+ this.inputFieldChanged_(); |
+ }, |
+ |
+ /** |
+ * Populates the country <select> list. |
+ * @private |
+ */ |
+ populateCountryList_: function() { |
+ var countryData = templateData.autofillCountryData; |
+ var defaultCountryCode = templateData.defaultCountryCode; |
+ |
+ // Build an array of the country names and their corresponding country |
+ // codes, so that we can sort and insert them in order. |
+ var countries = []; |
+ for (var countryCode in countryData) { |
+ var country = { |
+ countryCode: countryCode, |
+ name: countryData[countryCode]['name'] |
+ }; |
+ countries.push(country); |
+ } |
+ |
+ // Sort the countries in alphabetical order by name. |
+ countries = countries.sort(function(a, b) { |
+ return a.name < b.name ? -1 : 1; |
+ }); |
+ |
+ // Insert the empty and default countries at the beginning of the array. |
+ var emptyCountry = { |
+ countryCode: '', |
+ name: '' |
+ }; |
+ var defaultCountry = { |
+ countryCode: defaultCountryCode, |
+ name: countryData[defaultCountryCode]['name'] |
+ }; |
+ var separator = { |
+ countryCode: '', |
+ name: '---', |
+ disabled: true |
+ } |
+ countries.unshift(emptyCountry, defaultCountry, separator); |
+ |
+ // Add the countries to the country <select> list. |
+ var countryList = $('country'); |
+ for (var i = 0; i < countries.length; i++) { |
+ var country = new Option(countries[i].name, countries[i].countryCode); |
+ country.disabled = countries[i].disabled; |
+ countryList.appendChild(country) |
+ } |
+ }, |
+ |
+ /** |
+ * Clears the value of each input field. |
+ * @private |
+ */ |
+ clearInputFields_: function() { |
+ this.setNameList_([]); |
+ $('company-name').value = ''; |
+ $('addr-line-1').value = ''; |
+ $('addr-line-2').value = ''; |
+ $('city').value = ''; |
+ $('state').value = ''; |
+ $('postal-code').value = ''; |
+ $('country').value = ''; |
+ this.setMultiValueList_('phone-list', []); |
+ this.setMultiValueList_('email-list', []); |
+ |
+ this.countryChanged_(); |
+ }, |
+ |
+ /** |
+ * Loads the address data from |address|, sets the input fields based on |
+ * this data and stores the GUID of the address. |
+ * @private |
+ */ |
+ loadAddress_: function(address) { |
+ this.setInputFields_(address); |
+ this.inputFieldChanged_(); |
+ this.guid = address['guid']; |
+ }, |
+ |
+ /** |
+ * Sets the value of each input field according to |address| |
+ * @private |
+ */ |
+ setInputFields_: function(address) { |
+ this.setNameList_(address['fullName']); |
+ $('company-name').value = address['companyName']; |
+ $('addr-line-1').value = address['addrLine1']; |
+ $('addr-line-2').value = address['addrLine2']; |
+ $('city').value = address['city']; |
+ $('state').value = address['state']; |
+ $('postal-code').value = address['postalCode']; |
+ $('country').value = address['country']; |
+ this.setMultiValueList_('phone-list', address['phone']); |
+ this.setMultiValueList_('email-list', address['email']); |
+ |
+ this.countryChanged_(); |
+ }, |
+ }; |
+ |
+ AutofillEditAddressOverlay.clearInputFields = function() { |
+ AutofillEditAddressOverlay.getInstance().clearInputFields_(); |
+ }; |
+ |
+ AutofillEditAddressOverlay.loadAddress = function(address) { |
+ AutofillEditAddressOverlay.getInstance().loadAddress_(address); |
+ }; |
+ |
+ AutofillEditAddressOverlay.setTitle = function(title) { |
+ $('autofill-address-title').textContent = title; |
+ }; |
+ |
+ AutofillEditAddressOverlay.setValidatedPhoneNumbers = function(numbers) { |
+ AutofillEditAddressOverlay.getInstance().setMultiValueList_('phone-list', |
+ numbers); |
+ }; |
+ |
+ // Export |
+ return { |
+ AutofillEditAddressOverlay: AutofillEditAddressOverlay |
+ }; |
+}); |