annotate src/main/webapp/imageServer/resources/js/jquery-ui-1.10.4/ui/jquery.ui.widget.js @ 205:f719d73383db

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