PageSourceSearch

https://www.borderstates.com/_ui/addons/bseasmaddon/responsive/common/js/asm.storefinder.js

js borderstates.com collected 2026-10-03 21:44:28 UTC 9,570 bytes, 347 lines download raw bytes

1/*
2 * [y] hybris Platform
3 *
4 * Copyright (c) 2018 SAP SE or an SAP affiliate company.
5 * All rights reserved.
6 *
7 * This software is the confidential and proprietary information of SAP
8 * ("Confidential Information"). You shall not disclose such Confidential
9 * Information and shall use it only in accordance with the terms of the
10 * license agreement you entered into with SAP.
11 */
12
13ASM.storefinder = {
14	storeData:"",
15	storeId:"",
16	originalStore:"",
17	coords:{},
18	storeSearchData:{},
19	originAddress:"",
20
21	autoLoad: function (data) {
22		originAddress=data;
23		ASM.storefinder.init();
24		ASM.storefinder.bindStoreChange();
25		ASM.storefinder.bindPagination();
26	},
27	
28	
29	
30	createListItemHtml: function (data,id){
31
32		var item="";
33		item+='<li class="asm__list__entry">';
34		item+='<input type="radio" name="storeNamePost" value="'+data.displayName+'" id="asm-store-filder-entry-'+id+'" class="js-asm-store-finder-input" data-id="'+id+'">';
35		item+='<label for="asm-store-filder-entry-'+id+'" class="js-select-store-label">';
36		item+='<span class="entry__info">';
37		item+='<span class="entry__name">'+data.displayName+'</span>';
38		item+='<span class="entry__address">'+data.line1+' '+data.line2+'</span>';
39		item+='<span class="entry__city">'+data.town+'</span>';
40		item+='</span>';
41		item+='<span class="entry__distance">';
42		item+='<span>'+data.formattedDistance+'</span>';
43		item+='</span>';
44		item+='</label>';
45		item+='</li>';
46		return item;
47	},
48
49	refreshNavigation: function (){
50		var listitems = "";
51		data = ASM.storefinder.storeData;
52		
53		if(data){
54			for(i = 0;i < data["data"].length;i++){
55				listitems += ASM.storefinder.createListItemHtml(data["data"][i],i);
56			}
57	
58			$(".js-asm-store-finder-navigation-list").html(listitems);
59	
60			// select the first store
61			var firstInput= $(".js-asm-store-finder-input")[0];
62			$(firstInput).click();
63		}
64
65
66		var page = ASM.storefinder.storeSearchData.page;
67		$(".js-asm-store-finder-pager-item-from").html(page*10+1);
68
69		var to = ((page*10+10)>ASM.storefinder.storeData.total)? ASM.storefinder.storeData.total : page*10+10 ;
70		$(".js-asm-store-finder-pager-item-to").html(to);
71		$(".js-asm-store-finder-pager-item-all").html(ASM.storefinder.storeData.total);
72		$(".js-asm-store-finder").removeClass("show-store");
73
74	},
75
76
77	bindPagination:function ()
78	{
79		$(document).on("click",".js-asm-store-finder-pager-prev",function(e){
80			e.preventDefault();
81			var page = ASM.storefinder.storeSearchData.page;
82			ASM.storefinder.getStoreData(page-1);
83			checkStatus(page-1);
84		});
85
86		$(document).on("click",".js-asm-store-finder-pager-next",function(e){
87			e.preventDefault();
88			var page = ASM.storefinder.storeSearchData.page;
89			ASM.storefinder.getStoreData(page+1);
90			checkStatus(page+1);
91		});
92
93		function checkStatus(page){
94			if(page===0){
95				$(".js-asm-store-finder-pager-prev").attr("disabled","disabled");
96			}else{
97				$(".js-asm-store-finder-pager-prev").removeAttr("disabled");
98			}
99			
100			if(page === Math.floor(ASM.storefinder.storeData.total/10)){
101				$(".js-asm-store-finder-pager-next").attr("disabled","disabled");
102			}else{
103				$(".js-asm-store-finder-pager-next").removeAttr("disabled");
104			}
105		}
106
107	},
108
109	bindStoreChange:function()
110	{
111		$(document).on("change",".js-asm-store-finder-input",function(e){
112			e.preventDefault();
113
114
115
116			storeData=ASM.storefinder.storeData["data"];
117
118			var storeId=$(this).data("id");
119
120			var $ele = $(".js-asm-store-finder-details");
121			
122
123
124			$.each(storeData[storeId],function(key,value){
125				if(key==="image"){
126					if(value!==""){
127						$ele.find(".js-asm-store-image").html('<img src="'+value+'" alt="" />');
128					}else{
129						$ele.find(".js-asm-store-image").html('');
130					}
131				}else if(key==="productcode"){
132					$ele.find(".js-asm-store-productcode").val(value);
133				}
134				else if(key==="openings"){
135					if(value!==""){
136						var $oele = $ele.find(".js-asm-store-"+key);
137						var openings = "";
138						$.each(value,function(key2,value2){
139							openings += "<dt>"+key2+"</dt>";
140							openings += "<dd>"+value2+"</dd>";
141						});
142
143						$oele.html(openings);
144
145					}else{
146						$ele.find(".js-asm-store-"+key).html('');
147					}
148
149				}
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-asm-store-"+key).html(features);
157
158				}
159				else{
160					if(value!==""){
161						$ele.find(".js-asm-store-"+key).html(value);
162					}else{
163						$ele.find(".js-asm-store-"+key).html('');
164					}
165				}
166
167			});
168
169			ASM.storefinder.storeId = storeData[storeId];
170			ASM.storefinder.initGoogleMap();
171
172		});
173	},
174
175
176
177	initGoogleMap:function(){
178
179		if($(".js-asm-store-finder-map").length > 0){
180			ACC.global.addGoogleMapsApi("ASM.storefinder.loadGoogleMap");
181		}
182	},
183 
184	loadGoogleMap: function(){
185
186		storeInformation = ASM.storefinder.storeId;
187
188		if($(".js-asm-store-finder-map").length > 0)
189		{			
190			$(".js-asm-store-finder-map").attr("id","asm-store-finder-map");
191			var centerPoint = new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]);
192			
193			var mapOptions = {
194				zoom: 16,
195				zoomControl: true,
196				panControl: true,
197				streetViewControl: false,
198				mapTypeId: google.maps.MapTypeId.ROADMAP,
199				center: centerPoint
200			};
201			
202			var map = new google.maps.Map(document.getElementById("asm-store-finder-map"), mapOptions);
203			
204			// Prevent the store info has been stored, when the first page is loaded, which is needed only for the driving instructions. 
205			if(ASM.storefinder.originalStore === "" ) {
206				ASM.storefinder.originalStore = data["data"][0];
207			}
208
209			//Driving Options
210			if(ACC.config.googleApiKey !== "" && ASM.storefinder.originalStore["latitude"] !== storeInformation["latitude"]) {
211				var directionsDisplay = new google.maps.DirectionsRenderer();
212				var directionsService = new google.maps.DirectionsService();
213				var originPoint = new google.maps.LatLng(ASM.storefinder.originalStore["latitude"], ASM.storefinder.originalStore["longitude"]);
214				directionsDisplay.setMap(map);
215				var request = {
216					origin: originPoint,
217					destination: centerPoint,
218					travelMode: 'DRIVING'
219				};
220				
221				directionsService.route(request, function(response, status) {
222				    if (status === 'OK') {
223				      directionsDisplay.setDirections(response);
224				    }
225				  });				
226			}
227			// Driving Options
228			
229			var marker = new google.maps.Marker({
230				position: new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]),
231				map: map,
232				title: storeInformation["name"],
233				icon: "https://maps.google.com/mapfiles/marker" + 'A' + ".png"
234			});
235			
236			var infowindow = new google.maps.InfoWindow({
237				content: storeInformation["name"],
238				disableAutoPan: true
239			});
240			
241			google.maps.event.addListener(marker, 'click', function (){
242				infowindow.open(map, marker);
243			});
244			
245			var markerPosition=storeInformation["latitude"]+","+ storeInformation["longitude"];
246			map.addListener('click', function(e) {
247				if(ACC.config.googleApiKey !== "")
248			{
249			window.open("https://www.google.de/maps/dir/"+originAddress+"/"+markerPosition,'_blank');
250		}
251		
252		else
253		{
254			window.open("https://www.google.de/maps/dir/"+markerPosition,'_blank');
255		}
256			  });
257		}
258		
259	},
260
261
262	bindSearch:function(){
263
264		$(document).on("submit",'#storeFinderForm', function(e){
265			e.preventDefault();
266			var q = $(".js-asm-store-finder-search-input").val();
267
268			if(q.length>0){
269				ASM.storefinder.getInitStoreData(q);
270			}else{
271				if($(".js-asm-storefinder-alert").length<1){
272					var emptySearchMessage = $(".btn-primary").data("searchEmpty");
273					$(".js-asm-store-finder").hide();
274					$("#storeFinder").before('<div class="js-asm-storefinder-alert alert alert-danger alert-dismissable getAccAlert" ><button class="close closeAccAlert" type="button" data-dismiss="alert" aria-hidden="true">×</button>' + emptySearchMessage + '</div>');
275				}
276			}
277		});
278
279
280		$(".js-asm-store-finder").hide();
281		$(document).on("click",'#findStoresNearMe', function(e){
282			e.preventDefault();
283			ASM.storefinder.getInitStoreData(null,ASM.storefinder.coords.latitude, ASM.storefinder.coords.longitude);
284		});
285
286
287	},
288
289
290	getStoreData: function(page){
291		ASM.storefinder.storeSearchData.page = page;
292		url= $(".js-asm-store-finder").data("url");
293		$.ajax({
294			url: url,
295			data: ASM.storefinder.storeSearchData,
296			type: "get",
297			success: function (response){
298				ASM.storefinder.storeData = $.parseJSON(response);
299				ASM.storefinder.refreshNavigation();
300				if(ASM.storefinder.storeData.total < 10){
301					$(".js-asm-store-finder-pager-next").attr("disabled","disabled");
302				}
303			}
304		});
305	},
306
307	getInitStoreData: function(q,latitude,longitude){
308		$(".alert").remove();
309		data ={
310			"q":"" ,
311			"page":0
312		};
313		if(q != null){
314			data.q = q;
315		}
316
317		if(latitude != null){
318			data.latitude = latitude;
319		}
320
321		if(longitude != null){
322			data.longitude = longitude;
323		}
324
325		ASM.storefinder.storeSearchData = data;
326		ASM.storefinder.getStoreData(data.page);
327		$(".js-asm-store-finder").show();
328		$(".js-asm-store-finder-pager-prev").attr("disabled","disabled");
329		$(".js-asm-store-finder-pager-next").removeAttr("disabled");
330	},
331
332	init:function(){
333		$("#findStoresNearMe").attr("disabled","disabled");
334		if(navigator.geolocation){
335			navigator.geolocation.getCurrentPosition(
336				function (position){
337					ASM.storefinder.coords = position.coords;
338					$('#findStoresNearMe').removeAttr("disabled");
339				},
340				function (error)
341				{
342					console.log("An error occurred... The error code and message are: " + error.code + "/" 
342+ error.message);
343				}
344			);
345		}
346	}
347};

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.