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.