| Index: chrome/browser/resources/options2/chromeos/internet_detail_ip_address_field.js
|
| diff --git a/chrome/browser/resources/options2/chromeos/internet_detail_ip_address_field.js b/chrome/browser/resources/options2/chromeos/internet_detail_ip_address_field.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5155ecdaa48e90dc16fabd34d095771f0f59a2fe
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/options2/chromeos/internet_detail_ip_address_field.js
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2012 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.internet', function() {
|
| + /** @const */ var EditableTextField = options.EditableTextField;
|
| +
|
| + /**
|
| + * The regular expression that matches an IP address. String to match against
|
| + * should have all whitespace stripped already.
|
| + * @const
|
| + * @type {RegExp}
|
| + */
|
| + var singleIp_ = /^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$/;
|
| +
|
| + /**
|
| + * Creates a new field specifically for entering IP addresses.
|
| + * @constructor
|
| + */
|
| + function IPAddressField() {
|
| + var el = cr.doc.createElement('div');
|
| + IPAddressField.decorate(el);
|
| + return el;
|
| + }
|
| +
|
| + /**
|
| + * Decorates an element as a inline-editable list item. Note that this is
|
| + * a subclass of IPAddressField.
|
| + * @param {!HTMLElement} el The element to decorate.
|
| + */
|
| + IPAddressField.decorate = function(el) {
|
| + el.__proto__ = IPAddressField.prototype;
|
| + el.decorate();
|
| + };
|
| +
|
| + IPAddressField.prototype = {
|
| + __proto__: EditableTextField.prototype,
|
| +
|
| + /** @override */
|
| + decorate: function() {
|
| + EditableTextField.prototype.decorate.call(this);
|
| + },
|
| +
|
| + /**
|
| + * Indicates whether or not empty values are allowed.
|
| + * @type {boolean}
|
| + */
|
| + get allowEmpty() {
|
| + return this.hasAttribute('allow-empty');
|
| + },
|
| +
|
| + /** @override */
|
| + get currentInputIsValid() {
|
| + if (!this.editField.value && this.allowEmpty)
|
| + return true;
|
| +
|
| + // Make sure it's only got numbers and ".", there are the correct
|
| + // count of them, and they are all within the correct range.
|
| + var fieldValue = this.editField.value.replace(/\s/g, '');
|
| + var matches = singleIp_.exec(fieldValue);
|
| + var rangeCorrect = true;
|
| + if (matches != null) {
|
| + for (var i = 1; i < matches.length; ++i) {
|
| + var value = parseInt(matches[i], 10);
|
| + if (value < 0 || value > 255) {
|
| + rangeCorrect = false;
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + return this.editField.validity.valid && matches != null &&
|
| + rangeCorrect && matches.length == 5;
|
| + },
|
| +
|
| + /** @override */
|
| + get hasBeenEdited() {
|
| + return this.editField.value != this.model.value;
|
| + },
|
| +
|
| + /**
|
| + * Overrides superclass to mutate the input during a successful commit. For
|
| + * the purposes of entering IP addresses, this just means stripping off
|
| + * whitespace and leading zeros from each of the octets so that they conform
|
| + * to the normal format for IP addresses.
|
| + * @override
|
| + * @param {String} value Input IP address to be mutated.
|
| + * @return {String} mutated IP address.
|
| + */
|
| + mutateInput: function(value) {
|
| + if (!value)
|
| + return value;
|
| +
|
| + var fieldValue = value.replace(/\s/g, '');
|
| + var matches = singleIp_.exec(fieldValue);
|
| + var result = [];
|
| +
|
| + // If we got this far, matches shouldn't be null, but make sure.
|
| + if (matches != null) {
|
| + // starting at one because the first match element contains the entire
|
| + // match, and we don't care about that.
|
| + for (var i = 1; i < matches.length; ++i)
|
| + result.push(parseInt(matches[i], 10));
|
| + }
|
| + return result.join('.');
|
| + },
|
| + };
|
| +
|
| + return {
|
| + IPAddressField: IPAddressField,
|
| + };
|
| +});
|
|
|