--- /tmp/git-annex-8.20210223-2_mdrocpa/debian/git-annex_8.20210223-2_amd64.deb +++ git-annex_8.20210223-2_amd64.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2021-04-14 17:05:22.000000 debian-binary │ --rw-r--r-- 0 0 0 18228 2021-04-14 17:05:22.000000 control.tar.xz │ --rw-r--r-- 0 0 0 12537592 2021-04-14 17:05:22.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 18232 2021-04-14 17:05:22.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 12537196 2021-04-14 17:05:22.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -362,15 +362,15 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 2324 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/sandbox.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5400 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/scalability.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security/ │ │ │ -rw-r--r-- 0 root (0) root (0) 2721 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security/CVE-2014-6274.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2744 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security/CVE-2017-12976.html │ │ │ -rw-r--r-- 0 root (0) root (0) 6753 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security/CVE-2018-10857_and_CVE-2018-10859.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2822 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security/checksum_exposure_to_encrypted_special_remotes.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16745 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16751 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/security.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2367 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/shortcuts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 2261 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/sidebar.html │ │ │ -rw-r--r-- 0 root (0) root (0) 29469 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/sitemap.html │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/special_remotes/ │ │ │ -rw-r--r-- 0 root (0) root (0) 42871 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/special_remotes/S3.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5527 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/special_remotes/adb.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7665 2021-04-14 17:05:22.000000 ./usr/share/doc/git-annex/html/special_remotes/bittorrent.html │ │ ├── ./usr/bin/git-annex │ │ │ ├── readelf --wide --notes {} │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ │ │ │ │ Displaying notes found in: .note.ABI-tag │ │ │ │ Owner Data size Description │ │ │ │ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag) OS: Linux, ABI: 3.2.0 │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.build-id │ │ │ │ Owner Data size Description │ │ │ │ - GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 970536c9bd8a696bb141cbbb89b16a5f53698326 │ │ │ │ + GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 81c05ba836a049f2fb328054c2213f5855afe0b9 │ │ │ │ │ │ │ │ Displaying notes found in: .note.gnu.gold-version │ │ │ │ Owner Data size Description │ │ │ │ GNU 0x00000009 NT_GNU_GOLD_VERSION (gold version) Version: gold 1.16 │ │ │ ├── strings --all --bytes=8 {} │ │ │ │ @@ -8552,423 +8552,1272 @@ │ │ │ │ noscript │ │ │ │ NoScriptAutoR │ │ │ │ NoScriptR │ │ │ │ DashboardR │ │ │ │ syncicon.gif │ │ │ │ favicon.ico │ │ │ │ activityicon.gif │ │ │ │ -js/longpolling.js │ │ │ │ -connfails=0; │ │ │ │ -longpollcallbacks = $.Callbacks(); │ │ │ │ -// Updates a div with a specified id, by polling an url, │ │ │ │ -// which should return a new div, with the same id. │ │ │ │ -function longpoll_div(url, divid, cont, fail) { │ │ │ │ - $.ajax({ │ │ │ │ - 'url': url, │ │ │ │ - 'dataType': 'html', │ │ │ │ - 'success': function(data, status, jqxhr) { │ │ │ │ - $('#' + divid).replaceWith(data); │ │ │ │ - longpollcallbacks.fire(); │ │ │ │ - connfails=0; │ │ │ │ - cont(); │ │ │ │ - 'error': function(jqxhr, msg, e) { │ │ │ │ - connfails=connfails+1; │ │ │ │ - // It's normal to get 1 failure per longpolling │ │ │ │ - // element when navigating away from a page. │ │ │ │ - // So 12 allows up to 4 longpolling elements per │ │ │ │ - // page. │ │ │ │ - if (connfails > 12) { │ │ │ │ - fail(); │ │ │ │ - else { │ │ │ │ - cont(); │ │ │ │ -function longpoll_data(url, cont) { │ │ │ │ - $.ajax({ │ │ │ │ - 'url': url, │ │ │ │ - 'dataType': 'text', │ │ │ │ - 'success': function(data, status, jqxhr) { │ │ │ │ - connfails=0; │ │ │ │ - cont(1, data); │ │ │ │ - 'error': function(jqxhr, msg, e) { │ │ │ │ - connfails=connfails+1; │ │ │ │ - cont(0); │ │ │ │ -js/jquery.ui.widget.js │ │ │ │ - * jQuery UI Widget 1.10.4 │ │ │ │ - * http://jqueryui.com │ │ │ │ - * Copyright 2014 jQuery Foundation and other contributors │ │ │ │ - * Released under the MIT license. │ │ │ │ - * http://jquery.org/license │ │ │ │ - * http://api.jqueryui.com/jQuery.widget/ │ │ │ │ -(function( $, undefined ) { │ │ │ │ -var uuid = 0, │ │ │ │ - slice = Array.prototype.slice, │ │ │ │ - _cleanData = $.cleanData; │ │ │ │ -$.cleanData = function( elems ) { │ │ │ │ - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { │ │ │ │ - $( elem ).triggerHandler( "remove" ); │ │ │ │ - // http://bugs.jquery.com/ticket/8235 │ │ │ │ - } catch( e ) {} │ │ │ │ - _cleanData( elems ); │ │ │ │ -$.widget = function( name, base, prototype ) { │ │ │ │ - var fullName, existingConstructor, constructor, basePrototype, │ │ │ │ - // proxiedPrototype allows the provided prototype to remain unmodified │ │ │ │ - // so that it can be used as a mixin for multiple widgets (#8876) │ │ │ │ - proxiedPrototype = {}, │ │ │ │ - namespace = name.split( "." )[ 0 ]; │ │ │ │ - name = name.split( "." )[ 1 ]; │ │ │ │ - fullName = namespace + "-" + name; │ │ │ │ - if ( !prototype ) { │ │ │ │ - prototype = base; │ │ │ │ - base = $.Widget; │ │ │ │ - // 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() { │ │ │ │ - var _super = function() { │ │ │ │ - return base.prototype[ prop ].apply( this, arguments ); │ │ │ │ - _superApply = function( args ) { │ │ │ │ - return base.prototype[ prop ].apply( this, args ); │ │ │ │ - return function() { │ │ │ │ - var __super = this._super, │ │ │ │ - __superApply = this._superApply, │ │ │ │ - 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 ); │ │ │ │ -$.widget.extend = function( target ) { │ │ │ │ - var input = slice.call( arguments, 1 ), │ │ │ │ - inputIndex = 0, │ │ │ │ - inputLength = input.length, │ │ │ │ - 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", │ │ │ │ - args = slice.call( arguments, 1 ), │ │ │ │ - returnValue = this; │ │ │ │ - // allow multiple hashes to be passed on init │ │ │ │ - options = !isMethodCall && args.length ? │ │ │ │ - $.widget.extend.apply( null, [ options ].concat(args) ) : │ │ │ │ - options; │ │ │ │ - if ( isMethodCall ) { │ │ │ │ - this.each(function() { │ │ │ │ - var methodValue, │ │ │ │ - instance = $.data( this, fullName ); │ │ │ │ - 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 { │ │ │ │ - this.each(function() { │ │ │ │ - var instance = $.data( this, fullName ); │ │ │ │ - if ( instance ) { │ │ │ │ - instance.option( options || {} )._init(); │ │ │ │ - } else { │ │ │ │ - $.data( this, fullName, new object( options, this ) ); │ │ │ │ - return returnValue; │ │ │ │ -$.Widget = function( /* options, element */ ) {}; │ │ │ │ -$.Widget._childConstructors = []; │ │ │ │ -$.Widget.prototype = { │ │ │ │ - widgetName: "widget", │ │ │ │ - widgetEventPrefix: "", │ │ │ │ - defaultElement: "
", │ │ │ │ - options: { │ │ │ │ - disabled: false, │ │ │ │ - // callbacks │ │ │ │ - create: null │ │ │ │ - _createWidget: function( options, element ) { │ │ │ │ - element = $( element || this.defaultElement || this )[ 0 ]; │ │ │ │ - this.element = $( element ); │ │ │ │ - this.uuid = uuid++; │ │ │ │ - this.eventNamespace = "." + this.widgetName + this.uuid; │ │ │ │ - this.options = $.widget.extend( {}, │ │ │ │ - this.options, │ │ │ │ - this._getCreateOptions(), │ │ │ │ - options ); │ │ │ │ - this.bindings = $(); │ │ │ │ - this.hoverable = $(); │ │ │ │ - this.focusable = $(); │ │ │ │ - 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._create(); │ │ │ │ - this._trigger( "create", null, this._getCreateEventData() ); │ │ │ │ - this._init(); │ │ │ │ - _getCreateOptions: $.noop, │ │ │ │ - _getCreateEventData: $.noop, │ │ │ │ - _create: $.noop, │ │ │ │ - _init: $.noop, │ │ │ │ - destroy: function() { │ │ │ │ - this._destroy(); │ │ │ │ - // we can probably remove the unbind calls in 2.0 │ │ │ │ - // all event bindings should go through this._on() │ │ │ │ - this.element │ │ │ │ - .unbind( this.eventNamespace ) │ │ │ │ - // 1.9 BC for #7810 │ │ │ │ - // TODO remove dual storage │ │ │ │ - .removeData( this.widgetName ) │ │ │ │ - .removeData( this.widgetFullName ) │ │ │ │ - // support: jquery <1.6.3 │ │ │ │ - // http://bugs.jquery.com/ticket/9413 │ │ │ │ - .removeData( $.camelCase( this.widgetFullName ) ); │ │ │ │ - this.widget() │ │ │ │ - .unbind( this.eventNamespace ) │ │ │ │ - .removeAttr( "aria-disabled" ) │ │ │ │ - .removeClass( │ │ │ │ - this.widgetFullName + "-disabled " + │ │ │ │ - "ui-state-disabled" ); │ │ │ │ - // clean up events and states │ │ │ │ - this.bindings.unbind( this.eventNamespace ); │ │ │ │ - this.hoverable.removeClass( "ui-state-hover" ); │ │ │ │ - this.focusable.removeClass( "ui-state-focus" ); │ │ │ │ - _destroy: $.noop, │ │ │ │ - widget: function() { │ │ │ │ - return this.element; │ │ │ │ - option: function( key, value ) { │ │ │ │ - var options = key, │ │ │ │ - parts, │ │ │ │ - curOption, │ │ │ │ - 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 ) { │ │ │ │ - this.options[ key ] = value; │ │ │ │ - if ( key === "disabled" ) { │ │ │ │ - this.widget() │ │ │ │ - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) │ │ │ │ - .attr( "aria-disabled", value ); │ │ │ │ - this.hoverable.removeClass( "ui-state-hover" ); │ │ │ │ - this.focusable.removeClass( "ui-state-focus" ); │ │ │ │ - return this; │ │ │ │ - enable: function() { │ │ │ │ - return this._setOption( "disabled", false ); │ │ │ │ - disable: function() { │ │ │ │ - return this._setOption( "disabled", true ); │ │ │ │ - _on: function( suppressDisabledCheck, element, handlers ) { │ │ │ │ - var delegateElement, │ │ │ │ - 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 { │ │ │ │ - // accept selectors, DOM elements │ │ │ │ - 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*(.*)$/ ), │ │ │ │ - eventName = match[1] + instance.eventNamespace, │ │ │ │ - selector = match[2]; │ │ │ │ - if ( selector ) { │ │ │ │ - delegateElement.delegate( selector, eventName, handlerProxy ); │ │ │ │ - } else { │ │ │ │ - element.bind( eventName, handlerProxy ); │ │ │ │ - _off: function( element, eventName ) { │ │ │ │ - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; │ │ │ │ - element.unbind( eventName ).undelegate( eventName ); │ │ │ │ - _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 ) { │ │ │ │ - $( event.currentTarget ).addClass( "ui-state-hover" ); │ │ │ │ - mouseleave: function( event ) { │ │ │ │ - $( event.currentTarget ).removeClass( "ui-state-hover" ); │ │ │ │ - _focusable: function( element ) { │ │ │ │ - this.focusable = this.focusable.add( element ); │ │ │ │ - this._on( element, { │ │ │ │ - focusin: function( event ) { │ │ │ │ - $( event.currentTarget ).addClass( "ui-state-focus" ); │ │ │ │ - focusout: function( event ) { │ │ │ │ - $( event.currentTarget ).removeClass( "ui-state-focus" ); │ │ │ │ - _trigger: function( type, event, data ) { │ │ │ │ - var prop, orig, │ │ │ │ - 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, │ │ │ │ - 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(); │ │ │ │ -})( jQuery ); │ │ │ │ +js/bootstrap.js │ │ │ │ + * Bootstrap v3.1.1 (http://getbootstrap.com) │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: transition.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#transitions │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) │ │ │ │ + // ============================================================ │ │ │ │ + function transitionEnd() { │ │ │ │ + var el = document.createElement('bootstrap') │ │ │ │ + var transEndEventNames = { │ │ │ │ + 'WebkitTransition' : 'webkitTransitionEnd', │ │ │ │ + 'MozTransition' : 'transitionend', │ │ │ │ + 'OTransition' : 'oTransitionEnd otransitionend', │ │ │ │ + 'transition' : 'transitionend' │ │ │ │ + for (var name in transEndEventNames) { │ │ │ │ + if (el.style[name] !== undefined) { │ │ │ │ + return { end: transEndEventNames[name] } │ │ │ │ + return false // explicit for ie8 ( ._.) │ │ │ │ + // http://blog.alexmaccaw.com/css-transitions │ │ │ │ + $.fn.emulateTransitionEnd = function (duration) { │ │ │ │ + var called = false, $el = this │ │ │ │ + $(this).one($.support.transition.end, function () { called = true }) │ │ │ │ + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } │ │ │ │ + setTimeout(callback, duration) │ │ │ │ + return this │ │ │ │ + $(function () { │ │ │ │ + $.support.transition = transitionEnd() │ │ │ │ +}(jQuery); │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: alert.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#alerts │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // ALERT CLASS DEFINITION │ │ │ │ + // ====================== │ │ │ │ + var dismiss = '[data-dismiss="alert"]' │ │ │ │ + var Alert = function (el) { │ │ │ │ + $(el).on('click', dismiss, this.close) │ │ │ │ + Alert.prototype.close = function (e) { │ │ │ │ + var $this = $(this) │ │ │ │ + var selector = $this.attr('data-target') │ │ │ │ + if (!selector) { │ │ │ │ + selector = $this.attr('href') │ │ │ │ + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 │ │ │ │ + var $parent = $(selector) │ │ │ │ + if (e) e.preventDefault() │ │ │ │ + if (!$parent.length) { │ │ │ │ + $parent = $this.hasClass('alert') ? $this : $this.parent() │ │ │ │ + $parent.trigger(e = $.Event('close.bs.alert')) │ │ │ │ + if (e.isDefaultPrevented()) return │ │ │ │ + $parent.removeClass('in') │ │ │ │ + function removeElement() { │ │ │ │ + $parent.trigger('closed.bs.alert').remove() │ │ │ │ + $.support.transition && $parent.hasClass('fade') ? │ │ │ │ + $parent │ │ │ │ + .one($.support.transition.end, removeElement) │ │ │ │ + .emulateTransitionEnd(150) : │ │ │ │ + removeElement() │ │ │ │ + // ALERT PLUGIN DEFINITION │ │ │ │ + // ======================= │ │ │ │ + var old = $.fn.alert │ │ │ │ + $.fn.alert = function (option) { │ │ │ │ + return this.each(function () { │ │ │ │ + var $this = $(this) │ │ │ │ + var data = $this.data('bs.alert') │ │ │ │ + if (!data) $this.data('bs.alert', (data = new Alert(this))) │ │ │ │ + if (typeof option == 'string') data[option].call($this) │ │ │ │ + $.fn.alert.Constructor = Alert │ │ │ │ + // ALERT NO CONFLICT │ │ │ │ + // ================= │ │ │ │ + $.fn.alert.noConflict = function () { │ │ │ │ + $.fn.alert = old │ │ │ │ + return this │ │ │ │ + // ALERT DATA-API │ │ │ │ + // ============== │ │ │ │ + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) │ │ │ │ +}(jQuery); │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: button.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#buttons │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // BUTTON PUBLIC CLASS DEFINITION │ │ │ │ + // ============================== │ │ │ │ + var Button = function (element, options) { │ │ │ │ + this.$element = $(element) │ │ │ │ + this.options = $.extend({}, Button.DEFAULTS, options) │ │ │ │ + this.isLoading = false │ │ │ │ + Button.DEFAULTS = { │ │ │ │ + loadingText: 'loading...' │ │ │ │ + Button.prototype.setState = function (state) { │ │ │ │ + var d = 'disabled' │ │ │ │ + var $el = this.$element │ │ │ │ + var val = $el.is('input') ? 'val' : 'html' │ │ │ │ + var data = $el.data() │ │ │ │ + state = state + 'Text' │ │ │ │ + if (!data.resetText) $el.data('resetText', $el[val]()) │ │ │ │ + $el[val](data[state] || this.options[state]) │ │ │ │ + // push to event loop to allow forms to submit │ │ │ │ + setTimeout($.proxy(function () { │ │ │ │ + if (state == 'loadingText') { │ │ │ │ + this.isLoading = true │ │ │ │ + $el.addClass(d).attr(d, d) │ │ │ │ + } else if (this.isLoading) { │ │ │ │ + this.isLoading = false │ │ │ │ + $el.removeClass(d).removeAttr(d) │ │ │ │ + }, this), 0) │ │ │ │ + Button.prototype.toggle = function () { │ │ │ │ + var changed = true │ │ │ │ + var $parent = this.$element.closest('[data-toggle="buttons"]') │ │ │ │ + if ($parent.length) { │ │ │ │ + var $input = this.$element.find('input') │ │ │ │ + if ($input.prop('type') == 'radio') { │ │ │ │ + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false │ │ │ │ + else $parent.find('.active').removeClass('active') │ │ │ │ + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') │ │ │ │ + if (changed) this.$element.toggleClass('active') │ │ │ │ + // BUTTON PLUGIN DEFINITION │ │ │ │ + // ======================== │ │ │ │ + var old = $.fn.button │ │ │ │ + $.fn.button = function (option) { │ │ │ │ + return this.each(function () { │ │ │ │ + var $this = $(this) │ │ │ │ + var data = $this.data('bs.button') │ │ │ │ + var options = typeof option == 'object' && option │ │ │ │ + if (!data) $this.data('bs.button', (data = new Button(this, options))) │ │ │ │ + if (option == 'toggle') data.toggle() │ │ │ │ + else if (option) data.setState(option) │ │ │ │ + $.fn.button.Constructor = Button │ │ │ │ + // BUTTON NO CONFLICT │ │ │ │ + // ================== │ │ │ │ + $.fn.button.noConflict = function () { │ │ │ │ + $.fn.button = old │ │ │ │ + return this │ │ │ │ + // BUTTON DATA-API │ │ │ │ + // =============== │ │ │ │ + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { │ │ │ │ + var $btn = $(e.target) │ │ │ │ + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') │ │ │ │ + $btn.button('toggle') │ │ │ │ + e.preventDefault() │ │ │ │ +}(jQuery); │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: carousel.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#carousel │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // CAROUSEL CLASS DEFINITION │ │ │ │ + // ========================= │ │ │ │ + var Carousel = function (element, options) { │ │ │ │ + this.$element = $(element) │ │ │ │ + this.$indicators = this.$element.find('.carousel-indicators') │ │ │ │ + this.options = options │ │ │ │ + this.paused = │ │ │ │ + this.sliding = │ │ │ │ + this.interval = │ │ │ │ + this.$active = │ │ │ │ + this.$items = null │ │ │ │ + this.options.pause == 'hover' && this.$element │ │ │ │ + .on('mouseenter', $.proxy(this.pause, this)) │ │ │ │ + .on('mouseleave', $.proxy(this.cycle, this)) │ │ │ │ + Carousel.DEFAULTS = { │ │ │ │ + interval: 5000, │ │ │ │ + pause: 'hover', │ │ │ │ + wrap: true │ │ │ │ + Carousel.prototype.cycle = function (e) { │ │ │ │ + e || (this.paused = false) │ │ │ │ + this.interval && clearInterval(this.interval) │ │ │ │ + this.options.interval │ │ │ │ + && !this.paused │ │ │ │ + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) │ │ │ │ + return this │ │ │ │ + Carousel.prototype.getActiveIndex = function () { │ │ │ │ + this.$active = this.$element.find('.item.active') │ │ │ │ + this.$items = this.$active.parent().children() │ │ │ │ + return this.$items.index(this.$active) │ │ │ │ + Carousel.prototype.to = function (pos) { │ │ │ │ + var that = this │ │ │ │ + var activeIndex = this.getActiveIndex() │ │ │ │ + if (pos > (this.$items.length - 1) || pos < 0) return │ │ │ │ + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) │ │ │ │ + if (activeIndex == pos) return this.pause().cycle() │ │ │ │ + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) │ │ │ │ + Carousel.prototype.pause = function (e) { │ │ │ │ + e || (this.paused = true) │ │ │ │ + if (this.$element.find('.next, .prev').length && $.support.transition) { │ │ │ │ + this.$element.trigger($.support.transition.end) │ │ │ │ + this.cycle(true) │ │ │ │ + this.interval = clearInterval(this.interval) │ │ │ │ + return this │ │ │ │ + Carousel.prototype.next = function () { │ │ │ │ + if (this.sliding) return │ │ │ │ + return this.slide('next') │ │ │ │ + Carousel.prototype.prev = function () { │ │ │ │ + if (this.sliding) return │ │ │ │ + return this.slide('prev') │ │ │ │ + Carousel.prototype.slide = function (type, next) { │ │ │ │ + var $active = this.$element.find('.item.active') │ │ │ │ + var $next = next || $active[type]() │ │ │ │ + var isCycling = this.interval │ │ │ │ + var direction = type == 'next' ? 'left' : 'right' │ │ │ │ + var fallback = type == 'next' ? 'first' : 'last' │ │ │ │ + var that = this │ │ │ │ + if (!$next.length) { │ │ │ │ + if (!this.options.wrap) return │ │ │ │ + $next = this.$element.find('.item')[fallback]() │ │ │ │ + if ($next.hasClass('active')) return this.sliding = false │ │ │ │ + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) │ │ │ │ + this.$element.trigger(e) │ │ │ │ + if (e.isDefaultPrevented()) return │ │ │ │ + this.sliding = true │ │ │ │ + isCycling && this.pause() │ │ │ │ + if (this.$indicators.length) { │ │ │ │ + this.$indicators.find('.active').removeClass('active') │ │ │ │ + this.$element.one('slid.bs.carousel', function () { │ │ │ │ + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) │ │ │ │ + $nextIndicator && $nextIndicator.addClass('active') │ │ │ │ + }) │ │ │ │ + if ($.support.transition && this.$element.hasClass('slide')) { │ │ │ │ + $next.addClass(type) │ │ │ │ + $next[0].offsetWidth // force reflow │ │ │ │ + $active.addClass(direction) │ │ │ │ + $next.addClass(direction) │ │ │ │ + $active │ │ │ │ + .one($.support.transition.end, function () { │ │ │ │ + $next.removeClass([type, direction].join(' ')).addClass('active') │ │ │ │ + $active.removeClass(['active', direction].join(' ')) │ │ │ │ + that.sliding = false │ │ │ │ + setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) │ │ │ │ + }) │ │ │ │ + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) │ │ │ │ + } else { │ │ │ │ + $active.removeClass('active') │ │ │ │ + $next.addClass('active') │ │ │ │ + this.sliding = false │ │ │ │ + this.$element.trigger('slid.bs.carousel') │ │ │ │ + isCycling && this.cycle() │ │ │ │ + return this │ │ │ │ + // CAROUSEL PLUGIN DEFINITION │ │ │ │ + // ========================== │ │ │ │ + var old = $.fn.carousel │ │ │ │ + $.fn.carousel = function (option) { │ │ │ │ + return this.each(function () { │ │ │ │ + var $this = $(this) │ │ │ │ + var data = $this.data('bs.carousel') │ │ │ │ + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) │ │ │ │ + var action = typeof option == 'string' ? option : options.slide │ │ │ │ + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) │ │ │ │ + if (typeof option == 'number') data.to(option) │ │ │ │ + else if (action) data[action]() │ │ │ │ + else if (options.interval) data.pause().cycle() │ │ │ │ + $.fn.carousel.Constructor = Carousel │ │ │ │ + // CAROUSEL NO CONFLICT │ │ │ │ + // ==================== │ │ │ │ + $.fn.carousel.noConflict = function () { │ │ │ │ + $.fn.carousel = old │ │ │ │ + return this │ │ │ │ + // CAROUSEL DATA-API │ │ │ │ + // ================= │ │ │ │ + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { │ │ │ │ + var $this = $(this), href │ │ │ │ + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 │ │ │ │ + var options = $.extend({}, $target.data(), $this.data()) │ │ │ │ + var slideIndex = $this.attr('data-slide-to') │ │ │ │ + if (slideIndex) options.interval = false │ │ │ │ + $target.carousel(options) │ │ │ │ + if (slideIndex = $this.attr('data-slide-to')) { │ │ │ │ + $target.data('bs.carousel').to(slideIndex) │ │ │ │ + e.preventDefault() │ │ │ │ + $(window).on('load', function () { │ │ │ │ + $('[data-ride="carousel"]').each(function () { │ │ │ │ + var $carousel = $(this) │ │ │ │ + $carousel.carousel($carousel.data()) │ │ │ │ +}(jQuery); │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: collapse.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#collapse │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // COLLAPSE PUBLIC CLASS DEFINITION │ │ │ │ + // ================================ │ │ │ │ + var Collapse = function (element, options) { │ │ │ │ + this.$element = $(element) │ │ │ │ + this.options = $.extend({}, Collapse.DEFAULTS, options) │ │ │ │ + this.transitioning = null │ │ │ │ + if (this.options.parent) this.$parent = $(this.options.parent) │ │ │ │ + if (this.options.toggle) this.toggle() │ │ │ │ + Collapse.DEFAULTS = { │ │ │ │ + toggle: true │ │ │ │ + Collapse.prototype.dimension = function () { │ │ │ │ + var hasWidth = this.$element.hasClass('width') │ │ │ │ + return hasWidth ? 'width' : 'height' │ │ │ │ + Collapse.prototype.show = function () { │ │ │ │ + if (this.transitioning || this.$element.hasClass('in')) return │ │ │ │ + var startEvent = $.Event('show.bs.collapse') │ │ │ │ + this.$element.trigger(startEvent) │ │ │ │ + if (startEvent.isDefaultPrevented()) return │ │ │ │ + var actives = this.$parent && this.$parent.find('> .panel > .in') │ │ │ │ + if (actives && actives.length) { │ │ │ │ + var hasData = actives.data('bs.collapse') │ │ │ │ + if (hasData && hasData.transitioning) return │ │ │ │ + actives.collapse('hide') │ │ │ │ + hasData || actives.data('bs.collapse', null) │ │ │ │ + var dimension = this.dimension() │ │ │ │ + this.$element │ │ │ │ + .removeClass('collapse') │ │ │ │ + .addClass('collapsing') │ │ │ │ + [dimension](0) │ │ │ │ + this.transitioning = 1 │ │ │ │ + var complete = function () { │ │ │ │ + this.$element │ │ │ │ + .removeClass('collapsing') │ │ │ │ + .addClass('collapse in') │ │ │ │ + [dimension]('auto') │ │ │ │ + this.transitioning = 0 │ │ │ │ + this.$element.trigger('shown.bs.collapse') │ │ │ │ + if (!$.support.transition) return complete.call(this) │ │ │ │ + var scrollSize = $.camelCase(['scroll', dimension].join('-')) │ │ │ │ + this.$element │ │ │ │ + .one($.support.transition.end, $.proxy(complete, this)) │ │ │ │ + .emulateTransitionEnd(350) │ │ │ │ + [dimension](this.$element[0][scrollSize]) │ │ │ │ + Collapse.prototype.hide = function () { │ │ │ │ + if (this.transitioning || !this.$element.hasClass('in')) return │ │ │ │ + var startEvent = $.Event('hide.bs.collapse') │ │ │ │ + this.$element.trigger(startEvent) │ │ │ │ + if (startEvent.isDefaultPrevented()) return │ │ │ │ + var dimension = this.dimension() │ │ │ │ + this.$element │ │ │ │ + [dimension](this.$element[dimension]()) │ │ │ │ + [0].offsetHeight │ │ │ │ + this.$element │ │ │ │ + .addClass('collapsing') │ │ │ │ + .removeClass('collapse') │ │ │ │ + .removeClass('in') │ │ │ │ + this.transitioning = 1 │ │ │ │ + var complete = function () { │ │ │ │ + this.transitioning = 0 │ │ │ │ + this.$element │ │ │ │ + .trigger('hidden.bs.collapse') │ │ │ │ + .removeClass('collapsing') │ │ │ │ + .addClass('collapse') │ │ │ │ + if (!$.support.transition) return complete.call(this) │ │ │ │ + this.$element │ │ │ │ + [dimension](0) │ │ │ │ + .one($.support.transition.end, $.proxy(complete, this)) │ │ │ │ + .emulateTransitionEnd(350) │ │ │ │ + Collapse.prototype.toggle = function () { │ │ │ │ + this[this.$element.hasClass('in') ? 'hide' : 'show']() │ │ │ │ + // COLLAPSE PLUGIN DEFINITION │ │ │ │ + // ========================== │ │ │ │ + var old = $.fn.collapse │ │ │ │ + $.fn.collapse = function (option) { │ │ │ │ + return this.each(function () { │ │ │ │ + var $this = $(this) │ │ │ │ + var data = $this.data('bs.collapse') │ │ │ │ + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) │ │ │ │ + if (!data && options.toggle && option == 'show') option = !option │ │ │ │ + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) │ │ │ │ + if (typeof option == 'string') data[option]() │ │ │ │ + $.fn.collapse.Constructor = Collapse │ │ │ │ + // COLLAPSE NO CONFLICT │ │ │ │ + // ==================== │ │ │ │ + $.fn.collapse.noConflict = function () { │ │ │ │ + $.fn.collapse = old │ │ │ │ + return this │ │ │ │ + // COLLAPSE DATA-API │ │ │ │ + // ================= │ │ │ │ + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { │ │ │ │ + var $this = $(this), href │ │ │ │ + var target = $this.attr('data-target') │ │ │ │ + || e.preventDefault() │ │ │ │ + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 │ │ │ │ + var $target = $(target) │ │ │ │ + var data = $target.data('bs.collapse') │ │ │ │ + var option = data ? 'toggle' : $this.data() │ │ │ │ + var parent = $this.attr('data-parent') │ │ │ │ + var $parent = parent && $(parent) │ │ │ │ + if (!data || !data.transitioning) { │ │ │ │ + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') │ │ │ │ + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') │ │ │ │ + $target.collapse(option) │ │ │ │ +}(jQuery); │ │ │ │ +/* ======================================================================== │ │ │ │ + * Bootstrap: dropdown.js v3.1.1 │ │ │ │ + * http://getbootstrap.com/javascript/#dropdowns │ │ │ │ + * ======================================================================== │ │ │ │ + * Copyright 2011-2014 Twitter, Inc. │ │ │ │ + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) │ │ │ │ + * ======================================================================== */ │ │ │ │ ++function ($) { │ │ │ │ + 'use strict'; │ │ │ │ + // DROPDOWN CLASS DEFINITION │ │ │ │ + // ========================= │ │ │ │ + var backdrop = '.dropdown-backdrop' │ │ │ │ + var toggle = '[data-toggle=dropdown]' │ │ │ │ + var Dropdown = function (element) { │ │ │ │ + $(element).on('click.bs.dropdown', this.toggle) │ │ │ │ + Dropdown.prototype.toggle = function (e) { │ │ │ │ + var $this = $(this) │ │ │ │ + if ($this.is('.disabled, :disabled')) return │ │ │ │ + var $parent = getParent($this) │ │ │ │ + var isActive = $parent.hasClass('open') │ │ │ │ + clearMenus() │ │ │ │ + if (!isActive) { │ │ │ │ + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { │ │ │ │ + // if mobile we use a backdrop because click events don't delegate │ │ │ │ + $('