| Index: chrome/browser/resources/options2/chromeos/accounts_user_name_edit.js
|
| diff --git a/chrome/browser/resources/options2/chromeos/accounts_user_name_edit.js b/chrome/browser/resources/options2/chromeos/accounts_user_name_edit.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..025db255da7ce571f34e4723d6c14715bc992a91
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/options2/chromeos/accounts_user_name_edit.js
|
| @@ -0,0 +1,121 @@
|
| +// 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.accounts', function() {
|
| + const Event = cr.Event;
|
| +
|
| + // Email alias only, assuming it's a gmail address.
|
| + // e.g. 'john'
|
| + // {name: 'john', email: 'john@gmail.com'}
|
| + const format1String =
|
| + '^\\s*([\\w\\.!#\\$%&\'\\*\\+-\\/=\\?\\^`\\{\\|\\}~]+)\\s*$';
|
| + // Email address only.
|
| + // e.g. 'john@chromium.org'
|
| + // {name: 'john', email: 'john@chromium.org'}
|
| + const format2String =
|
| + '^\\s*([\\w\\.!#\\$%&\'\\*\\+-\\/=\\?\\^`\\{\\|\\}~]+)@' +
|
| + '([A-Za-z0-9\-]{2,63}\\..+)\\s*$';
|
| + // Full format.
|
| + // e.g. '"John Doe" <john@chromium.org>'
|
| + // {name: 'John doe', email: 'john@chromium.org'}
|
| + const format3String =
|
| + '^\\s*"{0,1}([^"]+)"{0,1}\\s*' +
|
| + '<([\\w\\.!#\\$%&\'\\*\\+-\\/=\\?\\^`\\{\\|\\}~]+@' +
|
| + '[A-Za-z0-9\-]{2,63}\\..+)>\\s*$';
|
| +
|
| + /**
|
| + * Creates a new user name edit element.
|
| + * @param {Object=} opt_propertyBag Optional properties.
|
| + * @constructor
|
| + * @extends {HTMLInputElement}
|
| + */
|
| + var UserNameEdit = cr.ui.define('input');
|
| +
|
| + UserNameEdit.prototype = {
|
| + __proto__: HTMLInputElement.prototype,
|
| +
|
| + /**
|
| + * Called when an element is decorated as a user name edit.
|
| + */
|
| + decorate: function() {
|
| + this.pattern = format1String + '|' + format2String + '|' +
|
| + format3String;
|
| +
|
| + this.onkeypress = this.handleKeyPress_.bind(this);
|
| + },
|
| +
|
| +
|
| + /**
|
| + * Parses given str for user info.
|
| + *
|
| + * Note that the email parsing is based on RFC 5322 and does not support
|
| + * IMA (Internationalized Email Address). We take only the following chars
|
| + * as valid for an email alias (aka local-part):
|
| + * - Letters: a–z, A–Z
|
| + * - Digits: 0-9
|
| + * - Characters: ! # $ % & ' * + - / = ? ^ _ ` { | } ~
|
| + * - Dot: . (Note that we did not cover the cases that dot should not
|
| + * appear as first or last character and should not appear two or
|
| + * more times in a row.)
|
| + *
|
| + * @param {string} str A string to parse.
|
| + * @return {{name: string, email: string}} User info parsed from the string.
|
| + */
|
| + parse: function(str) {
|
| + const format1 = new RegExp(format1String);
|
| + const format2 = new RegExp(format2String);
|
| + const format3 = new RegExp(format3String);
|
| +
|
| + var matches = format1.exec(str);
|
| + if (matches) {
|
| + return {
|
| + name: matches[1],
|
| + email: matches[1] + '@gmail.com'
|
| + };
|
| + }
|
| +
|
| + matches = format2.exec(str);
|
| + if (matches) {
|
| + return {
|
| + name: matches[1],
|
| + email: matches[1] + '@' + matches[2]
|
| + };
|
| + }
|
| +
|
| + matches = format3.exec(str);
|
| + if (matches) {
|
| + return {
|
| + name: matches[1],
|
| + email: matches[2]
|
| + };
|
| + }
|
| +
|
| + return null;
|
| + },
|
| +
|
| + /**
|
| + * Handler for key press event.
|
| + * @private
|
| + * @param {!Event} e The keypress event object.
|
| + */
|
| + handleKeyPress_: function(e) {
|
| + // Enter
|
| + if (e.keyCode == 13) {
|
| + var user = this.parse(this.value);
|
| + if (user) {
|
| + var e = new Event('add');
|
| + e.user = user;
|
| + this.dispatchEvent(e);
|
| + }
|
| +
|
| + this.select();
|
| + }
|
| + }
|
| + };
|
| +
|
| + return {
|
| + UserNameEdit: UserNameEdit
|
| + };
|
| +});
|
| +
|
|
|