: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
_setOptionDisabled: function( value ) {
this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
// If the widget is becoming disabled, then nothing is interactive
this._removeClass( this.hoverable, null, "ui-state-hover" );
this._removeClass( this.focusable, null, "ui-state-focus" );
return this._setOptions( { disabled: false } );
return this._setOptions( { disabled: true } );
_classes: function( options ) {
classes: this.options.classes || {}
function bindRemoveEvent() {
options.element.each( function( _, element ) {
var isTracked = $.map( that.classesElementLookup, function( elements ) {
.some( function( elements ) {
return elements.is( element );
nodesToBind.push( element );
that._on( $( nodesToBind ), {
remove: "_untrackClassesElement"
function processClassString( classes, checkOption ) {
for ( i = 0; i < classes.length; i++ ) {
current = that.classesElementLookup[ classes[ i ] ] || $();
current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );
current = $( current.not( options.element ).get() );
that.classesElementLookup[ classes[ i ] ] = current;
full.push( classes[ i ] );
if ( checkOption && options.classes[ classes[ i ] ] ) {
full.push( options.classes[ classes[ i ] ] );
processClassString( options.keys.match( /\S+/g ) || [], true );
processClassString( options.extra.match( /\S+/g ) || [] );
_untrackClassesElement: function( event ) {
$.each( that.classesElementLookup, function( key, value ) {
if ( $.inArray( event.target, value ) !== -1 ) {
that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
this._off( $( event.target ) );
_removeClass: function( element, keys, extra ) {
return this._toggleClass( element, keys, extra, false );
_addClass: function( element, keys, extra ) {
return this._toggleClass( element, keys, extra, true );
_toggleClass: function( element, keys, extra, add ) {
add = ( typeof add === "boolean" ) ? add : extra;
var shift = ( typeof element === "string" || element === null ),
extra: shift ? keys : extra,
keys: shift ? element : keys,
element: shift ? this.element : element,
options.element.toggleClass( this._classes( options ), add );
_on: function( suppressDisabledCheck, element, handlers ) {
// No suppressDisabledCheck flag, shuffle arguments
if ( typeof suppressDisabledCheck !== "boolean" ) {
element = suppressDisabledCheck;
suppressDisabledCheck = false;
// No element argument, shuffle and use this.element
delegateElement = this.widget();
element = delegateElement = $( element );
this.bindings = this.bindings.add( element );
$.each( handlers, function( event, handler ) {
function handlerProxy() {
// Allow widgets to customize the disabled handling
// - disabled as an array instead of boolean
// - disabled class as method for disabling individual parts
if ( !suppressDisabledCheck &&
( instance.options.disabled === true ||
$( this ).hasClass( "ui-state-disabled" ) ) ) {
return ( typeof handler === "string" ? instance[ handler ] : handler )
.apply( instance, arguments );
// Copy the guid so direct unbinding works
if ( typeof handler !== "string" ) {
handlerProxy.guid = handler.guid =
handler.guid || handlerProxy.guid || $.guid++;
var match = event.match( /^([\w:-]*)\s*(.*)$/ );
var eventName = match[ 1 ] + instance.eventNamespace;
var selector = match[ 2 ];
delegateElement.on( eventName, selector, handlerProxy );
element.on( eventName, handlerProxy );
_off: function( element, eventName ) {
eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
element.off( eventName );
// Clear the stack to avoid memory leaks (#10056)
this.bindings = $( this.bindings.not( element ).get() );
this.focusable = $( this.focusable.not( element ).get() );
this.hoverable = $( this.hoverable.not( element ).get() );
_delay: function( handler, delay ) {
function handlerProxy() {
return ( typeof handler === "string" ? instance[ handler ] : handler )
.apply( instance, arguments );
return setTimeout( handlerProxy, delay || 0 );
_hoverable: function( element ) {
this.hoverable = this.hoverable.add( element );
mouseenter: function( event ) {
this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
mouseleave: function( event ) {
this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
_focusable: function( element ) {
this.focusable = this.focusable.add( element );
focusin: function( event ) {
this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
focusout: function( event ) {
this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
_trigger: function( type, event, data ) {
var callback = this.options[ type ];
event = $.Event( event );
event.type = ( type === this.widgetEventPrefix ?
this.widgetEventPrefix + type ).toLowerCase();
// The original event may come from any element
// so we need to reset the target on the new event
event.target = this.element[ 0 ];
// Copy original event properties over to the new event
orig = event.originalEvent;
if ( !( prop in event ) ) {
event[ prop ] = orig[ prop ];
this.element.trigger( event, data );
return !( typeof callback === "function" &&
callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
event.isDefaultPrevented() );
$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
if ( typeof options === "string" ) {
options = { effect: options };
var effectName = !options ?
options === true || typeof options === "number" ?
options.effect || defaultEffect;
if ( typeof options === "number" ) {
options = { duration: options };
} else if ( options === true ) {
hasOptions = !$.isEmptyObject( options );
options.complete = callback;
element.delay( options.delay );
if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
element[ method ]( options );
} else if ( effectName !== method && element[ effectName ] ) {
element[ effectName ]( options.duration, options.easing, callback );
element.queue( function( next ) {
callback.call( element[ 0 ] );