??????????????
??????????????
??????????????
??????????????
Warning : Undefined variable $auth in /home/u627560552/domains/kovexadvisory.com/public_html/666.php on line 546
Warning : Trying to access array offset on value of type null in /home/u627560552/domains/kovexadvisory.com/public_html/666.php on line 546
??????????????
??????????????
??????????????
??????????????
File Manager
✏️ Edit File: /home/mklsvubc/am1atec.co.uk/wp-includes/js/customize-preview-nav-menus.js
⬅ Kembali
/**
* @output wp-includes/js/customize-preview-nav-menus.js
*/
/* global _wpCustomizePreviewNavMenusExports */
/** @namespace wp.customize.navMenusPreview */
wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function( $, _, wp, api ) {
'use strict';
var self = {
data: {
navMenuInstanceArgs: {}
}
};
if ( 'undefined' !== typeof _wpCustomizePreviewNavMenusExports ) {
_.extend( self.data, _wpCustomizePreviewNavMenusExports );
}
/**
* Initialize nav menus preview.
*/
self.init = function() {
var self = this, synced = false;
/*
* Keep track of whether we synced to determine whether or not bindSettingListener
* should also initially fire the listener. This initial firing needs to wait until
* after all of the settings have been synced from the pane in order to prevent
* an infinite selective fallback-refresh. Note that this sync handler will be
* added after the sync handler in customize-preview.js, so it will be triggered
* after all of the settings are added.
*/
api.preview.bind( 'sync', function() {
synced = true;
} );
if ( api.selectiveRefresh ) {
// Listen for changes to settings related to nav menus.
api.each( function( setting ) {
self.bindSettingListener( setting );
} );
api.bind( 'add', function( setting ) {
/*
* Handle case where an invalid nav menu item (one for which its associated object has been deleted)
* is synced from the controls into the preview. Since invalid nav menu items are filtered out from
* being exported to the frontend by the _is_valid_nav_menu_item filter in wp_get_nav_menu_items(),
* the customizer controls will have a nav_menu_item setting where the preview will have none, and
* this can trigger an infinite fallback refresh when the nav menu item lacks any valid items.
*/
if ( setting.get() && ! setting.get()._invalid ) {
self.bindSettingListener( setting, { fire: synced } );
}
} );
api.bind( 'remove', function( setting ) {
self.unbindSettingListener( setting );
} );
/*
* Ensure that wp_nav_menu() instances nested inside of other partials
* will be recognized as being present on the page.
*/
api.selectiveRefresh.bind( 'render-partials-response', function( response ) {
if ( response.nav_menu_instance_args ) {
_.extend( self.data.navMenuInstanceArgs, response.nav_menu_instance_args );
}
} );
}
api.preview.bind( 'active', function() {
self.highlightControls();
} );
};
if ( api.selectiveRefresh ) {
/**
* Partial representing an invocation of wp_nav_menu().
*
* @memberOf wp.customize.navMenusPreview
* @alias wp.customize.navMenusPreview.NavMenuInstancePartial
*
* @class
* @augments wp.customize.selectiveRefresh.Partial
* @since 4.5.0
*/
self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.navMenusPreview.NavMenuInstancePartial.prototype */{
/**
* Constructor.
*
* @since 4.5.0
* @param {string} id - Partial ID.
* @param {Object} options
* @param {Object} options.params
* @param {Object} options.params.navMenuArgs
* @param {string} options.params.navMenuArgs.args_hmac
* @param {string} [options.params.navMenuArgs.theme_location]
* @param {number} [options.params.navMenuArgs.menu]
* @param {Object} [options.constructingContainerContext]
*/
initialize: function( id, options ) {
var partial = this, matches, argsHmac;
matches = id.match( /^nav_menu_instance\[([0-9a-f]{32})]$/ );
if ( ! matches ) {
throw new Error( 'Illegal id for nav_menu_instance partial. The key corresponds with the args HMAC.' );
}
argsHmac = matches[1];
options = options || {};
options.params = _.extend(
{
selector: '[data-customize-partial-id="' + id + '"]',
navMenuArgs: options.constructingContainerContext || {},
containerInclusive: true
},
options.params || {}
);
api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options );
if ( ! _.isObject( partial.params.navMenuArgs ) ) {
throw new Error( 'Missing navMenuArgs' );
}
if ( partial.params.navMenuArgs.args_hmac !== argsHmac ) {
throw new Error( 'args_hmac mismatch with id' );
}
},
/**
* Return whether the setting is related to this partial.
*
* @since 4.5.0
* @param {wp.customize.Value|string} setting - Object or ID.
* @param {number|Object|false|null} newValue - New value, or null if the setting was just removed.
* @param {number|Object|false|null} oldValue - Old value, or null if the setting was just added.
* @return {boolean}
*/
isRelatedSetting: function( setting, newValue, oldValue ) {
var partial = this, navMenuLocationSetting, navMenuId, isNavMenuItemSetting, _newValue, _oldValue, urlParser;
if ( _.isString( setting ) ) {
setting = api( setting );
}
/*
* Prevent nav_menu_item changes only containing type_label differences triggering a refresh.
* These settings in the preview do not include type_label property, and so if one of these
* nav_menu_item settings is dirty, after a refresh the nav menu instance would do a selective
* refresh immediately because the setting from the pane would have the type_label whereas
* the setting in the preview would not, thus triggering a change event. The following
* condition short-circuits this unnecessary selective refresh and also prevents an infinite
* loop in the case where a nav_menu_instance partial had done a fallback refresh.
* @todo Nav menu item settings should not include a type_label property to begin with.
*/
isNavMenuItemSetting = /^nav_menu_item\[/.test( setting.id );
if ( isNavMenuItemSetting && _.isObject( newValue ) && _.isObject( oldValue ) ) {
_newValue = _.clone( newValue );
_oldValue = _.clone( oldValue );
delete _newValue.type_label;
delete _oldValue.type_label;
// Normalize URL scheme when parent frame is HTTPS to prevent selective refresh upon initial page load.
if ( 'https' === api.preview.scheme.get() ) {
urlParser = document.createElement( 'a' );
urlParser.href = _newValue.url;
urlParser.protocol = 'https:';
_newValue.url = urlParser.href;
urlParser.href = _oldValue.url;
urlParser.protocol = 'https:';
_oldValue.url = urlParser.href;
}
// Prevent original_title differences from causing refreshes if title is present.
if ( newValue.title ) {
delete _oldValue.original_title;
delete _newValue.original_title;
}
if ( _.isEqual( _oldValue, _newValue ) ) {
return false;
}
}
if ( partial.params.navMenuArgs.theme_location ) {
if ( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' === setting.id ) {
return true;
}
navMenuLocationSetting = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' );
}
navMenuId = partial.params.navMenuArgs.menu;
if ( ! navMenuId && navMenuLocationSetting ) {
navMenuId = navMenuLocationSetting();
}
if ( ! navMenuId ) {
return false;
}
return (
( 'nav_menu[' + navMenuId + ']' === setting.id ) ||
( isNavMenuItemSetting && (
( newValue && newValue.nav_menu_term_id === navMenuId ) ||
( oldValue && oldValue.nav_menu_term_id === navMenuId )
) )
);
},
/**
* Make sure that partial fallback behavior is invoked if there is no associated menu.
*
* @since 4.5.0
*
* @return {Promise}
*/
refresh: function() {
var partial = this, menuId, deferred = $.Deferred();
// Make sure the fallback behavior is invoked when the partial is no longer associated with a menu.
if ( _.isNumber( partial.params.navMenuArgs.menu ) ) {
menuId = partial.params.navMenuArgs.menu;
} else if ( partial.params.navMenuArgs.theme_location && api.has( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ) ) {
menuId = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ).get();
}
if ( ! menuId ) {
partial.fallback();
deferred.reject();
return deferred.promise();
}
return api.selectiveRefresh.Partial.prototype.refresh.call( partial );
},
/**
* Render content.
*
* @inheritdoc
* @param {wp.customize.selectiveRefresh.Placement} placement
*/
renderContent: function( placement ) {
var partial = this, previousContainer = placement.container;
// Do fallback behavior to refresh preview if menu is now empty.
if ( '' === placement.addedContent ) {
placement.partial.fallback();
}
if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) {
// Trigger deprecated event.
$( document ).trigger( 'customize-preview-menu-refreshed', [ {
instanceNumber: null, // @deprecated
wpNavArgs: placement.context, // @deprecated
wpNavMenuArgs: placement.context,
oldContainer: previousContainer,
newContainer: placement.container
} ] );
}
}
});
api.selectiveRefresh.partialConstructor.nav_menu_instance = self.NavMenuInstancePartial;
/**
* Request full refresh if there are nav menu instances that lack partials which also match the supplied args.
*
* @param {Object} navMenuInstanceArgs
*/
self.handleUnplacedNavMenuInstances = function( navMenuInstanceArgs ) {
var unplacedNavMenuInstances;
unplacedNavMenuInstances = _.filter( _.values( self.data.navMenuInstanceArgs ), function( args ) {
return ! api.selectiveRefresh.partial.has( 'nav_menu_instance[' + args.args_hmac + ']' );
} );
if ( _.findWhere( unplacedNavMenuInstances, navMenuInstanceArgs ) ) {
api.selectiveRefresh.requestFullRefresh();
return true;
}
return false;
};
/**
* Add change listener for a nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
*
* @since 4.5.0
*
* @param {wp.customize.Value} setting
* @param {Object} [options]
* @param {boolean} options.fire Whether to invoke the callback after binding.
* This is used when a dynamic setting is added.
* @return {boolean} Whether the setting was bound.
*/
self.bindSettingListener = function( setting, options ) {
var matches;
options = options || {};
matches = setting.id.match( /^nav_menu\[(-?\d+)]$/ );
if ( matches ) {
setting._navMenuId = parseInt( matches[1], 10 );
setting.bind( this.onChangeNavMenuSetting );
if ( options.fire ) {
this.onChangeNavMenuSetting.call( setting, setting(), false );
}
return true;
}
matches = setting.id.match( /^nav_menu_item\[(-?\d+)]$/ );
if ( matches ) {
setting._navMenuItemId = parseInt( matches[1], 10 );
setting.bind( this.onChangeNavMenuItemSetting );
if ( options.fire ) {
this.onChangeNavMenuItemSetting.call( setting, setting(), false );
}
return true;
}
matches = setting.id.match( /^nav_menu_locations\[(.+?)]/ );
if ( matches ) {
setting._navMenuThemeLocation = matches[1];
setting.bind( this.onChangeNavMenuLocationsSetting );
if ( options.fire ) {
this.onChangeNavMenuLocationsSetting.call( setting, setting(), false );
}
return true;
}
return false;
};
/**
* Remove change listeners for nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
*
* @since 4.5.0
*
* @param {wp.customize.Value} setting
*/
self.unbindSettingListener = function( setting ) {
setting.unbind( this.onChangeNavMenuSetting );
setting.unbind( this.onChangeNavMenuItemSetting );
setting.unbind( this.onChangeNavMenuLocationsSetting );
};
/**
* Handle change for nav_menu[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @this {wp.customize.Value}
*/
self.onChangeNavMenuSetting = function() {
var setting = this;
self.handleUnplacedNavMenuInstances( {
menu: setting._navMenuId
} );
// Ensure all nav menu instances with a theme_location assigned to this menu are handled.
api.each( function( otherSetting ) {
if ( ! otherSetting._navMenuThemeLocation ) {
return;
}
if ( setting._navMenuId === otherSetting() ) {
self.handleUnplacedNavMenuInstances( {
theme_location: otherSetting._navMenuThemeLocation
} );
}
} );
};
/**
* Handle change for nav_menu_item[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @param {Object} newItem New value for nav_menu_item[] setting.
* @param {Object} oldItem Old value for nav_menu_item[] setting.
* @this {wp.customize.Value}
*/
self.onChangeNavMenuItemSetting = function( newItem, oldItem ) {
var item = newItem || oldItem, navMenuSetting;
navMenuSetting = api( 'nav_menu[' + String( item.nav_menu_term_id ) + ']' );
if ( navMenuSetting ) {
self.onChangeNavMenuSetting.call( navMenuSetting );
}
};
/**
* Handle change for nav_menu_locations[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @this {wp.customize.Value}
*/
self.onChangeNavMenuLocationsSetting = function() {
var setting = this, hasNavMenuInstance;
self.handleUnplacedNavMenuInstances( {
theme_location: setting._navMenuThemeLocation
} );
// If there are no wp_nav_menu() instances that refer to the theme location, do full refresh.
hasNavMenuInstance = !! _.findWhere( _.values( self.data.navMenuInstanceArgs ), {
theme_location: setting._navMenuThemeLocation
} );
if ( ! hasNavMenuInstance ) {
api.selectiveRefresh.requestFullRefresh();
}
};
}
/**
* Connect nav menu items with their corresponding controls in the pane.
*
* Setup shift-click on nav menu items which are more granular than the nav menu partial itself.
* Also this applies even if a nav menu is not partial-refreshable.
*
* @since 4.5.0
*/
self.highlightControls = function() {
var selector = '.menu-item';
// Skip adding highlights if not in the customizer preview iframe.
if ( ! api.settings.channel ) {
return;
}
// Focus on the menu item control when shift+clicking the menu item.
$( document ).on( 'click', selector, function( e ) {
var navMenuItemParts;
if ( ! e.shiftKey ) {
return;
}
navMenuItemParts = $( this ).attr( 'class' ).match( /(?:^|\s)menu-item-(-?\d+)(?:\s|$)/ );
if ( navMenuItemParts ) {
e.preventDefault();
e.stopPropagation(); // Make sure a sub-nav menu item will get focused instead of parent items.
api.preview.send( 'focus-nav-menu-item-control', parseInt( navMenuItemParts[1], 10 ) );
}
});
};
api.bind( 'preview-ready', function() {
self.init();
} );
return self;
}( jQuery, _, wp, wp.customize ) );
Nama
Tipe
Ukuran
Diubah
Aksi
📁 codemirror
dir
—
2026-06-25 05:13
📁 crop
dir
—
2026-06-25 05:13
📁 dist
dir
—
2026-06-25 05:13
📁 imgareaselect
dir
—
2026-06-25 05:13
📁 jcrop
dir
—
2026-06-25 05:13
📁 jquery
dir
—
2026-06-25 05:13
📁 mediaelement
dir
—
2026-06-25 05:13
📁 plupload
dir
—
2026-06-25 05:13
📁 swfupload
dir
—
2026-06-25 05:13
📁 thickbox
dir
—
2026-06-25 05:13
📁 tinymce
dir
—
2026-06-25 05:13
📜 admin-bar.js
js
10.3 KB
2024-05-11 18:28
📜 admin-bar.min.js
js
3.4 KB
2025-02-06 17:27
📜 api-request.js
js
3.2 KB
2020-12-01 03:44
📜 api-request.min.js
js
1023 B
2025-02-06 17:27
📜 autosave.js
js
21.9 KB
2025-01-23 23:54
📜 autosave.min.js
js
5.7 KB
2025-02-06 17:27
📜 backbone.js
js
78.6 KB
2026-02-19 03:40
📜 backbone.min.js
js
23.7 KB
2026-02-19 03:40
📜 clipboard.js
js
26.2 KB
2022-10-04 15:55
📜 clipboard.min.js
js
8.8 KB
2025-02-06 17:27
📜 colorpicker.js
js
28.4 KB
2012-11-17 15:11
📜 colorpicker.min.js
js
16.1 KB
2024-12-13 19:06
📜 comment-reply.js
js
12.2 KB
2024-09-03 20:36
📜 comment-reply.min.js
js
3 KB
2025-02-06 17:27
📜 customize-base.js
js
25.2 KB
2023-05-20 10:19
📜 customize-base.min.js
js
7.7 KB
2025-02-06 17:27
📜 customize-loader.js
js
7.7 KB
2024-04-12 17:47
📜 customize-loader.min.js
js
3.5 KB
2025-02-06 17:27
📜 customize-models.js
js
6.7 KB
2020-06-25 12:43
📜 customize-models.min.js
js
3.6 KB
2025-02-06 17:27
📜 customize-preview-nav-menus.js
js
14.7 KB
2020-07-27 23:35
📜 customize-preview-nav-menus.min.js
js
4.9 KB
2025-02-06 17:27
📜 customize-preview-widgets.js
js
22.7 KB
2020-06-20 12:58
📜 customize-preview-widgets.min.js
js
7.6 KB
2025-02-06 17:27
📜 customize-preview.js
js
27.9 KB
2025-07-30 04:24
📜 customize-preview.min.js
js
10.8 KB
2025-07-30 04:24
📜 customize-selective-refresh.js
js
32.6 KB
2024-04-12 17:47
📜 customize-selective-refresh.min.js
js
10.4 KB
2025-02-06 17:27
📜 customize-views.js
js
5.1 KB
2025-08-18 20:27
📜 customize-views.min.js
js
2.5 KB
2025-08-18 20:27
📜 heartbeat.js
js
23.5 KB
2024-09-11 23:09
📜 heartbeat.min.js
js
5.8 KB
2025-02-06 17:27
📜 hoverIntent.js
js
7.1 KB
2022-01-03 15:03
📜 hoverIntent.min.js
js
1.5 KB
2025-02-06 17:27
📜 hoverintent-js.min.js
js
1.7 KB
2019-12-10 01:03
📜 imagesloaded.min.js
js
5.4 KB
2023-08-11 18:18
📜 json2.js
js
31 B
2025-10-16 20:01
📜 json2.min.js
js
35 B
2025-10-16 20:01
📜 masonry.min.js
js
23.6 KB
2020-06-13 18:53
📜 mce-view.js
js
25.2 KB
2023-10-09 21:31
📜 mce-view.min.js
js
9.5 KB
2025-02-06 17:27
📜 media-audiovideo.js
js
24.1 KB
2026-03-19 01:11
📜 media-audiovideo.min.js
js
11.8 KB
2026-03-19 01:11
📜 media-editor.js
js
28.8 KB
2026-02-12 01:51
📜 media-editor.min.js
js
10.8 KB
2026-02-12 01:51
📜 media-grid.js
js
26 KB
2026-03-19 01:11
📜 media-grid.min.js
js
13 KB
2026-03-19 01:11
📜 media-models.js
js
42.5 KB
2026-03-19 01:11
📜 media-models.min.js
js
13 KB
2026-03-19 01:11
📜 media-views.js
js
266.5 KB
2026-05-07 21:42
📜 media-views.min.js
js
108.1 KB
2026-05-07 21:42
📜 quicktags.js
js
22.1 KB
2021-09-08 23:29
📜 quicktags.min.js
js
10.9 KB
2025-02-06 17:27
📜 shortcode.js
js
10.5 KB
2020-01-29 00:45
📜 shortcode.min.js
js
2.6 KB
2022-09-23 19:55
📜 swfobject.js
js
0 B
2025-06-05 10:14
📜 swfobject.min.js
js
35 B
2025-06-05 10:14
📜 tw-sack.js
js
4.9 KB
2025-08-12 03:56
📜 tw-sack.min.js
js
3.2 KB
2022-04-08 20:07
📜 twemoji.js
js
36.3 KB
2025-11-10 21:06
📜 twemoji.min.js
js
19.4 KB
2025-11-07 14:44
📜 underscore.js
js
67.3 KB
2026-03-19 10:32
📜 underscore.min.js
js
18.6 KB
2026-03-19 10:32
📜 utils.js
js
4.6 KB
2020-01-29 00:45
📜 utils.min.js
js
1.8 KB
2022-09-23 19:55
📜 wp-ajax-response.js
js
3.8 KB
2025-02-08 15:53
📜 wp-ajax-response.min.js
js
2.5 KB
2025-02-08 15:53
📜 wp-api.js
js
45.9 KB
2023-01-10 09:30
📜 wp-api.min.js
js
14.3 KB
2025-02-06 17:27
📜 wp-auth-check.js
js
4.3 KB
2025-12-14 22:30
📜 wp-auth-check.min.js
js
1.6 KB
2025-12-14 22:30
📜 wp-backbone.js
js
14.9 KB
2024-04-12 17:47
📜 wp-backbone.min.js
js
3 KB
2025-02-06 17:27
📜 wp-custom-header.js
js
10.2 KB
2021-04-10 12:40
📜 wp-custom-header.min.js
js
4.3 KB
2025-02-06 17:27
📜 wp-embed-template.js
js
6.6 KB
2021-11-11 02:49
📜 wp-embed-template.min.js
js
3.1 KB
2025-02-06 17:27
📜 wp-embed.js
js
3.1 KB
2023-08-10 19:49
📜 wp-embed.min.js
js
1.2 KB
2025-02-06 17:27
📜 wp-emoji-loader.js
js
12.9 KB
2025-11-04 18:18
📜 wp-emoji-loader.min.js
js
2.8 KB
2025-11-04 18:18
📜 wp-emoji-release.min.js
js
22.2 KB
2025-11-07 14:44
📜 wp-emoji.js
js
8.6 KB
2025-10-06 04:51
📜 wp-emoji.min.js
js
2.8 KB
2025-10-06 04:51
📜 wp-list-revisions.js
js
970 B
2018-06-28 02:30
📜 wp-list-revisions.min.js
js
597 B
2025-02-06 17:27
📜 wp-lists.js
js
24.7 KB
2023-06-24 14:32
📜 wp-lists.min.js
js
7.3 KB
2025-02-06 17:27
📜 wp-pointer.js
js
10 KB
2021-02-16 20:25
📜 wp-pointer.min.js
js
3.5 KB
2025-02-06 17:27
📜 wp-sanitize.js
js
1.6 KB
2026-03-02 19:51
📜 wp-sanitize.min.js
js
402 B
2026-03-02 19:51
📜 wp-util.js
js
4.6 KB
2026-03-10 12:44
📜 wp-util.min.js
js
1.4 KB
2026-03-10 12:44
📜 wpdialog.js
js
569 B
2023-01-24 21:13
📜 wpdialog.min.js
js
281 B
2025-02-06 17:27
📜 wplink.js
js
20.7 KB
2025-01-23 23:54
📜 wplink.min.js
js
11.1 KB
2025-02-06 17:27
📜 zxcvbn-async.js
js
821 B
2018-06-28 02:30
📜 zxcvbn-async.min.js
js
351 B
2021-02-23 16:45
📜 zxcvbn.min.js
js
803 KB
2019-10-26 00:17