src/cm/media/js/lib/yui/yui3-3.15.0/build/pluginhost-config/pluginhost-config.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-config', 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
     * Adds pluginhost constructor configuration and static configuration support
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
     * @submodule pluginhost-config
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
    var PluginHost = Y.Plugin.Host,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
        L = Y.Lang;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
     * A protected initialization method, used by the host class to initialize
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
     * plugin configurations passed the constructor, through the config object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
     * Host objects should invoke this method at the appropriate time in their
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
     * construction lifecycle.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
     * @method _initConfigPlugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
     * @param {Object} config The configuration object passed to the constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
     * @for Plugin.Host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    PluginHost.prototype._initConfigPlugins = function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        // Class Configuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
        var classes = (this._getClasses) ? this._getClasses() : [this.constructor],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
            plug = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
            unplug = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
            constructor, i, classPlug, classUnplug, pluginClassName;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
        // TODO: Room for optimization. Can we apply statically/unplug in same pass?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        for (i = classes.length - 1; i >= 0; i--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
            constructor = classes[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
            classUnplug = constructor._UNPLUG;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
            if (classUnplug) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
                // subclasses over-write
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
                Y.mix(unplug, classUnplug, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
            classPlug = constructor._PLUG;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
            if (classPlug) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
                // subclasses over-write
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
                Y.mix(plug, classPlug, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
        for (pluginClassName in plug) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            if (plug.hasOwnProperty(pluginClassName)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
                if (!unplug[pluginClassName]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
                    this.plug(plug[pluginClassName]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        // User Configuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
        if (config && config.plugins) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
            this.plug(config.plugins);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
     * Registers plugins to be instantiated at the class level (plugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
     * which should be plugged into every instance of the class by default).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
     * @method plug
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
     * @param {Function} hostClass The host class on which to register the plugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
     * @param {Function | Array} plugin Either the plugin class, an array of plugin classes or an array of objects (with fn and cfg properties defined)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
     * @param {Object} config (Optional) If plugin is the plugin class, the configuration for the plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
     * @for Plugin.Host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
    PluginHost.plug = function(hostClass, plugin, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        // Cannot plug into Base, since Plugins derive from Base [ will cause infinite recurrsion ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
        var p, i, l, name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
        if (hostClass !== Y.Base) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
            hostClass._PLUG = hostClass._PLUG || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
            if (!L.isArray(plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
                if (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
                    plugin = {fn:plugin, cfg:config};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                plugin = [plugin];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            for (i = 0, l = plugin.length; i < l;i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                p = plugin[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                name = p.NAME || p.fn.NAME;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                hostClass._PLUG[name] = p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
     * Unregisters any class level plugins which have been registered by the host class, or any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
     * other class in the hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
     * @method unplug
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
     * @param {Function} hostClass The host class from which to unregister the plugins
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
     * @param {Function | Array} plugin The plugin class, or an array of plugin classes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
     * @for Plugin.Host
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
    PluginHost.unplug = function(hostClass, plugin) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        var p, i, l, name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
        if (hostClass !== Y.Base) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
            hostClass._UNPLUG = hostClass._UNPLUG || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
            if (!L.isArray(plugin)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
                plugin = [plugin];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
            for (i = 0, l = plugin.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
                p = plugin[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
                name = p.NAME;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                if (!hostClass._PLUG[name]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                    hostClass._UNPLUG[name] = p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                    delete hostClass._PLUG[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
    };
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
}, '@VERSION@', {"requires": ["pluginhost-base"]});