Index: openacs-4/packages/ajaxhelper/www/resources/yui/tabview/tabview.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/yui/tabview/tabview.js,v diff -u -r1.2 -r1.3 --- openacs-4/packages/ajaxhelper/www/resources/yui/tabview/tabview.js 8 Sep 2007 14:22:08 -0000 1.2 +++ openacs-4/packages/ajaxhelper/www/resources/yui/tabview/tabview.js 9 Apr 2009 23:15:50 -0000 1.3 @@ -1,8 +1,8 @@ /* -Copyright (c) 2007, Yahoo! Inc. All rights reserved. +Copyright (c) 2009, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt -version: 2.3.0 +version: 2.7.0 */ (function() { @@ -12,6 +12,19 @@ * @requires yahoo, dom, event, element * */ + + var Y = YAHOO.util, + Dom = Y.Dom, + Event = Y.Event, + document = window.document, + + // STRING CONSTANTS + ACTIVE = 'active', + ACTIVE_INDEX = 'activeIndex', + ACTIVE_TAB = 'activeTab', + CONTENT_EL = 'contentEl', + ELEMENT = 'element', + /** * A widget to control tabbed views. * @namespace YAHOO.widget @@ -24,515 +37,499 @@ * @param {Object} attr (optional) A key map of the tabView's * initial attributes. Ignored if first arg is attributes object. */ - YAHOO.widget.TabView = function(el, attr) { + TabView = function(el, attr) { attr = attr || {}; if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) { attr = el; // treat first arg as attr object el = attr.element || null; } if (!el && !attr.element) { // create if we dont have one - el = _createTabViewElement.call(this, attr); + el = this._createTabViewElement(attr); } - YAHOO.widget.TabView.superclass.constructor.call(this, el, attr); + TabView.superclass.constructor.call(this, el, attr); }; - YAHOO.extend(YAHOO.widget.TabView, YAHOO.util.Element); - - var proto = YAHOO.widget.TabView.prototype; - var Dom = YAHOO.util.Dom; - var Event = YAHOO.util.Event; - var Tab = YAHOO.widget.Tab; - - - /** - * The className to add when building from scratch. - * @property CLASSNAME - * @default "navset" - */ - proto.CLASSNAME = 'yui-navset'; - - /** - * The className of the HTMLElement containing the TabView's tab elements - * to look for when building from existing markup, or to add when building - * from scratch. - * All childNodes of the tab container are treated as Tabs when building - * from existing markup. - * @property TAB_PARENT_CLASSNAME - * @default "nav" - */ - proto.TAB_PARENT_CLASSNAME = 'yui-nav'; - - /** - * The className of the HTMLElement containing the TabView's label elements - * to look for when building from existing markup, or to add when building - * from scratch. - * All childNodes of the content container are treated as content elements when - * building from existing markup. - * @property CONTENT_PARENT_CLASSNAME - * @default "nav-content" - */ - proto.CONTENT_PARENT_CLASSNAME = 'yui-content'; - - proto._tabParent = null; - proto._contentParent = null; - - /** - * Adds a Tab to the TabView instance. - * If no index is specified, the tab is added to the end of the tab list. - * @method addTab - * @param {YAHOO.widget.Tab} tab A Tab instance to add. - * @param {Integer} index The position to add the tab. - * @return void - */ - proto.addTab = function(tab, index) { - var tabs = this.get('tabs'); - if (!tabs) { // not ready yet - this._queue[this._queue.length] = ['addTab', arguments]; - return false; - } + YAHOO.extend(TabView, Y.Element, { + /** + * The className to add when building from scratch. + * @property CLASSNAME + * @default "navset" + */ + CLASSNAME: 'yui-navset', - index = (index === undefined) ? tabs.length : index; + /** + * The className of the HTMLElement containing the TabView's tab elements + * to look for when building from existing markup, or to add when building + * from scratch. + * All childNodes of the tab container are treated as Tabs when building + * from existing markup. + * @property TAB_PARENT_CLASSNAME + * @default "nav" + */ + TAB_PARENT_CLASSNAME: 'yui-nav', - var before = this.getTab(index); + /** + * The className of the HTMLElement containing the TabView's label elements + * to look for when building from existing markup, or to add when building + * from scratch. + * All childNodes of the content container are treated as content elements when + * building from existing markup. + * @property CONTENT_PARENT_CLASSNAME + * @default "nav-content" + */ + CONTENT_PARENT_CLASSNAME: 'yui-content', - var self = this; - var el = this.get('element'); - var tabParent = this._tabParent; - var contentParent = this._contentParent; - - var tabElement = tab.get('element'); - var contentEl = tab.get('contentEl'); - - if ( before ) { - tabParent.insertBefore(tabElement, before.get('element')); - } else { - tabParent.appendChild(tabElement); - } - - if ( contentEl && !Dom.isAncestor(contentParent, contentEl) ) { - contentParent.appendChild(contentEl); - } + _tabParent: null, + _contentParent: null, - if ( !tab.get('active') ) { - tab.set('contentVisible', false, true); /* hide if not active */ - } else { - this.set('activeTab', tab, true); + /** + * Adds a Tab to the TabView instance. + * If no index is specified, the tab is added to the end of the tab list. + * @method addTab + * @param {YAHOO.widget.Tab} tab A Tab instance to add. + * @param {Integer} index The position to add the tab. + * @return void + */ + addTab: function(tab, index) { + var tabs = this.get('tabs'), + before = this.getTab(index), + tabParent = this._tabParent, + contentParent = this._contentParent, + tabElement = tab.get(ELEMENT), + contentEl = tab.get(CONTENT_EL); + + if (!tabs) { // not ready yet + this._queue[this._queue.length] = ['addTab', arguments]; + return false; + } - } + index = (index === undefined) ? tabs.length : index; + + if ( before ) { + tabParent.insertBefore(tabElement, before.get(ELEMENT)); + } else { + tabParent.appendChild(tabElement); + } - var activate = function(e) { - YAHOO.util.Event.preventDefault(e); - var silent = false; - - if (this == self.get('activeTab')) { - silent = true; // dont fire activeTabChange if already active + if ( contentEl && !Dom.isAncestor(contentParent, contentEl) ) { + contentParent.appendChild(contentEl); } - self.set('activeTab', this, silent); - }; - - tab.addListener( tab.get('activationEvent'), activate); - - tab.addListener('activationEventChange', function(e) { - if (e.prevValue != e.newValue) { - tab.removeListener(e.prevValue, activate); - tab.addListener(e.newValue, activate); + + if ( !tab.get(ACTIVE) ) { + tab.set('contentVisible', false, true); /* hide if not active */ + } else { + this.set(ACTIVE_TAB, tab, true); + } - }); - - tabs.splice(index, 0, tab); - }; - /** - * Routes childNode events. - * @method DOMEventHandler - * @param {event} e The Dom event that is being handled. - * @return void - */ - proto.DOMEventHandler = function(e) { - var el = this.get('element'); - var target = YAHOO.util.Event.getTarget(e); - var tabParent = this._tabParent; - - if (Dom.isAncestor(tabParent, target) ) { - var tabEl; - var tab = null; - var contentEl; - var tabs = this.get('tabs'); + this._initTabEvents(tab); + tabs.splice(index, 0, tab); + }, - for (var i = 0, len = tabs.length; i < len; i++) { - tabEl = tabs[i].get('element'); - contentEl = tabs[i].get('contentEl'); - - if ( target == tabEl || Dom.isAncestor(tabEl, target) ) { - tab = tabs[i]; - break; // note break + _initTabEvents: function(tab) { + tab.addListener( tab.get('activationEvent'), tab._onActivate, this, tab); + + tab.addListener('activationEventChange', function(e) { + if (e.prevValue != e.newValue) { + tab.removeListener(e.prevValue, tab._onActivate); + tab.addListener(e.newValue, tab._onActivate, this, tab); } - } + }); + }, + + /** + * Routes childNode events. + * @method DOMEventHandler + * @param {event} e The Dom event that is being handled. + * @return void + */ + DOMEventHandler: function(e) { + var target = Event.getTarget(e), + tabParent = this._tabParent, + tabs = this.get('tabs'), + tab, + tabEl, + contentEl; + - if (tab) { - tab.fireEvent(e.type, e); - } - } - }; - - /** - * Returns the Tab instance at the specified index. - * @method getTab - * @param {Integer} index The position of the Tab. - * @return YAHOO.widget.Tab - */ - proto.getTab = function(index) { - return this.get('tabs')[index]; - }; - - /** - * Returns the index of given tab. - * @method getTabIndex - * @param {YAHOO.widget.Tab} tab The tab whose index will be returned. - * @return int - */ - proto.getTabIndex = function(tab) { - var index = null; - var tabs = this.get('tabs'); - for (var i = 0, len = tabs.length; i < len; ++i) { - if (tab == tabs[i]) { - index = i; - break; - } - } - - return index; - }; - - /** - * Removes the specified Tab from the TabView. - * @method removeTab - * @param {YAHOO.widget.Tab} item The Tab instance to be removed. - * @return void - */ - proto.removeTab = function(tab) { - var tabCount = this.get('tabs').length; + if (Dom.isAncestor(tabParent, target) ) { + for (var i = 0, len = tabs.length; i < len; i++) { + tabEl = tabs[i].get(ELEMENT); + contentEl = tabs[i].get(CONTENT_EL); - var index = this.getTabIndex(tab); - var nextIndex = index + 1; - if ( tab == this.get('activeTab') ) { // select next tab - if (tabCount > 1) { - if (index + 1 == tabCount) { - this.set('activeIndex', index - 1); - } else { - this.set('activeIndex', index + 1); + if ( target == tabEl || Dom.isAncestor(tabEl, target) ) { + tab = tabs[i]; + break; // note break + } + } + + if (tab) { + tab.fireEvent(e.type, e); } } - } + }, - this._tabParent.removeChild( tab.get('element') ); - this._contentParent.removeChild( tab.get('contentEl') ); - this._configs.tabs.value.splice(index, 1); - - }; - - /** - * Provides a readable name for the TabView instance. - * @method toString - * @return String - */ - proto.toString = function() { - var name = this.get('id') || this.get('tagName'); - return "TabView " + name; - }; - - /** - * The transiton to use when switching between tabs. - * @method contentTransition - */ - proto.contentTransition = function(newTab, oldTab) { - newTab.set('contentVisible', true); - oldTab.set('contentVisible', false); - }; - - /** - * setAttributeConfigs TabView specific properties. - * @method initAttributes - * @param {Object} attr Hash of initial attributes - */ - proto.initAttributes = function(attr) { - YAHOO.widget.TabView.superclass.initAttributes.call(this, attr); + /** + * Returns the Tab instance at the specified index. + * @method getTab + * @param {Integer} index The position of the Tab. + * @return YAHOO.widget.Tab + */ + getTab: function(index) { + return this.get('tabs')[index]; + }, - if (!attr.orientation) { - attr.orientation = 'top'; - } + /** + * Returns the index of given tab. + * @method getTabIndex + * @param {YAHOO.widget.Tab} tab The tab whose index will be returned. + * @return int + */ + getTabIndex: function(tab) { + var index = null, + tabs = this.get('tabs'); + for (var i = 0, len = tabs.length; i < len; ++i) { + if (tab == tabs[i]) { + index = i; + break; + } + } + + return index; + }, - var el = this.get('element'); - - if (!YAHOO.util.Dom.hasClass(el, this.CLASSNAME)) { - YAHOO.util.Dom.addClass(el, this.CLASSNAME); - } - /** - * The Tabs belonging to the TabView instance. - * @config tabs - * @type Array + * Removes the specified Tab from the TabView. + * @method removeTab + * @param {YAHOO.widget.Tab} item The Tab instance to be removed. + * @return void */ - this.setAttributeConfig('tabs', { - value: [], - readOnly: true - }); + removeTab: function(tab) { + var tabCount = this.get('tabs').length, + index = this.getTabIndex(tab); + if ( tab === this.get(ACTIVE_TAB) ) { + if (tabCount > 1) { // select another tab + if (index + 1 === tabCount) { // if last, activate previous + this.set(ACTIVE_INDEX, index - 1); + } else { // activate next tab + this.set(ACTIVE_INDEX, index + 1); + } + } else { // no more tabs + this.set(ACTIVE_TAB, null); + } + } + + this._tabParent.removeChild( tab.get(ELEMENT) ); + this._contentParent.removeChild( tab.get(CONTENT_EL) ); + this._configs.tabs.value.splice(index, 1); + + tab.fireEvent('remove', { type: 'remove', tabview: this }); + }, + /** - * The container of the tabView's label elements. - * @property _tabParent - * @private - * @type HTMLElement + * Provides a readable name for the TabView instance. + * @method toString + * @return String */ - this._tabParent = - this.getElementsByClassName(this.TAB_PARENT_CLASSNAME, - 'ul' )[0] || _createTabParent.call(this); - + toString: function() { + var name = this.get('id') || this.get('tagName'); + return "TabView " + name; + }, + /** - * The container of the tabView's content elements. - * @property _contentParent - * @type HTMLElement - * @private + * The transiton to use when switching between tabs. + * @method contentTransition */ - this._contentParent = - this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME, - 'div')[0] || _createContentParent.call(this); + contentTransition: function(newTab, oldTab) { + if (newTab) { + newTab.set('contentVisible', true); + } + if (oldTab) { + oldTab.set('contentVisible', false); + } + }, /** - * How the Tabs should be oriented relative to the TabView. - * @config orientation - * @type String - * @default "top" + * setAttributeConfigs TabView specific properties. + * @method initAttributes + * @param {Object} attr Hash of initial attributes */ - this.setAttributeConfig('orientation', { - value: attr.orientation, - method: function(value) { - var current = this.get('orientation'); - this.addClass('yui-navset-' + value); + initAttributes: function(attr) { + TabView.superclass.initAttributes.call(this, attr); + + if (!attr.orientation) { + attr.orientation = 'top'; + } + + var el = this.get(ELEMENT); + + if (!Dom.hasClass(el, this.CLASSNAME)) { + Dom.addClass(el, this.CLASSNAME); + } + + /** + * The Tabs belonging to the TabView instance. + * @attribute tabs + * @type Array + */ + this.setAttributeConfig('tabs', { + value: [], + readOnly: true + }); + + /** + * The container of the tabView's label elements. + * @property _tabParent + * @private + * @type HTMLElement + */ + this._tabParent = + this.getElementsByClassName(this.TAB_PARENT_CLASSNAME, + 'ul' )[0] || this._createTabParent(); - if (current != value) { - this.removeClass('yui-navset-' + current); + /** + * The container of the tabView's content elements. + * @property _contentParent + * @type HTMLElement + * @private + */ + this._contentParent = + this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME, + 'div')[0] || this._createContentParent(); + + /** + * How the Tabs should be oriented relative to the TabView. + * @attribute orientation + * @type String + * @default "top" + */ + this.setAttributeConfig('orientation', { + value: attr.orientation, + method: function(value) { + var current = this.get('orientation'); + this.addClass('yui-navset-' + value); + + if (current != value) { + this.removeClass('yui-navset-' + current); + } + + if (value === 'bottom') { + this.appendChild(this._tabParent); + } } - - switch(value) { - case 'bottom': - this.appendChild(this._tabParent); - break; + }); + + /** + * The index of the tab currently active. + * @attribute activeIndex + * @type Int + */ + this.setAttributeConfig(ACTIVE_INDEX, { + value: attr.activeIndex, + method: function(value) { + }, + validator: function(value) { + var ret = true; + if (value && this.getTab(value).get('disabled')) { // cannot activate if disabled + ret = false; + } + return ret; } + }); + + /** + * The tab currently active. + * @attribute activeTab + * @type YAHOO.widget.Tab + */ + this.setAttributeConfig(ACTIVE_TAB, { + value: attr.activeTab, + method: function(tab) { + var activeTab = this.get(ACTIVE_TAB); + + if (tab) { + tab.set(ACTIVE, true); + } + + if (activeTab && activeTab !== tab) { + activeTab.set(ACTIVE, false); + } + + if (activeTab && tab !== activeTab) { // no transition if only 1 + this.contentTransition(tab, activeTab); + } else if (tab) { + tab.set('contentVisible', true); + } + }, + validator: function(value) { + var ret = true; + if (value && value.get('disabled')) { // cannot activate if disabled + ret = false; + } + return ret; + } + }); + + this.on('activeTabChange', this._onActiveTabChange); + this.on('activeIndexChange', this._onActiveIndexChange); + + if ( this._tabParent ) { + this._initTabs(); } - }); - + + // Due to delegation we add all DOM_EVENTS to the TabView container + // but IE will leak when unsupported events are added, so remove these + this.DOM_EVENTS.submit = false; + this.DOM_EVENTS.focus = false; + this.DOM_EVENTS.blur = false; + + for (var type in this.DOM_EVENTS) { + if ( YAHOO.lang.hasOwnProperty(this.DOM_EVENTS, type) ) { + this.addListener.call(this, type, this.DOMEventHandler); + } + } + }, + /** - * The index of the tab currently active. - * @config activeIndex - * @type Int + * Removes selected state from the given tab if it is the activeTab + * @method deselectTab + * @param {Int} index The tab index to deselect */ - this.setAttributeConfig('activeIndex', { - value: attr.activeIndex, - method: function(value) { - this.set('activeTab', this.getTab(value)); - }, - validator: function(value) { - return !this.getTab(value).get('disabled'); // cannot activate if disabled + deselectTab: function(index) { + if (this.getTab(index) === this.get('activeTab')) { + this.set('activeTab', null); } - }); + }, + + /** + * Makes the tab at the given index the active tab + * @method selectTab + * @param {Int} index The tab index to be made active + */ + selectTab: function(index) { + this.set('activeTab', this.getTab(index)); + }, + + _onActiveTabChange: function(e) { + var activeIndex = this.get(ACTIVE_INDEX), + newIndex = this.getTabIndex(e.newValue); + + if (activeIndex !== newIndex) { + if (!(this.set(ACTIVE_INDEX, newIndex)) ) { // NOTE: setting + // revert if activeIndex update fails (cancelled via beforeChange) + this.set(ACTIVE_TAB, e.prevValue); + } + } + }, + _onActiveIndexChange: function(e) { + // no set if called from ActiveTabChange event + if (e.newValue !== this.getTabIndex(this.get(ACTIVE_TAB))) { + if (!(this.set(ACTIVE_TAB, this.getTab(e.newValue))) ) { // NOTE: setting + // revert if activeTab update fails (cancelled via beforeChange) + this.set(ACTIVE_INDEX, e.prevValue); + } + } + }, + /** - * The tab currently active. - * @config activeTab - * @type YAHOO.widget.Tab + * Creates Tab instances from a collection of HTMLElements. + * @method _initTabs + * @private + * @return void */ - this.setAttributeConfig('activeTab', { - value: attr.activeTab, - method: function(tab) { - var activeTab = this.get('activeTab'); + _initTabs: function() { + var tabs = Dom.getChildren(this._tabParent), + contentElements = Dom.getChildren(this._contentParent), + activeIndex = this.get(ACTIVE_INDEX), + tab, + attr, + active; + + for (var i = 0, len = tabs.length; i < len; ++i) { + attr = {}; - if (tab) { - tab.set('active', true); - this._configs['activeIndex'].value = this.getTabIndex(tab); // keep in sync + if (contentElements[i]) { + attr.contentEl = contentElements[i]; } + + tab = new YAHOO.widget.Tab(tabs[i], attr); + this.addTab(tab); - if (activeTab && activeTab != tab) { - activeTab.set('active', false); + if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) { + active = tab; } - - if (activeTab && tab != activeTab) { // no transition if only 1 - this.contentTransition(tab, activeTab); - } else if (tab) { - tab.set('contentVisible', true); - } - }, - validator: function(value) { - return !value.get('disabled'); // cannot activate if disabled } - }); + if (activeIndex) { + this.set(ACTIVE_TAB, this.getTab(activeIndex)); + } else { + this._configs.activeTab.value = active; // dont invoke method + this._configs.activeIndex.value = this.getTabIndex(active); + } + }, - if ( this._tabParent ) { - _initTabs.call(this); - } - - // Due to delegation we add all DOM_EVENTS to the TabView container - // but IE will leak when unsupported events are added, so remove these - this.DOM_EVENTS.submit = false; - this.DOM_EVENTS.focus = false; - this.DOM_EVENTS.blur = false; + _createTabViewElement: function(attr) { + var el = document.createElement('div'); - for (var type in this.DOM_EVENTS) { - if ( YAHOO.lang.hasOwnProperty(this.DOM_EVENTS, type) ) { - this.addListener.call(this, type, this.DOMEventHandler); + if ( this.CLASSNAME ) { + el.className = this.CLASSNAME; } - } - }; - - /** - * Creates Tab instances from a collection of HTMLElements. - * @method initTabs - * @private - * @return void - */ - var _initTabs = function() { - var tab, - attr, - contentEl; - var el = this.get('element'); - var tabs = _getChildNodes(this._tabParent); - var contentElements = _getChildNodes(this._contentParent); + return el; + }, - for (var i = 0, len = tabs.length; i < len; ++i) { - attr = {}; - - if (contentElements[i]) { - attr.contentEl = contentElements[i]; - } + _createTabParent: function(attr) { + var el = document.createElement('ul'); - tab = new YAHOO.widget.Tab(tabs[i], attr); - this.addTab(tab); - - if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) { - this._configs.activeTab.value = tab; // dont invoke method - this._configs.activeIndex.value = this.getTabIndex(tab); + if ( this.TAB_PARENT_CLASSNAME ) { + el.className = this.TAB_PARENT_CLASSNAME; } - } - }; - - var _createTabViewElement = function(attr) { - var el = document.createElement('div'); - - if ( this.CLASSNAME ) { - el.className = this.CLASSNAME; - } + + this.get(ELEMENT).appendChild(el); + + return el; + }, - return el; - }; - - var _createTabParent = function(attr) { - var el = document.createElement('ul'); + _createContentParent: function(attr) { + var el = document.createElement('div'); - if ( this.TAB_PARENT_CLASSNAME ) { - el.className = this.TAB_PARENT_CLASSNAME; - } - - this.get('element').appendChild(el); - - return el; - }; - - var _createContentParent = function(attr) { - var el = document.createElement('div'); - - if ( this.CONTENT_PARENT_CLASSNAME ) { - el.className = this.CONTENT_PARENT_CLASSNAME; - } - - this.get('element').appendChild(el); - - return el; - }; - - var _getChildNodes = function(el) { - var nodes = []; - var childNodes = el.childNodes; - - for (var i = 0, len = childNodes.length; i < len; ++i) { - if (childNodes[i].nodeType == 1) { - nodes[nodes.length] = childNodes[i]; + if ( this.CONTENT_PARENT_CLASSNAME ) { + el.className = this.CONTENT_PARENT_CLASSNAME; } + + this.get(ELEMENT).appendChild(el); + + return el; } - - return nodes; - }; - -/** - * Fires before the activeTab is changed. - *
See: Element.addListener
- *If handler returns false, the change will be cancelled, and the value will not - * be set.
- *Event fields:
- * <String> type
beforeActiveTabChange
- * <YAHOO.widget.Tab>
- * prevValue
the currently active tab
- * <YAHOO.widget.Tab>
- * newValue
the tab to be made active
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('beforeActiveTabChange', handler);
See: Element.addListener
- *Event fields:
- * <String> type
activeTabChange
- * <YAHOO.widget.Tab>
- * prevValue
the formerly active tab
- * <YAHOO.widget.Tab>
- * newValue
the new active tab
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('activeTabChange', handler);
See: Element.addListener
- *If handler returns false, the change will be cancelled, and the value will not - * be set.
- *Event fields:
- * <String> type
beforeOrientationChange
- * <String>
- * prevValue
the current orientation
- * <String>
- * newValue
the new orientation to be applied
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('beforeOrientationChange', handler);
See: Element.addListener
- *Event fields:
- * <String> type
orientationChange
- * <String>
- * prevValue
the former orientation
- * <String>
- * newValue
the new orientation
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('orientationChange', handler);
See: Element.addListener
- *If handler returns false, the change will be cancelled, and the value will not - * be set.
- *Event fields:
- * <String> type
beforeActiveChange
- * <Boolean>
- * prevValue
the current value
- * <Boolean>
- * newValue
the new value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('beforeActiveChange', handler);
See: Element.addListener
- *Event fields:
- * <String> type
activeChange
- * <Boolean>
- * prevValue
the previous value
- * <Boolean>
- * newValue
the updated value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('activeChange', handler);
See: Element.addListener
- *If handler returns false, the change will be cancelled, and the value will not - * be set.
- *Event fields:
- * <String> type
beforeLabelChange
- * <String>
- * prevValue
the current value
- * <String>
- * newValue
the new value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('beforeLabelChange', handler);
See: Element.addListener
- *Event fields:
- * <String> type
labelChange
- * <String>
- * prevValue
the previous value
- * <String>
- * newValue
the updated value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('labelChange', handler);
See: Element.addListener
- *If handler returns false, the change will be cancelled, and the value will not - * be set.
- *Event fields:
- * <String> type
beforeContentChange
- * <String>
- * prevValue
the current value
- * <String>
- * newValue
the new value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('beforeContentChange', handler);
See: Element.addListener
- *Event fields:
- * <String> type
contentChange
- * <String>
- * prevValue
the previous value
- * <Boolean>
- * newValue
the updated value
Usage:
- * var handler = function(e) {var previous = e.prevValue};
- * myTabs.addListener('contentChange', handler);