aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js372
1 files changed, 0 insertions, 372 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js b/contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js
deleted file mode 100644
index dfd86a5..0000000
--- a/contexts/data/lib/closure-library/closure/goog/ui/containerrenderer.js
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright 2008 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 Base class for container renderers.
- *
- * @author attila@google.com (Attila Bodis)
- */
-
-goog.provide('goog.ui.ContainerRenderer');
-
-goog.require('goog.array');
-goog.require('goog.dom');
-goog.require('goog.dom.a11y');
-goog.require('goog.dom.classes');
-goog.require('goog.string');
-goog.require('goog.style');
-goog.require('goog.ui.Separator');
-goog.require('goog.ui.registry');
-goog.require('goog.userAgent');
-
-
-
-/**
- * Default renderer for {@link goog.ui.Container}. Can be used as-is, but
- * subclasses of Container will probably want to use renderers specifically
- * tailored for them by extending this class.
- * @constructor
- */
-goog.ui.ContainerRenderer = function() {
-};
-goog.addSingletonGetter(goog.ui.ContainerRenderer);
-
-
-/**
- * Constructs a new renderer and sets the CSS class that the renderer will use
- * as the base CSS class to apply to all elements rendered by that renderer.
- * An example to use this function using a menu is:
- *
- * <pre>
- * var myCustomRenderer = goog.ui.ContainerRenderer.getCustomRenderer(
- * goog.ui.MenuRenderer, 'my-special-menu');
- * var newMenu = new goog.ui.Menu(opt_domHelper, myCustomRenderer);
- * </pre>
- *
- * Your styles for the menu can now be:
- * <pre>
- * .my-special-menu { }
- * </pre>
- *
- * <em>instead</em> of
- * <pre>
- * .CSS_MY_SPECIAL_MENU .goog-menu { }
- * </pre>
- *
- * You would want to use this functionality when you want an instance of a
- * component to have specific styles different than the other components of the
- * same type in your application. This avoids using descendant selectors to
- * apply the specific styles to this component.
- *
- * @param {Function} ctor The constructor of the renderer you want to create.
- * @param {string} cssClassName The name of the CSS class for this renderer.
- * @return {goog.ui.ContainerRenderer} An instance of the desired renderer with
- * its getCssClass() method overridden to return the supplied custom CSS
- * class name.
- */
-goog.ui.ContainerRenderer.getCustomRenderer = function(ctor, cssClassName) {
- var renderer = new ctor();
-
- /**
- * Returns the CSS class to be applied to the root element of components
- * rendered using this renderer.
- * @return {string} Renderer-specific CSS class.
- */
- renderer.getCssClass = function() {
- return cssClassName;
- };
-
- return renderer;
-};
-
-
-/**
- * Default CSS class to be applied to the root element of containers rendered
- * by this renderer.
- * @type {string}
- */
-goog.ui.ContainerRenderer.CSS_CLASS = goog.getCssName('goog-container');
-
-
-/**
- * Returns the ARIA role to be applied to the container.
- * See http://wiki/Main/ARIA for more info.
- * @return {undefined|string} ARIA role.
- */
-goog.ui.ContainerRenderer.prototype.getAriaRole = function() {
- // By default, the ARIA role is unspecified.
- return undefined;
-};
-
-
-/**
- * Enables or disables the tab index of the element. Only elements with a
- * valid tab index can receive focus.
- * @param {Element} element Element whose tab index is to be changed.
- * @param {boolean} enable Whether to add or remove the element's tab index.
- */
-goog.ui.ContainerRenderer.prototype.enableTabIndex = function(element, enable) {
- if (element) {
- element.tabIndex = enable ? 0 : -1;
- }
-};
-
-
-/**
- * Creates and returns the container's root element. The default
- * simply creates a DIV and applies the renderer's own CSS class name to it.
- * To be overridden in subclasses.
- * @param {goog.ui.Container} container Container to render.
- * @return {Element} Root element for the container.
- */
-goog.ui.ContainerRenderer.prototype.createDom = function(container) {
- return container.getDomHelper().createDom('div',
- this.getClassNames(container).join(' '));
-};
-
-
-/**
- * Returns the DOM element into which child components are to be rendered,
- * or null if the container hasn't been rendered yet.
- * @param {Element} element Root element of the container whose content element
- * is to be returned.
- * @return {Element} Element to contain child elements (null if none).
- */
-goog.ui.ContainerRenderer.prototype.getContentElement = function(element) {
- return element;
-};
-
-
-/**
- * Default implementation of {@code canDecorate}; returns true if the element
- * is a DIV, false otherwise.
- * @param {Element} element Element to decorate.
- * @return {boolean} Whether the renderer can decorate the element.
- */
-goog.ui.ContainerRenderer.prototype.canDecorate = function(element) {
- return element.tagName == 'DIV';
-};
-
-
-/**
- * Default implementation of {@code decorate} for {@link goog.ui.Container}s.
- * Decorates the element with the container, and attempts to decorate its child
- * elements. Returns the decorated element.
- * @param {goog.ui.Container} container Container to decorate the element.
- * @param {Element} element Element to decorate.
- * @return {Element} Decorated element.
- */
-goog.ui.ContainerRenderer.prototype.decorate = function(container, element) {
- // Set the container's ID to the decorated element's DOM ID, if any.
- if (element.id) {
- container.setId(element.id);
- }
-
- // Configure the container's state based on the CSS class names it has.
- var baseClass = this.getCssClass();
- var hasBaseClass = false;
- var classNames = goog.dom.classes.get(element);
- if (classNames) {
- goog.array.forEach(classNames, function(className) {
- if (className == baseClass) {
- hasBaseClass = true;
- } else if (className) {
- this.setStateFromClassName(container, className, baseClass);
- }
- }, this);
- }
-
- if (!hasBaseClass) {
- // Make sure the container's root element has the renderer's own CSS class.
- goog.dom.classes.add(element, baseClass);
- }
-
- // Decorate the element's children, if applicable. This should happen after
- // the container's own state has been initialized, since how children are
- // decorated may depend on the state of the container.
- this.decorateChildren(container, this.getContentElement(element));
-
- return element;
-};
-
-
-/**
- * Sets the container's state based on the given CSS class name, encountered
- * during decoration. CSS class names that don't represent container states
- * are ignored. Considered protected; subclasses should override this method
- * to support more states and CSS class names.
- * @param {goog.ui.Container} container Container to update.
- * @param {string} className CSS class name.
- * @param {string} baseClass Base class name used as the root of state-specific
- * class names (typically the renderer's own class name).
- * @protected
- */
-goog.ui.ContainerRenderer.prototype.setStateFromClassName = function(container,
- className, baseClass) {
- if (className == goog.getCssName(baseClass, 'disabled')) {
- container.setEnabled(false);
- } else if (className == goog.getCssName(baseClass, 'horizontal')) {
- container.setOrientation(goog.ui.Container.Orientation.HORIZONTAL);
- } else if (className == goog.getCssName(baseClass, 'vertical')) {
- container.setOrientation(goog.ui.Container.Orientation.VERTICAL);
- }
-};
-
-
-/**
- * Takes a container and an element that may contain child elements, decorates
- * the child elements, and adds the corresponding components to the container
- * as child components. Any non-element child nodes (e.g. empty text nodes
- * introduced by line breaks in the HTML source) are removed from the element.
- * @param {goog.ui.Container} container Container whose children are to be
- * discovered.
- * @param {Element} element Element whose children are to be decorated.
- * @param {Element=} opt_firstChild the first child to be decorated.
- * @suppress {visibility} setElementInternal
- */
-goog.ui.ContainerRenderer.prototype.decorateChildren = function(container,
- element, opt_firstChild) {
- if (element) {
- var node = opt_firstChild || element.firstChild, next;
- // Tag soup HTML may result in a DOM where siblings have different parents.
- while (node && node.parentNode == element) {
- // Get the next sibling here, since the node may be replaced or removed.
- next = node.nextSibling;
- if (node.nodeType == goog.dom.NodeType.ELEMENT) {
- // Decorate element node.
- var child = this.getDecoratorForChild(/** @type {Element} */(node));
- if (child) {
- // addChild() may need to look at the element.
- child.setElementInternal(/** @type {Element} */(node));
- // If the container is disabled, mark the child disabled too. See
- // bug 1263729. Note that this must precede the call to addChild().
- if (!container.isEnabled()) {
- child.setEnabled(false);
- }
- container.addChild(child);
- child.decorate(/** @type {Element} */(node));
- }
- } else if (!node.nodeValue || goog.string.trim(node.nodeValue) == '') {
- // Remove empty text node, otherwise madness ensues (e.g. controls that
- // use goog-inline-block will flicker and shift on hover on Gecko).
- element.removeChild(node);
- }
- node = next;
- }
- }
-};
-
-
-/**
- * Inspects the element, and creates an instance of {@link goog.ui.Control} or
- * an appropriate subclass best suited to decorate it. Returns the control (or
- * null if no suitable class was found). This default implementation uses the
- * element's CSS class to find the appropriate control class to instantiate.
- * May be overridden in subclasses.
- * @param {Element} element Element to decorate.
- * @return {goog.ui.Control?} A new control suitable to decorate the element
- * (null if none).
- */
-goog.ui.ContainerRenderer.prototype.getDecoratorForChild = function(element) {
- return (/** @type {goog.ui.Control} */
- goog.ui.registry.getDecorator(element));
-};
-
-
-/**
- * Initializes the container's DOM when the container enters the document.
- * Called from {@link goog.ui.Container#enterDocument}.
- * @param {goog.ui.Container} container Container whose DOM is to be initialized
- * as it enters the document.
- */
-goog.ui.ContainerRenderer.prototype.initializeDom = function(container) {
- var elem = container.getElement();
-
- // Make sure the container's element isn't selectable. On Gecko, recursively
- // marking each child element unselectable is expensive and unnecessary, so
- // only mark the root element unselectable.
- goog.style.setUnselectable(elem, true, goog.userAgent.GECKO);
-
- // IE doesn't support outline:none, so we have to use the hideFocus property.
- if (goog.userAgent.IE) {
- elem.hideFocus = true;
- }
-
- // Set the ARIA role.
- var ariaRole = this.getAriaRole();
- if (ariaRole) {
- goog.dom.a11y.setRole(elem, ariaRole);
- }
-};
-
-
-/**
- * Returns the element within the container's DOM that should receive keyboard
- * focus (null if none). The default implementation returns the container's
- * root element.
- * @param {goog.ui.Container} container Container whose key event target is
- * to be returned.
- * @return {Element} Key event target (null if none).
- */
-goog.ui.ContainerRenderer.prototype.getKeyEventTarget = function(container) {
- return container.getElement();
-};
-
-
-/**
- * Returns the CSS class to be applied to the root element of containers
- * rendered using this renderer.
- * @return {string} Renderer-specific CSS class.
- */
-goog.ui.ContainerRenderer.prototype.getCssClass = function() {
- return goog.ui.ContainerRenderer.CSS_CLASS;
-};
-
-
-/**
- * Returns all CSS class names applicable to the given container, based on its
- * state. The array of class names returned includes the renderer's own CSS
- * class, followed by a CSS class indicating the container's orientation,
- * followed by any state-specific CSS classes.
- * @param {goog.ui.Container} container Container whose CSS classes are to be
- * returned.
- * @return {Array.<string>} Array of CSS class names applicable to the
- * container.
- */
-goog.ui.ContainerRenderer.prototype.getClassNames = function(container) {
- var baseClass = this.getCssClass();
- var isHorizontal =
- container.getOrientation() == goog.ui.Container.Orientation.HORIZONTAL;
- var classNames = [
- baseClass,
- (isHorizontal ?
- goog.getCssName(baseClass, 'horizontal') :
- goog.getCssName(baseClass, 'vertical'))
- ];
- if (!container.isEnabled()) {
- classNames.push(goog.getCssName(baseClass, 'disabled'));
- }
- return classNames;
-};
-
-
-/**
- * Returns the default orientation of containers rendered or decorated by this
- * renderer. The base class implementation returns {@code VERTICAL}.
- * @return {goog.ui.Container.Orientation} Default orientation for containers
- * created or decorated by this renderer.
- */
-goog.ui.ContainerRenderer.prototype.getDefaultOrientation = function() {
- return goog.ui.Container.Orientation.VERTICAL;
-};