OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 cr.define('options.autofillOptions', function() { | 5 cr.define('options.autofillOptions', function() { |
6 /** @const */ var DeletableItem = options.DeletableItem; | 6 /** @const */ var DeletableItem = options.DeletableItem; |
7 /** @const */ var DeletableItemList = options.DeletableItemList; | 7 /** @const */ var DeletableItemList = options.DeletableItemList; |
8 /** @const */ var InlineEditableItem = options.InlineEditableItem; | 8 /** @const */ var InlineEditableItem = options.InlineEditableItem; |
9 /** @const */ var InlineEditableItemList = options.InlineEditableItemList; | 9 /** @const */ var InlineEditableItemList = options.InlineEditableItemList; |
10 | 10 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 return; | 203 return; |
204 } | 204 } |
205 | 205 |
206 var entries = this.list.dataModel.slice(); | 206 var entries = this.list.dataModel.slice(); |
207 if (this.valueIsNonEmpty_(value) && | 207 if (this.valueIsNonEmpty_(value) && |
208 !entries.some(this.valuesAreEqual_.bind(this, value))) { | 208 !entries.some(this.valuesAreEqual_.bind(this, value))) { |
209 // Update with new value. | 209 // Update with new value. |
210 if (this.isPlaceholder) { | 210 if (this.isPlaceholder) { |
211 // It is important that updateIndex is done before validateAndSave. | 211 // It is important that updateIndex is done before validateAndSave. |
212 // Otherwise we can not be sure about AddRow index. | 212 // Otherwise we can not be sure about AddRow index. |
213 this.list.dataModel.updateIndex(i); | 213 this.list.ignoreChangeEvents(function() { |
| 214 this.list.dataModel.updateIndex(i); |
| 215 }.bind(this)); |
214 this.list.validateAndSave(i, 0, value); | 216 this.list.validateAndSave(i, 0, value); |
215 } else { | 217 } else { |
216 this.list.validateAndSave(i, 1, value); | 218 this.list.validateAndSave(i, 1, value); |
217 } | 219 } |
218 } else { | 220 } else { |
219 // Reject empty values and duplicates. | 221 // Reject empty values and duplicates. |
220 if (!this.isPlaceholder) | 222 if (!this.isPlaceholder) { |
221 this.list.dataModel.splice(i, 1); | 223 this.list.ignoreChangeEvents(function() { |
222 else | 224 this.list.dataModel.splice(i, 1); |
| 225 }.bind(this)); |
| 226 this.list.selectIndexWithoutFocusing(i); |
| 227 } else { |
223 this.clearValue_(); | 228 this.clearValue_(); |
| 229 } |
224 } | 230 } |
225 }, | 231 }, |
226 }; | 232 }; |
227 | 233 |
228 /** | 234 /** |
229 * Creates a new name value list item. | 235 * Creates a new name value list item. |
230 * @param {options.autofillOptions.AutofillNameValuesList} list The parent | 236 * @param {options.autofillOptions.AutofillNameValuesList} list The parent |
231 * list of this item. | 237 * list of this item. |
232 * @param {Array.<string>} entry An array of [first, middle, last] names. | 238 * @param {Array.<string>} entry An array of [first, middle, last] names. |
233 * @constructor | 239 * @constructor |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 }, | 443 }, |
438 | 444 |
439 /** | 445 /** |
440 * Called when a new list item should be validated; subclasses are | 446 * Called when a new list item should be validated; subclasses are |
441 * responsible for implementing if validation is required. | 447 * responsible for implementing if validation is required. |
442 * @param {number} index The index of the item that was inserted or changed. | 448 * @param {number} index The index of the item that was inserted or changed. |
443 * @param {number} remove The number items to remove. | 449 * @param {number} remove The number items to remove. |
444 * @param {string} value The value of the item to insert. | 450 * @param {string} value The value of the item to insert. |
445 */ | 451 */ |
446 validateAndSave: function(index, remove, value) { | 452 validateAndSave: function(index, remove, value) { |
447 this.dataModel.splice(index, remove, value); | 453 this.ignoreChangeEvents(function() { |
| 454 this.dataModel.splice(index, remove, value); |
| 455 }.bind(this)); |
| 456 this.selectIndexWithoutFocusing(index); |
448 }, | 457 }, |
449 }; | 458 }; |
450 | 459 |
451 /** | 460 /** |
452 * Create a new value list for phone number validation. | 461 * Create a new value list for phone number validation. |
453 * @constructor | 462 * @constructor |
454 * @extends {options.autofillOptions.AutofillValuesList} | 463 * @extends {options.autofillOptions.AutofillValuesList} |
455 */ | 464 */ |
456 var AutofillNameValuesList = cr.ui.define('list'); | 465 var AutofillNameValuesList = cr.ui.define('list'); |
457 | 466 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 * This should be called when a reply of chrome.send('validatePhoneNumbers') | 517 * This should be called when a reply of chrome.send('validatePhoneNumbers') |
509 * is received. | 518 * is received. |
510 */ | 519 */ |
511 didReceiveValidationResult: function() { | 520 didReceiveValidationResult: function() { |
512 this.validationRequests_--; | 521 this.validationRequests_--; |
513 assert(this.validationRequests_ >= 0); | 522 assert(this.validationRequests_ >= 0); |
514 if (this.validationRequests_ <= 0) { | 523 if (this.validationRequests_ <= 0) { |
515 while (this.validationPromiseResolvers_.length) { | 524 while (this.validationPromiseResolvers_.length) { |
516 this.validationPromiseResolvers_.pop()(); | 525 this.validationPromiseResolvers_.pop()(); |
517 } | 526 } |
518 // List has been repopulated. Focus the placeholder. | |
519 this.focusPlaceholder(); | |
520 } | 527 } |
521 }, | 528 }, |
522 | 529 |
523 /** | 530 /** |
524 * Returns a Promise which is fulfilled when all of validation requests are | 531 * Returns a Promise which is fulfilled when all of validation requests are |
525 * completed. | 532 * completed. |
526 * @return {!Promise} A promise. | 533 * @return {!Promise} A promise. |
527 */ | 534 */ |
528 doneValidating: function() { | 535 doneValidating: function() { |
529 if (this.validationRequests_ <= 0) | 536 if (this.validationRequests_ <= 0) |
(...skipping 10 matching lines...) Expand all Loading... |
540 CreditCardListItem: CreditCardListItem, | 547 CreditCardListItem: CreditCardListItem, |
541 ValuesListItem: ValuesListItem, | 548 ValuesListItem: ValuesListItem, |
542 NameListItem: NameListItem, | 549 NameListItem: NameListItem, |
543 AutofillAddressList: AutofillAddressList, | 550 AutofillAddressList: AutofillAddressList, |
544 AutofillCreditCardList: AutofillCreditCardList, | 551 AutofillCreditCardList: AutofillCreditCardList, |
545 AutofillValuesList: AutofillValuesList, | 552 AutofillValuesList: AutofillValuesList, |
546 AutofillNameValuesList: AutofillNameValuesList, | 553 AutofillNameValuesList: AutofillNameValuesList, |
547 AutofillPhoneValuesList: AutofillPhoneValuesList, | 554 AutofillPhoneValuesList: AutofillPhoneValuesList, |
548 }; | 555 }; |
549 }); | 556 }); |
OLD | NEW |