"use strict"; var woof_redirect = '';//if we use redirect attribute in shortcode [woof] var woof_reset_btn_action = false; var woof_additional_fields = {}; jQuery(function () { try { woof_current_values = JSON.parse(woof_current_values); } catch (e) { woof_current_values = null; } if (woof_current_values == null || woof_current_values.length == 0) { woof_current_values = {}; } }); //*** if (typeof woof_lang_custom == 'undefined') { var woof_lang_custom = {};/*!!important*/ } if (typeof woof_ext_filter_titles != 'undefined') { woof_lang_custom = Object.assign({}, woof_lang_custom, woof_ext_filter_titles); } jQuery(function ($) { jQuery('body').append('
'); //http://stackoverflow.com/questions/2389540/jquery-hasparent jQuery.extend(jQuery.fn, { within: function (pSelector) { // Returns a subset of items using jQuery.filter return this.filter(function () { // Return truthy/falsey based on presence in parent return jQuery(this).closest(pSelector).length; }); } }); //fix for swoof shortcode [woof_form_builder] (one form on one page) let forms = document.querySelectorAll('.woof[data-slug]'); if (forms.length) { forms.forEach(f => { if (f.dataset.slug.length > 0) { swoof_search_slug = f.dataset.slug; } }); } //+++ if (jQuery('#woof_results_by_ajax').length > 0) { woof_is_ajax = 1; } //listening attributes in shortcode [woof] woof_autosubmit = parseInt(jQuery('.woof').eq(0).data('autosubmit'), 10); woof_ajax_redraw = parseInt(jQuery('.woof').eq(0).data('ajax-redraw'), 10); //+++ woof_ext_init_functions = JSON.parse(woof_ext_init_functions); //fix for native woo price range woof_init_native_woo_price_filter(); jQuery('body').on('price_slider_change', function (event, min, max) { if (woof_autosubmit && !woof_show_price_search_button && jQuery('.price_slider_wrapper').length < 3) { jQuery('.woof .widget_price_filter form').trigger('submit'); } else { var min_price = jQuery(this).find('.price_slider_amount #min_price').val(); var max_price = jQuery(this).find('.price_slider_amount #max_price').val(); woof_current_values.min_price = min_price; woof_current_values.max_price = max_price; } }); jQuery('body').on('change', '.woof_price_filter_dropdown', function () { var val = jQuery(this).val(); if (parseInt(val, 10) == -1) { delete woof_current_values.min_price; delete woof_current_values.max_price; } else { var val = val.split("-"); woof_current_values.min_price = val[0]; woof_current_values.max_price = val[1]; } if (woof_autosubmit || jQuery(this).within('.woof').length == 0) { woof_submit_link(woof_get_submit_link()); } }); //change value in textinput price filter if WOOCS is installed woof_recount_text_price_filter(); //+++ jQuery('body').on('change', '.woof_price_filter_txt', function () { var from = parseInt(jQuery(this).parent().find('.woof_price_filter_txt_from').val(), 10); var to = parseInt(jQuery(this).parent().find('.woof_price_filter_txt_to').val(), 10); if (to < from || from < 0) { delete woof_current_values.min_price; delete woof_current_values.max_price; } else { if (typeof woocs_current_currency !== 'undefined') { from = Math.ceil(from / parseFloat(woocs_current_currency.rate)); to = Math.ceil(to / parseFloat(woocs_current_currency.rate)); } woof_current_values.min_price = from; woof_current_values.max_price = to; } if (woof_autosubmit || jQuery(this).within('.woof').length == 0) { woof_submit_link(woof_get_submit_link()); } }); //*** jQuery('body').on('click', '.woof_open_hidden_li_btn', function () { var state = jQuery(this).data('state'); var type = jQuery(this).data('type'); if (state == 'closed') { jQuery(this).parents('.woof_list').find('.woof_hidden_term').addClass('woof_hidden_term2'); jQuery(this).parents('.woof_list').find('.woof_hidden_term').removeClass('woof_hidden_term'); if (type == 'image') { jQuery(this).find('img').attr('src', jQuery(this).data('opened')); } else { jQuery(this).html(jQuery(this).data('opened')); } jQuery(this).data('state', 'opened'); } else { jQuery(this).parents('.woof_list').find('.woof_hidden_term2').addClass('woof_hidden_term'); jQuery(this).parents('.woof_list').find('.woof_hidden_term2').removeClass('woof_hidden_term2'); if (type == 'image') { jQuery(this).find('img').attr('src', jQuery(this).data('closed')); } else { jQuery(this).text(jQuery(this).data('closed')); } jQuery(this).data('state', 'closed'); } return false; }); //open hidden block woof_open_hidden_li(); //*** woocommerce native "AVERAGE RATING" widget synchronizing jQuery('.widget_rating_filter li.wc-layered-nav-rating a').on('click', function () { var is_chosen = jQuery(this).parent().hasClass('chosen'); var parsed_url = woof_parse_url(jQuery(this).attr('href')); var rate = 0; if (parsed_url.query !== undefined) { if (parsed_url.query.indexOf('min_rating') !== -1) { var arrayOfStrings = parsed_url.query.split('min_rating='); rate = parseInt(arrayOfStrings[1], 10); } } jQuery(this).parents('ul').find('li').removeClass('chosen'); if (is_chosen) { delete woof_current_values.min_rating; } else { woof_current_values.min_rating = rate; jQuery(this).parent().addClass('chosen'); } woof_submit_link(woof_get_submit_link()); return false; }); //WOOF start filtering button action jQuery('body').on('click', '.woof_start_filtering_btn', function () { var shortcode = jQuery(this).parents('.woof').data('shortcode'); jQuery(this).html(woof_lang_loading); jQuery(this).addClass('woof_start_filtering_btn2'); jQuery(this).removeClass('woof_start_filtering_btn'); //redrawing [woof ajax_redraw=1] only var data = { action: "woof_draw_products", page: 1, shortcode: 'woof_nothing', //we do not need get any products, seacrh form data only woof_shortcode: shortcode, nonce_filter: woof_front_nonce }; jQuery.post(woof_ajaxurl, data, function (content) { content = JSON.parse(content); jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone')); woof_mass_reinit(); woof_init_tooltip(); }); return false; }); //*** window.addEventListener("pageshow", function (event) { var woof_check_history = event.persisted || (typeof window.performance != "undefined" && window.performance.navigation.type === 2); if (woof_check_history) { woof_hide_info_popup(); woof_submit_link_locked = false; } }); var str = window.location.href; window.onpopstate = function (event) { try { if (Object.keys(woof_current_values).length) { var temp = str.split('?'); var get1 = ""; if (temp[1] != undefined) { get1 = temp[1].split('#'); } var str2 = window.location.href; var temp2 = str2.split('?'); if (temp2[1] == undefined) { //return false; var get2 = {0: "", 1: ""}; } else { var get2 = temp2[1].split('#'); } if (get2[0] != get1[0]) { woof_show_info_popup(woof_lang_loading); window.location.reload(); } return false; } } catch (e) { console.log(e); } }; //*** //ion-slider price range slider woof_init_ion_sliders(); //*** woof_init_show_auto_form(); woof_init_hide_auto_form(); //*** woof_remove_empty_elements(); woof_init_search_form(); woof_init_pagination(); woof_init_orderby(); woof_init_reset_button(); woof_init_beauty_scroll(); //+++ woof_draw_products_top_panel(); woof_shortcode_observer(); //tooltip woof_init_tooltip(); //mobile filter woof_init_mobile_filter(); //+++ //if we use redirect attribute in shortcode [woof is_ajax=0] //not for ajax, for redirect mode only if (!woof_is_ajax) { woof_redirect_init(); } woof_init_toggles(); }); //if we use redirect attribute in shortcode [woof is_ajax=0] //not for ajax, for redirect mode only function woof_redirect_init() { try { if (jQuery('.woof').length) { //https://wordpress.org/support/topic/javascript-error-in-frontjs?replies=1 if (undefined !== jQuery('.woof').val()) { woof_redirect = jQuery('.woof').eq(0).data('redirect');//default value if (woof_redirect.length > 0) { woof_shop_page = woof_current_page_link = woof_redirect; } return woof_redirect; } } } catch (e) { console.log(e); } } function woof_init_orderby() { jQuery('body').on('submit', 'form.woocommerce-ordering', function () { /* woo3.3 */ if (!jQuery("#is_woo_shortcode").length) { return false; } /* +++ */ }); jQuery('body').on('change', 'form.woocommerce-ordering select.orderby', function () { /* woo3.3 */ if (!jQuery("#is_woo_shortcode").length) { woof_current_values.orderby = jQuery(this).val(); woof_ajax_page_num = 1; woof_submit_link(woof_get_submit_link(), 0); return false; } /* +++ */ }); } function woof_init_reset_button() { jQuery('body').on('click', '.woof_reset_search_form', function () { //var link = jQuery(this).data('link'); woof_ajax_page_num = 1; woof_ajax_redraw = 0; woof_reset_btn_action = true; if (woof_is_permalink) { woof_current_values = {}; woof_submit_link(woof_get_submit_link().split("page/")[0]); } else { var link = woof_shop_page; if (woof_current_values.hasOwnProperty('page_id')) { link = location.protocol + '//' + location.host + "/?page_id=" + woof_current_values.page_id; woof_current_values = {'page_id': woof_current_values.page_id}; woof_get_submit_link(); } //*** woof_submit_link(link); if (woof_is_ajax) { history.pushState({}, "", link); if (woof_current_values.hasOwnProperty('page_id')) { woof_current_values = {'page_id': woof_current_values.page_id}; } else { woof_current_values = {}; } } } return false; }); } function woof_init_pagination() { if (woof_is_ajax === 1) { //jQuery('.woocommerce-pagination ul.page-numbers a.page-numbers').life('click', function () { jQuery('body').on('click', '.woocommerce-pagination a.page-numbers', function () { var l = jQuery(this).attr('href'); if (woof_ajax_first_done) { //wp-admin/admin-ajax.php?paged=2 var res = l.split("paged="); if (typeof res[1] !== 'undefined') { woof_ajax_page_num = parseInt(res[1]); } else { woof_ajax_page_num = 1; } var res2 = l.split("product-page="); if (typeof res2[1] !== 'undefined') { woof_ajax_page_num = parseInt(res2[1]); } } else { var res = l.split("page/"); if (typeof res[1] !== 'undefined') { woof_ajax_page_num = parseInt(res[1]); } else { woof_ajax_page_num = 1; } var res2 = l.split("product-page="); if (typeof res2[1] !== 'undefined') { woof_ajax_page_num = parseInt(res2[1]); } } //+++ { woof_submit_link(woof_get_submit_link(), 0); } return false; }); } } function woof_init_search_form() { woof_init_checkboxes(); woof_init_mselects(); woof_init_radios(); woof_price_filter_radio_init(); woof_init_selects(); //for extensions if (woof_ext_init_functions !== null) { jQuery.each(woof_ext_init_functions, function (type, func) { eval(func + '()'); }); } //+++ jQuery('.woof_submit_search_form').on('click', function () { if (woof_ajax_redraw) { //[woof redirect="http://test-all/" autosubmit=1 ajax_redraw=1 is_ajax=1 tax_only="locations" by_only="none"] woof_ajax_redraw = 0; woof_is_ajax = 0; } //*** woof_submit_link(woof_get_submit_link()); return false; }); //*** jQuery('ul.woof_childs_list').parent('li').addClass('woof_childs_list_li'); //*** woof_remove_class_widget(); woof_checkboxes_slide(); document.dispatchEvent(new CustomEvent('woof_init_search_form', {detail: {}})); } var woof_submit_link_locked = false; function woof_submit_link(link, ajax_redraw) { if (woof_submit_link_locked) { return; } if (typeof WoofTurboMode != 'undefined') { WoofTurboMode.woof_submit_link(link); return; } if (typeof ajax_redraw == 'undefined') { ajax_redraw = woof_ajax_redraw; } woof_submit_link_locked = true; woof_show_info_popup(woof_lang_loading); if (woof_is_ajax === 1 && !ajax_redraw) { woof_ajax_first_done = true; var data = { action: "woof_draw_products", link: link, page: woof_ajax_page_num, shortcode: jQuery('#woof_results_by_ajax').data('shortcode'), woof_shortcode: jQuery('div.woof').data('shortcode'), nonce_filter: woof_front_nonce }; jQuery.post(woof_ajaxurl, data, function (content) { content = JSON.parse(content); woof_before_ajax_form_redrawing(); if (jQuery('.woof_results_by_ajax_shortcode').length) { if (typeof content.products != "undefined") { jQuery('#woof_results_by_ajax').replaceWith(content.products); /* compatibility found products count*/ var found_count = jQuery('.woof_found_count'); jQuery(found_count).show(); if (found_count.length > 0) { var count_prod = jQuery("#woof_results_by_ajax").data('count'); if (typeof count_prod != "undefined") { jQuery(found_count).text(count_prod); } } } } else { if (typeof content.products != "undefined") { jQuery('.woof_shortcode_output').replaceWith(content.products); } } if (typeof content.additional_fields != "undefined") { jQuery.each(content.additional_fields, function (selector, html_data) { if (typeof woof_additional_fields[selector] == 'undefined') { woof_additional_fields[selector] = jQuery(selector); } jQuery(selector).replaceWith(html_data); }); //draw old values jQuery.each(woof_additional_fields, function (selector, html_data_old) { if (typeof content.additional_fields[selector] == 'undefined') { jQuery(selector).replaceWith(html_data_old); } }); } jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone')); woof_draw_products_top_panel(); woof_mass_reinit(); woof_submit_link_locked = false; //removing id woof_results_by_ajax - multi in ajax mode sometimes //when uses shorcode woof_products in ajax and in settings try ajaxify shop is Yes jQuery.each(jQuery('#woof_results_by_ajax'), function (index, item) { if (index == 0) { return; } jQuery(item).removeAttr('id'); }); /*mobile behavior*/ //jQuery('.woof_hide_mobile_filter').trigger('click'); jQuery('.woof').removeClass('woof_show_filter_for_mobile'); //infinite scroll woof_infinite(); //*** script after ajax loading here woof_js_after_ajax_done(); //*** change link in button "add to cart" woof_change_link_addtocart(); /*tooltip*/ woof_init_tooltip(); document.dispatchEvent(new CustomEvent('woof-ajax-form-redrawing', {detail: { link: link }})); }); } else { if (ajax_redraw) { //redrawing [woof ajax_redraw=1] only var data = { action: "woof_draw_products", link: link, page: 1, shortcode: 'woof_nothing', //we do not need get any products, seacrh form data only woof_shortcode: jQuery('div.woof').eq(0).data('shortcode'), nonce_filter: woof_front_nonce }; jQuery.post(woof_ajaxurl, data, function (content) { woof_before_ajax_form_redrawing(); content = JSON.parse(content); jQuery('div.woof_redraw_zone').replaceWith(jQuery(content.form).find('.woof_redraw_zone')); woof_mass_reinit(); woof_submit_link_locked = false; /*tooltip*/ woof_init_tooltip(); document.dispatchEvent(new CustomEvent('woof-ajax-form-redrawing', {detail: { link: link }})); }); } else { window.location = link; woof_show_info_popup(woof_lang_loading); } } } function woof_remove_empty_elements() { // lets check for empty drop-downs jQuery.each(jQuery('.woof_container select'), function (index, select) { var size = jQuery(select).find('option').length; if (size === 0) { jQuery(select).parents('.woof_container').remove(); } }); //+++ // lets check for empty checkboxes, radio, color conatiners jQuery.each(jQuery('ul.woof_list'), function (index, ch) { var size = jQuery(ch).find('li').length; if (size === 0) { jQuery(ch).parents('.woof_container').remove(); } }); jQuery.each(jQuery('.woof_container .woof_list_sd'), function (index, ch) { var size = jQuery(ch).find('.woof-sd-ie').length; if (size === 0) { jQuery(ch).parents('.woof_container').remove(); } }); } function woof_get_submit_link() { //filter woof_current_values values if (woof_is_ajax) { woof_current_values.page = woof_ajax_page_num; } //+++ if (Object.keys(woof_current_values).length > 0) { jQuery.each(woof_current_values, function (index, value) { if (index == swoof_search_slug) { delete woof_current_values[index]; } if (index == 's') { delete woof_current_values[index]; } if (index == 'product') { //for single product page (when no permalinks) delete woof_current_values[index]; } if (index == 'really_curr_tax') { delete woof_current_values[index]; } }); } //*** if (Object.keys(woof_current_values).length === 2) { if (('min_price' in woof_current_values) && ('max_price' in woof_current_values)) { woof_current_page_link = woof_current_page_link.replace(new RegExp(/page\/(\d+)/), ""); var l = woof_current_page_link + '?min_price=' + woof_current_values.min_price + '&max_price=' + woof_current_values.max_price; if (woof_is_ajax) { history.pushState({}, "", l); } return l; } } //*** if (Object.keys(woof_current_values).length === 0) { if (woof_is_ajax) { history.pushState({}, "", woof_current_page_link); } return woof_current_page_link; } //+++ if (Object.keys(woof_really_curr_tax).length > 0) { woof_current_values['really_curr_tax'] = woof_really_curr_tax.term_id + '-' + woof_really_curr_tax.taxonomy; } //+++ var link = woof_current_page_link + "?" + swoof_search_slug + "=1"; //just for the case when no permalinks enabled if (!woof_is_permalink) { if (woof_redirect.length > 0) { link = woof_redirect + "?" + swoof_search_slug + "=1"; if (woof_current_values.hasOwnProperty('page_id')) { delete woof_current_values.page_id; } } else { link = location.protocol + '//' + location.host + "?" + swoof_search_slug + "=1"; } } //any trash for different sites, useful for quick support var woof_exclude_accept_array = ['path']; if (Object.keys(woof_current_values).length > 0) { jQuery.each(woof_current_values, function (index, value) { if (index == 'page' && woof_is_ajax) { index = 'paged';//for right pagination if copy/paste this link and send somebody another by email for example } if (index == "product-page") { return; } //http://dev.products-filter.com/?swoof=1&woof_author=3&woof_sku&woof_text=single //avoid links where values is empty if (typeof value !== 'undefined') { if ((typeof value && value.length > 0) || typeof value == 'number') { if (jQuery.inArray(index, woof_exclude_accept_array) == -1) { link = link + "&" + index + "=" + value; } } } }); } //+++ //remove wp pagination like 'page/2' link = link.replace(new RegExp(/page\/(\d+)/), ""); if (woof_is_ajax) { history.pushState({}, "", link); } return link; } function woof_show_info_popup(text) { if (woof_overlay_skin == 'default') { jQuery("#woof_html_buffer").text(text); jQuery("#woof_html_buffer").fadeTo(200, 0.9); } else { //http://jxnblk.com/loading/ switch (woof_overlay_skin) { case 'loading-balls': case 'loading-bars': case 'loading-bubbles': case 'loading-cubes': case 'loading-cylon': case 'loading-spin': case 'loading-spinning-bubbles': case 'loading-spokes': jQuery('body').plainOverlay('show', {progress: function () { //img style should be inlined return jQuery('