src/cm/media/js/lib/yui/yui_3.10.3/build/tabview-base/tabview-base.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('tabview-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
var getClassName = Y.ClassNameManager.getClassName,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    TABVIEW = 'tabview',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    TAB = 'tab',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
    PANEL = 'panel',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
    SELECTED = 'selected',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
    EMPTY_OBJ = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
    DOT = '.',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    TabviewBase = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
        this.init.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
TabviewBase.NAME = 'tabviewBase';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
TabviewBase._classNames = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    tabview: getClassName(TABVIEW),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    tabviewPanel: getClassName(TABVIEW, PANEL),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
    tabviewList: getClassName(TABVIEW, 'list'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    tab: getClassName(TAB),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
    tabLabel: getClassName(TAB, 'label'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    tabPanel: getClassName(TAB, PANEL),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    selectedTab: getClassName(TAB, SELECTED),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    selectedPanel: getClassName(TAB, PANEL, SELECTED)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
TabviewBase._queries = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    tabview: DOT + TabviewBase._classNames.tabview,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    tabviewList: '> ul',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    tab: '> ul > li',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    tabLabel: '> ul > li > a',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    tabviewPanel: '> div',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    tabPanel: '> div > div',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    selectedTab: '> ul > ' + DOT + TabviewBase._classNames.selectedTab,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    selectedPanel: '> div ' + DOT + TabviewBase._classNames.selectedPanel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
Y.mix(TabviewBase.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    init: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
        config = config || EMPTY_OBJ;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
        this._node = config.host || Y.one(config.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        this.refresh();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    initClassNames: function(index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
        var _classNames = Y.TabviewBase._classNames;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        Y.Object.each(Y.TabviewBase._queries, function(query, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
            // this === tabview._node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
            if (_classNames[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
                var result = this.all(query);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
                if (index !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
                    result = result.item(index);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
                if (result) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
                    result.addClass(_classNames[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        }, this._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        this._node.addClass(_classNames.tabview);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    _select: function(index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
        var _classNames = Y.TabviewBase._classNames,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
            _queries = Y.TabviewBase._queries,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
            node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
            oldItem = node.one(_queries.selectedTab),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
            oldContent = node.one(_queries.selectedPanel),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            newItem = node.all(_queries.tab).item(index),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
            newContent = node.all(_queries.tabPanel).item(index);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        if (oldItem) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
            oldItem.removeClass(_classNames.selectedTab);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        if (oldContent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
            oldContent.removeClass(_classNames.selectedPanel);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
        if (newItem) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            newItem.addClass(_classNames.selectedTab);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        if (newContent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            newContent.addClass(_classNames.selectedPanel);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    initState: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        var _queries = Y.TabviewBase._queries,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            activeNode = node.one(_queries.selectedTab),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            activeIndex = activeNode ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
                    node.all(_queries.tab).indexOf(activeNode) : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        this._select(activeIndex);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    // collapse extra space between list-items
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    _scrubTextNodes: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        this._node.one(Y.TabviewBase._queries.tabviewList).get('childNodes').each(function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            if (node.get('nodeType') === 3) { // text node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
                node.remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    // base renderer only enlivens existing markup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    refresh: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
        this._scrubTextNodes();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        this.initClassNames();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
        this.initState();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
        this.initEvents();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    tabEventName: 'click',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    initEvents: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
        // TODO: detach prefix for delegate?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
        // this._node.delegate('tabview|' + this.tabEventName),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        this._node.delegate(this.tabEventName,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
            this.onTabEvent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            Y.TabviewBase._queries.tab,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
        );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    onTabEvent: function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        this._select(this._node.all(Y.TabviewBase._queries.tab).indexOf(e.currentTarget));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        this._node.detach(this.tabEventName);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
Y.TabviewBase = TabviewBase;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
}, '3.10.3', {"requires": ["node-event-delegate", "classnamemanager"]});