/**
* 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;