| /*! |
| * jQuery UI Widget 1.8.16 |
| * |
| * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) |
| * Dual licensed under the MIT or GPL Version 2 licenses. |
| * http://jquery.org/license |
| * |
| * http://docs.jquery.com/UI/Widget |
| */ |
| (function( $, undefined ) { |
| |
| // jQuery 1.4+ |
| if ( $.cleanData ) { |
| var _cleanData = $.cleanData; |
| $.cleanData = function( elems ) { |
| for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { |
| try { |
| $( elem ).triggerHandler( "remove" ); |
| // http://bugs.jquery.com/ticket/8235 |
| } catch( e ) {} |
| } |
| _cleanData( elems ); |
| }; |
| } else { |
| var _remove = $.fn.remove; |
| $.fn.remove = function( selector, keepData ) { |
| return this.each(function() { |
| if ( !keepData ) { |
| if ( !selector || $.filter( selector, [ this ] ).length ) { |
| $( "*", this ).add( [ this ] ).each(function() { |
| try { |
| $( this ).triggerHandler( "remove" ); |
| // http://bugs.jquery.com/ticket/8235 |
| } catch( e ) {} |
| }); |
| } |
| } |
| return _remove.call( $(this), selector, keepData ); |
| }); |
| }; |
| } |
| |
| $.widget = function( name, base, prototype ) { |
| var namespace = name.split( "." )[ 0 ], |
| fullName; |
| name = name.split( "." )[ 1 ]; |
| fullName = namespace + "-" + name; |
| |
| if ( !prototype ) { |
| prototype = base; |
| base = $.Widget; |
| } |
| |
| // create selector for plugin |
| $.expr[ ":" ][ fullName ] = function( elem ) { |
| return !!$.data( elem, name ); |
| }; |
| |
| $[ namespace ] = $[ namespace ] || {}; |
| $[ namespace ][ name ] = function( options, element ) { |
| // allow instantiation without initializing for simple inheritance |
| if ( arguments.length ) { |
| this._createWidget( options, element ); |
| } |
| }; |
| |
| var basePrototype = new base(); |
| // we need to make the options hash a property directly on the new instance |
| // otherwise we'll modify the options hash on the prototype that we're |
| // inheriting from |
| // $.each( basePrototype, function( key, val ) { |
| // if ( $.isPlainObject(val) ) { |
| // basePrototype[ key ] = $.extend( {}, val ); |
| // } |
| // }); |
| basePrototype.options = $.extend( true, {}, basePrototype.options ); |
| $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { |
| namespace: namespace, |
| widgetName: name, |
| widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, |
| widgetBaseClass: fullName |
| }, prototype ); |
| |
| $.widget.bridge( name, $[ namespace ][ name ] ); |
| }; |
| |
| $.widget.bridge = function( name, object ) { |
| $.fn[ name ] = function( options ) { |
| var isMethodCall = typeof options === "string", |
| args = Array.prototype.slice.call( arguments, 1 ), |
| returnValue = this; |
| |
| // allow multiple hashes to be passed on init |
| options = !isMethodCall && args.length ? |
| $.extend.apply( null, [ true, options ].concat(args) ) : |
| options; |
| |
| // prevent calls to internal methods |
| if ( isMethodCall && options.charAt( 0 ) === "_" ) { |
| return returnValue; |
| } |
| |
| if ( isMethodCall ) { |
| this.each(function() { |
| var instance = $.data( this, name ), |
| methodValue = instance && $.isFunction( instance[options] ) ? |
| instance[ options ].apply( instance, args ) : |
| instance; |
| // TODO: add this back in 1.9 and use $.error() (see #5972) |
| // if ( !instance ) { |
| // throw "cannot call methods on " + name + " prior to initialization; " + |
| // "attempted to call method '" + options + "'"; |
| // } |
| // if ( !$.isFunction( instance[options] ) ) { |
| // throw "no such method '" + options + "' for " + name + " widget instance"; |
| // } |
| // var methodValue = instance[ options ].apply( instance, args ); |
| if ( methodValue !== instance && methodValue !== undefined ) { |
| returnValue = methodValue; |
| return false; |
| } |
| }); |
| } else { |
| this.each(function() { |
| var instance = $.data( this, name ); |
| if ( instance ) { |
| instance.option( options || {} )._init(); |
| } else { |
| $.data( this, name, new object( options, this ) ); |
| } |
| }); |
| } |
| |
| return returnValue; |
| }; |
| }; |
| |
| $.Widget = function( options, element ) { |
| // allow instantiation without initializing for simple inheritance |
| if ( arguments.length ) { |
| this._createWidget( options, element ); |
| } |
| }; |
| |
| $.Widget.prototype = { |
| widgetName: "widget", |
| widgetEventPrefix: "", |
| options: { |
| disabled: false |
| }, |
| _createWidget: function( options, element ) { |
| // $.widget.bridge stores the plugin instance, but we do it anyway |
| // so that it's stored even before the _create function runs |
| $.data( element, this.widgetName, this ); |
| this.element = $( element ); |
| this.options = $.extend( true, {}, |
| this.options, |
| this._getCreateOptions(), |
| options ); |
| |
| var self = this; |
| this.element.bind( "remove." + this.widgetName, function() { |
| self.destroy(); |
| }); |
| |
| this._create(); |
| this._trigger( "create" ); |
| this._init(); |
| }, |
| _getCreateOptions: function() { |
| return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; |
| }, |
| _create: function() {}, |
| _init: function() {}, |
| |
| destroy: function() { |
| this.element |
| .unbind( "." + this.widgetName ) |
| .removeData( this.widgetName ); |
| this.widget() |
| .unbind( "." + this.widgetName ) |
| .removeAttr( "aria-disabled" ) |
| .removeClass( |
| this.widgetBaseClass + "-disabled " + |
| "ui-state-disabled" ); |
| }, |
| |
| widget: function() { |
| return this.element; |
| }, |
| |
| option: function( key, value ) { |
| var options = key; |
| |
| if ( arguments.length === 0 ) { |
| // don't return a reference to the internal hash |
| return $.extend( {}, this.options ); |
| } |
| |
| if (typeof key === "string" ) { |
| if ( value === undefined ) { |
| return this.options[ key ]; |
| } |
| options = {}; |
| options[ key ] = value; |
| } |
| |
| this._setOptions( options ); |
| |
| return this; |
| }, |
| _setOptions: function( options ) { |
| var self = this; |
| $.each( options, function( key, value ) { |
| self._setOption( key, value ); |
| }); |
| |
| return this; |
| }, |
| _setOption: function( key, value ) { |
| this.options[ key ] = value; |
| |
| if ( key === "disabled" ) { |
| this.widget() |
| [ value ? "addClass" : "removeClass"]( |
| this.widgetBaseClass + "-disabled" + " " + |
| "ui-state-disabled" ) |
| .attr( "aria-disabled", value ); |
| } |
| |
| return this; |
| }, |
| |
| enable: function() { |
| return this._setOption( "disabled", false ); |
| }, |
| disable: function() { |
| return this._setOption( "disabled", true ); |
| }, |
| |
| _trigger: function( type, event, data ) { |
| var callback = this.options[ type ]; |
| |
| event = $.Event( event ); |
| event.type = ( type === this.widgetEventPrefix ? |
| type : |
| this.widgetEventPrefix + type ).toLowerCase(); |
| data = data || {}; |
| |
| // copy original event properties over to the new event |
| // this would happen if we could call $.event.fix instead of $.Event |
| // but we don't have a way to force an event to be fixed multiple times |
| if ( event.originalEvent ) { |
| for ( var i = $.event.props.length, prop; i; ) { |
| prop = $.event.props[ --i ]; |
| event[ prop ] = event.originalEvent[ prop ]; |
| } |
| } |
| |
| this.element.trigger( event, data ); |
| |
| return !( $.isFunction(callback) && |
| callback.call( this.element[0], event, data ) === false || |
| event.isDefaultPrevented() ); |
| } |
| }; |
| |
| })( jQuery ); |