1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be 321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file. 421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsencr.define('options.autofillOptions', function() { 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const DeletableItem = options.DeletableItem; 73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const DeletableItemList = options.DeletableItemList; 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const InlineEditableItem = options.InlineEditableItem; 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const InlineEditableItemList = options.InlineEditableItemList; 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** 123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * Creates a new address list item. 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen * @param {Array} entry An array of the form [guid, label]. 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen * @constructor 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen * @extends {options.DeletableItem} 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen */ 173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen function AddressListItem(entry) { 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen var el = cr.doc.createElement('div'); 1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen el.guid = entry[0]; 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen el.label = entry[1]; 213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.__proto__ = AddressListItem.prototype; 2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen el.decorate(); 2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return el; 2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen AddressListItem.prototype = { 2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen __proto__: DeletableItem.prototype, 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** @inheritDoc */ 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen decorate: function() { 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen DeletableItem.prototype.decorate.call(this); 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // The stored label. 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen var label = this.ownerDocument.createElement('div'); 3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen label.className = 'autofill-list-item'; 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen label.textContent = this.label; 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen this.contentElement.appendChild(label); 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }, 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }; 4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** 433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * Creates a new credit card list item. 443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @param {Array} entry An array of the form [guid, label, icon]. 453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @constructor 463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @extends {options.DeletableItem} 473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen */ 483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen function CreditCardListItem(entry) { 493f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen var el = cr.doc.createElement('div'); 503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.guid = entry[0]; 513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.label = entry[1]; 523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.icon = entry[2]; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.description = entry[3]; 543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.__proto__ = CreditCardListItem.prototype; 553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen el.decorate(); 563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen return el; 583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } 593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen CreditCardListItem.prototype = { 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen __proto__: DeletableItem.prototype, 623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** @inheritDoc */ 643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen decorate: function() { 653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen DeletableItem.prototype.decorate.call(this); 663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // The stored label. 683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen var label = this.ownerDocument.createElement('div'); 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen label.className = 'autofill-list-item'; 703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen label.textContent = this.label; 713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.contentElement.appendChild(label); 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // The credit card icon. 743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen var icon = this.ownerDocument.createElement('image'); 753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen icon.src = this.icon; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen icon.alt = this.description; 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.contentElement.appendChild(icon); 783f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }; 803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Creates a new value list item. 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {AutofillValuesList} list The parent list of this item. 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {String} entry A string value. 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @constructor 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @extends {options.InlineEditableItem} 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function ValuesListItem(list, entry) { 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var el = cr.doc.createElement('div'); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.list = list; 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.value = entry; 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.__proto__ = ValuesListItem.prototype; 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.decorate(); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return el; 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ValuesListItem.prototype = { 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen __proto__: InlineEditableItem.prototype, 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** @inheritDoc */ 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen decorate: function() { 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InlineEditableItem.prototype.decorate.call(this); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.isPlaceholder = !this.value; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The stored value. 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var cell = this.createEditableTextCell(this.value); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.contentElement.appendChild(cell); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.input = cell.querySelector('input'); 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.addEventListener('commitedit', this.onEditCommitted_); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Called when committing an edit. 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {Event} e The end event. 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @private 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen onEditCommitted_: function(e) { 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var i = this.list.items.indexOf(this); 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (this.input.value == this.list.dataModel.item(i)) 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (this.input.value && 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.indexOf(this.input.value) == -1) { 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Update with new value. 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.splice(i, 1, this.input.value); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Reject empty values and duplicates. 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.splice(i, 1); 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Creates a new list item for the Add New Item row, which doesn't represent 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * an actual entry in the values list but allows the user to add new 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * values. 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {AutofillValuesList} entry The parent list of this item. 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @constructor 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @extends {cr.ui.ValuesListItem} 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function ValuesAddRowListItem(list) { 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var el = cr.doc.createElement('div'); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.list = list; 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.__proto__ = ValuesAddRowListItem.prototype; 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen el.decorate(); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return el; 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ValuesAddRowListItem.prototype = { 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen __proto__: ValuesListItem.prototype, 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen decorate: function() { 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ValuesListItem.prototype.decorate.call(this); 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.input.value = ''; 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.input.placeholder = this.list.getAttribute('placeholder'); 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.deletable = false; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Called when committing an edit. Committing a non-empty value adds it 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * to the end of the values list, leaving this "AddRow" in place. 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {Event} e The end event. 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @extends {options.ValuesListItem} 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @private 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen onEditCommitted_: function(e) { 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var i = this.list.items.indexOf(this); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i < 0 || i >= this.list.dataModel.length) 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (this.input.value && 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.indexOf(this.input.value) == -1) { 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.splice(i, 0, this.input.value); 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.input.value = ''; 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.list.dataModel.updateIndex(i); 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 1863f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * Create a new address list. 18721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen * @constructor 18821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen * @extends {options.DeletableItemList} 18921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen */ 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var AutofillAddressList = cr.ui.define('list'); 19121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillAddressList.prototype = { 19321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen __proto__: DeletableItemList.prototype, 19421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 1953f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen decorate: function() { 1963f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen DeletableItemList.prototype.decorate.call(this); 1973f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 1983f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.addEventListener('blur', this.onBlur_); 1993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2013f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** 2023f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * When the list loses focus, unselect all items in the list. 2033f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @private 2043f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen */ 2053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen onBlur_: function() { 2063f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.selectionModel.unselectAll(); 2073f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2083f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2093f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** @inheritDoc */ 2103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen createItem: function(entry) { 2113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen return new AddressListItem(entry); 2123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** @inheritDoc */ 2153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen activateItemAtIndex: function(index) { 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillOptions.loadAddressEditor(this.dataModel.item(index)[0]); 2173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** @inheritDoc */ 2203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen deleteItemAtIndex: function(index) { 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillOptions.removeAddress(this.dataModel.item(index)[0]); 2223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }; 2243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** 2263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * Create a new credit card list. 2273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @constructor 2283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @extends {options.DeletableItemList} 2293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen */ 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var AutofillCreditCardList = cr.ui.define('list'); 2313f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillCreditCardList.prototype = { 2333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen __proto__: DeletableItemList.prototype, 2343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen decorate: function() { 2363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen DeletableItemList.prototype.decorate.call(this); 2373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.addEventListener('blur', this.onBlur_); 2393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 2413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen /** 2423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * When the list loses focus, unselect all items in the list. 2433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen * @private 2443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen */ 2453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen onBlur_: function() { 2463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen this.selectionModel.unselectAll(); 2473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen }, 2483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 24921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** @inheritDoc */ 25021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen createItem: function(entry) { 2513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen return new CreditCardListItem(entry); 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }, 25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** @inheritDoc */ 25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen activateItemAtIndex: function(index) { 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillOptions.loadCreditCardEditor(this.dataModel.item(index)[0]); 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** @inheritDoc */ 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen deleteItemAtIndex: function(index) { 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillOptions.removeCreditCard(this.dataModel.item(index)[0]); 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Create a new value list. 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @constructor 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @extends {options.InlineEditableItemList} 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var AutofillValuesList = cr.ui.define('list'); 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillValuesList.prototype = { 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen __proto__: InlineEditableItemList.prototype, 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen decorate: function() { 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InlineEditableItemList.prototype.decorate.call(this); 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var self = this; 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function handleBlur(e) { 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // When the blur event happens we do not know who is getting focus so we 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // delay this a bit until we know if the new focus node is outside the 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // list. 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var doc = e.target.ownerDocument; 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen window.setTimeout(function() { 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var activeElement = doc.activeElement; 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!self.contains(activeElement)) 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.selectionModel.unselectAll(); 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 50); 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.addEventListener('blur', handleBlur, true); 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** @inheritDoc */ 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen createItem: function(entry) { 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (entry != null) 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return new ValuesListItem(this, entry); 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen else 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return new ValuesAddRowListItem(this); 30021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }, 30121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 30221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen /** @inheritDoc */ 30321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen deleteItemAtIndex: function(index) { 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.dataModel.splice(index, 1); 30521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }, 30621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }; 30721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 30821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return { 3093f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen AddressListItem: AddressListItem, 3103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen CreditCardListItem: CreditCardListItem, 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ValuesListItem: ValuesListItem, 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ValuesAddRowListItem: ValuesAddRowListItem, 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillAddressList: AutofillAddressList, 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillCreditCardList: AutofillCreditCardList, 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillValuesList: AutofillValuesList, 31621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen }; 31721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}); 318