Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../public_h.../wp-admin/js
File: customize-widgets.js
[1000] Fix | Delete
self.container.slideUp( function() {
[1001] Fix | Delete
var sidebarsWidgetsControl = api.Widgets.getSidebarWidgetControlContainingWidget( self.params.widget_id ),
[1002] Fix | Delete
sidebarWidgetIds, i;
[1003] Fix | Delete
[1004] Fix | Delete
if ( ! sidebarsWidgetsControl ) {
[1005] Fix | Delete
return;
[1006] Fix | Delete
}
[1007] Fix | Delete
[1008] Fix | Delete
sidebarWidgetIds = sidebarsWidgetsControl.setting().slice();
[1009] Fix | Delete
i = _.indexOf( sidebarWidgetIds, self.params.widget_id );
[1010] Fix | Delete
if ( -1 === i ) {
[1011] Fix | Delete
return;
[1012] Fix | Delete
}
[1013] Fix | Delete
[1014] Fix | Delete
sidebarWidgetIds.splice( i, 1 );
[1015] Fix | Delete
sidebarsWidgetsControl.setting( sidebarWidgetIds );
[1016] Fix | Delete
[1017] Fix | Delete
$adjacentFocusTarget.focus(); // Keyboard accessibility.
[1018] Fix | Delete
} );
[1019] Fix | Delete
} );
[1020] Fix | Delete
[1021] Fix | Delete
replaceDeleteWithRemove = function() {
[1022] Fix | Delete
$removeBtn.text( l10n.removeBtnLabel ); // wp_widget_control() outputs the button as "Delete".
[1023] Fix | Delete
$removeBtn.attr( 'title', l10n.removeBtnTooltip );
[1024] Fix | Delete
};
[1025] Fix | Delete
[1026] Fix | Delete
if ( this.params.is_new ) {
[1027] Fix | Delete
api.bind( 'saved', replaceDeleteWithRemove );
[1028] Fix | Delete
} else {
[1029] Fix | Delete
replaceDeleteWithRemove();
[1030] Fix | Delete
}
[1031] Fix | Delete
},
[1032] Fix | Delete
[1033] Fix | Delete
/**
[1034] Fix | Delete
* Find all inputs in a widget container that should be considered when
[1035] Fix | Delete
* comparing the loaded form with the sanitized form, whose fields will
[1036] Fix | Delete
* be aligned to copy the sanitized over. The elements returned by this
[1037] Fix | Delete
* are passed into this._getInputsSignature(), and they are iterated
[1038] Fix | Delete
* over when copying sanitized values over to the form loaded.
[1039] Fix | Delete
*
[1040] Fix | Delete
* @param {jQuery} container element in which to look for inputs
[1041] Fix | Delete
* @return {jQuery} inputs
[1042] Fix | Delete
* @private
[1043] Fix | Delete
*/
[1044] Fix | Delete
_getInputs: function( container ) {
[1045] Fix | Delete
return $( container ).find( ':input[name]' );
[1046] Fix | Delete
},
[1047] Fix | Delete
[1048] Fix | Delete
/**
[1049] Fix | Delete
* Iterate over supplied inputs and create a signature string for all of them together.
[1050] Fix | Delete
* This string can be used to compare whether or not the form has all of the same fields.
[1051] Fix | Delete
*
[1052] Fix | Delete
* @param {jQuery} inputs
[1053] Fix | Delete
* @return {string}
[1054] Fix | Delete
* @private
[1055] Fix | Delete
*/
[1056] Fix | Delete
_getInputsSignature: function( inputs ) {
[1057] Fix | Delete
var inputsSignatures = _( inputs ).map( function( input ) {
[1058] Fix | Delete
var $input = $( input ), signatureParts;
[1059] Fix | Delete
[1060] Fix | Delete
if ( $input.is( ':checkbox, :radio' ) ) {
[1061] Fix | Delete
signatureParts = [ $input.attr( 'id' ), $input.attr( 'name' ), $input.prop( 'value' ) ];
[1062] Fix | Delete
} else {
[1063] Fix | Delete
signatureParts = [ $input.attr( 'id' ), $input.attr( 'name' ) ];
[1064] Fix | Delete
}
[1065] Fix | Delete
[1066] Fix | Delete
return signatureParts.join( ',' );
[1067] Fix | Delete
} );
[1068] Fix | Delete
[1069] Fix | Delete
return inputsSignatures.join( ';' );
[1070] Fix | Delete
},
[1071] Fix | Delete
[1072] Fix | Delete
/**
[1073] Fix | Delete
* Get the state for an input depending on its type.
[1074] Fix | Delete
*
[1075] Fix | Delete
* @param {jQuery|Element} input
[1076] Fix | Delete
* @return {string|boolean|Array|*}
[1077] Fix | Delete
* @private
[1078] Fix | Delete
*/
[1079] Fix | Delete
_getInputState: function( input ) {
[1080] Fix | Delete
input = $( input );
[1081] Fix | Delete
if ( input.is( ':radio, :checkbox' ) ) {
[1082] Fix | Delete
return input.prop( 'checked' );
[1083] Fix | Delete
} else if ( input.is( 'select[multiple]' ) ) {
[1084] Fix | Delete
return input.find( 'option:selected' ).map( function () {
[1085] Fix | Delete
return $( this ).val();
[1086] Fix | Delete
} ).get();
[1087] Fix | Delete
} else {
[1088] Fix | Delete
return input.val();
[1089] Fix | Delete
}
[1090] Fix | Delete
},
[1091] Fix | Delete
[1092] Fix | Delete
/**
[1093] Fix | Delete
* Update an input's state based on its type.
[1094] Fix | Delete
*
[1095] Fix | Delete
* @param {jQuery|Element} input
[1096] Fix | Delete
* @param {string|boolean|Array|*} state
[1097] Fix | Delete
* @private
[1098] Fix | Delete
*/
[1099] Fix | Delete
_setInputState: function ( input, state ) {
[1100] Fix | Delete
input = $( input );
[1101] Fix | Delete
if ( input.is( ':radio, :checkbox' ) ) {
[1102] Fix | Delete
input.prop( 'checked', state );
[1103] Fix | Delete
} else if ( input.is( 'select[multiple]' ) ) {
[1104] Fix | Delete
if ( ! Array.isArray( state ) ) {
[1105] Fix | Delete
state = [];
[1106] Fix | Delete
} else {
[1107] Fix | Delete
// Make sure all state items are strings since the DOM value is a string.
[1108] Fix | Delete
state = _.map( state, function ( value ) {
[1109] Fix | Delete
return String( value );
[1110] Fix | Delete
} );
[1111] Fix | Delete
}
[1112] Fix | Delete
input.find( 'option' ).each( function () {
[1113] Fix | Delete
$( this ).prop( 'selected', -1 !== _.indexOf( state, String( this.value ) ) );
[1114] Fix | Delete
} );
[1115] Fix | Delete
} else {
[1116] Fix | Delete
input.val( state );
[1117] Fix | Delete
}
[1118] Fix | Delete
},
[1119] Fix | Delete
[1120] Fix | Delete
/***********************************************************************
[1121] Fix | Delete
* Begin public API methods
[1122] Fix | Delete
**********************************************************************/
[1123] Fix | Delete
[1124] Fix | Delete
/**
[1125] Fix | Delete
* @return {wp.customize.controlConstructor.sidebar_widgets[]}
[1126] Fix | Delete
*/
[1127] Fix | Delete
getSidebarWidgetsControl: function() {
[1128] Fix | Delete
var settingId, sidebarWidgetsControl;
[1129] Fix | Delete
[1130] Fix | Delete
settingId = 'sidebars_widgets[' + this.params.sidebar_id + ']';
[1131] Fix | Delete
sidebarWidgetsControl = api.control( settingId );
[1132] Fix | Delete
[1133] Fix | Delete
if ( ! sidebarWidgetsControl ) {
[1134] Fix | Delete
return;
[1135] Fix | Delete
}
[1136] Fix | Delete
[1137] Fix | Delete
return sidebarWidgetsControl;
[1138] Fix | Delete
},
[1139] Fix | Delete
[1140] Fix | Delete
/**
[1141] Fix | Delete
* Submit the widget form via Ajax and get back the updated instance,
[1142] Fix | Delete
* along with the new widget control form to render.
[1143] Fix | Delete
*
[1144] Fix | Delete
* @param {Object} [args]
[1145] Fix | Delete
* @param {Object|null} [args.instance=null] When the model changes, the instance is sent here; otherwise, the inputs from the form are used
[1146] Fix | Delete
* @param {Function|null} [args.complete=null] Function which is called when the request finishes. Context is bound to the control. First argument is any error. Following arguments are for success.
[1147] Fix | Delete
* @param {boolean} [args.ignoreActiveElement=false] Whether or not updating a field will be deferred if focus is still on the element.
[1148] Fix | Delete
*/
[1149] Fix | Delete
updateWidget: function( args ) {
[1150] Fix | Delete
var self = this, instanceOverride, completeCallback, $widgetRoot, $widgetContent,
[1151] Fix | Delete
updateNumber, params, data, $inputs, processing, jqxhr, isChanged;
[1152] Fix | Delete
[1153] Fix | Delete
// The updateWidget logic requires that the form fields to be fully present.
[1154] Fix | Delete
self.embedWidgetContent();
[1155] Fix | Delete
[1156] Fix | Delete
args = $.extend( {
[1157] Fix | Delete
instance: null,
[1158] Fix | Delete
complete: null,
[1159] Fix | Delete
ignoreActiveElement: false
[1160] Fix | Delete
}, args );
[1161] Fix | Delete
[1162] Fix | Delete
instanceOverride = args.instance;
[1163] Fix | Delete
completeCallback = args.complete;
[1164] Fix | Delete
[1165] Fix | Delete
this._updateCount += 1;
[1166] Fix | Delete
updateNumber = this._updateCount;
[1167] Fix | Delete
[1168] Fix | Delete
$widgetRoot = this.container.find( '.widget:first' );
[1169] Fix | Delete
$widgetContent = $widgetRoot.find( '.widget-content:first' );
[1170] Fix | Delete
[1171] Fix | Delete
// Remove a previous error message.
[1172] Fix | Delete
$widgetContent.find( '.widget-error' ).remove();
[1173] Fix | Delete
[1174] Fix | Delete
this.container.addClass( 'widget-form-loading' );
[1175] Fix | Delete
this.container.addClass( 'previewer-loading' );
[1176] Fix | Delete
processing = api.state( 'processing' );
[1177] Fix | Delete
processing( processing() + 1 );
[1178] Fix | Delete
[1179] Fix | Delete
if ( ! this.liveUpdateMode ) {
[1180] Fix | Delete
this.container.addClass( 'widget-form-disabled' );
[1181] Fix | Delete
}
[1182] Fix | Delete
[1183] Fix | Delete
params = {};
[1184] Fix | Delete
params.action = 'update-widget';
[1185] Fix | Delete
params.wp_customize = 'on';
[1186] Fix | Delete
params.nonce = api.settings.nonce['update-widget'];
[1187] Fix | Delete
params.customize_theme = api.settings.theme.stylesheet;
[1188] Fix | Delete
params.customized = wp.customize.previewer.query().customized;
[1189] Fix | Delete
[1190] Fix | Delete
data = $.param( params );
[1191] Fix | Delete
$inputs = this._getInputs( $widgetContent );
[1192] Fix | Delete
[1193] Fix | Delete
/*
[1194] Fix | Delete
* Store the value we're submitting in data so that when the response comes back,
[1195] Fix | Delete
* we know if it got sanitized; if there is no difference in the sanitized value,
[1196] Fix | Delete
* then we do not need to touch the UI and mess up the user's ongoing editing.
[1197] Fix | Delete
*/
[1198] Fix | Delete
$inputs.each( function() {
[1199] Fix | Delete
$( this ).data( 'state' + updateNumber, self._getInputState( this ) );
[1200] Fix | Delete
} );
[1201] Fix | Delete
[1202] Fix | Delete
if ( instanceOverride ) {
[1203] Fix | Delete
data += '&' + $.param( { 'sanitized_widget_setting': JSON.stringify( instanceOverride ) } );
[1204] Fix | Delete
} else {
[1205] Fix | Delete
data += '&' + $inputs.serialize();
[1206] Fix | Delete
}
[1207] Fix | Delete
data += '&' + $widgetContent.find( '~ :input' ).serialize();
[1208] Fix | Delete
[1209] Fix | Delete
if ( this._previousUpdateRequest ) {
[1210] Fix | Delete
this._previousUpdateRequest.abort();
[1211] Fix | Delete
}
[1212] Fix | Delete
jqxhr = $.post( wp.ajax.settings.url, data );
[1213] Fix | Delete
this._previousUpdateRequest = jqxhr;
[1214] Fix | Delete
[1215] Fix | Delete
jqxhr.done( function( r ) {
[1216] Fix | Delete
var message, sanitizedForm, $sanitizedInputs, hasSameInputsInResponse,
[1217] Fix | Delete
isLiveUpdateAborted = false;
[1218] Fix | Delete
[1219] Fix | Delete
// Check if the user is logged out.
[1220] Fix | Delete
if ( '0' === r ) {
[1221] Fix | Delete
api.previewer.preview.iframe.hide();
[1222] Fix | Delete
api.previewer.login().done( function() {
[1223] Fix | Delete
self.updateWidget( args );
[1224] Fix | Delete
api.previewer.preview.iframe.show();
[1225] Fix | Delete
} );
[1226] Fix | Delete
return;
[1227] Fix | Delete
}
[1228] Fix | Delete
[1229] Fix | Delete
// Check for cheaters.
[1230] Fix | Delete
if ( '-1' === r ) {
[1231] Fix | Delete
api.previewer.cheatin();
[1232] Fix | Delete
return;
[1233] Fix | Delete
}
[1234] Fix | Delete
[1235] Fix | Delete
if ( r.success ) {
[1236] Fix | Delete
sanitizedForm = $( '<div>' + r.data.form + '</div>' );
[1237] Fix | Delete
$sanitizedInputs = self._getInputs( sanitizedForm );
[1238] Fix | Delete
hasSameInputsInResponse = self._getInputsSignature( $inputs ) === self._getInputsSignature( $sanitizedInputs );
[1239] Fix | Delete
[1240] Fix | Delete
// Restore live update mode if sanitized fields are now aligned with the existing fields.
[1241] Fix | Delete
if ( hasSameInputsInResponse && ! self.liveUpdateMode ) {
[1242] Fix | Delete
self.liveUpdateMode = true;
[1243] Fix | Delete
self.container.removeClass( 'widget-form-disabled' );
[1244] Fix | Delete
self.container.find( 'input[name="savewidget"]' ).hide();
[1245] Fix | Delete
}
[1246] Fix | Delete
[1247] Fix | Delete
// Sync sanitized field states to existing fields if they are aligned.
[1248] Fix | Delete
if ( hasSameInputsInResponse && self.liveUpdateMode ) {
[1249] Fix | Delete
$inputs.each( function( i ) {
[1250] Fix | Delete
var $input = $( this ),
[1251] Fix | Delete
$sanitizedInput = $( $sanitizedInputs[i] ),
[1252] Fix | Delete
submittedState, sanitizedState, canUpdateState;
[1253] Fix | Delete
[1254] Fix | Delete
submittedState = $input.data( 'state' + updateNumber );
[1255] Fix | Delete
sanitizedState = self._getInputState( $sanitizedInput );
[1256] Fix | Delete
$input.data( 'sanitized', sanitizedState );
[1257] Fix | Delete
[1258] Fix | Delete
canUpdateState = ( ! _.isEqual( submittedState, sanitizedState ) && ( args.ignoreActiveElement || ! $input.is( document.activeElement ) ) );
[1259] Fix | Delete
if ( canUpdateState ) {
[1260] Fix | Delete
self._setInputState( $input, sanitizedState );
[1261] Fix | Delete
}
[1262] Fix | Delete
} );
[1263] Fix | Delete
[1264] Fix | Delete
$( document ).trigger( 'widget-synced', [ $widgetRoot, r.data.form ] );
[1265] Fix | Delete
[1266] Fix | Delete
// Otherwise, if sanitized fields are not aligned with existing fields, disable live update mode if enabled.
[1267] Fix | Delete
} else if ( self.liveUpdateMode ) {
[1268] Fix | Delete
self.liveUpdateMode = false;
[1269] Fix | Delete
self.container.find( 'input[name="savewidget"]' ).show();
[1270] Fix | Delete
isLiveUpdateAborted = true;
[1271] Fix | Delete
[1272] Fix | Delete
// Otherwise, replace existing form with the sanitized form.
[1273] Fix | Delete
} else {
[1274] Fix | Delete
$widgetContent.html( r.data.form );
[1275] Fix | Delete
[1276] Fix | Delete
self.container.removeClass( 'widget-form-disabled' );
[1277] Fix | Delete
[1278] Fix | Delete
$( document ).trigger( 'widget-updated', [ $widgetRoot ] );
[1279] Fix | Delete
}
[1280] Fix | Delete
[1281] Fix | Delete
/**
[1282] Fix | Delete
* If the old instance is identical to the new one, there is nothing new
[1283] Fix | Delete
* needing to be rendered, and so we can preempt the event for the
[1284] Fix | Delete
* preview finishing loading.
[1285] Fix | Delete
*/
[1286] Fix | Delete
isChanged = ! isLiveUpdateAborted && ! _( self.setting() ).isEqual( r.data.instance );
[1287] Fix | Delete
if ( isChanged ) {
[1288] Fix | Delete
self.isWidgetUpdating = true; // Suppress triggering another updateWidget.
[1289] Fix | Delete
self.setting( r.data.instance );
[1290] Fix | Delete
self.isWidgetUpdating = false;
[1291] Fix | Delete
} else {
[1292] Fix | Delete
// No change was made, so stop the spinner now instead of when the preview would updates.
[1293] Fix | Delete
self.container.removeClass( 'previewer-loading' );
[1294] Fix | Delete
}
[1295] Fix | Delete
[1296] Fix | Delete
if ( completeCallback ) {
[1297] Fix | Delete
completeCallback.call( self, null, { noChange: ! isChanged, ajaxFinished: true } );
[1298] Fix | Delete
}
[1299] Fix | Delete
} else {
[1300] Fix | Delete
// General error message.
[1301] Fix | Delete
message = l10n.error;
[1302] Fix | Delete
[1303] Fix | Delete
if ( r.data && r.data.message ) {
[1304] Fix | Delete
message = r.data.message;
[1305] Fix | Delete
}
[1306] Fix | Delete
[1307] Fix | Delete
if ( completeCallback ) {
[1308] Fix | Delete
completeCallback.call( self, message );
[1309] Fix | Delete
} else {
[1310] Fix | Delete
$widgetContent.prepend( '<p class="widget-error"><strong>' + message + '</strong></p>' );
[1311] Fix | Delete
}
[1312] Fix | Delete
}
[1313] Fix | Delete
} );
[1314] Fix | Delete
[1315] Fix | Delete
jqxhr.fail( function( jqXHR, textStatus ) {
[1316] Fix | Delete
if ( completeCallback ) {
[1317] Fix | Delete
completeCallback.call( self, textStatus );
[1318] Fix | Delete
}
[1319] Fix | Delete
} );
[1320] Fix | Delete
[1321] Fix | Delete
jqxhr.always( function() {
[1322] Fix | Delete
self.container.removeClass( 'widget-form-loading' );
[1323] Fix | Delete
[1324] Fix | Delete
$inputs.each( function() {
[1325] Fix | Delete
$( this ).removeData( 'state' + updateNumber );
[1326] Fix | Delete
} );
[1327] Fix | Delete
[1328] Fix | Delete
processing( processing() - 1 );
[1329] Fix | Delete
} );
[1330] Fix | Delete
},
[1331] Fix | Delete
[1332] Fix | Delete
/**
[1333] Fix | Delete
* Expand the accordion section containing a control
[1334] Fix | Delete
*/
[1335] Fix | Delete
expandControlSection: function() {
[1336] Fix | Delete
api.Control.prototype.expand.call( this );
[1337] Fix | Delete
},
[1338] Fix | Delete
[1339] Fix | Delete
/**
[1340] Fix | Delete
* @since 4.1.0
[1341] Fix | Delete
*
[1342] Fix | Delete
* @param {Boolean} expanded
[1343] Fix | Delete
* @param {Object} [params]
[1344] Fix | Delete
* @return {Boolean} False if state already applied.
[1345] Fix | Delete
*/
[1346] Fix | Delete
_toggleExpanded: api.Section.prototype._toggleExpanded,
[1347] Fix | Delete
[1348] Fix | Delete
/**
[1349] Fix | Delete
* @since 4.1.0
[1350] Fix | Delete
*
[1351] Fix | Delete
* @param {Object} [params]
[1352] Fix | Delete
* @return {Boolean} False if already expanded.
[1353] Fix | Delete
*/
[1354] Fix | Delete
expand: api.Section.prototype.expand,
[1355] Fix | Delete
[1356] Fix | Delete
/**
[1357] Fix | Delete
* Expand the widget form control
[1358] Fix | Delete
*
[1359] Fix | Delete
* @deprecated 4.1.0 Use this.expand() instead.
[1360] Fix | Delete
*/
[1361] Fix | Delete
expandForm: function() {
[1362] Fix | Delete
this.expand();
[1363] Fix | Delete
},
[1364] Fix | Delete
[1365] Fix | Delete
/**
[1366] Fix | Delete
* @since 4.1.0
[1367] Fix | Delete
*
[1368] Fix | Delete
* @param {Object} [params]
[1369] Fix | Delete
* @return {Boolean} False if already collapsed.
[1370] Fix | Delete
*/
[1371] Fix | Delete
collapse: api.Section.prototype.collapse,
[1372] Fix | Delete
[1373] Fix | Delete
/**
[1374] Fix | Delete
* Collapse the widget form control
[1375] Fix | Delete
*
[1376] Fix | Delete
* @deprecated 4.1.0 Use this.collapse() instead.
[1377] Fix | Delete
*/
[1378] Fix | Delete
collapseForm: function() {
[1379] Fix | Delete
this.collapse();
[1380] Fix | Delete
},
[1381] Fix | Delete
[1382] Fix | Delete
/**
[1383] Fix | Delete
* Expand or collapse the widget control
[1384] Fix | Delete
*
[1385] Fix | Delete
* @deprecated this is poor naming, and it is better to directly set control.expanded( showOrHide )
[1386] Fix | Delete
*
[1387] Fix | Delete
* @param {boolean|undefined} [showOrHide] If not supplied, will be inverse of current visibility
[1388] Fix | Delete
*/
[1389] Fix | Delete
toggleForm: function( showOrHide ) {
[1390] Fix | Delete
if ( typeof showOrHide === 'undefined' ) {
[1391] Fix | Delete
showOrHide = ! this.expanded();
[1392] Fix | Delete
}
[1393] Fix | Delete
this.expanded( showOrHide );
[1394] Fix | Delete
},
[1395] Fix | Delete
[1396] Fix | Delete
/**
[1397] Fix | Delete
* Respond to change in the expanded state.
[1398] Fix | Delete
*
[1399] Fix | Delete
* @param {boolean} expanded
[1400] Fix | Delete
* @param {Object} args merged on top of this.defaultActiveArguments
[1401] Fix | Delete
*/
[1402] Fix | Delete
onChangeExpanded: function ( expanded, args ) {
[1403] Fix | Delete
var self = this, $widget, $inside, complete, prevComplete, expandControl, $toggleBtn;
[1404] Fix | Delete
[1405] Fix | Delete
self.embedWidgetControl(); // Make sure the outer form is embedded so that the expanded state can be set in the UI.
[1406] Fix | Delete
if ( expanded ) {
[1407] Fix | Delete
self.embedWidgetContent();
[1408] Fix | Delete
}
[1409] Fix | Delete
[1410] Fix | Delete
// If the expanded state is unchanged only manipulate container expanded states.
[1411] Fix | Delete
if ( args.unchanged ) {
[1412] Fix | Delete
if ( expanded ) {
[1413] Fix | Delete
api.Control.prototype.expand.call( self, {
[1414] Fix | Delete
completeCallback: args.completeCallback
[1415] Fix | Delete
});
[1416] Fix | Delete
}
[1417] Fix | Delete
return;
[1418] Fix | Delete
}
[1419] Fix | Delete
[1420] Fix | Delete
$widget = this.container.find( 'div.widget:first' );
[1421] Fix | Delete
$inside = $widget.find( '.widget-inside:first' );
[1422] Fix | Delete
$toggleBtn = this.container.find( '.widget-top button.widget-action' );
[1423] Fix | Delete
[1424] Fix | Delete
expandControl = function() {
[1425] Fix | Delete
[1426] Fix | Delete
// Close all other widget controls before expanding this one.
[1427] Fix | Delete
api.control.each( function( otherControl ) {
[1428] Fix | Delete
if ( self.params.type === otherControl.params.type && self !== otherControl ) {
[1429] Fix | Delete
otherControl.collapse();
[1430] Fix | Delete
}
[1431] Fix | Delete
} );
[1432] Fix | Delete
[1433] Fix | Delete
complete = function() {
[1434] Fix | Delete
self.container.removeClass( 'expanding' );
[1435] Fix | Delete
self.container.addClass( 'expanded' );
[1436] Fix | Delete
$widget.addClass( 'open' );
[1437] Fix | Delete
$toggleBtn.attr( 'aria-expanded', 'true' );
[1438] Fix | Delete
self.container.trigger( 'expanded' );
[1439] Fix | Delete
};
[1440] Fix | Delete
if ( args.completeCallback ) {
[1441] Fix | Delete
prevComplete = complete;
[1442] Fix | Delete
complete = function () {
[1443] Fix | Delete
prevComplete();
[1444] Fix | Delete
args.completeCallback();
[1445] Fix | Delete
};
[1446] Fix | Delete
}
[1447] Fix | Delete
[1448] Fix | Delete
if ( self.params.is_wide ) {
[1449] Fix | Delete
$inside.fadeIn( args.duration, complete );
[1450] Fix | Delete
} else {
[1451] Fix | Delete
$inside.slideDown( args.duration, complete );
[1452] Fix | Delete
}
[1453] Fix | Delete
[1454] Fix | Delete
self.container.trigger( 'expand' );
[1455] Fix | Delete
self.container.addClass( 'expanding' );
[1456] Fix | Delete
};
[1457] Fix | Delete
[1458] Fix | Delete
if ( $toggleBtn.attr( 'aria-expanded' ) === 'false' ) {
[1459] Fix | Delete
if ( api.section.has( self.section() ) ) {
[1460] Fix | Delete
api.section( self.section() ).expand( {
[1461] Fix | Delete
completeCallback: expandControl
[1462] Fix | Delete
} );
[1463] Fix | Delete
} else {
[1464] Fix | Delete
expandControl();
[1465] Fix | Delete
}
[1466] Fix | Delete
} else {
[1467] Fix | Delete
complete = function() {
[1468] Fix | Delete
self.container.removeClass( 'collapsing' );
[1469] Fix | Delete
self.container.removeClass( 'expanded' );
[1470] Fix | Delete
$widget.removeClass( 'open' );
[1471] Fix | Delete
$toggleBtn.attr( 'aria-expanded', 'false' );
[1472] Fix | Delete
self.container.trigger( 'collapsed' );
[1473] Fix | Delete
};
[1474] Fix | Delete
if ( args.completeCallback ) {
[1475] Fix | Delete
prevComplete = complete;
[1476] Fix | Delete
complete = function () {
[1477] Fix | Delete
prevComplete();
[1478] Fix | Delete
args.completeCallback();
[1479] Fix | Delete
};
[1480] Fix | Delete
}
[1481] Fix | Delete
[1482] Fix | Delete
self.container.trigger( 'collapse' );
[1483] Fix | Delete
self.container.addClass( 'collapsing' );
[1484] Fix | Delete
[1485] Fix | Delete
if ( self.params.is_wide ) {
[1486] Fix | Delete
$inside.fadeOut( args.duration, complete );
[1487] Fix | Delete
} else {
[1488] Fix | Delete
$inside.slideUp( args.duration, function() {
[1489] Fix | Delete
$widget.css( { width:'', margin:'' } );
[1490] Fix | Delete
complete();
[1491] Fix | Delete
} );
[1492] Fix | Delete
}
[1493] Fix | Delete
}
[1494] Fix | Delete
},
[1495] Fix | Delete
[1496] Fix | Delete
/**
[1497] Fix | Delete
* Get the position (index) of the widget in the containing sidebar
[1498] Fix | Delete
*
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function