Version 3.18.1
Show:

File: button/js/plugin.js

            /**
            * A Button Plugin
            *
            * @module button-plugin
            * @since 3.5.0
            */
            
            /**
            * @class Button
            * @param config {Object} Configuration object
            * @extends ButtonCore
            * @constructor
            * @namespace Plugin
            */
            function ButtonPlugin() {
                ButtonPlugin.superclass.constructor.apply(this, arguments);
            }
            
            Y.extend(ButtonPlugin, Y.ButtonCore, {
            
                /**
                * @method _afterNodeGet
                * @param name {string}
                * @private
                */
                _afterNodeGet: function (name) {
                    // TODO: point to method (_uiSetLabel, etc) instead of getter/setter
                    var ATTRS = this.constructor.ATTRS,
                        fn = ATTRS[name] && ATTRS[name].getter && this[ATTRS[name].getter];
            
                    if (fn) {
                        return new Y.Do.AlterReturn('get ' + name, fn.call(this));
                    }
                },
            
                /**
                * @method _afterNodeSet
                * @param name {String}
                * @param val {String}
                * @private
                */
                _afterNodeSet: function (name, val) {
                    var ATTRS = this.constructor.ATTRS,
                        fn = ATTRS[name] && ATTRS[name].setter && this[ATTRS[name].setter];
            
                    if (fn) {
                        fn.call(this, val);
                    }
                },
            
                /**
                * @method _initNode
                * @param config {Object}
                * @private
                */
                _initNode: function(config) {
                    var node = config.host;
                    this._host = node;
            
                    Y.Do.after(this._afterNodeGet, node, 'get', this);
                    Y.Do.after(this._afterNodeSet, node, 'set', this);
                },
            
                /**
                * @method destroy
                * @private
                */
                destroy: function(){
                    // Nothing to do, but things are happier with it here
                }
            
            }, {
            
                /**
                * Attribute configuration.
                *
                * @property ATTRS
                * @type {Object}
                * @private
                * @static
                */
                ATTRS: Y.merge(Y.ButtonCore.ATTRS),
            
                /**
                * Name of this component.
                *
                * @property NAME
                * @type String
                * @static
                */
                NAME: 'buttonPlugin',
            
                /**
                * Namespace of this component.
                *
                * @property NS
                * @type String
                * @static
                */
                NS: 'button'
            
            });
            
            /**
            * @method createNode
            * @description A factory that plugs a Y.Node instance with Y.Plugin.Button
            * @param node {Object}
            * @param config {Object}
            * @return {Object} A plugged Y.Node instance
            * @public
            */
            ButtonPlugin.createNode = function(node, config) {
                var template;
            
                if (node && !config) {
                    if (! (node.nodeType || node.getDOMNode || typeof node === 'string')) {
                        config = node;
                        node = config.srcNode;
                    }
                }
            
                config   = config || {};
                template = config.template || Y.Plugin.Button.prototype.TEMPLATE;
                node     = node || config.srcNode || Y.DOM.create(template);
            
                return Y.one(node).plug(Y.Plugin.Button, config);
            };
            
            Y.namespace('Plugin').Button = ButtonPlugin;