aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/labelinput.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/labelinput.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/ui/labelinput.js562
1 files changed, 0 insertions, 562 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/labelinput.js b/contexts/data/lib/closure-library/closure/goog/ui/labelinput.js
deleted file mode 100644
index d542aae..0000000
--- a/contexts/data/lib/closure-library/closure/goog/ui/labelinput.js
+++ /dev/null
@@ -1,562 +0,0 @@
-// Copyright 2006 The Closure Library Authors. 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.
-
-/**
- * @fileoverview This behavior is applied to a text input and it shows a text
- * message inside the element if the user hasn't entered any text.
- *
- * This uses the HTML5 placeholder attribute where it is supported.
- *
- * This is ported from http://go/labelinput.js
- *
- * Known issue: Safari does not allow you get to the window object from a
- * document. We need that to listen to the onload event. For now we hard code
- * the window to the current window.
- *
- * Known issue: We need to listen to the form submit event but we attach the
- * event only once (when created or when it is changed) so if you move the DOM
- * node to another form it will not be cleared correctly before submitting.
- *
- * Known issue: Where the placeholder attribute isn't supported, screen reader
- * users encounter trouble because the label is deleted upon focus. For now we
- * set the "aria-label" attribute.
- *
- * @author arv@google.com (Erik Arvidsson)
- * @see ../demos/labelinput.html
- */
-
-goog.provide('goog.ui.LabelInput');
-
-goog.require('goog.Timer');
-goog.require('goog.dom');
-goog.require('goog.dom.a11y');
-goog.require('goog.dom.a11y.State');
-goog.require('goog.dom.classes');
-goog.require('goog.events.EventHandler');
-goog.require('goog.events.EventType');
-goog.require('goog.ui.Component');
-goog.require('goog.userAgent');
-
-
-
-/**
- * This creates the label input object.
- * @param {string=} opt_label The text to show as the label.
- * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
- * @extends {goog.ui.Component}
- * @constructor
- */
-goog.ui.LabelInput = function(opt_label, opt_domHelper) {
- goog.ui.Component.call(this, opt_domHelper);
-
- /**
- * The text to show as the label.
- * @type {string}
- * @private
- */
- this.label_ = opt_label || '';
-};
-goog.inherits(goog.ui.LabelInput, goog.ui.Component);
-
-
-/**
- * Variable used to store the element value on keydown and restore it on
- * keypress. See {@link #handleEscapeKeys_}
- * @type {?string}
- * @private
- */
-goog.ui.LabelInput.prototype.ffKeyRestoreValue_ = null;
-
-
-/**
- * Indicates whether the browser supports the placeholder attribute, new in
- * HTML5.
- * @type {boolean}
- * @private
- */
-goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_ = (
- 'placeholder' in document.createElement('input'));
-
-
-/**
- * @type {goog.events.EventHandler}
- * @private
- */
-goog.ui.LabelInput.prototype.eventHandler_;
-
-
-/**
- * @type {boolean}
- * @private
- */
-goog.ui.LabelInput.prototype.hasFocus_ = false;
-
-
-/**
- * Creates the DOM nodes needed for the label input.
- * @override
- */
-goog.ui.LabelInput.prototype.createDom = function() {
- this.setElementInternal(
- this.getDomHelper().createDom('input', {'type': 'text'}));
-};
-
-
-/**
- * Decorates an existing HTML input element as a label input. If the element
- * has a "label" attribute then that will be used as the label property for the
- * label input object.
- * @param {Element} element The HTML input element to decorate.
- * @override
- */
-goog.ui.LabelInput.prototype.decorateInternal = function(element) {
- goog.ui.LabelInput.superClass_.decorateInternal.call(this, element);
- if (!this.label_) {
- this.label_ = element.getAttribute('label') || '';
- }
-
- // Check if we're attaching to an element that already has focus.
- if (goog.dom.getActiveElement(goog.dom.getOwnerDocument(element)) ==
- element) {
- this.hasFocus_ = true;
- goog.dom.classes.remove(this.getElement(), this.LABEL_CLASS_NAME);
- }
-
- if (goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- this.getElement().placeholder = this.label_;
- return;
- }
- goog.dom.a11y.setState(this.getElement(),
- goog.dom.a11y.State.LABEL,
- this.label_);
-};
-
-
-/** @override */
-goog.ui.LabelInput.prototype.enterDocument = function() {
- goog.ui.LabelInput.superClass_.enterDocument.call(this);
- this.attachEvents_();
- this.check_();
-
- // Make it easy for other closure widgets to play nicely with inputs using
- // LabelInput:
- this.getElement().labelInput_ = this;
-};
-
-
-/** @override */
-goog.ui.LabelInput.prototype.exitDocument = function() {
- goog.ui.LabelInput.superClass_.exitDocument.call(this);
- this.detachEvents_();
-
- this.getElement().labelInput_ = null;
-};
-
-
-/**
- * Attaches the events we need to listen to.
- * @private
- */
-goog.ui.LabelInput.prototype.attachEvents_ = function() {
- var eh = new goog.events.EventHandler(this);
- eh.listen(this.getElement(), goog.events.EventType.FOCUS, this.handleFocus_);
- eh.listen(this.getElement(), goog.events.EventType.BLUR, this.handleBlur_);
-
- if (goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- this.eventHandler_ = eh;
- return;
- }
-
- if (goog.userAgent.GECKO) {
- eh.listen(this.getElement(), [
- goog.events.EventType.KEYPRESS,
- goog.events.EventType.KEYDOWN,
- goog.events.EventType.KEYUP
- ], this.handleEscapeKeys_);
- }
-
- // IE sets defaultValue upon load so we need to test that as well.
- var d = goog.dom.getOwnerDocument(this.getElement());
- var w = goog.dom.getWindow(d);
- eh.listen(w, goog.events.EventType.LOAD, this.handleWindowLoad_);
-
- this.eventHandler_ = eh;
- this.attachEventsToForm_();
-};
-
-
-/**
- * Adds a listener to the form so that we can clear the input before it is
- * submitted.
- * @private
- */
-goog.ui.LabelInput.prototype.attachEventsToForm_ = function() {
- // in case we have are in a form we need to make sure the label is not
- // submitted
- if (!this.formAttached_ && this.eventHandler_ && this.getElement().form) {
- this.eventHandler_.listen(this.getElement().form,
- goog.events.EventType.SUBMIT,
- this.handleFormSubmit_);
- this.formAttached_ = true;
- }
-};
-
-
-/**
- * Stops listening to the events.
- * @private
- */
-goog.ui.LabelInput.prototype.detachEvents_ = function() {
- if (this.eventHandler_) {
- this.eventHandler_.dispose();
- this.eventHandler_ = null;
- }
-};
-
-
-/** @override */
-goog.ui.LabelInput.prototype.disposeInternal = function() {
- goog.ui.LabelInput.superClass_.disposeInternal.call(this);
- this.detachEvents_();
-};
-
-
-/**
- * The CSS class name to add to the input when the user has not entered a
- * value.
- */
-goog.ui.LabelInput.prototype.LABEL_CLASS_NAME =
- goog.getCssName('label-input-label');
-
-
-/**
- * Handler for the focus event.
- * @param {goog.events.Event} e The event object passed in to the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleFocus_ = function(e) {
- this.hasFocus_ = true;
- goog.dom.classes.remove(this.getElement(), this.LABEL_CLASS_NAME);
- if (goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- return;
- }
- if (!this.hasChanged() && !this.inFocusAndSelect_) {
- var me = this;
- var clearValue = function() {
- me.getElement().value = '';
- };
- if (goog.userAgent.IE) {
- goog.Timer.callOnce(clearValue, 10);
- } else {
- clearValue();
- }
- }
-};
-
-
-/**
- * Handler for the blur event.
- * @param {goog.events.Event} e The event object passed in to the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleBlur_ = function(e) {
- // We listen to the click event when we enter focusAndSelect mode so we can
- // fake an artificial focus when the user clicks on the input box. However,
- // if the user clicks on something else (and we lose focus), there is no
- // need for an artificial focus event.
- if (!goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- this.eventHandler_.unlisten(
- this.getElement(), goog.events.EventType.CLICK, this.handleFocus_);
- this.ffKeyRestoreValue_ = null;
- }
- this.hasFocus_ = false;
- this.check_();
-};
-
-
-/**
- * Handler for key events in Firefox.
- *
- * If the escape key is pressed when a text input has not been changed manually
- * since being focused, the text input will revert to its previous value.
- * Firefox does not honor preventDefault for the escape key. The revert happens
- * after the keydown event and before every keypress. We therefore store the
- * element's value on keydown and restore it on keypress. The restore value is
- * nullified on keyup so that {@link #getValue} returns the correct value.
- *
- * IE and Chrome don't have this problem, Opera blurs in the input box
- * completely in a way that preventDefault on the escape key has no effect.
- *
- * @param {goog.events.BrowserEvent} e The event object passed in to
- * the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleEscapeKeys_ = function(e) {
- if (e.keyCode == 27) {
- if (e.type == goog.events.EventType.KEYDOWN) {
- this.ffKeyRestoreValue_ = this.getElement().value;
- } else if (e.type == goog.events.EventType.KEYPRESS) {
- this.getElement().value = /** @type {string} */ (this.ffKeyRestoreValue_);
- } else if (e.type == goog.events.EventType.KEYUP) {
- this.ffKeyRestoreValue_ = null;
- }
- e.preventDefault();
- }
-};
-
-
-/**
- * Handler for the submit event of the form element.
- * @param {goog.events.Event} e The event object passed in to the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleFormSubmit_ = function(e) {
- if (!this.hasChanged()) {
- this.getElement().value = '';
- // allow form to be sent before restoring value
- goog.Timer.callOnce(this.handleAfterSubmit_, 10, this);
- }
-};
-
-
-/**
- * Restore value after submit
- * @param {Event} e The event object passed in to the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleAfterSubmit_ = function(e) {
- if (!this.hasChanged()) {
- this.getElement().value = this.label_;
- }
-};
-
-
-/**
- * Handler for the load event the window. This is needed because
- * IE sets defaultValue upon load.
- * @param {Event} e The event object passed in to the event handler.
- * @private
- */
-goog.ui.LabelInput.prototype.handleWindowLoad_ = function(e) {
- this.check_();
-};
-
-
-/**
- * @return {boolean} Whether the control is currently focused on.
- */
-goog.ui.LabelInput.prototype.hasFocus = function() {
- return this.hasFocus_;
-};
-
-
-/**
- * @return {boolean} Whether the value has changed been changed by the user.
- */
-goog.ui.LabelInput.prototype.hasChanged = function() {
- return !!this.getElement() && this.getElement().value != '' &&
- this.getElement().value != this.label_;
-};
-
-
-/**
- * Clears the value of the input element without resetting the default text.
- */
-goog.ui.LabelInput.prototype.clear = function() {
- this.getElement().value = '';
-
- // Reset ffKeyRestoreValue_ when non-null
- if (this.ffKeyRestoreValue_ != null) {
- this.ffKeyRestoreValue_ = '';
- }
-};
-
-
-/**
- * Clears the value of the input element and resets the default text.
- */
-goog.ui.LabelInput.prototype.reset = function() {
- if (this.hasChanged()) {
- this.clear();
- this.check_();
- }
-};
-
-
-/**
- * Use this to set the value through script to ensure that the label state is
- * up to date
- * @param {string} s The new value for the input.
- */
-goog.ui.LabelInput.prototype.setValue = function(s) {
- if (this.ffKeyRestoreValue_ != null) {
- this.ffKeyRestoreValue_ = s;
- }
- this.getElement().value = s;
- this.check_();
-};
-
-
-/**
- * Returns the current value of the text box, returning an empty string if the
- * search box is the default value
- * @return {string} The value of the input box.
- */
-goog.ui.LabelInput.prototype.getValue = function() {
- if (this.ffKeyRestoreValue_ != null) {
- // Fix the Firefox from incorrectly reporting the value to calling code
- // that attached the listener to keypress before the labelinput
- return this.ffKeyRestoreValue_;
- }
- return this.hasChanged() ? /** @type {string} */ (this.getElement().value) :
- '';
-};
-
-
-/**
- * Sets the label text.
- * @param {string} label The text to show as the label.
- */
-goog.ui.LabelInput.prototype.setLabel = function(label) {
- if (goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- this.label_ = label;
- if (this.getElement()) {
- this.getElement().placeholder = this.label_;
- }
- return;
- }
- if (this.getElement() && !this.hasChanged()) {
- this.getElement().value = '';
- }
- this.label_ = label;
- this.restoreLabel_();
- // Check if this has been called before DOM structure building
- if (this.getElement()) {
- goog.dom.a11y.setState(this.getElement(),
- goog.dom.a11y.State.LABEL,
- this.label_);
- }
-};
-
-
-/**
- * @return {string} The text to show as the label.
- */
-goog.ui.LabelInput.prototype.getLabel = function() {
- return this.label_;
-};
-
-
-/**
- * Checks the state of the input element
- * @private
- */
-goog.ui.LabelInput.prototype.check_ = function() {
- if (!goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- // if we haven't got a form yet try now
- this.attachEventsToForm_();
- goog.dom.a11y.setState(this.getElement(),
- goog.dom.a11y.State.LABEL,
- this.label_);
- } else if (this.getElement().placeholder != this.label_) {
- this.getElement().placeholder = this.label_;
- }
-
- if (!this.hasChanged()) {
- if (!this.inFocusAndSelect_ && !this.hasFocus_) {
- goog.dom.classes.add(this.getElement(), this.LABEL_CLASS_NAME);
- }
-
- // Allow browser to catchup with CSS changes before restoring the label.
- if (!goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- goog.Timer.callOnce(this.restoreLabel_, 10, this);
- }
- } else {
- goog.dom.classes.remove(this.getElement(), this.LABEL_CLASS_NAME);
- }
-};
-
-
-/**
- * This method focuses the input and if selects all the text. If the value
- * hasn't changed it will set the value to the label so that the label text is
- * selected.
- */
-goog.ui.LabelInput.prototype.focusAndSelect = function() {
- // We need to check whether the input has changed before focusing
- var hc = this.hasChanged();
- this.inFocusAndSelect_ = true;
- this.getElement().focus();
- if (!hc && !goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- this.getElement().value = this.label_;
- }
- this.getElement().select();
-
- // Since the object now has focus, we won't get a focus event when they
- // click in the input element. The expected behavior when you click on
- // the default text is that it goes away and allows you to type...so we
- // have to fire an artificial focus event when we're in focusAndSelect mode.
- if (goog.ui.LabelInput.SUPPORTS_PLACEHOLDER_) {
- return;
- }
- if (this.eventHandler_) {
- this.eventHandler_.listenOnce(
- this.getElement(), goog.events.EventType.CLICK, this.handleFocus_);
- }
-
- // set to false in timer to let IE trigger the focus event
- goog.Timer.callOnce(this.focusAndSelect_, 10, this);
-};
-
-
-/**
- * Enables/Disables the label input.
- * @param {boolean} enabled Whether to enable (true) or disable (false) the
- * label input.
- */
-goog.ui.LabelInput.prototype.setEnabled = function(enabled) {
- this.getElement().disabled = !enabled;
- goog.dom.classes.enable(this.getElement(),
- goog.getCssName(this.LABEL_CLASS_NAME, 'disabled'), !enabled);
-};
-
-
-/**
- * @return {boolean} True if the label input is enabled, false otherwise.
- */
-goog.ui.LabelInput.prototype.isEnabled = function() {
- return !this.getElement().disabled;
-};
-
-
-/**
- * @private
- */
-goog.ui.LabelInput.prototype.focusAndSelect_ = function() {
- this.inFocusAndSelect_ = false;
-};
-
-
-/**
- * Sets the value of the input element to label.
- * @private
- */
-goog.ui.LabelInput.prototype.restoreLabel_ = function() {
- // Check again in case something changed since this was scheduled.
- // We check that the element is still there since this is called by a timer
- // and the dispose method may have been called prior to this.
- if (this.getElement() && !this.hasChanged() && !this.hasFocus_) {
- this.getElement().value = this.label_;
- }
-};