1jQuery(document).ready(function($) { 2 // return false if wcapf_params variable is not found 3 if (typeof wcapf_params === 'undefined') { 4 return false; 5 } 6 7 // store widget ids those will be replaced with new data 8 var widgets = {}; 9 10 $('.wcapf-ajax-term-filter').each(function(index) { 11 var widget_id = $(this).attr('id'); 12 widgets[index] = widget_id; 13 }); 14 15 // scripts to run before updating shop loop 16 wcapfBeforeUpdate = function() { 17 var overlay_color; 18 19 if (wcapf_params.overlay_bg_color.length) { 20 overlay_color = wcapf_params.overlay_bg_color; 21 } else { 22 overlay_color = '#fff'; 23 } 24 25 var markup = '<div class="wcapf-before-update" style="background-color: ' + overlay_color + '"></div>', 26 holder, 27 top_scroll_offset = 0; 28 29 if ($(wcapf_params.shop_loop_container.length)) { 30 holder = wcapf_params.shop_loop_container; 31 } else if ($(wcapf_params.not_found_container).length) { 32 holder = wcapf_params.not_found_container; 33 } 34 35 if (holder.length) { 36 // show loading image 37 $(markup).prependTo(holder); 38 39 // scroll to top 40 if (typeof wcapf_params.scroll_to_top !== 'undefined' && wcapf_params.scroll_to_top == true) { 41 var scroll_to_top_offset, 42 top_scroll_offset; 43 44 if (typeof wcapf_params.scroll_to_top_offset !== 'undefined' && wcapf_params.scroll_to_top_offset.length) { 45 scroll_to_top_offset = parseInt(wcapf_params.scroll_to_top_offset); 46 } else { 47 scroll_to_top_offset = 100; 48 } 49 50 top_scroll_offset = $(holder).offset().top - scroll_to_top_offset; 51 52 if (top_scroll_offset < 0) { 53 top_scroll_offset = 0; 54 } 55 56 $('html, body').animate({scrollTop: top_scroll_offset}, 'slow'); 57 } 58 } 59 60 } 61 62 // scripts to run after updating shop loop 63 wcapfAfterUpdate = function() { 64 // Compatibility with YITH Wishlist Pro 65 setTimeout( function(){ 66 $(document).trigger( 'yith_infs_added_elem' ); 67 }, 1000 ); 68 } 69 70 // load filtered products 71 wcapfFilterProducts = function() { 72 // run before update function: show a loading image and scroll to top 73 wcapfBeforeUpdate(); 74 75 $.get(window.location.href, function(data) { 76 var $data = jQuery(data), 77 shop_loop = $data.find(wcapf_params.shop_loop_container), 78 not_found = $data.find(wcapf_params.not_found_container); 79 80 // replace widgets data with new data 81 $.each(widgets, function(index, id) { 82 var single_widget = $data.find('#' + id), 83 single_widget_class = $(single_widget).attr('class'); 84 85 // update class 86 $('#' + id).attr('class', single_widget_class); 87 // update widget 88 $('#' + id).html(single_widget.html()); 89 }); 90 91 // replace old shop loop with new one 92 if (wcapf_params.shop_loop_container == wcapf_params.not_found_container) { 93 $(wcapf_params.shop_loop_container).html(shop_loop.html()); 94 } else { 95 if ($(wcapf_params.not_found_container).length) { 96 if (shop_loop.length) { 97 $(wcapf_params.not_found_container).html(shop_loop.html()); 98 } else if (not_found.length) { 99 $(wcapf_params.not_found_container).html(not_found.html()); 100 } 101 } else if ($(wcapf_params.shop_loop_container).length) { 102 if (shop_loop.length) { 103 $(wcapf_params.shop_loop_container).html(shop_loop.html()); 104 } else if (not_found.length) { 105 $(wcapf_params.shop_loop_container).html(not_found.html()); 106 } 107 } 108 } 109 110 // reinitialize ordering 111 wcapfInitOrder(); 112 113 // reinitialize dropdown filter 114 wcapfDropDownFilter(); 115 116 // after update 117 wcapfAfterUpdate(); 118 119 // run scripts after shop loop undated 120 if (typeof wcapf_params.custom_scripts !== 'undefined' && wcapf_params.custom_scripts.length > 0) { 121 eval(wcapf_params.custom_scripts); 122 } 123 }); 124 } 125 126 // URL Parser 127 wcapfGetUrlVars = function(url) { 128 var vars = {}, hash; 129 130 if (typeof url == 'undefined') { 131 url = window.location.href; 132 } else { 133 url = url; 134 } 135 136 var hashes = url.slice(url.indexOf('?') + 1).split('&'); 137 for (var i = 0; i < hashes.length; i++) { 138 hash = hashes[i].split('='); 139 vars[hash[0]] = hash[1]; 140 } 141 return vars; 142 } 143 144 // if current page is greater than 1 then we should set it to 1 145 // everytime we add new query to url to prevent page not found error. 146 wcapfFixPagination = function() { 147 var url = window.location.href, 148 params = wcapfGetUrlVars(url); 149 150 if (current_page = parseInt(url.replace(/.+\/page\/([0-9]+)+/, "$1"))) { 151 if (current_page > 1) { 152 url = url.replace(/page\/([0-9]+)/, 'page/1'); 153 } 154 } 155 else if(typeof params['paged'] != 'undefined') { 156 current_page = parseInt(params['paged']); 157 if (current_page > 1) { 158 url = url.replace('paged=' + current_page, 'paged=1'); 159 } 160 } 161 162 return url; 163 } 164 165 // update query string for categories, meta etc.. 166 wcapfUpdateQueryStringParameter = function(key, value, push_history, url) { 167 if (typeof push_history === 'undefined') { 168 push_history = true; 169 } 170 171 if (typeof url === 'undefined') { 172 url = wcapfFixPagination(); 173 } 174 175 var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"), 176 separator = url.indexOf('?') !== -1 ? "&" : "?", 177 url_with_query; 178 179 if (url.match(re)) { 180 url_with_query = url.replace(re, '$1' + key + "=" + value + '$2'); 181 } 182 else { 183 url_with_query = url + separator + key + "=" + value; 184 } 185 186 if (push_history === true) { 187 return history.pushState({}, '', url_with_query); 188 } else { 189 return url_with_query; 190 } 191 } 192 193 // remove parameter from url 194 wcapfRemoveQueryStringParameter = function(filter_key, url) { 195 if (typeof url === 'undefined') { 196 url = wcapfFixPagination(); 197 } 198 199 var params = wcapfGetUrlVars(url), 200 count_params = Object.keys(params).length, 201 start_position = url.indexOf('?'), 202 param_position = url.indexOf(filter_key), 203 clean_url, 204 clean_query; 205 206 if (count_params > 1) { 207 if ((param_position - start_position) > 1) { 208 clean_url = url.replace('&' + filter_key + '=' + params[filter_key], ''); 209 } else { 210 clean_url = url.replace(filter_key + '=' + params[filter_key] + '&', ''); 211 } 212
213 var params = clean_url.split('?'); 214 clean_query = '?' + params[1]; 215 } else { 216 clean_query = url.replace('?' + filter_key + '=' + params[filter_key], ''); 217 } 218 219 return clean_query; 220 } 221 222 // add filter if not exists else remove filter 223 wcapfSingleFilter = function(filter_key, filter_val) { 224 var params = wcapfGetUrlVars(), 225 query; 226 227 if (typeof params[filter_key] !== 'undefined' && params[filter_key] == filter_val) { 228 query = wcapfRemoveQueryStringParameter(filter_key); 229 } else { 230 query = wcapfUpdateQueryStringParameter(filter_key, filter_val, false); 231 } 232 233 // update url 234 history.pushState({}, '', query); 235 236 // filter products 237 wcapfFilterProducts(); 238 } 239 240 // take the key and value and make query 241 wcapfMakeParameters = function(filter_key, filter_val, url) { 242 var params, 243 next_vals, 244 empty_val = false; 245 246 if (typeof url !== 'undefined') { 247 params = wcapfGetUrlVars(url); 248 } else { 249 params = wcapfGetUrlVars(); 250 } 251 252 if (typeof params[filter_key] != 'undefined') { 253 var prev_vals = params[filter_key], 254 prev_vals_array = prev_vals.split(','); 255 256 if (prev_vals.length > 0) { 257 var found = jQuery.inArray(filter_val, prev_vals_array); 258 259 if (found >= 0) { 260 // Element was found, remove it. 261 prev_vals_array.splice(found, 1); 262 263 if (prev_vals_array.length == 0) { 264 empty_val = true; 265 } 266 } else { 267 // Element was not found, add it. 268 prev_vals_array.push(filter_val); 269 } 270 271 if (prev_vals_array.length > 1) { 272 next_vals = prev_vals_array.join(','); 273 } else { 274 next_vals = prev_vals_array; 275 } 276 } else { 277 next_vals = filter_val; 278 } 279 } else { 280 next_vals = filter_val; 281 } 282 283 // update url and query string 284 if (empty_val == false) { 285 wcapfUpdateQueryStringParameter(filter_key, next_vals); 286 } else { 287 var query = wcapfRemoveQueryStringParameter(filter_key); 288 history.pushState({}, '', query); 289 } 290 291 // filter products 292 wcapfFilterProducts(); 293 } 294 295 // handle the filter request 296 $('.wcapf-ajax-term-filter').not('.wcapf-price-filter-widget').on('click', 'li a', function(event) { 297 event.preventDefault(); 298 var element = $(this), 299 filter_key = element.attr('data-key'), 300 filter_val = element.attr('data-value'), 301 enable_multiple_filter = element.attr('data-multiple-filter'); 302 303 if (enable_multiple_filter == true) { 304 wcapfMakeParameters(filter_key, filter_val); 305 } else { 306 wcapfSingleFilter(filter_key, filter_val); 307 } 308 309 }); 310 311 // handle the filter request for price filter display type list 312 $('.wcapf-price-filter-widget.wcapf-ajax-term-filter').on('click', 'li a', function(event) { 313 event.preventDefault(); 314 var element = $(this), 315 filter_key_min = element.attr('data-key-min'), 316 filter_val_min = element.attr('data-value-min'), 317 filter_key_max = element.attr('data-key-max'), 318 filter_val_max = element.attr('data-value-max'), 319 query; 320 321 if (element.parent().hasClass('chosen')) { 322 query = wcapfRemoveQueryStringParameter(filter_key_min); 323 query = wcapfRemoveQueryStringParameter(filter_key_max, query); 324 325 if (query == '') { 326 query = window.location.href.split('?')[0]; 327 } 328 329 history.pushState({}, '', query); 330 } else { 331 query = wcapfUpdateQueryStringParameter(filter_key_min, filter_val_min, false); 332 query = wcapfUpdateQueryStringParameter(filter_key_max, filter_val_max, true, query); 333 } 334 335 // filter products 336 wcapfFilterProducts(); 337 }); 338 339 // handle the pagination request 340 if (wcapf_params.pagination_container.length > 0) { 341 var holder = wcapf_params.pagination_container + ' a'; 342 343 $(document).on('click', holder, function(event) { 344 event.preventDefault(); 345 var location = $(this).attr('href'); 346 history.pushState({}, '', location); 347 348 // filter products 349 wcapfFilterProducts(); 350 }); 351 } 352 353 // history back and forward request handling 354 $(window).bind('popstate', function(event) { 355 // filter products 356 wcapfFilterProducts(); 357 }); 358 359 // ordering 360 wcapfInitOrder = function() { 361 if (typeof wcapf_params.sorting_control !== 'undefined' && wcapf_params.sorting_control.length && wcapf_params.sorting_control == true) { 362 $('.wcapf-before-products').find('.woocommerce-ordering').each(function(index) { 363 $(this).on('submit', function(event) { 364 event.preventDefault(); 365 }); 366 367 $(this).on('change', 'select.orderby', function(event) { 368 event.preventDefault(); 369 370 var order = $(this).val(), 371 filter_key = 'orderby'; 372 373 // change url 374 wcapfUpdateQueryStringParameter(filter_key, order); 375 376 // filter products 377 wcapfFilterProducts(); 378 }); 379 }); 380 } 381 } 382 383 // init ordering 384 wcapfInitOrder(); 385 386 // remove active filters 387 $(document).on('click', '.wcapf-active-filters a:not(.reset)', function(event) { 388 event.preventDefault(); 389 var element = $(this), 390 filter_key = element.attr('data-key'), 391 filter_val = element.attr('data-value'); 392 393 if (typeof filter_val === 'undefined') { 394 var query = wcapfRemoveQueryStringParameter(filter_key); 395 history.pushState({}, '', query); 396 397 // price slider 398 if ($('#wcapf-noui-slider').length) { 399 var priceSlider = document.getElementById('wcapf-noui-slider'), 400 min_val = parseInt($(priceSlider).attr('data-min')), 401 max_val = parseInt($(priceSlider).attr('data-max')); 402 403 if (min_val && max_val) { 404 if (filter_key === 'min-price') { 405 priceSlider.noUiSlider.set([min_val, null]); 406 } else if (filter_key === 'max-price') { 407 priceSlider.noUiSlider.set([null, max_val]); 408 } 409 } 410 } 411 412 // filter products 413 wcapfFilterProducts(); 414 } else { 415 wcapfMakeParameters(filter_key, filter_val); 416 } 417 }); 418 419 // clear all filters 420 $(document).on('click', '.wcapf-active-filters a.reset', function(event) { 421 event.preventDefault(); 422 423 var location = $(this).attr('data-location'); 424 history.pushState({}, '', location); 425 426 if ($('#wcapf-noui-slider').length) { 427 var priceSlider = document.getElementById('wcapf-noui-slider'), 428 min_val = parseInt($(priceSlider).attr('data-min')), 429 max_val = parseInt($(priceSlider).attr('data-max')); 430 431 if (min_val && max_val) { 432 priceSlider.noUiSlider.set([min_val, max_val]); 433 } 434 } 435 436 // filter products 437 wcapfFilterProducts(); 438 }); 439 440 // dispaly type dropdown 441 function formatState(state) { 442 var depth = $(state.element).attr('data-depth'),
443 $state = $('<span class="depth depth-' + depth + '">' + state.text + '</span>'); 444 445 return $state; 446 } 447 448 wcapfDropDownFilter = function() { 449 if ($('.wcapf-select2-single').length) { 450 $('.wcapf-select2-single').select2({ 451 templateResult: formatState, 452 minimumResultsForSearch: Infinity, 453 allowClear: true 454 }); 455 } 456 457 if ($('.wcapf-select2-multiple').length) { 458 $('.wcapf-select2-multiple').select2({ 459 templateResult: formatState, 460 }); 461 } 462 463 $('.select2-dropdown').css('display', 'none'); 464 } 465 466 // initialize dropdown filter 467 wcapfDropDownFilter(); 468 469 $(document).on('change', '.wcapf-select2', function(event) { 470 event.preventDefault(); 471 var filter_key = $(this).attr('name'), 472 filter_val = $(this).val(); 473 474 if (!filter_val) { 475 var query = wcapfRemoveQueryStringParameter(filter_key); 476 history.pushState({}, '', query); 477 } else { 478 filter_val = filter_val.toString(); 479 wcapfUpdateQueryStringParameter(filter_key, filter_val); 480 } 481 482 // filter products 483 wcapfFilterProducts(); 484 }); 485});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.