{"version":3,"file":"default/js/google.js","sources":["webpack://rws/./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/keyboardAccessibility.js","webpack://rws/./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack://rws/./cartridges/app_rws/cartridge/client/default/js/services/google.js","webpack://rws/./cartridges/app_rws/cartridge/client/default/js/storeLocator.js","webpack://rws/./cartridges/app_rws/cartridge/client/default/js/storeLocator/storeLocator.js","webpack://rws/./cartridges/app_rws/cartridge/client/default/js/util/matchBreakpoints.js","webpack://rws/./cartridges/app_rws/cartridge/client/default/js/google.js"],"sourcesContent":["'use strict';\n\n// Customization: Added Enter key (13)\n\nmodule.exports = function (selector, keyFunctions, preFunction) {\n $(selector).on('keydown', function (e) {\n var key = e.which;\n var supportedKeyCodes = [37, 38, 39, 40, 27, 13];\n if (supportedKeyCodes.indexOf(key) >= 0) {\n e.preventDefault();\n }\n var returnedScope = preFunction.call(this);\n if (keyFunctions[key]) {\n keyFunctions[key].call(this, returnedScope);\n }\n });\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","/* global google */\n'use strict';\n\n// This sample uses the Places Autocomplete widget to:\n// 1. Help the user select a place\n// 2. Retrieve the address components associated with that place\n// 3. Populate the form fields with those address components.\n// This sample requires the Places library, Maps JavaScript API.\n// Include the libraries=places parameter when you first load the API.\n// For example: \nlet autocomplete;\nlet address1Field;\nlet postalField;\n\nfunction fillInAddress() {\n // Get the place details from the autocomplete object.\n const place = autocomplete.getPlace();\n let address1 = \"\";\n let postcode = \"\";\n\n // Get each component of the address from the place details,\n // and then fill-in the corresponding field on the form.\n // place.address_components are google.maps.GeocoderAddressComponent objects\n // which are documented at http://goo.gle/3l5i5Mr\n for (const component of place.address_components) {\n // @ts-ignore remove once typings fixed\n const componentType = component.types[0];\n\n switch (componentType) {\n case \"street_number\": {\n address1 = `${component.long_name} ${address1}`;\n break;\n }\n\n case \"route\": {\n address1 += component.short_name;\n break;\n }\n\n case \"postal_code\": {\n postcode = `${component.long_name}${postcode}`;\n break;\n }\n\n case \"postal_code_suffix\": {\n postcode = `${postcode}-${component.long_name}`;\n break;\n }\n\n case \"locality\": {\n document.querySelector('[name*=\"city\"]').value = component.long_name;\n break;\n }\n\n case \"administrative_area_level_1\": {\n document.querySelector('[name*=\"state\"]').value = component.short_name;\n break;\n }\n\n case \"country\": {\n document.querySelector('[name*=\"country\"]').value = component.short_name;\n break;\n }\n\n default: {\n break;\n }\n }\n }\n\n address1Field.value = address1;\n postalField.value = postcode;\n}\n\nfunction initAutocomplete() {\n if ($('[name*=\"address1\"]').length > 0) {\n address1Field = document.querySelector('[name*=\"address1\"]');\n postalField = document.querySelector('[name*=\"postalCode\"]');\n\n // Create the autocomplete object, restricting the search predictions to\n // addresses in the US and Canada.\n autocomplete = new google.maps.places.Autocomplete(address1Field, {\n componentRestrictions: { country: [\"us\"] },\n fields: [\"address_components\", \"geometry\"],\n types: [\"address\"]\n });\n // When the user selects an address from the drop-down, populate the\n // address fields in the form.\n autocomplete.addListener(\"place_changed\", fillInAddress);\n }\n}\n\n// Full address form autocomplete Shipping, Billing, Account\n$(document).ready(function () {\n initAutocomplete();\n});\n\nmodule.exports = {\n // Address autocomplete single field (store search)\n initAutocompleteStore: function () {\n if ($('#store-postal-code').length > 0) {\n const autocompleteFormField = document.getElementById(`store-postal-code`);\n const autocompleteForm = new google.maps.places.Autocomplete((autocompleteFormField), {\n fields: ['name', 'formatted_address'],\n types: ['geocode']\n });\n google.maps.event.clearInstanceListeners(autocompleteFormField);\n google.maps.event.addListener(autocompleteForm, `place_changed`, () => {\n const place = autocompleteForm.getPlace();\n\n if (typeof place.formatted_address !== 'undefined') {\n autocompleteFormField.value = place.formatted_address;\n $('[name=' + autocompleteFormField.closest('form').name + ']').trigger('submit');\n }\n });\n }\n }\n};\n","'use strict';\n\nvar processInclude = require('base/util');\nvar google = require('./services/google');\n\n$(document).ready(function () {\n processInclude(require('./storeLocator/storeLocator'));\n google.initAutocompleteStore();\n});\n","/* global google */\n'use strict';\n\nvar matchBreakpoints = require('../util/matchBreakpoints');\nvar keyboardAccessibility = require('base/components/keyboardAccessibility');\n\nfunction restoreFormValues(data) {\n if (data.radius !== parseInt($('select.radius').val(), 10)) {\n $('select.radius').val(data.radius);\n }\n\n if (data.searchKey.postalCode && data.searchKey.postalCode !== $('input[name=\"postalCode\"]').val()) {\n $('input[name=\"postalCode\"]').val(data.searchKey.postalCode);\n } else {\n $('input[name=\"postalCode\"]').val('');\n }\n}\n\n/**\n * Uses google maps api to render a map\n */\nfunction maps() {\n var map;\n var infowindow = new google.maps.InfoWindow();\n\n // Init U.S. Map in the center of the viewport\n var latlng = new google.maps.LatLng(37.09024, -95.712891);\n var mapSettings = [\n {\n featureType: \"poi\",\n stylers: [\n { visibility: \"off\" }\n ]\n }\n ];\n\n map = new google.maps.Map($('.map-canvas')[0], {\n scrollwheel: false,\n zoom: 4,\n center: latlng,\n mapId: 'default'\n });\n map.mapTypes.set('default', new google.maps.StyledMapType(mapSettings));\n\n var mapdiv = $('.map-canvas').attr('data-locations');\n\n mapdiv = JSON.parse(mapdiv);\n\n var bounds = new google.maps.LatLngBounds();\n\n Object.keys(mapdiv).forEach(function (key) {\n var item = mapdiv[key];\n var position = new google.maps.LatLng(item.latitude, item.longitude);\n var marker;\n var iconImage;\n\n if (item.icon.imageURL) {\n iconImage = document.createElement(\"img\");\n\n iconImage.src = item.icon.imageURL;\n\n marker = new google.maps.marker.AdvancedMarkerElement({\n map: map,\n position: position,\n content: iconImage\n });\n } else {\n var priceTag = document.createElement(\"div\");\n\n priceTag.className = \"store-locator__map-marker\";\n priceTag.textContent = Number(key) + 1;\n\n marker = new google.maps.marker.AdvancedMarkerElement({\n map: map,\n position: position,\n content: priceTag\n });\n }\n\n marker.addListener('click', function () {\n infowindow.setOptions({\n content: item.infoWindowHtml\n });\n infowindow.open(map, marker);\n });\n\n // Create a minimum bound based on a set of storeLocations\n bounds.extend(marker.position);\n });\n // Fit the all the store marks in the center of a minimum bounds when any store has been found.\n if (mapdiv && mapdiv.length !== 0) {\n map.fitBounds(bounds);\n }\n}\n\n/**\n * Renders the results of the search and updates the map\n * @param {Object} data - Response from the server\n */\nfunction updateStoresResults(data) {\n var $resultsDiv = $('.results');\n var $redWingStoreDiv = $('.js-red-wing-store-card');\n var $mapDiv = $('.map-canvas');\n var hasResults = data.stores.length > 0;\n\n if (!hasResults) {\n // show the no results, hide the mobile legend\n $('.store-locator-no-results').show();\n $('.js-store-locator__pin-key__container--mobile').hide();\n } else {\n // Hide the no results, show the mobile legend\n $('.store-locator-no-results').hide();\n $('.js-store-locator__pin-key__container--mobile').show();\n }\n\n $resultsDiv.empty()\n .data('has-results', hasResults)\n .data('radius', data.radius)\n .data('search-key', data.searchKey);\n\n $redWingStoreDiv.empty()\n .data('has-results', hasResults)\n .data('radius', data.radius)\n .data('search-key', data.searchKey);\n\n $mapDiv.attr('data-locations', data.locations);\n\n if ($mapDiv.data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n\n if (data.storesResultsHtml) {\n $resultsDiv.append(data.storesResultsHtml);\n\n var $scrollElement = $(\".js-storeresults\");\n\n if ($(\".js-storeresults\").length <= 0) {\n $scrollElement = $(\".js-storefields\");\n }\n\n if (matchBreakpoints(['default', 'xs-up'])) {\n $('html, body').animate({\n scrollTop: $scrollElement.offset().top\n }, 'slow');\n }\n }\n\n if (data.closestRedWingStore && data.closestRedWingStore.length !== 0) {\n $redWingStoreDiv.append(data.closestRedWingStoreHtml);\n $('.js-red-wing-store-container').removeClass('d-none').addClass('d-block');\n } else {\n $('.js-red-wing-store-container').removeClass('d-block').addClass('d-none');\n }\n}\n\n/**\n * Search for stores with new zip code\n * @param {HTMLElement} element - the target html element\n * @returns {boolean} false to prevent default event\n */\nfunction search() {\n var dialog = $('.in-store-inventory-dialog');\n var spinner = dialog.length ? dialog.spinner() : $.spinner();\n spinner.start();\n var $form = $('form[name=\"storelocator\"]:visible');\n var url = $form.attr('action');\n $('button.detect-location').next('.invalid-feedback').css('display', 'none').removeAttr('role', 'alert');\n\n var payload = $form.serialize();\n\n $.ajax({\n url: url,\n type: $form.attr('method'),\n data: payload,\n dataType: 'json',\n success: function (data) {\n updateStoresResults(data);\n $('.select-store').prop('disabled', true);\n },\n complete: function () {\n spinner.stop();\n }\n });\n return false;\n}\n\nmodule.exports = {\n init: function () {\n if ($('.map-canvas').data('has-google-api')) {\n maps();\n } else {\n $('.store-locator-no-apiKey').show();\n }\n\n // Store the initial data values for popstate purposes\n var originalData = $('.js-original-search').data('original-search');\n if (originalData) {\n history.replaceState(originalData, '', window.location.search);\n }\n\n // Set the Radius drop-down based on the initial value\n if (parseInt($('select.radius').val(), 10) !== parseInt($('.results').attr('data-radius'), 10)) {\n $('select.radius').val(parseInt($('.results').attr('data-radius'), 10));\n }\n\n // Show the no results, hide the mobile legend\n if (!$('.results').data('has-results')) {\n $('.store-locator-no-results').show();\n $('.js-store-locator__pin-key__container--mobile').hide();\n }\n },\n\n detectLocation: function () {\n // clicking on detect location.\n $('.detect-location').on('click', function (e) {\n e.preventDefault();\n $.spinner().start();\n if (!navigator.geolocation) {\n $.spinner().stop();\n return;\n }\n\n $('input[name=\"postalCode\"]').val('');\n\n navigator.geolocation.getCurrentPosition(function (position) {\n var $form = $('form[name=\"storelocator\"]');\n\n var lat = position.coords.latitude;\n var long = position.coords.longitude;\n\n $form.find('input[name=\"lat\"]').val(lat);\n $form.find('input[name=\"long\"]').val(long);\n\n search();\n }, function () {\n $.spinner().stop();\n $('button.detect-location').next('.invalid-feedback').css('display', 'block').attr('role', 'alert');\n });\n });\n },\n\n search: function () {\n $('form.store-locator').on('submit', function (e) {\n e.preventDefault();\n $('.store-locator-container input[name=\"lat\"]').val('');\n $('.store-locator-container input[name=\"long\"]').val('');\n search();\n });\n $('.store-locator-container .btn-storelocator-search').on('click', function (e) {\n e.preventDefault();\n $('.store-locator-container input[name=\"lat\"]').val('');\n $('.store-locator-container input[name=\"long\"]').val('');\n search();\n });\n // Using keyboardAccessibility because the keydown event was also firing the detect-location event above\n keyboardAccessibility(\n '.store-locator-container input[name=\"postalCode\"]',\n {\n 13: function ($inputField) {\n search();\n }\n },\n function () {\n return $(this).parent();\n }\n );\n $('.store-locator-container .store-finder-filters input[type=\"checkbox\"]').on('change', function (e) {\n search();\n });\n },\n\n changeRadius: function () {\n $('.store-locator-container .radius').change(function () {\n search();\n });\n },\n\n clearFilters: function () {\n $('.js-clear-all-filters').on('click', function (e) {\n e.preventDefault();\n $('.store-locator-container input[name=\"postalCode\"]').val('');\n $('.store-locator-container .store-finder-filters input[type=\"checkbox\"]').prop('checked', false);\n $('select[name=\"radius\"]').val($('select[name=\"radius\"] option:first').val());\n search();\n });\n },\n\n selectStore: function () {\n $('.store-locator-container').on('click', '.select-store', (function (e) {\n e.preventDefault();\n var selectedStore = $('.store-locator-container .select-store-input:checked');\n var data = {\n storeID: selectedStore.val(),\n searchRadius: $('#radius').val(),\n searchPostalCode: $('.results').data('search-key').postalCode,\n storeDetailsHtml: selectedStore.siblings('label').find('.store-details').html(),\n event: e\n };\n $('body').trigger('store:selected', data);\n }));\n },\n\n updateSelectStoreButton: function () {\n $('body').on('change', '.select-store-input', (function () {\n $('.select-store').prop('disabled', false);\n }));\n },\n\n windowPopState: function () {\n window.onpopstate = function (event) {\n var data = event.state;\n if (data !== null) {\n updateStoresResults(data);\n\n restoreFormValues({\n radius: data.radius,\n searchKey: data.searchKey\n });\n } else {\n restoreFormValues({\n radius: parseInt($('.results').attr('data-radius'), 10),\n searchKey: JSON.parse($('.results').attr('data-search-key'))\n });\n }\n };\n }\n};\n","/**\n * @function\n * @description Checks if current screen size breakpoint matches with the needed\n * @param {string} breakpoints size name to check\n * @returns {boolean} breakpoints match result\n */\nmodule.exports = function (breakpoints) {\n var screenSize = '';\n var matches = false;\n\n if (window.getComputedStyle) {\n // get screen size as defined in _grid-settings.scss\n screenSize = getComputedStyle(document.querySelector('body'), ':after').content.replace(/[^a-z-]/ig, '');\n matches = (breakpoints.indexOf(screenSize) >= 0 || !screenSize);\n }\n\n return matches;\n};\n","'use strict';\n\nvar processInclude = require('base/util');\n\nwindow.initMap = function () {\n processInclude(require('./services/google'));\n};\n\nwindow.initStoreLocator = function () {\n processInclude(require('./storeLocator'));\n};\n"],"names":["autocomplete","address1Field","postalField","fillInAddress","place","address1","postcode","component","componentType","document","initAutocomplete","$","google","module","autocompleteFormField","autocompleteForm","processInclude","require","matchBreakpoints","keyboardAccessibility","restoreFormValues","data","parseInt","maps","map","infowindow","latlng","mapSettings","mapdiv","JSON","bounds","Object","key","item","position","marker","iconImage","priceTag","Number","updateStoresResults","$resultsDiv","$redWingStoreDiv","$mapDiv","hasResults","$scrollElement","search","dialog","spinner","$form","url","payload","originalData","history","window","e","navigator","lat","long","$inputField","selectedStore","event","breakpoints","screenSize","matches","getComputedStyle"],"mappings":"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"}