1'use strict'; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6 7var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; 8 9function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 10 11/* Variables defined in config.php, copied here for text editor assistance and scoping */ 12var pageLevel$1 = $config.pageLevel; 13var domainName$1 = $config.domainName; 14var fullDomainName = $config.fullDomainName; 15$config.assetsUrl; 16$config.mapsUrl; 17$config.defaultRadius; 18$config.isMobile; 19$config.protocol; 20$config.urlCountryCode; 21$config.language; 22$config.dictionary; 23var pageHasMap = $config.pageHasMap; 24var specialties = $config.specialties; 25var tileMode = $config.tileMode; 26var searchPageUrl = $config.searchPageUrl; 27$config.defaultListHtml; 28var defaultListData = $config.defaultListData; 29var redirectOnSearch = $config.redirectOnSearch; 30var regionData = JSON.parse($config.regionData); 31var enableLeafletPopups = $config.enableLeafletPopups; 32var autoSearch = $config.autoSearch; 33var userLocationPin = $config.userLocationPin; 34var browseMode = $config.browseMode; 35 36var HERE_APP_ID = '9rBITyPARX9UO8lBrmdI'; // change this 37var HERE_APP_CODE = 'wfb3CAIGhfgCRyVhap7dUg'; // change this 38 39/* Other variables */ 40var useHardwareLocation = true; 41var enableHighAccuracy = true; 42var maximumAge = 0; 43var timeout = 6000; 44var loadMap = window.innerWidth > 767 && pageLevel$1 != 'region' && !browseMode && pageLevel$1 != 'region'; 45var searchUrl = '//maps.' + domainName$1 + '/api/getAsyncLocations'; 46var locale = "en-us"; 47var zoomControlPosition = 'bottomright'; 48var mapStyles = [{ 49 "featureType": "administrative.country", 50 "elementType": "geometry", 51 "stylers": [{ 52 "visibility": "simplified" 53 }, { 54 "hue": "#ff0000" 55 }] 56}, { 57 "featureType": "poi", 58 "elementType": "labels.text", 59 "stylers": [{ 60 "visibility": "off" 61 }] 62}, { 63 "featureType": "poi", 64 "elementType": "labels.icon", 65 "stylers": [{ 66 "visibility": "off" 67 }] 68}, { 69 "featureType": "transit.station", 70 "elementType": "labels.icon", 71 "stylers": [{ 72 "visibility": "off" 73 }] 74}, { 75 "featureType": "water", 76 "elementType": "geometry.fill", 77 "stylers": [{ 78 "visibility": "on" 79 }, { 80 "color": "#d8eeff" 81 }] 82}]; 83var TileMode = { 84 GOOGLE: "GOOGLE", 85 BING: 'BING', 86 MAPBOX: 'MAPBOX', 87 BAIDU: 'BAIDU', 88 HERE: 'HERE', 89 DEFAULT: 'DEFAULT' 90}; 91var MarkerShape = { 92 "ROUND": "ROUND", 93 "DROP": "DROP" 94}; 95var MarkerShapeData = { 96 ROUND: { 97 size: [32, 39], 98 anchor: [16, 39], 99 popupAnchor: [1, -18] 100 }, 101 DROP: { 102 size: [32, 39], 103 anchor: [16, 39], 104 popupAnchor: [1, -18] 105 } 106}; 107 108var markerShape = pageLevel$1 == 'domain' || pageLevel$1 == 'city' || pageLevel$1 == 'indy' ? MarkerShape.DROP : MarkerShape.ROUND; 109 110if (autoSearch) { 111 switch (pageLevel$1) { 112 case 'indy': 113 autoSearch = false; 114 break; 115 case 'city': 116 autoSearch = false; 117 break; 118 case 'region': 119 autoSearch = false; 120 break; 121 } 122} 123 124var Status = { 125 LOADING: 'geolocation-loading', 126 NO_RESULTS: 'no-results', 127 MAP_MODE: 'map-mode', 128 SEARCH_INVALID: 'search-invalid', 129 FILTER_ITEM_HIDDEN: 'filter-item-hidden', 130 PAN_SEARCH_ACTIVE: 'pan-search-active', 131 MAP_CROSSHAIR_POINTER_ACTIVE: 'map-crosshair-pointer-active', 132 MAP_ZOOMED_OUT_SEARCH_ACTIVE: 'map-zoomed-out-search-active' 133}; 134var Events = { 135 'SEARCH_SUBMIT': 'SEARCH_SUBMIT', 136 'SEARCH_PAN_ZOOM_SUBMIT': 'SEARCH_PAN_ZOOM_SUBMIT', 137 'SEARCH_INVALID': 'SEARCH_INVALID', 138 'SEARCH_SUCCESS': 'SEARCH_SUCCESS', 139 'SEARCH_NEARBY': 'SEARCH_NEARBY', 140 'SEARCH_FAIL': 'SEARCH_FAIL', 141 'SEARCH_NO_RESULTS': 'SEARCH_NO_RESULTS', 142 'ASYNC_RESULTS': 'ASYNC_RESULTS', 143 'MAP_PINS_READY': 'MAP_PINS_READY', 144 'CREATE_MAP': 'CREATE_MAP', 145 'OPEN_POPUP': 'OPEN_POPUP', 146 'MAP_CENTERED': 'MAP_CENTERED', 147 'MAP_CREATED': 'MAP_CREATED', 148 'MAP_LIST_READY': 'MAP_LIST_READY', 149 'MAP_FILTERS_READY': 'MAP_FILTERS_READY', 150 'MAP_LIST_HOURS_READY': 'MAP_LIST_HOURS_READY', 151 'LIVE_DATA_READY': 'LIVE_DATA_READY', 152 'MAP_TASKS_COMPLETE': 'MAP_TASKS_COMPLETE', 153 'RESET_DEFAULT_DATA': 'RESET_DEFAULT_DATA', 154 'PAN_SEARCH_SUBMIT': 'PAN_SEARCH_SUBMIT', 155 'MOBILE_MAP_INITIALIZE': 'MOBILE_MAP_INITIALIZE', 156 'APPLY_FILTERS': 'APPLY_FILTERS', 157 'NUMBER_MAP_PINS': 'NUMBER_MAP_PINS', 158 'REMOVE_MAP': 'REMOVE_MAP' 159}; 160 161var historyStates = []; 162 163var State = function State(term, nearby) { 164 _classCallCheck(this, State); 165 166 this.term = term; 167 this.data = {}; 168 this.nearby = nearby; 169 this.id = generateUUID(); 170}; 171 172function push(term) { 173 var nearby = true; 174 if (typeof term['searchTerm'] != 'undefined') { 175 nearby = false;
176 } 177 178 var state = new State(term, nearby); 179 180 $(document).one(Events.SEARCH_SUCCESS, function (event, data) { 181 state.data = data; 182 historyStates.push(state); 183 var term = state.nearby ? '?lat=' + state.term['lat'] + '&lng=' + state.term['lng'] : '?q=' + state.term['searchTerm']; 184 window.history.pushState({ id: state.id }, state.term, '' + term); 185 }); 186} 187 188function init() { 189 window.onpopstate = function (event) { 190 console.log(event); 191 if (event.state && event.state.id) { 192 var state = getStateById(event.state.id); 193 $(document).trigger(Events.ASYNC_RESULTS, state.data); 194 } 195 }; 196} 197 198function getStateById(id) { 199 var targetState = void 0; 200 historyStates.forEach(function (state) { 201 if (state.id == id) { 202 targetState = state; 203 } 204 }); 205 return targetState; 206} 207 208function generateUUID() { 209 // Public Domain/MIT 210 var d = new Date().getTime(); 211 if (typeof performance !== 'undefined' && typeof performance.now === 'function') { 212 d += performance.now(); //use high-precision timer if available 213 } 214 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 215 var r = (d + Math.random() * 16) % 16 | 0; 216 d = Math.floor(d / 16); 217 return (c === 'x' ? r : r & 0x3 | 0x8).toString(16); 218 }); 219} 220 221var _regex = /{{[\w\s:\|\.]+}}/g; 222var _bracketsRegex = /({{)|(}})/g; 223 224/** @description Renders template html with data and returns the result 225 * @param {string} html The html template. 226 * @param {JSON} data The data in JSON format. 227 * @return {string} The processed html. 228 */ 229var render = function render(html, data) { 230 var name; 231 var matches = html.match(_regex); 232 var length = matches.length; 233 var i; 234 var match = void 0; 235 236 for (i = 0; i < length; i++) { 237 match = matches[i]; 238 name = match.replace(_bracketsRegex, ''); 239 if (data[name]) { 240 html = html.replace(match, data[name]); 241 } else { 242 html = html.replace(match, ''); 243 } 244 } 245 return html; 246}; 247 248var GEO_COOKIE_NAME = 'rls_geo_data'; 249 250function setCookie(cname, cvalue, exdays) { 251 var d = new Date(); 252 var days = exdays || 365; 253 d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); 254 var expires = "expires=" + d.toUTCString(); 255 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 256} 257 258function getCookie(cname) { 259 var name = cname + "="; 260 var decodedCookie = decodeURIComponent(document.cookie); 261 var ca = decodedCookie.split(';'); 262 for (var i = 0; i < ca.length; i++) { 263 var c = ca[i]; 264 while (c.charAt(0) == ' ') { 265 c = c.substring(1); 266 } 267 if (c.indexOf(name) == 0) { 268 return c.substring(name.length, c.length); 269 } 270 } 271 return ""; 272} 273 274var regionZoomSearch = false; 275 276function getZoomRegionSearch() { 277 return regionZoomSearch; 278} 279function setZoomRegionSearch(value) { 280 regionZoomSearch = value; 281} 282 283function initPanZoom(MapData) { 284 var zooming = false; 285 var moving = false; 286 var interacting = false; 287 var panInterval = null; 288 var initialPan = true; 289 290 var Threshold = { 291 big: .75, // 3/4 of 1 292 small: .2575, // 3/4 of .25 293 zoom: 7 294 }; 295 var ClassNames = { 296 PAN_SEARCH_ACTIVE: 'pan-search-active' 297 }; 298 var Activity = { 299 panSearchActive: false 300 }; 301 var Position = { 302 start: { 303 lat: MapData.map.getCenter().lat, 304 lng: MapData.map.getCenter().lng 305 }, 306 stop: { 307 lat: MapData.map.getCenter().lat, 308 lng: MapData.map.getCenter().lng 309 } 310 }; 311 var Zoom = { 312 previous: MapData.map.getZoom(), 313 current: MapData.map.getZoom(), 314 difference: function difference() { 315 return Zoom.current - Zoom.previous; 316 } 317 }; 318 319 // interaction 320 MapData.map.on('mousedown', function (event) { 321 interacting = true; 322 }); 323 MapData.map.on('mouseup', function (event) { 324 if (!moving && !zooming) { 325 interacting = false;
326 } 327 }); 328 var elements = document.querySelectorAll('a.leaflet-control-zoom-in, a.leaflet-control-zoom-out'); 329 for (var i = 0; i < elements.length; i++) { 330 L.DomEvent.addListener(elements[i], 'click', function (event) { 331 interacting = true; 332 }); 333 } 334 var setPanSearchActive = function setPanSearchActive(active) { 335 Activity.panSearchActive = active; 336 if (active) { 337 $('body').addClass(ClassNames.PAN_SEARCH_ACTIVE); 338 } else { 339 $('body').removeClass(ClassNames.PAN_SEARCH_ACTIVE); 340 } 341 }; 342 var panCallback = function panCallback() { 343 var lat = MapData.map.getCenter().lat; 344 var lng = MapData.map.getCenter().lng; 345 var differenceLat = lat - Position.start.lat; 346 var differenceLng = lng - Position.start.lng; 347 348 var distance = Math.sqrt(Math.pow(differenceLat, 2) + Math.pow(differenceLng, 2)); 349 350 setPanSearchActive(distance > Threshold.small); 351 }; 352 // event handlers 353 MapData.map.on('movestart', function (event) { 354 Zoom.current = MapData.map.getZoom(); 355 356 if (!zooming && interacting && Zoom.current >= Threshold.zoom) { 357 if (initialPan) { 358 Position.start.lat = MapData.map.getCenter().lat; 359 Position.start.lng = MapData.map.getCenter().lng; 360 initialPan = false; 361 } 362 moving = true; 363 panCallback(); 364 panInterval = setInterval(panCallback, 200); 365 } 366 }); 367 MapData.map.on('moveend', function (event) { 368 if (!zooming && moving) { 369 moving = false; 370 interacting = false; 371 Position.stop.lat = MapData.map.getCenter().lat; 372 Position.stop.lng = MapData.map.getCenter().lng; 373 clearInterval(panInterval); 374 Activity.panSearchActive && triggerSearch(); 375 } 376 }); 377 MapData.map.on('zoomstart', function (event) { 378 if (!moving && interacting) { 379 zooming = true; 380 Zoom.previous = MapData.map.getZoom(); 381 } 382 }); 383 MapData.map.on('zoomend', function (event) { 384 if (!moving && zooming) { 385 zooming = false; 386 interacting = false; 387 Zoom.current = MapData.map.getZoom(); 388 if (zoomTest()) { 389 390 if (Threshold.zoom > Zoom.current) { 391 regionZoomSearch = true; 392 } 393 triggerSearch(); 394 } 395 } 396 }); 397 $(document).on(Events.MAP_CENTERED, function () { 398 Position.start.lat = MapData.map.getCenter().lat; 399 Position.start.lng = MapData.map.getCenter().lng; 400 Position.stop.lat = MapData.map.getCenter().lat; 401 Position.stop.lng = MapData.map.getCenter().lng; 402 Zoom.previous = MapData.map.getZoom(); 403 }); 404 405 var zoomTest = function zoomTest() { 406 return Zoom.difference() < 0 && Zoom.current == Threshold.zoom - 1 || Zoom.difference() > 0 && Zoom.current == Threshold.zoom; 407 }; 408 409 // send the search! 410 var triggerSearch = function triggerSearch() { 411 $(document).trigger(Events.SEARCH_PAN_ZOOM_SUBMIT, { 412 lat: MapData.map.getCenter().lat, 413 lng: MapData.map.getCenter().lng, 414 zoom: MapData.map.getZoom() 415 }); 416 417 Position.start.lat = MapData.map.getCenter().lat; 418 Position.start.lng = MapData.map.getCenter().lng; 419 420 setPanSearchActive(false); 421 }; 422} 423 424var mapCreated = false; 425var useMarkerClusters = false; 426var nearbySearch = false; 427var centeringEnabled = true; 428 429var MapCenters = { 430 'en-us': { 431 lat: 39.5, 432 lng: -98.35, 433 zoom: 4 434 } 435}; 436 437var MarkerData = { 438 markers: [], 439 psid: 1, 440 markerObjects: {} 441}; 442 443var MapData = { 444 map: {}, 445 tileLayer: {}, 446 clusters: {} 447}; 448function setClusters(useClusters) { 449 useMarkerClusters = useClusters; 450} 451function setNearbySearch(isNearbySearch) { 452 nearbySearch = isNearbySearch; 453} 454function isNearbySearch() { 455 return nearbySearch; 456} 457function data$4(__data) { 458 var data = __data || null; 459 if (data === null) { 460 return MarkerData; 461 } else { 462 MarkerData.markers = data; 463 if (data.options && data.options.psid) { 464 marker_psid = data.options.psid; 465 } 466 if (mapCreated) { 467 createPins(); 468 createUserLocationMarker(); 469 centerMap(); 470 } else { 471 $(document).on(Events.MAP_CREATED, function () { 472 createPins(); 473 createUserLocationMarker(); 474 centerMap(); 475 }); 476 } 477 } 478} 479 480function create() { 481 createMap(tileMode); 482} 483 484function removeMap() { 485 486 //Remove user location marker from Marker Data 487 if (typeof MarkerData.markers[MarkerData.markers.length - 1]['className'] != 'undefined' && MarkerData.markers[MarkerData.markers.length - 1]['className'].indexOf('current-location') > -1) { 488 MarkerData.markers.pop(); 489 } 490 491 removePins(); 492 MapData.map.remove(); 493 mapCreated = false;
494} 495 496/** 497 * @description Create a new Leaflet map using a tileMode 498 * @param {*} tileMode TileMode 499 */ 500function createMap(tileMode) { 501 if (mapCreated) { 502 return; 503 } 504 switch (tileMode) { 505 case TileMode.GOOGLE: 506 createGoogleMap(); 507 break; 508 case TileMode.BING: 509 createBingMap(); 510 break; 511 case TileMode.MAPBOX: 512 createMapboxMap(); 513 break; 514 case TileMode.BAIDU: 515 createBaiduMap(); 516 break; 517 case TileMode.HERE: 518 createHereMap(); 519 break; 520 case TileMode.DEFAULT: 521 createGoogleMap(); 522 break; 523 } 524 mapCreated = true; 525 $(document).trigger(Events.MAP_CREATED); 526 { 527 initPanZoom(MapData); 528 } 529} 530 531function createHereMap() { 532 MapData.map = L.map('gmap', { 533 zoomControl: true, 534 attributionControl: false, 535 scrollWheelZoom: false, 536 doubleClickZoom: 'center' 537 }).setView([MapCenters[locale].lat, MapCenters[locale].lng], MapCenters[locale].zoom); 538 539 L.tileLayer.here({ 540 appId: HERE_APP_ID, 541 appCode: HERE_APP_CODE, 542 style: 'dreamworks' 543 }).addTo(MapData.map); 544} 545 546function createGoogleMap() { 547 MapData.map = L.map('gmap', { 548 zoomControl: false, 549 attributionControl: false, 550 scrollWheelZoom: false, 551 doubleClickZoom: 'center' 552 }).setView([MapCenters[locale].lat, MapCenters[locale].lng], MapCenters[locale].zoom); 553 554 L.control.zoom({ 555 position: zoomControlPosition 556 }).addTo(MapData.map); 557 558 L.gridLayer.googleMutant({ 559 type: 'roadmap', // valid values are 'roadmap', 'satellite', 'terrain' and 'hybrid' 560 styles: mapStyles 561 }).addTo(MapData.map); 562} 563 564function createMapboxMap() { 565 MapData.map = L.map('gmap', { 566 zoomControl: true, 567 attributionControl: false, 568 scrollWheelZoom: true, 569 doubleClickZoom: 'center' 570 }).setView([MapCenters[locale].lat, MapCenters[locale].lng], MapCenters[locale].zoom); 571 572 var accessUrl = 'https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/{z}/{x}/{y}?access_token='; 573 L.tileLayer(accessUrl + MAPBOX_KEY, { 574 style: 'mapbox://styles/mapbox/bright-v11', 575 tileSize: 512, 576 zoomOffset: -1 577 }).addTo(MapData.map); 578 579 var credits = L.control.attribution().addTo(MapData.map); 580 credits.addAttribution('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'); 581} 582 583function createBingMap() { 584 MapData.map = L.map('gmap', { 585 zoomControl: false, 586 attributionControl: false, 587 scrollWheelZoom: false, 588 doubleClickZoom: 'center' 589 }).setView([MapCenters[locale].lat, MapCenters[locale].lng], MapCenters[locale].zoom); 590 // L.control.attribution({ 591 // prefix: false 592 // }).addTo(map); 593 594 L.tileLayer.bing({ 595 bingMapsKey: BING_KEY, 596 imagerySet: 'Road' 597 }).addTo(MapData.map); 598} 599 600function createBaiduMap() { 601 var options = { 602 crs: L.CRS.EPSGB3857, 603 center: [MapCenters[locale].lat, MapCenters[locale].lng], 604 zoom: MapCenters[locale].zoom, 605 zoomControl: false, 606 attributionControl: false, 607 scrollWheelZoom: false, 608 doubleClickZoom: 'center' 609 }; 610 611 var baseMaps = { 612 Normal: new L.TileLayer.BaiduLayer("Normal.Map") 613 }; 614 615 options.layers = [baseMaps.Normal]; 616 MapData.map = L.map("gmap", options); 617 618 L.control.zoom({ 619 position: Settings.zoomControlPosition 620 }).addTo(MapData.map); 621 622 L.control.layers(baseMaps).addTo(MapData.map); 623} 624 625function removePins() { 626 if (!mapCreated) { 627 return; 628 } 629 630 $('.map-marker').remove(); 631 632 if (MapData.map.hasLayer(MapData.clusters)) { 633 634 MapData.map.removeLayer(MapData.clusters); 635 } 636 MarkerData.markerObjects = {}; 637} 638 639function createUserLocationMarker() { 640 var cookieData = getCookie(GEO_COOKIE_NAME); 641 if (typeof cookieData != 'undefined' && cookieData != '' && userLocationPin) { 642 cookieData = JSON.parse(cookieData); 643 var customMarkerData = { 644 className: 'map-marker cmOverlay current-location', 645 iconSize: [20, 20], 646 iconAnchor: [10, 10], 647 lat: cookieData.latitude, 648 lng: cookieData.longitude, 649 particleGroupNames: [], // used for data-particles on map pins, example: ['Location Type', 'Brands Carried'] 650 visible: true 651 }; 652 var icon = L.DivIcon.dataMarkup(customMarkerData); 653 var newMarker = L.marker([cookieData.latitude, cookieData.longitude], { 654 icon: icon 655 });
656 newMarker.addTo(MapData.map); 657 658 if (nearbySearch) { 659 MarkerData.markers.push(customMarkerData); 660 } 661 } 662} 663 664function preProcessMarkerInfo(data) { 665 return data; 666} 667 668function createPins() { 669 if (!mapCreated) { 670 $(document).one(Events.MAP_CREATED, function () { 671 mapCreated = true; 672 createPins(); 673 }); 674 } 675 removePins(); 676 677 var markers = MarkerData.markers; 678 679 if (MarkerData.psid == 2 || MarkerData.psid == 4) { 680 useMarkerClusters = false; 681 } 682 683 if (useMarkerClusters) { 684 MapData.clusters = L.markerClusterGroup({ 685 spiderfyOnMaxZoom: false, 686 disableClusteringAtZoom: 8 687 }); 688 MapData.clusters.on('animationend', function () { 689 $(document).trigger(Events.MAP_PINS_READY); 690 $(document).trigger(Events.NUMBER_MAP_PINS); 691 $(document).trigger(Events.APPLY_FILTERS); 692 }); 693 } 694 695 for (var i = 0; i < markers.length; i++) { 696 var marker = markers[i]; 697 698 marker.visible = true; 699 700 var classNames = 'map-marker cmOverlay filter-item'; 701 if (markerShape == MarkerShape.ROUND) { 702 classNames = classNames + ' rounded'; 703 } 704 705 var icon = L.DivIcon.dataMarkup({ 706 className: classNames, 707 iconSize: MarkerShapeData[markerShape].size, 708 iconAnchor: MarkerShapeData[markerShape].anchor, 709 popupAnchor: MarkerShapeData[markerShape].popupAnchor, 710 lid: marker.locationId, 711 lat: marker.lat, 712 lng: marker.lng, 713 visible: true, 714 specialties: marker.specialties 715 }); 716 717 // prepare marker.info for use in template processor 718 var popUpHtml = ''; 719 720 if (typeof marker.info != 'undefined' && marker.info != '') { 721 var markerInfo = marker.info.substring(26, marker.info.length - 6); 722 723 var markerInfoJson = JSON.parse(markerInfo); 724 725 if (Object.keys(markerInfoJson).length > 0) { 726 // get marker popup template 727 var template = Styles.popup_locations; 728 if (pageLevel == 'domain' && typeof markerInfoJson.lid == 'undefined') { 729 template = Styles.popup_regions; 730 } 731 if (pageLevel == 'region') { 732 template = Styles.popup_cities; 733 } 734 markerInfoJson = preProcessMarkerInfo(markerInfoJson); 735 popUpHtml = render(template, markerInfoJson); 736 } 737 } 738 var newMarker = L.marker([marker.lat, marker.lng], { 739 icon: icon 740 }); 741 742 if (popUpHtml != '' && (enableLeafletPopups || getZoomRegionSearch())) { 743 newMarker.bindPopup(popUpHtml, { 744 autoPanPadding: L.point(80, 80), 745 minWidth: 230 746 }).on('popupopen', function () { 747 $('body').addClass('popup-open'); 748 }).on('popupclose', function () { 749 $('body').removeClass('popup-open'); 750 $('.map-list-item-wrap').removeClass('selected'); 751 $('.cmOverlay').removeClass('selected'); 752 }); 753 } 754 if (!useMarkerClusters) { 755 newMarker.addTo(MapData.map); 756 } else { 757 MapData.clusters.addLayer(newMarker); 758 MapData.map.addLayer(MapData.clusters); 759 MarkerData.markerObjects['marker' + marker.locationId] = newMarker; 760 } 761 } 762 763 setZoomRegionSearch(false); 764 765 if (!useMarkerClusters) { 766 $(document).trigger(Events.MAP_PINS_READY); 767 } 768} 769 770function centerMap() { 771 if (!mapCreated || !centeringEnabled) { 772 return; 773 } 774 775 var lats = []; 776 var lngs = []; 777 var markers = MarkerData.markers; 778 779 for (var i = 0; i < markers.length; i++) { 780 if (markers[i].visible) { 781 lats.push(markers[i].lat); 782 lngs.push(markers[i].lng); 783 } 784 } 785 786 lats.sort(function (a, b) { 787 return a - b; 788 }); 789 lngs.sort(function (a, b) { 790 return a - b; 791 }); 792 793 var minLat = lats[0]; 794 var minLng = lngs[0]; 795 var maxLat = lats[lats.length - 1]; 796 var maxLng = lngs[lngs.length - 1]; 797 798 var southWest = new L.LatLng(minLat, maxLng); 799 var northEast = new L.LatLng(maxLat, minLng); 800 var bounds = new L.LatLngBounds(southWest, northEast); 801 802 // TODO: FIX THIS 803 // if (MapSettings.CENTER_MAP_ENABLED) { 804 MapData.map.fitBounds(bounds, { 805 padding: [60, 60], 806 maxZoom: 14, 807 noMoveStart: true 808 }); 809 // } 810 811 $(document).trigger(Events.MAP_CENTERED); 812} 813 814function processMapDefaultData(_data) { 815 var data = _data || RLS.defaultData; 816 var markerData = data.markerData; 817 var locationSpecialties = {}; 818 if (data.locationSpecialties) { 819 locationSpecialties = data.locationSpecialties; 820 } 821 var spids = []; 822 for (var name in locationSpecialties) { 823 spids.push(name.replace('spid', '')); 824 } 825 826 var specialtyData = {}; 827 var locations = []; 828 829 if (specialties && specialties.length) { 830 for (var i = 0; i < specialties.length; i++) { 831 var specialty = specialties[i]; 832 if (spids.indexOf(specialty.spid) != -1) { 833 var lids = []; 834 for (var key in locationSpecialties['spid' + specialty.spid]) { 835 if (key.indexOf('lid') != -1) { 836 var lid = key.replace('lid', ''); 837 lids.push(lid); 838 if (locations.indexOf(lid) == -1) { 839 locations.push(lid); 840 } 841 } 842 } 843 specialtyData[specialty.spid] = { 844 spid: specialty.spid, 845 name: specialty.name, 846 group: specialty.group, 847 lids: lids 848 }; 849 } 850 } 851 } 852 853 var markerSpecialties = {}; 854 for (var i = 0; i < locations.length; i++) { 855 var lid = locations[i]; 856 var locationSpecialties = []; 857 858 for (var key in specialtyData) { 859 if (specialtyData[key].lids.indexOf(lid) != -1) { 860 locationSpecialties.push(specialtyData); 861 if (markerSpecialties[lid]) ;else { 862 markerSpecialties[lid] = []; 863 } 864 markerSpecialties[lid].push({ 865 name: specialtyData[key].name, 866 spid: specialtyData[key].spid, 867 group: specialtyData[key].group 868 }); 869 } 870 } 871 } 872 873 for (var i = 0; i < markerData.length; i++) { 874 var lid = markerData[i].lid; 875 markerData[i]['locationId'] = lid; 876 markerData[i]['specialties'] = markerSpecialties[lid]; 877 } 878 MarkerData.markers = markerData; 879 return MarkerData.markers; 880} 881function setCenteringEnabled(enabled) { 882 centeringEnabled = enabled; 883} 884 885var initialSearch = true; 886var $el$1 = $('#map-search-form'); 887var form_data = formDataFromArray($el$1.serializeArray()); 888$el$1.find('input[type=text]').attr('placeholder', 'Enter City, State, or Zip Code'); 889 890$el$1.on('submit', function (event) { 891 event.preventDefault(); 892 form_data = formDataFromArray($el$1.serializeArray()); 893 894 $(document).trigger(Events.SEARCH_SUBMIT, form_data); 895}); 896 897$el$1.change(function (event) { 898 form_data = formDataFromArray($el$1.serializeArray()); 899 $el$1.find('input[type=text]').attr('placeholder', 'Enter City, State, or Zip Code'); 900}); 901 902function isInitialSearch() { 903 return initialSearch; 904} 905 906function setInitialSearch(isInitialSearch) { 907 initialSearch = isInitialSearch; 908} 909 910var $nearby = $('#search-near-me'); 911$nearby.on('click', function (ev) { 912 ev.preventDefault(); 913 $(document).trigger(Events.SEARCH_NEARBY); 914}); 915 916function nearby(data) { 917 return new Promise(function (resolve, reject) { 918 var url = searchUrl + '?template=search&level=search'; 919 920 if (typeof data != 'undefined' && typeof oppositeBrandURL[brand] != 'undefined') { 921 url = oppositeBrandURL[brand] + '?template=search&level=search'; 922 } 923 924 var searchTerm = getSearchTermFromURL(); 925 var coordinates = getLatLngFromURL(); 926 var IP = getIPFromURL(); 927 var cookieData = getCookie(GEO_COOKIE_NAME); 928 929 if (searchTerm !== '' && initialSearch) { 930 if (isRegion$1(searchTerm)) { 931 url = '//' + fullDomainName + '/' + regionData[searchTerm]['region_lc'] + '/'; 932 window.location.href = url; 933 return; 934 } else { 935 if (typeof searchTerm != 'undefined' && searchTerm.length == 5 && !isNaN(searchTerm)) { 936 searchTerm = searchTerm + ', US'; 937 } 938 939 url = url + '&search=' + searchTerm; 940 } 941 setNearbySearch(false); 942 } else if (coordinates !== '' && initialSearch) { 943 url += '&lat=' + coordinates['lat'] + '&lng=' + coordinates['lng']; 944 var _data2 = { 945 latitude: coordinates['lat'], 946 longitude: coordinates['lng'] 947 }; 948 setNearbySearch(true);
949 setCookie(GEO_COOKIE_NAME, JSON.stringify(_data2)); 950 } else if (IP !== '' && initialSearch) { 951 url = url + '&' + IP; 952 setNearbySearch(false); 953 } else if (cookieData !== '' && (searchTerm == '' || isNearbySearch())) { 954 var _data3 = JSON.parse(cookieData); 955 956 if (_data3 != null) { 957 url += '&lat=' + _data3.latitude + '&lng=' + _data3.longitude; 958 } 959 setNearbySearch(true); 960 } 961 $.ajax(url).done(function (data) { 962 resolve(data); 963 }); 964 }); 965} 966 967function data$3(__data) { 968 var _data = __data || null; 969 if (_data === null) { 970 return form_data; 971 } else { 972 if (_data.options && _data.options.search) { 973 974 // Replace , US that was added for zip code search when populating the input box value 975 if (_data.options.search.indexOf(', US') == _data.options.search.length - 4 && !isNaN(_data.options.search.replace(', US', ''))) { 976 _data.options.search = _data.options.search.replace(', US', ''); 977 } 978 979 $el$1.find('input[type=text]').val(_data.options.search); 980 } 981 if (_data.searchTerm) { 982 983 // Replace , US that was added for zip code search when populating the input box value 984 if (_data.searchTerm.indexOf(', US') == _data.searchTerm.length - 4 && !isNaN(_data.searchTerm.replace(', US', ''))) { 985 _data.searchTerm = _data.searchTerm.replace(', US', ''); 986 } 987 988 $el$1.find('input[type=text]').val(_data.searchTerm); 989 } 990 if (_data.searchType) { 991 $el$1.find('input[value=' + _data.searchType + ']').click(); 992 } 993 form_data = formDataFromArray($el$1.serializeArray()); 994 } 995} 996 997function locate(search, data) { 998 return new Promise(function (resolve, reject) { 999 var searchTerm = search['locator-search-value']; 1000 var url = void 0; 1001 1002 var searchValue = [searchTerm]; 1003 if (isRegion$1(searchValue)) { 1004 url = '//' + fullDomainName + '/' + regionData[searchValue[0]]['region_lc'] + '/'; 1005 $('body').removeClass('geolocation-loading'); 1006 window.location.href = url; 1007 return; 1008 } else { 1009 if (typeof searchTerm != 'undefined' && searchTerm.length == 5 && !isNaN(searchTerm)) { 1010 searchTerm = searchTerm + ', US'; 1011 } 1012 1013 url = searchUrl + '?template=search&level=search&search=' + searchTerm; 1014 1015 if (typeof data != 'undefined' && data != null && typeof oppositeBrandURL[brand] != 'undefined') { 1016 url = oppositeBrandURL[brand] + '?template=search&level=search&search=' + searchTerm; 1017 } 1018 } 1019 1020 $.ajax(url).done(function (data) { 1021 resolve(data); 1022 }); 1023 }); 1024} 1025 1026function panZoom(panZoomData) { 1027 return new Promise(function (resolve, reject) { 1028 var url = void 0; 1029 1030 if (panZoomData.zoom >= 7) { 1031 url = searchUrl + '?template=search&level=search&lat=' + panZoomData.lat + '&lng=' + panZoomData.lng; 1032 } else { 1033 url = '//' + fullDomainName + '/api/'; 1034 } 1035 1036 $.ajax(url).done(function (data) { 1037 resolve(data); 1038 }); 1039 }); 1040} 1041 1042function formDataFromArray(array) { 1043 var formData = {}; 1044 array.forEach(function (value) { 1045 formData[value.name] = value.value; 1046 }); 1047 return formData; 1048} 1049 1050function getIPFromURL() { 1051 var query = ''; 1052 var pattern = /(^|&|\?)(ip=)([0-9]+\.)([0-9]+\.)([0-9]+\.)([0-9]+)/; 1053 var match = pattern.exec(window.location.href); 1054 if (match != null) { 1055 var query = match[0]; 1056 // test if private ip 1057 var privateIpPattern = /(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/; 1058 var ip = query.split('=')[1]; 1059 if (!privateIpPattern.test(ip)) { 1060 // test if we matched a '&' or '?' 1061 if (query.charAt(0) == '&' || query.charAt(0) == '?') { 1062 query = query.substr(1); 1063 } 1064 } 1065 } 1066 return query; 1067} 1068function getSearchTermFromURL() { 1069 var query = ''; 1070 var pattern = /(\?|&)q=(.*)(&|$)/; 1071 var match = pattern.exec(window.location.href); 1072 if (match != null) { 1073 query = match[2]; 1074 } 1075 return query; 1076} 1077 1078function getLatLngFromURL() { 1079 var vars = {}; 1080 var query = ''; 1081 var locationUrl = window.location.href.split('#')[0]; 1082 locationUrl.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { 1083 vars[key] = value; 1084 }); 1085 1086 if (typeof vars['lat'] != 'undefined' && typeof vars['lng'] != 'undefined') { 1087 query = vars; 1088 } 1089 1090 return query; 1091} 1092 1093function isRegion$1(array) { 1094 var searchTerm = array[0];
1095 var regex = /(,*\s*(%20)*[Uu][Ss][Aa]*)$/; 1096 searchTerm = searchTerm.replace(regex, ''); 1097 if (regionData[searchTerm.toLowerCase()]) { 1098 array[0] = searchTerm.toLowerCase(); 1099 return true; 1100 } 1101 return false; 1102} 1103 1104/* uses globally-scoped Styles object defined in templates.html */ 1105 1106var $el = $('.map-list'); 1107var doc_html = ''; 1108var map_list_data = {}; 1109var map_list_style = Styles.list_locations; 1110 1111var data$2 = function data$2(__data) { 1112 var _data = __data || null; 1113 if (_data === null) { 1114 return map_list_data; 1115 } else { 1116 map_list_data = _data; 1117 doc_html = renderMapList(map_list_style, map_list_data); 1118 $el.html(doc_html); 1119 map_list_data.forEach(function (value) { 1120 var lid = value.lid; 1121 var $el = $('.map-list-item-wrap[data-lid=' + lid + ']'); 1122 value.$el = $el; 1123 }); 1124 $(document).trigger(Events.MAP_LIST_READY); 1125 } 1126}; 1127 1128var setTemplate = function setTemplate(__template) { 1129 map_list_style = __template; 1130}; 1131 1132var setElement = function setElement(__element) { 1133 $el = $(__element); 1134}; 1135 1136function renderMapList(template, data) { 1137 var renderedHTML = ''; 1138 for (var i = 0; i < data.length; i++) { 1139 data[i] = preProcessMapListData(data[i]); 1140 renderedHTML += render(template, data[i]); 1141 } 1142 return renderedHTML; 1143} 1144 1145// Use to pre-process any data or to append any data that is needed in the map list 1146function preProcessMapListData(data) { 1147 data['address_1_urlencoded'] = typeof data['address_1'] != 'undefined' ? encodeURIComponent(data['address_1']) : ''; 1148 data['address_2_urlencoded'] = typeof data['address_2'] != 'undefined' ? encodeURIComponent(data['address_2']) : ''; 1149 1150 data['directions_link'] = ''; 1151 1152 if (typeof data['address_1'] != 'undefined') { 1153 data['directions_link'] = "https://www.google.com/maps/search/?api=1&query=" + encodeURIComponent(data['location_name']) + "+" + encodeURIComponent(data['address_1']) + "+" + encodeURIComponent(data['address_2']) + "+" + encodeURIComponent(data['city']) + "+" + encodeURIComponent(data['post_code']); 1154 } 1155 1156 var store_service_list = ''; 1157 if (typeof data['Store Services_CS'] != 'undefined') { 1158 var services = data['Store Services_CS'].split(','); 1159 if (services.length > 0 && services != '') { 1160 for (var i = 0; i < services.length; i++) { 1161 1162 store_service_list += '<li class="icon-check">' + services[i] + '</li>'; 1163 } 1164 } 1165 } 1166 1167 data['brand_logo'] = ''; 1168 data['hide_details'] = ""; 1169 1170 if (typeof data["Page Settings_CS"] != 'undefined' && data["Page Settings_CS"].includes('Suppress Location Page')) { 1171 data['hide_details'] = "hide"; 1172 } 1173 1174 if (typeof data["Finish Line at Macy's_CS"] != 'undefined' && data["Finish Line at Macy's_CS"].includes('Yes')) { 1175 data['brand_logo'] = "https://assets." + domainName + "/images/finish-line-macys-logo.png"; 1176 } else if (typeof data['brand_name'] != 'undefined' && data['brand_name'] == 'City Gear') { 1177 data['brand_logo'] = "https://assets." + domainName + "/images/DTLR-CG-Black.svg"; 1178 } else { 1179 data['brand_logo'] = "https://assets." + domainName + "/images/" + siteConfiguration[brandName]['logo']; 1180 } 1181 1182 data['store_service_list'] = store_service_list; 1183 1184 var openDate = data.opening_date; 1185 var today = new Date().toISOString().slice(0, 10); 1186 if (today < openDate) { 1187 data.is_coming_soon = "is-coming-soon"; 1188 data.is_coming_soon_message = "Coming Soon"; 1189 } else { 1190 data.is_coming_soon = ""; 1191 data.is_coming_soon_message = ""; 1192 } 1193 return data; 1194} 1195 1196var hoursData = {}; 1197// uses global hours variable 1198 1199function data$1(_hoursData) { 1200 var _data = _hoursData || null; 1201 if (_data == null) { 1202 return hoursData; 1203 } 1204 _data.forEach(function (datum) { 1205 if (datum["hours_sets:primary"]) { 1206 hours[datum.lid] = {}; 1207 hours[datum.lid].primary = JSON.parse(datum["hours_sets:primary"]); 1208 hours[datum.lid].timezone = datum.hours_timezone; 1209 hours[datum.lid].dst = datum.hours_dst; 1210 } 1211 }); 1212} 1213 1214if (autoSearch) { 1215 { 1216 hardwareGeoLocate(); 1217 } 1218} else { 1219 setTemplate(getStyleByPageLevel(pageLevel$1)); 1220 if (pageLevel$1 == 'indy') { 1221 setElement($('.indy-nearby-map-list .map-list')); 1222 } 1223 if (pageLevel$1 == 'indy' || pageLevel$1 == 'city') { 1224 setClusters(true); 1225 } 1226 if (pageLevel$1 != 'region') { 1227 data$2(JSON.parse(defaultListData)); 1228 } 1229 if (browseMode == false && pageHasMap) { 1230 data$4(processMapDefaultData()); 1231 } 1232} 1233 1234if (loadMap && pageHasMap) { 1235 create(); 1236} else { 1237 $(document).one(Events.CREATE_MAP, function () { 1238 create(); 1239 }); 1240} 1241 1242$(document).on(Events.REMOVE_MAP, function () { 1243 removeMap(); 1244}); 1245 1246init(); 1247 1248$(document).on(Events.SEARCH_NEARBY, function () { 1249 setNearbySearch(true); 1250 setCenteringEnabled(true); 1251 jQuery('#q').val(''); 1252 $('body').addClass(Status.LOADING); 1253 $('body').removeClass('no-results-found'); 1254 if (window.navigator && window.navigator.geolocation && location.protocol == 'https:' && useHardwareLocation) { 1255 window.navigator.geolocation.getCurrentPosition(function (position) { 1256 var data = { 1257 latitude: position.coords.latitude, 1258 longitude: position.coords.longitude 1259 };
1260 setCookie(GEO_COOKIE_NAME, JSON.stringify(data)); 1261 searchNearby(); 1262 }, function (fail) { 1263 showMapAlert(); 1264 searchNearby(); 1265 }, { 1266 enableHighAccuracy: enableHighAccuracy, 1267 maximumAge: maximumAge, 1268 timeout: timeout 1269 }); 1270 } else { 1271 showMapAlert(); 1272 searchNearby(); 1273 } 1274}); 1275 1276$(document).on(Events.MAP_PINS_READY, function () { 1277 $('.locator .map-list-item-wrap').each(function () { 1278 var lid = $(this).data("lid"); 1279 $('.cmOverlay[data-lid="' + lid + '"]').attr("data-particles", $(this).attr("data-particles")); 1280 }); 1281 $(document).trigger(Events.APPLY_FILTERS); 1282}); 1283 1284$(document).on(Events.SEARCH_PAN_ZOOM_SUBMIT, function (event, data) { 1285 $('body').addClass(Status.LOADING); 1286 $('body').removeClass('no-results-found'); 1287 $('body').removeClass('search-input-error'); 1288 setCenteringEnabled(false); 1289 panZoom(data).then(function (results) { 1290 $(document).trigger(Events.ASYNC_RESULTS, results); 1291 }, function (results) { 1292 $(document).trigger(Events.SEARCH_FAIL); 1293 }); 1294}); 1295 1296$(document).on(Events.SEARCH_SUBMIT, function (event, search) { 1297 if (jQuery('#q').val() == '') { 1298 $('body').addClass('search-input-error'); 1299 return; 1300 } 1301 1302 setNearbySearch(false); 1303 setCenteringEnabled(true); 1304 1305 if (!redirectOnSearch) { 1306 push({ 'searchTerm': search['locator-search-value'] }); 1307 $('body').addClass(Status.LOADING); 1308 $('body').removeClass('no-results-found'); 1309 $('body').removeClass('search-input-error'); 1310 locate(search, null).then(function (data) { 1311 if (brand == 'jdsports' || brand == 'finishline') { 1312 var originSearchData = data; 1313 locate(search, data).then(function (data) { 1314 //Both searches returned results 1315 data = mergeData(originSearchData, data); 1316 $(document).trigger(Events.ASYNC_RESULTS, data); 1317 }, function (data) { 1318 //Only first search returned results 1319 $(document).trigger(Events.ASYNC_RESULTS, originSearchData); 1320 }); 1321 } else { 1322 $(document).trigger(Events.ASYNC_RESULTS, data); 1323 } 1324 }, function (data) { 1325 1326 if (brand == 'jdsports' || brand == 'finishline') { 1327 locate(search, data).then(function (data) { 1328 //First search didn't return data but second search did 1329 $(document).trigger(Events.ASYNC_RESULTS, data); 1330 }, function (data) { 1331 //Neither first search nor second search returned data 1332 $(document).trigger(Events.SEARCH_FAIL); 1333 }); 1334 } else { 1335 $(document).trigger(Events.SEARCH_FAIL); 1336 } 1337 }); 1338 } else { 1339 var searchTerm = search["locator-search-value"]; 1340 if (isRegion([searchTerm])) { 1341 var regex = /(,*\s*(%20)*[Uu][Ss][Aa]*)$/; 1342 searchTerm = searchTerm.replace(regex, ''); 1343 var url = '//' + fullDomainName + '/' + regionData[searchTerm.toLowerCase()]['region_lc'] + '/'; 1344 window.location.href = url; 1345 return; 1346 } else { 1347 window.location.href = location.protocol + "//" + fullDomainName; 1348 } 1349 window.location.href = searchPageUrl + '?q=' + search["locator-search-value"]; 1350 } 1351}); 1352 1353/* 1354This is where we clean up and prepare the data for the separate modules to use 1355*/ 1356$(document).on(Events.ASYNC_RESULTS, function (event, data) { 1357 try { 1358 if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) != 'object') { 1359 data = JSON.parse(data); 1360 } 1361 if (data.markerData) { 1362 data.markers = processMapDefaultData(data); 1363 } 1364 } catch (e) {} 1365 try { 1366 data.maplist = JSON.parse('[' + data.maplist.substring(25, data.maplist.length - 7) + ']'); 1367 } catch (e) {} 1368 1369 setClusters(false); 1370 setTemplate(Styles.list_locations); 1371 if (data.api_level) { 1372 if (data.api_level == 'region') { 1373 setClusters(false); 1374 setTemplate(Styles.list_cities); 1375 } else if (data.api_level == 'domain') { 1376 setClusters(false); 1377 setTemplate(Styles.list_regions); 1378 } 1379 } 1380 1381 if (data && data.markers && data.markers.length && data.markers.length !== 0) { 1382 $(document).trigger(Events.SEARCH_SUCCESS, data); 1383 } else { 1384 $(document).trigger(Events.SEARCH_NO_RESULTS, data); 1385 } 1386}); 1387 1388$(document).on(Events.SEARCH_SUCCESS, function (event, data) { 1389 setInitialSearch(false); 1390 data$1(data.maplist);
1391 data$2(data.maplist); 1392 data$4(data.markers); 1393 data$3(data); 1394 1395 $('body').removeClass(Status.LOADING); 1396 updateMappin(); 1397 1398 $(document).trigger(Events.APPLY_FILTERS); 1399}); 1400 1401$(document).on(Events.SEARCH_NO_RESULTS, function (event, data) { 1402 enableLeafletPopups = true; 1403 $('body').addClass('no-results-found'); 1404 $('body').removeClass(Status.LOADING); 1405 1406 if (data.options) { 1407 var searchTerm = 'you'; 1408 if (data.options.search) { 1409 searchTerm = data.options.search; 1410 } 1411 $('.map-list-header-search-term').html('0 stores near ' + searchTerm); 1412 } 1413 1414 if (isInitialSearch()) { 1415 data$4(processMapDefaultData()); 1416 setInitialSearch(false); 1417 } 1418}); 1419 1420$(document).on(Events.SEARCH_FAIL, function (event, data) { 1421 $('body').removeClass(Status.LOADING); 1422 $('body').addClass('no-results-found'); 1423}); 1424 1425function data() { 1426 var _data = {}; 1427 _data.maplist = data$2(); 1428 _data.map = data$4(); 1429 _data.search = data$3(); 1430 return _data; 1431} 1432 1433function getStyleByPageLevel(pageLevel) { 1434 if (pageLevel == 'region') { 1435 return Styles.list_cities; 1436 } else if (pageLevel == 'domain') { 1437 return Styles.list_regions; 1438 } else { 1439 return Styles.list_locations; 1440 } 1441} 1442 1443function searchNearby() { 1444 if (redirectOnSearch) { 1445 window.location.href = location.protocol + "//" + fullDomainName; 1446 } else { 1447 nearby().then(function (data) { 1448 if (brand == 'jdsports' || brand == 'finishline') { 1449 var originSearchData = data; 1450 nearby(data).then(function (data) { 1451 //Both searches returned results 1452 data = mergeData(originSearchData, data); 1453 $(document).trigger(Events.ASYNC_RESULTS, data); 1454 }, function (data) { 1455 //Only first search returned results 1456 $(document).trigger(Events.ASYNC_RESULTS, originSearchData); 1457 }); 1458 } else { 1459 $(document).trigger(Events.ASYNC_RESULTS, data); 1460 } 1461 }, function (data) { 1462 1463 if (brand == 'jdsports' || brand == 'finishline') { 1464 nearby(data).then(function (data) { 1465 //First search didn't return data but second search did 1466 $(document).trigger(Events.ASYNC_RESULTS, data); 1467 }, function (data) { 1468 //Neither first search nor second search returned data 1469 $(document).trigger(Events.SEARCH_FAIL); 1470 $(document).trigger(Events.SEARCH_NO_RESULTS); 1471 }); 1472 } else { 1473 $(document).trigger(Events.SEARCH_FAIL); 1474 $(document).trigger(Events.SEARCH_NO_RESULTS); 1475 } 1476 }); 1477 } 1478} 1479 1480function hardwareGeoLocate() { 1481 if (getCookie(GEO_COOKIE_NAME) === '' && useHardwareLocation && window.navigator && window.navigator.geolocation && location.protocol == 'https:') { 1482 window.navigator.geolocation.getCurrentPosition(function (position) { 1483 var data = { 1484 latitude: position.coords.latitude, 1485 longitude: position.coords.longitude 1486 }; 1487 setCookie(GEO_COOKIE_NAME, JSON.stringify(data)); 1488 searchNearby(); 1489 }, function (fail) { 1490 searchNearby(); 1491 showMapAlert(); 1492 }, { 1493 enableHighAccuracy: enableHighAccuracy, 1494 maximumAge: maximumAge, 1495 timeout: timeout 1496 }); 1497 } else { 1498 if (window.navigator && window.navigator.permissions) { 1499 window.navigator.permissions.query({ name: 'geolocation' }).then(function (data) { 1500 if (data.state == 'denied') { 1501 showMapAlert(); 1502 } 1503 }); 1504 } 1505 1506 searchNearby(); 1507 } 1508} 1509 1510function showMapAlert() { 1511 { 1512 $('.map-alert').fadeIn(); 1513 } 1514} 1515 1516function isRegion(array) { 1517 var searchTerm = array[0]; 1518 var regex = /(,*\s*(%20)*[Uu][Ss][Aa]*)$/; 1519 searchTerm = searchTerm.replace(regex, ''); 1520 if (regionData[searchTerm.toLowerCase()]) { 1521 array[0] = searchTerm.toLowerCase(); 1522 return true; 1523 } 1524 return false;
1525} 1526 1527$(document).on(Events.OPEN_POPUP, function (event, data) { 1528 if (typeof data$4().markerObjects['marker' + data.lid] != 'undefined') { 1529 data$4().markerObjects['marker' + data.lid].openPopup(); 1530 } 1531}); 1532 1533function mergeData(originSearchData, secondSearchData) { 1534 if (typeof originSearchData.markers != 'undefined' && originSearchData.markers == null && originSearchData.markers != '' && typeof secondSearchData.markers != 'undefined' && secondSearchData.markers == null && secondSearchData.markers != '') { 1535 return originSearchData; 1536 } else if (originSearchData.markers != null && secondSearchData.markers == null) { 1537 return originSearchData; 1538 } else if (originSearchData.markers == null && secondSearchData.markers != null) { 1539 return secondSearchData; 1540 } else if (typeof secondSearchData.markers != 'undefined' && secondSearchData.markers != null) { 1541 for (var i = 0; i < secondSearchData.markers.length; i++) { 1542 originSearchData.markers.push(secondSearchData.markers[i]); 1543 } 1544 1545 var originData = JSON.parse('[' + originSearchData.maplist.substring(25, originSearchData.maplist.length - 7) + ']'); 1546 var secondaryData = JSON.parse('[' + secondSearchData.maplist.substring(25, secondSearchData.maplist.length - 7) + ']'); 1547 var tempData = []; 1548 1549 for (var i = 0; i < originData.length; i++) { 1550 tempData.push(originData[i]); 1551 } 1552 for (var y = 0; y < secondaryData.length; y++) { 1553 tempData.push(secondaryData[y]); 1554 } 1555 1556 tempData.sort(function (a, b) { 1557 return parseFloat(a.distance) - parseFloat(b.distance); 1558 }); 1559 1560 tempData = '<div class="tlsmap_list">' + JSON.stringify(tempData).slice(1, -1) + ", <div>"; 1561 1562 originSearchData.maplist = tempData; 1563 1564 return originSearchData; 1565 } else { 1566 if (typeof secondSearchData != 'undefined' && secondSearchData.indexOf('markersAvailable') > -1) { 1567 return secondSearchData; 1568 } else { 1569 return originSearchData; 1570 } 1571 } 1572} 1573 1574function updateMappin() { 1575 $('.map-list-item-wrap').each(function () { 1576 var lid = $(this).data("lid"); 1577 $('.cmOverlay[data-lid=' + lid + ']').attr("data-brand", $(this).attr("data-brand")); 1578 }); 1579} 1580 1581exports.data = data;
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.