silk-gui
Version:
GUI for developers and Node OS
85 lines (72 loc) • 1.87 kB
JavaScript
/*
* tablesaw: A set of plugins for responsive tables
* Button component
* Copyright (c) 2013 Filament Group, Inc.
* MIT License
*/
;(function( $ ) {
var pluginName = "tablesawbtn",
methods = {
_create: function(){
return $( this ).each(function() {
$( this )
.trigger( "beforecreate." + pluginName )
[ pluginName ]( "_init" )
.trigger( "create." + pluginName );
});
},
_init: function(){
var oEl = $( this ),
sel = this.getElementsByTagName( "select" )[ 0 ];
if( sel ) {
$( this )
.addClass( "btn-select" )
[ pluginName ]( "_select", sel );
}
return oEl;
},
_select: function( sel ) {
var update = function( oEl, sel ) {
var opts = $( sel ).find( "option" ),
label, el, children;
opts.each(function() {
var opt = this;
if( opt.selected ) {
label = document.createTextNode( opt.text );
}
});
children = oEl.childNodes;
if( opts.length > 0 ){
for( var i = 0, l = children.length; i < l; i++ ) {
el = children[ i ];
if( el && el.nodeType === 3 ) {
oEl.replaceChild( label, el );
}
}
}
};
update( this, sel );
$( this ).bind( "change refresh", function() {
update( this, sel );
});
}
};
// Collection method.
$.fn[ pluginName ] = function( arrg, a, b, c ) {
return this.each(function() {
// if it's a method
if( arrg && typeof( arrg ) === "string" ){
return $.fn[ pluginName ].prototype[ arrg ].call( this, a, b, c );
}
// don't re-init
if( $( this ).data( pluginName + "active" ) ){
return $( this );
}
// otherwise, init
$( this ).data( pluginName + "active", true );
$.fn[ pluginName ].prototype._create.call( this );
});
};
// add methods
$.extend( $.fn[ pluginName ].prototype, methods );
}( jQuery ));