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 var listitemsSanitize = DOMPurify.sanitize(listitems); 43 $(".js-store-finder-navigation-list").html(listitemsSanitize); 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 var toSanitize = DOMPurify.sanitize(to); 56 $(".js-store-finder-pager-item-to").html(toSanitize); 57 $(".js-store-finder-pager-item-all").html(ACC.storefinder.storeData.total); 58 $(".js-store-finder").removeClass("show-store"); 59 60 }, 61 62 63 bindPagination:function () 64 { 65 66 67 68 $(document).on("click",".js-store-finder-details-back",function(e){ 69 e.preventDefault(); 70 71 $(".js-store-finder").removeClass("show-store"); 72 73 }) 74 75 76 77 78 $(document).on("click",".js-store-finder-pager-prev",function(e){ 79 e.preventDefault(); 80 var page = ACC.storefinder.storeSearchData.page; 81 ACC.storefinder.getStoreData(page-1) 82 checkStatus(page-1); 83 }) 84 85 $(document).on("click",".js-store-finder-pager-next",function(e){ 86 e.preventDefault(); 87 var page = ACC.storefinder.storeSearchData.page; 88 ACC.storefinder.getStoreData(page+1) 89 checkStatus(page+1); 90 }) 91 92 function checkStatus(page){ 93 if(page==0){ 94 $(".js-store-finder-pager-prev").attr("disabled","disabled") 95 }else{ 96 $(".js-store-finder-pager-prev").removeAttr("disabled") 97 } 98 99 if(page == Math.floor(ACC.storefinder.storeData.total/10)){ 100 $(".js-store-finder-pager-next").attr("disabled","disabled") 101 }else{ 102 $(".js-store-finder-pager-next").removeAttr("disabled") 103 } 104 } 105 106 }, 107 108 109 bindStoreChange:function() 110 { 111 $(document).on("change",".js-store-finder-input",function(e){ 112 e.preventDefault(); 113 114 115 116 storeData=ACC.storefinder.storeData["data"]; 117 118 var storeId=$(this).data("id"); 119 120 var $ele = $(".js-store-finder-details"); 121 122 123 124 $.each(storeData[storeId],function(key,value){ 125 if(key=="image"){ 126 if(value!=""){ 127 $ele.find(".js-store-image").html('<img src="'+value+'" alt="" />'); 128 }else{ 129 $ele.find(".js-store-image").html(''); 130 } 131 }else if(key=="productcode"){ 132 $ele.find(".js-store-productcode").val(value); 133 } 134 else if(key=="openings"){ 135 if(value!=""){ 136 var $oele = $ele.find(".js-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-store-"+key).html(''); 147 } 148 149 } 150 else if(key=="specialOpenings"){} 151 else if(key=="features"){ 152 var features=""; 153 $.each(value,function(key2,value2){ 154 features += "<li>"+value2+"</li>"; 155 }); 156
157 $ele.find(".js-store-"+key).html(features); 158 159 } 160 else{ 161 if(value!=""){ 162 $ele.find(".js-store-"+key).html(value); 163 }else{ 164 $ele.find(".js-store-"+key).html(''); 165 } 166 } 167 168 }) 169 170 171 ACC.storefinder.storeId = storeData[storeId]; 172 ACC.storefinder.initGoogleMap(); 173 174 }) 175 176 $(document).on("click",".js-select-store-label",function(e){ 177 $(".js-store-finder").addClass("show-store") 178 }) 179 180 $(document).on("click",".js-back-to-storelist",function(e){ 181 $(".js-store-finder").removeClass("show-store") 182 }) 183 184 }, 185 186 187 188 initGoogleMap:function(){ 189 190 if($(".js-store-finder-map").length > 0){ 191 ACC.global.addGoogleMapsApi("ACC.storefinder.loadGoogleMap"); 192 } 193 }, 194 195 loadGoogleMap: function(){ 196 197 storeInformation = ACC.storefinder.storeId; 198 199 if($(".js-store-finder-map").length > 0) 200 { 201 $(".js-store-finder-map").attr("id","store-finder-map") 202 var centerPoint = new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]); 203 204 var mapOptions = { 205 zoom: 13, 206 zoomControl: true, 207 panControl: true, 208 streetViewControl: false, 209 mapTypeId: google.maps.MapTypeId.ROADMAP, 210 center: centerPoint 211 } 212 213 var map = new google.maps.Map(document.getElementById("store-finder-map"), mapOptions); 214 215 var marker = new google.maps.Marker({ 216 position: new google.maps.LatLng(storeInformation["latitude"], storeInformation["longitude"]), 217 map: map, 218 title: storeInformation["name"], 219 icon: "https://maps.google.com/mapfiles/marker" + 'A' + ".png" 220 }); 221 var infowindow = new google.maps.InfoWindow({ 222 content: storeInformation["name"], 223 disableAutoPan: true 224 }); 225 google.maps.event.addListener(marker, 'click', function (){ 226 infowindow.open(map, marker); 227 }); 228 } 229 230 }, 231 232 233 bindSearch:function(){ 234 235 $(document).on("submit",'#storeFinderForm', function(e){ 236 e.preventDefault() 237 var q = $(".js-store-finder-search-input").val(); 238 239 if(q.length>0){ 240 ACC.storefinder.getInitStoreData(q); 241 }else{ 242 if($(".js-storefinder-alert").length<1){ 243 var emptySearchMessage = $(".btn-primary").data("searchEmpty") 244 $(".js-store-finder").hide(); 245 $("#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>'); 246 } 247 } 248 }) 249 250 251 $(".js-store-finder").hide(); 252 $(document).on("click",'#findStoresNearMe', function(e){ 253 e.preventDefault() 254 ACC.storefinder.getInitStoreData(null,ACC.storefinder.coords.latitude,ACC.storefinder.coords.longitude); 255 }) 256 257 258 }, 259 260 261 getStoreData: function(page){ 262 ACC.storefinder.storeSearchData.page = page; 263 url= $(".js-store-finder").data("url"); 264 $.ajax({ 265 url: url, 266 data: ACC.storefinder.storeSearchData, 267 type: "get", 268 success: function (response){ 269 ACC.storefinder.storeData = $.parseJSON(response); 270 ACC.storefinder.refreshNavigation(); 271 if(ACC.storefinder.storeData.total < 10){ 272 $(".js-store-finder-pager-next").attr("disabled","disabled"); 273 } 274 } 275 }); 276 }, 277 278 getInitStoreData: function(q,latitude,longitude){ 279 $(".alert").remove(); 280 data ={ 281 "q":"" , 282 "page":0 283 } 284 if(q != null){ 285 data.q = q; 286 } 287 288 if(latitude != null){ 289 data.latitude = latitude; 290 } 291 292 if(longitude != null){ 293 data.longitude = longitude; 294 } 295 296 ACC.storefinder.storeSearchData = data; 297 ACC.storefinder.getStoreData(data.page); 298 $(".js-store-finder").show(); 299 $(".js-store-finder-pager-prev").attr("disabled","disabled") 300 $(".js-store-finder-pager-next").removeAttr("disabled") 301 }, 302 303 init:function(){ 304 $("#findStoresNearMe").attr("disabled","disabled"); 305 if(navigator.geolocation){ 306 navigator.geolocation.getCurrentPosition( 307 function (position){ 308 ACC.storefinder.coords = position.coords; 309 $('#findStoresNearMe').removeAttr("disabled"); 310 }, 311 function (error) 312 { 313 console.log("An error occurred... The error code and message are: " + error.code + "/" + error.message); 314 } 315 ); 316 } 317 } 318};
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.