google-nomulus/java/com/google/domain/registry/ui/js/forms.js
2016-03-01 17:59:16 -05:00

135 lines
4.3 KiB
JavaScript

// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('registry.forms');
goog.require('goog.array');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.dom.classlist');
goog.require('goog.dom.forms');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.events.KeyCodes');
goog.require('registry.util');
/**
* Sets the focus on a form field (if it exists).
* @param {Element|string} field Form field (or ID) to focus.
*/
registry.forms.focus = function(field) {
field = goog.dom.getElement(field);
if (!goog.isNull(field) && goog.dom.isFocusable(field)) {
goog.dom.forms.focusAndSelect(field);
}
};
/**
* Displays a form field error, or butters if no field is specified.
* @param {string} message Human-readable explanation of why this field is evil.
* @param {string=} opt_field Erroneous field name.
*/
registry.forms.displayError = function(message, opt_field) {
if (!goog.isDef(opt_field)) {
registry.util.butter(message);
return;
}
var input = goog.dom.getElement(opt_field) ||
goog.dom.getElement(opt_field + '[0]');
// XXX: Transitioning to use of form.eltId instead of DOM id. If DOM id
// lookup fails, then search forms for the named field.
if (goog.isDefAndNotNull(opt_field) && goog.isNull(input)) {
for (var fNdx in document.forms) {
var form = document.forms[fNdx];
if (form[opt_field]) {
input = form[opt_field];
break;
}
}
}
if (!goog.isNull(input)) {
goog.dom.classlist.add(input, goog.getCssName('kd-formerror'));
goog.dom.insertSiblingAfter(
goog.dom.createDom(goog.dom.TagName.DIV,
goog.getCssName('kd-errormessage'),
message),
input);
registry.forms.focus(input);
} else {
registry.util.butter(opt_field + ': ' + message);
}
};
/** Removes error markup from whois settings form. */
registry.forms.resetErrors = function() {
registry.util.unbutter();
goog.array.forEach(
goog.dom.getElementsByClass(goog.getCssName('kd-formerror')),
function(field) {
goog.dom.classlist.remove(field, goog.getCssName('kd-formerror'));
});
goog.array.forEach(
goog.dom.getElementsByClass(goog.getCssName('kd-errormessage')),
goog.dom.removeNode);
};
/**
* Adds enter key listeners to all form fields.
* @param {!Element} container Parent element containing INPUT fields.
* @param {function()} callback Called when enter is pressed in a field.
*/
registry.forms.listenFieldsOnEnter = function(container, callback) {
var handler = goog.partial(registry.forms.onFieldKeyUp_, callback);
goog.array.forEach(
goog.dom.getElementsByTagNameAndClass(
goog.dom.TagName.INPUT, undefined, container),
function(field) {
goog.events.listen(field, goog.events.EventType.KEYUP, handler);
});
};
/**
* Event handler that saves form when enter is pressed in a form field.
* @param {function()} callback Called when key pressed is ENTER.
* @param {!goog.events.KeyEvent} e Key event to handle.
* @return {boolean} Whether the event should be continued or cancelled.
* @private
*/
registry.forms.onFieldKeyUp_ = function(callback, e) {
if (e.keyCode == goog.events.KeyCodes.ENTER) {
callback();
return false;
}
return true;
};
/**
* Toggles disabled state of a button or form element.
* @param {!Element} element Form element to disable.
* @param {boolean} enabled Enables element if true, or else disables it.
*/
registry.forms.setEnabled = function(element, enabled) {
if (enabled) {
goog.dom.classlist.remove(element, goog.getCssName('disabled'));
} else {
goog.dom.classlist.add(element, goog.getCssName('disabled'));
element.blur();
}
};