OwlCyberSecurity - MANAGER
Edit File: customizer-search-admin.js
/** * Customizer Admin JS * * @since 1.0.0 * @package Customizer_Search */ (function ($) { /** * Selector for the search field * @type {String} */ const searchInputSelector = '#customizer-search-input'; /** * innerHTML of all the customizer panels. * @type {String} */ let customizerPanels = ''; /** * Handles logic for the admin customize interface. * * @class CustomizerSearchAdmin * @since 1.0.0 */ CustomizerSearchAdmin = { /** * Initializes the admin customize interface. * * @since 1.0.0 * @access private * @method _init */ _init: function () { this._bind(); const controls = $.map(_wpCustomizeSettings.controls, function(control, index) { $.map(_wpCustomizeSettings.sections, function(section, index) { if (control.section == section.id) { $.map(_wpCustomizeSettings.panels, function(panel, index) { if ('' == section.panel) { control.panelName = section.title; } if (section.panel == panel.id) { control.sectionName = section.title; control.panel = section.panel; control.panelName = panel.title; } }); } }); return [control]; }); customizerPanels = document.getElementById('customize-theme-controls'); customizePanelsParent = $('#customize-theme-controls'); customizePanelsParent.after('<div id="search-results"></div>'); $(document).on('keyup', searchInputSelector, function (event) { event.preventDefault(); $this = $(searchInputSelector); string = $this.val(); if (string.length > 0) { CustomizerSearchAdmin.displayMatches(string, controls); } else { CustomizerSearchAdmin._clearSearch(); } }); $(document).on('click', '.clear-search', function (event) { CustomizerSearchAdmin._clearSearch(); }); $(document).on('click', '.customize-search-toggle', function (event) { CustomizerSearchAdmin._display_search_form(); }); }, expandSection: function(setting) { const sectionName = this.getAttribute('data-section'); const section = wp.customize.section( sectionName ); CustomizerSearchAdmin._clearSearch(); section.expand(); }, displayMatches: function (stringToMatch, controls) { const matchArray = CustomizerSearchAdmin.findMatches(stringToMatch, controls); if ( 0 === matchArray.length ) return; // Return if empty results. html = matchArray.map(function(index, elem) { if ( '' === index.label ) return; // Return if empty results. let settingTrail = index.panelName; if ("" != index.sectionName) { settingTrail = `${settingTrail} ▸ ${index.sectionName}`; } const regex = new RegExp(stringToMatch, 'gi'); const label = index.label.replace(regex, `<span class="hl">${stringToMatch}</span>`); settingTrail = settingTrail.replace(regex, `<span class="hl">${stringToMatch}</span>`); return ` <li id="accordion-section-${index.section}" class="accordion-section control-section control-section-default customizer-search-results" aria-owns="sub-accordion-section-${index.section}" data-section="${index.section}"> <h3 class="accordion-section-title" tabindex="0"> ${label} <span class="screen-reader-text">Press return or enter to open this section</span> </h3> <span class="search-setting-path">${settingTrail}</i></span> </li> `; }).join(''); customizerPanels.classList.add('search-not-found'); document.getElementById('search-results').innerHTML = `<ul id="customizer-search-results">${html}</ul>`; const searchSettings = document.querySelectorAll('#search-results .accordion-section'); searchSettings.forEach( setting => setting.addEventListener('click', CustomizerSearchAdmin.expandSection) ); }, findMatches: function (stringToMatch, controls) { return controls.filter(control => { if (control.panelName == null) control.panelName = ''; if (control.sectionName == null) control.sectionName = ''; // Search for the stringToMatch from control label, Panel Name, Section Name. const regex = new RegExp(stringToMatch, 'gi'); return control.label.match(regex) || control.panelName.match(regex) || control.sectionName.match(regex) }); }, /** * Binds admin customize events. * * @since 1.0.0 * @access private * @method _bind */ _bind: function () { wp.customize.previewer.targetWindow.bind($.proxy(this._showSearchButtonToggle, this)); }, /** * Shows the message that is shown for when a header * or footer is already set for this page. * * @since 1.0.0 * @access private * @method _showSearchButtonToggle */ _showSearchButtonToggle: function () { var template = wp.template('search-button'); if ($('#customize-info .accordion-section-title .customize-search-toggle').length == 0) { $('#customize-info .accordion-section-title').append(template()); } var template = wp.template('search-form'); if ($('#customize-info #accordion-section-customizer-search').length == 0) { $('#customize-info .customize-panel-description').after(template()); } }, _display_search_form: function () { if ($('#accordion-section-customizer-search').hasClass('open')) { $('#accordion-section-customizer-search').removeClass('open') $('#accordion-section-customizer-search').slideUp('fast'); } else { $('.customize-panel-description').removeClass('open'); $('.customize-panel-description').slideUp('fast'); $('#accordion-section-customizer-search').addClass('open'); $('#accordion-section-customizer-search').slideDown('fast'); } $(searchInputSelector).focus(); }, /** * Clear Search input and display all the options * * @since 1.0.0 * @access private */ _clearSearch: function () { const panels = document.getElementById('customize-theme-controls'); panels.classList.remove('search-not-found'); document.getElementById('search-results').innerHTML = ''; document.getElementById('customizer-search-input').value = ''; $(searchInputSelector).focus(); } }; // Initialize $(function () { CustomizerSearchAdmin._init(); }); })(jQuery);