Make WordPress Core

Changeset 62747


Ignore:
Timestamp:
07/15/2026 02:56:19 AM (4 weeks ago)
Author:
jorbin
Message:

External Libraries: Update the jQuery UI library to version 1.14.2.

In order to lower the risk with this change, jQuery UI is set to be in back compat mode to keep support for the jQuery UI 1.11 API.

The build for core.js is https://jqueryui.com/download/#!version=1.14.2&components=111111111111000000000000000000000000000000000000 with the addition of the deprecated $.ui.plugin from https://github.com/jquery/jquery-ui/blob/1.14.2/ui/plugin.js. All other files are based off of files in https://github.com/jquery/jquery-ui/tree/1.14.2/ui.

Developed in: https://github.com/WordPress/wordpress-develop/pull/12526

Props pankaj.sakaria, mgol, mukesh27, ozgursar, siliconforks, joedolson, OllieJones, wildworks, jorbin.
Fixes #62757.

Location:
trunk/src
Files:
38 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/js/_enqueues/vendor/jquery/ui/accordion.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Accordion 1.13.3
     2 * jQuery UI Accordion 1.14.2
    33 * https://jqueryui.com
    44 *
     
    1010//>>label: Accordion
    1111//>>group: Widgets
    12 /* eslint-disable max-len */
    1312//>>description: Displays collapsible content panels for presenting information in a limited amount of space.
    14 /* eslint-enable max-len */
    1513//>>docs: https://api.jqueryui.com/accordion/
    1614//>>demos: https://jqueryui.com/accordion/
     
    4139
    4240return $.widget( "ui.accordion", {
    43         version: "1.13.3",
     41        version: "1.14.2",
    4442        options: {
    4543                active: 0,
     
    5351                event: "click",
    5452                header: function( elem ) {
    55                         return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() );
     53                        return elem
     54                                .find( "> li > :first-child" )
     55                                .add(
     56                                        elem.find( "> :not(li)" )
     57
     58                                                // Support: jQuery <3.5 only
     59                                                // We could use `.even()` but that's unavailable in older jQuery.
     60                                                .filter( function( i ) {
     61                                                        return i % 2 === 0;
     62                                                } )
     63                                );
    5664                },
    5765                heightStyle: "auto",
     
    188196
    189197                this.element.attr( "aria-disabled", value );
    190 
    191                 // Support: IE8 Only
    192                 // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE
    193                 // so we need to add the disabled class to the headers and panels
    194198                this._toggleClass( null, "ui-state-disabled", !!value );
    195                 this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",
    196                         !!value );
    197199        },
    198200
     
    612614                        ._addClass( prev, "ui-accordion-header-collapsed" );
    613615
    614                 // Work around for rendering bug in IE (#5421)
    615                 if ( toHide.length ) {
    616                         toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
    617                 }
    618616                this._trigger( "activate", null, data );
    619617        }
  • trunk/src/js/_enqueues/vendor/jquery/ui/autocomplete.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Autocomplete 1.13.3
     2 * jQuery UI Autocomplete 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2828                        "../keycode",
    2929                        "../position",
    30                         "../safe-active-element",
    3130                        "../version",
    3231                        "../widget"
     
    4140
    4241$.widget( "ui.autocomplete", {
    43         version: "1.13.3",
     42        version: "1.14.2",
    4443        defaultElement: "<input>",
    4544        options: {
     
    8584                // Textareas are always multi-line
    8685                // Inputs are always single-line, even if inside a contentEditable element
    87                 // IE also treats inputs as contentEditable
    88                 // All other element types are determined by whether or not they're contentEditable
    89                 this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );
     86                // All other element types are determined by whether they're contentEditable
     87                this.isMultiLine = isTextarea ||
     88                        !isInput && this.element.prop( "contentEditable" ) === "true";
    9089
    9190                this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
     
    151150                                                // Different browsers have different default behavior for escape
    152151                                                // Single press can mean undo or clear
    153                                                 // Double press in IE means clear the whole form
    154152                                                event.preventDefault();
    155153                                        }
     
    220218                        } )
    221219                        .hide()
    222 
    223                         // Support: IE 11 only, Edge <= 14
    224                         // For other browsers, we preventDefault() on the mousedown event
    225                         // to keep the dropdown from taking focus from the input. This doesn't
    226                         // work for IE/Edge, causing problems with selection and scrolling (#9638)
    227                         // Happily, IE and Edge support an "unselectable" attribute that
    228                         // prevents an element from receiving focus, exactly what we want here.
    229                         .attr( {
    230                                 "unselectable": "on"
    231                         } )
    232220                        .menu( "instance" );
    233221
     
    242230                                var label, item;
    243231
    244                                 // support: Firefox
     232                                // Support: Firefox
    245233                                // Prevent accidental activation of menu items in Firefox (#7024 #9118)
    246234                                if ( this.isNewMenu ) {
     
    280268
    281269                                // Only trigger when focus was lost (click on menu)
    282                                 if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {
     270                                if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
    283271                                        this.element.trigger( "focus" );
    284272                                        this.previous = previous;
    285 
    286                                         // #6109 - IE triggers two focus events and the second
    287                                         // is asynchronous, so we need to reset the previous
    288                                         // term synchronously and asynchronously :-(
    289                                         this._delay( function() {
    290                                                 this.previous = previous;
    291                                                 this.selectedItem = item;
    292                                         } );
    293273                                }
    294274
     
    609589                        event.preventDefault();
    610590                }
    611         },
    612 
    613         // Support: Chrome <=50
    614         // We should be able to just use this.element.prop( "isContentEditable" )
    615         // but hidden elements always report false in Chrome.
    616         // https://code.google.com/p/chromium/issues/detail?id=313082
    617         _isContentEditable: function( element ) {
    618                 if ( !element.length ) {
    619                         return false;
    620                 }
    621 
    622                 var editable = element.prop( "contentEditable" );
    623 
    624                 if ( editable === "inherit" ) {
    625                         return this._isContentEditable( element.parent() );
    626                 }
    627 
    628                 return editable === "true";
    629591        }
    630592} );
  • trunk/src/js/_enqueues/vendor/jquery/ui/button.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Button 1.13.3
     2 * jQuery UI Button 1.14.2
    33 * https://jqueryui.com
    44 *
     
    4343
    4444$.widget( "ui.button", {
    45         version: "1.13.3",
     45        version: "1.14.2",
    4646        defaultElement: "<button>",
    4747        options: {
     
    110110                                                event.preventDefault();
    111111
    112                                                 // Support: PhantomJS <= 1.9, IE 8 Only
    113                                                 // If a native click is available use it so we actually cause navigation
    114                                                 // otherwise just trigger a click event
     112                                                // If a native click is available use it, so we
     113                                                // actually cause navigation. Otherwise, just trigger
     114                                                // a click event.
    115115                                                if ( this.element[ 0 ].click ) {
    116116                                                        this.element[ 0 ].click();
     
    288288
    289289// DEPRECATED
    290 if ( $.uiBackCompat !== false ) {
     290if ( $.uiBackCompat === true ) {
    291291
    292292        // Text and Icons options
  • trunk/src/js/_enqueues/vendor/jquery/ui/checkboxradio.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Checkboxradio 1.13.3
     2 * jQuery UI Checkboxradio 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3939
    4040$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
    41         version: "1.13.3",
     41        version: "1.14.2",
    4242        options: {
    4343                disabled: null,
     
    157157                var group;
    158158                var name = this.element[ 0 ].name;
    159                 var nameSelector = "input[name='" + $.escapeSelector( name ) + "']";
     159                var nameSelector = "input[name='" + CSS.escape( name ) + "']";
    160160
    161161                if ( !name ) {
     
    169169                        // Not inside a form, check all inputs that also are not inside a form
    170170                        group = $( nameSelector ).filter( function() {
    171                                 return $( this )._form().length === 0;
     171                                return $( $( this ).prop( "form" ) ).length === 0;
    172172                        } );
    173173                }
  • trunk/src/js/_enqueues/vendor/jquery/ui/controlgroup.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Controlgroup 1.13.3
     2 * jQuery UI Controlgroup 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3838
    3939return $.widget( "ui.controlgroup", {
    40         version: "1.13.3",
     40        version: "1.14.2",
    4141        defaultElement: "<div>",
    4242        options: {
  • trunk/src/js/_enqueues/vendor/jquery/ui/core.js

    r58218 r62747  
    1 /*! jQuery UI - v1.13.3 - 2024-04-26
     1/*! jQuery UI - v1.14.2 - 2026-07-15
    22* https://jqueryui.com
    3 * Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
    4 * Copyright jQuery Foundation and other contributors; Licensed MIT */
     3* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js
     4* Copyright OpenJS Foundation and other contributors; Licensed MIT */
     5
    56( function( factory ) {
    67        "use strict";
     
    1516                factory( jQuery );
    1617        }
    17 } ( function( $ ) {
     18} )( function( $ ) {
    1819"use strict";
    1920
    20 // Source: version.js
    2121$.ui = $.ui || {};
    2222
    23 $.ui.version = "1.13.3";
    24 
    25 // Source: data.js
     23var version = $.ui.version = "1.14.2";
     24
     25
    2626/*!
    27  * jQuery UI :data 1.13.3
     27 * jQuery UI Widget 1.14.2
    2828 * https://jqueryui.com
    2929 *
     
    3333 */
    3434
    35 //>>label: :data Selector
     35//>>label: Widget
    3636//>>group: Core
    37 //>>description: Selects elements which have data stored under the specified key.
    38 //>>docs: https://api.jqueryui.com/data-selector/
    39 
    40 $.extend( $.expr.pseudos, {
    41         data: $.expr.createPseudo ?
    42                 $.expr.createPseudo( function( dataName ) {
    43                         return function( elem ) {
    44                                 return !!$.data( elem, dataName );
     37//>>description: Provides a factory for creating stateful widgets with a common API.
     38//>>docs: https://api.jqueryui.com/jQuery.widget/
     39//>>demos: https://jqueryui.com/widget/
     40
     41
     42var widgetUuid = 0;
     43var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
     44var widgetSlice = Array.prototype.slice;
     45
     46$.cleanData = ( function( orig ) {
     47        return function( elems ) {
     48                var events, elem, i;
     49                for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
     50
     51                        // Only trigger remove when necessary to save time
     52                        events = $._data( elem, "events" );
     53                        if ( events && events.remove ) {
     54                                $( elem ).triggerHandler( "remove" );
     55                        }
     56                }
     57                orig( elems );
     58        };
     59} )( $.cleanData );
     60
     61$.widget = function( name, base, prototype ) {
     62        var existingConstructor, constructor, basePrototype;
     63
     64        // ProxiedPrototype allows the provided prototype to remain unmodified
     65        // so that it can be used as a mixin for multiple widgets (#8876)
     66        var proxiedPrototype = {};
     67
     68        var namespace = name.split( "." )[ 0 ];
     69        name = name.split( "." )[ 1 ];
     70        if ( name === "__proto__" || name === "constructor" ) {
     71                return $.error( "Invalid widget name: " + name );
     72        }
     73        var fullName = namespace + "-" + name;
     74
     75        if ( !prototype ) {
     76                prototype = base;
     77                base = $.Widget;
     78        }
     79
     80        if ( Array.isArray( prototype ) ) {
     81                prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
     82        }
     83
     84        // Create selector for plugin
     85        $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {
     86                return !!$.data( elem, fullName );
     87        };
     88
     89        $[ namespace ] = $[ namespace ] || {};
     90        existingConstructor = $[ namespace ][ name ];
     91        constructor = $[ namespace ][ name ] = function( options, element ) {
     92
     93                // Allow instantiation without "new" keyword
     94                if ( !this || !this._createWidget ) {
     95                        return new constructor( options, element );
     96                }
     97
     98                // Allow instantiation without initializing for simple inheritance
     99                // must use "new" keyword (the code above always passes args)
     100                if ( arguments.length ) {
     101                        this._createWidget( options, element );
     102                }
     103        };
     104
     105        // Extend with the existing constructor to carry over any static properties
     106        $.extend( constructor, existingConstructor, {
     107                version: prototype.version,
     108
     109                // Copy the object used to create the prototype in case we need to
     110                // redefine the widget later
     111                _proto: $.extend( {}, prototype ),
     112
     113                // Track widgets that inherit from this widget in case this widget is
     114                // redefined after a widget inherits from it
     115                _childConstructors: []
     116        } );
     117
     118        basePrototype = new base();
     119
     120        // We need to make the options hash a property directly on the new instance
     121        // otherwise we'll modify the options hash on the prototype that we're
     122        // inheriting from
     123        basePrototype.options = $.widget.extend( {}, basePrototype.options );
     124        $.each( prototype, function( prop, value ) {
     125                if ( typeof value !== "function" ) {
     126                        proxiedPrototype[ prop ] = value;
     127                        return;
     128                }
     129                proxiedPrototype[ prop ] = ( function() {
     130                        function _super() {
     131                                return base.prototype[ prop ].apply( this, arguments );
     132                        }
     133
     134                        function _superApply( args ) {
     135                                return base.prototype[ prop ].apply( this, args );
     136                        }
     137
     138                        return function() {
     139                                var __super = this._super;
     140                                var __superApply = this._superApply;
     141                                var returnValue;
     142
     143                                this._super = _super;
     144                                this._superApply = _superApply;
     145
     146                                returnValue = value.apply( this, arguments );
     147
     148                                this._super = __super;
     149                                this._superApply = __superApply;
     150
     151                                return returnValue;
    45152                        };
    46                 } ) :
    47 
    48                 // Support: jQuery <1.8
    49                 function( elem, i, match ) {
    50                         return !!$.data( elem, match[ 3 ] );
    51                 }
     153                } )();
     154        } );
     155        constructor.prototype = $.widget.extend( basePrototype, {
     156
     157                // TODO: remove support for widgetEventPrefix
     158                // always use the name + a colon as the prefix, e.g., draggable:start
     159                // don't prefix for widgets that aren't DOM-based
     160                widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
     161        }, proxiedPrototype, {
     162                constructor: constructor,
     163                namespace: namespace,
     164                widgetName: name,
     165                widgetFullName: fullName
     166        } );
     167
     168        // If this widget is being redefined then we need to find all widgets that
     169        // are inheriting from it and redefine all of them so that they inherit from
     170        // the new version of this widget. We're essentially trying to replace one
     171        // level in the prototype chain.
     172        if ( existingConstructor ) {
     173                $.each( existingConstructor._childConstructors, function( i, child ) {
     174                        var childPrototype = child.prototype;
     175
     176                        // Redefine the child widget using the same prototype that was
     177                        // originally used, but inherit from the new version of the base
     178                        $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
     179                                child._proto );
     180                } );
     181
     182                // Remove the list of existing child constructors from the old constructor
     183                // so the old child constructors can be garbage collected
     184                delete existingConstructor._childConstructors;
     185        } else {
     186                base._childConstructors.push( constructor );
     187        }
     188
     189        $.widget.bridge( name, constructor );
     190
     191        return constructor;
     192};
     193
     194$.widget.extend = function( target ) {
     195        var input = widgetSlice.call( arguments, 1 );
     196        var inputIndex = 0;
     197        var inputLength = input.length;
     198        var key;
     199        var value;
     200
     201        for ( ; inputIndex < inputLength; inputIndex++ ) {
     202                for ( key in input[ inputIndex ] ) {
     203                        value = input[ inputIndex ][ key ];
     204                        if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {
     205
     206                                // Clone objects
     207                                if ( $.isPlainObject( value ) ) {
     208                                        target[ key ] = $.isPlainObject( target[ key ] ) ?
     209                                                $.widget.extend( {}, target[ key ], value ) :
     210
     211                                                // Don't extend strings, arrays, etc. with objects
     212                                                $.widget.extend( {}, value );
     213
     214                                // Copy everything else by reference
     215                                } else {
     216                                        target[ key ] = value;
     217                                }
     218                        }
     219                }
     220        }
     221        return target;
     222};
     223
     224$.widget.bridge = function( name, object ) {
     225        var fullName = object.prototype.widgetFullName || name;
     226        $.fn[ name ] = function( options ) {
     227                var isMethodCall = typeof options === "string";
     228                var args = widgetSlice.call( arguments, 1 );
     229                var returnValue = this;
     230
     231                if ( isMethodCall ) {
     232
     233                        // If this is an empty collection, we need to have the instance method
     234                        // return undefined instead of the jQuery instance
     235                        if ( !this.length && options === "instance" ) {
     236                                returnValue = undefined;
     237                        } else {
     238                                this.each( function() {
     239                                        var methodValue;
     240                                        var instance = $.data( this, fullName );
     241
     242                                        if ( options === "instance" ) {
     243                                                returnValue = instance;
     244                                                return false;
     245                                        }
     246
     247                                        if ( !instance ) {
     248                                                return $.error( "cannot call methods on " + name +
     249                                                        " prior to initialization; " +
     250                                                        "attempted to call method '" + options + "'" );
     251                                        }
     252
     253                                        if ( typeof instance[ options ] !== "function" ||
     254                                                options.charAt( 0 ) === "_" ) {
     255                                                return $.error( "no such method '" + options + "' for " + name +
     256                                                        " widget instance" );
     257                                        }
     258
     259                                        methodValue = instance[ options ].apply( instance, args );
     260
     261                                        if ( methodValue !== instance && methodValue !== undefined ) {
     262                                                returnValue = methodValue && methodValue.jquery ?
     263                                                        returnValue.pushStack( methodValue.get() ) :
     264                                                        methodValue;
     265                                                return false;
     266                                        }
     267                                } );
     268                        }
     269                } else {
     270
     271                        // Allow multiple hashes to be passed on init
     272                        if ( args.length ) {
     273                                options = $.widget.extend.apply( null, [ options ].concat( args ) );
     274                        }
     275
     276                        this.each( function() {
     277                                var instance = $.data( this, fullName );
     278                                if ( instance ) {
     279                                        instance.option( options || {} );
     280                                        if ( instance._init ) {
     281                                                instance._init();
     282                                        }
     283                                } else {
     284                                        $.data( this, fullName, new object( options, this ) );
     285                                }
     286                        } );
     287                }
     288
     289                return returnValue;
     290        };
     291};
     292
     293$.Widget = function( /* options, element */ ) {};
     294$.Widget._childConstructors = [];
     295
     296$.Widget.prototype = {
     297        widgetName: "widget",
     298        widgetEventPrefix: "",
     299        defaultElement: "<div>",
     300
     301        options: {
     302                classes: {},
     303                disabled: false,
     304
     305                // Callbacks
     306                create: null
     307        },
     308
     309        _createWidget: function( options, element ) {
     310                element = $( element || this.defaultElement || this )[ 0 ];
     311                this.element = $( element );
     312                this.uuid = widgetUuid++;
     313                this.eventNamespace = "." + this.widgetName + this.uuid;
     314
     315                this.bindings = $();
     316                this.hoverable = $();
     317                this.focusable = $();
     318                this.classesElementLookup = {};
     319
     320                if ( element !== this ) {
     321                        $.data( element, this.widgetFullName, this );
     322                        this._on( true, this.element, {
     323                                remove: function( event ) {
     324                                        if ( event.target === element ) {
     325                                                this.destroy();
     326                                        }
     327                                }
     328                        } );
     329                        this.document = $( element.style ?
     330
     331                                // Element within the document
     332                                element.ownerDocument :
     333
     334                                // Element is window or document
     335                                element.document || element );
     336                        this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
     337                }
     338
     339                this.options = $.widget.extend( {},
     340                        this.options,
     341                        this._getCreateOptions(),
     342                        options );
     343
     344                this._create();
     345
     346                if ( this.options.disabled ) {
     347                        this._setOptionDisabled( this.options.disabled );
     348                }
     349
     350                this._trigger( "create", null, this._getCreateEventData() );
     351                this._init();
     352        },
     353
     354        _getCreateOptions: function() {
     355                return {};
     356        },
     357
     358        _getCreateEventData: $.noop,
     359
     360        _create: $.noop,
     361
     362        _init: $.noop,
     363
     364        destroy: function() {
     365                var that = this;
     366
     367                this._destroy();
     368                $.each( this.classesElementLookup, function( key, value ) {
     369                        that._removeClass( value, key );
     370                } );
     371
     372                // We can probably remove the unbind calls in 2.0
     373                // all event bindings should go through this._on()
     374                this.element
     375                        .off( this.eventNamespace )
     376                        .removeData( this.widgetFullName );
     377                this.widget()
     378                        .off( this.eventNamespace )
     379                        .removeAttr( "aria-disabled" );
     380
     381                // Clean up events and states
     382                this.bindings.off( this.eventNamespace );
     383        },
     384
     385        _destroy: $.noop,
     386
     387        widget: function() {
     388                return this.element;
     389        },
     390
     391        option: function( key, value ) {
     392                var options = key;
     393                var parts;
     394                var curOption;
     395                var i;
     396
     397                if ( arguments.length === 0 ) {
     398
     399                        // Don't return a reference to the internal hash
     400                        return $.widget.extend( {}, this.options );
     401                }
     402
     403                if ( typeof key === "string" ) {
     404
     405                        // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
     406                        options = {};
     407                        parts = key.split( "." );
     408                        key = parts.shift();
     409                        if ( parts.length ) {
     410                                curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
     411                                for ( i = 0; i < parts.length - 1; i++ ) {
     412                                        curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
     413                                        curOption = curOption[ parts[ i ] ];
     414                                }
     415                                key = parts.pop();
     416                                if ( arguments.length === 1 ) {
     417                                        return curOption[ key ] === undefined ? null : curOption[ key ];
     418                                }
     419                                curOption[ key ] = value;
     420                        } else {
     421                                if ( arguments.length === 1 ) {
     422                                        return this.options[ key ] === undefined ? null : this.options[ key ];
     423                                }
     424                                options[ key ] = value;
     425                        }
     426                }
     427
     428                this._setOptions( options );
     429
     430                return this;
     431        },
     432
     433        _setOptions: function( options ) {
     434                var key;
     435
     436                for ( key in options ) {
     437                        this._setOption( key, options[ key ] );
     438                }
     439
     440                return this;
     441        },
     442
     443        _setOption: function( key, value ) {
     444                if ( key === "classes" ) {
     445                        this._setOptionClasses( value );
     446                }
     447
     448                this.options[ key ] = value;
     449
     450                if ( key === "disabled" ) {
     451                        this._setOptionDisabled( value );
     452                }
     453
     454                return this;
     455        },
     456
     457        _setOptionClasses: function( value ) {
     458                var classKey, elements, currentElements;
     459
     460                for ( classKey in value ) {
     461                        currentElements = this.classesElementLookup[ classKey ];
     462                        if ( value[ classKey ] === this.options.classes[ classKey ] ||
     463                                        !currentElements ||
     464                                        !currentElements.length ) {
     465                                continue;
     466                        }
     467
     468                        // We are doing this to create a new jQuery object because the _removeClass() call
     469                        // on the next line is going to destroy the reference to the current elements being
     470                        // tracked. We need to save a copy of this collection so that we can add the new classes
     471                        // below.
     472                        elements = $( currentElements.get() );
     473                        this._removeClass( currentElements, classKey );
     474
     475                        // We don't use _addClass() here, because that uses this.options.classes
     476                        // for generating the string of classes. We want to use the value passed in from
     477                        // _setOption(), this is the new value of the classes option which was passed to
     478                        // _setOption(). We pass this value directly to _classes().
     479                        elements.addClass( this._classes( {
     480                                element: elements,
     481                                keys: classKey,
     482                                classes: value,
     483                                add: true
     484                        } ) );
     485                }
     486        },
     487
     488        _setOptionDisabled: function( value ) {
     489                this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
     490
     491                // If the widget is becoming disabled, then nothing is interactive
     492                if ( value ) {
     493                        this._removeClass( this.hoverable, null, "ui-state-hover" );
     494                        this._removeClass( this.focusable, null, "ui-state-focus" );
     495                }
     496        },
     497
     498        enable: function() {
     499                return this._setOptions( { disabled: false } );
     500        },
     501
     502        disable: function() {
     503                return this._setOptions( { disabled: true } );
     504        },
     505
     506        _classes: function( options ) {
     507                var full = [];
     508                var that = this;
     509
     510                options = $.extend( {
     511                        element: this.element,
     512                        classes: this.options.classes || {}
     513                }, options );
     514
     515                function bindRemoveEvent() {
     516                        var nodesToBind = [];
     517
     518                        options.element.each( function( _, element ) {
     519                                var isTracked = $.map( that.classesElementLookup, function( elements ) {
     520                                        return elements;
     521                                } )
     522                                        .some( function( elements ) {
     523                                                return elements.is( element );
     524                                        } );
     525
     526                                if ( !isTracked ) {
     527                                        nodesToBind.push( element );
     528                                }
     529                        } );
     530
     531                        that._on( $( nodesToBind ), {
     532                                remove: "_untrackClassesElement"
     533                        } );
     534                }
     535
     536                function processClassString( classes, checkOption ) {
     537                        var current, i;
     538                        for ( i = 0; i < classes.length; i++ ) {
     539                                current = that.classesElementLookup[ classes[ i ] ] || $();
     540                                if ( options.add ) {
     541                                        bindRemoveEvent();
     542                                        current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );
     543                                } else {
     544                                        current = $( current.not( options.element ).get() );
     545                                }
     546                                that.classesElementLookup[ classes[ i ] ] = current;
     547                                full.push( classes[ i ] );
     548                                if ( checkOption && options.classes[ classes[ i ] ] ) {
     549                                        full.push( options.classes[ classes[ i ] ] );
     550                                }
     551                        }
     552                }
     553
     554                if ( options.keys ) {
     555                        processClassString( options.keys.match( /\S+/g ) || [], true );
     556                }
     557                if ( options.extra ) {
     558                        processClassString( options.extra.match( /\S+/g ) || [] );
     559                }
     560
     561                return full.join( " " );
     562        },
     563
     564        _untrackClassesElement: function( event ) {
     565                var that = this;
     566                $.each( that.classesElementLookup, function( key, value ) {
     567                        if ( $.inArray( event.target, value ) !== -1 ) {
     568                                that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
     569                        }
     570                } );
     571
     572                this._off( $( event.target ) );
     573        },
     574
     575        _removeClass: function( element, keys, extra ) {
     576                return this._toggleClass( element, keys, extra, false );
     577        },
     578
     579        _addClass: function( element, keys, extra ) {
     580                return this._toggleClass( element, keys, extra, true );
     581        },
     582
     583        _toggleClass: function( element, keys, extra, add ) {
     584                add = ( typeof add === "boolean" ) ? add : extra;
     585                var shift = ( typeof element === "string" || element === null ),
     586                        options = {
     587                                extra: shift ? keys : extra,
     588                                keys: shift ? element : keys,
     589                                element: shift ? this.element : element,
     590                                add: add
     591                        };
     592                options.element.toggleClass( this._classes( options ), add );
     593                return this;
     594        },
     595
     596        _on: function( suppressDisabledCheck, element, handlers ) {
     597                var delegateElement;
     598                var instance = this;
     599
     600                // No suppressDisabledCheck flag, shuffle arguments
     601                if ( typeof suppressDisabledCheck !== "boolean" ) {
     602                        handlers = element;
     603                        element = suppressDisabledCheck;
     604                        suppressDisabledCheck = false;
     605                }
     606
     607                // No element argument, shuffle and use this.element
     608                if ( !handlers ) {
     609                        handlers = element;
     610                        element = this.element;
     611                        delegateElement = this.widget();
     612                } else {
     613                        element = delegateElement = $( element );
     614                        this.bindings = this.bindings.add( element );
     615                }
     616
     617                $.each( handlers, function( event, handler ) {
     618                        function handlerProxy() {
     619
     620                                // Allow widgets to customize the disabled handling
     621                                // - disabled as an array instead of boolean
     622                                // - disabled class as method for disabling individual parts
     623                                if ( !suppressDisabledCheck &&
     624                                                ( instance.options.disabled === true ||
     625                                                $( this ).hasClass( "ui-state-disabled" ) ) ) {
     626                                        return;
     627                                }
     628                                return ( typeof handler === "string" ? instance[ handler ] : handler )
     629                                        .apply( instance, arguments );
     630                        }
     631
     632                        // Copy the guid so direct unbinding works
     633                        if ( typeof handler !== "string" ) {
     634                                handlerProxy.guid = handler.guid =
     635                                        handler.guid || handlerProxy.guid || $.guid++;
     636                        }
     637
     638                        var match = event.match( /^([\w:-]*)\s*(.*)$/ );
     639                        var eventName = match[ 1 ] + instance.eventNamespace;
     640                        var selector = match[ 2 ];
     641
     642                        if ( selector ) {
     643                                delegateElement.on( eventName, selector, handlerProxy );
     644                        } else {
     645                                element.on( eventName, handlerProxy );
     646                        }
     647                } );
     648        },
     649
     650        _off: function( element, eventName ) {
     651                eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
     652                        this.eventNamespace;
     653                element.off( eventName );
     654
     655                // Clear the stack to avoid memory leaks (#10056)
     656                this.bindings = $( this.bindings.not( element ).get() );
     657                this.focusable = $( this.focusable.not( element ).get() );
     658                this.hoverable = $( this.hoverable.not( element ).get() );
     659        },
     660
     661        _delay: function( handler, delay ) {
     662                function handlerProxy() {
     663                        return ( typeof handler === "string" ? instance[ handler ] : handler )
     664                                .apply( instance, arguments );
     665                }
     666                var instance = this;
     667                return setTimeout( handlerProxy, delay || 0 );
     668        },
     669
     670        _hoverable: function( element ) {
     671                this.hoverable = this.hoverable.add( element );
     672                this._on( element, {
     673                        mouseenter: function( event ) {
     674                                this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
     675                        },
     676                        mouseleave: function( event ) {
     677                                this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
     678                        }
     679                } );
     680        },
     681
     682        _focusable: function( element ) {
     683                this.focusable = this.focusable.add( element );
     684                this._on( element, {
     685                        focusin: function( event ) {
     686                                this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
     687                        },
     688                        focusout: function( event ) {
     689                                this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
     690                        }
     691                } );
     692        },
     693
     694        _trigger: function( type, event, data ) {
     695                var prop, orig;
     696                var callback = this.options[ type ];
     697
     698                data = data || {};
     699                event = $.Event( event );
     700                event.type = ( type === this.widgetEventPrefix ?
     701                        type :
     702                        this.widgetEventPrefix + type ).toLowerCase();
     703
     704                // The original event may come from any element
     705                // so we need to reset the target on the new event
     706                event.target = this.element[ 0 ];
     707
     708                // Copy original event properties over to the new event
     709                orig = event.originalEvent;
     710                if ( orig ) {
     711                        for ( prop in orig ) {
     712                                if ( !( prop in event ) ) {
     713                                        event[ prop ] = orig[ prop ];
     714                                }
     715                        }
     716                }
     717
     718                this.element.trigger( event, data );
     719                return !( typeof callback === "function" &&
     720                        callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
     721                        event.isDefaultPrevented() );
     722        }
     723};
     724
     725$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
     726        $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
     727                if ( typeof options === "string" ) {
     728                        options = { effect: options };
     729                }
     730
     731                var hasOptions;
     732                var effectName = !options ?
     733                        method :
     734                        options === true || typeof options === "number" ?
     735                                defaultEffect :
     736                                options.effect || defaultEffect;
     737
     738                options = options || {};
     739                if ( typeof options === "number" ) {
     740                        options = { duration: options };
     741                } else if ( options === true ) {
     742                        options = {};
     743                }
     744
     745                hasOptions = !$.isEmptyObject( options );
     746                options.complete = callback;
     747
     748                if ( options.delay ) {
     749                        element.delay( options.delay );
     750                }
     751
     752                if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
     753                        element[ method ]( options );
     754                } else if ( effectName !== method && element[ effectName ] ) {
     755                        element[ effectName ]( options.duration, options.easing, callback );
     756                } else {
     757                        element.queue( function( next ) {
     758                                $( this )[ method ]();
     759                                if ( callback ) {
     760                                        callback.call( element[ 0 ] );
     761                                }
     762                                next();
     763                        } );
     764                }
     765        };
    52766} );
    53767
    54 // Source: disable-selection.js
     768var widget = $.widget;
     769
     770
    55771/*!
    56  * jQuery UI Disable Selection 1.13.3
    57  * https://jqueryui.com
    58  *
    59  * Copyright OpenJS Foundation and other contributors
    60  * Released under the MIT license.
    61  * https://jquery.org/license
    62  */
    63 
    64 //>>label: disableSelection
    65 //>>group: Core
    66 //>>description: Disable selection of text content within the set of matched elements.
    67 //>>docs: https://api.jqueryui.com/disableSelection/
    68 
    69 // This file is deprecated
    70 $.fn.extend( {
    71         disableSelection: ( function() {
    72                 var eventType = "onselectstart" in document.createElement( "div" ) ?
    73                         "selectstart" :
    74                         "mousedown";
    75 
    76                 return function() {
    77                         return this.on( eventType + ".ui-disableSelection", function( event ) {
    78                                 event.preventDefault();
    79                         } );
    80                 };
    81         } )(),
    82 
    83         enableSelection: function() {
    84                 return this.off( ".ui-disableSelection" );
    85         }
    86 } );
    87 
    88 // Source: focusable.js
    89 /*!
    90  * jQuery UI Focusable 1.13.3
    91  * https://jqueryui.com
    92  *
    93  * Copyright OpenJS Foundation and other contributors
    94  * Released under the MIT license.
    95  * https://jquery.org/license
    96  */
    97 
    98 //>>label: :focusable Selector
    99 //>>group: Core
    100 //>>description: Selects elements which can be focused.
    101 //>>docs: https://api.jqueryui.com/focusable-selector/
    102 
    103 // Selectors
    104 $.ui.focusable = function( element, hasTabindex ) {
    105         var map, mapName, img, focusableIfVisible, fieldset,
    106                 nodeName = element.nodeName.toLowerCase();
    107 
    108         if ( "area" === nodeName ) {
    109                 map = element.parentNode;
    110                 mapName = map.name;
    111                 if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
    112                         return false;
    113                 }
    114                 img = $( "img[usemap='#" + mapName + "']" );
    115                 return img.length > 0 && img.is( ":visible" );
    116         }
    117 
    118         if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
    119                 focusableIfVisible = !element.disabled;
    120 
    121                 if ( focusableIfVisible ) {
    122 
    123                         // Form controls within a disabled fieldset are disabled.
    124                         // However, controls within the fieldset's legend do not get disabled.
    125                         // Since controls generally aren't placed inside legends, we skip
    126                         // this portion of the check.
    127                         fieldset = $( element ).closest( "fieldset" )[ 0 ];
    128                         if ( fieldset ) {
    129                                 focusableIfVisible = !fieldset.disabled;
    130                         }
    131                 }
    132         } else if ( "a" === nodeName ) {
    133                 focusableIfVisible = element.href || hasTabindex;
    134         } else {
    135                 focusableIfVisible = hasTabindex;
    136         }
    137 
    138         return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
    139 };
    140 
    141 // Support: IE 8 only
    142 // IE 8 doesn't resolve inherit to visible/hidden for computed values
    143 function visible( element ) {
    144         var visibility = element.css( "visibility" );
    145         while ( visibility === "inherit" ) {
    146                 element = element.parent();
    147                 visibility = element.css( "visibility" );
    148         }
    149         return visibility === "visible";
    150 }
    151 
    152 $.extend( $.expr.pseudos, {
    153         focusable: function( element ) {
    154                 return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
    155         }
    156 } );
    157 
    158 // Support: IE8 Only
    159 // IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
    160 // with a string, so we need to find the proper form.
    161 $.fn._form = function() {
    162         return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
    163 };
    164 
    165 // Source: form-reset-mixin.js
    166 /*!
    167  * jQuery UI Form Reset Mixin 1.13.3
    168  * https://jqueryui.com
    169  *
    170  * Copyright OpenJS Foundation and other contributors
    171  * Released under the MIT license.
    172  * https://jquery.org/license
    173  */
    174 
    175 //>>label: Form Reset Mixin
    176 //>>group: Core
    177 //>>description: Refresh input widgets when their form is reset
    178 //>>docs: https://api.jqueryui.com/form-reset-mixin/
    179 
    180 $.ui.formResetMixin = {
    181         _formResetHandler: function() {
    182                 var form = $( this );
    183 
    184                 // Wait for the form reset to actually happen before refreshing
    185                 setTimeout( function() {
    186                         var instances = form.data( "ui-form-reset-instances" );
    187                         $.each( instances, function() {
    188                                 this.refresh();
    189                         } );
    190                 } );
    191         },
    192 
    193         _bindFormResetHandler: function() {
    194                 this.form = this.element._form();
    195                 if ( !this.form.length ) {
    196                         return;
    197                 }
    198 
    199                 var instances = this.form.data( "ui-form-reset-instances" ) || [];
    200                 if ( !instances.length ) {
    201 
    202                         // We don't use _on() here because we use a single event handler per form
    203                         this.form.on( "reset.ui-form-reset", this._formResetHandler );
    204                 }
    205                 instances.push( this );
    206                 this.form.data( "ui-form-reset-instances", instances );
    207         },
    208 
    209         _unbindFormResetHandler: function() {
    210                 if ( !this.form.length ) {
    211                         return;
    212                 }
    213 
    214                 var instances = this.form.data( "ui-form-reset-instances" );
    215                 instances.splice( $.inArray( this, instances ), 1 );
    216                 if ( instances.length ) {
    217                         this.form.data( "ui-form-reset-instances", instances );
    218                 } else {
    219                         this.form
    220                                 .removeData( "ui-form-reset-instances" )
    221                                 .off( "reset.ui-form-reset" );
    222                 }
    223         }
    224 };
    225 
    226 // Source: ie.js
    227 // This file is deprecated
    228 $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
    229 
    230 // Source: jquery-patch.js
    231 /*!
    232  * jQuery UI Support for jQuery core 1.8.x and newer 1.13.3
    233  * https://jqueryui.com
    234  *
    235  * Copyright OpenJS Foundation and other contributors
    236  * Released under the MIT license.
    237  * https://jquery.org/license
    238  *
    239  */
    240 
    241 //>>label: jQuery 1.8+ Support
    242 //>>group: Core
    243 //>>description: Support version 1.8.x and newer of jQuery core
    244 
    245 // Support: jQuery 1.9.x or older
    246 // $.expr[ ":" ] is deprecated.
    247 if ( !$.expr.pseudos ) {
    248         $.expr.pseudos = $.expr[ ":" ];
    249 }
    250 
    251 // Support: jQuery 1.11.x or older
    252 // $.unique has been renamed to $.uniqueSort
    253 if ( !$.uniqueSort ) {
    254         $.uniqueSort = $.unique;
    255 }
    256 
    257 // Support: jQuery 2.2.x or older.
    258 // This method has been defined in jQuery 3.0.0.
    259 // Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js
    260 if ( !$.escapeSelector ) {
    261 
    262         // CSS string/identifier serialization
    263         // https://drafts.csswg.org/cssom/#common-serializing-idioms
    264         var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
    265 
    266         var fcssescape = function( ch, asCodePoint ) {
    267                 if ( asCodePoint ) {
    268 
    269                         // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
    270                         if ( ch === "\0" ) {
    271                                 return "\uFFFD";
    272                         }
    273 
    274                         // Control characters and (dependent upon position) numbers get escaped as code points
    275                         return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
    276                 }
    277 
    278                 // Other potentially-special ASCII characters get backslash-escaped
    279                 return "\\" + ch;
    280         };
    281 
    282         $.escapeSelector = function( sel ) {
    283                 return ( sel + "" ).replace( rcssescape, fcssescape );
    284         };
    285 }
    286 
    287 // Support: jQuery 3.4.x or older
    288 // These methods have been defined in jQuery 3.5.0.
    289 if ( !$.fn.even || !$.fn.odd ) {
    290         $.fn.extend( {
    291                 even: function() {
    292                         return this.filter( function( i ) {
    293                                 return i % 2 === 0;
    294                         } );
    295                 },
    296                 odd: function() {
    297                         return this.filter( function( i ) {
    298                                 return i % 2 === 1;
    299                         } );
    300                 }
    301         } );
    302 }
    303 
    304 // Source: keycode.js
    305 /*!
    306  * jQuery UI Keycode 1.13.3
    307  * https://jqueryui.com
    308  *
    309  * Copyright OpenJS Foundation and other contributors
    310  * Released under the MIT license.
    311  * https://jquery.org/license
    312  */
    313 
    314 //>>label: Keycode
    315 //>>group: Core
    316 //>>description: Provide keycodes as keynames
    317 //>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/
    318 
    319 $.ui.keyCode = {
    320         BACKSPACE: 8,
    321         COMMA: 188,
    322         DELETE: 46,
    323         DOWN: 40,
    324         END: 35,
    325         ENTER: 13,
    326         ESCAPE: 27,
    327         HOME: 36,
    328         LEFT: 37,
    329         PAGE_DOWN: 34,
    330         PAGE_UP: 33,
    331         PERIOD: 190,
    332         RIGHT: 39,
    333         SPACE: 32,
    334         TAB: 9,
    335         UP: 38
    336 };
    337 
    338 // Source: labels.js
    339 /*!
    340  * jQuery UI Labels 1.13.3
    341  * https://jqueryui.com
    342  *
    343  * Copyright OpenJS Foundation and other contributors
    344  * Released under the MIT license.
    345  * https://jquery.org/license
    346  */
    347 
    348 //>>label: labels
    349 //>>group: Core
    350 //>>description: Find all the labels associated with a given input
    351 //>>docs: https://api.jqueryui.com/labels/
    352 
    353 $.fn.labels = function() {
    354         var ancestor, selector, id, labels, ancestors;
    355 
    356         if ( !this.length ) {
    357                 return this.pushStack( [] );
    358         }
    359 
    360         // Check control.labels first
    361         if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
    362                 return this.pushStack( this[ 0 ].labels );
    363         }
    364 
    365         // Support: IE <= 11, FF <= 37, Android <= 2.3 only
    366         // Above browsers do not support control.labels. Everything below is to support them
    367         // as well as document fragments. control.labels does not work on document fragments
    368         labels = this.eq( 0 ).parents( "label" );
    369 
    370         // Look for the label based on the id
    371         id = this.attr( "id" );
    372         if ( id ) {
    373 
    374                 // We don't search against the document in case the element
    375                 // is disconnected from the DOM
    376                 ancestor = this.eq( 0 ).parents().last();
    377 
    378                 // Get a full set of top level ancestors
    379                 ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
    380 
    381                 // Create a selector for the label based on the id
    382                 selector = "label[for='" + $.escapeSelector( id ) + "']";
    383 
    384                 labels = labels.add( ancestors.find( selector ).addBack( selector ) );
    385 
    386         }
    387 
    388         // Return whatever we have found for labels
    389         return this.pushStack( labels );
    390 };
    391 
    392 // Source: plugin.js
    393 // $.ui.plugin is deprecated. Use $.widget() extensions instead.
    394 $.ui.plugin = {
    395         add: function( module, option, set ) {
    396                 var i,
    397                         proto = $.ui[ module ].prototype;
    398                 for ( i in set ) {
    399                         proto.plugins[ i ] = proto.plugins[ i ] || [];
    400                         proto.plugins[ i ].push( [ option, set[ i ] ] );
    401                 }
    402         },
    403         call: function( instance, name, args, allowDisconnected ) {
    404                 var i,
    405                         set = instance.plugins[ name ];
    406 
    407                 if ( !set ) {
    408                         return;
    409                 }
    410 
    411                 if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
    412                                 instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
    413                         return;
    414                 }
    415 
    416                 for ( i = 0; i < set.length; i++ ) {
    417                         if ( instance.options[ set[ i ][ 0 ] ] ) {
    418                                 set[ i ][ 1 ].apply( instance.element, args );
    419                         }
    420                 }
    421         }
    422 };
    423 
    424 // Source: position.js
    425 /*!
    426  * jQuery UI Position 1.13.3
     772 * jQuery UI Position 1.14.2
    427773 * https://jqueryui.com
    428774 *
     
    439785//>>docs: https://api.jqueryui.com/position/
    440786//>>demos: https://jqueryui.com/position/
     787
    441788
    442789( function() {
     
    9161263} )();
    9171264
    918 // Source: safe-active-element.js
    919 $.ui.safeActiveElement = function( document ) {
    920         var activeElement;
    921 
    922         // Support: IE 9 only
    923         // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
    924         try {
    925                 activeElement = document.activeElement;
    926         } catch ( error ) {
    927                 activeElement = document.body;
    928         }
    929 
    930         // Support: IE 9 - 11 only
    931         // IE may return null instead of an element
    932         // Interestingly, this only seems to occur when NOT in an iframe
    933         if ( !activeElement ) {
    934                 activeElement = document.body;
    935         }
    936 
    937         // Support: IE 11 only
    938         // IE11 returns a seemingly empty object in some cases when accessing
    939         // document.activeElement from an <iframe>
    940         if ( !activeElement.nodeName ) {
    941                 activeElement = document.body;
    942         }
    943 
    944         return activeElement;
    945 };
    946 
    947 // Source: safe-blur.js
    948 $.ui.safeBlur = function( element ) {
    949 
    950         // Support: IE9 - 10 only
    951         // If the <body> is blurred, IE will switch windows, see #9420
    952         if ( element && element.nodeName.toLowerCase() !== "body" ) {
    953                 $( element ).trigger( "blur" );
    954         }
    955 };
    956 
    957 // Source: scroll-parent.js
     1265var position = $.ui.position;
     1266
     1267
    9581268/*!
    959  * jQuery UI Scroll Parent 1.13.3
     1269 * jQuery UI :data 1.14.2
    9601270 * https://jqueryui.com
    9611271 *
     
    9651275 */
    9661276
     1277//>>label: :data Selector
     1278//>>group: Core
     1279//>>description: Selects elements which have data stored under the specified key.
     1280//>>docs: https://api.jqueryui.com/data-selector/
     1281
     1282
     1283var data = $.extend( $.expr.pseudos, {
     1284        data: $.expr.createPseudo( function( dataName ) {
     1285                return function( elem ) {
     1286                        return !!$.data( elem, dataName );
     1287                };
     1288        } )
     1289} );
     1290
     1291/*!
     1292 * jQuery UI Disable Selection 1.14.2
     1293 * https://jqueryui.com
     1294 *
     1295 * Copyright OpenJS Foundation and other contributors
     1296 * Released under the MIT license.
     1297 * https://jquery.org/license
     1298 */
     1299
     1300//>>label: disableSelection
     1301//>>group: Core
     1302//>>description: Disable selection of text content within the set of matched elements.
     1303//>>docs: https://api.jqueryui.com/disableSelection/
     1304
     1305// This file is deprecated
     1306
     1307var disableSelection = $.fn.extend( {
     1308        disableSelection: ( function() {
     1309                var eventType = "onselectstart" in document.createElement( "div" ) ?
     1310                        "selectstart" :
     1311                        "mousedown";
     1312
     1313                return function() {
     1314                        return this.on( eventType + ".ui-disableSelection", function( event ) {
     1315                                event.preventDefault();
     1316                        } );
     1317                };
     1318        } )(),
     1319
     1320        enableSelection: function() {
     1321                return this.off( ".ui-disableSelection" );
     1322        }
     1323} );
     1324
     1325
     1326/*!
     1327 * jQuery UI Focusable 1.14.2
     1328 * https://jqueryui.com
     1329 *
     1330 * Copyright OpenJS Foundation and other contributors
     1331 * Released under the MIT license.
     1332 * https://jquery.org/license
     1333 */
     1334
     1335//>>label: :focusable Selector
     1336//>>group: Core
     1337//>>description: Selects elements which can be focused.
     1338//>>docs: https://api.jqueryui.com/focusable-selector/
     1339
     1340
     1341// Selectors
     1342$.ui.focusable = function( element, hasTabindex ) {
     1343        var map, mapName, img, focusableIfVisible, fieldset,
     1344                nodeName = element.nodeName.toLowerCase();
     1345
     1346        if ( "area" === nodeName ) {
     1347                map = element.parentNode;
     1348                mapName = map.name;
     1349                if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
     1350                        return false;
     1351                }
     1352                img = $( "img[usemap='#" + mapName + "']" );
     1353                return img.length > 0 && img.is( ":visible" );
     1354        }
     1355
     1356        if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
     1357                focusableIfVisible = !element.disabled;
     1358
     1359                if ( focusableIfVisible ) {
     1360
     1361                        // Form controls within a disabled fieldset are disabled.
     1362                        // However, controls within the fieldset's legend do not get disabled.
     1363                        // Since controls generally aren't placed inside legends, we skip
     1364                        // this portion of the check.
     1365                        fieldset = $( element ).closest( "fieldset" )[ 0 ];
     1366                        if ( fieldset ) {
     1367                                focusableIfVisible = !fieldset.disabled;
     1368                        }
     1369                }
     1370        } else if ( "a" === nodeName ) {
     1371                focusableIfVisible = element.href || hasTabindex;
     1372        } else {
     1373                focusableIfVisible = hasTabindex;
     1374        }
     1375
     1376        return focusableIfVisible && $( element ).is( ":visible" ) &&
     1377                $( element ).css( "visibility" ) === "visible";
     1378};
     1379
     1380$.extend( $.expr.pseudos, {
     1381        focusable: function( element ) {
     1382                return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
     1383        }
     1384} );
     1385
     1386var focusable = $.ui.focusable;
     1387
     1388
     1389/*!
     1390 * jQuery UI Form Reset Mixin 1.14.2
     1391 * https://jqueryui.com
     1392 *
     1393 * Copyright OpenJS Foundation and other contributors
     1394 * Released under the MIT license.
     1395 * https://jquery.org/license
     1396 */
     1397
     1398//>>label: Form Reset Mixin
     1399//>>group: Core
     1400//>>description: Refresh input widgets when their form is reset
     1401//>>docs: https://api.jqueryui.com/form-reset-mixin/
     1402
     1403
     1404var formResetMixin = $.ui.formResetMixin = {
     1405        _formResetHandler: function() {
     1406                var form = $( this );
     1407
     1408                // Wait for the form reset to actually happen before refreshing
     1409                setTimeout( function() {
     1410                        var instances = form.data( "ui-form-reset-instances" );
     1411                        $.each( instances, function() {
     1412                                this.refresh();
     1413                        } );
     1414                } );
     1415        },
     1416
     1417        _bindFormResetHandler: function() {
     1418                this.form = $( this.element.prop( "form" ) );
     1419                if ( !this.form.length ) {
     1420                        return;
     1421                }
     1422
     1423                var instances = this.form.data( "ui-form-reset-instances" ) || [];
     1424                if ( !instances.length ) {
     1425
     1426                        // We don't use _on() here because we use a single event handler per form
     1427                        this.form.on( "reset.ui-form-reset", this._formResetHandler );
     1428                }
     1429                instances.push( this );
     1430                this.form.data( "ui-form-reset-instances", instances );
     1431        },
     1432
     1433        _unbindFormResetHandler: function() {
     1434                if ( !this.form.length ) {
     1435                        return;
     1436                }
     1437
     1438                var instances = this.form.data( "ui-form-reset-instances" );
     1439                instances.splice( $.inArray( this, instances ), 1 );
     1440                if ( instances.length ) {
     1441                        this.form.data( "ui-form-reset-instances", instances );
     1442                } else {
     1443                        this.form
     1444                                .removeData( "ui-form-reset-instances" )
     1445                                .off( "reset.ui-form-reset" );
     1446                }
     1447        }
     1448};
     1449
     1450
     1451/*!
     1452 * jQuery UI Legacy jQuery Core patches 1.14.2
     1453 * https://jqueryui.com
     1454 *
     1455 * Copyright OpenJS Foundation and other contributors
     1456 * Released under the MIT license.
     1457 * https://jquery.org/license
     1458 *
     1459 */
     1460
     1461//>>label: Legacy jQuery Core patches
     1462//>>group: Core
     1463//>>description: Backport `.even()`, `.odd()` and `$.escapeSelector` to older jQuery Core versions (deprecated)
     1464
     1465
     1466// Support: jQuery 2.2.x or older.
     1467// This method has been defined in jQuery 3.0.0.
     1468// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js
     1469if ( !$.escapeSelector ) {
     1470        $.escapeSelector = function( id ) {
     1471                return CSS.escape( id + "" );
     1472        };
     1473}
     1474
     1475// Support: jQuery 3.4.x or older
     1476// These methods have been defined in jQuery 3.5.0.
     1477if ( !$.fn.even || !$.fn.odd ) {
     1478        $.fn.extend( {
     1479                even: function() {
     1480                        return this.filter( function( i ) {
     1481                                return i % 2 === 0;
     1482                        } );
     1483                },
     1484                odd: function() {
     1485                        return this.filter( function( i ) {
     1486                                return i % 2 === 1;
     1487                        } );
     1488                }
     1489        } );
     1490}
     1491
     1492;
     1493/*!
     1494 * jQuery UI Keycode 1.14.2
     1495 * https://jqueryui.com
     1496 *
     1497 * Copyright OpenJS Foundation and other contributors
     1498 * Released under the MIT license.
     1499 * https://jquery.org/license
     1500 */
     1501
     1502//>>label: Keycode
     1503//>>group: Core
     1504//>>description: Provide keycodes as keynames
     1505//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/
     1506
     1507
     1508var keycode = $.ui.keyCode = {
     1509        BACKSPACE: 8,
     1510        COMMA: 188,
     1511        DELETE: 46,
     1512        DOWN: 40,
     1513        END: 35,
     1514        ENTER: 13,
     1515        ESCAPE: 27,
     1516        HOME: 36,
     1517        LEFT: 37,
     1518        PAGE_DOWN: 34,
     1519        PAGE_UP: 33,
     1520        PERIOD: 190,
     1521        RIGHT: 39,
     1522        SPACE: 32,
     1523        TAB: 9,
     1524        UP: 38
     1525};
     1526
     1527
     1528/*!
     1529 * jQuery UI Labels 1.14.2
     1530 * https://jqueryui.com
     1531 *
     1532 * Copyright OpenJS Foundation and other contributors
     1533 * Released under the MIT license.
     1534 * https://jquery.org/license
     1535 */
     1536
     1537//>>label: labels
     1538//>>group: Core
     1539//>>description: Find all the labels associated with a given input
     1540//>>docs: https://api.jqueryui.com/labels/
     1541
     1542
     1543var labels = $.fn.labels = function() {
     1544        var ancestor, selector, id, labels, ancestors;
     1545
     1546        if ( !this.length ) {
     1547                return this.pushStack( [] );
     1548        }
     1549
     1550        // Check control.labels first
     1551        if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
     1552                return this.pushStack( this[ 0 ].labels );
     1553        }
     1554
     1555        // If `control.labels` is empty - e.g. inside of document fragments - find
     1556        // the labels manually
     1557        labels = this.eq( 0 ).parents( "label" );
     1558
     1559        // Look for the label based on the id
     1560        id = this.attr( "id" );
     1561        if ( id ) {
     1562
     1563                // We don't search against the document in case the element
     1564                // is disconnected from the DOM
     1565                ancestor = this.eq( 0 ).parents().last();
     1566
     1567                // Get a full set of top level ancestors
     1568                ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
     1569
     1570                // Create a selector for the label based on the id
     1571                selector = "label[for='" + CSS.escape( id ) + "']";
     1572
     1573                labels = labels.add( ancestors.find( selector ).addBack( selector ) );
     1574
     1575        }
     1576
     1577        // Return whatever we have found for labels
     1578        return this.pushStack( labels );
     1579};
     1580
     1581
     1582/*!
     1583 * jQuery UI Scroll Parent 1.14.2
     1584 * https://jqueryui.com
     1585 *
     1586 * Copyright OpenJS Foundation and other contributors
     1587 * Released under the MIT license.
     1588 * https://jquery.org/license
     1589 */
     1590
    9671591//>>label: scrollParent
    9681592//>>group: Core
     
    9701594//>>docs: https://api.jqueryui.com/scrollParent/
    9711595
    972 $.fn.scrollParent = function( includeHidden ) {
     1596
     1597var scrollParent = $.fn.scrollParent = function( includeHidden ) {
    9731598        var position = this.css( "position" ),
    9741599                excludeStaticParent = position === "absolute",
     
    9881613};
    9891614
    990 // Source: tabbable.js
     1615
    9911616/*!
    992  * jQuery UI Tabbable 1.13.3
     1617 * jQuery UI Tabbable 1.14.2
    9931618 * https://jqueryui.com
    9941619 *
     
    10031628//>>docs: https://api.jqueryui.com/tabbable-selector/
    10041629
    1005 $.extend( $.expr.pseudos, {
     1630
     1631var tabbable = $.extend( $.expr.pseudos, {
    10061632        tabbable: function( element ) {
    10071633                var tabIndex = $.attr( element, "tabindex" ),
     
    10111637} );
    10121638
    1013 // Source: unique-id.js
     1639
    10141640/*!
    1015  * jQuery UI Unique ID 1.13.3
     1641 * jQuery UI Unique ID 1.14.2
    10161642 * https://jqueryui.com
    10171643 *
     
    10261652//>>docs: https://api.jqueryui.com/uniqueId/
    10271653
    1028 $.fn.extend( {
     1654
     1655var uniqueId = $.fn.extend( {
    10291656        uniqueId: ( function() {
    10301657                var uuid = 0;
     
    10481675} );
    10491676
    1050 // Source: widget.js
    1051 /*!
    1052  * jQuery UI Widget 1.13.3
    1053  * https://jqueryui.com
    1054  *
    1055  * Copyright OpenJS Foundation and other contributors
    1056  * Released under the MIT license.
    1057  * https://jquery.org/license
    1058  */
    1059 
    1060 //>>label: Widget
    1061 //>>group: Core
    1062 //>>description: Provides a factory for creating stateful widgets with a common API.
    1063 //>>docs: https://api.jqueryui.com/jQuery.widget/
    1064 //>>demos: https://jqueryui.com/widget/
    1065 
    1066 var widgetUuid = 0;
    1067 var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
    1068 var widgetSlice = Array.prototype.slice;
    1069 
    1070 $.cleanData = ( function( orig ) {
    1071         return function( elems ) {
    1072                 var events, elem, i;
    1073                 for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
    1074 
    1075                         // Only trigger remove when necessary to save time
    1076                         events = $._data( elem, "events" );
    1077                         if ( events && events.remove ) {
    1078                                 $( elem ).triggerHandler( "remove" );
    1079                         }
    1080                 }
    1081                 orig( elems );
    1082         };
    1083 } )( $.cleanData );
    1084 
    1085 $.widget = function( name, base, prototype ) {
    1086         var existingConstructor, constructor, basePrototype;
    1087 
    1088         // ProxiedPrototype allows the provided prototype to remain unmodified
    1089         // so that it can be used as a mixin for multiple widgets (#8876)
    1090         var proxiedPrototype = {};
    1091 
    1092         var namespace = name.split( "." )[ 0 ];
    1093         name = name.split( "." )[ 1 ];
    1094         var fullName = namespace + "-" + name;
    1095 
    1096         if ( !prototype ) {
    1097                 prototype = base;
    1098                 base = $.Widget;
    1099         }
    1100 
    1101         if ( Array.isArray( prototype ) ) {
    1102                 prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
    1103         }
    1104 
    1105         // Create selector for plugin
    1106         $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {
    1107                 return !!$.data( elem, fullName );
    1108         };
    1109 
    1110         $[ namespace ] = $[ namespace ] || {};
    1111         existingConstructor = $[ namespace ][ name ];
    1112         constructor = $[ namespace ][ name ] = function( options, element ) {
    1113 
    1114                 // Allow instantiation without "new" keyword
    1115                 if ( !this || !this._createWidget ) {
    1116                         return new constructor( options, element );
    1117                 }
    1118 
    1119                 // Allow instantiation without initializing for simple inheritance
    1120                 // must use "new" keyword (the code above always passes args)
    1121                 if ( arguments.length ) {
    1122                         this._createWidget( options, element );
    1123                 }
    1124         };
    1125 
    1126         // Extend with the existing constructor to carry over any static properties
    1127         $.extend( constructor, existingConstructor, {
    1128                 version: prototype.version,
    1129 
    1130                 // Copy the object used to create the prototype in case we need to
    1131                 // redefine the widget later
    1132                 _proto: $.extend( {}, prototype ),
    1133 
    1134                 // Track widgets that inherit from this widget in case this widget is
    1135                 // redefined after a widget inherits from it
    1136                 _childConstructors: []
    1137         } );
    1138 
    1139         basePrototype = new base();
    1140 
    1141         // We need to make the options hash a property directly on the new instance
    1142         // otherwise we'll modify the options hash on the prototype that we're
    1143         // inheriting from
    1144         basePrototype.options = $.widget.extend( {}, basePrototype.options );
    1145         $.each( prototype, function( prop, value ) {
    1146                 if ( typeof value !== "function" ) {
    1147                         proxiedPrototype[ prop ] = value;
     1677// This is copied from https://github.com/jquery/jquery-ui/blob/1.14.2/ui/plugin.js
     1678// $.ui.plugin is deprecated. Use $.widget() extensions instead.
     1679$.ui.plugin = {
     1680        add: function( module, option, set ) {
     1681                var i,
     1682                        proto = $.ui[ module ].prototype;
     1683                for ( i in set ) {
     1684                        proto.plugins[ i ] = proto.plugins[ i ] || [];
     1685                        proto.plugins[ i ].push( [ option, set[ i ] ] );
     1686                }
     1687        },
     1688        call: function( instance, name, args, allowDisconnected ) {
     1689                var i,
     1690                        set = instance.plugins[ name ];
     1691
     1692                if ( !set ) {
    11481693                        return;
    11491694                }
    1150                 proxiedPrototype[ prop ] = ( function() {
    1151                         function _super() {
    1152                                 return base.prototype[ prop ].apply( this, arguments );
    1153                         }
    1154 
    1155                         function _superApply( args ) {
    1156                                 return base.prototype[ prop ].apply( this, args );
    1157                         }
    1158 
    1159                         return function() {
    1160                                 var __super = this._super;
    1161                                 var __superApply = this._superApply;
    1162                                 var returnValue;
    1163 
    1164                                 this._super = _super;
    1165                                 this._superApply = _superApply;
    1166 
    1167                                 returnValue = value.apply( this, arguments );
    1168 
    1169                                 this._super = __super;
    1170                                 this._superApply = __superApply;
    1171 
    1172                                 return returnValue;
    1173                         };
    1174                 } )();
    1175         } );
    1176         constructor.prototype = $.widget.extend( basePrototype, {
    1177 
    1178                 // TODO: remove support for widgetEventPrefix
    1179                 // always use the name + a colon as the prefix, e.g., draggable:start
    1180                 // don't prefix for widgets that aren't DOM-based
    1181                 widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
    1182         }, proxiedPrototype, {
    1183                 constructor: constructor,
    1184                 namespace: namespace,
    1185                 widgetName: name,
    1186                 widgetFullName: fullName
    1187         } );
    1188 
    1189         // If this widget is being redefined then we need to find all widgets that
    1190         // are inheriting from it and redefine all of them so that they inherit from
    1191         // the new version of this widget. We're essentially trying to replace one
    1192         // level in the prototype chain.
    1193         if ( existingConstructor ) {
    1194                 $.each( existingConstructor._childConstructors, function( i, child ) {
    1195                         var childPrototype = child.prototype;
    1196 
    1197                         // Redefine the child widget using the same prototype that was
    1198                         // originally used, but inherit from the new version of the base
    1199                         $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
    1200                                 child._proto );
    1201                 } );
    1202 
    1203                 // Remove the list of existing child constructors from the old constructor
    1204                 // so the old child constructors can be garbage collected
    1205                 delete existingConstructor._childConstructors;
    1206         } else {
    1207                 base._childConstructors.push( constructor );
    1208         }
    1209 
    1210         $.widget.bridge( name, constructor );
    1211 
    1212         return constructor;
     1695
     1696                if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
     1697                                instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
     1698                        return;
     1699                }
     1700
     1701                for ( i = 0; i < set.length; i++ ) {
     1702                        if ( instance.options[ set[ i ][ 0 ] ] ) {
     1703                                set[ i ][ 1 ].apply( instance.element, args );
     1704                        }
     1705                }
     1706        }
    12131707};
    12141708
    1215 $.widget.extend = function( target ) {
    1216         var input = widgetSlice.call( arguments, 1 );
    1217         var inputIndex = 0;
    1218         var inputLength = input.length;
    1219         var key;
    1220         var value;
    1221 
    1222         for ( ; inputIndex < inputLength; inputIndex++ ) {
    1223                 for ( key in input[ inputIndex ] ) {
    1224                         value = input[ inputIndex ][ key ];
    1225                         if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {
    1226 
    1227                                 // Clone objects
    1228                                 if ( $.isPlainObject( value ) ) {
    1229                                         target[ key ] = $.isPlainObject( target[ key ] ) ?
    1230                                                 $.widget.extend( {}, target[ key ], value ) :
    1231 
    1232                                                 // Don't extend strings, arrays, etc. with objects
    1233                                                 $.widget.extend( {}, value );
    1234 
    1235                                 // Copy everything else by reference
    1236                                 } else {
    1237                                         target[ key ] = value;
    1238                                 }
    1239                         }
    1240                 }
    1241         }
    1242         return target;
    1243 };
    1244 
    1245 $.widget.bridge = function( name, object ) {
    1246         var fullName = object.prototype.widgetFullName || name;
    1247         $.fn[ name ] = function( options ) {
    1248                 var isMethodCall = typeof options === "string";
    1249                 var args = widgetSlice.call( arguments, 1 );
    1250                 var returnValue = this;
    1251 
    1252                 if ( isMethodCall ) {
    1253 
    1254                         // If this is an empty collection, we need to have the instance method
    1255                         // return undefined instead of the jQuery instance
    1256                         if ( !this.length && options === "instance" ) {
    1257                                 returnValue = undefined;
    1258                         } else {
    1259                                 this.each( function() {
    1260                                         var methodValue;
    1261                                         var instance = $.data( this, fullName );
    1262 
    1263                                         if ( options === "instance" ) {
    1264                                                 returnValue = instance;
    1265                                                 return false;
    1266                                         }
    1267 
    1268                                         if ( !instance ) {
    1269                                                 return $.error( "cannot call methods on " + name +
    1270                                                         " prior to initialization; " +
    1271                                                         "attempted to call method '" + options + "'" );
    1272                                         }
    1273 
    1274                                         if ( typeof instance[ options ] !== "function" ||
    1275                                                 options.charAt( 0 ) === "_" ) {
    1276                                                 return $.error( "no such method '" + options + "' for " + name +
    1277                                                         " widget instance" );
    1278                                         }
    1279 
    1280                                         methodValue = instance[ options ].apply( instance, args );
    1281 
    1282                                         if ( methodValue !== instance && methodValue !== undefined ) {
    1283                                                 returnValue = methodValue && methodValue.jquery ?
    1284                                                         returnValue.pushStack( methodValue.get() ) :
    1285                                                         methodValue;
    1286                                                 return false;
    1287                                         }
    1288                                 } );
    1289                         }
    1290                 } else {
    1291 
    1292                         // Allow multiple hashes to be passed on init
    1293                         if ( args.length ) {
    1294                                 options = $.widget.extend.apply( null, [ options ].concat( args ) );
    1295                         }
    1296 
    1297                         this.each( function() {
    1298                                 var instance = $.data( this, fullName );
    1299                                 if ( instance ) {
    1300                                         instance.option( options || {} );
    1301                                         if ( instance._init ) {
    1302                                                 instance._init();
    1303                                         }
    1304                                 } else {
    1305                                         $.data( this, fullName, new object( options, this ) );
    1306                                 }
    1307                         } );
    1308                 }
    1309 
    1310                 return returnValue;
    1311         };
    1312 };
    1313 
    1314 $.Widget = function( /* options, element */ ) {};
    1315 $.Widget._childConstructors = [];
    1316 
    1317 $.Widget.prototype = {
    1318         widgetName: "widget",
    1319         widgetEventPrefix: "",
    1320         defaultElement: "<div>",
    1321 
    1322         options: {
    1323                 classes: {},
    1324                 disabled: false,
    1325 
    1326                 // Callbacks
    1327                 create: null
    1328         },
    1329 
    1330         _createWidget: function( options, element ) {
    1331                 element = $( element || this.defaultElement || this )[ 0 ];
    1332                 this.element = $( element );
    1333                 this.uuid = widgetUuid++;
    1334                 this.eventNamespace = "." + this.widgetName + this.uuid;
    1335 
    1336                 this.bindings = $();
    1337                 this.hoverable = $();
    1338                 this.focusable = $();
    1339                 this.classesElementLookup = {};
    1340 
    1341                 if ( element !== this ) {
    1342                         $.data( element, this.widgetFullName, this );
    1343                         this._on( true, this.element, {
    1344                                 remove: function( event ) {
    1345                                         if ( event.target === element ) {
    1346                                                 this.destroy();
    1347                                         }
    1348                                 }
    1349                         } );
    1350                         this.document = $( element.style ?
    1351 
    1352                                 // Element within the document
    1353                                 element.ownerDocument :
    1354 
    1355                                 // Element is window or document
    1356                                 element.document || element );
    1357                         this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
    1358                 }
    1359 
    1360                 this.options = $.widget.extend( {},
    1361                         this.options,
    1362                         this._getCreateOptions(),
    1363                         options );
    1364 
    1365                 this._create();
    1366 
    1367                 if ( this.options.disabled ) {
    1368                         this._setOptionDisabled( this.options.disabled );
    1369                 }
    1370 
    1371                 this._trigger( "create", null, this._getCreateEventData() );
    1372                 this._init();
    1373         },
    1374 
    1375         _getCreateOptions: function() {
    1376                 return {};
    1377         },
    1378 
    1379         _getCreateEventData: $.noop,
    1380 
    1381         _create: $.noop,
    1382 
    1383         _init: $.noop,
    1384 
    1385         destroy: function() {
    1386                 var that = this;
    1387 
    1388                 this._destroy();
    1389                 $.each( this.classesElementLookup, function( key, value ) {
    1390                         that._removeClass( value, key );
    1391                 } );
    1392 
    1393                 // We can probably remove the unbind calls in 2.0
    1394                 // all event bindings should go through this._on()
    1395                 this.element
    1396                         .off( this.eventNamespace )
    1397                         .removeData( this.widgetFullName );
    1398                 this.widget()
    1399                         .off( this.eventNamespace )
    1400                         .removeAttr( "aria-disabled" );
    1401 
    1402                 // Clean up events and states
    1403                 this.bindings.off( this.eventNamespace );
    1404         },
    1405 
    1406         _destroy: $.noop,
    1407 
    1408         widget: function() {
    1409                 return this.element;
    1410         },
    1411 
    1412         option: function( key, value ) {
    1413                 var options = key;
    1414                 var parts;
    1415                 var curOption;
    1416                 var i;
    1417 
    1418                 if ( arguments.length === 0 ) {
    1419 
    1420                         // Don't return a reference to the internal hash
    1421                         return $.widget.extend( {}, this.options );
    1422                 }
    1423 
    1424                 if ( typeof key === "string" ) {
    1425 
    1426                         // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
    1427                         options = {};
    1428                         parts = key.split( "." );
    1429                         key = parts.shift();
    1430                         if ( parts.length ) {
    1431                                 curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
    1432                                 for ( i = 0; i < parts.length - 1; i++ ) {
    1433                                         curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
    1434                                         curOption = curOption[ parts[ i ] ];
    1435                                 }
    1436                                 key = parts.pop();
    1437                                 if ( arguments.length === 1 ) {
    1438                                         return curOption[ key ] === undefined ? null : curOption[ key ];
    1439                                 }
    1440                                 curOption[ key ] = value;
    1441                         } else {
    1442                                 if ( arguments.length === 1 ) {
    1443                                         return this.options[ key ] === undefined ? null : this.options[ key ];
    1444                                 }
    1445                                 options[ key ] = value;
    1446                         }
    1447                 }
    1448 
    1449                 this._setOptions( options );
    1450 
    1451                 return this;
    1452         },
    1453 
    1454         _setOptions: function( options ) {
    1455                 var key;
    1456 
    1457                 for ( key in options ) {
    1458                         this._setOption( key, options[ key ] );
    1459                 }
    1460 
    1461                 return this;
    1462         },
    1463 
    1464         _setOption: function( key, value ) {
    1465                 if ( key === "classes" ) {
    1466                         this._setOptionClasses( value );
    1467                 }
    1468 
    1469                 this.options[ key ] = value;
    1470 
    1471                 if ( key === "disabled" ) {
    1472                         this._setOptionDisabled( value );
    1473                 }
    1474 
    1475                 return this;
    1476         },
    1477 
    1478         _setOptionClasses: function( value ) {
    1479                 var classKey, elements, currentElements;
    1480 
    1481                 for ( classKey in value ) {
    1482                         currentElements = this.classesElementLookup[ classKey ];
    1483                         if ( value[ classKey ] === this.options.classes[ classKey ] ||
    1484                                         !currentElements ||
    1485                                         !currentElements.length ) {
    1486                                 continue;
    1487                         }
    1488 
    1489                         // We are doing this to create a new jQuery object because the _removeClass() call
    1490                         // on the next line is going to destroy the reference to the current elements being
    1491                         // tracked. We need to save a copy of this collection so that we can add the new classes
    1492                         // below.
    1493                         elements = $( currentElements.get() );
    1494                         this._removeClass( currentElements, classKey );
    1495 
    1496                         // We don't use _addClass() here, because that uses this.options.classes
    1497                         // for generating the string of classes. We want to use the value passed in from
    1498                         // _setOption(), this is the new value of the classes option which was passed to
    1499                         // _setOption(). We pass this value directly to _classes().
    1500                         elements.addClass( this._classes( {
    1501                                 element: elements,
    1502                                 keys: classKey,
    1503                                 classes: value,
    1504                                 add: true
    1505                         } ) );
    1506                 }
    1507         },
    1508 
    1509         _setOptionDisabled: function( value ) {
    1510                 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
    1511 
    1512                 // If the widget is becoming disabled, then nothing is interactive
    1513                 if ( value ) {
    1514                         this._removeClass( this.hoverable, null, "ui-state-hover" );
    1515                         this._removeClass( this.focusable, null, "ui-state-focus" );
    1516                 }
    1517         },
    1518 
    1519         enable: function() {
    1520                 return this._setOptions( { disabled: false } );
    1521         },
    1522 
    1523         disable: function() {
    1524                 return this._setOptions( { disabled: true } );
    1525         },
    1526 
    1527         _classes: function( options ) {
    1528                 var full = [];
    1529                 var that = this;
    1530 
    1531                 options = $.extend( {
    1532                         element: this.element,
    1533                         classes: this.options.classes || {}
    1534                 }, options );
    1535 
    1536                 function bindRemoveEvent() {
    1537                         var nodesToBind = [];
    1538 
    1539                         options.element.each( function( _, element ) {
    1540                                 var isTracked = $.map( that.classesElementLookup, function( elements ) {
    1541                                         return elements;
    1542                                 } )
    1543                                         .some( function( elements ) {
    1544                                                 return elements.is( element );
    1545                                         } );
    1546 
    1547                                 if ( !isTracked ) {
    1548                                         nodesToBind.push( element );
    1549                                 }
    1550                         } );
    1551 
    1552                         that._on( $( nodesToBind ), {
    1553                                 remove: "_untrackClassesElement"
    1554                         } );
    1555                 }
    1556 
    1557                 function processClassString( classes, checkOption ) {
    1558                         var current, i;
    1559                         for ( i = 0; i < classes.length; i++ ) {
    1560                                 current = that.classesElementLookup[ classes[ i ] ] || $();
    1561                                 if ( options.add ) {
    1562                                         bindRemoveEvent();
    1563                                         current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );
    1564                                 } else {
    1565                                         current = $( current.not( options.element ).get() );
    1566                                 }
    1567                                 that.classesElementLookup[ classes[ i ] ] = current;
    1568                                 full.push( classes[ i ] );
    1569                                 if ( checkOption && options.classes[ classes[ i ] ] ) {
    1570                                         full.push( options.classes[ classes[ i ] ] );
    1571                                 }
    1572                         }
    1573                 }
    1574 
    1575                 if ( options.keys ) {
    1576                         processClassString( options.keys.match( /\S+/g ) || [], true );
    1577                 }
    1578                 if ( options.extra ) {
    1579                         processClassString( options.extra.match( /\S+/g ) || [] );
    1580                 }
    1581 
    1582                 return full.join( " " );
    1583         },
    1584 
    1585         _untrackClassesElement: function( event ) {
    1586                 var that = this;
    1587                 $.each( that.classesElementLookup, function( key, value ) {
    1588                         if ( $.inArray( event.target, value ) !== -1 ) {
    1589                                 that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
    1590                         }
    1591                 } );
    1592 
    1593                 this._off( $( event.target ) );
    1594         },
    1595 
    1596         _removeClass: function( element, keys, extra ) {
    1597                 return this._toggleClass( element, keys, extra, false );
    1598         },
    1599 
    1600         _addClass: function( element, keys, extra ) {
    1601                 return this._toggleClass( element, keys, extra, true );
    1602         },
    1603 
    1604         _toggleClass: function( element, keys, extra, add ) {
    1605                 add = ( typeof add === "boolean" ) ? add : extra;
    1606                 var shift = ( typeof element === "string" || element === null ),
    1607                         options = {
    1608                                 extra: shift ? keys : extra,
    1609                                 keys: shift ? element : keys,
    1610                                 element: shift ? this.element : element,
    1611                                 add: add
    1612                         };
    1613                 options.element.toggleClass( this._classes( options ), add );
    1614                 return this;
    1615         },
    1616 
    1617         _on: function( suppressDisabledCheck, element, handlers ) {
    1618                 var delegateElement;
    1619                 var instance = this;
    1620 
    1621                 // No suppressDisabledCheck flag, shuffle arguments
    1622                 if ( typeof suppressDisabledCheck !== "boolean" ) {
    1623                         handlers = element;
    1624                         element = suppressDisabledCheck;
    1625                         suppressDisabledCheck = false;
    1626                 }
    1627 
    1628                 // No element argument, shuffle and use this.element
    1629                 if ( !handlers ) {
    1630                         handlers = element;
    1631                         element = this.element;
    1632                         delegateElement = this.widget();
    1633                 } else {
    1634                         element = delegateElement = $( element );
    1635                         this.bindings = this.bindings.add( element );
    1636                 }
    1637 
    1638                 $.each( handlers, function( event, handler ) {
    1639                         function handlerProxy() {
    1640 
    1641                                 // Allow widgets to customize the disabled handling
    1642                                 // - disabled as an array instead of boolean
    1643                                 // - disabled class as method for disabling individual parts
    1644                                 if ( !suppressDisabledCheck &&
    1645                                                 ( instance.options.disabled === true ||
    1646                                                 $( this ).hasClass( "ui-state-disabled" ) ) ) {
    1647                                         return;
    1648                                 }
    1649                                 return ( typeof handler === "string" ? instance[ handler ] : handler )
    1650                                         .apply( instance, arguments );
    1651                         }
    1652 
    1653                         // Copy the guid so direct unbinding works
    1654                         if ( typeof handler !== "string" ) {
    1655                                 handlerProxy.guid = handler.guid =
    1656                                         handler.guid || handlerProxy.guid || $.guid++;
    1657                         }
    1658 
    1659                         var match = event.match( /^([\w:-]*)\s*(.*)$/ );
    1660                         var eventName = match[ 1 ] + instance.eventNamespace;
    1661                         var selector = match[ 2 ];
    1662 
    1663                         if ( selector ) {
    1664                                 delegateElement.on( eventName, selector, handlerProxy );
    1665                         } else {
    1666                                 element.on( eventName, handlerProxy );
    1667                         }
    1668                 } );
    1669         },
    1670 
    1671         _off: function( element, eventName ) {
    1672                 eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
    1673                         this.eventNamespace;
    1674                 element.off( eventName );
    1675 
    1676                 // Clear the stack to avoid memory leaks (#10056)
    1677                 this.bindings = $( this.bindings.not( element ).get() );
    1678                 this.focusable = $( this.focusable.not( element ).get() );
    1679                 this.hoverable = $( this.hoverable.not( element ).get() );
    1680         },
    1681 
    1682         _delay: function( handler, delay ) {
    1683                 function handlerProxy() {
    1684                         return ( typeof handler === "string" ? instance[ handler ] : handler )
    1685                                 .apply( instance, arguments );
    1686                 }
    1687                 var instance = this;
    1688                 return setTimeout( handlerProxy, delay || 0 );
    1689         },
    1690 
    1691         _hoverable: function( element ) {
    1692                 this.hoverable = this.hoverable.add( element );
    1693                 this._on( element, {
    1694                         mouseenter: function( event ) {
    1695                                 this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
    1696                         },
    1697                         mouseleave: function( event ) {
    1698                                 this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
    1699                         }
    1700                 } );
    1701         },
    1702 
    1703         _focusable: function( element ) {
    1704                 this.focusable = this.focusable.add( element );
    1705                 this._on( element, {
    1706                         focusin: function( event ) {
    1707                                 this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
    1708                         },
    1709                         focusout: function( event ) {
    1710                                 this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
    1711                         }
    1712                 } );
    1713         },
    1714 
    1715         _trigger: function( type, event, data ) {
    1716                 var prop, orig;
    1717                 var callback = this.options[ type ];
    1718 
    1719                 data = data || {};
    1720                 event = $.Event( event );
    1721                 event.type = ( type === this.widgetEventPrefix ?
    1722                         type :
    1723                         this.widgetEventPrefix + type ).toLowerCase();
    1724 
    1725                 // The original event may come from any element
    1726                 // so we need to reset the target on the new event
    1727                 event.target = this.element[ 0 ];
    1728 
    1729                 // Copy original event properties over to the new event
    1730                 orig = event.originalEvent;
    1731                 if ( orig ) {
    1732                         for ( prop in orig ) {
    1733                                 if ( !( prop in event ) ) {
    1734                                         event[ prop ] = orig[ prop ];
    1735                                 }
    1736                         }
    1737                 }
    1738 
    1739                 this.element.trigger( event, data );
    1740                 return !( typeof callback === "function" &&
    1741                         callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
    1742                         event.isDefaultPrevented() );
    1743         }
    1744 };
    1745 
    1746 $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
    1747         $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
    1748                 if ( typeof options === "string" ) {
    1749                         options = { effect: options };
    1750                 }
    1751 
    1752                 var hasOptions;
    1753                 var effectName = !options ?
    1754                         method :
    1755                         options === true || typeof options === "number" ?
    1756                                 defaultEffect :
    1757                                 options.effect || defaultEffect;
    1758 
    1759                 options = options || {};
    1760                 if ( typeof options === "number" ) {
    1761                         options = { duration: options };
    1762                 } else if ( options === true ) {
    1763                         options = {};
    1764                 }
    1765 
    1766                 hasOptions = !$.isEmptyObject( options );
    1767                 options.complete = callback;
    1768 
    1769                 if ( options.delay ) {
    1770                         element.delay( options.delay );
    1771                 }
    1772 
    1773                 if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
    1774                         element[ method ]( options );
    1775                 } else if ( effectName !== method && element[ effectName ] ) {
    1776                         element[ effectName ]( options.duration, options.easing, callback );
    1777                 } else {
    1778                         element.queue( function( next ) {
    1779                                 $( this )[ method ]();
    1780                                 if ( callback ) {
    1781                                         callback.call( element[ 0 ] );
    1782                                 }
    1783                                 next();
    1784                         } );
    1785                 }
    1786         };
    17871709} );
    1788 
    1789 
    1790 } ) );
  • trunk/src/js/_enqueues/vendor/jquery/ui/datepicker.js

    r58218 r62747  
    1 /* eslint-disable max-len, camelcase */
     1/* eslint-disable max-len */
    22/*!
    3  * jQuery UI Datepicker 1.13.3
     3 * jQuery UI Datepicker 1.14.2
    44 * https://jqueryui.com
    55 *
     
    3737"use strict";
    3838
    39 $.extend( $.ui, { datepicker: { version: "1.13.3" } } );
     39$.extend( $.ui, { datepicker: { version: "1.14.2" } } );
    4040
    4141var datepicker_instActive;
     
    436436                }
    437437
     438                $.datepicker._hideDatepicker();
    438439                if ( datepicker_instActive === inst ) {
    439440                        datepicker_instActive = null;
     
    535536                try {
    536537                        return $.data( target, "datepicker" );
    537                 } catch ( err ) {
     538                } catch ( _err ) {
    538539                        throw "Missing instance data for this datepicker";
    539540                }
     
    768769                                        $.datepicker._updateDatepicker( inst );
    769770                                }
    770                         } catch ( err ) {
     771                        } catch ( _err ) {
    771772                        }
    772773                }
     
    911912        },
    912913
    913         // #6694 - don't focus the input if it's already focused
    914         // this breaks the change event in IE
    915         // Support: IE and jQuery <1.9
    916914        _shouldFocusInput: function( inst ) {
    917                 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
     915                return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" );
    918916        },
    919917
     
    972970                        };
    973971
    974                         // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
    975                         if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
     972                        if ( $.effects && ( $.effects.effect[ showAnim ] ) ) {
    976973                                inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );
    977974                        } else {
     
    15441541                try {
    15451542                        date = this.parseDate( dateFormat, dates, settings ) || defaultDate;
    1546                 } catch ( event ) {
     1543                } catch ( _err ) {
    15471544                        dates = ( noDefault ? "" : dates );
    15481545                }
     
    15731570                                        return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),
    15741571                                                offset, $.datepicker._getFormatConfig( inst ) );
    1575                                 } catch ( e ) {
     1572                                } catch ( _e ) {
    15761573
    15771574                                        // Ignore
     
    22342231$.datepicker.initialized = false;
    22352232$.datepicker.uuid = new Date().getTime();
    2236 $.datepicker.version = "1.13.3";
     2233$.datepicker.version = "1.14.2";
    22372234
    22382235return $.datepicker;
  • trunk/src/js/_enqueues/vendor/jquery/ui/dialog.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Dialog 1.13.3
     2 * jQuery UI Dialog 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3232                        "../keycode",
    3333                        "../position",
    34                         "../safe-active-element",
    35                         "../safe-blur",
    3634                        "../tabbable",
    3735                        "../unique-id",
     
    4846
    4947$.widget( "ui.dialog", {
    50         version: "1.13.3",
     48        version: "1.14.2",
    5149        options: {
    5250                appendTo: "body",
     
    8482                show: null,
    8583                title: null,
     84                uiDialogTitleHeadingLevel: 0,
    8685                width: 300,
    8786
     
    230229                        // so in case we have nothing to focus on, explicitly blur the active element
    231230                        // https://bugs.webkit.org/show_bug.cgi?id=47182
    232                         $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
     231                        $( this.document[ 0 ].activeElement ).trigger( "blur" );
    233232                }
    234233
     
    274273
    275274                this._isOpen = true;
    276                 this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
     275                this.opener = $( this.document[ 0 ].activeElement );
    277276
    278277                this._size();
     
    330329
    331330        _restoreTabbableFocus: function() {
    332                 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
     331                var activeElement = this.document[ 0 ].activeElement,
    333332                        isActive = this.uiDialog[ 0 ] === activeElement ||
    334333                                $.contains( this.uiDialog[ 0 ], activeElement );
     
    341340                event.preventDefault();
    342341                this._restoreTabbableFocus();
    343 
    344                 // support: IE
    345                 // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
    346                 // so we check again later
    347                 this._delay( this._restoreTabbableFocus );
    348342        },
    349343
     
    355349                                // Setting tabIndex makes the div focusable
    356350                                tabIndex: -1,
    357                                 role: "dialog"
     351                                role: "dialog",
     352                                "aria-modal": this.options.modal ? "true" : null
    358353                        } )
    359354                        .appendTo( this._appendTo() );
     
    428423                } );
    429424
    430                 // Support: IE
    431                 // Use type="button" to prevent enter keypresses in textboxes from closing the
    432                 // dialog in IE (#9312)
    433425                this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
    434426                        .button( {
     
    447439                } );
    448440
    449                 uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
     441                var uiDialogHeadingLevel = Number.isInteger( this.options.uiDialogTitleHeadingLevel ) &&
     442                        this.options.uiDialogTitleHeadingLevel > 0 &&
     443                        this.options.uiDialogTitleHeadingLevel <= 6 ?
     444                        "h" + this.options.uiDialogTitleHeadingLevel : "span";
     445
     446                uiDialogTitle = $( "<" + uiDialogHeadingLevel + ">" )
     447                        .uniqueId().prependTo( this.uiDialogTitlebar );
    450448                this._addClass( uiDialogTitle, "ui-dialog-title" );
    451449                this._title( uiDialogTitle );
     
    773771                        this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
    774772                }
     773
     774                if ( key === "modal" ) {
     775                        uiDialog.attr( "aria-modal", value ? "true" : null );
     776                }
    775777        },
    776778
     
    858860                }
    859861
    860                 var jqMinor = $.fn.jquery.substring( 0, 4 );
    861 
    862862                // We use a delay in case the overlay is created from an
    863863                // event that we're going to be cancelling (#2804)
     
    881881                                        event.preventDefault();
    882882                                        instance._focusTabbable();
    883 
    884                                         // Support: jQuery >=3.4 <3.7 only
    885                                         // In jQuery 3.4-3.6, there are multiple issues with focus/blur
    886                                         // trigger chains or when triggering is done on a hidden element
    887                                         // at least once.
    888                                         // Trigger focus in a delay in addition if needed to avoid the issues.
    889                                         // See https://github.com/jquery/jquery/issues/4382
    890                                         // See https://github.com/jquery/jquery/issues/4856
    891                                         // See https://github.com/jquery/jquery/issues/4950
    892                                         if ( jqMinor === "3.4." || jqMinor === "3.5." || jqMinor === "3.6." ) {
    893                                                 instance._delay( instance._restoreTabbableFocus );
    894                                         }
    895883                                }
    896884                        }.bind( this ) );
     
    931919// DEPRECATED
    932920// TODO: switch return back to widget declaration at top of file when this is removed
    933 if ( $.uiBackCompat !== false ) {
     921if ( $.uiBackCompat === true ) {
    934922
    935923        // Backcompat for dialogClass option
  • trunk/src/js/_enqueues/vendor/jquery/ui/draggable.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Draggable 1.13.3
     2 * jQuery UI Draggable 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2626                        "../data",
    2727                        "../plugin",
    28                         "../safe-active-element",
    29                         "../safe-blur",
    3028                        "../scroll-parent",
    3129                        "../version",
     
    4139
    4240$.widget( "ui.draggable", $.ui.mouse, {
    43         version: "1.13.3",
     41        version: "1.14.2",
    4442        widgetEventPrefix: "drag",
    4543        options: {
     
    148146
    149147        _blurActiveElement: function( event ) {
    150                 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
     148                var activeElement = this.document[ 0 ].activeElement,
    151149                        target = $( event.target );
    152150
     
    159157
    160158                // Blur any element that currently has focus, see #4261
    161                 $.ui.safeBlur( activeElement );
     159                $( activeElement ).trigger( "blur" );
    162160        },
    163161
  • trunk/src/js/_enqueues/vendor/jquery/ui/droppable.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Droppable 1.13.3
     2 * jQuery UI Droppable 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3636
    3737$.widget( "ui.droppable", {
    38         version: "1.13.3",
     38        version: "1.14.2",
    3939        widgetEventPrefix: "drop",
    4040        options: {
     
    464464// DEPRECATED
    465465// TODO: switch return back to widget declaration at top of file when this is removed
    466 if ( $.uiBackCompat !== false ) {
     466if ( $.uiBackCompat === true ) {
    467467
    468468        // Backcompat for activeClass and hoverClass options
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-blind.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Blind 1.13.3
     2 * jQuery UI Effects Blind 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-bounce.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Bounce 1.13.3
     2 * jQuery UI Effects Bounce 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-clip.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Clip 1.13.3
     2 * jQuery UI Effects Clip 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-drop.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Drop 1.13.3
     2 * jQuery UI Effects Drop 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-explode.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Explode 1.13.3
     2 * jQuery UI Effects Explode 1.14.2
    33 * https://jqueryui.com
    44 *
     
    1010//>>label: Explode Effect
    1111//>>group: Effects
    12 /* eslint-disable max-len */
    1312//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.
    14 /* eslint-enable max-len */
    1513//>>docs: https://api.jqueryui.com/explode-effect/
    1614//>>demos: https://jqueryui.com/effect/
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-fade.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Fade 1.13.3
     2 * jQuery UI Effects Fade 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-fold.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Fold 1.13.3
     2 * jQuery UI Effects Fold 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-highlight.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Highlight 1.13.3
     2 * jQuery UI Effects Highlight 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-puff.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Puff 1.13.3
     2 * jQuery UI Effects Puff 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-pulsate.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Pulsate 1.13.3
     2 * jQuery UI Effects Pulsate 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-scale.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Scale 1.13.3
     2 * jQuery UI Effects Scale 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-shake.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Shake 1.13.3
     2 * jQuery UI Effects Shake 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-size.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Size 1.13.3
     2 * jQuery UI Effects Size 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-slide.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Slide 1.13.3
     2 * jQuery UI Effects Slide 1.14.2
    33 * https://jqueryui.com
    44 *
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect-transfer.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects Transfer 1.13.3
     2 * jQuery UI Effects Transfer 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3434
    3535var effect;
    36 if ( $.uiBackCompat !== false ) {
     36if ( $.uiBackCompat === true ) {
    3737        effect = $.effects.define( "transfer", function( options, done ) {
    3838                $( this ).transfer( options, done );
  • trunk/src/js/_enqueues/vendor/jquery/ui/effect.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Effects 1.13.3
     2 * jQuery UI Effects 1.14.2
    33 * https://jqueryui.com
    44 *
     
    1010//>>label: Effects Core
    1111//>>group: Effects
    12 /* eslint-disable max-len */
    1312//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.
    14 /* eslint-enable max-len */
    1513//>>docs: https://api.jqueryui.com/category/effects-core/
    1614//>>demos: https://jqueryui.com/effect/
     
    8280function getElementStyles( elem ) {
    8381        var key, len,
    84                 style = elem.ownerDocument.defaultView ?
    85                         elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
    86                         elem.currentStyle,
     82                style = elem.ownerDocument.defaultView.getComputedStyle( elem ),
    8783                styles = {};
    8884
    89         if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
    90                 len = style.length;
    91                 while ( len-- ) {
    92                         key = style[ len ];
    93                         if ( typeof style[ key ] === "string" ) {
    94                                 styles[ camelCase( key ) ] = style[ key ];
    95                         }
    96                 }
    97 
    98         // Support: Opera, IE <9
    99         } else {
    100                 for ( key in style ) {
    101                         if ( typeof style[ key ] === "string" ) {
    102                                 styles[ key ] = style[ key ];
    103                         }
     85        len = style.length;
     86        while ( len-- ) {
     87                key = style[ len ];
     88                if ( typeof style[ key ] === "string" ) {
     89                        styles[ camelCase( key ) ] = style[ key ];
    10490                }
    10591        }
     
    124110
    125111        return diff;
    126 }
    127 
    128 // Support: jQuery <1.8
    129 if ( !$.fn.addBack ) {
    130         $.fn.addBack = function( selector ) {
    131                 return this.add( selector == null ?
    132                         this.prevObject : this.prevObject.filter( selector )
    133                 );
    134         };
    135112}
    136113
     
    274251}
    275252
    276 if ( $.uiBackCompat !== false ) {
     253if ( $.uiBackCompat === true ) {
    277254        $.extend( $.effects, {
    278255
     
    342319                                // eslint-disable-next-line no-unused-expressions
    343320                                active.id;
    344                         } catch ( e ) {
     321                        } catch ( _e ) {
    345322                                active = document.body;
    346323                        }
     
    403380
    404381$.extend( $.effects, {
    405         version: "1.13.3",
     382        version: "1.14.2",
    406383
    407384        define: function( name, mode, effect ) {
     
    760737                        args.mode = modes.shift();
    761738
    762                         if ( $.uiBackCompat !== false && !defaultMode ) {
     739                        if ( $.uiBackCompat === true && !defaultMode ) {
    763740                                if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
    764741
  • trunk/src/js/_enqueues/vendor/jquery/ui/menu.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Menu 1.13.3
     2 * jQuery UI Menu 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2727                        "../keycode",
    2828                        "../position",
    29                         "../safe-active-element",
    3029                        "../unique-id",
    3130                        "../version",
     
    4140
    4241return $.widget( "ui.menu", {
    43         version: "1.13.3",
     42        version: "1.14.2",
    4443        defaultElement: "<ul>",
    4544        delay: 300,
     
    8887                        "click .ui-menu-item": function( event ) {
    8988                                var target = $( event.target );
    90                                 var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
     89                                var active = $( this.document[ 0 ].activeElement );
    9190                                if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
    9291                                        this.select( event );
     
    132131                                        var notContained = !$.contains(
    133132                                                this.element[ 0 ],
    134                                                 $.ui.safeActiveElement( this.document[ 0 ] )
     133                                                this.document[ 0 ].activeElement
    135134                                        );
    136135                                        if ( notContained ) {
  • trunk/src/js/_enqueues/vendor/jquery/ui/mouse.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Mouse 1.13.3
     2 * jQuery UI Mouse 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2121                define( [
    2222                        "jquery",
    23                         "../ie",
    2423                        "../version",
    2524                        "../widget"
     
    3938
    4039return $.widget( "ui.mouse", {
    41         version: "1.13.3",
     40        version: "1.14.2",
    4241        options: {
    4342                cancel: "input, textarea, button, select, option",
     
    9190
    9291                var that = this,
    93                         btnIsLeft = ( event.which === 1 ),
    94 
    95                         // event.target.nodeName works around a bug in IE 8 with
    96                         // disabled inputs (#7620)
    97                         elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
    98                                 $( event.target ).closest( this.options.cancel ).length : false );
     92                        btnIsLeft = event.which === 1,
     93                        elIsCancel = typeof this.options.cancel === "string" ?
     94                                $( event.target ).closest( this.options.cancel ).length :
     95                                false;
    9996                if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
    10097                        return true;
     
    142139
    143140                // Only check for mouseups outside the document if you've moved inside the document
    144                 // at least once. This prevents the firing of mouseup in the case of IE<9, which will
    145                 // fire a mousemove event if content is placed under the cursor. See #7778
    146                 // Support: IE <9
    147                 if ( this._mouseMoved ) {
    148 
    149                         // IE mouseup check - mouseup happened when mouse was out of window
    150                         if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
    151                                         !event.button ) {
     141                // at least once.
     142                if ( this._mouseMoved && !event.which ) {
     143
     144                        // Support: Safari <=8 - 9
     145                        // Safari sets which to 0 if you press any of the following keys
     146                        // during a drag (#14461)
     147                        if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
     148                                        event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
     149                                this.ignoreMissingWhich = true;
     150                        } else if ( !this.ignoreMissingWhich ) {
    152151                                return this._mouseUp( event );
    153 
    154                         // Iframe mouseup check - mouseup occurred in another document
    155                         } else if ( !event.which ) {
    156 
    157                                 // Support: Safari <=8 - 9
    158                                 // Safari sets which to 0 if you press any of the following keys
    159                                 // during a drag (#14461)
    160                                 if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
    161                                                 event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
    162                                         this.ignoreMissingWhich = true;
    163                                 } else if ( !this.ignoreMissingWhich ) {
    164                                         return this._mouseUp( event );
    165                                 }
    166152                        }
    167153                }
  • trunk/src/js/_enqueues/vendor/jquery/ui/progressbar.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Progressbar 1.13.3
     2 * jQuery UI Progressbar 1.14.2
    33 * https://jqueryui.com
    44 *
     
    1010//>>label: Progressbar
    1111//>>group: Widgets
    12 /* eslint-disable max-len */
    1312//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.
    14 /* eslint-enable max-len */
    1513//>>docs: https://api.jqueryui.com/progressbar/
    1614//>>demos: https://jqueryui.com/progressbar/
     
    3937
    4038return $.widget( "ui.progressbar", {
    41         version: "1.13.3",
     39        version: "1.14.2",
    4240        options: {
    4341                classes: {
  • trunk/src/js/_enqueues/vendor/jquery/ui/resizable.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Resizable 1.13.3
     2 * jQuery UI Resizable 1.14.2
    33 * https://jqueryui.com
    44 *
     
    4040
    4141$.widget( "ui.resizable", $.ui.mouse, {
    42         version: "1.13.3",
     42        version: "1.14.2",
    4343        widgetEventPrefix: "resize",
    4444        options: {
     
    8181        _hasScroll: function( el, a ) {
    8282
    83                 if ( $( el ).css( "overflow" ) === "hidden" ) {
     83                var scroll,
     84                        has = false,
     85                        overflow = $( el ).css( "overflow" );
     86
     87                if ( overflow === "hidden" ) {
    8488                        return false;
    8589                }
    86 
    87                 var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
    88                         has = false;
     90                if ( overflow === "scroll" ) {
     91                        return true;
     92                }
     93
     94                scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop";
    8995
    9096                if ( el[ scroll ] > 0 ) {
     
    99105                        has = ( el[ scroll ] > 0 );
    100106                        el[ scroll ] = 0;
    101                 } catch ( e ) {
     107                } catch ( _e ) {
    102108
    103109                        // `el` might be a string, then setting `scroll` will throw
     
    150156
    151157                        this.element.css( margins );
    152                         this.originalElement.css( "margin", 0 );
    153 
    154                         // support: Safari
     158
     159                        // Support: Safari
    155160                        // Prevent Safari textarea resize
    156161                        this.originalResizeStyle = this.originalElement.css( "resize" );
     
    162167                                display: "block"
    163168                        } ) );
    164 
    165                         // Support: IE9
    166                         // avoid IE jump (hard set the margin)
    167                         this.originalElement.css( margins );
    168169
    169170                        this._proportionallyResize();
     
    368369        _mouseStart: function( event ) {
    369370
    370                 var curleft, curtop, cursor,
     371                var curleft, curtop, cursor, calculatedSize,
    371372                        o = this.options,
    372373                        el = this.element;
     
    386387                this.offset = this.helper.offset();
    387388                this.position = { left: curleft, top: curtop };
     389
     390                if ( !this._helper ) {
     391                        calculatedSize = this._calculateAdjustedElementDimensions( el );
     392                }
    388393
    389394                this.size = this._helper ? {
     
    391396                                height: this.helper.height()
    392397                        } : {
    393                                 width: el.width(),
    394                                 height: el.height()
     398                                width: calculatedSize.width,
     399                                height: calculatedSize.height
    395400                        };
    396401
     
    399404                                height: el.outerHeight()
    400405                        } : {
    401                                 width: el.width(),
    402                                 height: el.height()
     406                                width: calculatedSize.width,
     407                                height: calculatedSize.height
    403408                        };
    404409
     
    694699                        width: widths[ 1 ] + widths[ 3 ]
    695700                };
     701        },
     702
     703        _calculateAdjustedElementDimensions: function( element ) {
     704                var elWidth, elHeight, paddingBorder,
     705                        ce = element.get( 0 );
     706
     707                if ( element.css( "box-sizing" ) !== "content-box" ||
     708                        ( !this._hasScroll( ce ) && !this._hasScroll( ce, "left" ) ) ) {
     709                                return {
     710                                        height: parseFloat( element.css( "height" ) ),
     711                                        width: parseFloat( element.css( "width" ) )
     712                                };
     713                }
     714
     715                // Check if CSS inline styles are set and use those (usually from previous resizes)
     716                elWidth = parseFloat( ce.style.width );
     717                elHeight = parseFloat( ce.style.height );
     718
     719                paddingBorder = this._getPaddingPlusBorderDimensions( element );
     720                elWidth = isNaN( elWidth ) ?
     721                        this._getElementTheoreticalSize( element, paddingBorder, "width" ) :
     722                        elWidth;
     723                elHeight = isNaN( elHeight ) ?
     724                        this._getElementTheoreticalSize( element, paddingBorder, "height" ) :
     725                        elHeight;
     726
     727                return {
     728                        height: elHeight,
     729                        width: elWidth
     730                };
     731        },
     732
     733        _getElementTheoreticalSize: function( element, extraSize, dimension ) {
     734
     735                // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
     736                var size = Math.max( 0, Math.ceil(
     737                        element.get( 0 )[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
     738                        extraSize[ dimension ] -
     739                        0.5
     740
     741                // If offsetWidth/offsetHeight is unknown, then we can't determine theoretical size.
     742                // Use an explicit zero to avoid NaN.
     743                // See https://github.com/jquery/jquery/issues/3964
     744                ) ) || 0;
     745
     746                return size;
    696747        },
    697748
     
    10501101
    10511102                $( o.alsoResize ).each( function() {
    1052                         var el = $( this );
     1103                        var el = $( this ),
     1104                                elSize = that._calculateAdjustedElementDimensions( el );
     1105
    10531106                        el.data( "ui-resizable-alsoresize", {
    1054                                 width: parseFloat( el.css( "width" ) ), height: parseFloat( el.css( "height" ) ),
     1107                                width: elSize.width, height: elSize.height,
    10551108                                left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
    10561109                        } );
     
    11141167                // DEPRECATED
    11151168                // TODO: remove after 1.12
    1116                 if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
     1169                if ( $.uiBackCompat === true && typeof that.options.ghost === "string" ) {
    11171170
    11181171                        // Ghost option
  • trunk/src/js/_enqueues/vendor/jquery/ui/selectable.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Selectable 1.13.3
     2 * jQuery UI Selectable 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3636
    3737return $.widget( "ui.selectable", $.ui.mouse, {
    38         version: "1.13.3",
     38        version: "1.14.2",
    3939        options: {
    4040                appendTo: "body",
  • trunk/src/js/_enqueues/vendor/jquery/ui/selectmenu.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Selectmenu 1.13.3
     2 * jQuery UI Selectmenu 1.14.2
    33 * https://jqueryui.com
    44 *
     
    1010//>>label: Selectmenu
    1111//>>group: Widgets
    12 /* eslint-disable max-len */
    1312//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.
    14 /* eslint-enable max-len */
    1513//>>docs: https://api.jqueryui.com/selectmenu/
    1614//>>demos: https://jqueryui.com/selectmenu/
     
    4543
    4644return $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
    47         version: "1.13.3",
     45        version: "1.14.2",
    4846        defaultElement: "<select>",
    4947        options: {
     
    168166                                select: function( event, ui ) {
    169167                                        event.preventDefault();
    170 
    171                                         // Support: IE8
    172                                         // If the item was selected via a click, the text selection
    173                                         // will be destroyed in IE
    174                                         that._setSelection();
    175 
    176168                                        that._select( ui.item.data( "ui-selectmenu-item" ), event );
    177169                                },
     
    410402                }
    411403
    412                 if ( window.getSelection ) {
    413                         selection = window.getSelection();
    414                         selection.removeAllRanges();
    415                         selection.addRange( this.range );
    416 
    417                 // Support: IE8
    418                 } else {
    419                         this.range.select();
    420                 }
    421 
    422                 // Support: IE
    423                 // Setting the text selection kills the button focus in IE, but
    424                 // restoring the focus doesn't kill the selection.
    425                 this.button.trigger( "focus" );
     404                selection = window.getSelection();
     405                selection.removeAllRanges();
     406                selection.addRange( this.range );
    426407        },
    427408
     
    433414
    434415                        if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +
    435                                 $.escapeSelector( this.ids.button ) ).length ) {
     416                                CSS.escape( this.ids.button ) ).length ) {
    436417                                this.close( event );
    437418                        }
     
    443424                // Prevent text selection from being reset when interacting with the selectmenu (#10144)
    444425                mousedown: function() {
    445                         var selection;
    446 
    447                         if ( window.getSelection ) {
    448                                 selection = window.getSelection();
    449                                 if ( selection.rangeCount ) {
    450                                         this.range = selection.getRangeAt( 0 );
    451                                 }
    452 
    453                         // Support: IE8
    454                         } else {
    455                                 this.range = document.selection.createRange();
     426                        var selection = window.getSelection();
     427                        if ( selection.rangeCount ) {
     428                                this.range = selection.getRangeAt( 0 );
    456429                        }
    457430                },
     
    644617                this.menu.outerWidth( Math.max(
    645618                        this.button.outerWidth(),
    646 
    647                         // Support: IE10
    648                         // IE10 wraps long text (possibly a rounding bug)
    649                         // so we add 1px to avoid the wrapping
    650                         this.menu.width( "" ).outerWidth() + 1
     619                        this.menu.width( "" ).outerWidth()
    651620                ) );
    652621        },
  • trunk/src/js/_enqueues/vendor/jquery/ui/slider.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Slider 1.13.3
     2 * jQuery UI Slider 1.14.2
    33 * https://jqueryui.com
    44 *
     
    3939
    4040return $.widget( "ui.slider", $.ui.mouse, {
    41         version: "1.13.3",
     41        version: "1.14.2",
    4242        widgetEventPrefix: "slide",
    4343
  • trunk/src/js/_enqueues/vendor/jquery/ui/sortable.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Sortable 1.13.3
     2 * jQuery UI Sortable 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2525                        "./mouse",
    2626                        "../data",
    27                         "../ie",
    2827                        "../scroll-parent",
    2928                        "../version",
     
    3938
    4039return $.widget( "ui.sortable", $.ui.mouse, {
    41         version: "1.13.3",
     40        version: "1.14.2",
    4241        widgetEventPrefix: "sort",
    4342        ready: false,
     
    277276                        body = this.document.find( "body" );
    278277
    279                         // Support: IE
    280                         this.storedCursor = body.css( "cursor" );
    281                         body.css( "cursor", o.cursor );
    282 
    283                         this.storedStylesheet =
     278                        this._storedStylesheet =
    284279                                $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
    285280                }
     
    11981193                }
    11991194
    1200                 // This needs to be actually done for all browsers, since pageX/pageY includes this
    1201                 // information with an ugly IE fix
    1202                 if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
    1203                                 ( this.offsetParent[ 0 ].tagName &&
    1204                                 this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
     1195                // This needs to be actually done for all browsers, since pageX/pageY includes
     1196                // this information.
     1197                if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ) {
    12051198                        po = { top: 0, left: 0 };
    12061199                }
     
    15501543
    15511544                //Do what was originally in plugins
    1552                 if ( this.storedCursor ) {
    1553                         this.document.find( "body" ).css( "cursor", this.storedCursor );
    1554                         this.storedStylesheet.remove();
     1545                if ( this._storedStylesheet ) {
     1546                        this._storedStylesheet.remove();
     1547                        this._storedStylesheet = null;
    15551548                }
    15561549                if ( this._storedOpacity ) {
  • trunk/src/js/_enqueues/vendor/jquery/ui/spinner.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Spinner 1.13.3
     2 * jQuery UI Spinner 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2828                        "../version",
    2929                        "../keycode",
    30                         "../safe-active-element",
    3130                        "../widget"
    3231                ], factory );
     
    5150
    5251$.widget( "ui.spinner", {
    53         version: "1.13.3",
     52        version: "1.14.2",
    5453        defaultElement: "<input>",
    5554        widgetEventPrefix: "spin",
     
    132131                },
    133132                blur: function( event ) {
    134                         if ( this.cancelBlur ) {
    135                                 delete this.cancelBlur;
    136                                 return;
    137                         }
    138 
    139133                        this._stop();
    140134                        this._refresh();
     
    143137                        }
    144138                },
    145                 mousewheel: function( event, delta ) {
    146                         var activeElement = $.ui.safeActiveElement( this.document[ 0 ] );
     139                wheel: function( event ) {
     140                        var activeElement = this.document[ 0 ].activeElement;
    147141                        var isActive = this.element[ 0 ] === activeElement;
     142                        var delta = event.deltaY || event.originalEvent && event.originalEvent.deltaY;
    148143
    149144                        if ( !isActive || !delta ) {
     
    155150                        }
    156151
    157                         this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );
     152                        this._spin( ( delta > 0 ? -1 : 1 ) * this.options.step, event );
    158153                        clearTimeout( this.mousewheelTimer );
    159154                        this.mousewheelTimer = this._delay( function() {
     
    164159                        event.preventDefault();
    165160                },
     161
     162                // DEPRECATED
     163                // Kept for backwards compatibility. Please use the modern `wheel`
     164                // event. The `delta` parameter is provided by the jQuery Mousewheel
     165                // plugin if one is loaded.
     166                mousewheel: function( event, delta ) {
     167                        if ( !event.isTrigger ) {
     168
     169                                // If this is not a trigger call, the `wheel` handler will
     170                                // fire as well, let's not duplicate it.
     171                                return;
     172                        }
     173
     174                        var wheelEvent = $.Event( event );
     175                        wheelEvent.type = "wheel";
     176                        if ( delta ) {
     177                                wheelEvent.deltaY = -delta;
     178                        }
     179                        return this._events.wheel.call( this, wheelEvent );
     180                },
     181
    166182                "mousedown .ui-spinner-button": function( event ) {
    167183                        var previous;
     
    172188                        // when the input first received focus. If the input is not focused
    173189                        // then we need to set this.previous based on the value before spinning.
    174                         previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?
     190                        previous = this.element[ 0 ] === this.document[ 0 ].activeElement ?
    175191                                this.previous : this.element.val();
    176192                        function checkFocus() {
    177                                 var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );
     193                                var isActive = this.element[ 0 ] === this.document[ 0 ].activeElement;
    178194                                if ( !isActive ) {
    179195                                        this.element.trigger( "focus" );
    180196                                        this.previous = previous;
    181 
    182                                         // support: IE
    183                                         // IE sets focus asynchronously, so we need to check if focus
    184                                         // moved off of the input because the user clicked on the button.
    185                                         this._delay( function() {
    186                                                 this.previous = previous;
    187                                         } );
    188197                                }
    189198                        }
     
    192201                        event.preventDefault();
    193202                        checkFocus.call( this );
    194 
    195                         // Support: IE
    196                         // IE doesn't prevent moving focus even with event.preventDefault()
    197                         // so we set a flag to know when we should ignore the blur event
    198                         // and check (again) if focus moved off of the input.
    199                         this.cancelBlur = true;
    200                         this._delay( function() {
    201                                 delete this.cancelBlur;
    202                                 checkFocus.call( this );
    203                         } );
    204203
    205204                        if ( this._start( event ) === false ) {
     
    555554// DEPRECATED
    556555// TODO: switch return back to widget declaration at top of file when this is removed
    557 if ( $.uiBackCompat !== false ) {
     556if ( $.uiBackCompat === true ) {
    558557
    559558        // Backcompat for spinner html extension points
  • trunk/src/js/_enqueues/vendor/jquery/ui/tabs.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Tabs 1.13.3
     2 * jQuery UI Tabs 1.14.2
    33 * https://jqueryui.com
    44 *
     
    2626                        "jquery",
    2727                        "../keycode",
    28                         "../safe-active-element",
    2928                        "../unique-id",
    3029                        "../version",
     
    4039
    4140$.widget( "ui.tabs", {
    42         version: "1.13.3",
     41        version: "1.14.2",
    4342        delay: 300,
    4443        options: {
     
    6362        },
    6463
    65         _isLocal: ( function() {
    66                 var rhash = /#.*$/;
    67 
    68                 return function( anchor ) {
    69                         var anchorUrl, locationUrl;
    70 
    71                         anchorUrl = anchor.href.replace( rhash, "" );
    72                         locationUrl = location.href.replace( rhash, "" );
    73 
    74                         // Decoding may throw an error if the URL isn't UTF-8 (#9518)
    75                         try {
    76                                 anchorUrl = decodeURIComponent( anchorUrl );
    77                         } catch ( error ) {}
    78                         try {
    79                                 locationUrl = decodeURIComponent( locationUrl );
    80                         } catch ( error ) {}
    81 
    82                         return anchor.hash.length > 1 && anchorUrl === locationUrl;
    83                 };
    84         } )(),
     64        _isLocal: function( anchor ) {
     65                var anchorUrl = new URL( anchor.href ),
     66                        locationUrl = new URL( location.href );
     67
     68                return anchor.hash.length > 1 &&
     69
     70                        // `href` may contain a hash but also username & password;
     71                        // we want to ignore them, so we check the three fields
     72                        // below instead.
     73                        anchorUrl.origin === locationUrl.origin &&
     74                        anchorUrl.pathname === locationUrl.pathname &&
     75                        anchorUrl.search === locationUrl.search;
     76        },
    8577
    8678        _create: function() {
     
    123115                var active = this.options.active,
    124116                        collapsible = this.options.collapsible,
    125                         locationHash = location.hash.substring( 1 );
     117                        locationHash = location.hash.substring( 1 ),
     118                        locationHashDecoded = decodeURIComponent( locationHash );
    126119
    127120                if ( active === null ) {
     
    135128                                        }
    136129                                } );
     130
     131                                // If not found, decode the hash & try again.
     132                                // See the comment in `_processTabs` under the `_isLocal` check
     133                                // for more information.
     134                                if ( active === null ) {
     135                                        this.tabs.each( function( i, tab ) {
     136                                                if ( $( tab ).attr( "aria-controls" ) === locationHashDecoded ) {
     137                                                        active = i;
     138                                                        return false;
     139                                                }
     140                                        } );
     141                                }
    137142                        }
    138143
     
    172177
    173178        _tabKeydown: function( event ) {
    174                 var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
     179                var focusedTab = $( this.document[ 0 ].activeElement ).closest( "li" ),
    175180                        selectedIndex = this.tabs.index( focusedTab ),
    176181                        goingForward = true;
     
    314319        },
    315320
    316         _sanitizeSelector: function( hash ) {
    317                 return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
    318         },
    319 
    320321        refresh: function() {
    321322                var options = this.options,
     
    409410                                        event.preventDefault();
    410411                                }
    411                         } )
    412 
    413                         // Support: IE <9
    414                         // Preventing the default action in mousedown doesn't prevent IE
    415                         // from focusing the element, so if the anchor gets focused, blur.
    416                         // We don't have to worry about focusing the previously focused
    417                         // element since clicking on a non-focusable element should focus
    418                         // the body anyway.
    419                         .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
    420                                 if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
    421                                         this.blur();
    422                                 }
    423412                        } );
    424413
     
    448437                        // Inline tab
    449438                        if ( that._isLocal( anchor ) ) {
     439
     440                                // The "scrolling to a fragment" section of the HTML spec:
     441                                // https://html.spec.whatwg.org/#scrolling-to-a-fragment
     442                                // uses a concept of document's indicated part:
     443                                // https://html.spec.whatwg.org/#the-indicated-part-of-the-document
     444                                // Slightly below there's an algorithm to compute the indicated
     445                                // part:
     446                                // https://html.spec.whatwg.org/#the-indicated-part-of-the-document
     447                                // First, the algorithm tries the hash as-is, without decoding.
     448                                // Then, if one is not found, the same is attempted with a decoded
     449                                // hash. Replicate this logic.
    450450                                selector = anchor.hash;
    451451                                panelId = selector.substring( 1 );
    452                                 panel = that.element.find( that._sanitizeSelector( selector ) );
     452                                panel = that.element.find( "#" + CSS.escape( panelId ) );
     453                                if ( !panel.length ) {
     454                                        panelId = decodeURIComponent( panelId );
     455                                        panel = that.element.find( "#" + CSS.escape( panelId ) );
     456                                }
    453457
    454458                        // remote tab
     
    736740                if ( typeof index === "string" ) {
    737741                        index = this.anchors.index( this.anchors.filter( "[href$='" +
    738                                 $.escapeSelector( index ) + "']" ) );
     742                                CSS.escape( index ) + "']" ) );
    739743                }
    740744
     
    858862                this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
    859863
    860                 // Support: jQuery <1.8
    861                 // jQuery <1.8 returns false if the request is canceled in beforeSend,
    862                 // but as of 1.8, $.ajax() always returns a jqXHR object.
    863                 if ( this.xhr && this.xhr.statusText !== "canceled" ) {
     864                if ( this.xhr.statusText !== "canceled" ) {
    864865                        this._addClass( tab, "ui-tabs-loading" );
    865866                        panel.attr( "aria-busy", "true" );
     
    867868                        this.xhr
    868869                                .done( function( response, status, jqXHR ) {
    869 
    870                                         // support: jQuery <1.8
    871                                         // https://bugs.jquery.com/ticket/11778
    872                                         setTimeout( function() {
    873                                                 panel.html( response );
    874                                                 that._trigger( "load", event, eventData );
    875 
    876                                                 complete( jqXHR, status );
    877                                         }, 1 );
     870                                        panel.html( response );
     871                                        that._trigger( "load", event, eventData );
     872
     873                                        complete( jqXHR, status );
    878874                                } )
    879875                                .fail( function( jqXHR, status ) {
    880 
    881                                         // support: jQuery <1.8
    882                                         // https://bugs.jquery.com/ticket/11778
    883                                         setTimeout( function() {
    884                                                 complete( jqXHR, status );
    885                                         }, 1 );
     876                                        complete( jqXHR, status );
    886877                                } );
    887878                }
     
    891882                var that = this;
    892883                return {
    893 
    894                         // Support: IE <11 only
    895                         // Strip any hash that exists to prevent errors with the Ajax request
    896                         url: anchor.attr( "href" ).replace( /#.*$/, "" ),
     884                        url: anchor.attr( "href" ),
    897885                        beforeSend: function( jqXHR, settings ) {
    898886                                return that._trigger( "beforeLoad", event,
     
    904892        _getPanelForTab: function( tab ) {
    905893                var id = $( tab ).attr( "aria-controls" );
    906                 return this.element.find( this._sanitizeSelector( "#" + id ) );
     894                return this.element.find( "#" + CSS.escape( id ) );
    907895        }
    908896} );
     
    910898// DEPRECATED
    911899// TODO: Switch return back to widget declaration at top of file when this is removed
    912 if ( $.uiBackCompat !== false ) {
     900if ( $.uiBackCompat === true ) {
    913901
    914902        // Backcompat for ui-tab class (now ui-tabs-tab)
  • trunk/src/js/_enqueues/vendor/jquery/ui/tooltip.js

    r58218 r62747  
    11/*!
    2  * jQuery UI Tooltip 1.13.3
     2 * jQuery UI Tooltip 1.14.2
    33 * https://jqueryui.com
    44 *
     
    4040
    4141$.widget( "ui.tooltip", {
    42         version: "1.13.3",
     42        version: "1.14.2",
    4343        options: {
    4444                classes: {
     
    228228                content = contentOption.call( target[ 0 ], function( response ) {
    229229
    230                         // IE may instantly serve a cached response for ajax requests
    231                         // delay this call to _open so the other call to _open runs first
    232                         that._delay( function() {
    233 
    234                                 // Ignore async response if tooltip was closed already
    235                                 if ( !target.data( "ui-tooltip-open" ) ) {
    236                                         return;
    237                                 }
    238 
    239                                 // JQuery creates a special event for focusin when it doesn't
    240                                 // exist natively. To improve performance, the native event
    241                                 // object is reused and the type is changed. Therefore, we can't
    242                                 // rely on the type being correct after the event finished
    243                                 // bubbling, so we set it back to the previous value. (#8740)
    244                                 if ( event ) {
    245                                         event.type = eventType;
    246                                 }
    247                                 this._open( event, target, response );
    248                         } );
     230                        // Ignore async response if tooltip was closed already
     231                        if ( !target.data( "ui-tooltip-open" ) ) {
     232                                return;
     233                        }
     234
     235                        // JQuery creates a special event for focusin when it doesn't
     236                        // exist natively. To improve performance, the native event
     237                        // object is reused and the type is changed. Therefore, we can't
     238                        // rely on the type being correct after the event finished
     239                        // bubbling, so we set it back to the previous value. (#8740)
     240                        if ( event ) {
     241                                event.type = eventType;
     242                        }
     243                        that._open( event, target, response );
    249244                } );
    250245                if ( content ) {
     
    506501// DEPRECATED
    507502// TODO: Switch return back to widget declaration at top of file when this is removed
    508 if ( $.uiBackCompat !== false ) {
     503if ( $.uiBackCompat === true ) {
    509504
    510505        // Backcompat for tooltipClass option
  • trunk/src/wp-includes/script-loader.php

    r62741 r62747  
    916916         * A notable change is that 'jquery-ui-core' now contains 'jquery-ui-position' and 'jquery-ui-widget'.
    917917         */
    918         $scripts->add( 'jquery-ui-core', "/wp-includes/js/jquery/ui/core$suffix.js", array( 'jquery' ), '1.13.3', 1 );
    919         $scripts->add( 'jquery-effects-core', "/wp-includes/js/jquery/ui/effect$suffix.js", array( 'jquery' ), '1.13.3', 1 );
    920 
    921         $scripts->add( 'jquery-effects-blind', "/wp-includes/js/jquery/ui/effect-blind$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    922         $scripts->add( 'jquery-effects-bounce', "/wp-includes/js/jquery/ui/effect-bounce$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    923         $scripts->add( 'jquery-effects-clip', "/wp-includes/js/jquery/ui/effect-clip$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    924         $scripts->add( 'jquery-effects-drop', "/wp-includes/js/jquery/ui/effect-drop$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    925         $scripts->add( 'jquery-effects-explode', "/wp-includes/js/jquery/ui/effect-explode$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    926         $scripts->add( 'jquery-effects-fade', "/wp-includes/js/jquery/ui/effect-fade$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    927         $scripts->add( 'jquery-effects-fold', "/wp-includes/js/jquery/ui/effect-fold$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    928         $scripts->add( 'jquery-effects-highlight', "/wp-includes/js/jquery/ui/effect-highlight$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    929         $scripts->add( 'jquery-effects-puff', "/wp-includes/js/jquery/ui/effect-puff$suffix.js", array( 'jquery-effects-core', 'jquery-effects-scale' ), '1.13.3', 1 );
    930         $scripts->add( 'jquery-effects-pulsate', "/wp-includes/js/jquery/ui/effect-pulsate$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    931         $scripts->add( 'jquery-effects-scale', "/wp-includes/js/jquery/ui/effect-scale$suffix.js", array( 'jquery-effects-core', 'jquery-effects-size' ), '1.13.3', 1 );
    932         $scripts->add( 'jquery-effects-shake', "/wp-includes/js/jquery/ui/effect-shake$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    933         $scripts->add( 'jquery-effects-size', "/wp-includes/js/jquery/ui/effect-size$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    934         $scripts->add( 'jquery-effects-slide', "/wp-includes/js/jquery/ui/effect-slide$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
    935         $scripts->add( 'jquery-effects-transfer', "/wp-includes/js/jquery/ui/effect-transfer$suffix.js", array( 'jquery-effects-core' ), '1.13.3', 1 );
     918        $scripts->add( 'jquery-ui-core', "/wp-includes/js/jquery/ui/core$suffix.js", array( 'jquery' ), '1.14.2', 1 );
     919        $scripts->add_inline_script( 'jquery-ui-core', 'jQuery.uiBackCompat = true;', 'before' );
     920        $scripts->add( 'jquery-effects-core', "/wp-includes/js/jquery/ui/effect$suffix.js", array( 'jquery' ), '1.14.2', 1 );
     921
     922        $scripts->add( 'jquery-effects-blind', "/wp-includes/js/jquery/ui/effect-blind$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     923        $scripts->add( 'jquery-effects-bounce', "/wp-includes/js/jquery/ui/effect-bounce$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     924        $scripts->add( 'jquery-effects-clip', "/wp-includes/js/jquery/ui/effect-clip$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     925        $scripts->add( 'jquery-effects-drop', "/wp-includes/js/jquery/ui/effect-drop$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     926        $scripts->add( 'jquery-effects-explode', "/wp-includes/js/jquery/ui/effect-explode$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     927        $scripts->add( 'jquery-effects-fade', "/wp-includes/js/jquery/ui/effect-fade$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     928        $scripts->add( 'jquery-effects-fold', "/wp-includes/js/jquery/ui/effect-fold$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     929        $scripts->add( 'jquery-effects-highlight', "/wp-includes/js/jquery/ui/effect-highlight$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     930        $scripts->add( 'jquery-effects-puff', "/wp-includes/js/jquery/ui/effect-puff$suffix.js", array( 'jquery-effects-core', 'jquery-effects-scale' ), '1.14.2', 1 );
     931        $scripts->add( 'jquery-effects-pulsate', "/wp-includes/js/jquery/ui/effect-pulsate$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     932        $scripts->add( 'jquery-effects-scale', "/wp-includes/js/jquery/ui/effect-scale$suffix.js", array( 'jquery-effects-core', 'jquery-effects-size' ), '1.14.2', 1 );
     933        $scripts->add( 'jquery-effects-shake', "/wp-includes/js/jquery/ui/effect-shake$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     934        $scripts->add( 'jquery-effects-size', "/wp-includes/js/jquery/ui/effect-size$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     935        $scripts->add( 'jquery-effects-slide', "/wp-includes/js/jquery/ui/effect-slide$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
     936        $scripts->add( 'jquery-effects-transfer', "/wp-includes/js/jquery/ui/effect-transfer$suffix.js", array( 'jquery-effects-core' ), '1.14.2', 1 );
    936937
    937938        // Widgets
    938         $scripts->add( 'jquery-ui-accordion', "/wp-includes/js/jquery/ui/accordion$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    939         $scripts->add( 'jquery-ui-autocomplete', "/wp-includes/js/jquery/ui/autocomplete$suffix.js", array( 'jquery-ui-menu', 'wp-a11y' ), '1.13.3', 1 );
    940         $scripts->add( 'jquery-ui-button', "/wp-includes/js/jquery/ui/button$suffix.js", array( 'jquery-ui-core', 'jquery-ui-controlgroup', 'jquery-ui-checkboxradio' ), '1.13.3', 1 );
    941         $scripts->add( 'jquery-ui-datepicker', "/wp-includes/js/jquery/ui/datepicker$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    942         $scripts->add( 'jquery-ui-dialog', "/wp-includes/js/jquery/ui/dialog$suffix.js", array( 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button' ), '1.13.3', 1 );
    943         $scripts->add( 'jquery-ui-menu', "/wp-includes/js/jquery/ui/menu$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    944         $scripts->add( 'jquery-ui-mouse', "/wp-includes/js/jquery/ui/mouse$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    945         $scripts->add( 'jquery-ui-progressbar', "/wp-includes/js/jquery/ui/progressbar$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    946         $scripts->add( 'jquery-ui-selectmenu', "/wp-includes/js/jquery/ui/selectmenu$suffix.js", array( 'jquery-ui-menu' ), '1.13.3', 1 );
    947         $scripts->add( 'jquery-ui-slider', "/wp-includes/js/jquery/ui/slider$suffix.js", array( 'jquery-ui-mouse' ), '1.13.3', 1 );
    948         $scripts->add( 'jquery-ui-spinner', "/wp-includes/js/jquery/ui/spinner$suffix.js", array( 'jquery-ui-button' ), '1.13.3', 1 );
    949         $scripts->add( 'jquery-ui-tabs', "/wp-includes/js/jquery/ui/tabs$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    950         $scripts->add( 'jquery-ui-tooltip', "/wp-includes/js/jquery/ui/tooltip$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    951 
    952         // New in 1.12.1
    953         $scripts->add( 'jquery-ui-checkboxradio', "/wp-includes/js/jquery/ui/checkboxradio$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
    954         $scripts->add( 'jquery-ui-controlgroup', "/wp-includes/js/jquery/ui/controlgroup$suffix.js", array( 'jquery-ui-core' ), '1.13.3', 1 );
     939        $scripts->add( 'jquery-ui-accordion', "/wp-includes/js/jquery/ui/accordion$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     940        $scripts->add( 'jquery-ui-autocomplete', "/wp-includes/js/jquery/ui/autocomplete$suffix.js", array( 'jquery-ui-menu', 'wp-a11y' ), '1.14.2', 1 );
     941        $scripts->add( 'jquery-ui-button', "/wp-includes/js/jquery/ui/button$suffix.js", array( 'jquery-ui-core', 'jquery-ui-controlgroup', 'jquery-ui-checkboxradio' ), '1.14.2', 1 );
     942        $scripts->add( 'jquery-ui-datepicker', "/wp-includes/js/jquery/ui/datepicker$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     943        $scripts->add( 'jquery-ui-dialog', "/wp-includes/js/jquery/ui/dialog$suffix.js", array( 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button' ), '1.14.2', 1 );
     944        $scripts->add( 'jquery-ui-menu', "/wp-includes/js/jquery/ui/menu$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     945        $scripts->add( 'jquery-ui-mouse', "/wp-includes/js/jquery/ui/mouse$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     946        $scripts->add( 'jquery-ui-progressbar', "/wp-includes/js/jquery/ui/progressbar$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     947        $scripts->add( 'jquery-ui-selectmenu', "/wp-includes/js/jquery/ui/selectmenu$suffix.js", array( 'jquery-ui-menu' ), '1.14.2', 1 );
     948        $scripts->add( 'jquery-ui-slider', "/wp-includes/js/jquery/ui/slider$suffix.js", array( 'jquery-ui-mouse' ), '1.14.2', 1 );
     949        $scripts->add( 'jquery-ui-spinner', "/wp-includes/js/jquery/ui/spinner$suffix.js", array( 'jquery-ui-button' ), '1.14.2', 1 );
     950        $scripts->add( 'jquery-ui-tabs', "/wp-includes/js/jquery/ui/tabs$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     951        $scripts->add( 'jquery-ui-tooltip', "/wp-includes/js/jquery/ui/tooltip$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     952
     953        // Added in jQuery UI 1.12.1.
     954        $scripts->add( 'jquery-ui-checkboxradio', "/wp-includes/js/jquery/ui/checkboxradio$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
     955        $scripts->add( 'jquery-ui-controlgroup', "/wp-includes/js/jquery/ui/controlgroup$suffix.js", array( 'jquery-ui-core' ), '1.14.2', 1 );
    955956
    956957        // Interactions
    957         $scripts->add( 'jquery-ui-draggable', "/wp-includes/js/jquery/ui/draggable$suffix.js", array( 'jquery-ui-mouse' ), '1.13.3', 1 );
    958         $scripts->add( 'jquery-ui-droppable', "/wp-includes/js/jquery/ui/droppable$suffix.js", array( 'jquery-ui-draggable' ), '1.13.3', 1 );
    959         $scripts->add( 'jquery-ui-resizable', "/wp-includes/js/jquery/ui/resizable$suffix.js", array( 'jquery-ui-mouse' ), '1.13.3', 1 );
    960         $scripts->add( 'jquery-ui-selectable', "/wp-includes/js/jquery/ui/selectable$suffix.js", array( 'jquery-ui-mouse' ), '1.13.3', 1 );
    961         $scripts->add( 'jquery-ui-sortable', "/wp-includes/js/jquery/ui/sortable$suffix.js", array( 'jquery-ui-mouse' ), '1.13.3', 1 );
     958        $scripts->add( 'jquery-ui-draggable', "/wp-includes/js/jquery/ui/draggable$suffix.js", array( 'jquery-ui-mouse' ), '1.14.2', 1 );
     959        $scripts->add( 'jquery-ui-droppable', "/wp-includes/js/jquery/ui/droppable$suffix.js", array( 'jquery-ui-draggable' ), '1.14.2', 1 );
     960        $scripts->add( 'jquery-ui-resizable', "/wp-includes/js/jquery/ui/resizable$suffix.js", array( 'jquery-ui-mouse' ), '1.14.2', 1 );
     961        $scripts->add( 'jquery-ui-selectable', "/wp-includes/js/jquery/ui/selectable$suffix.js", array( 'jquery-ui-mouse' ), '1.14.2', 1 );
     962        $scripts->add( 'jquery-ui-sortable', "/wp-includes/js/jquery/ui/sortable$suffix.js", array( 'jquery-ui-mouse' ), '1.14.2', 1 );
    962963
    963964        /*
     
    965966         * Listed here for back-compat.
    966967         */
    967         $scripts->add( 'jquery-ui-position', false, array( 'jquery-ui-core' ), '1.13.3', 1 );
    968         $scripts->add( 'jquery-ui-widget', false, array( 'jquery-ui-core' ), '1.13.3', 1 );
     968        $scripts->add( 'jquery-ui-position', false, array( 'jquery-ui-core' ), '1.14.2', 1 );
     969        $scripts->add( 'jquery-ui-widget', false, array( 'jquery-ui-core' ), '1.14.2', 1 );
    969970
    970971        // Deprecated, not used in core, most functionality is included in jQuery 1.3.
Note: See TracChangeset for help on using the changeset viewer.