#3592 general theme changes and removing unused libraries
Merged 2 years ago by pingou. Opened 2 years ago by ryanlerch.
ryanlerch/pagure theme-general  into  master

pagure/static/vendor/bootstrap/bootstrap.bundle.js pagure/themes/default/static/bootstrap-4.1.3/bootstrap.bundle.js
file renamed
file was moved with no change to the file
pagure/static/vendor/bootstrap/bootstrap.bundle.min.js pagure/themes/default/static/bootstrap-4.1.3/bootstrap.bundle.min.js
file renamed
file was moved with no change to the file
pagure/static/vendor/bootstrap/bootstrap.css pagure/themes/default/static/bootstrap-4.1.3/bootstrap.css
file renamed
file was moved with no change to the file
pagure/static/vendor/bootstrap/bootstrap.min.css pagure/themes/default/static/bootstrap-4.1.3/bootstrap.min.css
file renamed
file was moved with no change to the file
@@ -1,1 +0,0 @@ 

- hack-extended-2.020.css 

\ No newline at end of file

@@ -1,1 +0,0 @@ 

- hack-extended-2.020.min.css 

\ No newline at end of file

@@ -1,18686 +0,0 @@ 

- /*! jQuery UI - v1.12.0 - 2016-07-08

- * http://jqueryui.com

- * Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js

- * Copyright jQuery Foundation and other contributors; Licensed MIT */

- 

- (function( factory ) {

- 	if ( typeof define === "function" && define.amd ) {

- 

- 		// AMD. Register as an anonymous module.

- 		define([ "jquery" ], factory );

- 	} else {

- 

- 		// Browser globals

- 		factory( jQuery );

- 	}

- }(function( $ ) {

- 

- $.ui = $.ui || {};

- 

- var version = $.ui.version = "1.12.0";

- 

- 

- /*!

-  * jQuery UI Widget 1.12.0

-  * http://jqueryui.com

-  *

-  * Copyright jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  */

- 

- //>>label: Widget

- //>>group: Core

- //>>description: Provides a factory for creating stateful widgets with a common API.

- //>>docs: http://api.jqueryui.com/jQuery.widget/

- //>>demos: http://jqueryui.com/widget/

- 

- 

- 

- var widgetUuid = 0;

- var widgetSlice = Array.prototype.slice;

- 

- $.cleanData = ( function( orig ) {

- 	return function( elems ) {

- 		var events, elem, i;

- 		for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {

- 			try {

- 

- 				// Only trigger remove when necessary to save time

- 				events = $._data( elem, "events" );

- 				if ( events && events.remove ) {

- 					$( elem ).triggerHandler( "remove" );

- 				}

- 

- 			// Http://bugs.jquery.com/ticket/8235

- 			} catch ( e ) {}

- 		}

- 		orig( elems );

- 	};

- } )( $.cleanData );

- 

- $.widget = function( name, base, prototype ) {

- 	var existingConstructor, constructor, basePrototype;

- 

- 	// ProxiedPrototype allows the provided prototype to remain unmodified

- 	// so that it can be used as a mixin for multiple widgets (#8876)

- 	var proxiedPrototype = {};

- 

- 	var namespace = name.split( "." )[ 0 ];

- 	name = name.split( "." )[ 1 ];

- 	var fullName = namespace + "-" + name;

- 

- 	if ( !prototype ) {

- 		prototype = base;

- 		base = $.Widget;

- 	}

- 

- 	if ( $.isArray( prototype ) ) {

- 		prototype = $.extend.apply( null, [ {} ].concat( prototype ) );

- 	}

- 

- 	// Create selector for plugin

- 	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {

- 		return !!$.data( elem, fullName );

- 	};

- 

- 	$[ namespace ] = $[ namespace ] || {};

- 	existingConstructor = $[ namespace ][ name ];

- 	constructor = $[ namespace ][ name ] = function( options, element ) {

- 

- 		// Allow instantiation without "new" keyword

- 		if ( !this._createWidget ) {

- 			return new constructor( options, element );

- 		}

- 

- 		// Allow instantiation without initializing for simple inheritance

- 		// must use "new" keyword (the code above always passes args)

- 		if ( arguments.length ) {

- 			this._createWidget( options, element );

- 		}

- 	};

- 

- 	// Extend with the existing constructor to carry over any static properties

- 	$.extend( constructor, existingConstructor, {

- 		version: prototype.version,

- 

- 		// Copy the object used to create the prototype in case we need to

- 		// redefine the widget later

- 		_proto: $.extend( {}, prototype ),

- 

- 		// Track widgets that inherit from this widget in case this widget is

- 		// redefined after a widget inherits from it

- 		_childConstructors: []

- 	} );

- 

- 	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

- 	basePrototype.options = $.widget.extend( {}, basePrototype.options );

- 	$.each( prototype, function( prop, value ) {

- 		if ( !$.isFunction( value ) ) {

- 			proxiedPrototype[ prop ] = value;

- 			return;

- 		}

- 		proxiedPrototype[ prop ] = ( function() {

- 			function _super() {

- 				return base.prototype[ prop ].apply( this, arguments );

- 			}

- 

- 			function _superApply( args ) {

- 				return base.prototype[ prop ].apply( this, args );

- 			}

- 

- 			return function() {

- 				var __super = this._super;

- 				var __superApply = this._superApply;

- 				var returnValue;

- 

- 				this._super = _super;

- 				this._superApply = _superApply;

- 

- 				returnValue = value.apply( this, arguments );

- 

- 				this._super = __super;

- 				this._superApply = __superApply;

- 

- 				return returnValue;

- 			};

- 		} )();

- 	} );

- 	constructor.prototype = $.widget.extend( basePrototype, {

- 

- 		// TODO: remove support for widgetEventPrefix

- 		// always use the name + a colon as the prefix, e.g., draggable:start

- 		// don't prefix for widgets that aren't DOM-based

- 		widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name

- 	}, proxiedPrototype, {

- 		constructor: constructor,

- 		namespace: namespace,

- 		widgetName: name,

- 		widgetFullName: fullName

- 	} );

- 

- 	// If this widget is being redefined then we need to find all widgets that

- 	// are inheriting from it and redefine all of them so that they inherit from

- 	// the new version of this widget. We're essentially trying to replace one

- 	// level in the prototype chain.

- 	if ( existingConstructor ) {

- 		$.each( existingConstructor._childConstructors, function( i, child ) {

- 			var childPrototype = child.prototype;

- 

- 			// Redefine the child widget using the same prototype that was

- 			// originally used, but inherit from the new version of the base

- 			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,

- 				child._proto );

- 		} );

- 

- 		// Remove the list of existing child constructors from the old constructor

- 		// so the old child constructors can be garbage collected

- 		delete existingConstructor._childConstructors;

- 	} else {

- 		base._childConstructors.push( constructor );

- 	}

- 

- 	$.widget.bridge( name, constructor );

- 

- 	return constructor;

- };

- 

- $.widget.extend = function( target ) {

- 	var input = widgetSlice.call( arguments, 1 );

- 	var inputIndex = 0;

- 	var inputLength = input.length;

- 	var key;

- 	var value;

- 

- 	for ( ; inputIndex < inputLength; inputIndex++ ) {

- 		for ( key in input[ inputIndex ] ) {

- 			value = input[ inputIndex ][ key ];

- 			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {

- 

- 				// Clone objects

- 				if ( $.isPlainObject( value ) ) {

- 					target[ key ] = $.isPlainObject( target[ key ] ) ?

- 						$.widget.extend( {}, target[ key ], value ) :

- 

- 						// Don't extend strings, arrays, etc. with objects

- 						$.widget.extend( {}, value );

- 

- 				// Copy everything else by reference

- 				} else {

- 					target[ key ] = value;

- 				}

- 			}

- 		}

- 	}

- 	return target;

- };

- 

- $.widget.bridge = function( name, object ) {

- 	var fullName = object.prototype.widgetFullName || name;

- 	$.fn[ name ] = function( options ) {

- 		var isMethodCall = typeof options === "string";

- 		var args = widgetSlice.call( arguments, 1 );

- 		var returnValue = this;

- 

- 		if ( isMethodCall ) {

- 			this.each( function() {

- 				var methodValue;

- 				var instance = $.data( this, fullName );

- 

- 				if ( options === "instance" ) {

- 					returnValue = instance;

- 					return false;

- 				}

- 

- 				if ( !instance ) {

- 					return $.error( "cannot call methods on " + name +

- 						" prior to initialization; " +

- 						"attempted to call method '" + options + "'" );

- 				}

- 

- 				if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {

- 					return $.error( "no such method '" + options + "' for " + name +

- 						" widget instance" );

- 				}

- 

- 				methodValue = instance[ options ].apply( instance, args );

- 

- 				if ( methodValue !== instance && methodValue !== undefined ) {

- 					returnValue = methodValue && methodValue.jquery ?

- 						returnValue.pushStack( methodValue.get() ) :

- 						methodValue;

- 					return false;

- 				}

- 			} );

- 		} else {

- 

- 			// Allow multiple hashes to be passed on init

- 			if ( args.length ) {

- 				options = $.widget.extend.apply( null, [ options ].concat( args ) );

- 			}

- 

- 			this.each( function() {

- 				var instance = $.data( this, fullName );

- 				if ( instance ) {

- 					instance.option( options || {} );

- 					if ( instance._init ) {

- 						instance._init();

- 					}

- 				} else {

- 					$.data( this, fullName, new object( options, this ) );

- 				}

- 			} );

- 		}

- 

- 		return returnValue;

- 	};

- };

- 

- $.Widget = function( /* options, element */ ) {};

- $.Widget._childConstructors = [];

- 

- $.Widget.prototype = {

- 	widgetName: "widget",

- 	widgetEventPrefix: "",

- 	defaultElement: "<div>",

- 

- 	options: {

- 		classes: {},

- 		disabled: false,

- 

- 		// Callbacks

- 		create: null

- 	},

- 

- 	_createWidget: function( options, element ) {

- 		element = $( element || this.defaultElement || this )[ 0 ];

- 		this.element = $( element );

- 		this.uuid = widgetUuid++;

- 		this.eventNamespace = "." + this.widgetName + this.uuid;

- 

- 		this.bindings = $();

- 		this.hoverable = $();

- 		this.focusable = $();

- 		this.classesElementLookup = {};

- 

- 		if ( element !== this ) {

- 			$.data( element, this.widgetFullName, this );

- 			this._on( true, this.element, {

- 				remove: function( event ) {

- 					if ( event.target === element ) {

- 						this.destroy();

- 					}

- 				}

- 			} );

- 			this.document = $( element.style ?

- 

- 				// Element within the document

- 				element.ownerDocument :

- 

- 				// Element is window or document

- 				element.document || element );

- 			this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );

- 		}

- 

- 		this.options = $.widget.extend( {},

- 			this.options,

- 			this._getCreateOptions(),

- 			options );

- 

- 		this._create();

- 

- 		if ( this.options.disabled ) {

- 			this._setOptionDisabled( this.options.disabled );

- 		}

- 

- 		this._trigger( "create", null, this._getCreateEventData() );

- 		this._init();

- 	},

- 

- 	_getCreateOptions: function() {

- 		return {};

- 	},

- 

- 	_getCreateEventData: $.noop,

- 

- 	_create: $.noop,

- 

- 	_init: $.noop,

- 

- 	destroy: function() {

- 		var that = this;

- 

- 		this._destroy();

- 		$.each( this.classesElementLookup, function( key, value ) {

- 			that._removeClass( value, key );

- 		} );

- 

- 		// We can probably remove the unbind calls in 2.0

- 		// all event bindings should go through this._on()

- 		this.element

- 			.off( this.eventNamespace )

- 			.removeData( this.widgetFullName );

- 		this.widget()

- 			.off( this.eventNamespace )

- 			.removeAttr( "aria-disabled" );

- 

- 		// Clean up events and states

- 		this.bindings.off( this.eventNamespace );

- 	},

- 

- 	_destroy: $.noop,

- 

- 	widget: function() {

- 		return this.element;

- 	},

- 

- 	option: function( key, value ) {

- 		var options = key;

- 		var parts;

- 		var curOption;

- 		var i;

- 

- 		if ( arguments.length === 0 ) {

- 

- 			// Don't return a reference to the internal hash

- 			return $.widget.extend( {}, this.options );

- 		}

- 

- 		if ( typeof key === "string" ) {

- 

- 			// Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }

- 			options = {};

- 			parts = key.split( "." );

- 			key = parts.shift();

- 			if ( parts.length ) {

- 				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );

- 				for ( i = 0; i < parts.length - 1; i++ ) {

- 					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};

- 					curOption = curOption[ parts[ i ] ];

- 				}

- 				key = parts.pop();

- 				if ( arguments.length === 1 ) {

- 					return curOption[ key ] === undefined ? null : curOption[ key ];

- 				}

- 				curOption[ key ] = value;

- 			} else {

- 				if ( arguments.length === 1 ) {

- 					return this.options[ key ] === undefined ? null : this.options[ key ];

- 				}

- 				options[ key ] = value;

- 			}

- 		}

- 

- 		this._setOptions( options );

- 

- 		return this;

- 	},

- 

- 	_setOptions: function( options ) {

- 		var key;

- 

- 		for ( key in options ) {

- 			this._setOption( key, options[ key ] );

- 		}

- 

- 		return this;

- 	},

- 

- 	_setOption: function( key, value ) {

- 		if ( key === "classes" ) {

- 			this._setOptionClasses( value );

- 		}

- 

- 		this.options[ key ] = value;

- 

- 		if ( key === "disabled" ) {

- 			this._setOptionDisabled( value );

- 		}

- 

- 		return this;

- 	},

- 

- 	_setOptionClasses: function( value ) {

- 		var classKey, elements, currentElements;

- 

- 		for ( classKey in value ) {

- 			currentElements = this.classesElementLookup[ classKey ];

- 			if ( value[ classKey ] === this.options.classes[ classKey ] ||

- 					!currentElements ||

- 					!currentElements.length ) {

- 				continue;

- 			}

- 

- 			// We are doing this to create a new jQuery object because the _removeClass() call

- 			// on the next line is going to destroy the reference to the current elements being

- 			// tracked. We need to save a copy of this collection so that we can add the new classes

- 			// below.

- 			elements = $( currentElements.get() );

- 			this._removeClass( currentElements, classKey );

- 

- 			// We don't use _addClass() here, because that uses this.options.classes

- 			// for generating the string of classes. We want to use the value passed in from

- 			// _setOption(), this is the new value of the classes option which was passed to

- 			// _setOption(). We pass this value directly to _classes().

- 			elements.addClass( this._classes( {

- 				element: elements,

- 				keys: classKey,

- 				classes: value,

- 				add: true

- 			} ) );

- 		}

- 	},

- 

- 	_setOptionDisabled: function( value ) {

- 		this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );

- 

- 		// If the widget is becoming disabled, then nothing is interactive

- 		if ( value ) {

- 			this._removeClass( this.hoverable, null, "ui-state-hover" );

- 			this._removeClass( this.focusable, null, "ui-state-focus" );

- 		}

- 	},

- 

- 	enable: function() {

- 		return this._setOptions( { disabled: false } );

- 	},

- 

- 	disable: function() {

- 		return this._setOptions( { disabled: true } );

- 	},

- 

- 	_classes: function( options ) {

- 		var full = [];

- 		var that = this;

- 

- 		options = $.extend( {

- 			element: this.element,

- 			classes: this.options.classes || {}

- 		}, options );

- 

- 		function processClassString( classes, checkOption ) {

- 			var current, i;

- 			for ( i = 0; i < classes.length; i++ ) {

- 				current = that.classesElementLookup[ classes[ i ] ] || $();

- 				if ( options.add ) {

- 					current = $( $.unique( current.get().concat( options.element.get() ) ) );

- 				} else {

- 					current = $( current.not( options.element ).get() );

- 				}

- 				that.classesElementLookup[ classes[ i ] ] = current;

- 				full.push( classes[ i ] );

- 				if ( checkOption && options.classes[ classes[ i ] ] ) {

- 					full.push( options.classes[ classes[ i ] ] );

- 				}

- 			}

- 		}

- 

- 		if ( options.keys ) {

- 			processClassString( options.keys.match( /\S+/g ) || [], true );

- 		}

- 		if ( options.extra ) {

- 			processClassString( options.extra.match( /\S+/g ) || [] );

- 		}

- 

- 		return full.join( " " );

- 	},

- 

- 	_removeClass: function( element, keys, extra ) {

- 		return this._toggleClass( element, keys, extra, false );

- 	},

- 

- 	_addClass: function( element, keys, extra ) {

- 		return this._toggleClass( element, keys, extra, true );

- 	},

- 

- 	_toggleClass: function( element, keys, extra, add ) {

- 		add = ( typeof add === "boolean" ) ? add : extra;

- 		var shift = ( typeof element === "string" || element === null ),

- 			options = {

- 				extra: shift ? keys : extra,

- 				keys: shift ? element : keys,

- 				element: shift ? this.element : element,

- 				add: add

- 			};

- 		options.element.toggleClass( this._classes( options ), add );

- 		return this;

- 	},

- 

- 	_on: function( suppressDisabledCheck, element, handlers ) {

- 		var delegateElement;

- 		var instance = this;

- 

- 		// No suppressDisabledCheck flag, shuffle arguments

- 		if ( typeof suppressDisabledCheck !== "boolean" ) {

- 			handlers = element;

- 			element = suppressDisabledCheck;

- 			suppressDisabledCheck = false;

- 		}

- 

- 		// No element argument, shuffle and use this.element

- 		if ( !handlers ) {

- 			handlers = element;

- 			element = this.element;

- 			delegateElement = this.widget();

- 		} else {

- 			element = delegateElement = $( element );

- 			this.bindings = this.bindings.add( element );

- 		}

- 

- 		$.each( handlers, function( event, handler ) {

- 			function handlerProxy() {

- 

- 				// Allow widgets to customize the disabled handling

- 				// - disabled as an array instead of boolean

- 				// - disabled class as method for disabling individual parts

- 				if ( !suppressDisabledCheck &&

- 						( instance.options.disabled === true ||

- 						$( this ).hasClass( "ui-state-disabled" ) ) ) {

- 					return;

- 				}

- 				return ( typeof handler === "string" ? instance[ handler ] : handler )

- 					.apply( instance, arguments );

- 			}

- 

- 			// Copy the guid so direct unbinding works

- 			if ( typeof handler !== "string" ) {

- 				handlerProxy.guid = handler.guid =

- 					handler.guid || handlerProxy.guid || $.guid++;

- 			}

- 

- 			var match = event.match( /^([\w:-]*)\s*(.*)$/ );

- 			var eventName = match[ 1 ] + instance.eventNamespace;

- 			var selector = match[ 2 ];

- 

- 			if ( selector ) {

- 				delegateElement.on( eventName, selector, handlerProxy );

- 			} else {

- 				element.on( eventName, handlerProxy );

- 			}

- 		} );

- 	},

- 

- 	_off: function( element, eventName ) {

- 		eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +

- 			this.eventNamespace;

- 		element.off( eventName ).off( eventName );

- 

- 		// Clear the stack to avoid memory leaks (#10056)

- 		this.bindings = $( this.bindings.not( element ).get() );

- 		this.focusable = $( this.focusable.not( element ).get() );

- 		this.hoverable = $( this.hoverable.not( element ).get() );

- 	},

- 

- 	_delay: function( handler, delay ) {

- 		function handlerProxy() {

- 			return ( typeof handler === "string" ? instance[ handler ] : handler )

- 				.apply( instance, arguments );

- 		}

- 		var instance = this;

- 		return setTimeout( handlerProxy, delay || 0 );

- 	},

- 

- 	_hoverable: function( element ) {

- 		this.hoverable = this.hoverable.add( element );

- 		this._on( element, {

- 			mouseenter: function( event ) {

- 				this._addClass( $( event.currentTarget ), null, "ui-state-hover" );

- 			},

- 			mouseleave: function( event ) {

- 				this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );

- 			}

- 		} );

- 	},

- 

- 	_focusable: function( element ) {

- 		this.focusable = this.focusable.add( element );

- 		this._on( element, {

- 			focusin: function( event ) {

- 				this._addClass( $( event.currentTarget ), null, "ui-state-focus" );

- 			},

- 			focusout: function( event ) {

- 				this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );

- 			}

- 		} );

- 	},

- 

- 	_trigger: function( type, event, data ) {

- 		var prop, orig;

- 		var callback = this.options[ type ];

- 

- 		data = data || {};

- 		event = $.Event( event );

- 		event.type = ( type === this.widgetEventPrefix ?

- 			type :

- 			this.widgetEventPrefix + type ).toLowerCase();

- 

- 		// The original event may come from any element

- 		// so we need to reset the target on the new event

- 		event.target = this.element[ 0 ];

- 

- 		// Copy original event properties over to the new event

- 		orig = event.originalEvent;

- 		if ( orig ) {

- 			for ( prop in orig ) {

- 				if ( !( prop in event ) ) {

- 					event[ prop ] = orig[ prop ];

- 				}

- 			}

- 		}

- 

- 		this.element.trigger( event, data );

- 		return !( $.isFunction( callback ) &&

- 			callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||

- 			event.isDefaultPrevented() );

- 	}

- };

- 

- $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {

- 	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {

- 		if ( typeof options === "string" ) {

- 			options = { effect: options };

- 		}

- 

- 		var hasOptions;

- 		var effectName = !options ?

- 			method :

- 			options === true || typeof options === "number" ?

- 				defaultEffect :

- 				options.effect || defaultEffect;

- 

- 		options = options || {};

- 		if ( typeof options === "number" ) {

- 			options = { duration: options };

- 		}

- 

- 		hasOptions = !$.isEmptyObject( options );

- 		options.complete = callback;

- 

- 		if ( options.delay ) {

- 			element.delay( options.delay );

- 		}

- 

- 		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {

- 			element[ method ]( options );

- 		} else if ( effectName !== method && element[ effectName ] ) {

- 			element[ effectName ]( options.duration, options.easing, callback );

- 		} else {

- 			element.queue( function( next ) {

- 				$( this )[ method ]();

- 				if ( callback ) {

- 					callback.call( element[ 0 ] );

- 				}

- 				next();

- 			} );

- 		}

- 	};

- } );

- 

- var widget = $.widget;

- 

- 

- /*!

-  * jQuery UI Position 1.12.0

-  * http://jqueryui.com

-  *

-  * Copyright jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  *

-  * http://api.jqueryui.com/position/

-  */

- 

- //>>label: Position

- //>>group: Core

- //>>description: Positions elements relative to other elements.

- //>>docs: http://api.jqueryui.com/position/

- //>>demos: http://jqueryui.com/position/

- 

- 

- ( function() {

- var cachedScrollbarWidth, supportsOffsetFractions,

- 	max = Math.max,

- 	abs = Math.abs,

- 	round = Math.round,

- 	rhorizontal = /left|center|right/,

- 	rvertical = /top|center|bottom/,

- 	roffset = /[\+\-]\d+(\.[\d]+)?%?/,

- 	rposition = /^\w+/,

- 	rpercent = /%$/,

- 	_position = $.fn.position;

- 

- // Support: IE <=9 only

- supportsOffsetFractions = function() {

- 	var element = $( "<div>" )

- 			.css( "position", "absolute" )

- 			.appendTo( "body" )

- 			.offset( {

- 				top: 1.5,

- 				left: 1.5

- 			} ),

- 		support = element.offset().top === 1.5;

- 

- 	element.remove();

- 

- 	supportsOffsetFractions = function() {

- 		return support;

- 	};

- 

- 	return support;

- };

- 

- function getOffsets( offsets, width, height ) {

- 	return [

- 		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),

- 		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )

- 	];

- }

- 

- function parseCss( element, property ) {

- 	return parseInt( $.css( element, property ), 10 ) || 0;

- }

- 

- function getDimensions( elem ) {

- 	var raw = elem[ 0 ];

- 	if ( raw.nodeType === 9 ) {

- 		return {

- 			width: elem.width(),

- 			height: elem.height(),

- 			offset: { top: 0, left: 0 }

- 		};

- 	}

- 	if ( $.isWindow( raw ) ) {

- 		return {

- 			width: elem.width(),

- 			height: elem.height(),

- 			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }

- 		};

- 	}

- 	if ( raw.preventDefault ) {

- 		return {

- 			width: 0,

- 			height: 0,

- 			offset: { top: raw.pageY, left: raw.pageX }

- 		};

- 	}

- 	return {

- 		width: elem.outerWidth(),

- 		height: elem.outerHeight(),

- 		offset: elem.offset()

- 	};

- }

- 

- $.position = {

- 	scrollbarWidth: function() {

- 		if ( cachedScrollbarWidth !== undefined ) {

- 			return cachedScrollbarWidth;

- 		}

- 		var w1, w2,

- 			div = $( "<div " +

- 				"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +

- 				"<div style='height:100px;width:auto;'></div></div>" ),

- 			innerDiv = div.children()[ 0 ];

- 

- 		$( "body" ).append( div );

- 		w1 = innerDiv.offsetWidth;

- 		div.css( "overflow", "scroll" );

- 

- 		w2 = innerDiv.offsetWidth;

- 

- 		if ( w1 === w2 ) {

- 			w2 = div[ 0 ].clientWidth;

- 		}

- 

- 		div.remove();

- 

- 		return ( cachedScrollbarWidth = w1 - w2 );

- 	},

- 	getScrollInfo: function( within ) {

- 		var overflowX = within.isWindow || within.isDocument ? "" :

- 				within.element.css( "overflow-x" ),

- 			overflowY = within.isWindow || within.isDocument ? "" :

- 				within.element.css( "overflow-y" ),

- 			hasOverflowX = overflowX === "scroll" ||

- 				( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),

- 			hasOverflowY = overflowY === "scroll" ||

- 				( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );

- 		return {

- 			width: hasOverflowY ? $.position.scrollbarWidth() : 0,

- 			height: hasOverflowX ? $.position.scrollbarWidth() : 0

- 		};

- 	},

- 	getWithinInfo: function( element ) {

- 		var withinElement = $( element || window ),

- 			isWindow = $.isWindow( withinElement[ 0 ] ),

- 			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,

- 			hasOffset = !isWindow && !isDocument;

- 		return {

- 			element: withinElement,

- 			isWindow: isWindow,

- 			isDocument: isDocument,

- 			offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },

- 			scrollLeft: withinElement.scrollLeft(),

- 			scrollTop: withinElement.scrollTop(),

- 			width: withinElement.outerWidth(),

- 			height: withinElement.outerHeight()

- 		};

- 	}

- };

- 

- $.fn.position = function( options ) {

- 	if ( !options || !options.of ) {

- 		return _position.apply( this, arguments );

- 	}

- 

- 	// Make a copy, we don't want to modify arguments

- 	options = $.extend( {}, options );

- 

- 	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,

- 		target = $( options.of ),

- 		within = $.position.getWithinInfo( options.within ),

- 		scrollInfo = $.position.getScrollInfo( within ),

- 		collision = ( options.collision || "flip" ).split( " " ),

- 		offsets = {};

- 

- 	dimensions = getDimensions( target );

- 	if ( target[ 0 ].preventDefault ) {

- 

- 		// Force left top to allow flipping

- 		options.at = "left top";

- 	}

- 	targetWidth = dimensions.width;

- 	targetHeight = dimensions.height;

- 	targetOffset = dimensions.offset;

- 

- 	// Clone to reuse original targetOffset later

- 	basePosition = $.extend( {}, targetOffset );

- 

- 	// Force my and at to have valid horizontal and vertical positions

- 	// if a value is missing or invalid, it will be converted to center

- 	$.each( [ "my", "at" ], function() {

- 		var pos = ( options[ this ] || "" ).split( " " ),

- 			horizontalOffset,

- 			verticalOffset;

- 

- 		if ( pos.length === 1 ) {

- 			pos = rhorizontal.test( pos[ 0 ] ) ?

- 				pos.concat( [ "center" ] ) :

- 				rvertical.test( pos[ 0 ] ) ?

- 					[ "center" ].concat( pos ) :

- 					[ "center", "center" ];

- 		}

- 		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";

- 		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";

- 

- 		// Calculate offsets

- 		horizontalOffset = roffset.exec( pos[ 0 ] );

- 		verticalOffset = roffset.exec( pos[ 1 ] );

- 		offsets[ this ] = [

- 			horizontalOffset ? horizontalOffset[ 0 ] : 0,

- 			verticalOffset ? verticalOffset[ 0 ] : 0

- 		];

- 

- 		// Reduce to just the positions without the offsets

- 		options[ this ] = [

- 			rposition.exec( pos[ 0 ] )[ 0 ],

- 			rposition.exec( pos[ 1 ] )[ 0 ]

- 		];

- 	} );

- 

- 	// Normalize collision option

- 	if ( collision.length === 1 ) {

- 		collision[ 1 ] = collision[ 0 ];

- 	}

- 

- 	if ( options.at[ 0 ] === "right" ) {

- 		basePosition.left += targetWidth;

- 	} else if ( options.at[ 0 ] === "center" ) {

- 		basePosition.left += targetWidth / 2;

- 	}

- 

- 	if ( options.at[ 1 ] === "bottom" ) {

- 		basePosition.top += targetHeight;

- 	} else if ( options.at[ 1 ] === "center" ) {

- 		basePosition.top += targetHeight / 2;

- 	}

- 

- 	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );

- 	basePosition.left += atOffset[ 0 ];

- 	basePosition.top += atOffset[ 1 ];

- 

- 	return this.each( function() {

- 		var collisionPosition, using,

- 			elem = $( this ),

- 			elemWidth = elem.outerWidth(),

- 			elemHeight = elem.outerHeight(),

- 			marginLeft = parseCss( this, "marginLeft" ),

- 			marginTop = parseCss( this, "marginTop" ),

- 			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +

- 				scrollInfo.width,

- 			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +

- 				scrollInfo.height,

- 			position = $.extend( {}, basePosition ),

- 			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );

- 

- 		if ( options.my[ 0 ] === "right" ) {

- 			position.left -= elemWidth;

- 		} else if ( options.my[ 0 ] === "center" ) {

- 			position.left -= elemWidth / 2;

- 		}

- 

- 		if ( options.my[ 1 ] === "bottom" ) {

- 			position.top -= elemHeight;

- 		} else if ( options.my[ 1 ] === "center" ) {

- 			position.top -= elemHeight / 2;

- 		}

- 

- 		position.left += myOffset[ 0 ];

- 		position.top += myOffset[ 1 ];

- 

- 		// If the browser doesn't support fractions, then round for consistent results

- 		if ( !supportsOffsetFractions() ) {

- 			position.left = round( position.left );

- 			position.top = round( position.top );

- 		}

- 

- 		collisionPosition = {

- 			marginLeft: marginLeft,

- 			marginTop: marginTop

- 		};

- 

- 		$.each( [ "left", "top" ], function( i, dir ) {

- 			if ( $.ui.position[ collision[ i ] ] ) {

- 				$.ui.position[ collision[ i ] ][ dir ]( position, {

- 					targetWidth: targetWidth,

- 					targetHeight: targetHeight,

- 					elemWidth: elemWidth,

- 					elemHeight: elemHeight,

- 					collisionPosition: collisionPosition,

- 					collisionWidth: collisionWidth,

- 					collisionHeight: collisionHeight,

- 					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],

- 					my: options.my,

- 					at: options.at,

- 					within: within,

- 					elem: elem

- 				} );

- 			}

- 		} );

- 

- 		if ( options.using ) {

- 

- 			// Adds feedback as second argument to using callback, if present

- 			using = function( props ) {

- 				var left = targetOffset.left - position.left,

- 					right = left + targetWidth - elemWidth,

- 					top = targetOffset.top - position.top,

- 					bottom = top + targetHeight - elemHeight,

- 					feedback = {

- 						target: {

- 							element: target,

- 							left: targetOffset.left,

- 							top: targetOffset.top,

- 							width: targetWidth,

- 							height: targetHeight

- 						},

- 						element: {

- 							element: elem,

- 							left: position.left,

- 							top: position.top,

- 							width: elemWidth,

- 							height: elemHeight

- 						},

- 						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",

- 						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"

- 					};

- 				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {

- 					feedback.horizontal = "center";

- 				}

- 				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {

- 					feedback.vertical = "middle";

- 				}

- 				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {

- 					feedback.important = "horizontal";

- 				} else {

- 					feedback.important = "vertical";

- 				}

- 				options.using.call( this, props, feedback );

- 			};

- 		}

- 

- 		elem.offset( $.extend( position, { using: using } ) );

- 	} );

- };

- 

- $.ui.position = {

- 	fit: {

- 		left: function( position, data ) {

- 			var within = data.within,

- 				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,

- 				outerWidth = within.width,

- 				collisionPosLeft = position.left - data.collisionPosition.marginLeft,

- 				overLeft = withinOffset - collisionPosLeft,

- 				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,

- 				newOverRight;

- 

- 			// Element is wider than within

- 			if ( data.collisionWidth > outerWidth ) {

- 

- 				// Element is initially over the left side of within

- 				if ( overLeft > 0 && overRight <= 0 ) {

- 					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -

- 						withinOffset;

- 					position.left += overLeft - newOverRight;

- 

- 				// Element is initially over right side of within

- 				} else if ( overRight > 0 && overLeft <= 0 ) {

- 					position.left = withinOffset;

- 

- 				// Element is initially over both left and right sides of within

- 				} else {

- 					if ( overLeft > overRight ) {

- 						position.left = withinOffset + outerWidth - data.collisionWidth;

- 					} else {

- 						position.left = withinOffset;

- 					}

- 				}

- 

- 			// Too far left -> align with left edge

- 			} else if ( overLeft > 0 ) {

- 				position.left += overLeft;

- 

- 			// Too far right -> align with right edge

- 			} else if ( overRight > 0 ) {

- 				position.left -= overRight;

- 

- 			// Adjust based on position and margin

- 			} else {

- 				position.left = max( position.left - collisionPosLeft, position.left );

- 			}

- 		},

- 		top: function( position, data ) {

- 			var within = data.within,

- 				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,

- 				outerHeight = data.within.height,

- 				collisionPosTop = position.top - data.collisionPosition.marginTop,

- 				overTop = withinOffset - collisionPosTop,

- 				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,

- 				newOverBottom;

- 

- 			// Element is taller than within

- 			if ( data.collisionHeight > outerHeight ) {

- 

- 				// Element is initially over the top of within

- 				if ( overTop > 0 && overBottom <= 0 ) {

- 					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -

- 						withinOffset;

- 					position.top += overTop - newOverBottom;

- 

- 				// Element is initially over bottom of within

- 				} else if ( overBottom > 0 && overTop <= 0 ) {

- 					position.top = withinOffset;

- 

- 				// Element is initially over both top and bottom of within

- 				} else {

- 					if ( overTop > overBottom ) {

- 						position.top = withinOffset + outerHeight - data.collisionHeight;

- 					} else {

- 						position.top = withinOffset;

- 					}

- 				}

- 

- 			// Too far up -> align with top

- 			} else if ( overTop > 0 ) {

- 				position.top += overTop;

- 

- 			// Too far down -> align with bottom edge

- 			} else if ( overBottom > 0 ) {

- 				position.top -= overBottom;

- 

- 			// Adjust based on position and margin

- 			} else {

- 				position.top = max( position.top - collisionPosTop, position.top );

- 			}

- 		}

- 	},

- 	flip: {

- 		left: function( position, data ) {

- 			var within = data.within,

- 				withinOffset = within.offset.left + within.scrollLeft,

- 				outerWidth = within.width,

- 				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,

- 				collisionPosLeft = position.left - data.collisionPosition.marginLeft,

- 				overLeft = collisionPosLeft - offsetLeft,

- 				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,

- 				myOffset = data.my[ 0 ] === "left" ?

- 					-data.elemWidth :

- 					data.my[ 0 ] === "right" ?

- 						data.elemWidth :

- 						0,

- 				atOffset = data.at[ 0 ] === "left" ?

- 					data.targetWidth :

- 					data.at[ 0 ] === "right" ?

- 						-data.targetWidth :

- 						0,

- 				offset = -2 * data.offset[ 0 ],

- 				newOverRight,

- 				newOverLeft;

- 

- 			if ( overLeft < 0 ) {

- 				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -

- 					outerWidth - withinOffset;

- 				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {

- 					position.left += myOffset + atOffset + offset;

- 				}

- 			} else if ( overRight > 0 ) {

- 				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +

- 					atOffset + offset - offsetLeft;

- 				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {

- 					position.left += myOffset + atOffset + offset;

- 				}

- 			}

- 		},

- 		top: function( position, data ) {

- 			var within = data.within,

- 				withinOffset = within.offset.top + within.scrollTop,

- 				outerHeight = within.height,

- 				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,

- 				collisionPosTop = position.top - data.collisionPosition.marginTop,

- 				overTop = collisionPosTop - offsetTop,

- 				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,

- 				top = data.my[ 1 ] === "top",

- 				myOffset = top ?

- 					-data.elemHeight :

- 					data.my[ 1 ] === "bottom" ?

- 						data.elemHeight :

- 						0,

- 				atOffset = data.at[ 1 ] === "top" ?

- 					data.targetHeight :

- 					data.at[ 1 ] === "bottom" ?

- 						-data.targetHeight :

- 						0,

- 				offset = -2 * data.offset[ 1 ],

- 				newOverTop,

- 				newOverBottom;

- 			if ( overTop < 0 ) {

- 				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -

- 					outerHeight - withinOffset;

- 				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {

- 					position.top += myOffset + atOffset + offset;

- 				}

- 			} else if ( overBottom > 0 ) {

- 				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +

- 					offset - offsetTop;

- 				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {

- 					position.top += myOffset + atOffset + offset;

- 				}

- 			}

- 		}

- 	},

- 	flipfit: {

- 		left: function() {

- 			$.ui.position.flip.left.apply( this, arguments );

- 			$.ui.position.fit.left.apply( this, arguments );

- 		},

- 		top: function() {

- 			$.ui.position.flip.top.apply( this, arguments );

- 			$.ui.position.fit.top.apply( this, arguments );

- 		}

- 	}

- };

- 

- } )();

- 

- var position = $.ui.position;

- 

- 

- /*!

-  * jQuery UI :data 1.12.0

-  * http://jqueryui.com

-  *

-  * Copyright jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  */

- 

- //>>label: :data Selector

- //>>group: Core

- //>>description: Selects elements which have data stored under the specified key.

- //>>docs: http://api.jqueryui.com/data-selector/

- 

- 

- var data = $.extend( $.expr[ ":" ], {

- 	data: $.expr.createPseudo ?

- 		$.expr.createPseudo( function( dataName ) {

- 			return function( elem ) {

- 				return !!$.data( elem, dataName );

- 			};

- 		} ) :

- 

- 		// Support: jQuery <1.8

- 		function( elem, i, match ) {

- 			return !!$.data( elem, match[ 3 ] );

- 		}

- } );

- 

- /*!

-  * jQuery UI Disable Selection 1.12.0

-  * http://jqueryui.com

-  *

-  * Copyright jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  */

- 

- //>>label: disableSelection

- //>>group: Core

- //>>description: Disable selection of text content within the set of matched elements.

- //>>docs: http://api.jqueryui.com/disableSelection/

- 

- // This file is deprecated

- 

- 

- var disableSelection = $.fn.extend( {

- 	disableSelection: ( function() {

- 		var eventType = "onselectstart" in document.createElement( "div" ) ?

- 			"selectstart" :

- 			"mousedown";

- 

- 		return function() {

- 			return this.on( eventType + ".ui-disableSelection", function( event ) {

- 				event.preventDefault();

- 			} );

- 		};

- 	} )(),

- 

- 	enableSelection: function() {

- 		return this.off( ".ui-disableSelection" );

- 	}

- } );

- 

- 

- /*!

-  * jQuery UI Effects 1.12.0

-  * http://jqueryui.com

-  *

-  * Copyright jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  */

- 

- //>>label: Effects Core

- //>>group: Effects

- // jscs:disable maximumLineLength

- //>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.

- // jscs:enable maximumLineLength

- //>>docs: http://api.jqueryui.com/category/effects-core/

- //>>demos: http://jqueryui.com/effect/

- 

- 

- 

- var dataSpace = "ui-effects-",

- 	dataSpaceStyle = "ui-effects-style",

- 	dataSpaceAnimated = "ui-effects-animated",

- 

- 	// Create a local jQuery because jQuery Color relies on it and the

- 	// global may not exist with AMD and a custom build (#10199)

- 	jQuery = $;

- 

- $.effects = {

- 	effect: {}

- };

- 

- /*!

-  * jQuery Color Animations v2.1.2

-  * https://github.com/jquery/jquery-color

-  *

-  * Copyright 2014 jQuery Foundation and other contributors

-  * Released under the MIT license.

-  * http://jquery.org/license

-  *

-  * Date: Wed Jan 16 08:47:09 2013 -0600

-  */

- ( function( jQuery, undefined ) {

- 

- 	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +

- 		"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",

- 

- 	// Plusequals test for += 100 -= 100

- 	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,

- 

- 	// A set of RE's that can match strings and generate color tuples.

- 	stringParsers = [ {

- 			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,

- 			parse: function( execResult ) {

- 				return [

- 					execResult[ 1 ],

- 					execResult[ 2 ],

- 					execResult[ 3 ],

- 					execResult[ 4 ]

- 				];

- 			}

- 		}, {

- 			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,

- 			parse: function( execResult ) {

- 				return [

- 					execResult[ 1 ] * 2.55,

- 					execResult[ 2 ] * 2.55,

- 					execResult[ 3 ] * 2.55,

- 					execResult[ 4 ]

- 				];

- 			}

- 		}, {

- 

- 			// This regex ignores A-F because it's compared against an already lowercased string

- 			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,

- 			parse: function( execResult ) {

- 				return [

- 					parseInt( execResult[ 1 ], 16 ),

- 					parseInt( execResult[ 2 ], 16 ),

- 					parseInt( execResult[ 3 ], 16 )

- 				];

- 			}

- 		}, {

- 

- 			// This regex ignores A-F because it's compared against an already lowercased string

- 			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,

- 			parse: function( execResult ) {

- 				return [

- 					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),

- 					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),

- 					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )

- 				];

- 			}

- 		}, {

- 			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,

- 			space: "hsla",

- 			parse: function( execResult ) {

- 				return [

- 					execResult[ 1 ],

- 					execResult[ 2 ] / 100,

- 					execResult[ 3 ] / 100,

- 					execResult[ 4 ]

- 				];

- 			}

- 		} ],

- 

- 	// JQuery.Color( )

- 	color = jQuery.Color = function( color, green, blue, alpha ) {

- 		return new jQuery.Color.fn.parse( color, green, blue, alpha );

- 	},

- 	spaces = {

- 		rgba: {

- 			props: {

- 				red: {

- 					idx: 0,

- 					type: "byte"

- 				},

- 				green: {

- 					idx: 1,

- 					type: "byte"

- 				},

- 				blue: {

- 					idx: 2,

- 					type: "byte"

- 				}

- 			}

- 		},

- 

- 		hsla: {

- 			props: {

- 				hue: {

- 					idx: 0,

- 					type: "degrees"

- 				},

- 				saturation: {

- 					idx: 1,

- 					type: "percent"

- 				},

- 				lightness: {

- 					idx: 2,

- 					type: "percent"

- 				}

- 			}

- 		}

- 	},

- 	propTypes = {

- 		"byte": {

- 			floor: true,

- 			max: 255

- 		},

- 		"percent": {

- 			max: 1

- 		},

- 		"degrees": {

- 			mod: 360,

- 			floor: true

- 		}

- 	},

- 	support = color.support = {},

- 

- 	// Element for support tests

- 	supportElem = jQuery( "<p>" )[ 0 ],

- 

- 	// Colors = jQuery.Color.names

- 	colors,

- 

- 	// Local aliases of functions called often

- 	each = jQuery.each;

- 

- // Determine rgba support immediately

- supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";

- support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;

- 

- // Define cache name and alpha properties

- // for rgba and hsla spaces

- each( spaces, function( spaceName, space ) {

- 	space.cache = "_" + spaceName;

- 	space.props.alpha = {

- 		idx: 3,

- 		type: "percent",

- 		def: 1

- 	};

- } );

- 

- function clamp( value, prop, allowEmpty ) {

- 	var type = propTypes[ prop.type ] || {};

<