Subversion-Projekte lars-tiefland.cienc

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
5 lars 1
/*! jQuery UI - v1.11.4+CommonJS - 2015-08-28
2
* http://jqueryui.com
3
* Includes: widget.js
4
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
5
 
6
(function( factory ) {
7
	if ( typeof define === "function" && define.amd ) {
8
 
9
		// AMD. Register as an anonymous module.
10
		define([ "jquery" ], factory );
11
 
12
	} else if ( typeof exports === "object" ) {
13
 
14
		// Node/CommonJS
15
		factory( require( "jquery" ) );
16
 
17
	} else {
18
 
19
		// Browser globals
20
		factory( jQuery );
21
	}
22
}(function( $ ) {
23
/*!
24
 * jQuery UI Widget 1.11.4
25
 * http://jqueryui.com
26
 *
27
 * Copyright jQuery Foundation and other contributors
28
 * Released under the MIT license.
29
 * http://jquery.org/license
30
 *
31
 * http://api.jqueryui.com/jQuery.widget/
32
 */
33
 
34
 
35
var widget_uuid = 0,
36
	widget_slice = Array.prototype.slice;
37
 
38
$.cleanData = (function( orig ) {
39
	return function( elems ) {
40
		var events, elem, i;
41
		for ( i = 0; (elem = elems[i]) != null; i++ ) {
42
			try {
43
 
44
				// Only trigger remove when necessary to save time
45
				events = $._data( elem, "events" );
46
				if ( events && events.remove ) {
47
					$( elem ).triggerHandler( "remove" );
48
				}
49
 
50
			// http://bugs.jquery.com/ticket/8235
51
			} catch ( e ) {}
52
		}
53
		orig( elems );
54
	};
55
})( $.cleanData );
56
 
57
$.widget = function( name, base, prototype ) {
58
	var fullName, existingConstructor, constructor, basePrototype,
59
		// proxiedPrototype allows the provided prototype to remain unmodified
60
		// so that it can be used as a mixin for multiple widgets (#8876)
61
		proxiedPrototype = {},
62
		namespace = name.split( "." )[ 0 ];
63
 
64
	name = name.split( "." )[ 1 ];
65
	fullName = namespace + "-" + name;
66
 
67
	if ( !prototype ) {
68
		prototype = base;
69
		base = $.Widget;
70
	}
71
 
72
	// create selector for plugin
73
	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
74
		return !!$.data( elem, fullName );
75
	};
76
 
77
	$[ namespace ] = $[ namespace ] || {};
78
	existingConstructor = $[ namespace ][ name ];
79
	constructor = $[ namespace ][ name ] = function( options, element ) {
80
		// allow instantiation without "new" keyword
81
		if ( !this._createWidget ) {
82
			return new constructor( options, element );
83
		}
84
 
85
		// allow instantiation without initializing for simple inheritance
86
		// must use "new" keyword (the code above always passes args)
87
		if ( arguments.length ) {
88
			this._createWidget( options, element );
89
		}
90
	};
91
	// extend with the existing constructor to carry over any static properties
92
	$.extend( constructor, existingConstructor, {
93
		version: prototype.version,
94
		// copy the object used to create the prototype in case we need to
95
		// redefine the widget later
96
		_proto: $.extend( {}, prototype ),
97
		// track widgets that inherit from this widget in case this widget is
98
		// redefined after a widget inherits from it
99
		_childConstructors: []
100
	});
101
 
102
	basePrototype = new base();
103
	// we need to make the options hash a property directly on the new instance
104
	// otherwise we'll modify the options hash on the prototype that we're
105
	// inheriting from
106
	basePrototype.options = $.widget.extend( {}, basePrototype.options );
107
	$.each( prototype, function( prop, value ) {
108
		if ( !$.isFunction( value ) ) {
109
			proxiedPrototype[ prop ] = value;
110
			return;
111
		}
112
		proxiedPrototype[ prop ] = (function() {
113
			var _super = function() {
114
					return base.prototype[ prop ].apply( this, arguments );
115
				},
116
				_superApply = function( args ) {
117
					return base.prototype[ prop ].apply( this, args );
118
				};
119
			return function() {
120
				var __super = this._super,
121
					__superApply = this._superApply,
122
					returnValue;
123
 
124
				this._super = _super;
125
				this._superApply = _superApply;
126
 
127
				returnValue = value.apply( this, arguments );
128
 
129
				this._super = __super;
130
				this._superApply = __superApply;
131
 
132
				return returnValue;
133
			};
134
		})();
135
	});
136
	constructor.prototype = $.widget.extend( basePrototype, {
137
		// TODO: remove support for widgetEventPrefix
138
		// always use the name + a colon as the prefix, e.g., draggable:start
139
		// don't prefix for widgets that aren't DOM-based
140
		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
141
	}, proxiedPrototype, {
142
		constructor: constructor,
143
		namespace: namespace,
144
		widgetName: name,
145
		widgetFullName: fullName
146
	});
147
 
148
	// If this widget is being redefined then we need to find all widgets that
149
	// are inheriting from it and redefine all of them so that they inherit from
150
	// the new version of this widget. We're essentially trying to replace one
151
	// level in the prototype chain.
152
	if ( existingConstructor ) {
153
		$.each( existingConstructor._childConstructors, function( i, child ) {
154
			var childPrototype = child.prototype;
155
 
156
			// redefine the child widget using the same prototype that was
157
			// originally used, but inherit from the new version of the base
158
			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
159
		});
160
		// remove the list of existing child constructors from the old constructor
161
		// so the old child constructors can be garbage collected
162
		delete existingConstructor._childConstructors;
163
	} else {
164
		base._childConstructors.push( constructor );
165
	}
166
 
167
	$.widget.bridge( name, constructor );
168
 
169
	return constructor;
170
};
171
 
172
$.widget.extend = function( target ) {
173
	var input = widget_slice.call( arguments, 1 ),
174
		inputIndex = 0,
175
		inputLength = input.length,
176
		key,
177
		value;
178
	for ( ; inputIndex < inputLength; inputIndex++ ) {
179
		for ( key in input[ inputIndex ] ) {
180
			value = input[ inputIndex ][ key ];
181
			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
182
				// Clone objects
183
				if ( $.isPlainObject( value ) ) {
184
					target[ key ] = $.isPlainObject( target[ key ] ) ?
185
						$.widget.extend( {}, target[ key ], value ) :
186
						// Don't extend strings, arrays, etc. with objects
187
						$.widget.extend( {}, value );
188
				// Copy everything else by reference
189
				} else {
190
					target[ key ] = value;
191
				}
192
			}
193
		}
194
	}
195
	return target;
196
};
197
 
198
$.widget.bridge = function( name, object ) {
199
	var fullName = object.prototype.widgetFullName || name;
200
	$.fn[ name ] = function( options ) {
201
		var isMethodCall = typeof options === "string",
202
			args = widget_slice.call( arguments, 1 ),
203
			returnValue = this;
204
 
205
		if ( isMethodCall ) {
206
			this.each(function() {
207
				var methodValue,
208
					instance = $.data( this, fullName );
209
				if ( options === "instance" ) {
210
					returnValue = instance;
211
					return false;
212
				}
213
				if ( !instance ) {
214
					return $.error( "cannot call methods on " + name + " prior to initialization; " +
215
						"attempted to call method '" + options + "'" );
216
				}
217
				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
218
					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
219
				}
220
				methodValue = instance[ options ].apply( instance, args );
221
				if ( methodValue !== instance && methodValue !== undefined ) {
222
					returnValue = methodValue && methodValue.jquery ?
223
						returnValue.pushStack( methodValue.get() ) :
224
						methodValue;
225
					return false;
226
				}
227
			});
228
		} else {
229
 
230
			// Allow multiple hashes to be passed on init
231
			if ( args.length ) {
232
				options = $.widget.extend.apply( null, [ options ].concat(args) );
233
			}
234
 
235
			this.each(function() {
236
				var instance = $.data( this, fullName );
237
				if ( instance ) {
238
					instance.option( options || {} );
239
					if ( instance._init ) {
240
						instance._init();
241
					}
242
				} else {
243
					$.data( this, fullName, new object( options, this ) );
244
				}
245
			});
246
		}
247
 
248
		return returnValue;
249
	};
250
};
251
 
252
$.Widget = function( /* options, element */ ) {};
253
$.Widget._childConstructors = [];
254
 
255
$.Widget.prototype = {
256
	widgetName: "widget",
257
	widgetEventPrefix: "",
258
	defaultElement: "<div>",
259
	options: {
260
		disabled: false,
261
 
262
		// callbacks
263
		create: null
264
	},
265
	_createWidget: function( options, element ) {
266
		element = $( element || this.defaultElement || this )[ 0 ];
267
		this.element = $( element );
268
		this.uuid = widget_uuid++;
269
		this.eventNamespace = "." + this.widgetName + this.uuid;
270
 
271
		this.bindings = $();
272
		this.hoverable = $();
273
		this.focusable = $();
274
 
275
		if ( element !== this ) {
276
			$.data( element, this.widgetFullName, this );
277
			this._on( true, this.element, {
278
				remove: function( event ) {
279
					if ( event.target === element ) {
280
						this.destroy();
281
					}
282
				}
283
			});
284
			this.document = $( element.style ?
285
				// element within the document
286
				element.ownerDocument :
287
				// element is window or document
288
				element.document || element );
289
			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
290
		}
291
 
292
		this.options = $.widget.extend( {},
293
			this.options,
294
			this._getCreateOptions(),
295
			options );
296
 
297
		this._create();
298
		this._trigger( "create", null, this._getCreateEventData() );
299
		this._init();
300
	},
301
	_getCreateOptions: $.noop,
302
	_getCreateEventData: $.noop,
303
	_create: $.noop,
304
	_init: $.noop,
305
 
306
	destroy: function() {
307
		this._destroy();
308
		// we can probably remove the unbind calls in 2.0
309
		// all event bindings should go through this._on()
310
		this.element
311
			.unbind( this.eventNamespace )
312
			.removeData( this.widgetFullName )
313
			// support: jquery <1.6.3
314
			// http://bugs.jquery.com/ticket/9413
315
			.removeData( $.camelCase( this.widgetFullName ) );
316
		this.widget()
317
			.unbind( this.eventNamespace )
318
			.removeAttr( "aria-disabled" )
319
			.removeClass(
320
				this.widgetFullName + "-disabled " +
321
				"ui-state-disabled" );
322
 
323
		// clean up events and states
324
		this.bindings.unbind( this.eventNamespace );
325
		this.hoverable.removeClass( "ui-state-hover" );
326
		this.focusable.removeClass( "ui-state-focus" );
327
	},
328
	_destroy: $.noop,
329
 
330
	widget: function() {
331
		return this.element;
332
	},
333
 
334
	option: function( key, value ) {
335
		var options = key,
336
			parts,
337
			curOption,
338
			i;
339
 
340
		if ( arguments.length === 0 ) {
341
			// don't return a reference to the internal hash
342
			return $.widget.extend( {}, this.options );
343
		}
344
 
345
		if ( typeof key === "string" ) {
346
			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
347
			options = {};
348
			parts = key.split( "." );
349
			key = parts.shift();
350
			if ( parts.length ) {
351
				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
352
				for ( i = 0; i < parts.length - 1; i++ ) {
353
					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
354
					curOption = curOption[ parts[ i ] ];
355
				}
356
				key = parts.pop();
357
				if ( arguments.length === 1 ) {
358
					return curOption[ key ] === undefined ? null : curOption[ key ];
359
				}
360
				curOption[ key ] = value;
361
			} else {
362
				if ( arguments.length === 1 ) {
363
					return this.options[ key ] === undefined ? null : this.options[ key ];
364
				}
365
				options[ key ] = value;
366
			}
367
		}
368
 
369
		this._setOptions( options );
370
 
371
		return this;
372
	},
373
	_setOptions: function( options ) {
374
		var key;
375
 
376
		for ( key in options ) {
377
			this._setOption( key, options[ key ] );
378
		}
379
 
380
		return this;
381
	},
382
	_setOption: function( key, value ) {
383
		this.options[ key ] = value;
384
 
385
		if ( key === "disabled" ) {
386
			this.widget()
387
				.toggleClass( this.widgetFullName + "-disabled", !!value );
388
 
389
			// If the widget is becoming disabled, then nothing is interactive
390
			if ( value ) {
391
				this.hoverable.removeClass( "ui-state-hover" );
392
				this.focusable.removeClass( "ui-state-focus" );
393
			}
394
		}
395
 
396
		return this;
397
	},
398
 
399
	enable: function() {
400
		return this._setOptions({ disabled: false });
401
	},
402
	disable: function() {
403
		return this._setOptions({ disabled: true });
404
	},
405
 
406
	_on: function( suppressDisabledCheck, element, handlers ) {
407
		var delegateElement,
408
			instance = this;
409
 
410
		// no suppressDisabledCheck flag, shuffle arguments
411
		if ( typeof suppressDisabledCheck !== "boolean" ) {
412
			handlers = element;
413
			element = suppressDisabledCheck;
414
			suppressDisabledCheck = false;
415
		}
416
 
417
		// no element argument, shuffle and use this.element
418
		if ( !handlers ) {
419
			handlers = element;
420
			element = this.element;
421
			delegateElement = this.widget();
422
		} else {
423
			element = delegateElement = $( element );
424
			this.bindings = this.bindings.add( element );
425
		}
426
 
427
		$.each( handlers, function( event, handler ) {
428
			function handlerProxy() {
429
				// allow widgets to customize the disabled handling
430
				// - disabled as an array instead of boolean
431
				// - disabled class as method for disabling individual parts
432
				if ( !suppressDisabledCheck &&
433
						( instance.options.disabled === true ||
434
							$( this ).hasClass( "ui-state-disabled" ) ) ) {
435
					return;
436
				}
437
				return ( typeof handler === "string" ? instance[ handler ] : handler )
438
					.apply( instance, arguments );
439
			}
440
 
441
			// copy the guid so direct unbinding works
442
			if ( typeof handler !== "string" ) {
443
				handlerProxy.guid = handler.guid =
444
					handler.guid || handlerProxy.guid || $.guid++;
445
			}
446
 
447
			var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
448
				eventName = match[1] + instance.eventNamespace,
449
				selector = match[2];
450
			if ( selector ) {
451
				delegateElement.delegate( selector, eventName, handlerProxy );
452
			} else {
453
				element.bind( eventName, handlerProxy );
454
			}
455
		});
456
	},
457
 
458
	_off: function( element, eventName ) {
459
		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
460
			this.eventNamespace;
461
		element.unbind( eventName ).undelegate( eventName );
462
 
463
		// Clear the stack to avoid memory leaks (#10056)
464
		this.bindings = $( this.bindings.not( element ).get() );
465
		this.focusable = $( this.focusable.not( element ).get() );
466
		this.hoverable = $( this.hoverable.not( element ).get() );
467
	},
468
 
469
	_delay: function( handler, delay ) {
470
		function handlerProxy() {
471
			return ( typeof handler === "string" ? instance[ handler ] : handler )
472
				.apply( instance, arguments );
473
		}
474
		var instance = this;
475
		return setTimeout( handlerProxy, delay || 0 );
476
	},
477
 
478
	_hoverable: function( element ) {
479
		this.hoverable = this.hoverable.add( element );
480
		this._on( element, {
481
			mouseenter: function( event ) {
482
				$( event.currentTarget ).addClass( "ui-state-hover" );
483
			},
484
			mouseleave: function( event ) {
485
				$( event.currentTarget ).removeClass( "ui-state-hover" );
486
			}
487
		});
488
	},
489
 
490
	_focusable: function( element ) {
491
		this.focusable = this.focusable.add( element );
492
		this._on( element, {
493
			focusin: function( event ) {
494
				$( event.currentTarget ).addClass( "ui-state-focus" );
495
			},
496
			focusout: function( event ) {
497
				$( event.currentTarget ).removeClass( "ui-state-focus" );
498
			}
499
		});
500
	},
501
 
502
	_trigger: function( type, event, data ) {
503
		var prop, orig,
504
			callback = this.options[ type ];
505
 
506
		data = data || {};
507
		event = $.Event( event );
508
		event.type = ( type === this.widgetEventPrefix ?
509
			type :
510
			this.widgetEventPrefix + type ).toLowerCase();
511
		// the original event may come from any element
512
		// so we need to reset the target on the new event
513
		event.target = this.element[ 0 ];
514
 
515
		// copy original event properties over to the new event
516
		orig = event.originalEvent;
517
		if ( orig ) {
518
			for ( prop in orig ) {
519
				if ( !( prop in event ) ) {
520
					event[ prop ] = orig[ prop ];
521
				}
522
			}
523
		}
524
 
525
		this.element.trigger( event, data );
526
		return !( $.isFunction( callback ) &&
527
			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
528
			event.isDefaultPrevented() );
529
	}
530
};
531
 
532
$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
533
	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
534
		if ( typeof options === "string" ) {
535
			options = { effect: options };
536
		}
537
		var hasOptions,
538
			effectName = !options ?
539
				method :
540
				options === true || typeof options === "number" ?
541
					defaultEffect :
542
					options.effect || defaultEffect;
543
		options = options || {};
544
		if ( typeof options === "number" ) {
545
			options = { duration: options };
546
		}
547
		hasOptions = !$.isEmptyObject( options );
548
		options.complete = callback;
549
		if ( options.delay ) {
550
			element.delay( options.delay );
551
		}
552
		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
553
			element[ method ]( options );
554
		} else if ( effectName !== method && element[ effectName ] ) {
555
			element[ effectName ]( options.duration, options.easing, callback );
556
		} else {
557
			element.queue(function( next ) {
558
				$( this )[ method ]();
559
				if ( callback ) {
560
					callback.call( element[ 0 ] );
561
				}
562
				next();
563
			});
564
		}
565
	};
566
});
567
 
568
var widget = $.widget;
569
 
570
 
571
 
572
}));