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

Unified Diff: chrome/browser/resources/options2/autofill_edit_address_overlay.js

Issue 8895023: Options2: Pull the trigger. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DIAF. Created 9 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 side-by-side diff with in-line comments
Download patch
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
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698