Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

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