PageSourceSearch

https://rockslideengineering.com/wp-content/plugins/wc-ajax-product-filter/assets/js/scripts.js?ver=20120206

js rockslideengineering.com collected 2026-10-08 09:17:12 UTC 13,525 bytes, 485 lines download raw bytes

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.