src/cm/media/js/lib/yui/yui_3.10.3/build/tree-selectable/tree-selectable.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('tree-selectable', 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
/*jshint expr:true, onevar:false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
Extension for `Tree` that adds the concept of selection state for nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@module tree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@submodule tree-selectable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
@main tree-selectable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
var Do = Y.Do;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
Extension for `Tree` that adds the concept of selection state for nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
@class Tree.Selectable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
@extensionfor Tree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
Fired when a node is 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
@event select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
@param {Tree.Node} node Node being selected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
@preventable _defSelectFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
var EVT_SELECT = 'select';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
Fired when a node is unselected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
@event unselect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
@param {Tree.Node} node Node being unselected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
@preventable _defUnselectFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
var EVT_UNSELECT = 'unselect';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
function Selectable() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
Selectable.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    Mapping of node ids to node instances for nodes in this tree that are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    currently selected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    @property {Object} _selectedMap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    // -- Lifecycle ------------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        this.nodeExtensions = this.nodeExtensions.concat(Y.Tree.Node.Selectable);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
        this._selectedMap   = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
        Do.after(this._selectableAfterDefAddFn, this, '_defAddFn');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        Do.after(this._selectableAfterDefClearFn, this, '_defClearFn');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        Do.after(this._selectableAfterDefRemoveFn, this, '_defRemoveFn');
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._selectableEvents = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
            this.after('multiSelectChange', this._afterMultiSelectChange)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
        ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    destructor: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
        (new Y.EventHandle(this._selectableEvents)).detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        this._selectableEvents = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        this._selectedMap      = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    Returns an array of nodes that are currently selected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    @method getSelectedNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    @return {Tree.Node.Selectable[]} Array of selected nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    getSelectedNodes: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
        return Y.Object.values(this._selectedMap);
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    Selects the specified node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    @method selectNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    @param {Tree.Node.Selectable} node Node to select.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        @param {Boolean} [options.silent=false] If `true`, the `select` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    selectNode: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        // Instead of calling node.isSelected(), we look for the node in this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
        // tree's selectedMap, which ensures that the `select` event will fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        // in cases such as a node being added to this tree with its selected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        // state already set to true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
        if (!this._selectedMap[node.id]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            this._fireTreeEvent(EVT_SELECT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
                node: node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
                src : options && options.src
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
            }, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
                defaultFn: this._defSelectFn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                silent   : options && options.silent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
        return this;
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    Unselects all selected nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    @method unselect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        @param {Boolean} [options.silent=false] If `true`, the `unselect` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    unselect: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        for (var id in this._selectedMap) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
            if (this._selectedMap.hasOwnProperty(id)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
                this.unselectNode(this._selectedMap[id], options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    Unselects the specified node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    @method unselectNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    @param {Tree.Node.Selectable} node Node to unselect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        @param {Boolean} [options.silent=false] If `true`, the `unselect` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    unselectNode: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        if (node.isSelected() || this._selectedMap[node.id]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            this._fireTreeEvent(EVT_UNSELECT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
                node: node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
                src : options && options.src
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
            }, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
                defaultFn: this._defUnselectFn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
                silent   : options && options.silent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
    _selectableAfterDefAddFn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        // If the node is marked as selected, we need go through the select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
        // flow.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        if (e.node.isSelected()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
            this.selectNode(e.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    _selectableAfterDefClearFn: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
        this._selectedMap = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    _selectableAfterDefRemoveFn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        delete e.node.state.selected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        delete this._selectedMap[e.node.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    // -- Protected Event Handlers ---------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    _afterMultiSelectChange: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
        this.unselect();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
    _defSelectFn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
        if (!this.get('multiSelect')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            this.unselect();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        e.node.state.selected = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
        this._selectedMap[e.node.id] = e.node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    _defUnselectFn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
        delete e.node.state.selected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        delete this._selectedMap[e.node.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
Selectable.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    Whether or not to allow multiple nodes to be selected at once.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    @attribute {Boolean} multiSelect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    multiSelect: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
Y.Tree.Selectable = Selectable;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
@module tree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
@submodule tree-selectable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
`Tree.Node` extension that adds methods useful for nodes in trees that use the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
`Tree.Selectable` extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
@class Tree.Node.Selectable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
@extensionfor Tree.Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
function NodeSelectable() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
NodeSelectable.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    Returns `true` if this node is currently selected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    @method isSelected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    @return {Boolean} `true` if this node is currently selected, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    isSelected: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
        return !!this.state.selected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    Selects this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    @method select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
        @param {Boolean} [options.silent=false] If `true`, the `select` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    select: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
        this.tree.selectNode(this, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    Unselects this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    @method unselect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
        @param {Boolean} [options.silent=false] If `true`, the `unselect` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
    unselect: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        this.tree.unselectNode(this, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
Y.Tree.Node.Selectable = NodeSelectable;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
}, '3.10.3', {"requires": ["tree"]});