src/cm/media/js/lib/yui/yui3-3.15.0/build/tabview-base/tabview-base.js
changeset 602 e16a97fb364a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/lib/yui/yui3-3.15.0/build/tabview-base/tabview-base.js	Mon Mar 10 15:19:48 2014 +0100
@@ -0,0 +1,144 @@
+YUI.add('tabview-base', function (Y, NAME) {
+
+var getClassName = Y.ClassNameManager.getClassName,
+    TABVIEW = 'tabview',
+    TAB = 'tab',
+    PANEL = 'panel',
+    SELECTED = 'selected',
+    EMPTY_OBJ = {},
+    DOT = '.',
+
+    TabviewBase = function() {
+        this.init.apply(this, arguments);
+    };
+
+TabviewBase.NAME = 'tabviewBase';
+TabviewBase._classNames = {
+    tabview: getClassName(TABVIEW),
+    tabviewPanel: getClassName(TABVIEW, PANEL),
+    tabviewList: getClassName(TABVIEW, 'list'),
+    tab: getClassName(TAB),
+    tabLabel: getClassName(TAB, 'label'),
+    tabPanel: getClassName(TAB, PANEL),
+    selectedTab: getClassName(TAB, SELECTED),
+    selectedPanel: getClassName(TAB, PANEL, SELECTED)
+};
+TabviewBase._queries = {
+    tabview: DOT + TabviewBase._classNames.tabview,
+    tabviewList: '> ul',
+    tab: '> ul > li',
+    tabLabel: '> ul > li > a',
+    tabviewPanel: '> div',
+    tabPanel: '> div > div',
+    selectedTab: '> ul > ' + DOT + TabviewBase._classNames.selectedTab,
+    selectedPanel: '> div ' + DOT + TabviewBase._classNames.selectedPanel
+};
+
+Y.mix(TabviewBase.prototype, {
+    init: function(config) {
+        config = config || EMPTY_OBJ;
+        this._node = config.host || Y.one(config.node);
+
+        this.refresh();
+    },
+
+    initClassNames: function(index) {
+        var _classNames = Y.TabviewBase._classNames;
+
+        Y.Object.each(Y.TabviewBase._queries, function(query, name) {
+            // this === tabview._node
+            if (_classNames[name]) {
+                var result = this.all(query);
+
+                if (index !== undefined) {
+                    result = result.item(index);
+                }
+
+                if (result) {
+                    result.addClass(_classNames[name]);
+                }
+            }
+        }, this._node);
+
+        this._node.addClass(_classNames.tabview);
+    },
+
+    _select: function(index) {
+        var _classNames = Y.TabviewBase._classNames,
+            _queries = Y.TabviewBase._queries,
+            node = this._node,
+            oldItem = node.one(_queries.selectedTab),
+            oldContent = node.one(_queries.selectedPanel),
+            newItem = node.all(_queries.tab).item(index),
+            newContent = node.all(_queries.tabPanel).item(index);
+
+        if (oldItem) {
+            oldItem.removeClass(_classNames.selectedTab);
+        }
+
+        if (oldContent) {
+            oldContent.removeClass(_classNames.selectedPanel);
+        }
+
+        if (newItem) {
+            newItem.addClass(_classNames.selectedTab);
+        }
+
+        if (newContent) {
+            newContent.addClass(_classNames.selectedPanel);
+        }
+    },
+
+    initState: function() {
+        var _queries = Y.TabviewBase._queries,
+            node = this._node,
+            activeNode = node.one(_queries.selectedTab),
+            activeIndex = activeNode ?
+                    node.all(_queries.tab).indexOf(activeNode) : 0;
+
+        this._select(activeIndex);
+    },
+
+    // collapse extra space between list-items
+    _scrubTextNodes: function() {
+        this._node.one(Y.TabviewBase._queries.tabviewList).get('childNodes').each(function(node) {
+            if (node.get('nodeType') === 3) { // text node
+                node.remove();
+            }
+        });
+    },
+
+    // base renderer only enlivens existing markup
+    refresh: function() {
+        this._scrubTextNodes();
+        this.initClassNames();
+        this.initState();
+        this.initEvents();
+    },
+
+    tabEventName: 'click',
+
+    initEvents: function() {
+        // TODO: detach prefix for delegate?
+        // this._node.delegate('tabview|' + this.tabEventName),
+        this._node.delegate(this.tabEventName,
+            this.onTabEvent,
+            Y.TabviewBase._queries.tab,
+            this
+        );
+    },
+
+    onTabEvent: function(e) {
+        e.preventDefault();
+        this._select(this._node.all(Y.TabviewBase._queries.tab).indexOf(e.currentTarget));
+    },
+
+    destroy: function() {
+        this._node.detach(this.tabEventName);
+    }
+});
+
+Y.TabviewBase = TabviewBase;
+
+
+}, '@VERSION@', {"requires": ["node-event-delegate", "classnamemanager"]});