1ACC.pickupinstore = { 2 3 _autoload: [ 4 "bindClickPickupInStoreButton", 5 "bindPickupButton", 6 "bindPickupClose", 7 "bindPickupInStoreSearch" 8 ], 9 10 storeId:"", 11 12 unbindPickupPaginationResults:function () 13 { 14 $(document).off("click","#colorbox .js-pickup-store-pager-prev") 15 $(document).off("click","#colorbox .js-pickup-store-pager-next") 16 }, 17 18 bindPickupPaginationResults:function () 19 { 20 var listHeight= $("#colorbox .js-pickup-store-list").height(); 21 var $listitems= $("#colorbox .js-pickup-store-list > li"); 22 var listItemHeight = $listitems.height(); 23 var displayCount = 5; 24 var totalCount= $listitems.length; 25 var curPos=0 26 var pageEndPos = (((totalCount/displayCount)-1) * (displayCount*listItemHeight)) * -1; 27 28 29 $("#colorbox .js-pickup-store-pager-item-all").text(totalCount); 30 31 $("#colorbox .store-navigation-pager").show(); 32 33 34 35 checkPosition() 36 37 $(document).on("click","#colorbox .js-pickup-store-pager-prev",function(e){ 38 e.preventDefault(); 39 $listitems.css("transform","translateY("+(curPos+listHeight)+"px)") 40 curPos = curPos+listHeight; 41 checkPosition("prev"); 42 }) 43 44 $(document).on("click","#colorbox .js-pickup-store-pager-next",function(e){ 45 e.preventDefault(); 46 $listitems.css("transform","translateY("+(curPos-listHeight)+"px)") 47 curPos = curPos-listHeight; 48 checkPosition("next"); 49 }) 50 51 function checkPosition(){ 52 53 var curPage = Math.ceil((curPos/(displayCount*listItemHeight))*-1)+1; 54 $("#colorbox .js-pickup-store-pager-item-from").text(curPage*displayCount-4); 55 56 var tocount = (curPage*displayCount > totalCount)? totalCount :curPage*displayCount; 57 58 if(curPage*displayCount-4 == 1){ 59 $("#colorbox .js-pickup-store-pager-prev").hide() 60 }else{ 61 $("#colorbox .js-pickup-store-pager-prev").show() 62 } 63 64 if(curPage*displayCount >= totalCount){ 65 $("#colorbox .js-pickup-store-pager-next").hide() 66 }else{ 67 $("#colorbox .js-pickup-store-pager-next").show() 68 } 69 70 71 $("#colorbox .js-pickup-store-pager-item-to").text(tocount); 72 } 73 }, 74 75 76 77 bindPickupInStoreQuantity:function(){ 78 $('.pdpPickupQtyPlus').click(function(e){ 79 e.preventDefault(); 80 81 var inputQty = $('.js-add-pickup-cart #pdpPickupAddtoCartInput'); 82 var currentVal = parseInt(inputQty.val()); 83 var maxVal = inputQty.data('max'); 84 85 if (!isNaN(currentVal) && currentVal < maxVal) { 86 inputQty.val(currentVal + 1); 87 inputQty.change(); 88 } 89 }); 90 91 $('.pdpPickupQtyMinus').click(function(e){ 92 e.preventDefault(); 93 var inputQty = $('.js-add-pickup-cart #pdpPickupAddtoCartInput'); 94 var currentVal = parseInt(inputQty.val()); 95 var minVal = inputQty.data('min'); 96 97 if (!isNaN(currentVal) && currentVal > minVal) { 98 inputQty.val(currentVal - 1); 99 inputQty.change(); 100 } 101 }); 102 103 $("body").on("keyup", ".js-add-pickup-cart #pdpPickupAddtoCartInput", function(event) { 104 var input = $(event.target); 105 input.val(this.value.match(/[0-9]*/)); 106 var value = input.val(); 107 }); 108 }, 109 110 bindPickupInStoreSearch: function () 111 { 112 $(document).on('click', '#pickupstore_location_search_button', function (e) 113 { 114 ACC.pickupinstore.locationSearchSubmit($('#locationForSearch').val(), $('#atCartPage').val(), $('#entryNumber').val(), $(this).parents('form').attr('action')); 115 return false; 116 }); 117 118 $(document).on('keypress', '#locationForSearch', function (e) 119 { 120 if (e.keyCode === 13) 121 { 122 e.preventDefault(); 123 ACC.pickupinstore.locationSearchSubmit($('#locationForSearch').val(), $('#atCartPage').val(), $('input.entryNumber').val(), $(this).parents('form').attr('action')); 124 return false; 125 } 126 }); 127 }, 128 129 bindPickupHereInStoreButtonClick: function () 130 { 131 $(document).on('click','.pickup_add_to_bag_instore_button', function (e){ 132 $(this).prev('.hiddenPickupQty').val($('#pickupQty').val()); 133 }); 134 135 $(document).on('click','.pickup_here_instore_button', function (e){ 136 $(this).prev('.hiddenPickupQty').val($('#pickupQty').val()); 137 ACC.colorbox.close(); 138 }); 139 }, 140 141 locationSearchSubmit: function (location, cartPage, entryNumber, actionUrl, latitude, longitude) 142 { 143 $("#colorbox .js-add-to-cart-for-pickup-popup, #colorbox .js-qty-selector-minus, #colorbox .js-qty-selector-input, #colorbox .js-qty-selector-plus").attr("disabled","disabled"); 144 145 $.post({ 146 url: actionUrl, 147 data: {locationQuery: location, cartPage: cartPage, entryNumber: entryNumber, latitude: latitude, longitude: longitude}, 148 dataType: "text", 149 success: function (response) 150 { 151 ACC.pickupinstore.refreshPickupInStoreColumn(response); 152 } 153 }); 154 }, 155 156 createListItemHtml: function (data,id){ 157 158 159 var $rdioEl = $("<input>").attr("type","radio") 160 .attr("name","storeNamePost") 161 .attr("id","pickup-entry-" + id) 162 .attr("data-id", id) 163 .addClass("js-pickup-store-input") 164 .val(data.displayName); 165 166 var $spanElStInfo = $("<span>") 167 .addClass("pickup-store-info") 168 .append($("<span>").addClass("pickup-store-list-entry-name").text(data.displayName)) 169 .append($("<span>").addClass("pickup-store-list-entry-address").text(data.line1 + " " + data.line2)) 170 .append($("<span>").addClass("pickup-store-list-entry-city").text(data.town)); 171 172 var $spanElStAvail = $("<span>") 173 .addClass("store-availability") 174 .append( 175 $("<span>") 176 .addClass("available") 177 .append(document.createTextNode(data.formattedDistance)) 178 .append("<br>") 179 .append(data.stockPickupHtml) 180 ); 181 182 var $lblEl = $("<label>").addClass("js-select-store-label") 183 .attr("for","pickup-entry-" + id) 184 .append($spanElStInfo) 185 .append($spanElStAvail); 186
187 return $("<li>").addClass("pickup-store-list-entry") 188 .append($rdioEl) 189 .append($lblEl); 190 }, 191 192 refreshPickupInStoreColumn: function (data){ 193 data = $.parseJSON(data); 194 var $storeList = $('#colorbox .js-pickup-store-list'); 195 $storeList.empty(); 196 197 $("#colorbox .js-pickup-component").data("data",data); 198 199 for(i = 0;i < data["data"].length;i++){ 200 $storeList.append(ACC.pickupinstore.createListItemHtml(data["data"][i],i)); 201 } 202 203 ACC.pickupinstore.unbindPickupPaginationResults() 204 ACC.pickupinstore.bindPickupPaginationResults() 205 206 // select the first store 207 var firstInput= $("#colorbox .js-pickup-store-input")[0]; 208 $(firstInput).click(); 209 210 211 $("#colorbox .js-add-to-cart-for-pickup-popup, #colorbox .js-qty-selector-minus, #colorbox .js-qty-selector-input, #colorbox .js-qty-selector-plus").removeAttr("disabled"); 212 213 214 }, 215 216 bindClickPickupInStoreButton :function() 217 { 218 219 220 $(document).on("click",".js-pickup-in-store-button",function(e){ 221 e.preventDefault(); 222 var ele = $(this); 223 var productId = "pickupModal_" + $(this).attr('id'); 224 var cartItemProductPostfix = ''; 225 var productIdNUM = $(this).attr('id'); 226 productIdNUM = productIdNUM.split("_"); 227 productIdNUM = productIdNUM[1]; 228 229 if (productId !== null) 230 { 231 cartItemProductPostfix = '_' + productId; 232 } 233 234 var boxContent = $("#popup_store_pickup_form > #pickupModal").clone(); 235 var titleHeader = $('#pickupTitle > .pickup-header').html(); 236 237 238 ACC.colorbox.open(titleHeader,{ 239 html:boxContent, 240 width:"960px", 241 onComplete: function(){ 242 243 $("#colorbox .js-add-to-cart-for-pickup-popup, #colorbox .js-qty-selector-minus, #colorbox .js-qty-selector-input, #colorbox .js-qty-selector-plus").attr("disabled","disabled"); 244 245 246 boxContent.show(); 247 ACC.pickupinstore.pickupStorePager(); 248 var tabs = $("#colorbox .js-pickup-tabs").accessibleTabs({ 249 tabhead:'.tabhead', 250 tabbody: '.tabbody', 251 fx:'show', 252 fxspeed: 0, 253 currentClass: 'active', 254 autoAnchor:true, 255 cssClassAvailable:true 256 }); 257 258 $("#colorbox #pickupModal *").each(function () 259 { 260 if($(this).attr("data-id")!= undefined) 261 { 262 $(this).attr("id", $(this).attr("data-id")); 263 $(this).removeAttr("data-id"); 264 } 265 }); 266 267 $("#colorbox input#locationForSearch").focus(); 268 269 // set a unique id 270 $("#colorbox #pickupModal").attr("id", productId); 271 272 // insert the product image 273 $("#colorbox #" + productId + " .thumb").html(ele.data("imgHtml")); 274 275 // insert the product cart details 276 $("#colorbox #" + productId + " .js-pickup-product-price").html(ele.data("productcart")); 277 278 var variants=ele.data("productcartVariants"); 279 var variantsBox = $("#colorbox #" + productId + " .js-pickup-product-variants"); 280 $.each(variants,function(key,value){ 281 variantsBox.append($("<span>").text(value)); 282 }); 283 284 // insert the product name 285 $("#colorbox #" + productId + " .js-pickup-product-info").html(ele.data("productnameHtml")) 286 287 // insert the form action 288 $("#colorbox #" + productId + " form.searchPOSForm").attr("action", ele.data("actionurl")); 289 290 // set a unique id for the form 291 $("#colorbox #" + productId + " form.searchPOSForm").attr("id", "pickup_in_store_search_form_product_" + productIdNUM); 292 293 // set the quantity, if the quantity is undefined set the quantity to the data-value defined in the jsp 294 $("#colorbox #" + productId + " #pdpPickupAddtoCartInput").attr("value", ($('#pdpPickupAddtoCartInput').val() !== undefined ? $('#pdpPickupAddtoCartInput').val() : ele.data("value"))); 295 // set the entry Number 296 $("#colorbox #" + productId + " input#entryNumber").attr("value", ele.data("entrynumber")); 297 // set the cartPage bolean 298 $("#colorbox #" + productId + " input#atCartPage").attr("value", ele.data("cartpage")); 299 300 301 if(navigator.geolocation){ 302 navigator.geolocation.getCurrentPosition( 303 function (position){ 304 ACC.pickupinstore.locationSearchSubmit('', $('#atCartPage').val(), ele.data("entrynumber"), ele.data("actionurl"),position.coords.latitude, position.coords.longitude); 305 }, 306 function (error){ 307 console.log("An error occurred... The error code and message are: " + error.code + "/"
307+ error.message); 308 } 309 ); 310 } 311 312 ACC.product.bindToAddToCartStorePickUpForm(); 313 314 315 } 316 317 }); 318 319 }) 320 }, 321 322 pickupStorePager:function() 323 { 324 $(document).on("change","#colorbox .js-pickup-store-input",function(e){ 325 e.preventDefault(); 326 327 328 $("#colorbox .js-pickup-tabs li.first a").click(); 329 330 var storeData=$("#colorbox .js-pickup-component").data("data"); 331 storeData=storeData["data"]; 332 333 var storeId=$(this).data("id"); 334 335 var $ele = $("#colorbox .display-details"); 336 337 338 $.each(storeData[storeId],function(key,value){ 339 if(key=="url"){ 340 $ele.find(".js-store-image").empty(); 341 if(value!=""){ 342 $ele.find(".js-store-image").append($("<img>").attr("src", value).attr("alt", "")); 343 } 344 }else if(key=="productcode"){ 345 $ele.find(".js-store-productcode").val(value); 346 } 347 else if(key=="openings"){ 348 var $oele = $ele.find(".js-store-"+key); 349 $oele.empty(); 350 if(value!=""){ 351 $.each(value,function(key2,value2){ 352 $oele.append($("<dt>").text(key2)); 353 $oele.append($("<dd>").text(value2)); 354 }); 355 } 356 357 } 358 else if(key=="specialOpenings") 359 {} 360 else{ 361 if(value!=""){ 362 $ele.find(".js-store-"+key).text(value); 363 }else{ 364 $ele.find(".js-store-"+key).empty(); 365 } 366 } 367 368 }) 369 370 $(document).one("click", "#colorbox .js-pickup-map-tab",function(){ 371 ACC.pickupinstore.storeId = storeData[storeId]; 372 ACC.global.addGoogleMapsApi("ACC.pickupinstore.drawMap"); 373 }) 374 375 376 377 378 var e=$("#colorbox .pickup-store-list-entry input:checked"); 379 380 381 $("#add_to_cart_storepickup_form .js-store-id").attr("id",e.attr("id")) 382 $("#add_to_cart_storepickup_form .js-store-id").attr("name",e.attr("name")) 383 $("#add_to_cart_storepickup_form .js-store-id").val(e.val()) 384 385 if(storeData[storeId]["stockLevel"] > 0 || storeData[storeId]["stockLevel"] == "") 386 { 387 var input = $("#add_to_cart_storepickup_form .js-qty-selector-input"); 388 input.data("max",storeData[storeId]["stockLevel"]); 389 ACC.productDetail.checkQtySelector(input, "reset"); 390 $("#add_to_cart_storepickup_form").show() 391 392 } else{ 393 $("#add_to_cart_storepickup_form").hide() 394 } 395 396 397 }) 398 399 $(document).on("click",".js-select-store-label",function(e){ 400 $("#colorbox .js-pickup-component").addClass("show-store"); 401 $("#colorbox #cboxTitle .headline-inner").addClass('hidden-xs hidden-sm'); 402 $("#colorbox #cboxTitle .back-to-storelist").removeClass('hidden-xs hidden-sm'); 403 }) 404 405 $(document).on("click",".js-back-to-storelist",function(e){ 406 $("#colorbox .js-pickup-component").removeClass("show-store"); 407 $("#colorbox #cboxTitle .headline-inner").removeClass('hidden-xs hidden-sm'); 408 $("#colorbox #cboxTitle .back-to-storelist").addClass('hidden-xs hidden-sm'); 409 }) 410 411 }, 412 413 414 bindPickupButton : function(){ 415 $(document).on("click",".js-pickup-button",function(e){ 416 e.preventDefault(); 417 $e = $(this).parent().nextAll(".js-inline-layer") 418 $e.addClass("open") 419 420 //$e.height($e.height()) 421 var h= $e.height() 422 $e.removeClass("open") 423 424 $e.animate({ 425 height: h 426 }) 427 }) 428 }, 429 430 431 bindPickupClose : function(){ 432 $(document).on("click",".js-close-inline-layer",function(e){ 433 e.preventDefault(); 434 $e = $(this).parents(".js-inline-layer") 435 436 $e.animate({ 437 height: 0 438 }) 439 }) 440 }, 441 442 checkIfPointOfServiceIsEmpty: function (cartEntryDeliveryModeForm) 443 { 444 return (!cartEntryDeliveryModeForm.find('.pointOfServiceName').text().trim().length); 445 }, 446 447 validatePickupinStoreCartEntires: function () 448 { 449 var validationErrors = false; 450 $("form.cartEntryShippingModeForm").each(function () 451 { 452 var formid = "#" + $(this).attr('id'); 453 if ($(formid + ' input[value=pickUp][checked]').length && ACC.pickupinstore.checkIfPointOfServiceIsEmpty($(this))) 454 { 455 $(this).addClass("shipError"); 456 validationErrors = true; 457 } 458 }); 459 460 if (validationErrors) 461 { 462 $('div#noStoreSelected').show().focus(); 463 $(window).scrollTop(0); 464 } 465 return validationErrors; 466 }, 467 468 469 drawMap: function(){ 470 471 storeInformation = ACC.pickupinstore.storeId; 472 473 if($("#colorbox .js-map-canvas").length > 0) 474 { 475 476 477 $("#colorbox .js-map-canvas").attr("id","pickup-map") 478 var centerPoint = new google.maps.LatLng(storeInformation["storeLatitude"], storeInformation["storeLongitude"]); 479 480 var mapOptions = { 481 zoom: 13, 482 zoomControl: true, 483 panControl: true, 484 streetViewControl: false, 485 mapTypeId: google.maps.MapTypeId.ROADMAP, 486 center: centerPoint, 487 mapId: "DEMO_MAP_ID" 488 } 489 490 var map = new google.maps.Map(document.getElementById("pickup-map"), mapOptions); 491 const img = document.createElement("img"); 492 img.src = "https://maps.google.com/mapfiles/markerA.png"; 493 var marker = new google.maps.marker.AdvancedMarkerElement({ 494 position: new google.maps.LatLng(storeInformation["storeLatitude"], storeInformation["storeLongitude"]), 495 map: map, 496 title: storeInformation["name"], 497 content: img 498 }); 499 var infowindow = new google.maps.InfoWindow({ 500 content: ACC.common.encodeHtml(storeInformation["name"]), 501 disableAutoPan: true 502 }); 503 google.maps.event.addListener(marker, 'click', function (){ 504 infowindow.open(map, marker); 505 }); 506 } 507 508 } 509 510};
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.