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
/home/sportsfe.../httpdocs/clone/wp-inclu.../js
File: customize-preview-nav-menus.js
/**
[0] Fix | Delete
* @output wp-includes/js/customize-preview-nav-menus.js
[1] Fix | Delete
*/
[2] Fix | Delete
[3] Fix | Delete
/* global _wpCustomizePreviewNavMenusExports */
[4] Fix | Delete
[5] Fix | Delete
/** @namespace wp.customize.navMenusPreview */
[6] Fix | Delete
wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function( $, _, wp, api ) {
[7] Fix | Delete
'use strict';
[8] Fix | Delete
[9] Fix | Delete
var self = {
[10] Fix | Delete
data: {
[11] Fix | Delete
navMenuInstanceArgs: {}
[12] Fix | Delete
}
[13] Fix | Delete
};
[14] Fix | Delete
if ( 'undefined' !== typeof _wpCustomizePreviewNavMenusExports ) {
[15] Fix | Delete
_.extend( self.data, _wpCustomizePreviewNavMenusExports );
[16] Fix | Delete
}
[17] Fix | Delete
[18] Fix | Delete
/**
[19] Fix | Delete
* Initialize nav menus preview.
[20] Fix | Delete
*/
[21] Fix | Delete
self.init = function() {
[22] Fix | Delete
var self = this, synced = false;
[23] Fix | Delete
[24] Fix | Delete
/*
[25] Fix | Delete
* Keep track of whether we synced to determine whether or not bindSettingListener
[26] Fix | Delete
* should also initially fire the listener. This initial firing needs to wait until
[27] Fix | Delete
* after all of the settings have been synced from the pane in order to prevent
[28] Fix | Delete
* an infinite selective fallback-refresh. Note that this sync handler will be
[29] Fix | Delete
* added after the sync handler in customize-preview.js, so it will be triggered
[30] Fix | Delete
* after all of the settings are added.
[31] Fix | Delete
*/
[32] Fix | Delete
api.preview.bind( 'sync', function() {
[33] Fix | Delete
synced = true;
[34] Fix | Delete
} );
[35] Fix | Delete
[36] Fix | Delete
if ( api.selectiveRefresh ) {
[37] Fix | Delete
// Listen for changes to settings related to nav menus.
[38] Fix | Delete
api.each( function( setting ) {
[39] Fix | Delete
self.bindSettingListener( setting );
[40] Fix | Delete
} );
[41] Fix | Delete
api.bind( 'add', function( setting ) {
[42] Fix | Delete
[43] Fix | Delete
/*
[44] Fix | Delete
* Handle case where an invalid nav menu item (one for which its associated object has been deleted)
[45] Fix | Delete
* is synced from the controls into the preview. Since invalid nav menu items are filtered out from
[46] Fix | Delete
* being exported to the frontend by the _is_valid_nav_menu_item filter in wp_get_nav_menu_items(),
[47] Fix | Delete
* the customizer controls will have a nav_menu_item setting where the preview will have none, and
[48] Fix | Delete
* this can trigger an infinite fallback refresh when the nav menu item lacks any valid items.
[49] Fix | Delete
*/
[50] Fix | Delete
if ( setting.get() && ! setting.get()._invalid ) {
[51] Fix | Delete
self.bindSettingListener( setting, { fire: synced } );
[52] Fix | Delete
}
[53] Fix | Delete
} );
[54] Fix | Delete
api.bind( 'remove', function( setting ) {
[55] Fix | Delete
self.unbindSettingListener( setting );
[56] Fix | Delete
} );
[57] Fix | Delete
[58] Fix | Delete
/*
[59] Fix | Delete
* Ensure that wp_nav_menu() instances nested inside of other partials
[60] Fix | Delete
* will be recognized as being present on the page.
[61] Fix | Delete
*/
[62] Fix | Delete
api.selectiveRefresh.bind( 'render-partials-response', function( response ) {
[63] Fix | Delete
if ( response.nav_menu_instance_args ) {
[64] Fix | Delete
_.extend( self.data.navMenuInstanceArgs, response.nav_menu_instance_args );
[65] Fix | Delete
}
[66] Fix | Delete
} );
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
api.preview.bind( 'active', function() {
[70] Fix | Delete
self.highlightControls();
[71] Fix | Delete
} );
[72] Fix | Delete
};
[73] Fix | Delete
[74] Fix | Delete
if ( api.selectiveRefresh ) {
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Partial representing an invocation of wp_nav_menu().
[78] Fix | Delete
*
[79] Fix | Delete
* @memberOf wp.customize.navMenusPreview
[80] Fix | Delete
* @alias wp.customize.navMenusPreview.NavMenuInstancePartial
[81] Fix | Delete
*
[82] Fix | Delete
* @class
[83] Fix | Delete
* @augments wp.customize.selectiveRefresh.Partial
[84] Fix | Delete
* @since 4.5.0
[85] Fix | Delete
*/
[86] Fix | Delete
self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.navMenusPreview.NavMenuInstancePartial.prototype */{
[87] Fix | Delete
[88] Fix | Delete
/**
[89] Fix | Delete
* Constructor.
[90] Fix | Delete
*
[91] Fix | Delete
* @since 4.5.0
[92] Fix | Delete
* @param {string} id - Partial ID.
[93] Fix | Delete
* @param {Object} options
[94] Fix | Delete
* @param {Object} options.params
[95] Fix | Delete
* @param {Object} options.params.navMenuArgs
[96] Fix | Delete
* @param {string} options.params.navMenuArgs.args_hmac
[97] Fix | Delete
* @param {string} [options.params.navMenuArgs.theme_location]
[98] Fix | Delete
* @param {number} [options.params.navMenuArgs.menu]
[99] Fix | Delete
* @param {Object} [options.constructingContainerContext]
[100] Fix | Delete
*/
[101] Fix | Delete
initialize: function( id, options ) {
[102] Fix | Delete
var partial = this, matches, argsHmac;
[103] Fix | Delete
matches = id.match( /^nav_menu_instance\[([0-9a-f]{32})]$/ );
[104] Fix | Delete
if ( ! matches ) {
[105] Fix | Delete
throw new Error( 'Illegal id for nav_menu_instance partial. The key corresponds with the args HMAC.' );
[106] Fix | Delete
}
[107] Fix | Delete
argsHmac = matches[1];
[108] Fix | Delete
[109] Fix | Delete
options = options || {};
[110] Fix | Delete
options.params = _.extend(
[111] Fix | Delete
{
[112] Fix | Delete
selector: '[data-customize-partial-id="' + id + '"]',
[113] Fix | Delete
navMenuArgs: options.constructingContainerContext || {},
[114] Fix | Delete
containerInclusive: true
[115] Fix | Delete
},
[116] Fix | Delete
options.params || {}
[117] Fix | Delete
);
[118] Fix | Delete
api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options );
[119] Fix | Delete
[120] Fix | Delete
if ( ! _.isObject( partial.params.navMenuArgs ) ) {
[121] Fix | Delete
throw new Error( 'Missing navMenuArgs' );
[122] Fix | Delete
}
[123] Fix | Delete
if ( partial.params.navMenuArgs.args_hmac !== argsHmac ) {
[124] Fix | Delete
throw new Error( 'args_hmac mismatch with id' );
[125] Fix | Delete
}
[126] Fix | Delete
},
[127] Fix | Delete
[128] Fix | Delete
/**
[129] Fix | Delete
* Return whether the setting is related to this partial.
[130] Fix | Delete
*
[131] Fix | Delete
* @since 4.5.0
[132] Fix | Delete
* @param {wp.customize.Value|string} setting - Object or ID.
[133] Fix | Delete
* @param {number|Object|false|null} newValue - New value, or null if the setting was just removed.
[134] Fix | Delete
* @param {number|Object|false|null} oldValue - Old value, or null if the setting was just added.
[135] Fix | Delete
* @return {boolean}
[136] Fix | Delete
*/
[137] Fix | Delete
isRelatedSetting: function( setting, newValue, oldValue ) {
[138] Fix | Delete
var partial = this, navMenuLocationSetting, navMenuId, isNavMenuItemSetting, _newValue, _oldValue, urlParser;
[139] Fix | Delete
if ( _.isString( setting ) ) {
[140] Fix | Delete
setting = api( setting );
[141] Fix | Delete
}
[142] Fix | Delete
[143] Fix | Delete
/*
[144] Fix | Delete
* Prevent nav_menu_item changes only containing type_label differences triggering a refresh.
[145] Fix | Delete
* These settings in the preview do not include type_label property, and so if one of these
[146] Fix | Delete
* nav_menu_item settings is dirty, after a refresh the nav menu instance would do a selective
[147] Fix | Delete
* refresh immediately because the setting from the pane would have the type_label whereas
[148] Fix | Delete
* the setting in the preview would not, thus triggering a change event. The following
[149] Fix | Delete
* condition short-circuits this unnecessary selective refresh and also prevents an infinite
[150] Fix | Delete
* loop in the case where a nav_menu_instance partial had done a fallback refresh.
[151] Fix | Delete
* @todo Nav menu item settings should not include a type_label property to begin with.
[152] Fix | Delete
*/
[153] Fix | Delete
isNavMenuItemSetting = /^nav_menu_item\[/.test( setting.id );
[154] Fix | Delete
if ( isNavMenuItemSetting && _.isObject( newValue ) && _.isObject( oldValue ) ) {
[155] Fix | Delete
_newValue = _.clone( newValue );
[156] Fix | Delete
_oldValue = _.clone( oldValue );
[157] Fix | Delete
delete _newValue.type_label;
[158] Fix | Delete
delete _oldValue.type_label;
[159] Fix | Delete
[160] Fix | Delete
// Normalize URL scheme when parent frame is HTTPS to prevent selective refresh upon initial page load.
[161] Fix | Delete
if ( 'https' === api.preview.scheme.get() ) {
[162] Fix | Delete
urlParser = document.createElement( 'a' );
[163] Fix | Delete
urlParser.href = _newValue.url;
[164] Fix | Delete
urlParser.protocol = 'https:';
[165] Fix | Delete
_newValue.url = urlParser.href;
[166] Fix | Delete
urlParser.href = _oldValue.url;
[167] Fix | Delete
urlParser.protocol = 'https:';
[168] Fix | Delete
_oldValue.url = urlParser.href;
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
// Prevent original_title differences from causing refreshes if title is present.
[172] Fix | Delete
if ( newValue.title ) {
[173] Fix | Delete
delete _oldValue.original_title;
[174] Fix | Delete
delete _newValue.original_title;
[175] Fix | Delete
}
[176] Fix | Delete
[177] Fix | Delete
if ( _.isEqual( _oldValue, _newValue ) ) {
[178] Fix | Delete
return false;
[179] Fix | Delete
}
[180] Fix | Delete
}
[181] Fix | Delete
[182] Fix | Delete
if ( partial.params.navMenuArgs.theme_location ) {
[183] Fix | Delete
if ( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' === setting.id ) {
[184] Fix | Delete
return true;
[185] Fix | Delete
}
[186] Fix | Delete
navMenuLocationSetting = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' );
[187] Fix | Delete
}
[188] Fix | Delete
[189] Fix | Delete
navMenuId = partial.params.navMenuArgs.menu;
[190] Fix | Delete
if ( ! navMenuId && navMenuLocationSetting ) {
[191] Fix | Delete
navMenuId = navMenuLocationSetting();
[192] Fix | Delete
}
[193] Fix | Delete
[194] Fix | Delete
if ( ! navMenuId ) {
[195] Fix | Delete
return false;
[196] Fix | Delete
}
[197] Fix | Delete
return (
[198] Fix | Delete
( 'nav_menu[' + navMenuId + ']' === setting.id ) ||
[199] Fix | Delete
( isNavMenuItemSetting && (
[200] Fix | Delete
( newValue && newValue.nav_menu_term_id === navMenuId ) ||
[201] Fix | Delete
( oldValue && oldValue.nav_menu_term_id === navMenuId )
[202] Fix | Delete
) )
[203] Fix | Delete
);
[204] Fix | Delete
},
[205] Fix | Delete
[206] Fix | Delete
/**
[207] Fix | Delete
* Make sure that partial fallback behavior is invoked if there is no associated menu.
[208] Fix | Delete
*
[209] Fix | Delete
* @since 4.5.0
[210] Fix | Delete
*
[211] Fix | Delete
* @return {Promise}
[212] Fix | Delete
*/
[213] Fix | Delete
refresh: function() {
[214] Fix | Delete
var partial = this, menuId, deferred = $.Deferred();
[215] Fix | Delete
[216] Fix | Delete
// Make sure the fallback behavior is invoked when the partial is no longer associated with a menu.
[217] Fix | Delete
if ( _.isNumber( partial.params.navMenuArgs.menu ) ) {
[218] Fix | Delete
menuId = partial.params.navMenuArgs.menu;
[219] Fix | Delete
} else if ( partial.params.navMenuArgs.theme_location && api.has( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ) ) {
[220] Fix | Delete
menuId = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ).get();
[221] Fix | Delete
}
[222] Fix | Delete
if ( ! menuId ) {
[223] Fix | Delete
partial.fallback();
[224] Fix | Delete
deferred.reject();
[225] Fix | Delete
return deferred.promise();
[226] Fix | Delete
}
[227] Fix | Delete
[228] Fix | Delete
return api.selectiveRefresh.Partial.prototype.refresh.call( partial );
[229] Fix | Delete
},
[230] Fix | Delete
[231] Fix | Delete
/**
[232] Fix | Delete
* Render content.
[233] Fix | Delete
*
[234] Fix | Delete
* @inheritdoc
[235] Fix | Delete
* @param {wp.customize.selectiveRefresh.Placement} placement
[236] Fix | Delete
*/
[237] Fix | Delete
renderContent: function( placement ) {
[238] Fix | Delete
var partial = this, previousContainer = placement.container;
[239] Fix | Delete
[240] Fix | Delete
// Do fallback behavior to refresh preview if menu is now empty.
[241] Fix | Delete
if ( '' === placement.addedContent ) {
[242] Fix | Delete
placement.partial.fallback();
[243] Fix | Delete
}
[244] Fix | Delete
[245] Fix | Delete
if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) {
[246] Fix | Delete
[247] Fix | Delete
// Trigger deprecated event.
[248] Fix | Delete
$( document ).trigger( 'customize-preview-menu-refreshed', [ {
[249] Fix | Delete
instanceNumber: null, // @deprecated
[250] Fix | Delete
wpNavArgs: placement.context, // @deprecated
[251] Fix | Delete
wpNavMenuArgs: placement.context,
[252] Fix | Delete
oldContainer: previousContainer,
[253] Fix | Delete
newContainer: placement.container
[254] Fix | Delete
} ] );
[255] Fix | Delete
}
[256] Fix | Delete
}
[257] Fix | Delete
});
[258] Fix | Delete
[259] Fix | Delete
api.selectiveRefresh.partialConstructor.nav_menu_instance = self.NavMenuInstancePartial;
[260] Fix | Delete
[261] Fix | Delete
/**
[262] Fix | Delete
* Request full refresh if there are nav menu instances that lack partials which also match the supplied args.
[263] Fix | Delete
*
[264] Fix | Delete
* @param {Object} navMenuInstanceArgs
[265] Fix | Delete
*/
[266] Fix | Delete
self.handleUnplacedNavMenuInstances = function( navMenuInstanceArgs ) {
[267] Fix | Delete
var unplacedNavMenuInstances;
[268] Fix | Delete
unplacedNavMenuInstances = _.filter( _.values( self.data.navMenuInstanceArgs ), function( args ) {
[269] Fix | Delete
return ! api.selectiveRefresh.partial.has( 'nav_menu_instance[' + args.args_hmac + ']' );
[270] Fix | Delete
} );
[271] Fix | Delete
if ( _.findWhere( unplacedNavMenuInstances, navMenuInstanceArgs ) ) {
[272] Fix | Delete
api.selectiveRefresh.requestFullRefresh();
[273] Fix | Delete
return true;
[274] Fix | Delete
}
[275] Fix | Delete
return false;
[276] Fix | Delete
};
[277] Fix | Delete
[278] Fix | Delete
/**
[279] Fix | Delete
* Add change listener for a nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
[280] Fix | Delete
*
[281] Fix | Delete
* @since 4.5.0
[282] Fix | Delete
*
[283] Fix | Delete
* @param {wp.customize.Value} setting
[284] Fix | Delete
* @param {Object} [options]
[285] Fix | Delete
* @param {boolean} options.fire Whether to invoke the callback after binding.
[286] Fix | Delete
* This is used when a dynamic setting is added.
[287] Fix | Delete
* @return {boolean} Whether the setting was bound.
[288] Fix | Delete
*/
[289] Fix | Delete
self.bindSettingListener = function( setting, options ) {
[290] Fix | Delete
var matches;
[291] Fix | Delete
options = options || {};
[292] Fix | Delete
[293] Fix | Delete
matches = setting.id.match( /^nav_menu\[(-?\d+)]$/ );
[294] Fix | Delete
if ( matches ) {
[295] Fix | Delete
setting._navMenuId = parseInt( matches[1], 10 );
[296] Fix | Delete
setting.bind( this.onChangeNavMenuSetting );
[297] Fix | Delete
if ( options.fire ) {
[298] Fix | Delete
this.onChangeNavMenuSetting.call( setting, setting(), false );
[299] Fix | Delete
}
[300] Fix | Delete
return true;
[301] Fix | Delete
}
[302] Fix | Delete
[303] Fix | Delete
matches = setting.id.match( /^nav_menu_item\[(-?\d+)]$/ );
[304] Fix | Delete
if ( matches ) {
[305] Fix | Delete
setting._navMenuItemId = parseInt( matches[1], 10 );
[306] Fix | Delete
setting.bind( this.onChangeNavMenuItemSetting );
[307] Fix | Delete
if ( options.fire ) {
[308] Fix | Delete
this.onChangeNavMenuItemSetting.call( setting, setting(), false );
[309] Fix | Delete
}
[310] Fix | Delete
return true;
[311] Fix | Delete
}
[312] Fix | Delete
[313] Fix | Delete
matches = setting.id.match( /^nav_menu_locations\[(.+?)]/ );
[314] Fix | Delete
if ( matches ) {
[315] Fix | Delete
setting._navMenuThemeLocation = matches[1];
[316] Fix | Delete
setting.bind( this.onChangeNavMenuLocationsSetting );
[317] Fix | Delete
if ( options.fire ) {
[318] Fix | Delete
this.onChangeNavMenuLocationsSetting.call( setting, setting(), false );
[319] Fix | Delete
}
[320] Fix | Delete
return true;
[321] Fix | Delete
}
[322] Fix | Delete
[323] Fix | Delete
return false;
[324] Fix | Delete
};
[325] Fix | Delete
[326] Fix | Delete
/**
[327] Fix | Delete
* Remove change listeners for nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
[328] Fix | Delete
*
[329] Fix | Delete
* @since 4.5.0
[330] Fix | Delete
*
[331] Fix | Delete
* @param {wp.customize.Value} setting
[332] Fix | Delete
*/
[333] Fix | Delete
self.unbindSettingListener = function( setting ) {
[334] Fix | Delete
setting.unbind( this.onChangeNavMenuSetting );
[335] Fix | Delete
setting.unbind( this.onChangeNavMenuItemSetting );
[336] Fix | Delete
setting.unbind( this.onChangeNavMenuLocationsSetting );
[337] Fix | Delete
};
[338] Fix | Delete
[339] Fix | Delete
/**
[340] Fix | Delete
* Handle change for nav_menu[] setting for nav menu instances lacking partials.
[341] Fix | Delete
*
[342] Fix | Delete
* @since 4.5.0
[343] Fix | Delete
*
[344] Fix | Delete
* @this {wp.customize.Value}
[345] Fix | Delete
*/
[346] Fix | Delete
self.onChangeNavMenuSetting = function() {
[347] Fix | Delete
var setting = this;
[348] Fix | Delete
[349] Fix | Delete
self.handleUnplacedNavMenuInstances( {
[350] Fix | Delete
menu: setting._navMenuId
[351] Fix | Delete
} );
[352] Fix | Delete
[353] Fix | Delete
// Ensure all nav menu instances with a theme_location assigned to this menu are handled.
[354] Fix | Delete
api.each( function( otherSetting ) {
[355] Fix | Delete
if ( ! otherSetting._navMenuThemeLocation ) {
[356] Fix | Delete
return;
[357] Fix | Delete
}
[358] Fix | Delete
if ( setting._navMenuId === otherSetting() ) {
[359] Fix | Delete
self.handleUnplacedNavMenuInstances( {
[360] Fix | Delete
theme_location: otherSetting._navMenuThemeLocation
[361] Fix | Delete
} );
[362] Fix | Delete
}
[363] Fix | Delete
} );
[364] Fix | Delete
};
[365] Fix | Delete
[366] Fix | Delete
/**
[367] Fix | Delete
* Handle change for nav_menu_item[] setting for nav menu instances lacking partials.
[368] Fix | Delete
*
[369] Fix | Delete
* @since 4.5.0
[370] Fix | Delete
*
[371] Fix | Delete
* @param {Object} newItem New value for nav_menu_item[] setting.
[372] Fix | Delete
* @param {Object} oldItem Old value for nav_menu_item[] setting.
[373] Fix | Delete
* @this {wp.customize.Value}
[374] Fix | Delete
*/
[375] Fix | Delete
self.onChangeNavMenuItemSetting = function( newItem, oldItem ) {
[376] Fix | Delete
var item = newItem || oldItem, navMenuSetting;
[377] Fix | Delete
navMenuSetting = api( 'nav_menu[' + String( item.nav_menu_term_id ) + ']' );
[378] Fix | Delete
if ( navMenuSetting ) {
[379] Fix | Delete
self.onChangeNavMenuSetting.call( navMenuSetting );
[380] Fix | Delete
}
[381] Fix | Delete
};
[382] Fix | Delete
[383] Fix | Delete
/**
[384] Fix | Delete
* Handle change for nav_menu_locations[] setting for nav menu instances lacking partials.
[385] Fix | Delete
*
[386] Fix | Delete
* @since 4.5.0
[387] Fix | Delete
*
[388] Fix | Delete
* @this {wp.customize.Value}
[389] Fix | Delete
*/
[390] Fix | Delete
self.onChangeNavMenuLocationsSetting = function() {
[391] Fix | Delete
var setting = this, hasNavMenuInstance;
[392] Fix | Delete
self.handleUnplacedNavMenuInstances( {
[393] Fix | Delete
theme_location: setting._navMenuThemeLocation
[394] Fix | Delete
} );
[395] Fix | Delete
[396] Fix | Delete
// If there are no wp_nav_menu() instances that refer to the theme location, do full refresh.
[397] Fix | Delete
hasNavMenuInstance = !! _.findWhere( _.values( self.data.navMenuInstanceArgs ), {
[398] Fix | Delete
theme_location: setting._navMenuThemeLocation
[399] Fix | Delete
} );
[400] Fix | Delete
if ( ! hasNavMenuInstance ) {
[401] Fix | Delete
api.selectiveRefresh.requestFullRefresh();
[402] Fix | Delete
}
[403] Fix | Delete
};
[404] Fix | Delete
}
[405] Fix | Delete
[406] Fix | Delete
/**
[407] Fix | Delete
* Connect nav menu items with their corresponding controls in the pane.
[408] Fix | Delete
*
[409] Fix | Delete
* Setup shift-click on nav menu items which are more granular than the nav menu partial itself.
[410] Fix | Delete
* Also this applies even if a nav menu is not partial-refreshable.
[411] Fix | Delete
*
[412] Fix | Delete
* @since 4.5.0
[413] Fix | Delete
*/
[414] Fix | Delete
self.highlightControls = function() {
[415] Fix | Delete
var selector = '.menu-item';
[416] Fix | Delete
[417] Fix | Delete
// Skip adding highlights if not in the customizer preview iframe.
[418] Fix | Delete
if ( ! api.settings.channel ) {
[419] Fix | Delete
return;
[420] Fix | Delete
}
[421] Fix | Delete
[422] Fix | Delete
// Focus on the menu item control when shift+clicking the menu item.
[423] Fix | Delete
$( document ).on( 'click', selector, function( e ) {
[424] Fix | Delete
var navMenuItemParts;
[425] Fix | Delete
if ( ! e.shiftKey ) {
[426] Fix | Delete
return;
[427] Fix | Delete
}
[428] Fix | Delete
[429] Fix | Delete
navMenuItemParts = $( this ).attr( 'class' ).match( /(?:^|\s)menu-item-(-?\d+)(?:\s|$)/ );
[430] Fix | Delete
if ( navMenuItemParts ) {
[431] Fix | Delete
e.preventDefault();
[432] Fix | Delete
e.stopPropagation(); // Make sure a sub-nav menu item will get focused instead of parent items.
[433] Fix | Delete
api.preview.send( 'focus-nav-menu-item-control', parseInt( navMenuItemParts[1], 10 ) );
[434] Fix | Delete
}
[435] Fix | Delete
});
[436] Fix | Delete
};
[437] Fix | Delete
[438] Fix | Delete
api.bind( 'preview-ready', function() {
[439] Fix | Delete
self.init();
[440] Fix | Delete
} );
[441] Fix | Delete
[442] Fix | Delete
return self;
[443] Fix | Delete
[444] Fix | Delete
}( jQuery, _, wp, wp.customize ) );
[445] Fix | Delete
[446] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function