Файловый менеджер - Редактировать - /home/harasnat/www/labour/wp-content/plugins/events-manager/includes/js/src/parts/search.js
Назад
//Events Search jQuery(document).ready( function($){ // handle the views tip/ddm let views_ddm_options = { theme : 'light-border', allowHTML : true, interactive : true, trigger : 'manual', placement : 'bottom', zIndex : 1000000, touch: true, }; $(document).trigger('em-search-views-trigger-vars',[views_ddm_options]); let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; $(document).trigger('em-tippy-vars',[tooltip_vars]); // sync main search texts to advanced search let search_forms = $('.em-search:not(.em-search-advanced)'); search_forms.each( function(){ /* * Important references we'll reuse in scope */ let search = $(this); let search_id = search.attr('id').replace('em-search-', ''); let search_form = search.find('.em-search-form').first(); let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway /* * Counter functions */ const update_input_count = function( input, qty = 1 ){ let el = jQuery(input); let total = qty > 0 ? qty : null; el.attr('data-advanced-total-input', total); update_search_totals(); }; const update_search_totals = function( applied = false ){ // set everything to 0, recount search.find('span.total-count').remove(); // find all fields with total attributes and sum them up let total = 0; search_advanced.find('[data-advanced-total-input]').each( function(){ let total_input = this.getAttribute('data-advanced-total-input'); total += Math.abs( total_input ); }); search.attr('data-advanced-total', total); update_trigger_count( applied ); // find all sections with totals and display them (added above) search_advanced.find('.em-search-advanced-section').each( function(){ let section = $(this); let section_total = 0; section.attr('data-advanced-total', 0); // go through all set qtys and calculate section.find('[data-advanced-total-input]').each( function(){ let total_input = this.getAttribute('data-advanced-total-input'); section_total += Math.abs( total_input ); }); section.attr('data-advanced-total', section_total); update_section_count(section); }); // update triggers, search, clear button etc. if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){ update_submit_buttons( true ); } update_clear_button_count(); } const update_trigger_count = function( applied = false ){ let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers triggers.find('span.total-count').remove(); let total = search.attr('data-advanced-total'); if( total > 0 ){ let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers); if( !applied ){ trigger_count.addClass('tentative'); } } }; const update_submit_buttons = function( enabled = false ){ // update the clear link let submit_button = search_advanced.find('button[type="submit"]'); let main_submit_button = search.find('.em-search-main-bar button[type="submit"]'); let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs if( enabled ){ submit_buttons.removeClass('disabled').attr('aria-disabled', 'false'); }else{ submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); } }; const update_section_count = function( section ){ let section_total = section.attr('data-advanced-total'); section.find('header span.total-count').remove(); if( section_total > 0 ){ $('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') ); } }; const update_clear_button_count = function(){ // update the clear link let clear_link = search_advanced.find('button[type="reset"]'); if( !clear_link.attr('data-placeholder') ){ clear_link.attr('data-placeholder', clear_link.text()); } let total = search.attr('data-advanced-total'); if( total > 0 ){ clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false); clear_link.removeClass('disabled').attr('aria-disabled', 'false'); }else{ clear_link.text( clear_link.attr('data-placeholder') ); clear_link.addClass('disabled').attr('aria-disabled', 'true'); } }; /* * Triggers */ search.find('.em-search-views-trigger').each( function(){ tooltip_vars.content = this.parentElement.getAttribute('aria-label'); let views_tooltip = tippy(this.parentElement, tooltip_vars); let views_content = this.parentElement.querySelector('.em-search-views-options'); let views_content_parent = views_content.parentElement; let tippy_content = document.createElement('div'); views_ddm_options.content = tippy_content; let views_ddm = tippy(this, views_ddm_options); views_ddm.setProps({ onShow(instance){ views_tooltip.disable(); tippy_content.append(views_content); }, onShown(instance){ // keyboard support views_content.querySelector('input:checked').focus(); }, onHidden(instance){ views_tooltip.enable(); if( views_content.parentElement !== views_content_parent ) { views_content_parent.append(views_content); } } }); let tippy_listener = function(e){ if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false; e.preventDefault(); e.stopPropagation(); this._tippy.show(); views_tooltip.hide(); } this.addEventListener('click', tippy_listener); this.addEventListener('keydown', tippy_listener); this.firstElementChild.addEventListener('focus', function(e){ views_ddm.hide(); views_tooltip.enable(); views_tooltip.show(); }); this.firstElementChild.addEventListener('blur', function(){ views_tooltip.hide(); }); search.on('focus blur', '.em-search-views-options input', function(){ if( document.activeElement === this ){ this.parentElement.classList.add('focused'); }else{ this.parentElement.classList.remove('focused'); } }); search[0].addEventListener('change', function(){ update_submit_buttons(true); }); search.on('keydown click', '.em-search-views-options input', function( e ){ // get relevant vars if( e.type === 'keydown' && e.which !== 13 ){ if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { if (e.which === 38) { if (this.parentElement.previousElementSibling) { this.parentElement.previousElementSibling.focus(); } } else if (e.which === 40) { if (this.parentElement.nextElementSibling) { this.parentElement.nextElementSibling.focus(); } } return false; } else if ( e.which === 9 ) { // focus out views_ddm.hide(); } return true; } this.checked = true; let input = $(this); // mark label selected input.closest('fieldset').find('label').removeClass('checked'); input.parent().addClass('checked'); // get other reference elements we need let views_wrapper = $(this).closest('.em-search-views'); let view_type = this.value; let trigger = views_wrapper.children('.em-search-views-trigger'); let trigger_option = trigger.children('.em-search-view-option'); // change view, if different if( view_type !== trigger_option.attr('data-view') ){ trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); // remove custom search vals from current view so it's not used into another view $('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove(); // trigger custom event in case form disabled due to no search vals search_form.find('button[type="submit"]').focus(); search_form.trigger('forcesubmit'); } views_ddm.hide(); }); }); search.find('.em-search-sort-trigger').each( function(){ tooltip_vars.content = this.parentElement.getAttribute('aria-label'); let views_tooltip = tippy(this.parentElement, tooltip_vars); search.on('keydown click', '.em-search-sort-option', function( e ){ // get other reference elements we need let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC'; this.setAttribute('data-sort', order); this.parentElement.querySelector('input[name="order"]').value = order; // trigger custom event in case form disabled due to no search vals search_form.find('button[type="submit"]').focus(); search_form.trigger('forcesubmit'); }); }); // add trigger logic for advanced popup modal let search_advanced_trigger_click = function( e ){ if( search.hasClass('advanced-mode-inline') ){ // inline if( !search_advanced.hasClass('visible') ){ search_advanced.slideDown().addClass('visible'); if( '_tippy' in this ){ this._tippy.setContent(this.getAttribute('data-label-hide')); } }else{ search_advanced.slideUp().removeClass('visible'); if( '_tippy' in this ){ this._tippy.setContent(this.getAttribute('data-label-show')); } } }else{ // wrap modal popup element in a form, so taht it's 'accessible' with keyboard if( !search_advanced.hasClass('active') ) { let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>'); form_wrapper.appendTo(search_advanced); search_advanced.find('.em-modal-popup').appendTo(form_wrapper); // open modal let button = this; openModal(search_advanced, function () { // Do this instead button.blur(); search_advanced.find('input.em-search-text').focus(); }); } } }; search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click); search_form.on('search_advanced_trigger', search_advanced_trigger_click); search_advanced.on('em_modal_close', function(){ search_advanced.find('.em-modal-popup').appendTo(search_advanced); search_advanced.children('form').remove(); let trigger = search.find('button.em-search-advanced-trigger').focus(); if( trigger.length > 0 && '_tippy' in trigger[0] ){ trigger[0]._tippy.hide(); } }); // add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal search_advanced.find('.em-search-advanced-section > header').on('click', function(){ let header = $(this); let section = header.closest('section'); let content = header.siblings('.em-search-section-content'); if( section.hasClass('active') ){ content.slideUp(); section.removeClass('active'); }else{ content.slideDown(); section.addClass('active'); } }); /* * Advanced Search Field Listeners - Main Search Form */ let search_form_advanced_calculate_totals_inputs = function( input ){ // for textboxes we only need to add or remove 1 advanced let el = $(input); let qty = el.val() !== '' ? 1:0; update_input_count( el, qty ); }; // These are for the main search bar, syncing information back into the advanced form search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){ // sync advanced input field with same text let advanced_search_input = search_advanced.find('input.em-search-text'); if ( advanced_search_input.length === 0 ) { search_form_advanced_calculate_totals_inputs(this); } else { advanced_search_input.val( this.value ); // recalculate totals from here search_form_advanced_calculate_totals_inputs(advanced_search_input[0]); } // any change without advanced form should show the search form still update_submit_buttons( true); }); search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){ let el = $(this); let advanced_geo = search_advanced.find('div.em-search-geo'); // copy over value and class names let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords'); if( advanced_geo_coords.length > 0 ) { advanced_geo_coords.val(el.val()).attr('class', el.attr('class')); let geo_text = el.siblings('input.em-search-geo').first(); advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); // calculate totals from here search_form_advanced_calculate_totals_inputs(advanced_geo_coords); } else { // calculate totals from here search_form_advanced_calculate_totals_inputs(this); } }); search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){ if( !('_flatpickr' in this) ) return; this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { // any change without advanced form should show the search form let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); if( advanced_datepicker.length === 0 ) { // update counter let qty = dateStr ? 1:0; update_input_count(instance.input, qty); } else { // update advanced search form datepicker values, trigger a close for it to handle the rest advanced_datepicker[0]._flatpickr.setDate( selectedDates, true ); advanced_datepicker[0]._flatpickr.close(); } }); }); search.find('select.em-selectize').each(function () { if( 'selectize' in this ) { this.selectize.on('change', function () { search_advanced_selectize_change(this); }); } }); /* * Advanced Search Field Listeners - Advanced Search Form */ // regular text advanced or hidden inputs that represent another ui search_advanced.on('change input', 'input.em-search-text', function( e ){ if( e.type === 'change' ){ // copy over place info on change only, not on each keystroke search.find('.em-search-main input.em-search-text').val( this.value ); } search_form_advanced_calculate_totals_inputs(this); }); search_advanced.on('change', 'input.em-search-geo-coords', function( e ){ search_form_advanced_calculate_totals_inputs(this); //update values in main search let el = $(this); let main = search.find('.em-search-main div.em-search-geo'); if( main.length > 0 ){ // copy over value and class names main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class')); let geo_text = el.siblings('input.em-search-geo'); main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); } }); search_advanced.on('clear_search', function(){ let text = $(this).find('input.em-search-text'); if( text.length === 0 ) { // select geo from main if it exists, so we keep counts synced text = search.find('input.em-search-text'); } text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more) }); /* Not sure we should be calculating this... since it's always set to something. search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){ // combine both values into parent, if value set then it's a toggle let el = jQuery(this); let qty = el.val() ? 1 : null; el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty); update_search_totals(); }); */ search_advanced.on('change', 'input[type="checkbox"]', function( e ){ let el = $(this); let qty = el.prop('checked') ? 1:0; update_input_count( el, qty ); }); search_advanced.on('calculate_totals', function(){ search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){ search_form_advanced_calculate_totals_inputs(this); }); search_advanced.find('input[type="checkbox"]').trigger('change'); }); search_advanced.on('clear_search', function(){ let geo = $(this).find('input.em-search-geo'); if( geo.length === 0 ) { // select geo from main if it exists, so we keep counts synced geo = search.find('input.em-search-geo'); } geo.removeClass('off').removeClass('on').val(''); geo.siblings('input.em-search-geo-coords').val('').trigger('change'); search_advanced.find('input[type="checkbox"]').prop("checked", false).trigger('change').prop("checked", false); // set checked after trigger because something seems to be checking during event }); // datepicker advanced logic search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ if( !('_flatpickr' in this) ) return; this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { // check previous value against current value, no change, no go let previous_value = instance.input.getAttribute('data-previous-value'); if( previous_value !== dateStr ){ // update counter let qty = dateStr ? 1:0; update_input_count(instance.input, qty); // update main search form datepicker values let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input'); if( main_datepicker.length > 0 ) { main_datepicker[0]._flatpickr.setDate(selectedDates, true); } // set for next time instance.input.setAttribute('data-previous-value', dateStr); } }); }); search_advanced.on('calculate_totals', function(){ search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){ let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; update_input_count(this, qty); }); }); search_advanced.on('clear_search', function(){ let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); if( datepickers.length === 0 ) { // find datepickers on main form so syncing is sent up datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input'); } datepickers.each(function () { this._flatpickr.clear(); update_input_count(this, 0); }); }); // clear the date total for calendars, before anything is done let scope_calendar_check = function(){ search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ if( search.attr('data-view') == 'calendar' ){ this.setAttribute('data-advanced-total-input', 0); this._flatpickr.input.disabled = true; }else{ this._flatpickr.input.disabled = false; let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; this.setAttribute('data-advanced-total-input', qty); } }); }; $(document).on('em_search_loaded', scope_calendar_check); scope_calendar_check(); // selectize advanced let search_advanced_selectize_change = function( selectize ){ let qty = selectize.items.length; // handle 'all' default values if( qty == 1 && !selectize.items[0] ){ qty = 0; } if ( selectize.$input.closest('.em-search-advanced').length === 0 ) { // sync advanced input field with same text let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim(); let advanced_search_input = search_advanced.find( classSearch ); if ( advanced_search_input.length > 0 ) { // copy over values advanced_search_input[0].selectize.setValue( selectize.items ); // recalculate totals from here search_advanced_selectize_change(advanced_search_input[0].selectize); } } update_input_count( selectize.$input, qty ); }; search_advanced.find('select.em-selectize').each(function () { if( 'selectize' in this ) { this.selectize.on('change', function () { search_advanced_selectize_change(this); }); } }); search_advanced.on('calculate_totals', function(){ $(this).find('select.em-selectize').each( function(){ search_advanced_selectize_change(this.selectize); }); }); search_advanced.on('clear_search', function(){ let clearSearch = function(){ this.selectize.clear(); this.selectize.refreshItems(); this.selectize.refreshOptions(false); this.selectize.blur(); }; search_advanced.find('select.em-selectize').each( clearSearch ); search.find('.em-search-main-bar select.em-selectize').each( clearSearch ); }); // location-specific stuff for dropdowns (powered by selectize) let locations_selectize_load_complete = function(){ if( 'selectize' in this ) { this.selectize.settings.placeholder = this.selectize.settings.original_placeholder; this.selectize.updatePlaceholder(); // get options from select again let options = []; this.selectize.$input.find('option').each( function(){ let value = this.value !== null ? this.value : this.innerHTML; options.push({ value : value, text: this.innerHTML}); }); this.selectize.addOption(options); this.selectize.refreshOptions(false); } }; let locations_selectize_load_start = function(){ if( 'selectize' in this ){ this.selectize.clearOptions(); if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder; this.selectize.settings.placeholder = EM.txt_loading; this.selectize.updatePlaceholder(); } }; $('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){ var el = $(this); let wrapper = el.closest('.em-search-location'); wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>'); wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start ); if( el.val() != '' ){ wrapper.find('.em-search-location-meta').slideDown(); var data = { action : 'search_states', country : el.val(), return_html : true, }; wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); data.action = 'search_regions'; wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete ); data.action = 'search_towns'; wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); }else{ wrapper.find('.em-search-location-meta').slideUp(); } }); $('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){ var el = $(this); let wrapper = el.closest('.em-search-location'); wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start ); var data = { action : 'search_states', region : el.val(), country : wrapper.find('select[name=country]').val(), return_html : true }; wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); data.action = 'search_towns'; wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); }); $('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){ var el = $(this); let wrapper = el.closest('.em-search-location'); wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start ); var data = { action : 'search_towns', state : el.val(), region : wrapper.find('select[name=region]').val(), country : wrapper.find('select[name=country]').val(), return_html : true }; wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); }); /* * Clear & Search Actions */ // handle clear link for advanced search_advanced.on( 'click', 'button[type="reset"]', function(){ // clear text search advanced, run clear hook for other parts to hook into if( search.attr('data-advanced-total') == 0 ) return; // search text and geo search search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change'); // other implementations hook here and do what you need search.trigger('clear_search'); search_advanced.trigger('clear_search'); // remove counters, set data counters to 0, hide section and submit form without search settings update_search_totals(true); // in theory, this is 0 and removes everything if( search_advanced.hasClass('em-modal') ) { search_advanced_trigger_click(); } search_advanced.append('<input name="clear_search" type="hidden" value="1">'); search_advanced.find('button[type="submit"]').trigger('forceclick'); update_clear_button_count(); }).each( function(){ search_advanced.trigger('calculate_totals'); update_search_totals(true); }); const on_update_trigger_count = function(e, applied = true){ update_trigger_count( applied ); }; search.on('update_trigger_count', on_update_trigger_count); search_advanced.on('update_trigger_count', on_update_trigger_count); // handle submission for advanced search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){ e.preventDefault(); if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false; // close attach back to search form if( search_advanced.hasClass('em-modal') ) { closeModal(search_advanced, function () { // submit for search search_form.submit(); }); }else{ search_form.submit(); } return false; // we handled it }); search.on('submit forcesubmit', '.em-search-form', function(e){ if ( search.hasClass('no-ajax') ) { return true; } e.preventDefault(); let form = $(this); let submit_buttons = form.find('button[type="submit"]'); if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false; let wrapper = form.closest('.em-search'); if( wrapper.hasClass('em-search-legacy') ){ em_submit_legacy_search_form(form); }else{ let view = $('#em-view-'+search_id); let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val(); if( Array.isArray(view_type) ) view_type = view_type.shift(); // copy over custom view information, remove it further down let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone(); let custom_view_data_container = $('<div class="em-view-custom-data"></div>'); custom_view_data.children().appendTo(custom_view_data_container); custom_view_data.remove(); custom_view_data_container.appendTo(form); // add loading stuff view.append('<div class="em-loading"></div>'); submit_buttons.each( function(){ if( EM.txt_searching !== this.innerHTML ) { this.setAttribute('data-button-text', this.innerHTML); this.innerHTML = EM.txt_searching; } }); var vars = form.serialize(); $.ajax( EM.ajaxurl, { type : 'POST', dataType : 'html', data : vars, success : function(responseText){ submit_buttons.each( function(){ this.innerHTML = this.getAttribute('data-button-text'); }); view = EM_View_Updater( view, responseText ); // update view definitions view.attr('data-view', view_type); search.attr('data-view', view_type); search_advanced.attr('data-view', view_type); jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]); jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above wrapper.find('.count.tentative').removeClass('tentative'); // deactivate submit button until changes are made again submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); // update search totals update_search_totals(true); search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search update_submit_buttons(false); custom_view_data_container.remove(); // remove data so it's reloaded again later search.find('input[name="clear_search"]').remove(); } }); } return false; }); // observe resizing EM_ResizeObserver( EM.search.breakpoints, [search[0]]); }); // handle external triggers, e.g. a calendar shortcut for a hidden search form $(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){ if( this.getAttribute('data-search-advanced-id') ){ // trigger the search form by parent let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') ); if( search_advanced_form ){ let search_form = search_advanced_form.closest('form.em-search-form'); if( search_form ){ search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') ); return; } } } else if( this.getAttribute('data-parent-trigger') ) { let trigger = document.getElementById(this.getAttribute('data-parent-trigger')); if ( trigger ) { trigger.click(); return; } } console.log('Cannot locate a valid advanced search form trigger for %o', this); }); $(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){ let a = $(this); let view = a.closest('.em-view-container'); let href = a.attr('href'); //add data-em-ajax att if it exists let data = a.closest('.em-pagination').attr('data-em-ajax'); if( data ){ href += href.includes('?') ? '&' : '?'; href += data; } // build querystring from url let url_params = new URL(href, window.location.origin).searchParams; if( view.attr('data-view') ) { url_params.set('view', view.attr('data-view')); } // start ajax view.append('<div class="loading" id="em-loading"></div>'); $.ajax( EM.ajaxurl, { type : 'POST', dataType : 'html', data : url_params.toString(), success : function(responseText) { view = EM_View_Updater( view, responseText ); view.find('.em-pagination').each( function(){ paginationObserver.observe(this); }); jQuery(document).triggerHandler('em_page_loaded', [view]); view[0].scrollIntoView({ behavior: "smooth" }); } }); e.preventDefault(); return false; }); const paginationObserver = new ResizeObserver( function( entries ){ for (let entry of entries) { let el = entry.target; if( !el.classList.contains('observing') ) { el.classList.add('observing'); // prevent endless loop on resizing within this check // check if any pagination parts are overflowing let overflowing = false; el.classList.remove('overflowing'); for ( const item of el.querySelectorAll('.not-current')) { if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){ overflowing = true; break; // break if one has overflown } }; // add or remove overflow classes if( overflowing ){ el.classList.add('overflowing') } el.classList.remove('observing'); } } }); $('.em-pagination').each( function(){ paginationObserver.observe(this); }); /* START Legacy */ // deprecated - hide/show the advanced search advanced link - relevant for old template overrides $(document).on('click change', '.em-search-legacy .em-toggle', function(e){ e.preventDefault(); //show or hide advanced search, hidden by default var el = $(this); var rel = el.attr('rel').split(':'); if( el.hasClass('show-search') ){ if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); } else{ $(rel[0]).slideUp(); } el.find('.show, .show-advanced').show(); el.find('.hide, .hide-advanced').hide(); el.removeClass('show-search'); }else{ if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); } else{ $(rel[0]).slideDown(); } el.find('.show, .show-advanced').hide(); el.find('.hide, .hide-advanced').show(); el.addClass('show-search'); } }); // handle search form submission let em_submit_legacy_search_form = function( form ){ if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; } var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); if( results_wrapper.length > 0 ){ results_wrapper.append('<div class="loading" id="em-loading"></div>'); var submitButton = form.find('.em-search-submit button'); submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching); var img = submitButton.children('img'); if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif')); var vars = form.serialize(); $.ajax( EM.ajaxurl, { type : 'POST', dataType : 'html', data : vars, success : function(responseText){ submitButton.val(submitButton.attr('data-button-text')); if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png')); results_wrapper.replaceWith(responseText); if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); } //reload results_wrapper results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results } }); e.preventDefault(); return false; } }; if( $('.em-search-ajax').length > 0 ){ $(document).on('click', '.em-search-ajax a.page-numbers', function(e){ var a = $(this); var data = a.closest('.em-pagination').attr('data-em-ajax'); var wrapper = a.closest('.em-search-ajax'); var wrapper_parent = wrapper.parent(); var qvars = a.attr('href').split('?'); var vars = qvars[1]; //add data-em-ajax att if it exists if( data != '' ){ vars = vars != '' ? vars+'&'+data : data; } vars += '&legacy=1'; wrapper.append('<div class="loading" id="em-loading"></div>'); $.ajax( EM.ajaxurl, { type : 'POST', dataType : 'html', data : vars, success : function(responseText) { wrapper.replaceWith(responseText); wrapper = wrapper_parent.find('.em-search-ajax'); jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results } }); e.preventDefault(); return false; }); } /* END Legacy */ });
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.01 |
proxy
|
phpinfo
|
Настройка