PageSourceSearch

https://badeta.nl/wp-content/plugins/commercegurus-commercekit/assets/js/ajax-search.js?ver=2.2.3

js badeta.nl collected 2026-10-08 02:51:09 UTC 9,762 bytes, 250 lines download raw bytes

1/* Javascript Document */
2if ( commercekit_ajs.ajax_search == 1 ) {
3	function ckit_ajax_search(){
4		var minChar = commercekit_ajs.char_count;
5		var maxHeight = 600;
6		var deferRequestBy = 200;
7		var cSuggestions = {};
8		var cViewAlls = {};
9		var inputs = document.querySelectorAll('input[type="search"]');
10		inputs.forEach(function(input){
11			var searchWidget = input.closest('.widget_search');
12			var productWidget = input.closest('.woocommerce.widget_product_search');
13			if( !searchWidget && !productWidget ) return false;
14			var currentRequest = null;
15			var currentCancel = null;
16			var currentValue = '';
17			var iwidth = input.offsetWidth;
18			var form = input.closest('form');
19			form.insertAdjacentHTML('beforeend', '<div class="commercekit-ajs-results" style="width: '+iwidth+'px;"><div class="commercekit-ajs-suggestions" style="position: absolute; display: none; z-index: 9999; width: '+iwidth+'px;"></div><div class="commercekit-ajs-view-all-holder" style="display: none;"></div></div>');
20			input.setAttribute('autocomplete', 'off');
21			input.classList.add('commercekit-ajax-search');
22			
23			if( commercekit_ajs.layout == 'product' ){
24				var post_type = form.querySelector('input[name="post_type"]');
25				if( post_type ){
26					post_type.value = 'product';
27				} else {
28					var hidinput = document.createElement('input');
29					hidinput.setAttribute('type', 'hidden');
30					hidinput.setAttribute('name', 'post_type');
31					hidinput.setAttribute('value', 'product');
32					input.parentNode.insertBefore(hidinput, input.nextSibling);
33				}
34			} else {
35				var post_type = form.querySelector('input[name="post_type"]');
36				if( post_type ){
37					post_type.parentNode.removeChild(post_type);
38				}
39			}
40
41			form.addEventListener('submit', function(e){
42				var formsugg = form.querySelector('.commercekit-ajs-suggestions');
43				var active = formsugg.querySelector('.active');
44				if( active ){
45					e.preventDefault();
46					active.querySelector('a').click();
47					return false;
48				}
49			});
50			input.addEventListener('keyup', function(e){
51				formresult = form.querySelector('.commercekit-ajs-results');
52				formsugg = form.querySelector('.commercekit-ajs-suggestions');
53				formall = form.querySelector('.commercekit-ajs-view-all-holder');
54				var code = (e.keyCode || e.which);
55				if (code === 37 || code === 38 || code === 39 || code === 40 || code === 27 || code === 13 || input.value.length < minChar ) {
56					if( code === 27 ) {
57						clearTimeout(currentRequest);
58						ckCloseAllSuggestions();
59					} else if( code === 38 || code === 40 || code === 13 ) {
60						var result = ckAjaxSearchKeyboardAccess(code, formsugg, input);
61						if( result == false ){
62							e.preventDefault();
63							return;
64						}
65					} else {
66						return;
67					}
68				} else {
69					clearTimeout(currentRequest);
70					ckCloseAllSuggestions();
71					formsugg.innerHTML = ''; formsugg.style.display = 'none';
72					formall.innerHTML = ''; formall.style.display = 'none';
73
74					if( cSuggestions[input.value] !== undefined ){
75						formsugg.innerHTML = cSuggestions[input.value];
76						formsugg.style.display = 'block';
77						formall.innerHTML = cViewAlls[input.value];
78						if( cViewAlls[input.value] != '' ){
79							formall.style.display = 'block';
80							ckPrepareSuggestionsHeight(input, form, formall, formresult, formsugg);
81						} else {
82							ckPrepareSuggestionsHeight(input, form, null, formresult, formsugg);
83						}
84					} else {
85						if( currentValue == input.value ){
86							return;
87						}
88						currentRequest = setTimeout(function(){
89							currentValue = input.value;
90							input.setAttribute('style', 'background-image: url(' + commercekit_ajs.loader_icon + '); background-repeat: no-repeat; background-position:50% 50%;');
91							var url = commercekit_ajs.ajax_url + '=' + commercekit_ajs.action+'&query='+input.value;
92							if( currentCancel ){
93								currentCancel.abort();
94							}
95							currentCancel = new AbortController();
96							fetch(url, {signal: currentCancel.signal}).then(response => response.json()).then(json => {
97								input.setAttribute('style', 'background-image: none; background-repeat: no-repeat; background-position:50% 50%;');
98								var html = '';
99								var canViewAll = true;
100								var noResult = 0;
101								if( json.suggestions.length == 0 ) {
102									html = '<div class="autocomplete-no-suggestion">'+commercekit_ajs.no_results_text+'</div>';
103									cSuggestions[input.value] = html;
104									cViewAlls[input.value] = '';
105									canViewAll = false;
106									noResult = 1;
107								} else {
108									json.suggestions.forEach(suggestion => {
109										html += '<div class="autocomplete-suggestion">'+suggestion.data+'</div>';
110									});
111									cSuggestions[input.value] = html;
112									cViewAlls[input.value] = json.view_all_link;
113								}
114								formsugg.innerHTML = cSuggestions[input.value];
115								formsugg.style.display = 'block';
116								if( canViewAll ) {
117									formall.innerHTML = cViewAlls[input.value];
118									formall.style.display = 'block';
119									ckPrepareSuggestionsHeight(input, form, formall, formresult, formsugg);
120								} else {
121									ckPrepareSuggestionsHeight(input, form, null, formresult, formsugg);
122								}
123								var url2 = commercekit_ajs.ajax_url + '=commercekit_search_counts&query='+input.value+'&no_result='+noResult;
124								fetch(url2).then(response => response.json()).then(json => {}).catch(function(e){});
125							}).catch(function(e){});
126						}, deferRequestBy);
127					}
128				}
129			});
130			input.addEventListener('focus', function(e){
131				var input = e.target;
132				if( input.classList.contains('commercekit-ajax-search') && input.value.length >= commercekit_ajs.char_count ){
133					var form = input.closest('form');
134					var formresult = form.querySelector('.commercekit-ajs-results');
135					var formsugg = form.querySelector('.commercekit-ajs-suggestions');
136					var formall = form.querySelector('.commercekit-ajs-view-all-holder');
137					if( formsugg.querySelectorAll('.autocomplete-suggestion').length > 0 ){
138						ckCloseAllSuggestions();
139						if( !formall ) formall = null;
140						if( formsugg ) formsugg.style.display = 'block';
141						if( formall ) formall.style.display = 'block';
142						ckPrepareSuggestionsHeight(input, form, formall, formresult, formsugg)
143					} else {
144						var keyup = new Event('keyup');
145						input.dispatchEvent(keyup);
146					}
147				}
148			});
149		});
150		document.onclick = function(e){
151			if( !e.target.classList.contains('commercekit-ajs-suggestions') && !e.target.classList.contains('commercekit-ajax-search') ){
152				ckCloseAllSuggestions();
153			}
154		}
155	}
156	ckit_ajax_search();
157}
158function ckCloseAllSuggestions(){
159	document.querySelectorAll('.commercekit-ajs-results').forEach(function(results){ 
160		results.style.height = '0px';
161	});
162	document.querySelectorAll('.commercekit-ajs-suggestions').forEach(function(suggestion){
163		suggestion.style.display = 'none';
164	});
165	document.querySelectorAll('.commercekit-ajs-view-all-holder').forEach(function(viewall){
166		viewall.style.display = 'none';
167	});
168}
169function ckPrepareSuggestionsHeight(input, form, formall, formresult, formsugg){
170	var $height = 0;
171	form.querySelectorAll('.autocomplete-suggestion, .autocomplete-no-suggestion').forEach(function(list){
172		$height += list.offsetHeight;
173	});
174	if( formall ){
175		$height += formall.offsetHeight;
176	}
177	formresult.style.height = $height+'px';
178	formresult.style.width = input.offsetWidth+'px';
179	formsugg.style.width = input.offsetWidth+'px';
180	var oresult = form.querySelector('.commercekit-ajs-other-result');
181	if( oresult ){
182		oresult.parentNode.classList.add('commercekit-ajs-other-result-wrap');
183	}
184}
185function ckAjaxSearchKeyboardAccess(code, formsugg, input){
186	input.selectionStart = input.selectionEnd = input.value.length;
187	if( formsugg.style.display == 'block' ){
188		var active = formsugg.querySelector('.active');
189		if( ! active ){
190			if( !formsugg.firstChild.classList.contains('commercekit-ajs-other-result-wrap')){
191				active = formsugg.firstChild;
192			} else {
193				if( formsugg.firstChild.nextSibling )
194					active = formsugg.firstChild.nextSibling;
195			}
196		} else {
197			if( code === 38 ){
198				active.classList.remove('active');
199				if( active.previousSibling ){
200					if( !active.previousSibling.classList.contains('commercekit-ajs-other-result-wrap')){
201						active = active.previousSibling;
202					} else {
203						if( active.previousSibling.previousSibling ){
204							active = active.previousSibling.previousSibling;
205						} else if( formsugg.lastChild ) {
206							active = formsugg.lastChild;
207						}
208					}
209				} else if( formsugg.lastChild ) {
210					active = formsugg.lastChild;
211				}
212			}
213			if( code === 40 ){
214				active.classList.remove('active');
215				if( active.nextSibling ){
216					if( !active.nextSibling.classList.contains('commercekit-ajs-other-result-wrap')){
217						active = active.nextSibling;
218					} else {
219						if( active.nextSibling.nextSibling ){
220							active = active.nextSibling.nextSibling;
221						} else if( formsugg.firstChild ){
222							active = formsugg.firstChild;
223						}
224					}
225				} else if( formsugg.firstChild ){
226					active = formsugg.firstChild;
227				}
228			}
229		}
230		if( ( code === 38 || code === 40 ) && active ){
231			active.classList.add('active');
232		} else if( code === 13 && active ) {
233			return false;
234		}
235		return true;
236	}
237}
238function ckAdjustSuggestionsHeight(img){
239	var $height = 0;
240	var form = img.closest('form');
241	var formresult = form.querySelector('.commercekit-ajs-results');
242	var formall = form.querySelector('.commercekit-ajs-view-all-holder');
243	form.querySelectorAll('.autocomplete-suggestion, .autocomplete-no-suggestion').forEach(function(list){
244		$height += list.offsetHeight;
245	});
246	if( formall.style.display == 'block' ){
247		$height += formall.offsetHeight;
248	}
249	formresult.style.height = $height+'px';
250}

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.