PageSourceSearch

https://www.kaosalonpartner.co.uk/_ui/responsive/common/js/acc.storefinder.js

js kaosalonpartner.co.uk collected 2026-10-08 23:30:00 UTC 8,029 bytes, 317 lines download raw bytes

1ACC.storefinder = {
2
3	_autoload: [
4		["init", $(".js-store-finder").length != 0],
5		["bindStoreChange", $(".js-store-finder").length != 0],
6		["bindSearch", $(".js-store-finder").length != 0],
7		"bindPagination"
8	],
9	
10	storeData:"",
11	storeId:"",
12	coords:{},
13	storeSearchData:{},
14
15	createListItemHtml: function (data,id){
16
17		var item="";
18		item+='<li class="list__entry">';
19		item+='<input type="radio" name="storeNamePost" value="'+data.displayName+'" id="store-filder-entry-'+id+'" class="js-store-finder-input" data-id="'+id+'">';
20		item+='<label for="store-filder-entry-'+id+'" class="js-select-store-label">';
21		item+='<span class="entry__info">';
22		item+='<span class="entry__name">'+data.displayName+'</span>';
23		item+='<span class="entry__address">'+data.line1+' '+data.line2+'</span>';
24		item+='<span class="entry__city">'+data.town+'</span>';
25		item+='</span>';
26		item+='<span class="entry__distance">';
27		item+='<span>'+data.formattedDistance+'</span>';
28		item+='</span>';
29		item+='</label>';
30		item+='</li>';
31		return item;
32	},
33
34	refreshNavigation: function (){
35		var listitems = "";
36		data = ACC.storefinder.storeData
37		
38		if(data){
39			for(i = 0;i < data["data"].length;i++){
40				listitems += ACC.storefinder.createListItemHtml(data["data"][i],i)
41			}
42	
43			$(".js-store-finder-navigation-list").html(listitems);
44	
45			// select the first store
46			var firstInput= $(".js-store-finder-input")[0];
47			$(firstInput).click();
48		}
49
50
51		var page = ACC.storefinder.storeSearchData.page;
52		$(".js-store-finder-pager-item-from").html(page*10+1);
53
54		var to = ((page*10+10)>ACC.storefinder.storeData.total)? ACC.storefinder.storeData.total : page*10+10 ;
55		$(".js-store-finder-pager-item-to").html(to);
56		$(".js-store-finder-pager-item-all").html(ACC.storefinder.storeData.total);
57		$(".js-store-finder").removeClass("show-store");
58
59	},
60
61
62	bindPagination:function ()
63	{
64
65
66		
67		$(document).on("click",".js-store-finder-details-back",function(e){
68			e.preventDefault();
69			
70			$(".js-store-finder").removeClass("show-store");
71			
72		})
73		
74
75
76
77		$(document).on("click",".js-store-finder-pager-prev",function(e){
78			e.preventDefault();
79			var page = ACC.storefinder.storeSearchData.page;
80			ACC.storefinder.getStoreData(page-1)
81			checkStatus(page-1);
82		})
83
84		$(document).on("click",".js-store-finder-pager-next",function(e){
85			e.preventDefault();
86			var page = ACC.storefinder.storeSearchData.page;
87			ACC.storefinder.getStoreData(page+1)
88			checkStatus(page+1);
89		})
90
91		function checkStatus(page){
92			if(page==0){
93				$(".js-store-finder-pager-prev").attr("disabled","disabled")
94			}else{
95				$(".js-store-finder-pager-prev").removeAttr("disabled")
96			}
97			
98			if(page == Math.floor(ACC.storefinder.storeData.total/10)){
99				$(".js-store-finder-pager-next").attr("disabled","disabled")
100			}else{
101				$(".js-store-finder-pager-next").removeAttr("disabled")
102			}
103		}
104
105	},
106
107
108	bindStoreChange:function()
109	{
110		$(document).on("change",".js-store-finder-input",function(e){
111			e.preventDefault();
112
113
114
115			storeData=ACC.storefinder.storeData["data"];
116
117			var storeId=$(this).data("id");
118
119			var $ele = $(".js-store-finder-details");
120			
121
122
123			$.each(storeData[storeId],function(key,value){
124				if(key=="image"){
125					if(value!=""){
126						$ele.find(".js-store-image").html('<img src="'+value+'" alt="" />');
127					}else{
128						$ele.find(".js-store-image").html('');
129					}
130				}else if(key=="productcode"){
131					$ele.find(".js-store-productcode").val(value);
132				}
133				else if(key=="openings"){
134					if(value!=""){
135						var $oele = $ele.find(".js-store-"+key);
136						var openings = "";
137						$.each(value,function(key2,value2){
138							openings += "<dt>"+key2+"</dt>";
139							openings += "<dd>"+value2+"</dd>";
140						});
141
142						$oele.html(openings);
143
144					}else{
145						$ele.find(".js-store-"+key).html('');
146					}
147
148				}
149				else if(key=="specialOpenings"){}
150				else if(key=="features"){
151					var features="";
152					$.each(value,function(key2,value2){
153						features += "<li>"+value2+"</li>";
154					});
155
156					$ele.find(".js-store-"+key).html(features);
157
158				}
159				else{
160					if(value!=""){
161						$ele.find(".js-store-"+key).html(value);
162					}else{
163						$ele.find(".js-store-"+key).html('');
164					}
165				}
166
167			})
168
169
170			ACC.storefinder.storeId = storeData[storeId];
171			ACC.storefinder.initGoogleMap();
172
173		})
174
175		$(document).on("click",".js-select-store-label",function(e){
176			$(".js-store-finder").addClass("show-store")
177		})
178
179		$(document).on("click",".js-back-to-storelist",function(e){
180			$(".js-store-finder").removeClass("show-store")
181		})
182
183	},
184
185
186
187	initGoogleMap:function(){
188
189		if($(".js-store-finder-map").length > 0){
190			ACC.global.addGoogleMapsApi("ACC.storefinder.loadGoogleMap");
191		}
192	},
193 
194	loadGoogleMap: function(){
195
196		storeInformation = ACC.storefinder.storeId;
197
198		if($(".js-store-finder-map").length > 0)
199		{			
200			$(".js-store-finder-map").attr("id","store-finder-map")
201			var centerPoint = new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]);
202			
203			var mapOptions = {
204				zoom: 13,
205				zoomControl: true,
206				panControl: true,
207				streetViewControl: false,
208				mapTypeId: google.maps.MapTypeId.ROADMAP,
209				center: centerPoint
210			}
211			
212			var map = new google.maps.Map(document.getElementById("store-finder-map"), mapOptions);
213			
214			var marker = new google.maps.Marker({
215				position: new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]),
216				map: map,
217				title: storeInformation["name"],
218				icon: "https://maps.google.com/mapfiles/marker" + 'A' + ".png"
219			});
220			var infowindow = new google.maps.InfoWindow({
221				content: storeInformation["name"],
222				disableAutoPan: true
223			});
224			google.maps.event.addListener(marker, 'click', function (){
225				infowindow.open(map, marker);
226			});
227		}
228		
229	},
230
231
232	bindSearch:function(){
233
234		$(document).on("submit",'#storeFinderForm', function(e){
235			e.preventDefault()
236			var q = $(".js-store-finder-search-input").val();
237
238			if(q.length>0){
239				ACC.storefinder.getInitStoreData(q);
240			}else{
241				if($(".js-storefinder-alert").length<1){
242					var emptySearchMessage = $(".btn-primary").data("searchEmpty")
243					$(".js-store-finder").hide();
244					$("#storeFinder").before('<div class="js-storefinder-alert alert alert-danger alert-dismissable" ><button class="close" type="button" data-dismiss="alert" aria-hidden="true">×</button>' + emptySearchMessage + '</div>');
245				}
246			}
247		})
248
249
250		$(".js-store-finder").hide();
251		$(document).on("click",'#findStoresNearMe', function(e){
252			e.preventDefault()
253			ACC.storefinder.getInitStoreData(null,ACC.storefinder.coords.latitude,ACC.storefinder.coords.longitude);
254		})
255
256
257	},
258
259
260	getStoreData: function(page){
261		ACC.storefinder.storeSearchData.page = page;
262		url= $(".js-store-finder").data("url");
263		$.ajax({
264			url: url,
265			data: ACC.storefinder.storeSearchData,
266			type: "get",
267			success: function (response){
268				ACC.storefinder.storeData = $.parseJSON(response);
269				ACC.storefinder.refreshNavigation();
270				if(ACC.storefinder.storeData.total < 10){
271					$(".js-store-finder-pager-next").attr("disabled","disabled");
272				}
273			}
274		});
275	},
276
277	getInitStoreData: function(q,latitude,longitude){
278		$(".alert").remove();
279		data ={
280			"q":"" ,
281			"page":0
282		}
283		if(q != null){
284			data.q = q;
285		}
286
287		if(latitude != null){
288			data.latitude = latitude;
289		}
290
291		if(longitude != null){
292			data.longitude = longitude;
293		}
294
295		ACC.storefinder.storeSearchData = data;
296		ACC.storefinder.getStoreData(data.page);
297		$(".js-store-finder").show();
298		$(".js-store-finder-pager-prev").attr("disabled","disabled")
299		$(".js-store-finder-pager-next").removeAttr("disabled")
300	},
301
302	init:function(){
303		$("#findStoresNearMe").attr("disabled","disabled");
304		if(navigator.geolocation){
305			navigator.geolocation.getCurrentPosition(
306				function (position){
307					ACC.storefinder.coords = position.coords;
308					$('#findStoresNearMe').removeAttr("disabled");
309				},
310				function (error)
311				{
312					console.log("An error occurred... The error code and message are: " + error.code + "/" + error.message);
313				}
314			);
315		}
316	}
317};

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.