forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			263 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*!
 | |
|  * jQuery UI Widget 1.8.10
 | |
|  *
 | |
|  * 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++ ) {
 | |
| 			$( elem ).triggerHandler( "remove" );
 | |
| 		}
 | |
| 		_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() {
 | |
| 						$( this ).triggerHandler( "remove" );
 | |
| 					});
 | |
| 				}
 | |
| 			}
 | |
| 			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 );
 |