/* annasta Woocommerce Product Filters */ var a_w_f = typeof( a_w_f ) === 'undefined' ? {} : a_w_f; var awf_pretty_scrollbars = []; jQuery( document ).ready( function( $ ){ 'use strict'; a_w_f.update_query = function ( $filter, $container, build_badges ) { var taxonomy = $filter.attr( 'data-taxonomy' ); var values = []; var i = -1; if( taxonomy in awf_data.query ) { if( $filter.is( ':checkbox' ) ) { values = awf_data.query[taxonomy].split( ',' ); i = values.indexOf( $filter.val() ); } } if( $container.hasClass( 'awf-active' ) ) { if( $filter.hasClass( 'awf-default' ) ) { values = []; } else { if( i === -1 ) { values.push( $filter.val() ); } } } else { if( values.length > 0 ) { if( i > -1 ) { values.splice( i, 1 ); } } } if( values.length > 0 ) { awf_data.query[taxonomy] = values.join( ',' ); if( $container.hasClass( 'awf-range-filter-container' ) ) { awf_data.query[$filter.attr( 'data-max-name' )] = $filter.attr( 'data-next-value' ); } if( 'product_cat' === taxonomy ) { if( ! ( 'orderby' in awf_data.query ) && ! ( 's' in awf_data.query ) ) { delete awf_data.query['post_type']; } } else if( 's' === taxonomy && ( 'shop_on_frontpage' in awf_data ) ) { awf_data.query['post_type'] = 'product'; } } else { delete awf_data.query[taxonomy]; if( $container.hasClass( 'awf-range-filter-container' ) ) { delete awf_data.query[$filter.attr( 'data-max-name' )]; } if( 's' === taxonomy && ! ( 'orderby' in awf_data.query ) ) { delete awf_data.query['post_type']; } } if( 'sc_page' in awf_data ) { delete awf_data.query['product-page']; } if( build_badges ) { a_w_f.build_active_badges(); } }; a_w_f.build_active_badges = function () { $( '.awf-active-badge' ).remove(); $.each( awf_data.query, function( key, values ) { var $containers = $( '.awf-filters-container.awf-filters-' + key ); if( 0 === $containers.length ) { return true; } var $filter_containers = $containers.find( '.awf-filter-container.awf-active' ); if( 0 === $filter_containers.length ) { return true; } if( $containers.hasClass( 'awf-style-range-slider' ) ) { if( $containers.hasClass( 'awf-taxonomy-range-container' ) ) { var $filter = $( $filter_containers[0] ).find( '.awf-filter' ).first(); if( 0 === $( '.awf-active-badge-' + $filter.attr( 'data-taxonomy' ) ).length ) { awf_create_active_badge( $( $filter_containers[0] ).find( '.awf-filter' ).first(), $( $filter_containers[0] ) ); } } else { $filter_containers = $filter_containers.filter( '.awf-range-slider-container' ); var $filter = $( $filter_containers[0] ).find( '.awf-filter' ).first(); if( 0 === $( '.awf-active-badge-' + $filter.attr( 'data-module' ) ).length ) { awf_create_active_badge( $( $filter_containers[0] ).find( '.awf-filter[name=' + key + ']' ).first(), $( $filter_containers[0] ) ); } } } else if( $( $filter_containers[0] ).hasClass( 'awf-range-filter-container' ) ) { var $filter = $( $filter_containers[0] ).find( '.awf-filter' ).first(); if( 0 === $( '.awf-active-badge-' + $filter.attr( 'data-module' ) ).length ) { awf_create_active_badge( $filter, $( $filter_containers[0] ) ); } } else { if( $filter_containers.hasClass( 'awf-product-search-container' ) ) { awf_create_active_badge( $( $filter_containers[0] ).find( '.awf-filter' ).first(), $( $filter_containers[0] ) ); } else { var slugs = values.split( ',' ); $.each( slugs, function( i, slug ) { var $slug_container = $filter_containers.filter( '.awf-' + key + '-' + slug + '-container' ).first(); if( 0 < $slug_container.length ) { awf_create_active_badge( $slug_container.find( '.awf-filter' ).first(), $slug_container ); } }); } } }); if( 0 < $( '.awf-reset-btn-container' ).first().length ) { if( 0 < $( '.awf-reset-btn-container' ).first().siblings( '.awf-active-badges-container' ).find( '.awf-active-badge' ).length ) { $( '.awf-reset-btn-container' ).show(); } else { $( '.awf-reset-btn-container' ).hide(); } } }; a_w_f.apply_filter = function ( $filter, $preset_wrapper ) { awf_update_url(); if( $preset_wrapper.hasClass( 'awf-url' ) ) { if( true === $filter ) { window.location.reload(); } } else if( $preset_wrapper.hasClass( 'awf-ajax' ) ) { if( '1' === awf_data.redirect_ajax ) { window.location.reload(); } awf_ajax_filter( $filter ); } }; a_w_f.reset_all_filters = function ( excluded_taxonomies ) { excluded_taxonomies.push( 'ppp' ); $.each( awf_data.query, function( taxonomy, value ) { if( $.inArray( taxonomy, excluded_taxonomies) !== -1 ) { return; } var $wrappers = $( '.awf-filters-' + taxonomy ); if( 0 < $wrappers.length ) { var values; if( 's' === taxonomy ) { values = [value]; } else { values = value.split( ',' ); } $.each( values, function( i, v ) { if( $wrappers.hasClass( 'awf-style-range-slider' ) ) { var $wrapper = $wrappers.filter( '.awf-style-range-slider' ).first(); if( taxonomy in awf_data.query ) { awf_reset_filter_value( $wrapper.find( '.awf-filter' ).first(), $wrapper.find( '.awf-filter-container' ).first() ); } } else if( $( $wrappers[0] ).hasClass( 'awf-filters-s' ) ) { awf_reset_filter_value( $( $wrappers[0] ).find( '.awf-filter' ).first(), $( $wrappers[0] ).find( '.awf-filter-container' ).first() ); } else { var name = '.awf-' + taxonomy + '-' + v.replace(/[.,]/g,'-') + '-container'; var $container = $( $wrappers ).find( name ).first(); var $filter = $container.find( '.awf-filter' ).first(); if( 0 === $filter.length ) { return true; } if( $filter[0].hasAttribute( 'data-max-name' ) && ( $filter.attr( 'data-max-name' ) in awf_data.query ) ) { var $range_filter = $wrappers.find( name + " .awf-filter[data-next-value='" + awf_data.query[$filter.attr( 'data-max-name' )] + "']" ).first(); if( 0 !== $range_filter.length ) { awf_reset_filter_value( $range_filter, $range_filter.closest( name ) ); } } else { awf_reset_filter_value( $filter, $container ); } } }); } }); }; a_w_f.build_url = function( query ) { var url; if( 'cat_url' in awf_data && 'product_cat' in query ) { url = awf_data.cat_url.replace( '/awf-insert-product-cats/', '/' + query['product_cat'] + '/' ) delete query['product_cat']; if( ! $.isEmptyObject( query ) ) { url += '?' + decodeURIComponent( $.param( query ) ); } } else { url = awf_data.shop_url; if( ! $.isEmptyObject( query ) ) { url += '?' + decodeURIComponent( $.param( query ) ); } } return url; }; window.onpopstate = function( event ) { if( 'awf_call' in event.state ) { window.location.reload(); } }; if( 'undefined' !== typeof $.blockUI ) { $.blockUI.defaults.overlayCSS = { backgroundColor: '#fff', opacity: 0.5 }; $.blockUI.defaults.css = { border: 'none' }; } if( 'undefined' !== typeof PerfectScrollbar ) { $( '.awf-pretty-scrollbars' ).each( function( i, container ) { awf_pretty_scrollbars.push( new PerfectScrollbar( container, { suppressScrollX: true } ) ); }); } $( '.awf-filter' ).each( function( i, filter ) { awf_set_filter_events( $( filter ) ); }); $( '.awf-url label' ).on( 'click', function() { $( this ).siblings( 'input' ).prop( 'checked', true ); }); $( '.awf-apply-filter-btn' ).on( 'click', function() { a_w_f.apply_filter( true, $( this ).closest( '.awf-preset-wrapper' ) ); }); $( '.awf-collapsible-children .awf-filter-container' ).on( 'click', function() { $( this ).toggleClass( 'awf-collapsed-on' ); $( this ).next( '.awf-children-container' ).toggleClass( 'awf-collapsed' ); var $a_filter = $( this ).find( '.awf-filter' ).first(); if( $a_filter.length > 0 ) { $.each( awf_pretty_scrollbars, function( i, ps ) { if( $( ps.element ).hasClass( 'awf-filters-' + $a_filter.attr( 'data-taxonomy' ) ) ) { ps.update(); } }); } }); $( '.awf-filters-search' ).on( 'change', function() { if ( 0 === $( this ).val().length ) { $( this ).closest( '.awf-filters-container' ).find( '.awf-filter-container' ).not( '.awf-hidden' ).show(); } }); $( '.awf-filters-search' ).on( 'keyup', function() { var filter_containers = $( this ).closest( '.awf-filters-container' ).find( '.awf-filter-container' ).not( '.awf-hidden' ), search = $( this ).val().toLowerCase(); if ( '' === search ) { $( filter_containers ).show(); } else { for ( var i = filter_containers.length; i--; ) { var row = $( filter_containers[i] ); if( row.find( ' > label' ).text().toLowerCase().indexOf( search ) > -1 || row.find( ' > a > label' ).text().toLowerCase().indexOf( search ) > -1 ) { row.show(); } else { row.hide(); } } } }); $( '.awf-range-slider-container' ).each( function( i, el ) { if( i === 0 ) { $( el ).addClass( 'awf-active' ); } awf_build_range_slider( el ); }); awf_register_reset_btns(); a_w_f.build_active_badges(); awf_update_orderby(); function awf_set_filter_events( $filter ) { var $preset_wrapper = $filter.closest( '.awf-preset-wrapper' ); var $filter_container = $filter.closest( '.awf-filter-container' ); if( 'premium' in a_w_f ) { a_w_f.set_premium_filter_events( $filter_container, $filter ); } if( $preset_wrapper.hasClass( 'awf-url' ) && ( $filter.is(':checkbox') || $filter.is(':radio') ) ) { $filter.on( 'click', function() { window.location.href = $( this ).closest( 'a' ).attr( 'href' ); }); } if( $filter_container.hasClass( 'awf-active' ) && $filter_container.closest( 'ul.awf-children-container' ).first().hasClass( 'awf-collapsed' ) ) { $filter_container.parents( 'ul.awf-children-container' ).removeClass( 'awf-collapsed' ).siblings( 'li.awf-parent-container' ).removeClass( 'awf-collapsed-on' ); } if( $filter_container.hasClass( 'awf-product-search-container' ) ) { $filter.on( 'change', function() { awf_product_search_onchange( $filter ); a_w_f.apply_filter( true, $preset_wrapper ); }); $filter.on( 'keydown', function( event ) { if( event.keyCode === 13 ) { awf_product_search_onchange( $filter ); a_w_f.apply_filter( true, $preset_wrapper ); $filter.trigger( 'blur' ); return false; } }); } else { $filter.siblings('label').on( 'touchstart', function() { $filter_container.addClass( 'awf-hover-off' ); }); $filter.on( 'click', function() { awf_filter_onclick( $filter ); }); if( ! $preset_wrapper.hasClass( 'awf-button' ) ) { $filter.on( 'click', function() { a_w_f.apply_filter( $filter, $preset_wrapper ); }); } } } function awf_register_reset_btns() { $( '.awf-preset-wrapper' ).each( function( i, preset_wrapper ) { $( preset_wrapper ).find( '.awf-reset-btn' ).on( 'click', function() { a_w_f.reset_all_filters( [] ); a_w_f.apply_filter( true, $( preset_wrapper ) ); }); }); } function awf_filter_onclick( filter ) { var $filter = $( filter ); var $container = $filter.closest( '.awf-filter-container' ); var taxonomy = $filter.attr( 'data-taxonomy' ); if( $container.hasClass( 'awf-active' ) ) { if( $filter.is( ':radio' ) ) { if( $container.hasClass( 'awf-range-filter-container' ) ) { var $slider_container = $( '.awf-style-range-slider.awf-filters-' + taxonomy + ' .awf-filter-container' ).first(); if( $slider_container.length > 0 ) { awf_reset_filter_value( $filter, $slider_container ); return; } } $( '.awf-single .awf-filters-' + taxonomy + ' .awf-filter-container.awf-active, .awf-range .awf-filters-' + taxonomy + ' .awf-range-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ); $( '.awf-multi .awf-' + taxonomy + '-' + $filter.val().replace(/[.,]/g,'-') + '-container' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ); var $default = $( '.awf-filters-' + taxonomy + ' .awf-default' ); if( 0 < $default.length ) { $filter = $default; $container = $filter.closest( '.awf-filter-container' ); $default.prop( 'checked', true ).closest( '.awf-filter-container' ).addClass( 'awf-active' ); } } else { $( '.awf-' + taxonomy + '-' + $filter.val() + '-container' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ); } } else { if( $filter.is( ':radio' ) ) { if( $container.hasClass( 'awf-range-filter-container' ) ) { var $range_slider = $( '.awf-style-range-slider.awf-filters-' + taxonomy + ' .awf-filter-container' ).first(); if( $range_slider.length > 0 ) { var min = parseFloat( $filter.val() ); var max = parseFloat( $filter.attr( 'data-next-value' ) ); $range_slider[0].noUiSlider.set( [min, max] ); awf_range_slider_onchange( $range_slider[0], [min, max], $range_slider[0].noUiSlider.options.range.min[0], $range_slider[0].noUiSlider.options.range.max[0] ); return; } } $( '.awf-filters-' + taxonomy + ' .awf-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input' ).prop( 'checked', false ); $( '.awf-' + taxonomy + '-' + $filter.val().replace( /[.,]/g, '-' ) + '-container' ).addClass( 'awf-active' ).find( 'input' ).prop( 'checked', true ); } else { $( '.awf-single .awf-filters-' + taxonomy + ' .awf-filter-container.awf-active' ).removeClass( 'awf-active' ); $( '.awf-' + taxonomy + '-' + $filter.val() + '-container' ).addClass( 'awf-active' ).find( 'input' ).prop( 'checked', true ); $( '.awf-multi .awf-' + taxonomy + '-' + $filter.val() + '-container' ).addClass( 'awf-active' ).find( 'input' ).each( function() { awf_uncheck_parents_and_children( this ); }); } } a_w_f.update_query( $filter, $container, true ); } function awf_uncheck_parents_and_children( checkbox ) { $( checkbox ).parents( 'ul' ).prev( 'li.awf-filter-container.awf-active' ).each( function( i, container ) {//$( checkbox ) $( container ).removeClass( 'awf-active' ); $( container ).find( '.awf-filter' ).each( function ( ii, filter ) { $( filter ).prop( 'checked', false ); a_w_f.update_query( $( filter ), $( container ), false ); }); }); $( checkbox ).parents( 'li.awf-filter-container' ).next( 'ul' ).find( '.awf-filter-container.awf-active' ).each( function( i, container ) { $( container ).removeClass( 'awf-active' ); $( container ).find( '.awf-filter' ).each( function ( ii, filter ) { $( filter ).prop( 'checked', false ); a_w_f.update_query( $( filter ), $( container ), false ); }); }); } function awf_product_search_onchange( $searchbox ) { $( '.awf-product-search-container .awf-filter' ).each( function( i, el ) { var $container = $( el ).closest( '.awf-filter-container' ); if( 0 === $( $searchbox ).val().length ) { $container.removeClass( 'awf-active' ); } else { $container.addClass( 'awf-active' ); } if( el === $searchbox[0] ) { a_w_f.update_query( $searchbox, $container, true ); } else { $( el ).val( $( $searchbox ).val() ); } }); } function awf_range_slider_onchange( range_container, values, min, max ) { values[0] = parseFloat( values[0] ); values[1] = parseFloat( values[1] ); var module_container = '.awf-filters-' + $( range_container ).find( '.awf-filter').first().attr( 'name' ); $( module_container + ' .awf-range-slider-container' ).each( function( i, filter_container ) { var $min_filter = $( filter_container ).find( '.awf-range-slider-min' ); var $max_filter = $( filter_container ).find( '.awf-range-slider-max' ); $min_filter.val( values[0] ); $max_filter.val( values[1] ); if( filter_container === range_container ) { if( values[0] === min ) { $min_filter.addClass( 'awf-default' ); } else { $min_filter.removeClass( 'awf-default' ); } if( values[1] === max ) { $max_filter.addClass( 'awf-default' ); } else { $max_filter.removeClass( 'awf-default' ); } $( filter_container ).addClass( 'awf-active' ); a_w_f.update_query( $min_filter, $( range_container ), false ); a_w_f.update_query( $max_filter, $( range_container ), true ); $( '.awf-filters-' + $min_filter.attr( 'data-taxonomy' ) + ' .awf-range-filter-container.awf-active' ).removeClass( 'awf-active' ).find( 'input.awf-filter' ).prop( 'checked', false ); $( '.awf-range-filter-container input[value="' + values[0] + '"][data-next-value="' + values[1] + '"]' ).prop( 'checked', true ).closest( '.awf-filter-container' ).addClass( 'awf-active' ); } else { filter_container.noUiSlider.set( [values[0], values[1]] ); $min_filter.removeClass( 'awf-default' ); $max_filter.removeClass( 'awf-default' ); $( filter_container ).removeClass( 'awf-active' ); } }); } function awf_create_active_badge( $filter, $container ) { if( $filter.hasClass( 'awf-default' ) ) { return; } if( $filter.hasClass( 'awf-no-active-badge' ) ) { return; } var label; var classes = ['awf-active-badge']; if( $filter.hasClass( 'awf-range-slider-value' ) ) { classes.push( 'awf-active-badge-' + $filter.attr( 'data-module' ) ); var values = $container[0].noUiSlider.get(); if( parseFloat( values[0] ) === parseFloat( $container.attr( 'data-min' ) ) && parseFloat( values[1] ) === parseFloat( $container.attr( 'data-max' ) ) ) { return; } label = $container.attr( 'data-label' ) + ' ' + $container.attr( 'data-prefix' ) + values[0] + $container.attr( 'data-postfix' ) + ' - ' + $container.attr( 'data-prefix' ) + values[1] + $container.attr( 'data-postfix' ); } else if( $filter.hasClass( 'awf-taxonomy-range-value' ) ) { if( 'premium' in a_w_f ) { label = a_w_f.create_taxonomy_range_badge( $container ); } } else if( $container.hasClass( 'awf-range-filter-container' ) ) { classes.push( 'awf-active-badge-' + $filter.attr( 'data-module' ) ); label = $filter.siblings( 'label' ).attr( 'title' ); } else if( $container.hasClass( 'awf-product-search-container' ) ) { label = $filter.siblings( 'label' ).text() + ' ' + $filter.val(); } else { label = $filter.siblings( 'label' ).attr( 'title' ); } var badge = $( '