src/cm/media/js/lib/yui/yui3-3.15.0/build/pluginhost-base/pluginhost-base-debug.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('pluginhost-base', 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
     * Provides the augmentable PluginHost interface, which can be added to any class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
     * @module pluginhost
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
     * Provides the augmentable PluginHost interface, which can be added to any class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
     * @module pluginhost-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
     * An augmentable class, which provides the augmented class with the ability to host plugins.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
     * It adds <a href="#method_plug">plug</a> and <a href="#method_unplug">unplug</a> methods to the augmented class, which can
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
     * be used to add or remove plugins from instances of the class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
     * <p>Plugins can also be added through the constructor configuration object passed to the host class' constructor using
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
     * the "plugins" property. Supported values for the "plugins" property are those defined by the <a href="#method_plug">plug</a> method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
     * For example the following code would add the AnimPlugin and IOPlugin to Overlay (the plugin host):
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
     * <xmp>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
     * var o = new Overlay({plugins: [ AnimPlugin, {fn:IOPlugin, cfg:{section:"header"}}]});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
     * </xmp>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
     * Plug.Host's protected <a href="#method_initPlugins">_initPlugins</a> and <a href="#method_destroyPlugins">_destroyPlugins</a>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
     * methods should be invoked by the host class at the appropriate point in the host's lifecyle.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
     * @class Plugin.Host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    var L = Y.Lang;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    function PluginHost() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        this._plugins = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    PluginHost.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
         * Adds a plugin to the host object. This will instantiate the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
         * plugin and attach it to the configured namespace on the host object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
         * @method plug
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
         * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
         * @param P {Function | Object |Array} Accepts the plugin class, or an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
         * object with a "fn" property specifying the plugin class and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
         * a "cfg" property specifying the configuration for the Plugin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
         * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
         * Additionally an Array can also be passed in, with the above function or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
         * object values, allowing the user to add multiple plugins in a single call.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
         * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
         * @param config (Optional) If the first argument is the plugin class, the second argument
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
         * can be the configuration for the plugin.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
         * @return {Base} A reference to the host object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
        plug: function(Plugin, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
            var i, ln, ns;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
            if (L.isArray(Plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
                for (i = 0, ln = Plugin.length; i < ln; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
                    this.plug(Plugin[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                if (Plugin && !L.isFunction(Plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                    config = Plugin.cfg;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                    Plugin = Plugin.fn;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                // Plugin should be fn by now
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
                if (Plugin && Plugin.NS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
                    ns = Plugin.NS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
                    config = config || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
                    config.host = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
                    if (this.hasPlugin(ns)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
                        // Update config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
                        if (this[ns].setAttrs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                            this[ns].setAttrs(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                        else { Y.log("Attempt to replug an already attached plugin, and we can't setAttrs, because it's not Attribute based: " + ns); }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                        // Create new instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                        this[ns] = new Plugin(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                        this._plugins[ns] = Plugin;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                else { Y.log("Attempt to plug in an invalid plugin. Host:" + this + ", Plugin:" + Plugin); }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
         * Removes a plugin from the host object. This will destroy the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
         * plugin instance and delete the namespace from the host object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
         * @method unplug
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
         * @param {String | Function} plugin The namespace of the plugin, or the plugin class with the static NS namespace property defined. If not provided,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
         * all registered plugins are unplugged.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
         * @return {Base} A reference to the host object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
         * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        unplug: function(plugin) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
            var ns = plugin,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
                plugins = this._plugins;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
            if (plugin) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
                if (L.isFunction(plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
                    ns = plugin.NS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
                    if (ns && (!plugins[ns] || plugins[ns] !== plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
                        ns = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                if (ns) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                    if (this[ns]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
                        if (this[ns].destroy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                            this[ns].destroy();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
                        delete this[ns];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
                    if (plugins[ns]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
                        delete plugins[ns];
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
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
                for (ns in this._plugins) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
                    if (this._plugins.hasOwnProperty(ns)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
                        this.unplug(ns);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
         * Determines if a plugin has plugged into this host.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
         * @method hasPlugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
         * @param {String} ns The plugin's namespace
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
         * @return {Plugin} Returns a truthy value (the plugin instance) if present, or undefined if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
        hasPlugin : function(ns) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
            return (this._plugins[ns] && this[ns]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
         * Initializes static plugins registered on the host (using the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
         * Base.plug static method) and any plugins passed to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
         * instance through the "plugins" configuration property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
         * @method _initPlugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
         * @param {Object} config The configuration object with property name/value pairs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
        _initPlugins: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
            this._plugins = this._plugins || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
            if (this._initConfigPlugins) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
                this._initConfigPlugins(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
         * Unplugs and destroys all plugins on the host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
         * @method _destroyPlugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        _destroyPlugins: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
            this.unplug();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    Y.namespace("Plugin").Host = PluginHost;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
}, '@VERSION@', {"requires": ["yui-base"]});