src/cm/media/js/lib/yui/yui3-3.15.0/build/base-observable/base-observable.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('base-observable', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
    The `base-observable` submodule adds observability to Base's lifecycle and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
    attributes, and also make it an `EventTarget`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
    @module base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
    @submodule base-observable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
    var L = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
        DESTROY = "destroy",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
        INIT = "init",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
        BUBBLETARGETS = "bubbleTargets",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
        _BUBBLETARGETS = "_bubbleTargets",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
        AttributeObservable = Y.AttributeObservable,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        BaseCore            = Y.BaseCore;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    Provides an augmentable implementation of lifecycle and attribute events for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    `BaseCore`.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    @class BaseObservable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    @extensionfor BaseCore
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
    @uses AttributeObservable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    @uses EventTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
    @since 3.8.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    function BaseObservable() {}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    BaseObservable._ATTR_CFG      = AttributeObservable._ATTR_CFG.concat();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    BaseObservable._NON_ATTRS_CFG = ["on", "after", "bubbleTargets"];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    BaseObservable.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
         * Initializes Attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
         * @method _initAttribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
        _initAttribute: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
            BaseCore.prototype._initAttribute.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
            AttributeObservable.call(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
            this._eventPrefix = this.constructor.EVENT_PREFIX || this.constructor.NAME;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            this._yuievt.config.prefix = this._eventPrefix;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
         * Init lifecycle method, invoked during construction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
         * Fires the init event prior to setting up attributes and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
         * invoking initializers for the class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
         * @method init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
         * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
         * @param {Object} config Object with configuration property name/value pairs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
         * @return {Base} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
        init: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
             * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
             * Lifecycle event for the init phase, fired prior to initialization.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
             * Invoking the preventDefault() method on the event object provided
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
             * to subscribers will prevent initialization from occuring.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
             * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
             * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
             * Subscribers to the "after" momemt of this event, will be notified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
             * after initialization of the object is complete (and therefore
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
             * cannot prevent initialization).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
             * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
             *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
             * @event init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
             * @preventable _defInitFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
             * @param {EventFacade} e Event object, with a cfg property which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
             * refers to the configuration object passed to the constructor.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
            // PERF: Using lower level _publish() for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
            // critical path performance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
            var type = this._getFullType(INIT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                e = this._publish(type);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            e.emitFacade = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
            e.fireOnce = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
            e.defaultTargetOnly = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
            e.defaultFn = this._defInitFn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
            this._preInitEventCfg(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
            if (e._hasPotentialSubscribers()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                this.fire(type, {cfg: config});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                this._baseInit(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                // HACK. Major hack actually. But really fast for no-listeners.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
                // Since it's fireOnce, subscribers may come along later, so since we're
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                // bypassing the event stack the first time, we need to tell the published
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
                // event that it's been "fired". Could extract it into a CE method?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
                e.fired = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
                e.firedWith = [{cfg:config}];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
         * Handles the special on, after and target properties which allow the user to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
         * easily configure on and after listeners as well as bubble targets during
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
         * construction, prior to init.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
         * @method _preInitEventCfg
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
         * @param {Object} config The user configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
        _preInitEventCfg : function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
            if (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                if (config.on) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                    this.on(config.on);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
                if (config.after) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
                    this.after(config.after);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
            var i, l, target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
                userTargets = (config && BUBBLETARGETS in config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
            if (userTargets || _BUBBLETARGETS in this) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
                target = userTargets ? (config && config.bubbleTargets) : this._bubbleTargets;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
                if (L.isArray(target)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
                    for (i = 0, l = target.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
                        this.addTarget(target[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
                } else if (target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
                    this.addTarget(target);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
         * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
         * Destroy lifecycle method. Fires the destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
         * event, prior to invoking destructors for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
         * class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
         * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
         * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
         * Subscribers to the destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
         * event can invoke preventDefault on the event object, to prevent destruction
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
         * from proceeding.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
         * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
         * @method destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
         * @return {Base} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
         * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
        destroy: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
             * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
             * Lifecycle event for the destroy phase,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
             * fired prior to destruction. Invoking the preventDefault
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
             * method on the event object provided to subscribers will
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
             * prevent destruction from proceeding.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
             * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
             * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
             * Subscribers to the "after" moment of this event, will be notified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
             * after destruction is complete (and as a result cannot prevent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
             * destruction).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
             * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
             * @event destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
             * @preventable _defDestroyFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
             * @param {EventFacade} e Event object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
            this.publish(DESTROY, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
                fireOnce:true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
                defaultTargetOnly:true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
                defaultFn: this._defDestroyFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
            this.fire(DESTROY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
            this.detachAll();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
         * Default init event handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
         * @method _defInitFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
         * @param {EventFacade} e Event object, with a cfg property which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
         * refers to the configuration object passed to the constructor.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
         * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
        _defInitFn : function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
            this._baseInit(e.cfg);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
         * Default destroy event handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
         * @method _defDestroyFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
         * @param {EventFacade} e Event object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
         * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
        _defDestroyFn : function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
            this._baseDestroy(e.cfg);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
    Y.mix(BaseObservable, AttributeObservable, false, null, 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
    Y.BaseObservable = BaseObservable;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
}, '@VERSION@', {"requires": ["attribute-observable", "base-core"]});