aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js662
1 files changed, 0 insertions, 662 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js b/contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js
deleted file mode 100644
index 6d64573..0000000
--- a/contexts/data/lib/closure-library/closure/goog/ui/tree/treecontrol.js
+++ /dev/null
@@ -1,662 +0,0 @@
-// Copyright 2007 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 Definition of the goog.ui.tree.TreeControl class, which
- * provides a way to view a hierarchical set of data.
- *
- * @author arv@google.com (Erik Arvidsson)
- * @author eae@google.com (Emil A Eklund)
- * @author jonp@google.com (Jon Perlow)
- * @author annams@google.com (Srinivas Annam)
- *
- * This is a based on the webfx tree control. It since been updated to add
- * typeahead support, as well as accessibility support using ARIA framework.
- *
- * @see ../../demos/tree/demo.html
- */
-
-goog.provide('goog.ui.tree.TreeControl');
-
-goog.require('goog.debug.Logger');
-goog.require('goog.dom.a11y');
-goog.require('goog.dom.classes');
-goog.require('goog.events.EventType');
-goog.require('goog.events.FocusHandler');
-goog.require('goog.events.KeyHandler');
-goog.require('goog.events.KeyHandler.EventType');
-goog.require('goog.ui.tree.BaseNode');
-goog.require('goog.ui.tree.TreeNode');
-goog.require('goog.ui.tree.TypeAhead');
-goog.require('goog.userAgent');
-
-
-
-/**
- * This creates a TreeControl object. A tree control provides a way to
- * view a hierarchical set of data.
- * @param {string} html The HTML content of the node label.
- * @param {Object=} opt_config The configuration for the tree. See
- * goog.ui.tree.TreeControl.DefaultConfig. If not specified, a default config
- * will be used.
- * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper.
- * @constructor
- * @extends {goog.ui.tree.BaseNode}
- */
-goog.ui.tree.TreeControl = function(html, opt_config, opt_domHelper) {
- goog.ui.tree.BaseNode.call(this, html, opt_config, opt_domHelper);
-
- // The root is open and selected by default.
- this.setExpandedInternal(true);
- this.setSelectedInternal(true);
-
- this.selectedItem_ = this;
-
- /**
- * Used for typeahead support.
- * @type {!goog.ui.tree.TypeAhead}
- * @private
- */
- this.typeAhead_ = new goog.ui.tree.TypeAhead();
-
- if (goog.userAgent.IE) {
- /** @preserveTry */
- try {
- // works since IE6SP1
- document.execCommand('BackgroundImageCache', false, true);
- } catch (e) {
- this.logger_.warning('Failed to enable background image cache');
- }
- }
-};
-goog.inherits(goog.ui.tree.TreeControl, goog.ui.tree.BaseNode);
-
-
-/**
- * The object handling keyboard events.
- * @type {goog.events.KeyHandler}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.keyHandler_ = null;
-
-
-/**
- * The object handling focus events.
- * @type {goog.events.FocusHandler}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.focusHandler_ = null;
-
-
-/**
- * Logger
- * @type {goog.debug.Logger}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.logger_ =
- goog.debug.Logger.getLogger('goog.ui.tree.TreeControl');
-
-
-/**
- * Whether the tree is focused.
- * @type {boolean}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.focused_ = false;
-
-
-/**
- * Child node that currently has focus.
- * @type {goog.ui.tree.BaseNode}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.focusedNode_ = null;
-
-
-/**
- * Whether to show lines.
- * @type {boolean}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.showLines_ = true;
-
-
-/**
- * Whether to show expanded lines.
- * @type {boolean}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.showExpandIcons_ = true;
-
-
-/**
- * Whether to show the root node.
- * @type {boolean}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.showRootNode_ = true;
-
-
-/**
- * Whether to show the root lines.
- * @type {boolean}
- * @private
- */
-goog.ui.tree.TreeControl.prototype.showRootLines_ = true;
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getTree = function() {
- return this;
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getDepth = function() {
- return 0;
-};
-
-
-/**
- * Expands the parent chain of this node so that it is visible.
- * @override
- */
-goog.ui.tree.TreeControl.prototype.reveal = function() {
- // always expanded by default
- // needs to be overriden so that we don't try to reveal our parent
- // which is a generic component
-};
-
-
-/**
- * Handles focus on the tree.
- * @param {!goog.events.BrowserEvent} e The browser event.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.handleFocus_ = function(e) {
- this.focused_ = true;
- goog.dom.classes.add(this.getElement(), 'focused');
-
- if (this.selectedItem_) {
- this.selectedItem_.select();
- }
-};
-
-
-/**
- * Handles blur on the tree.
- * @param {!goog.events.BrowserEvent} e The browser event.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.handleBlur_ = function(e) {
- this.focused_ = false;
- goog.dom.classes.remove(this.getElement(), 'focused');
-};
-
-
-/**
- * @return {boolean} Whether the tree has keyboard focus.
- */
-goog.ui.tree.TreeControl.prototype.hasFocus = function() {
- return this.focused_;
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getExpanded = function() {
- return !this.showRootNode_ ||
- goog.ui.tree.TreeControl.superClass_.getExpanded.call(this);
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.setExpanded = function(expanded) {
- if (!this.showRootNode_) {
- this.setExpandedInternal(expanded);
- } else {
- goog.ui.tree.TreeControl.superClass_.setExpanded.call(this, expanded);
- }
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getExpandIconHtml = function() {
- // no expand icon for root element
- return '';
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getIconElement = function() {
- var el = this.getRowElement();
- return el ? /** @type {Element} */ (el.firstChild) : null;
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getExpandIconElement = function() {
- // no expand icon for root element
- return null;
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.updateExpandIcon = function() {
- // no expand icon
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.getRowClassName = function() {
- return goog.ui.tree.TreeControl.superClass_.getRowClassName.call(this) +
- (this.showRootNode_ ? '' : ' ' + this.getConfig().cssHideRoot);
-};
-
-
-/**
- * Returns the source for the icon.
- * @return {string} Src for the icon.
- * @override
- */
-goog.ui.tree.TreeControl.prototype.getCalculatedIconClass = function() {
- var expanded = this.getExpanded();
- if (expanded && this.expandedIconClass_) {
- return this.expandedIconClass_;
- }
- if (!expanded && this.iconClass_) {
- return this.iconClass_;
- }
-
- // fall back on default icons
- var config = this.getConfig();
- if (expanded && config.cssExpandedRootIcon) {
- return config.cssTreeIcon + ' ' + config.cssExpandedRootIcon;
- } else if (!expanded && config.cssCollapsedRootIcon) {
- return config.cssTreeIcon + ' ' + config.cssCollapsedRootIcon;
- }
- return '';
-};
-
-
-/**
- * Sets the selected item.
- * @param {goog.ui.tree.BaseNode} node The item to select.
- */
-goog.ui.tree.TreeControl.prototype.setSelectedItem = function(node) {
- if (this.selectedItem_ == node) {
- return;
- }
-
- var hadFocus = false;
- if (this.selectedItem_) {
- hadFocus = this.selectedItem_ == this.focusedNode_;
- this.selectedItem_.setSelectedInternal(false);
- }
-
- this.selectedItem_ = node;
-
- if (node) {
- node.setSelectedInternal(true);
- if (hadFocus) {
- node.select();
- }
- }
-
- this.dispatchEvent(goog.events.EventType.CHANGE);
-};
-
-
-/**
- * Returns the selected item.
- * @return {goog.ui.tree.BaseNode} The currently selected item.
- */
-goog.ui.tree.TreeControl.prototype.getSelectedItem = function() {
- return this.selectedItem_;
-};
-
-
-/**
- * Sets whether to show lines.
- * @param {boolean} b Whether to show lines.
- */
-goog.ui.tree.TreeControl.prototype.setShowLines = function(b) {
- if (this.showLines_ != b) {
- this.showLines_ = b;
- if (this.isInDocument()) {
- this.updateLinesAndExpandIcons_();
- }
- }
-};
-
-
-/**
- * @return {boolean} Whether to show lines.
- */
-goog.ui.tree.TreeControl.prototype.getShowLines = function() {
- return this.showLines_;
-};
-
-
-/**
- * Updates the lines after the tree has been drawn.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.updateLinesAndExpandIcons_ = function() {
- var tree = this;
- var showLines = tree.getShowLines();
- var showRootLines = tree.getShowRootLines();
- // Recursively walk through all nodes and update the class names of the
- // expand icon and the children element.
- function updateShowLines(node) {
- var childrenEl = node.getChildrenElement();
- if (childrenEl) {
- var hideLines = !showLines || tree == node.getParent() && !showRootLines;
- var childClass = hideLines ? node.getConfig().cssChildrenNoLines :
- node.getConfig().cssChildren;
- childrenEl.className = childClass;
-
- var expandIconEl = node.getExpandIconElement();
- if (expandIconEl) {
- expandIconEl.className = node.getExpandIconClass();
- }
- }
- node.forEachChild(updateShowLines);
- }
- updateShowLines(this);
-};
-
-
-/**
- * Sets whether to show root lines.
- * @param {boolean} b Whether to show root lines.
- */
-goog.ui.tree.TreeControl.prototype.setShowRootLines = function(b) {
- if (this.showRootLines_ != b) {
- this.showRootLines_ = b;
- if (this.isInDocument()) {
- this.updateLinesAndExpandIcons_();
- }
- }
-};
-
-
-/**
- * @return {boolean} Whether to show root lines.
- */
-goog.ui.tree.TreeControl.prototype.getShowRootLines = function() {
- return this.showRootLines_;
-};
-
-
-/**
- * Sets whether to show expand icons.
- * @param {boolean} b Whether to show expand icons.
- */
-goog.ui.tree.TreeControl.prototype.setShowExpandIcons = function(b) {
- if (this.showExpandIcons_ != b) {
- this.showExpandIcons_ = b;
- if (this.isInDocument()) {
- this.updateLinesAndExpandIcons_();
- }
- }
-};
-
-
-/**
- * @return {boolean} Whether to show expand icons.
- */
-goog.ui.tree.TreeControl.prototype.getShowExpandIcons = function() {
- return this.showExpandIcons_;
-};
-
-
-/**
- * Sets whether to show the root node.
- * @param {boolean} b Whether to show the root node.
- */
-goog.ui.tree.TreeControl.prototype.setShowRootNode = function(b) {
- if (this.showRootNode_ != b) {
- this.showRootNode_ = b;
- if (this.isInDocument()) {
- var el = this.getRowElement();
- if (el) {
- el.className = this.getRowClassName();
- }
- }
- // Ensure that we do not hide the selected item.
- if (!b && this.getSelectedItem() == this && this.getFirstChild()) {
- this.setSelectedItem(this.getFirstChild());
- }
- }
-};
-
-
-/**
- * @return {boolean} Whether to show the root node.
- */
-goog.ui.tree.TreeControl.prototype.getShowRootNode = function() {
- return this.showRootNode_;
-};
-
-
-/**
- * Add roles and states.
- * @protected
- * @override
- */
-goog.ui.tree.TreeControl.prototype.initAccessibility = function() {
- goog.ui.tree.TreeControl.superClass_.initAccessibility.call(this);
-
- var elt = this.getElement();
- goog.dom.a11y.setRole(elt, 'tree');
- goog.dom.a11y.setState(elt, 'labelledby', this.getLabelElement().id);
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.enterDocument = function() {
- goog.ui.tree.TreeControl.superClass_.enterDocument.call(this);
- var el = this.getElement();
- el.className = this.getConfig().cssRoot;
- el.setAttribute('hideFocus', 'true');
- this.attachEvents_();
- this.initAccessibility();
-};
-
-
-/** @override */
-goog.ui.tree.TreeControl.prototype.exitDocument = function() {
- goog.ui.tree.TreeControl.superClass_.exitDocument.call(this);
- this.detachEvents_();
-};
-
-
-/**
- * Adds the event listeners to the tree.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.attachEvents_ = function() {
- var el = this.getElement();
- el.tabIndex = 0;
-
- var kh = this.keyHandler_ = new goog.events.KeyHandler(el);
- var fh = this.focusHandler_ = new goog.events.FocusHandler(el);
-
- this.getHandler().
- listen(fh, goog.events.FocusHandler.EventType.FOCUSOUT, this.handleBlur_).
- listen(fh, goog.events.FocusHandler.EventType.FOCUSIN, this.handleFocus_).
- listen(kh, goog.events.KeyHandler.EventType.KEY, this.handleKeyEvent).
- listen(el, goog.events.EventType.MOUSEDOWN, this.handleMouseEvent_).
- listen(el, goog.events.EventType.CLICK, this.handleMouseEvent_).
- listen(el, goog.events.EventType.DBLCLICK, this.handleMouseEvent_);
-};
-
-
-/**
- * Removes the event listeners from the tree.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.detachEvents_ = function() {
- this.keyHandler_.dispose();
- this.keyHandler_ = null;
- this.focusHandler_.dispose();
- this.focusHandler_ = null;
-};
-
-
-/**
- * Handles mouse events.
- * @param {!goog.events.BrowserEvent} e The browser event.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.handleMouseEvent_ = function(e) {
- this.logger_.fine('Received event ' + e.type);
- var node = this.getNodeFromEvent_(e);
- if (node) {
- switch (e.type) {
- case goog.events.EventType.MOUSEDOWN:
- node.onMouseDown(e);
- break;
- case goog.events.EventType.CLICK:
- node.onClick_(e);
- break;
- case goog.events.EventType.DBLCLICK:
- node.onDoubleClick_(e);
- break;
- }
- }
-};
-
-
-/**
- * Handles key down on the tree.
- * @param {!goog.events.BrowserEvent} e The browser event.
- * @return {boolean} The handled value.
- */
-goog.ui.tree.TreeControl.prototype.handleKeyEvent = function(e) {
- var handled = false;
-
- // Handle typeahead and navigation keystrokes.
- handled = this.typeAhead_.handleNavigation(e) ||
- (this.selectedItem_ && this.selectedItem_.onKeyDown(e)) ||
- this.typeAhead_.handleTypeAheadChar(e);
-
- if (handled) {
- e.preventDefault();
- }
-
- return handled;
-};
-
-
-/**
- * Finds the containing node given an event.
- * @param {!goog.events.BrowserEvent} e The browser event.
- * @return {goog.ui.tree.BaseNode} The containing node or null if no node is
- * found.
- * @private
- */
-goog.ui.tree.TreeControl.prototype.getNodeFromEvent_ = function(e) {
- // find the right node
- var node = null;
- var target = e.target;
- while (target != null) {
- var id = target.id;
- node = goog.ui.tree.BaseNode.allNodes[id];
- if (node) {
- return node;
- }
- if (target == this.getElement()) {
- break;
- }
- target = target.parentNode;
- }
- return null;
-};
-
-
-/**
- * Creates a new tree node using the same config as the root.
- * @param {string} html The html content of the node label.
- * @return {goog.ui.tree.TreeNode} The new item.
- */
-goog.ui.tree.TreeControl.prototype.createNode = function(html) {
- // Some projects call createNode without arguments which causes failure.
- // See http://goto/misuse-createnode
- // TODO(user): Fix them and remove the html || '' workaround.
- return new goog.ui.tree.TreeNode(html || '', this.getConfig(),
- this.getDomHelper());
-};
-
-
-/**
- * Allows the caller to notify that the given node has been added or just had
- * been updated in the tree.
- * @param {goog.ui.tree.BaseNode} node New node being added or existing node
- * that just had been updated.
- */
-goog.ui.tree.TreeControl.prototype.setNode = function(node) {
- this.typeAhead_.setNodeInMap(node);
-};
-
-
-/**
- * Allows the caller to notify that the given node is being removed from the
- * tree.
- * @param {goog.ui.tree.BaseNode} node Node being removed.
- */
-goog.ui.tree.TreeControl.prototype.removeNode = function(node) {
- this.typeAhead_.removeNodeFromMap(node);
-};
-
-
-/**
- * Clear the typeahead buffer.
- */
-goog.ui.tree.TreeControl.prototype.clearTypeAhead = function() {
- this.typeAhead_.clear();
-};
-
-
-/**
- * A default configuration for the tree.
- */
-goog.ui.tree.TreeControl.defaultConfig = {
- indentWidth: 19,
- cssRoot: goog.getCssName('goog-tree-root') + ' ' +
- goog.getCssName('goog-tree-item'),
- cssHideRoot: goog.getCssName('goog-tree-hide-root'),
- cssItem: goog.getCssName('goog-tree-item'),
- cssChildren: goog.getCssName('goog-tree-children'),
- cssChildrenNoLines: goog.getCssName('goog-tree-children-nolines'),
- cssTreeRow: goog.getCssName('goog-tree-row'),
- cssItemLabel: goog.getCssName('goog-tree-item-label'),
- cssTreeIcon: goog.getCssName('goog-tree-icon'),
- cssExpandTreeIcon: goog.getCssName('goog-tree-expand-icon'),
- cssExpandTreeIconPlus: goog.getCssName('goog-tree-expand-icon-plus'),
- cssExpandTreeIconMinus: goog.getCssName('goog-tree-expand-icon-minus'),
- cssExpandTreeIconTPlus: goog.getCssName('goog-tree-expand-icon-tplus'),
- cssExpandTreeIconTMinus: goog.getCssName('goog-tree-expand-icon-tminus'),
- cssExpandTreeIconLPlus: goog.getCssName('goog-tree-expand-icon-lplus'),
- cssExpandTreeIconLMinus: goog.getCssName('goog-tree-expand-icon-lminus'),
- cssExpandTreeIconT: goog.getCssName('goog-tree-expand-icon-t'),
- cssExpandTreeIconL: goog.getCssName('goog-tree-expand-icon-l'),
- cssExpandTreeIconBlank: goog.getCssName('goog-tree-expand-icon-blank'),
- cssExpandedFolderIcon: goog.getCssName('goog-tree-expanded-folder-icon'),
- cssCollapsedFolderIcon: goog.getCssName('goog-tree-collapsed-folder-icon'),
- cssFileIcon: goog.getCssName('goog-tree-file-icon'),
- cssExpandedRootIcon: goog.getCssName('goog-tree-expanded-folder-icon'),
- cssCollapsedRootIcon: goog.getCssName('goog-tree-collapsed-folder-icon'),
- cssSelectedRow: goog.getCssName('selected')
-};