-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js.map
1 lines (1 loc) · 192 KB
/
index.js.map
1
{"version":3,"file":"index.js","sources":["../src/globals.js","../src/autocomplete.js","../src/utils.js","../src/markers.js","../src/streetLevel.js","../index.js","../src/addressAutocomplete.js","../src/aerialImagery.js","../src/maplibreFunctions.js","../src/maplibreMap.js","../src/loadMaplibre.js","../index.maplibre.js"],"sourcesContent":["export let mapState = {\r\n maplibreLoaded: false,\r\n openlayersLoaded: false,\r\n openlayersLoading: false,\r\n openlayersReady: undefined,\r\n mapStyleUrl: process.env.API_URL + \".slpy.com/style/slpy-mgl-style.json\",\r\n oldIE: false,\r\n aerialImageryOn: false,\r\n streetLevelOn: false,\r\n};\r\n\r\nexport let settings = {\r\n openlayersFallback: false,\r\n rasterFallback: false,\r\n mapFilter: [],\r\n apiKey: \"\",\r\n language: \"en\"\r\n};\r\n\r\nexport let openlayersParts = {\r\n view: {},\r\n controls: {},\r\n interactions: {},\r\n};\r\n\r\nexport let mapLibraries = {\r\n ol: undefined,\r\n olms: undefined,\r\n maplibregl: undefined\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { settings } from \"./globals.js\";\r\n\r\nexport function addAutocomplete(targetInput, autoOptions, onInputChange) {\r\n if (typeof targetInput === \"string\") {\r\n var inputField = document.getElementById(targetInput);\r\n } else if (\r\n targetInput &&\r\n (targetInput.nodeName.toLowerCase() === \"input\" ||\r\n targetInput.nodeName.toLowerCase() === \"textarea\")\r\n ) {\r\n var inputField = targetInput;\r\n } else {\r\n console.log(\"Target input for autocomplete is not a valid element or id\");\r\n }\r\n var onInputChange = onInputChange === undefined ? \"\" : onInputChange;\r\n var autoCountry = \"US\";\r\n if (autoOptions[\"country\"] !== undefined) {\r\n autoCountry = autoOptions[\"country\"].toLowerCase();\r\n }\r\n var autoKey = \"\";\r\n if (autoOptions[\"apiKey\"] !== undefined) {\r\n autoKey = autoOptions[\"apiKey\"].toLowerCase();\r\n }\r\n var dropdownWidth = inputField.offsetWidth - 6 + \"px\";\r\n if (autoOptions[\"width\"] !== undefined) {\r\n dropdownWidth = autoOptions[\"width\"];\r\n }\r\n var offsetLeft = 3;\r\n if (autoOptions[\"offsetLeft\"] !== undefined) {\r\n offsetLeft = autoOptions[\"offsetLeft\"];\r\n }\r\n var offsetTop = 3;\r\n if (autoOptions[\"offsetTop\"] !== undefined) {\r\n offsetTop = autoOptions[\"offsetTop\"];\r\n }\r\n var autoCompleteType = \"all\";\r\n if (autoOptions[\"autocompleteType\"] !== undefined) {\r\n autoCompleteType = autoOptions[\"autocompleteType\"].toLowerCase();\r\n }\r\n var autoFilter = \"\";\r\n if (autoOptions[\"filter\"] !== undefined) {\r\n autoFilter = \"&filter=\" + autoOptions[\"filter\"].toLowerCase();\r\n }\r\n if (autoOptions[\"language\"] !== undefined) {\r\n settings.language = autoOptions[\"language\"].toLowerCase();\r\n }\r\n var resultsLimit = 10;\r\n if (autoOptions[\"limit\"] !== undefined) {\r\n autoOptions[\"limit\"] = parseInt(autoOptions[\"limit\"]);\r\n if (autoOptions[\"limit\"] < 10 && autoOptions[\"limit\"] > 0) {\r\n resultsLimit = autoOptions[\"limit\"];\r\n } else {\r\n console.log(\"Autocomplete limit is outside of 1-10 range.\");\r\n }\r\n }\r\n var debounceTime = 175;\r\n if (autoOptions[\"debounceTime\"] !== undefined) {\r\n autoOptions[\"debounceTime\"] = parseInt(autoOptions[\"debounceTime\"]);\r\n if (autoOptions[\"debounceTime\"] < 1000 && autoOptions[\"debounceTime\"] > 0) {\r\n debounceTime = autoOptions[\"debounceTime\"];\r\n } else {\r\n console.log(\"Autocomplete debounceTime is outside of 1-1000 range.\");\r\n }\r\n }\r\n var listContainer = document.createElement(\"div\");\r\n listContainer.className = \"apiautodropdown-content\";\r\n listContainer.id = \"apiautodropdownContent \" + inputField.id;\r\n var insertId = inputField;\r\n if (typeof autoOptions[\"insertId\"] !== \"undefined\") {\r\n var insertId = document.getElementById(autoOptions[\"insertId\"]);\r\n insertId.appendChild(listContainer);\r\n } else {\r\n document.body.appendChild(listContainer);\r\n }\r\n function updateListContainerPosition(event) {\r\n var containerPosition = inputField.parentNode.getBoundingClientRect();\r\n var inputFieldRectStart = inputField.getBoundingClientRect();\r\n if (typeof autoOptions[\"insertId\"] !== \"undefined\") {\r\n var inputFieldRect = {\r\n left: inputFieldRectStart.left - containerPosition.left,\r\n top: inputFieldRectStart.top - containerPosition.top,\r\n height: inputFieldRectStart.height\r\n };\r\n } else {\r\n var inputFieldRect = inputField.getBoundingClientRect();\r\n }\r\n var viewportHeight = window.visualViewport\r\n ? window.visualViewport.height\r\n : window.innerHeight;\r\n if (!event || event.type === \"resize\") {\r\n // Set the listContainer's position and dimensions\r\n listContainer.style.position = \"absolute\";\r\n listContainer.style.left =\r\n inputFieldRect.left + offsetLeft + window.pageXOffset + \"px\";\r\n listContainer.style.top =\r\n inputFieldRect.top +\r\n inputFieldRect.height +\r\n window.pageYOffset +\r\n offsetTop +\r\n \"px\";\r\n listContainer.style.width = dropdownWidth;\r\n }\r\n if (!event || event.type === \"scroll\") {\r\n var maxHeight = Math.max(\r\n 165,\r\n viewportHeight -\r\n inputFieldRectStart.top -\r\n inputFieldRect.height -\r\n offsetTop -\r\n 5\r\n );\r\n listContainer.style.maxHeight = maxHeight + \"px\";\r\n }\r\n }\r\n function scrollIfNeeded(element) {\r\n var rect = element.getBoundingClientRect();\r\n var windowHeight =\r\n window.innerHeight || document.documentElement.clientHeight;\r\n var scrollAmount;\r\n if (rect.bottom > windowHeight) {\r\n var elementHeight = rect.height;\r\n var visibleHeight = windowHeight - rect.top;\r\n var scrollToHeight = elementHeight < 165 ? elementHeight : 165;\r\n if (visibleHeight < scrollToHeight) {\r\n scrollAmount = scrollToHeight - visibleHeight;\r\n window.scrollBy(0, scrollAmount);\r\n }\r\n }\r\n }\r\n var lastSelect = 0;\r\n var lastSearch = \"\";\r\n function getClosest(elem, selector) {\r\n for (; elem && elem !== document; elem = elem.parentNode) {\r\n if (\r\n elem.matches ? elem.matches(selector) : elem.msMatchesSelector(selector)\r\n ) {\r\n return elem;\r\n }\r\n }\r\n return null;\r\n }\r\n function addEvent(element, event, handler, useCapture) {\r\n if (element.addEventListener) {\r\n element.addEventListener(event, handler, useCapture);\r\n } else if (element.attachEvent) {\r\n element.attachEvent(\"on\" + event, handler);\r\n }\r\n }\r\n function removeEvent(element, eventType, eventHandler, useCapture) {\r\n if (element.removeEventListener) {\r\n // Modern browsers\r\n element.removeEventListener(eventType, eventHandler, useCapture);\r\n } else if (element.detachEvent) {\r\n // Internet Explorer 8 and older\r\n element.detachEvent(\"on\" + eventType, eventHandler);\r\n }\r\n }\r\n addEvent(\r\n inputField,\r\n \"keydown\",\r\n function (e) {\r\n lastSelect = 0;\r\n if (e.keyCode === 40 || e.keyCode == 9) {\r\n e.preventDefault();\r\n listContainer.getElementsByClassName(\"apiautodropdown-item\")[0].focus();\r\n } else if (e.keyCode == 13) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n }\r\n },\r\n false\r\n );\r\n addEvent(\r\n listContainer,\r\n \"keydown\",\r\n function (e) {\r\n if (e.keyCode === 40 || e.keyCode == 9) {\r\n e.preventDefault();\r\n if (\r\n typeof listContainer.getElementsByClassName(\"apiautodropdown-item\")[\r\n lastSelect + 1\r\n ] !== \"undefined\"\r\n ) {\r\n lastSelect++;\r\n listContainer\r\n .getElementsByClassName(\"apiautodropdown-item\")\r\n [lastSelect].focus();\r\n }\r\n }\r\n if (e.keyCode === 38) {\r\n e.preventDefault();\r\n if (lastSelect > 0) {\r\n lastSelect--;\r\n } else {\r\n setTimeout(function () {\r\n inputField.focus();\r\n }, 10);\r\n }\r\n listContainer\r\n .getElementsByClassName(\"apiautodropdown-item\")\r\n [lastSelect].focus();\r\n }\r\n },\r\n false\r\n );\r\n function createCORSRequest(method, url) {\r\n var xhr = new XMLHttpRequest();\r\n\r\n // Check if the XMLHttpRequest object has the withCredentials property\r\n // (not present in older versions of IE)\r\n if (\"withCredentials\" in xhr) {\r\n xhr.open(method, url, true);\r\n }\r\n // Check if XDomainRequest is available (IE9)\r\n else if (typeof XDomainRequest != \"undefined\") {\r\n xhr = new XDomainRequest();\r\n xhr.open(method, url);\r\n }\r\n else {\r\n // CORS not supported\r\n xhr = null;\r\n }\r\n return xhr;\r\n }\r\n var currentRequest = null;\r\n function makeRequest(url, callback) {\r\n if (currentRequest) {\r\n currentRequest.abort();\r\n }\r\n var xhr = createCORSRequest(\"POST\", url);\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status === 200) {\r\n var obj = JSON.parse(xhr.responseText);\r\n callback(obj);\r\n } else {\r\n console.log('Slpy Api: There was a problem with the request. Make sure the API Key is set correctly and the origin/referer request header matches your whitelisted domains.');\r\n var obj = JSON.parse(xhr.responseText);\r\n callback(obj);\r\n }\r\n currentRequest = null;\r\n }\r\n };\r\n currentRequest = xhr;\r\n xhr.send();\r\n }\r\n var resultsObj = {};\r\n function updateGlobalObj(obj) {\r\n resultsObj = obj;\r\n }\r\n function handleInput(e) {\r\n if (e.keyCode === 13) {\r\n if (listContainer.classList.contains(\"apiautodropdown-content-show\")) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n }\r\n return;\r\n }\r\n if (e.keyCode === 9) {\r\n return;\r\n }\r\n var query = inputField.value.toLowerCase();\r\n if (query.length > 1) {\r\n query = encodeURIComponent(query);\r\n if (query !== lastSearch + \" \" && query !== lastSearch) {\r\n var processDropdown = function processDropdown(obj) {\r\n if (Object.keys(obj).length > 0) {\r\n var hasResults = false;\r\n if (\r\n typeof obj[0] !== \"undefined\" &&\r\n typeof obj[0].focus !== \"undefined\"\r\n ) {\r\n hasResults = true;\r\n listContainer.innerHTML = \"\";\r\n }\r\n Object.keys(obj).forEach(function (key) {\r\n if (\r\n typeof obj[key] !== \"undefined\" &&\r\n typeof obj[key].focus !== \"undefined\" &&\r\n key < resultsLimit\r\n ) {\r\n var ele = document.createElement(\"button\");\r\n ele.className = \"apiautodropdown-item\";\r\n ele.type = \"button\";\r\n var objIcon =\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"apiautodropdown-icon\" width=\"17px\" height=\"13px\" viewBox=\"0 0 448 512\"><!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) -->';\r\n switch (obj[key].quality) {\r\n case 6:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"/></svg>';\r\n break;\r\n case 5:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"/></svg>';\r\n break;\r\n case 4:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"/></svg>';\r\n break;\r\n case 3:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"/></svg>';\r\n break;\r\n case 2:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"/></svg>';\r\n break;\r\n case 1:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"/></svg>';\r\n break;\r\n default:\r\n objIcon =\r\n objIcon +\r\n '<path d=\"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"/></svg>';\r\n break;\r\n }\r\n if (obj[key].focus.indexOf(\",\") > -1) {\r\n ele.innerHTML =\r\n objIcon +\r\n '<div class=\"apiautodropdown-text\">' +\r\n obj[key].focus.replace(\r\n \",\",\r\n '<span class=\"apiautodropdown-muted\">,'\r\n ) +\r\n \"</span></div>\";\r\n } else {\r\n ele.innerHTML =\r\n objIcon +\r\n '<div class=\"apiautodropdown-text\">' +\r\n obj[key].focus +\r\n \"</div>\";\r\n }\r\n ele.setAttribute(\"autocompleteID\", key);\r\n listContainer.appendChild(ele);\r\n }\r\n });\r\n if (hasResults) {\r\n var poweredByLabel = document.createElement(\"div\");\r\n listContainer.appendChild(poweredByLabel);\r\n poweredByLabel.innerHTML =\r\n '<a href=\"https://www.slpy.com\" style=\"color:#888f94; text-decoration:none;\">powered by <span style=\"color:#5e849f;font-size:13px\">Slpy</a>';\r\n poweredByLabel.setAttribute(\r\n \"style\",\r\n \"line-height:13px; font-size: 12px; padding:2px 10px 0px 0px; margin: 0px; text-align:right\"\r\n );\r\n if (\r\n !listContainer.classList.contains(\r\n \"apiautodropdown-content-show\"\r\n )\r\n ) {\r\n listContainer.classList.add(\"apiautodropdown-content-show\");\r\n updateListContainerPosition();\r\n addEvent(window, \"resize\", updateListContainerPosition, false);\r\n addEvent(window, \"scroll\", updateListContainerPosition, false);\r\n scrollIfNeeded(listContainer);\r\n }\r\n }\r\n } else {\r\n if (\r\n listContainer.classList.contains(\"apiautodropdown-content-show\")\r\n ) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n }\r\n }\r\n };\r\n lastSearch = query;\r\n lastSelect = 0;\r\n if (autoCompleteType == \"all\") {\r\n makeRequest(\r\n process.env.API_URL + \".slpy.com/v1/search?autocomplete=admin\" +\r\n autoFilter +\r\n \"&country=\" +\r\n autoCountry +\r\n \"&key=\" +\r\n autoKey +\r\n \"&language=\" +\r\n settings.language +\r\n \"&search=\" +\r\n query,\r\n function (obj) {\r\n if (Object.keys(obj).length < resultsLimit) {\r\n makeRequest(\r\n process.env.API_URL + \".slpy.com/v1/search?autocomplete=address&country=\" +\r\n autoCountry +\r\n \"&key=\" +\r\n autoKey +\r\n \"&language=\" +\r\n settings.language +\r\n \"&search=\" +\r\n query,\r\n function (response) {\r\n if (\r\n typeof obj[0] === \"undefined\" ||\r\n typeof obj[0].focus === \"undefined\" ||\r\n obj[0].focus === \"\"\r\n ) {\r\n obj = response;\r\n } else {\r\n if (\r\n typeof response[0].focus !== \"undefined\" &&\r\n response[0].focus !== \"\"\r\n ) {\r\n var obj1Length = Object.keys(obj).filter(function (\r\n key\r\n ) {\r\n return (\r\n !isNaN(parseInt(key, resultsLimit)) &&\r\n key === String(parseInt(key, resultsLimit))\r\n );\r\n }).length;\r\n for (var key in response) {\r\n if (\r\n Object.prototype.hasOwnProperty.call(response, key)\r\n ) {\r\n var newKey =\r\n parseInt(key, resultsLimit) + obj1Length;\r\n if (newKey < resultsLimit) {\r\n obj[newKey] = response[key];\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n processDropdown(obj);\r\n updateGlobalObj(obj);\r\n }\r\n );\r\n } else {\r\n processDropdown(obj);\r\n updateGlobalObj(obj);\r\n }\r\n }\r\n );\r\n } else {\r\n var url;\r\n if (autoCompleteType == \"admin\") {\r\n url =\r\n process.env.API_URL + \".slpy.com/v1/search?autocomplete=admin\" +\r\n autoFilter +\r\n \"&country=\" +\r\n autoCountry +\r\n \"&key=\" +\r\n autoKey +\r\n \"&language=\" +\r\n settings.language +\r\n \"&search=\" +\r\n query;\r\n } else {\r\n url =\r\n process.env.API_URL + \".slpy.com/v1/search?autocomplete=address&country=\" +\r\n autoCountry +\r\n \"&key=\" +\r\n autoKey +\r\n \"&language=\" +\r\n settings.language +\r\n \"&search=\" +\r\n query;\r\n }\r\n makeRequest(url, function (obj) {\r\n processDropdown(obj);\r\n updateGlobalObj(obj);\r\n });\r\n }\r\n }\r\n } else {\r\n if (listContainer.classList.contains(\"apiautodropdown-content-show\")) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n }\r\n }\r\n }\r\n function debounce(func, timeout) {\r\n if (timeout === undefined) {\r\n timeout = 175;\r\n }\r\n var timer;\r\n return function () {\r\n clearTimeout(timer);\r\n var args = Array.prototype.slice.call(arguments);\r\n timer = setTimeout(\r\n function () {\r\n func.apply(this, args);\r\n }.bind(this),\r\n timeout\r\n );\r\n };\r\n }\r\n var debouncedInput = debounce(handleInput, debounceTime);\r\n addEvent(inputField, \"input\", debouncedInput, false);\r\n var dragging = false;\r\n addEvent(\r\n listContainer,\r\n \"touchstart\",\r\n function (event) {\r\n if (\r\n event.currentTarget.getAttribute(\"id\") ==\r\n \"apiautodropdownContent \" + inputField.id\r\n ) {\r\n dragging = false;\r\n }\r\n },\r\n false\r\n );\r\n addEvent(\r\n listContainer,\r\n \"touchmove\",\r\n function (event) {\r\n if (\r\n event.currentTarget.getAttribute(\"id\") ==\r\n \"apiautodropdownContent \" + inputField.id\r\n ) {\r\n dragging = true;\r\n }\r\n },\r\n false\r\n );\r\n function handleClickOutside(event) {\r\n if (!listContainer.contains(event.target) && event.target !== inputField) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n }\r\n }\r\n addEvent(document, \"click\", handleClickOutside, true);\r\n addEvent(document, \"touchend\", handleClickOutside, true);\r\n function handlerDropdownItemClick(targetInput, listContainer) {\r\n return function (event) {\r\n var dropdownItem = getClosest(event.target, \".apiautodropdown-item\");\r\n if (dropdownItem) {\r\n event.preventDefault();\r\n if (dragging) {\r\n return;\r\n }\r\n if (document.activeElement !== dropdownItem) {\r\n dropdownItem.focus();\r\n }\r\n var txt = dropdownItem.textContent.trim();\r\n lastSearch = txt.toLowerCase();\r\n targetInput.value = txt;\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n var selectedObj = dropdownItem.getAttribute(\"autocompleteID\");\r\n\r\n //do extra stuff\r\n if (typeof onInputChange === \"function\") {\r\n onInputChange(inputField, resultsObj[selectedObj]);\r\n }\r\n } else if (event.target.getAttribute(\"id\") != targetInput.id) {\r\n listContainer.classList.remove(\"apiautodropdown-content-show\");\r\n removeEvent(window, \"resize\", updateListContainerPosition, false);\r\n removeEvent(window, \"scroll\", updateListContainerPosition, false);\r\n }\r\n };\r\n }\r\n var handleDropdownItemClick = handlerDropdownItemClick(\r\n inputField,\r\n listContainer\r\n );\r\n addEvent(listContainer, \"click\", handleDropdownItemClick, true);\r\n addEvent(listContainer, \"touchend\", handleDropdownItemClick, true);\r\n function updateAutocomplete(newOptions) {\r\n if (newOptions[\"country\"] !== undefined) {\r\n autoCountry = newOptions[\"country\"].toLowerCase();\r\n }\r\n if (newOptions[\"autocomplete\"] !== undefined) {\r\n autoCompleteType = newOptions[\"autocomplete\"].toLowerCase();\r\n }\r\n if (newOptions[\"filter\"] !== undefined) {\r\n autoFilter = \"&filter=\" + newOptions[\"filter\"].toLowerCase();\r\n }\r\n removeEvent(inputField, \"input\", debouncedInput, false);\r\n addEvent(inputField, \"input\", debouncedInput, false);\r\n }\r\n return {\r\n updateAutocomplete: updateAutocomplete\r\n };\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { mapState, mapLibraries } from './globals.js'\r\n\r\nexport function isEmptyObj(obj) {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isWebGL2Supported() {\r\n try {\r\n var canvas = document.createElement('canvas');\r\n return !!(window.WebGL2RenderingContext && (canvas.getContext('webgl2') || canvas.getContext('experimental-webgl2')));\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isWebGL1Supported() {\r\n try {\r\n var canvas = document.createElement('canvas');\r\n return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isVectorSupported() {\r\n\r\n //fail on ie 10 and below. ie 10 does support canvas, but causes other failures.\r\n var myNav = navigator.userAgent.toLowerCase();\r\n if (parseInt(myNav.split(\"msie\")[1]) <= 10) {\r\n return false;\r\n }\r\n\r\n function isCanvasSupported() {\r\n var elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('2d'));\r\n }\r\n\r\n // Check if browser can create sufficient number of Canvas contexts (limited in some browsers)\r\n function checkCanvasContextLimit() {\r\n var canvasLimit = 16; // Arbitrary reasonable number\r\n var canvasArray = [];\r\n for (var i = 0; i < canvasLimit; i++) {\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n if (!context) {\r\n console.log(\"Browser has limited Canvas contexts.\");\r\n return false; // Browser hit limit\r\n }\r\n canvasArray.push(canvas); // Retain reference to prevent GC cleaning up canvases\r\n }\r\n return true; // All canvas contexts could be created\r\n }\r\n\r\n // Check if fetch and Promise APIs are supported\r\n function isFetchAndPromiseSupported() {\r\n return 'fetch' in window && 'Promise' in window;\r\n }\r\n\r\n // Check if CORS is supported\r\n function isCORSSupported() {\r\n return 'withCredentials' in new XMLHttpRequest();\r\n }\r\n\r\n // Ensure necessary features are available\r\n return isCanvasSupported() && checkCanvasContextLimit() && isFetchAndPromiseSupported() && isCORSSupported();\r\n}\r\n\r\nexport function loadScript(url) {\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = url;\r\n document.head.appendChild(script);\r\n}\r\n\r\nexport function getJSON(url, success) {\r\n var ud = \"_\" + +new Date(),\r\n script = document.createElement(\"script\"),\r\n head = document.getElementsByTagName(\"head\")[0] || document.documentElement;\r\n window[ud] = function (data) {\r\n head.removeChild(script);\r\n success && success(data);\r\n };\r\n script.src = url.replace(\"callback=?\", \"callback=\" + ud);\r\n head.appendChild(script);\r\n}\r\n\r\nexport function setInteractionOnFocus(div, mapob) {\r\n var mapDivEl = document.getElementById(div);\r\n mapDivEl.style.position = \"relative\";\r\n mapDivEl.tabIndex = 1;\r\n mapDivEl.insertAdjacentHTML(\r\n \"afterbegin\",\r\n '<p id=\"mapOverlayNotice\" style=\"position:absolute;z-index:10;margin-top:20px;width:100%;height:100%;font-weight:bold;font-size:22px;color:rgb(25, 25, 25);display:none;text-align:center;justify-content: center; align-items: center;\"><span style=\"background:white;padding: 10px;border-radius: 5px;box-shadow: 2px 2px 4px rgba(0,0,0,0.3);\">Click the map to pan and zoom.</span></p>'\r\n );\r\n var mapDivNotice = document.getElementById(\"mapOverlayNotice\");\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n if (mapState.openlayersLoaded) {\r\n mapob.getInteractions().forEach(function (interaction) {\r\n if (interaction instanceof mapLibraries.ol.interaction.DragPan || interaction instanceof mapLibraries.ol.interaction.MouseWheelZoom) {\r\n interaction.setActive(false);\r\n }\r\n }, this);\r\n }\r\n mapDivEl.onclick = function () {\r\n mapDivEl.removeEventListener(\"wheel\", handleMapTouch, false);\r\n mapDivEl.removeEventListener(\"touchmove\", handleMapTouch, false);\r\n if (mapState.openlayersLoaded) {\r\n mapob.getInteractions().forEach(function (interaction) {\r\n if (interaction instanceof mapLibraries.ol.interaction.DragPan || interaction instanceof mapLibraries.ol.interaction.MouseWheelZoom) {\r\n interaction.setActive(true);\r\n }\r\n }, this);\r\n }\r\n };\r\n } else {\r\n if (mapState.maplibreLoaded) {\r\n mapob[\"scrollZoom\"].disable();\r\n mapob[\"dragPan\"].disable();\r\n }\r\n mapDivEl.onclick = function () {\r\n mapDivEl.removeEventListener(\"wheel\", handleMapTouch, false);\r\n mapDivEl.removeEventListener(\"touchmove\", handleMapTouch, false);\r\n if (mapState.maplibreLoaded) {\r\n mapob[\"scrollZoom\"].enable();\r\n mapob[\"dragPan\"].enable();\r\n }\r\n };\r\n }\r\n var timer = null;\r\n var handleMapTouch = function handleMapTouch(event) {\r\n if (document.activeElement !== mapDivEl) {\r\n mapDivEl.style.opacity = \"0.7\";\r\n mapDivNotice.style.display = \"flex\";\r\n if (timer !== null) {\r\n clearTimeout(timer);\r\n }\r\n timer = setTimeout(function () {\r\n mapDivNotice.style.display = \"none\";\r\n mapDivEl.style.opacity = \"1\";\r\n }, 500);\r\n }\r\n };\r\n mapDivEl.addEventListener(\"wheel\", handleMapTouch, false);\r\n mapDivEl.addEventListener(\"touchmove\", handleMapTouch, false);\r\n}\r\n\r\nexport function setTransform(transform, map) {\r\n //mgl only\r\n if (typeof map === \"undefined\") {\r\n console.log(\"Map was undefined. The second parameter should be of type Map.\");\r\n return;\r\n }\r\n if (typeof mapLibraries.ol === \"undefined\") {\r\n if (typeof mapState.mapStyleUrl !== \"undefined\") {\r\n var urlParts = mapState.mapStyleUrl.split(\"?\");\r\n var baseUrl = urlParts[0];\r\n var queryString = urlParts[1];\r\n var params = queryString.split(\"&\");\r\n var newParams = [];\r\n for (var i = 0; i < params.length; i++) {\r\n if (params[i].indexOf(\"transform=\") === -1) {\r\n newParams.push(params[i]);\r\n }\r\n }\r\n mapState.mapStyleUrl = baseUrl + \"?\" + newParams.join(\"&\");\r\n if (transform != \"\" && transform != \"default\") {\r\n mapState.mapStyleUrl = mapState.mapStyleUrl + \"&transform=\" + transform;\r\n }\r\n map.setStyle(mapState.mapStyleUrl);\r\n } else {\r\n console.log(\"Could not retrieve original url. mapStyleUrl is undefined.\");\r\n }\r\n } else {\r\n console.log(\"Can not currently set Transform with OpenLayers. Requires MapLibre.\");\r\n }\r\n}\r\n\r\nexport function flyTo(obj, map) {\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n var view = map.getView();\r\n var startPoint = mapLibraries.ol.proj.toLonLat(view.getCenter());\r\n var destination = mapLibraries.ol.proj.fromLonLat([obj.lon, obj.lat]);\r\n var currentZoom = view.getZoom();\r\n var quality = obj.quality;\r\n var done = function done() { };\r\n var parts = 2;\r\n var called = false;\r\n } else {\r\n var getcenter = map.getCenter();\r\n var startPoint = Object.values(getcenter);\r\n var destination = [obj.lon, obj.lat];\r\n var currentZoom = map.getZoom();\r\n }\r\n var zoom = currentZoom;\r\n var quality = obj.quality;\r\n var distance = distanceInKM(obj.lat, obj.lon, startPoint[1], startPoint[0]);\r\n var duration = 1000;\r\n var topZoom = zoom - 1;\r\n switch (true) {\r\n case distance < 1:\r\n if (zoom > 16) {\r\n topZoom = 16;\r\n }\r\n break;\r\n case distance < 5:\r\n if (zoom > 15) {\r\n topZoom = 15;\r\n }\r\n break;\r\n case distance < 10:\r\n if (zoom > 14) {\r\n topZoom = 14;\r\n }\r\n break;\r\n case distance < 40:\r\n if (zoom > 13) {\r\n topZoom = 13;\r\n }\r\n break;\r\n case distance < 50:\r\n if (zoom > 12) {\r\n topZoom = 12;\r\n }\r\n duration *= 2;\r\n break;\r\n case distance < 150:\r\n if (zoom > 11) {\r\n topZoom = 11;\r\n }\r\n duration *= 2;\r\n break;\r\n case distance < 250:\r\n if (zoom > 10) {\r\n topZoom = 10;\r\n }\r\n duration *= 2;\r\n break;\r\n case distance < 400:\r\n if (zoom > 9) {\r\n topZoom = 9;\r\n }\r\n duration *= 3;\r\n break;\r\n case distance < 700:\r\n if (zoom > 8) {\r\n topZoom = 8;\r\n }\r\n duration *= 3;\r\n break;\r\n case distance < 1000:\r\n if (zoom > 7) {\r\n topZoom = 7;\r\n }\r\n duration *= 3;\r\n break;\r\n case distance < 2000:\r\n if (zoom > 6) {\r\n topZoom = 6;\r\n }\r\n duration *= 4;\r\n break;\r\n case distance < 3500:\r\n if (zoom > 5) {\r\n topZoom = 5;\r\n }\r\n duration *= 4;\r\n break;\r\n case distance < 5000:\r\n if (zoom > 4) {\r\n topZoom = 4;\r\n }\r\n duration *= 4;\r\n break;\r\n case distance >= 5000:\r\n if (zoom > 3) {\r\n topZoom = 3;\r\n }\r\n duration *= 4;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (zoom < 13) {\r\n zoom = 13;\r\n }\r\n switch (parseInt(quality)) {\r\n case 1:\r\n zoom = 4;\r\n break;\r\n case 2:\r\n zoom = 6;\r\n break;\r\n case 3:\r\n zoom = 8;\r\n break;\r\n case 4:\r\n zoom = 10;\r\n break;\r\n case 5:\r\n zoom = 12;\r\n break;\r\n case 6:\r\n zoom = 13;\r\n break;\r\n case 7:\r\n zoom = 16;\r\n break;\r\n case 8:\r\n zoom = 16.5;\r\n break;\r\n case 9:\r\n case 10:\r\n zoom = 17;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (topZoom >= zoom) {\r\n topZoom = zoom - 1;\r\n }\r\n if (currentZoom >= zoom) {\r\n topZoom = zoom;\r\n }\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n var callback = function callback(complete) {\r\n --parts;\r\n if (called) {\r\n return;\r\n }\r\n if (parts === 0 || !complete) {\r\n called = true;\r\n done(complete);\r\n }\r\n };\r\n view.animate(\r\n {\r\n center: destination,\r\n duration: duration\r\n },\r\n callback\r\n );\r\n view.animate(\r\n {\r\n zoom: topZoom,\r\n duration: duration\r\n },\r\n {\r\n zoom: zoom,\r\n duration: duration / 2\r\n },\r\n callback\r\n );\r\n } else {\r\n if (obj.boundingbox) {\r\n var bbox = obj.boundingbox;\r\n map.fitBounds([[bbox[2], bbox[0]],[bbox[3], bbox[1]]], {maxZoom:18, padding: {top: 15, bottom:15, left: 15, right: 15}});\r\n } else {\r\n var flyOpt = {\r\n center: destination,\r\n zoom: zoom,\r\n maxDuration: duration * 2.5\r\n }\r\n if (zoom != topZoom) {\r\n // flyOpt.minZoom = topZoom\r\n }\r\n map.flyTo(\r\n flyOpt\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport function toRad(x) {\r\n return (x * Math.PI) / 180;\r\n}\r\n\r\nexport function distanceInKM(lat1, lon1, lat2, lon2) {\r\n var R = 6371; // km\r\n var dLon = toRad(lon2 - lon1),\r\n lat1 = toRad(lat1),\r\n lat2 = toRad(lat2),\r\n d =\r\n Math.acos(\r\n Math.sin(lat1) * Math.sin(lat2) +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.cos(dLon)\r\n ) * R;\r\n return d;\r\n}\r\n\r\nexport function distanceInMI(lat1, lon1, lat2, lon2) {\r\n var R = 3959; // miles\r\n var dLon = toRad(lon2 - lon1),\r\n lat1 = toRad(lat1),\r\n lat2 = toRad(lat2),\r\n d =\r\n Math.acos(\r\n Math.sin(lat1) * Math.sin(lat2) +\r\n Math.cos(lat1) * Math.cos(lat2) * Math.cos(dLon)\r\n ) * R;\r\n return d;\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { mapLibraries } from './globals.js'\r\nimport { distanceInKM } from './utils.js';\r\n\r\nexport let hasPopupInfo = false;\r\nexport let markerVectorSource;\r\nexport let markerVectorLayer;\r\nexport let markerOverlay;\r\n\r\nexport function addMarkers(markers, map, style) {\r\n var style = style === undefined ? \"default\" : style;\r\n var markerFeature = [];\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n for (var i = 0; i < markers.length; i++) {\r\n if (style == \"default\") {\r\n markerFeature.push(\r\n createMarker(\r\n [markers[i].data[1], markers[i].data[0]],\r\n markers[i].name,\r\n i,\r\n style\r\n )\r\n );\r\n } else {\r\n var markerFeatures = createMarker(\r\n [markers[i].data[1], markers[i].data[0]],\r\n markers[i].name,\r\n i,\r\n style\r\n );\r\n markerFeature.push(markerFeatures[0], markerFeatures[1]);\r\n }\r\n if (typeof markers[i].data[2] !== \"undefined\") {\r\n if (markers[i].data[2] !== \"\") {\r\n hasPopupInfo = true;\r\n }\r\n }\r\n }\r\n markerVectorSource = new mapLibraries.ol.source.Vector({\r\n features: markerFeature\r\n });\r\n markerVectorLayer = new mapLibraries.ol.layer.Vector({\r\n source: markerVectorSource,\r\n className: \"ol-markers\"\r\n });\r\n map.once(\"rendercomplete\", function (event) {\r\n map.addLayer(markerVectorLayer);\r\n });\r\n if (hasPopupInfo) {\r\n if (document.getElementById(\"popup\") == null) {\r\n var popupe = document.createElement(\"div\");\r\n popupe.innerHTML =\r\n '<a href=\"#\" id=\"popup-closer\" class=\"ol-popup-closer\"></a><div id=\"popup-content\"></div>';\r\n popupe.id = \"popup\";\r\n popupe.classList.add(\"ol-popup\");\r\n map.getTargetElement().appendChild(popupe);\r\n }\r\n var container = document.getElementById(\"popup\");\r\n var content = document.getElementById(\"popup-content\");\r\n var closer = document.getElementById(\"popup-closer\");\r\n markerOverlay = new mapLibraries.ol.Overlay({\r\n element: container,\r\n autoPan: true,\r\n position: undefined,\r\n autoPanAnimation: {\r\n duration: 250\r\n }\r\n });\r\n map.addOverlay(markerOverlay);\r\n closer.onclick = function () {\r\n markerOverlay.setPosition(undefined);\r\n closer.blur();\r\n return false;\r\n };\r\n map.on(\"singleclick\", function (evt) {\r\n var id = map.forEachFeatureAtPixel(evt.pixel, function (feature) {\r\n return feature.getId();\r\n });\r\n if (typeof id === \"string\") {\r\n markerIndex = id.replace(\"marker:\", \"\");\r\n if (\r\n markerIndex >= 0 &&\r\n markers[markerIndex].data[2] != \"\" &&\r\n typeof markers[markerIndex].data[2] !== \"undefined\"\r\n ) {\r\n container.style.display = \"block\";\r\n content.innerHTML = markers[markerIndex].data[2];\r\n markerOverlay.setPosition(\r\n mapLibraries.ol.proj.fromLonLat([\r\n markers[markerIndex].data[1],\r\n markers[markerIndex].data[0]\r\n ])\r\n );\r\n } else {\r\n container.style.display = \"none\";\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n\r\n var icon =\r\n '<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d=\"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"/></svg>';\r\n var iconSolid =\r\n '<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d=\"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"/></svg>';\r\n for (var i = 0; i < markers.length; i++) {\r\n var iconStyle =\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"marker-' +\r\n parseInt([i]).toString() +\r\n '\" style=\"fill: #a11c25;width:27px; height:36px;stroke:#fff;stroke-width:15px;filter: drop-shadow(1px 2px 1px rgba(0,0,0,0.4));\" viewBox=\"0 0 384 512\">';\r\n hasPopupInfo = false;\r\n if (typeof markers[i].data[2] !== \"undefined\") {\r\n if (markers[i].data[2] !== \"\") {\r\n hasPopupInfo = true;\r\n }\r\n }\r\n if (style == \"default\") {\r\n if (hasPopupInfo) {\r\n var falayers = document.createElement(\"span\");\r\n falayers.innerHTML = iconStyle + icon;\r\n new mapLibraries.maplibregl.Marker({\r\n element: falayers,\r\n anchor: \"bottom\",\r\n offset: [0, 5]\r\n })\r\n .setLngLat([markers[i].data[1], markers[i].data[0]])\r\n .setPopup(\r\n new mapLibraries.maplibregl.Popup({\r\n offset: [0, -36],\r\n className: \"popup-\" + [i]\r\n }).setHTML(markers[i].data[2])\r\n )\r\n .addTo(map);\r\n } else {\r\n var falayers = document.createElement(\"span\");\r\n falayers.innerHTML = iconStyle + icon;\r\n new mapLibraries.maplibregl.Marker({\r\n element: falayers,\r\n anchor: \"bottom\",\r\n offset: [0, 5]\r\n })\r\n .setLngLat([markers[i].data[1], markers[i].data[0]])\r\n .addTo(map);\r\n }\r\n } else {\r\n var markerTextStyle =\r\n 'position: absolute;font-weight: bold;top:5px;display: block; width:27px;left:0px;font-size:14px;color:white;text-align:center;text-shadow:-1px -1px 0 rgba(0,0,0,0.25), 1px -1px 0 rgba(0,0,0,0.25), -1px 1px 0 rgba(0,0,0,0.25), 1px 1px 0 rgba(0,0,0,0.25);font-family:\"Open Sans\", \"Arial\", \"Verdana\", \"sans-serif\"';\r\n if (hasPopupInfo) {\r\n var falayers = document.createElement(\"span\");\r\n falayers.innerHTML = iconStyle + iconSolid;\r\n var falayertext = document.createElement(\"span\");\r\n falayertext.innerHTML = (parseInt([i]) + 1).toString();\r\n falayertext.setAttribute(\"style\", markerTextStyle);\r\n falayers.appendChild(falayertext);\r\n new mapLibraries.maplibregl.Marker({\r\n element: falayers,\r\n anchor: \"bottom\",\r\n offset: [0, 5]\r\n })\r\n .setLngLat([markers[i].data[1], markers[i].data[0]])\r\n .setPopup(\r\n new mapLibraries.maplibregl.Popup({\r\n offset: [0, -36],\r\n className: \"popup-\" + [i]\r\n }).setHTML(markers[i].data[2])\r\n )\r\n .addTo(map);\r\n } else {\r\n var falayers = document.createElement(\"span\");\r\n falayers.innerHTML = iconStyle + iconSolid;\r\n var falayertext = document.createElement(\"span\");\r\n falayertext.innerHTML = (parseInt([i]) + 1).toString();\r\n falayertext.setAttribute(\"style\", markerTextStyle);\r\n falayers.appendChild(falayertext);\r\n new mapLibraries.maplibregl.Marker({\r\n element: falayers,\r\n anchor: \"bottom\",\r\n offset: [0, 5]\r\n })\r\n .setLngLat([markers[i].data[1], markers[i].data[0]])\r\n .addTo(map);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function highlightMarker(markerIndex) {\r\n if (typeof markerVectorLayer !== \"undefined\") {\r\n var featureToHighlight = markerVectorLayer\r\n .getSource()\r\n .getFeatureById(\"marker:\" + markerIndex);\r\n if (featureToHighlight !== null) {\r\n var featureImage = featureToHighlight.getStyle().getImage();\r\n if (\r\n typeof featureImage.iconImage_ !== \"undefined\" &&\r\n typeof featureImage.iconImage_.color_ !== \"undefined\"\r\n ) {\r\n featureImage.iconImage_.color_ = [0, 130, 200, 1];\r\n }\r\n featureToHighlight.getStyle().setZIndex(1);\r\n }\r\n } else {\r\n var hmarker = document.getElementById(\"marker-\" + markerIndex);\r\n if (hmarker) {\r\n hmarker.style.fill = \"#0082c8\";\r\n hmarker.parentElement.style.zIndex = 1;\r\n }\r\n }\r\n}\r\n\r\nexport function dehighlightMarker(markerIndex) {\r\n if (typeof markerVectorLayer !== \"undefined\") {\r\n var featureToHighlight = markerVectorLayer\r\n .getSource()\r\n .getFeatureById(\"marker:\" + markerIndex);\r\n if (featureToHighlight !== null) {\r\n var featureImage = featureToHighlight.getStyle().getImage();\r\n if (\r\n typeof featureImage.iconImage_ !== \"undefined\" &&\r\n typeof featureImage.iconImage_.color_ !== \"undefined\"\r\n ) {\r\n featureImage.iconImage_.color_ = [161, 28, 37, 1];\r\n }\r\n featureToHighlight.getStyle().setZIndex(0);\r\n }\r\n } else {\r\n var hmarker = document.getElementById(\"marker-\" + markerIndex);\r\n if (hmarker) {\r\n hmarker.style.fill = \"#a11c25\";\r\n hmarker.parentElement.style.zIndex = 0;\r\n }\r\n }\r\n}\r\n\r\nexport function removeMarker(markers, markerIndex) {\r\n var markerIndex = markerIndex === undefined ? -1 : markerIndex;\r\n if (markerIndex < 0) {\r\n markerIndex = 0;\r\n }\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n if (typeof markerVectorLayer !== \"undefined\") {\r\n var featureToClose = markerVectorLayer\r\n .getSource()\r\n .getFeatureById(\"marker:\" + markerIndex);\r\n if (featureToClose !== null) {\r\n markerVectorSource.removeFeature(featureToClose);\r\n }\r\n }\r\n if (typeof markers[markerIndex] !== \"undefined\") {\r\n if (typeof markers[markerIndex].data[2] !== \"undefined\") {\r\n if (markers[markerIndex].data[2] !== \"\") {\r\n var container = document.getElementById(\"popup\");\r\n container.style.display = \"none\";\r\n }\r\n }\r\n }\r\n } else {\r\n var hmarker = document.getElementById(\"marker-\" + markerIndex);\r\n if (hmarker) {\r\n var hpopup = document.querySelector(\r\n \".maplibre-popup.popup-\" +\r\n markerIndex\r\n );\r\n if (hpopup) {\r\n hpopup.remove();\r\n }\r\n hmarker.parentElement.remove();\r\n }\r\n }\r\n}\r\n\r\nexport function createMarker(lonLat, name, id, style) {\r\n var markerFeature = new mapLibraries.ol.Feature({\r\n geometry: new mapLibraries.ol.geom.Point(mapLibraries.ol.proj.fromLonLat(lonLat)),\r\n name: name\r\n });\r\n var icon = window.btoa(\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"fill: #fff;display:box;stroke:#fff;stroke-width:15px;filter: drop-shadow(1px 2px 1px rgba(0,0,0,0.4));\" width=\"27px\" height=\"36px\" viewBox=\"0 0 384 512\"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d=\"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"/></svg>'\r\n );\r\n var iconSolid = window.btoa(\r\n '<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"fill: #fff; display:box;stroke:#fff;stroke-width:15px;filter: drop-shadow(1px 2px 1px rgba(0,0,0,0.4));\" width=\"27px\" height=\"36px\" viewBox=\"0 0 384 512\"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d=\"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"/></svg>'\r\n );\r\n markerFeature.setId(\"marker:\" + id);\r\n if (style == \"default\") {\r\n var markerStyle = new mapLibraries.ol.style.Style({\r\n image: new mapLibraries.ol.style.Icon({\r\n opacity: 1,\r\n color: \"#a11c25\",\r\n anchor: [0.5, 36],\r\n anchorXUnits: \"fraction\",\r\n anchorYUnits: \"pixels\",\r\n src: \"data:image/svg+xml;base64,\" + icon,\r\n imgSize: ((window.document.documentMode) ? [27, 36] : null)\r\n })\r\n });\r\n markerFeature.setStyle(markerStyle);\r\n return markerFeature;\r\n } else {\r\n var markerStyle = new mapLibraries.ol.style.Style({\r\n image: new mapLibraries.ol.style.Icon({\r\n opacity: 1,\r\n color: \"#a11c25\",\r\n anchor: [0.5, 36],\r\n anchorXUnits: \"fraction\",\r\n anchorYUnits: \"pixels\",\r\n src: \"data:image/svg+xml;base64,\" + iconSolid,\r\n imgSize: ((window.document.documentMode) ? [27, 36] : null)\r\n })\r\n });\r\n var markerTextStyle = new mapLibraries.ol.style.Style({\r\n text: new mapLibraries.ol.style.Text({\r\n text: (id + 1).toString(),\r\n fill: new mapLibraries.ol.style.Fill({\r\n color: \"#fff\"\r\n }),\r\n stroke: new mapLibraries.ol.style.Stroke({\r\n color: \"rgba(0,0,0,0.1)\",\r\n width: 1.5\r\n }),\r\n offsetY: -10,\r\n textBaseline: \"bottom\",\r\n textAlign: \"center\",\r\n font: 'Normal 700 12px \"Open Sans\", \"Arial\", \"Verdana\", \"sans-serif\"'\r\n })\r\n });\r\n var markerTextFeature = new mapLibraries.ol.Feature({\r\n geometry: new mapLibraries.ol.geom.Point(mapLibraries.ol.proj.fromLonLat(lonLat)),\r\n name: name\r\n });\r\n markerTextFeature.setStyle(markerTextStyle);\r\n markerFeature.setStyle(markerStyle);\r\n return [markerFeature, markerTextFeature];\r\n }\r\n}\r\n\r\nexport function setMarkerOpen(markers, markerIndex) {\r\n var markerIndex = markerIndex === undefined ? -1 : markerIndex;\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n var container = document.getElementById(\"popup\");\r\n var content = document.getElementById(\"popup-content\");\r\n //var closer = document.getElementById('popup-closer');\r\n if (markerIndex < 0) {\r\n markerIndex = 0;\r\n }\r\n container.style.display = \"block\";\r\n content.innerHTML = markers[markerIndex].data[2];\r\n //openlayers throws error on autopan = true. temporarily catching error for now.\r\n try {\r\n markerOverlay.setPosition(\r\n mapLibraries.ol.proj.fromLonLat([\r\n markers[markerIndex].data[1],\r\n markers[markerIndex].data[0]\r\n ])\r\n );\r\n } catch (e) { }\r\n } else {\r\n var hmarker = document.getElementById(\"marker-\" + markerIndex);\r\n if (hmarker) {\r\n hmarker.parentElement.click();\r\n }\r\n }\r\n}\r\n\r\nexport function quickMarkersCenter(markers) {\r\n var lat = 0,\r\n lng = 0,\r\n latAr = [],\r\n lonAr = [];\r\n var num_coords = markers.length;\r\n for (var i = 0; i < num_coords; ++i) {\r\n lat += Number(markers[i].data[0]);\r\n lng += Number(markers[i].data[1]);\r\n latAr.push(markers[i].data[0]);\r\n lonAr.push(markers[i].data[1]);\r\n }\r\n var distance = distanceInKM(\r\n Math.max.apply(Math, latAr),\r\n Math.max.apply(Math, lonAr),\r\n Math.min.apply(Math, latAr),\r\n Math.min.apply(Math, lonAr)\r\n );\r\n var zoom = 13;\r\n switch (true) {\r\n case distance < 1:\r\n zoom = 14;\r\n break;\r\n case distance < 4:\r\n zoom = 13;\r\n break;\r\n case distance < 10:\r\n zoom = 12;\r\n break;\r\n case distance < 20:\r\n zoom = 11;\r\n break;\r\n case distance < 40:\r\n zoom = 10;\r\n break;\r\n case distance < 100:\r\n zoom = 9;\r\n break;\r\n case distance < 250:\r\n zoom = 8;\r\n break;\r\n case distance < 400:\r\n zoom = 7;\r\n break;\r\n case distance < 750:\r\n zoom = 6;\r\n break;\r\n case distance < 2000:\r\n zoom = 5;\r\n break;\r\n case distance < 4000:\r\n zoom = 4;\r\n break;\r\n case distance >= 4000:\r\n zoom = 3;\r\n break;\r\n default:\r\n break;\r\n }\r\n lat /= num_coords;\r\n lng /= num_coords;\r\n return [lat, lng, zoom];\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { loadScript, distanceInKM } from \"./utils.js\";\r\nimport { mapState, mapLibraries } from \"./globals.js\";\r\n\r\nexport function waitForMapillary(mpyKey, map) {\r\n if (typeof mapillary === \"undefined\") {\r\n setTimeout(function () {\r\n waitForMapillary(mpyKey, map);\r\n }, 100);\r\n } else {\r\n addMapillary(mpyKey, map);\r\n }\r\n}\r\n\r\nexport function onMapillaryChange(change) {\r\n var evt = document.createEvent(\"Event\");\r\n evt.state = change;\r\n evt.initEvent(\"StreetLevel\", true, false);\r\n window.dispatchEvent(evt);\r\n}\r\n\r\nexport function addMapillary(MapillaryKey, map) {\r\n var ua = window.navigator.userAgent;\r\n var msie = ua.indexOf(\"MSIE \");\r\n if (msie > 0) {\r\n // IE 10 or mapLibraries.older not compatible with Mapillary\r\n onMapillaryChange(\"failed load\");\r\n return;\r\n }\r\n var trident = ua.indexOf(\"Trident/\");\r\n if (trident > 0) {\r\n if (typeof mapLibraries.ol === \"undefined\") {\r\n //IE 11 only works well with OpenLayers\r\n onMapillaryChange(\"failed load\");\r\n return;\r\n }\r\n }\r\n if (typeof mapillary === \"undefined\") {\r\n //console.error(\"Slpy Developer: Street Level requires Mapillary 4.0+. Please upgrade your library and obtain a new token, as Mapillary has disabled previous methods and keys.\");\r\n //attempt to load mapillary\r\n var mplycss = document.createElement(\"link\");\r\n mplycss.href = \"https://unpkg.com/mapillary-js@4.1.1/dist/mapillary.css\";\r\n mplycss.rel = \"stylesheet\";\r\n document.head.appendChild(mplycss);\r\n loadScript(\"https://unpkg.com/mapillary-js@4.1.1/dist/mapillary.js\");\r\n waitForMapillary(MapillaryKey, map);\r\n }\r\n var mlyContainer = document.getElementById(\"mly\");\r\n var maptarContainer = undefined;\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n maptarContainer = map.getTargetElement();\r\n } else {\r\n maptarContainer = map.getContainer();\r\n }\r\n if (!mlyContainer) {\r\n // user didnt add mapillary divs, so we will try for them\r\n var newDiv = document.createElement('div');\r\n newDiv.id = 'map-mapillary';\r\n \r\n // Insert the new outer div before the old element\r\n maptarContainer.parentNode.insertBefore(newDiv, maptarContainer);\r\n \r\n // Move the old element into the new outer div\r\n newDiv.appendChild(maptarContainer);\r\n \r\n // Create the new inner div\r\n var mlyDiv = document.createElement('div');\r\n mlyDiv.id = 'mly';\r\n \r\n // Insert the new inner div into the new outer div\r\n newDiv.appendChild(mlyDiv);\r\n }\r\n \r\n if (typeof mapillary !== \"undefined\") {\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n onMapillaryChange(\"loaded\");\r\n var streetLevelIcon = new mapLibraries.ol.style.Style({\r\n text: new mapLibraries.ol.style.Text({\r\n text: \"\\uF124\",\r\n scale: 1,\r\n font: 'Normal 900 18px \"Font Awesome 5 Free\"',\r\n fill: new mapLibraries.ol.style.Fill({\r\n color: \"#a11d26\"\r\n }),\r\n stroke: new mapLibraries.ol.style.Stroke({\r\n color: \"white\",\r\n width: 3\r\n })\r\n })\r\n });\r\n var updateBearingStyle = function updateBearingStyle(bearing) {\r\n return [new mapLibraries.ol.style.Style({\r\n text: new mapLibraries.ol.style.Text({\r\n text: \"\\uF124\",\r\n scale: 1,\r\n font: 'Normal 900 18px \"Font Awesome 5 Free\"',\r\n textBaseline: \"middle\",\r\n textAlign: \"center\",\r\n rotation: (bearing * Math.PI) / 180 - 45,\r\n fill: new mapLibraries.ol.style.Fill({\r\n color: \"#a11d26\"\r\n }),\r\n stroke: new mapLibraries.ol.style.Stroke({\r\n color: \"white\",\r\n width: 3\r\n })\r\n })\r\n })];\r\n };\r\n var photoDot = new mapLibraries.ol.style.Style({\r\n image: new mapLibraries.ol.style.Circle({\r\n fill: new mapLibraries.ol.style.Fill({\r\n color: \"rgba(53, 175, 109,0.2)\"\r\n }),\r\n radius: 4\r\n })\r\n });\r\n var photoDotAerial = new mapLibraries.ol.style.Style({\r\n image: new mapLibraries.ol.style.Circle({\r\n fill: new mapLibraries.ol.style.Fill({\r\n color: \"rgba(53, 175, 109,0.5)\"\r\n }),\r\n radius: 4\r\n })\r\n });\r\n var mapillarySource = new mapLibraries.ol.layer.VectorTile({\r\n source: new mapLibraries.ol.source.VectorTile({\r\n format: new mapLibraries.ol.format.MVT(),\r\n tileGrid: mapLibraries.ol.tilegrid.createXYZ({\r\n maxZoom: 14\r\n }),\r\n tilePixelRatio: 16,\r\n maxZoom: 14,\r\n url:\r\n \"https://tiles.mapillary.com/maps/vtp/mly1_public/2/{z}/{x}/{y}?access_token=\" +\r\n MapillaryKey\r\n }),\r\n style: photoDot,\r\n minZoom: 14\r\n });\r\n\r\n class streetLevelButton extends mapLibraries.ol.control.Control {\r\n constructor(opt_options) {\r\n var options = opt_options || {};\r\n var SLbutton = document.createElement(\"button\");\r\n SLbutton.style.cssText = 'font: 900 1.14em \"Font Awesome 5 Free\"';\r\n SLbutton.innerHTML = \"\\uF554\";\r\n var element = document.createElement(\"div\");\r\n element.className = \"ol-control\";\r\n element.style.cssText =\r\n \"bottom: 55px; right: 8px; margin-bottom: 50px\";\r\n element.appendChild(SLbutton);\r\n super({\r\n element: element,\r\n target: options.target\r\n });\r\n SLbutton.addEventListener(\r\n \"click\",\r\n this.handleStreetLevel.bind(this),\r\n false\r\n );\r\n }\r\n handleStreetLevel() {\r\n if (map.getView().getZoom() < 12 && !mapState.streetLevelOn) {\r\n alert(\"Zoom in to get Street Level Imagery\");\r\n } else {\r\n var mpjscanvas = document.getElementsByClassName(\r\n \"mapillary-js-canvas\"\r\n )[0];\r\n var mpjsdom =\r\n document.getElementsByClassName(\"mapillary-js-dom\")[0];\r\n if (mapState.streetLevelOn) {\r\n mapillarySource.setStyle(photoDot);\r\n this.getMap().removeLayer(mapillarySource);\r\n this.getMap().removeLayer(movingPointLayer);\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.height = \"100%\";\r\n maptarContainer.style.width = \"100%\";\r\n map.updateSize();\r\n movingPointLayer.setVisible(false);\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n onMapillaryChange(\"closed\");\r\n mapState.streetLevelOn = false;\r\n } else {\r\n var centerCurrent = mapLibraries.ol.proj.toLonLat(map.getView().getCenter());\r\n var bboxCurrent = mapLibraries.ol.proj.transformExtent(\r\n map.getView().calculateExtent(map.getSize()),\r\n \"EPSG:900913\",\r\n \"EPSG:4326\"\r\n );\r\n var bboxRad =\r\n distanceInKM(\r\n bboxCurrent[0],\r\n bboxCurrent[1],\r\n bboxCurrent[2],\r\n bboxCurrent[3]\r\n ) * 1000;\r\n var maptarParent = maptarContainer.parentNode;\r\n var xmlhttp = new XMLHttpRequest();\r\n xmlhttp.onreadystatechange = function () {\r\n if (this.readyState == 4 && this.status == 200) {\r\n var myArr = JSON.parse(this.responseText);\r\n if (typeof myArr.data[0] !== \"undefined\") {\r\n onMapillaryChange(\"active\");\r\n map.addLayer(mapillarySource);\r\n map.addLayer(movingPointLayer);\r\n if (typeof mapState.aerialImageryOn !== \"undefined\") {\r\n if (mapState.aerialImageryOn) {\r\n mapillarySource.setStyle(photoDotAerial);\r\n }\r\n }\r\n mapState.streetLevelOn = true;\r\n mly.moveTo(myArr.data[0].id)[\"catch\"](function (reason) {\r\n console.log(\"Mapillary missing image\");\r\n });\r\n featureOverlay.setStyle(\r\n updateBearingStyle(myArr.data[0].compass_angle)\r\n );\r\n if (!movingPointLayer.getVisible()) {\r\n movingPointLayer.setVisible(true);\r\n }\r\n if (map.getView().getZoom() < 18.5) {\r\n map.getView().animate({\r\n zoom: 18.5,\r\n duration: 250\r\n });\r\n }\r\n mpjscanvas = document.getElementsByClassName(\r\n \"mapillary-js-canvas\"\r\n )[0];\r\n mpjsdom =\r\n document.getElementsByClassName(\"mapillary-js-dom\")[0];\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"initial\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"initial\";\r\n }\r\n } else {\r\n onMapillaryChange(\"closed\");\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.width = \"100%\";\r\n maptarContainer.style.height = \"100%\";\r\n map.updateSize();\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n if (map.getView().getZoom() <= 15) {\r\n alert(\r\n \"No street level images available here. Try zooming in.\"\r\n );\r\n } else {\r\n alert(\"No street level images available here.\");\r\n }\r\n }\r\n } else if (this.readyState == 4) {\r\n onMapillaryChange(\"closed\");\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.width = \"100%\";\r\n maptarContainer.style.height = \"100%\";\r\n map.updateSize();\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n console.log(\"Could not connect to Mapillary\");\r\n }\r\n };\r\n onMapillaryChange(\"opened\");\r\n mlyContainer.style.display = \"block\";\r\n if (maptarParent.offsetHeight > maptarParent.offsetWidth) {\r\n maptarContainer.style.height = \"35%\";\r\n maptarContainer.style.width = \"100%\";\r\n mlyContainer.style.width = \"100%\";\r\n mlyContainer.style.height = \"65%\";\r\n } else {\r\n maptarContainer.style.width = \"35%\";\r\n maptarContainer.style.height = \"100%\";\r\n mlyContainer.style.height = \"100%\";\r\n mlyContainer.style.width = \"65%\";\r\n }\r\n mly.resize();\r\n map.updateSize();\r\n xmlhttp.open(\r\n \"GET\",\r\n \"https://graph.mapillary.com/images?access_token=\" +\r\n MapillaryKey +\r\n \"&fields=image_key,compass_angle&limit=1&closeto=\" +\r\n centerCurrent.toString() +\r\n \"&bbox=\" +\r\n bboxCurrent.toString(),\r\n true\r\n );\r\n //xmlhttp.open(\"GET\", 'https://a.mapillary.com/v3/images?client_id='+MapillaryKey+'&closeto='+centerCurrent.toString()+'&bbox='+bboxCurrent.toString()+\"&radius=\"+bboxRad.toFixed(0), true);\r\n xmlhttp.send();\r\n }\r\n }\r\n }\r\n }\r\n map.addControl(new streetLevelButton());\r\n var pointFeature = new mapLibraries.ol.Feature({\r\n geometry: new mapLibraries.ol.geom.Point(ol.proj.fromLonLat(center))\r\n });\r\n pointFeature.setStyle([streetLevelIcon]);\r\n var movingPointLayer = new mapLibraries.ol.layer.Vector({\r\n source: new mapLibraries.ol.source.Vector({\r\n features: [pointFeature]\r\n }),\r\n visible: false\r\n });\r\n var featureOverlay = new mapLibraries.ol.layer.Vector({\r\n source: new mapLibraries.ol.source.Vector(),\r\n map: map,\r\n style: [streetLevelIcon]\r\n });\r\n var mly = new mapillary.Viewer({\r\n accessToken: MapillaryKey,\r\n component: {\r\n cover: false\r\n },\r\n container: \"mly\"\r\n });\r\n var highlight;\r\n var displayFeatureInfo = function displayFeatureInfo(pixel, isClick) {\r\n var feature = map.forEachFeatureAtPixel(\r\n pixel,\r\n function (feature, layer) {\r\n return feature;\r\n },\r\n {\r\n layerFilter: function layerFilter(layer) {\r\n return layer === mapillarySource;\r\n },\r\n hitTolerance: 5\r\n }\r\n );\r\n if (feature) {\r\n if (isClick) {\r\n var bearing = feature.get(\"compassAngle\");\r\n mly.moveTo(feature.get(\"id\"))[\"catch\"](function (reason) {\r\n console.log(\"Mapillary missing image\");\r\n });\r\n featureOverlay.setStyle(updateBearingStyle(bearing));\r\n if (!movingPointLayer.getVisible()) {\r\n mlyContainer.style.display = \"block\";\r\n var maptarParent = maptarContainer.parentNode;\r\n if (maptarParent.offsetHeight > maptarParent.offsetWidth) {\r\n maptarContainer.style.height = \"35%\";\r\n maptarContainer.style.width = \"100%\";\r\n mlyContainer.style.width = \"100%\";\r\n mlyContainer.style.height = \"65%\";\r\n } else {\r\n maptarContainer.style.width = \"35%\";\r\n maptarContainer.style.height = \"100%\";\r\n mlyContainer.style.height = \"100%\";\r\n mlyContainer.style.width = \"65%\";\r\n }\r\n mly.resize();\r\n map.updateSize();\r\n movingPointLayer.setVisible(true);\r\n }\r\n }\r\n if (feature !== highlight) {\r\n if (highlight) {\r\n if (typeof highlight !== \"undefined\") {\r\n try {\r\n featureOverlay.getSource().removeFeature(highlight);\r\n } catch (err) {\r\n //sometimes causes error due to latency or missing keys\r\n }\r\n }\r\n }\r\n if (feature) {\r\n if (typeof feature !== \"undefined\") {\r\n try {\r\n featureOverlay.getSource().addFeature(feature);\r\n } catch (err) {\r\n //sometimes causes error due to latency or missing keys\r\n }\r\n }\r\n }\r\n highlight = feature;\r\n }\r\n } else {\r\n return;\r\n }\r\n };\r\n mly.on(\"image\", function (event) {\r\n if (featureOverlay.getVisible()) {\r\n featureOverlay.setVisible(false);\r\n }\r\n var lonLat = mapLibraries.ol.proj.fromLonLat([\r\n event.image.originalLngLat.lng,\r\n event.image.originalLngLat.lat\r\n ]);\r\n map.getView().setCenter(lonLat);\r\n pointFeature.getGeometry().setCoordinates(lonLat);\r\n pointFeature.setStyle(updateBearingStyle(event.image.compassAngle));\r\n });\r\n map.on(\"click\", function (e) {\r\n displayFeatureInfo(e.pixel, true);\r\n });\r\n window.addEventListener(\"resize\", function () {\r\n if (mapState.streetLevelOn) {\r\n var maptarParent = maptarContainer.parentNode;\r\n if (maptarParent.offsetHeight > maptarParent.offsetWidth) {\r\n maptarContainer.style.height = \"35%\";\r\n maptarContainer.style.width = \"100%\";\r\n mlyContainer.style.width = \"100%\";\r\n mlyContainer.style.height = \"65%\";\r\n } else {\r\n maptarContainer.style.width = \"35%\";\r\n maptarContainer.style.height = \"100%\";\r\n mlyContainer.style.height = \"100%\";\r\n mlyContainer.style.width = \"65%\";\r\n }\r\n mly.resize();\r\n map.updateSize();\r\n }\r\n });\r\n } else {\r\n var StreetLevelControl = function StreetLevelControl() { };\r\n var streetLevel = function streetLevel() {\r\n if (map.getZoom() < 12 && !mapState.streetLevelOn) {\r\n alert(\"Zoom in to get Street Level Imagery\");\r\n } else {\r\n var mpjscanvas = document.getElementsByClassName(\r\n \"mapillary-js-canvas\"\r\n )[0];\r\n var mpjsdom = document.getElementsByClassName(\"mapillary-js-dom\")[0];\r\n if (mapState.streetLevelOn) {\r\n map.removeLayer(\"mimgLayer\");\r\n map.removeLayer(\"streetLevelIcon\");\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.height = \"100%\";\r\n maptarContainer.style.width = \"100%\";\r\n map.resize();\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n onMapillaryChange(\"closed\");\r\n mapState.streetLevelOn = false;\r\n } else {\r\n var centerCurrent = map.getCenter().toArray();\r\n var bboxCurrent = map.getBounds().toArray();\r\n var bboxRad =\r\n distanceInKM(\r\n bboxCurrent[0][0],\r\n bboxCurrent[0][1],\r\n bboxCurrent[1][0],\r\n bboxCurrent[1][1]\r\n ) * 1000;\r\n var xmlhttp = new XMLHttpRequest();\r\n if (streetLevelLoad) {\r\n map.addSource(\"mimgLayer\", mapillarySource);\r\n map.addSource(\"streetLevelIcon\", streetLevelIconSource);\r\n streetLevelLoad = false;\r\n }\r\n xmlhttp.onreadystatechange = function () {\r\n if (this.readyState == 4 && this.status == 200) {\r\n var myArr = JSON.parse(this.responseText);\r\n //alert(myArr.data[0].id);\r\n if (typeof myArr.data[0] !== \"undefined\") {\r\n var cirOpac = \"0.2\";\r\n if (typeof mapState.aerialImageryOn !== \"undefined\") {\r\n if (mapState.aerialImageryOn) {\r\n cirOpac = \"0.5\";\r\n }\r\n }\r\n map.addLayer({\r\n id: \"mimgLayer\",\r\n type: \"circle\",\r\n source: \"mimgLayer\",\r\n \"source-layer\": \"image\",\r\n minzoom: 14,\r\n maxzoom: 22,\r\n paint: {\r\n \"circle-color\": \"rgba(53, 175, 109,\" + cirOpac + \")\"\r\n }\r\n });\r\n map.addLayer({\r\n id: \"streetLevelIcon\",\r\n type: \"symbol\",\r\n source: \"streetLevelIcon\",\r\n paint: {\r\n \"text-color\": \"#a11d26\",\r\n \"text-halo-color\": \"#fff\",\r\n \"text-halo-width\": 2.25,\r\n \"text-translate\": [0, 0]\r\n },\r\n layout: {\r\n \"text-field\": \"\\uF124\",\r\n \"text-size\": 20,\r\n \"text-font\": [\"fasolid-900\"],\r\n \"text-rotate\": [\"get\", \"bearing\"],\r\n \"text-anchor\": \"center\",\r\n \"text-offset\": [0, 0]\r\n }\r\n });\r\n mapState.streetLevelOn = true;\r\n onMapillaryChange(\"active\");\r\n mly.moveTo(myArr.data[0].id)[\"catch\"](function (reason) {\r\n console.log(\"Mapillary missing image\");\r\n });\r\n if (map.getZoom() < 17.5) {\r\n map.zoomTo(17.5);\r\n }\r\n mpjscanvas = document.getElementsByClassName(\r\n \"mapillary-js-canvas\"\r\n )[0];\r\n mpjsdom =\r\n document.getElementsByClassName(\"mapillary-js-dom\")[0];\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"initial\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"initial\";\r\n }\r\n } else {\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.height = \"100%\";\r\n maptarContainer.style.width = \"100%\";\r\n map.resize();\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n onMapillaryChange(\"closed\");\r\n if (map.getZoom() <= 15) {\r\n alert(\r\n \"No street level images available here. Try zooming in.\"\r\n );\r\n } else {\r\n alert(\"No street level images available here.\");\r\n }\r\n }\r\n } else if (this.readyState == 4) {\r\n mlyContainer.style.display = \"none\";\r\n maptarContainer.style.height = \"100%\";\r\n maptarContainer.style.width = \"100%\";\r\n map.resize();\r\n if (typeof mpjscanvas !== \"undefined\") {\r\n mpjscanvas.style.display = \"none\";\r\n }\r\n if (typeof mpjsdom !== \"undefined\") {\r\n mpjsdom.style.display = \"none\";\r\n }\r\n onMapillaryChange(\"closed\");\r\n }\r\n };\r\n mlyContainer.style.display = \"block\";\r\n var maptarParent = maptarContainer.parentNode;\r\n if (maptarParent.offsetHeight > maptarParent.offsetWidth) {\r\n maptarContainer.style.height = \"35%\";\r\n maptarContainer.style.width = \"100%\";\r\n mlyContainer.style.width = \"100%\";\r\n mlyContainer.style.height = \"65%\";\r\n } else {\r\n maptarContainer.style.width = \"35%\";\r\n maptarContainer.style.height = \"100%\";\r\n mlyContainer.style.height = \"100%\";\r\n mlyContainer.style.width = \"65%\";\r\n }\r\n mly.resize();\r\n map.resize();\r\n onMapillaryChange(\"opened\");\r\n xmlhttp.open(\r\n \"GET\",\r\n \"https://graph.mapillary.com/images?access_token=\" +\r\n MapillaryKey +\r\n \"&fields=image_key&limit=1&closeto=\" +\r\n centerCurrent[0] +\r\n \",\" +\r\n centerCurrent[1] +\r\n \"&bbox=\" +\r\n bboxCurrent[0][0] +\r\n \",\" +\r\n bboxCurrent[0][1] +\r\n \",\" +\r\n bboxCurrent[1][0] +\r\n \",\" +\r\n bboxCurrent[1][1],\r\n true\r\n );\r\n //'https://a.mapillary.com/v3/images?client_id='+MapillaryKey+'&closeto='+centerCurrent[0]+','+centerCurrent[1]+'&bbox='+bboxCurrent[0][0]+','+bboxCurrent[0][1]+','+bboxCurrent[1][0]+','+bboxCurrent[1][1]+'&radius='+bboxRad.toFixed(0), true);\r\n xmlhttp.send();\r\n }\r\n }\r\n };\r\n onMapillaryChange(\"loaded\");\r\n var streetLevelIconSource = {\r\n type: \"geojson\",\r\n data: {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [0, 0]\r\n },\r\n properties: {\r\n bearing: 90\r\n }\r\n }\r\n };\r\n var mapillarySource = {\r\n type: \"vector\",\r\n tiles: [\r\n \"https://tiles.mapillary.com/maps/vtp/mly1_public/2/{z}/{x}/{y}?access_token=\" +\r\n MapillaryKey\r\n ],\r\n minzoom: 14,\r\n maxzoom: 14\r\n };\r\n StreetLevelControl.prototype.onAdd = function (map) {\r\n this._map = map;\r\n this._container = document.createElement(\"div\");\r\n this._container.className = \"maplibregl-ctrl maplibregl-ctrl-group\";\r\n this._container.style.cssText = \"pointer-events: auto;\";\r\n var SLbutton = document.createElement(\"button\");\r\n SLbutton.setAttribute(\"id\", \"streetLevButton\");\r\n SLbutton.addEventListener(\"click\", streetLevel);\r\n this._container.appendChild(SLbutton);\r\n var SLicon = document.createElement(\"span\");\r\n SLicon.style.cssText =\r\n 'background-image: url(\"' + process.env.API_URL + '.slpy.com/symbols/walking-solid.svg\");background-size: 1em;';\r\n SLicon.className = \"maplibregl-ctrl-icon\";\r\n SLbutton.appendChild(SLicon);\r\n return this._container;\r\n };\r\n StreetLevelControl.prototype.onRemove = function () {\r\n this._container.parentNode.removeChild(this._container);\r\n this._map = undefined;\r\n };\r\n StreetLevelControl = new StreetLevelControl();\r\n map.addControl(StreetLevelControl, \"bottom-right\");\r\n mapState.streetLevelOn = false;\r\n var streetLevelLoad = true;\r\n var mly = new mapillary.Viewer({\r\n accessToken: MapillaryKey,\r\n component: {\r\n cover: false\r\n },\r\n container: \"mly\"\r\n });\r\n mly.on(\"image\", function (event) {\r\n var lngLat = [\r\n event.image.originalLngLat.lng,\r\n event.image.originalLngLat.lat\r\n ];\r\n var bearing = event.image.compassAngle - 45;\r\n var data = {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: lngLat\r\n },\r\n properties: {\r\n bearing: bearing\r\n }\r\n };\r\n map.getSource(\"streetLevelIcon\").setData(data);\r\n map.flyTo({\r\n center: lngLat\r\n });\r\n });\r\n map.on(\"click\", function (e) {\r\n if (typeof mapState.streetLevelOn !== \"undefined\") {\r\n if (mapState.streetLevelOn) {\r\n var feature = map.queryRenderedFeatures(e.point, {\r\n layers: [\"mimgLayer\"]\r\n });\r\n if (typeof feature[0] !== \"undefined\") {\r\n var fkey = feature[0].properties.id;\r\n mly.moveTo(fkey)[\"catch\"](function (reason) {\r\n console.log(\"Mapillary missing image\");\r\n });\r\n }\r\n }\r\n }\r\n });\r\n window.addEventListener(\"resize\", function () {\r\n if (mapState.streetLevelOn) {\r\n var maptarParent = maptarContainer.parentNode;\r\n if (maptarParent.offsetHeight > maptarParent.offsetWidth) {\r\n maptarContainer.style.height = \"35%\";\r\n maptarContainer.style.width = \"100%\";\r\n mlyContainer.style.width = \"100%\";\r\n mlyContainer.style.height = \"65%\";\r\n } else {\r\n maptarContainer.style.width = \"35%\";\r\n maptarContainer.style.height = \"100%\";\r\n mlyContainer.style.height = \"100%\";\r\n mlyContainer.style.width = \"65%\";\r\n }\r\n mly.resize();\r\n map.resize();\r\n }\r\n });\r\n }\r\n }\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { addressAutocomplete } from './src/addressAutocomplete.js';\r\nimport { addAerialImagery } from './src/aerialImagery.js';\r\nimport { addAutocomplete } from './src/autocomplete.js';\r\nimport { addMarkers, highlightMarker, dehighlightMarker, removeMarker, createMarker, setMarkerOpen, quickMarkersCenter } from './src/markers.js';\r\nimport { mapState, settings, openlayersParts, mapLibraries } from './src/globals.js';\r\nimport { addMapillary } from './src/streetLevel.js';\r\nimport { isWebGL2Supported, loadScript,setInteractionOnFocus, setTransform, flyTo, toRad, distanceInKM, distanceInMI } from './src/utils.js';\r\n\r\nexport default {\r\n addressAutocomplete,\r\n addAerialImagery,\r\n addAutocomplete,\r\n addMarkers,\r\n highlightMarker,\r\n dehighlightMarker,\r\n removeMarker,\r\n createMarker,\r\n setMarkerOpen,\r\n quickMarkersCenter,\r\n addMapillary,\r\n isWebGL2Supported,\r\n loadScript,\r\n setInteractionOnFocus,\r\n setTransform,\r\n flyTo,\r\n toRad,\r\n distanceInKM,\r\n distanceInMI,\r\n mapState,\r\n settings,\r\n openlayersParts,\r\n mapLibraries\r\n};","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\nimport { addAutocomplete } from \"./autocomplete.js\";\r\n\r\nexport function addressAutocomplete(targetInput, autoOptions) {\r\n if (typeof targetInput === \"string\") {\r\n var formTarget = document.getElementById(targetInput);\r\n } else if (\r\n targetInput &&\r\n (target.nodeName.toLowerCase() === \"form\" ||\r\n targetInput.nodeName.toLowerCase() === \"textarea\")\r\n ) {\r\n var formTarget = targetInput;\r\n } else {\r\n console.log(\r\n \"Target form for address autocomplete is not a valid Form element or id.\"\r\n );\r\n }\r\n autoOptions[\"autocompleteType\"] = \"address\";\r\n if (formTarget.tagName.toLowerCase() === \"form\") {\r\n var inputFields = formTarget.querySelectorAll(\r\n \"input[autocomplete], textarea[autocomplete]\"\r\n );\r\n var formParts = {};\r\n for (var i = 0; i < inputFields.length; i++) {\r\n var autoCompleteAttr = inputFields[i].getAttribute(\"autocomplete\");\r\n if (autoCompleteAttr) {\r\n var autoSection = \"0\";\r\n if (typeof autoCompleteAttr.split(\" \")[1] !== \"undefined\") {\r\n var lastSpaceIndex = autoCompleteAttr.lastIndexOf(\" \");\r\n autoSection = autoCompleteAttr.slice(0, lastSpaceIndex);\r\n autoCompleteAttr = autoCompleteAttr.slice(lastSpaceIndex + 1);\r\n if (typeof formParts[autoSection] === \"undefined\") {\r\n formParts[autoSection] = {};\r\n }\r\n }\r\n switch (autoCompleteAttr) {\r\n case \"street-address\":\r\n formParts[autoSection][\"street-line\"] = inputFields[i];\r\n break;\r\n case \"address-line1\":\r\n formParts[autoSection][\"street-line\"] = inputFields[i];\r\n break;\r\n case \"address-level1\":\r\n formParts[autoSection][\"address-level1\"] = inputFields[i];\r\n break;\r\n case \"address-level2\":\r\n formParts[autoSection][\"address-level2\"] = inputFields[i];\r\n break;\r\n case \"address-level3\":\r\n formParts[autoSection][\"address-level3\"] = inputFields[i];\r\n break;\r\n case \"address-level4\":\r\n formParts[autoSection][\"address-level4\"] = inputFields[i];\r\n break;\r\n case \"postal-code\":\r\n formParts[autoSection][\"postal-code\"] = inputFields[i];\r\n break;\r\n case \"country\":\r\n formParts[autoSection][\"country\"] = inputFields[i];\r\n break;\r\n case \"country-name\":\r\n formParts[autoSection][\"country-name\"] = inputFields[i];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n var returnUpdates = [];\r\n for (var autoSectionKey in formParts) {\r\n if (formParts.hasOwnProperty(autoSectionKey)) {\r\n if (typeof formParts[autoSectionKey][\"street-line\"] !== \"undefined\") {\r\n if (\r\n typeof formParts[autoSectionKey][\"street-line\"].id == \"undefined\" ||\r\n formParts[autoSectionKey][\"street-line\"].id == \"\"\r\n ) {\r\n formParts[autoSectionKey][\"street-line\"].id =\r\n \"StAuto-\" + autoSectionKey;\r\n }\r\n (function (autoSectionKey, formParts) {\r\n var formfill = function formfill(returnInput, selectedItem) {\r\n returnInput.value = selectedItem[\"street\"];\r\n for (var autoSectionEle in formParts[autoSectionKey]) {\r\n switch (autoSectionEle) {\r\n case \"address-level1\":\r\n formParts[autoSectionKey][\"address-level1\"].value =\r\n selectedItem[\"region\"];\r\n break;\r\n case \"address-level2\":\r\n formParts[autoSectionKey][\"address-level2\"].value =\r\n selectedItem[\"city\"];\r\n break;\r\n case \"postal-code\":\r\n formParts[autoSectionKey][\"postal-code\"].value =\r\n selectedItem[\"postcode\"];\r\n break;\r\n case \"country\":\r\n formParts[autoSectionKey][\"country\"].value =\r\n selectedItem[\"country\"];\r\n break;\r\n case \"country-code\":\r\n if (selectedItem[\"country-code\"]) {\r\n formParts[autoSectionKey][\"country-code\"].value =\r\n selectedItem[\"country-code\"];\r\n } else {\r\n formParts[autoSectionKey][\"country-code\"].value =\r\n selectedItem[\"country_code\"];\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n var returnUpdate = addAutocomplete(\r\n formParts[autoSectionKey][\"street-line\"].id,\r\n autoOptions,\r\n formfill\r\n );\r\n if (typeof returnUpdate.updateAutocomplete !== \"undefined\") {\r\n returnUpdates.push(returnUpdate);\r\n }\r\n })(autoSectionKey, formParts);\r\n } else {\r\n console.log(\r\n \"API: An input with autocomplete attribute 'street-address' or 'address-line1' was not found.\"\r\n );\r\n }\r\n }\r\n }\r\n return returnUpdates;\r\n }\r\n }","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { mapState, settings, mapLibraries } from \"./globals.js\";\r\n\r\nexport function addAerialImagery(map) {\r\n var aerialImageryLoad = true;\r\n var AIbbox = [\r\n [\r\n [-104.853516, 29.774649],\r\n [-80.90332, 41.808621]\r\n ],\r\n // s_c\r\n [\r\n [-114.697266, 31.733423],\r\n [-106.54541, 49.09563]\r\n ],\r\n // w_c\r\n [\r\n [-125.727539, 32.407206],\r\n [-114.609375, 49.125338]\r\n ],\r\n // w\r\n [\r\n [-108.149414, 31.735093],\r\n [-104.633789, 49.152471]\r\n ],\r\n // c\r\n [\r\n [-81.101074, 31.864267],\r\n [-69.675293, 42.359457]\r\n ],\r\n // e\r\n [\r\n [-83.693848, 24.493357],\r\n [-79.848633, 30.395503]\r\n ],\r\n // fl\r\n [\r\n [-101.645508, 28.849233],\r\n [-84.528809, 29.749476]\r\n ],\r\n // tx_l\r\n [\r\n [-100.623779, 25.743899],\r\n [-95.339355, 28.827531]\r\n ],\r\n // tx_s\r\n [\r\n [-106.479492, 30.340827],\r\n [-104.699707, 32.162079]\r\n ],\r\n // tx_w\r\n [\r\n [-112.543945, 31.25324],\r\n [-108.105469, 31.964051]\r\n ],\r\n // az\r\n [\r\n [-104.897461, 41.758319],\r\n [-82.375488, 46.029057]\r\n ],\r\n // io\r\n [\r\n [-104.919434, 45.943561],\r\n [-83.210449, 47.548488]\r\n ],\r\n // mi\r\n [\r\n [-104.941406, 47.48012],\r\n [-88.088379, 48.298688]\r\n ],\r\n // nd\r\n [\r\n [-104.952393, 48.277197],\r\n [-92.362061, 49.418971]\r\n ],\r\n // ca_s\r\n [\r\n [-79.969482, 42.295311],\r\n [-69.829102, 43.573655]\r\n ],\r\n // ny\r\n [\r\n [-76.640625, 43.53305],\r\n [-66.52771, 45.077231]\r\n ],\r\n // vt\r\n [\r\n [-71.5979, 45.03054],\r\n [-66.994629, 47.493728]\r\n ],\r\n // mn\r\n [\r\n [-67.985919, 17.265936],\r\n [-64.52648, 18.884333]\r\n ],\r\n // pr\r\n ];\r\n if (typeof mapLibraries.ol !== \"undefined\") {\r\n var isInAerialArea = function isInAerialArea() {\r\n var curmapaiz = map.getView().getZoom();\r\n if (curmapaiz > 20) {\r\n return false;\r\n }\r\n var inSatArea = false;\r\n var bbarea = 0;\r\n var curmapcentr = map.getView().getCenter();\r\n do {\r\n var BBX = new mapLibraries.ol.extent.boundingExtent([\r\n mapLibraries.ol.proj.fromLonLat(AIbbox[bbarea][0]),\r\n mapLibraries.ol.proj.fromLonLat(AIbbox[bbarea][1])\r\n ]);\r\n inSatArea = mapLibraries.ol.extent.containsCoordinate(BBX, curmapcentr);\r\n bbarea++;\r\n } while (!inSatArea && bbarea < 18);\r\n if (!inSatArea && curmapaiz > 15.5) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n var satelliteSource = new mapLibraries.ol.layer.Tile({\r\n source: new mapLibraries.ol.source.XYZ({\r\n format: new mapLibraries.ol.format.MVT(),\r\n maxZoom: 17,\r\n url:\r\n process.env.API_URL + \".slpy.com/v1/app/aerial-imagery/{z}/{x}/{y}.png?key=\" +\r\n settings.apiKey\r\n }),\r\n minZoom: 0,\r\n maxZoom: 20,\r\n zindex: 0\r\n });\r\n //use below for ie9 since vector overlay will be missing\r\n var satelliteSourceRaster = new mapLibraries.ol.layer.Tile({\r\n source: new mapLibraries.ol.source.XYZ({\r\n format: new mapLibraries.ol.format.MVT(),\r\n maxZoom: 16,\r\n url:\r\n process.env.API_URL + \".slpy.com/v1/app/aerial-topo/{z}/{x}/{y}.png?key=\" +\r\n settings.apiKey\r\n }),\r\n minZoom: 0,\r\n maxZoom: 19,\r\n zindex: 0\r\n });\r\n class AIbutton extends mapLibraries.ol.control.Control {\r\n constructor(opt_options) {\r\n var options = opt_options || {};\r\n var AIicon = document.createElement(\"button\");\r\n AIicon.style.cssText =\r\n 'background-image: url(\"https://www.slpy.com/img/AerialImagery.png\");background-size: contain;border-radius: 4px; width: 45px; height: 45px';\r\n AIicon.setAttribute(\"id\", \"AerialImageryIcon\");\r\n var element = document.createElement(\"div\");\r\n element.className = \"ol-control\";\r\n element.setAttribute(\"id\", \"AerialImageryButton\");\r\n element.style.cssText =\r\n \"bottom: 0; right: 8px; margin-bottom: 50px; width: 45px; height: 45px\";\r\n element.appendChild(AIicon);\r\n super({\r\n element: element,\r\n target: options.target\r\n });\r\n AIicon.addEventListener(\r\n \"click\",\r\n this.AerialImageryControl.bind(this),\r\n false\r\n );\r\n }\r\n AerialImageryControl() {\r\n\r\n if (mapState.aerialImageryOn) {\r\n if (mapState.oldIE) {\r\n this.getMap().removeLayer(satelliteSourceRaster);\r\n } else {\r\n this.getMap().removeLayer(satelliteSource);\r\n if (typeof mapState.streetLevelOn !== \"undefined\") {\r\n if (mapState.streetLevelOn) {\r\n mapillarySource.setStyle(photoDot);\r\n }\r\n }\r\n }\r\n document.getElementById(\"AerialImageryIcon\").style.backgroundImage =\r\n \"url('https://www.slpy.com/img/AerialImagery.png')\";\r\n mapState.aerialImageryOn = false;\r\n map.getLayers().forEach(function (layer) {\r\n layer.getSource().refresh();\r\n });\r\n } else if (isInAerialArea()) {\r\n mapState.aerialImageryOn = true;\r\n //setting oldie true is temporary hack until we fix aerial on openlayers with a gl style\r\n mapState.oldIE = true;\r\n if (mapState.oldIE) {\r\n map.addLayer(satelliteSourceRaster);\r\n } else {\r\n map.getLayers().forEach(function (layer) {\r\n layer.getSource().refresh();\r\n });\r\n map.getLayers().insertAt(0, satelliteSource);\r\n if (typeof mapState.streetLevelOn !== \"undefined\") {\r\n if (mapState.streetLevelOn) {\r\n mapillarySource.setStyle(photoDotAerial);\r\n }\r\n }\r\n }\r\n document.getElementById(\"AerialImageryIcon\").style.backgroundImage =\r\n \"url('https://www.slpy.com/img/VectorImagery.png')\";\r\n } else {\r\n if (map.getView().getZoom() > 19) {\r\n alert(\"No Aerial Imagery at this level. Try zooming out.\");\r\n } else {\r\n alert(\"No Aerial Imagery available in this region.\");\r\n }\r\n }\r\n }\r\n }\r\n map.addControl(new AIbutton());\r\n var showingAerialButton = true;\r\n var AerialButton = document.getElementById(\"AerialImageryButton\");\r\n if (!isInAerialArea()) {\r\n AerialButton.style.display = \"none\";\r\n showingAerialButton = false;\r\n }\r\n map.on(\"moveend\", function () {\r\n if (isInAerialArea() && !showingAerialButton) {\r\n AerialButton.style.display = \"block\";\r\n showingAerialButton = true;\r\n } else if (!isInAerialArea() && showingAerialButton) {\r\n AerialButton.style.display = \"none\";\r\n showingAerialButton = false;\r\n if (mapState.aerialImageryOn) {\r\n document.getElementById(\"AerialImageryIcon\").click();\r\n }\r\n }\r\n });\r\n } else if (mapState.maplibreLoaded) {\r\n var isInAerialAreaMb = function isInAerialAreaMb() {\r\n var curmapaiz = map.getZoom();\r\n if (curmapaiz > 19) {\r\n return false;\r\n }\r\n var inSatArea = false;\r\n var bbarea = 0;\r\n var curmapcentr = map.getCenter();\r\n do {\r\n var BBX = new mapLibraries.maplibregl.LngLatBounds(AIbbox[bbarea]);\r\n inSatArea = BBX.contains(curmapcentr);\r\n bbarea++;\r\n } while (!inSatArea && bbarea < 18);\r\n if (!inSatArea && curmapaiz > 14.5) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n var originalStyle = \"\";\r\n var AerialImageryControl = function AerialImageryControl() { };\r\n var AerialImagery = function AerialImagery() {\r\n if (mapState.aerialImageryOn) {\r\n if (typeof mapState.streetLevelOn !== \"undefined\") {\r\n if (!mapState.streetLevelOn) {\r\n map.setStyle(originalStyle);\r\n if (map.getLayer(\"mimgLayer\")) {\r\n map.removeLayer(\"mimgLayer\");\r\n }\r\n if (map.getLayer(\"streetLevelIcon\")) {\r\n map.removeLayer(\"streetLevelIcon\");\r\n }\r\n } else {\r\n var slicosour = map.getSource(\"streetLevelIcon\");\r\n var mimgsour = map.getSource(\"mimgLayer\");\r\n var mimglay = map.getLayer(\"mimgLayer\");\r\n var slilay = map.getLayer(\"streetLevelIcon\");\r\n map.setStyle(originalStyle);\r\n if (!mimgsour) {\r\n map.addSource(\"mimgLayer\", {\r\n type: \"vector\",\r\n tiles: mimgsour[\"tiles\"],\r\n minzoom: mimgsour[\"minzoom\"],\r\n maxzoom: mimgsour[\"maxzoom\"]\r\n });\r\n }\r\n if (!slicosour) {\r\n map.addSource(\"streetLevelIcon\", {\r\n type: \"geojson\",\r\n data: slicosour[\"_data\"]\r\n });\r\n }\r\n if (!mimglay) {\r\n map.addLayer({\r\n id: \"mimgLayer\",\r\n type: \"circle\",\r\n source: \"mimgLayer\",\r\n \"source-layer\": \"mapillary-images\",\r\n minzoom: mimglay[\"minzoom\"],\r\n maxzoom: mimglay[\"maxzoom\"],\r\n paint: mimglay[\"paint_\"]\r\n });\r\n }\r\n if (!slilay) {\r\n map.addLayer({\r\n id: \"streetLevelIcon\",\r\n type: \"symbol\",\r\n source: \"streetLevelIcon\",\r\n paint: slilay[\"paint_\"],\r\n layout: slilay[\"layout_\"]\r\n });\r\n }\r\n }\r\n } else {\r\n map.setStyle(originalStyle);\r\n }\r\n document.getElementById(\"AerialImageryIcon\").style.backgroundImage =\r\n \"url('https://www.slpy.com/img/AerialImagery.png')\";\r\n mapState.aerialImageryOn = false;\r\n } else if (isInAerialAreaMb()) {\r\n if (aerialImageryLoad) {\r\n map.addSource(\"satellite\", aerialImagerySource);\r\n aerialImageryLoad = false;\r\n }\r\n originalStyle = map.getStyle();\r\n if (typeof mapState.streetLevelOn !== \"undefined\") {\r\n if (mapState.streetLevelOn) {\r\n map.setPaintProperty(\r\n \"mimgLayer\",\r\n \"circle-color\",\r\n \"rgba(53, 175, 109,0.5)\"\r\n );\r\n }\r\n }\r\n map.addLayer(\r\n {\r\n id: \"satellite\",\r\n type: \"raster\",\r\n source: \"satellite\",\r\n minzoom: 0,\r\n maxzoom: 19\r\n },\r\n \"necountries-4\"\r\n );\r\n document.getElementById(\"AerialImageryIcon\").style.backgroundImage =\r\n \"url('https://www.slpy.com/img/VectorImagery.png')\";\r\n map.setLayoutProperty(\"roads-casing\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"roads-motorway-casing-low-zoom\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"highway-area-fill\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"highway-motorway-shadow\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"highway-trunk-shadow\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"roads-low-zoom-primary-shadow\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"roads-low-zoom-secondary-shadow\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"roads-low-zoom-motorway-shadow\", \"visibility\", \"none\");\r\n map.setLayoutProperty(\"roads-low-zoom-trunk-shadow\", \"visibility\", \"none\");\r\n map.setPaintProperty(\"highway-motorway\", \"line-color\", \"#edaa82\");\r\n map.setPaintProperty(\"roads\", \"line-opacity\", 0.5);\r\n map.setPaintProperty(\"roads-low-zoom-secondary\", \"line-opacity\", 0.5);\r\n map.setPaintProperty(\"roads-low-zoom-trunk\", \"line-opacity\", 0.3);\r\n map.setPaintProperty(\"highway-motorway\", \"line-opacity\", 0.5);\r\n map.setPaintProperty(\"highway-trunk\", \"line-color\", \"#bbb\");\r\n map.setPaintProperty(\"highway-trunk\", \"line-width\", 1);\r\n map.setPaintProperty(\"highway-trunk\", \"line-opacity\", 0.5);\r\n map.setPaintProperty(\"ferry-routes\", \"line-opacity\", 0.5);\r\n map.setPaintProperty(\"roads-text-name\", \"text-color\", \"#000\");\r\n map.setPaintProperty(\"roads-text-name\", \"text-halo-width\", 1.25);\r\n map.setPaintProperty(\"placenames\", \"text-color\", \"#fff\");\r\n map.setPaintProperty(\"placenames\", \"text-halo-color\", \"#000\");\r\n map.setPaintProperty(\"placenames\", \"text-halo-width\", 1);\r\n map.setPaintProperty(\"placenames-small\", \"text-color\", \"#fff\");\r\n map.setPaintProperty(\"placenames-small\", \"text-halo-color\", \"#555\");\r\n map.setPaintProperty(\"placenames-small\", \"text-halo-width\", 1.5);\r\n map.setPaintProperty(\"ocean-points\", \"text-halo-color\", \"#4f6f80\");\r\n map.setPaintProperty(\"ocean-points\", \"text-color\", \"#fff\");\r\n map.setPaintProperty(\r\n \"state-names\",\r\n \"text-halo-color\",\r\n \"rgba(114, 83, 128, 0.6)\"\r\n );\r\n map.setPaintProperty(\r\n \"state-names\",\r\n \"text-color\",\r\n \"rgba(255, 255, 255, 0.6)\"\r\n );\r\n map.setPaintProperty(\r\n \"state-names-low-zoom\",\r\n \"text-halo-color\",\r\n \"rgba(114, 83, 128, 0.6)\"\r\n );\r\n map.setPaintProperty(\r\n \"state-names-low-zoom\",\r\n \"text-color\",\r\n \"rgba(255, 255, 255, 0.6)\"\r\n );\r\n map.setPaintProperty(\r\n \"amenity-points-landuse\",\r\n \"text-halo-color\",\r\n \"#fff\"\r\n );\r\n map.setPaintProperty(\"amenity-points-landuse\", \"text-halo-width\", 1);\r\n map.setPaintProperty(\"text-poly-low-zoom\", \"text-halo-color\", \"#fff\");\r\n map.setPaintProperty(\"text-poly-low-zoom\", \"text-halo-width\", 0.5);\r\n map.setPaintProperty(\"amenity-points-low\", \"icon-halo-width\", 0.5);\r\n map.setPaintProperty(\"amenity-points\", \"icon-halo-width\", 0.5);\r\n map.setPaintProperty(\"amenity-points-mid\", \"icon-halo-width\", 0.5);\r\n map.setPaintProperty(\"amenity-points-high\", \"icon-halo-width\", 0.5);\r\n map.setPaintProperty(\"amenity-points-low\", \"text-halo-width\", 0.6);\r\n map.setPaintProperty(\"amenity-points\", \"text-halo-width\", 0.6);\r\n map.setPaintProperty(\"amenity-points-mid\", \"text-halo-width\", 0.6);\r\n map.setPaintProperty(\"amenity-points-high\", \"text-halo-width\", 0.6);\r\n map.setPaintProperty(\"necountries-4\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"necountries-2\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-mid-zoom-2\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-mid-zoom-3\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-mid-zoom-4\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-high-zoom-2\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-high-zoom-3\", \"line-color\", \"#222\");\r\n map.setPaintProperty(\"admin-high-zoom-4\", \"line-color\", \"#222\");\r\n mapState.aerialImageryOn = true;\r\n } else {\r\n if (map.getZoom() > 19) {\r\n alert(\"No Aerial Imagery at this level. Try zooming out.\");\r\n } else {\r\n alert(\"No Aerial Imagery available in this region.\");\r\n }\r\n }\r\n };\r\n var aerialImagerySource = {\r\n type: \"raster\",\r\n scheme: \"xyz\",\r\n tiles: [\r\n process.env.API_URL + \".slpy.com/v1/app/aerial-imagery/{z}/{x}/{y}.png?key=\" +\r\n settings.apiKey\r\n ],\r\n minzoom: 0,\r\n maxzoom: 17,\r\n tileSize: 256\r\n };\r\n AerialImageryControl.prototype.onAdd = function (map) {\r\n this._map = map;\r\n this._container = document.createElement(\"div\");\r\n this._container.className = \"maplibregl-ctrl maplibregl-ctrl-group\";\r\n this._container.style.cssText = \"pointer-events: auto;\";\r\n this._container.setAttribute(\"id\", \"AerialImageryButton\");\r\n var AIbutton = document.createElement(\"button\");\r\n AIbutton.style.width = \"45px\";\r\n AIbutton.style.height = \"45px\";\r\n AIbutton.addEventListener(\"click\", AerialImagery);\r\n this._container.appendChild(AIbutton);\r\n var AIicon = document.createElement(\"span\");\r\n AIicon.style.cssText =\r\n 'background-image: url(\"https://www.slpy.com/img/AerialImagery.png\");background-size: contain;border-radius: 4px;';\r\n AIicon.setAttribute(\"id\", \"AerialImageryIcon\");\r\n AIicon.className = \"maplibregl-ctrl-icon\";\r\n AIbutton.appendChild(AIicon);\r\n return this._container;\r\n };\r\n AerialImageryControl.prototype.onRemove = function () {\r\n this._container.parentNode.removeChild(this._container);\r\n this._map = undefined;\r\n };\r\n AerialImageryControl = new AerialImageryControl();\r\n map.addControl(AerialImageryControl, \"bottom-right\");\r\n var showingAerialButton = true;\r\n var AerialButton = document.getElementById(\"AerialImageryButton\");\r\n if (!isInAerialAreaMb()) {\r\n AerialButton.style.display = \"none\";\r\n showingAerialButton = false;\r\n }\r\n map.on(\"idle\", function () {\r\n if (isInAerialAreaMb() && !showingAerialButton) {\r\n AerialButton.style.display = \"block\";\r\n showingAerialButton = true;\r\n } else if (!isInAerialAreaMb() && showingAerialButton) {\r\n AerialButton.style.display = \"none\";\r\n showingAerialButton = false;\r\n if (mapState.aerialImageryOn) {\r\n AerialImagery();\r\n }\r\n }\r\n });\r\n }\r\n}","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { isWebGL1Supported, isWebGL2Supported } from \"./utils.js\";\r\nimport { mapState, settings, mapLibraries } from \"./globals.js\";\r\n\r\nexport function processOptions(options) {\r\n if (!options[\"apiKey\"]) {\r\n console.log(\"Slpy Map Missing apiKey: Please add your Slpy apiKey to the options object in the maplibreMap function.\");\r\n }\r\n if (!options[\"container\"]) {\r\n console.log(\"Slpy Map Missing container: Please add your container id or element to the options object in the maplibreMap function.\");\r\n }\r\n if (!options[\"center\"]) {\r\n console.log(\"Slpy Map Missing center: Please add your center as a [longitude, latitude] element to the options object in the maplibreMap function.\");\r\n }\r\n if (!options[\"zoom\"]) {\r\n console.log(\"Slpy Map Missing zoom: Please add a zoom value to the options object in the maplibreMap function. Level 0 is globe, 20 is house level.\");\r\n }\r\n if (typeof options[\"mapType\"] !== \"undefined\" && options[\"mapType\"].toLowerCase() == \"raster\") {\r\n options[\"mapType\"] = \"raster\";\r\n } else {\r\n options[\"mapType\"] = \"vector\";\r\n }\r\n if (typeof options[\"language\"] !== \"undefined\" && options[\"language\"].toLowerCase() != \"en\") {\r\n options[\"mapLanguage\"] = options[\"language\"].toLowerCase();\r\n } else if (typeof options[\"mapLanguage\"] !== \"undefined\" && options[\"mapLanguage\"].toLowerCase() != \"en\") {\r\n options[\"mapLanguage\"] = options[\"mapLanguage\"].toLowerCase();\r\n } else {\r\n options[\"mapLanguage\"] = \"en\";\r\n }\r\n if (typeof options[\"mapFilter\"] !== \"undefined\" && options[\"mapFilter\"].length > 0) {\r\n settings.mapFilter = options[\"mapFilter\"];\r\n }\r\n settings.apiKey = options[\"apiKey\"].toLowerCase();\r\n return options;\r\n}\r\n\r\nexport function maplibreCheck(targetDivId, openlayersFallback) {\r\n if (typeof mapLibraries.maplibregl === \"undefined\" || !isWebGL2Supported()) {\r\n if (typeof mapLibraries.maplibregl !== \"undefined\" && isWebGL1Supported()) {\r\n try {\r\n if (mapLibraries.maplibregl.getVersion().split('.').map(Number) >= 5) {\r\n return true;\r\n } else {\r\n console.log(\"MapLibre requries v5+ for WebGL 1 support.\");\r\n }\r\n } catch (e) {\r\n console.log(\"Browser has WebGL, but lacks full support for MapLibre.\");\r\n }\r\n }\r\n if (openlayersFallback == false) {\r\n var mapDivEl = targetDivId\r\n if (typeof mapDivEl === \"string\") {\r\n var mapDivEl = document.getElementById(targetDivId);\r\n }\r\n if (typeof mapLibraries.maplibregl === \"undefined\") {\r\n mapDivEl.insertAdjacentHTML(\r\n \"afterbegin\",\r\n '<p id=\"mapOverlayNotice\">The Maplibre GL library could not be found or imported.</p>'\r\n );\r\n } else {\r\n mapDivEl.insertAdjacentHTML(\r\n \"afterbegin\",\r\n '<p id=\"mapOverlayNotice\">Your Web Browser is not compatible. Please upgrade.</p>'\r\n );\r\n }\r\n }\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function loadMaplibreMap(options) {\r\n\r\n mapState.maplibreLoaded = true;\r\n if (typeof MglOptions !== \"undefined\") {\r\n options = Object.assign(options, MglOptions);\r\n }\r\n var antialias = false;\r\n mapState.mapStyleUrl = process.env.API_URL + \".slpy.com/style/slpy-mgl-style.json?key=\" + settings.apiKey;\r\n var navControlLocation = \"top-left\";\r\n\r\n // If the mapType is \"raster\", set antialias to false and add \"&raster=true\" to the map style URL\r\n // If the mapStyle is \"3d\", set antialias to true and add \"&style=3d\" to the map style URL\r\n if (options[\"mapType\"] == \"raster\") {\r\n antialias = false;\r\n mapState.mapStyleUrl += \"&raster=true\";\r\n } else if (options[\"mapStyle\"]) {\r\n if (options[\"mapStyle\"].toLowerCase() == \"3d\") {\r\n antialias = true;\r\n mapState.mapStyleUrl += \"&style=3d\";\r\n }\r\n }\r\n //allow overwrite of antialias\r\n if (typeof options[\"antialias\"] !== \"undefined\") {\r\n antialias = options[\"antialias\"];\r\n }\r\n //allow overwrite of maxZoom\r\n var maxzoom = 21;\r\n if (typeof options[\"maxZoom\"] !== \"undefined\") {\r\n maxzoom = options[\"maxZoom\"];\r\n }\r\n if (typeof options[\"mapTransform\"] !== \"undefined\" && options[\"mapTransform\"].length > 0) {\r\n mapState.mapStyleUrl += \"&transform=\" + options[\"mapTransform\"].toLowerCase();\r\n }\r\n\r\n // If a map filter is defined, add it to the map style URL\r\n if (typeof settings.mapFilter !== \"undefined\" && settings.mapFilter.length > 0) {\r\n mapState.mapStyleUrl += \"&filter=\";\r\n\r\n // Build the map filter string by concatenating the individual filter terms\t\tif (typeof mapFilter !== \"undefined\" && mapFilter.length > 0) {\r\n mapState.mapStyleUrl += \"&filter=\";\r\n for (var i = 0; i < settings.mapFilter.length; i++) {\r\n mapState.mapStyleUrl += settings.mapFilter[i].toLowerCase().replace(\"_points\", \"\") + \",\";\r\n }\r\n mapState.mapStyleUrl = mapState.mapStyleUrl.substring(0, mapState.mapStyleUrl.length - 1);\r\n }\r\n if (options[\"mapLanguage\"] != \"en\") {\r\n mapState.mapStyleUrl += \"&lang=\" + options[\"mapLanguage\"];\r\n }\r\n var defaultGlOptions = {\r\n container: options['container'],\r\n style: mapState.mapStyleUrl,\r\n maxZoom: maxzoom,\r\n // style URL\r\n center: options[\"center\"],\r\n zoom: options[\"zoom\"],\r\n antialias: antialias,\r\n hash: false,\r\n attributionControl: false\r\n };\r\n if (options !== \"\") {\r\n for (var attrname in options) {\r\n defaultGlOptions[attrname] = options[attrname];\r\n }\r\n }\r\n if (typeof options[\"navControl\"] !== \"undefined\" && options[\"navControl\"].toLowerCase() == \"none\") {\r\n return new mapLibraries.maplibregl.Map(defaultGlOptions).addControl(\r\n new mapLibraries.maplibregl.AttributionControl({\r\n compact: false\r\n })\r\n );\r\n } else {\r\n if (options[\"navControl\"]) {\r\n navControlLocation = options[\"navControl\"];\r\n }\r\n return new mapLibraries.maplibregl.Map(defaultGlOptions)\r\n .addControl(\r\n new mapLibraries.maplibregl.AttributionControl({\r\n compact: false\r\n })\r\n )\r\n .addControl(new mapLibraries.maplibregl.NavigationControl(), navControlLocation);\r\n }\r\n\r\n}\r\n","//Copyright 2023, Slpy, all rights reserved.\r\n//Check out https://github.com/Spy-API/Slpy-JS and https://www.slpy.com/legal for licensing and terms\r\n\r\nimport { mapLibraries } from \"./globals.js\";\r\nimport { loadMaplibre } from './loadMaplibre.js';\r\nimport { processOptions, maplibreCheck, loadMaplibreMap } from './maplibreFunctions';\r\n\r\n// MglMap function\r\nexport function maplibreMap(options) {\r\n mapLibraries.maplibregl = loadMaplibre();\r\n options = processOptions(options);\r\n if (maplibreCheck(options[\"container\"], false)) {\r\n return loadMaplibreMap(options);\r\n } else {\r\n return \"\";\r\n }\r\n}","//import {Map, AttributionControl, NavigationControl, LngLatBounds, setRTLTextPlugin} from 'maplibre-gl'\r\n//maplibregl does not currently support treeshaking, so we will import the entire library for now.\r\nimport maplibregl from 'maplibre-gl'\r\n\r\nexport function loadMaplibre () {\r\n let maplibregls = {};\r\n if (typeof window !== \"undefined\" && typeof window.maplibregl !== \"undefined\") {\r\n return window.maplibregl;\r\n } else {\r\n try {\r\n maplibregls = {\r\n ...maplibregl\r\n };\r\n } catch (e) {\r\n console.log(e);\r\n console.log(\"Slpy JS: 'maplibre' could not be found. Make sure https://github.com/maplibre/maplibre-gl-js is installed and/or the script has been run before this function.\");\r\n }\r\n }\r\n return maplibregls;\r\n}","import generalFunctions from './index.js';\r\nimport { maplibreMap } from './src/maplibreMap.js';\r\n\r\nconst slpy = {\r\n maplibreMap,\r\n ...generalFunctions\r\n };\r\n\r\nexport {\r\n slpy,\r\n generalFunctions,\r\n maplibreMap\r\n };"],"names":["mapState","maplibreLoaded","openlayersLoaded","openlayersLoading","openlayersReady","undefined","mapStyleUrl","oldIE","aerialImageryOn","streetLevelOn","settings","openlayersFallback","rasterFallback","mapFilter","apiKey","language","mapLibraries","ol","olms","maplibregl","addAutocomplete","targetInput","autoOptions","onInputChange","inputField","document","getElementById","nodeName","toLowerCase","console","log","autoCountry","autoKey","dropdownWidth","offsetWidth","offsetLeft","offsetTop","autoCompleteType","autoFilter","resultsLimit","parseInt","debounceTime","listContainer","createElement","className","id","appendChild","body","updateListContainerPosition","event","containerPosition","parentNode","getBoundingClientRect","inputFieldRectStart","inputFieldRect","left","top","height","viewportHeight","window","visualViewport","innerHeight","type","style","position","pageXOffset","pageYOffset","width","maxHeight","Math","max","lastSelect","lastSearch","addEvent","element","handler","useCapture","addEventListener","attachEvent","removeEvent","eventType","eventHandler","removeEventListener","detachEvent","e","keyCode","preventDefault","getElementsByClassName","focus","classList","remove","setTimeout","currentRequest","makeRequest","url","callback","abort","xhr","method","XMLHttpRequest","open","XDomainRequest","createCORSRequest","onreadystatechange","readyState","status","obj","JSON","parse","responseText","send","resultsObj","updateGlobalObj","func","timeout","timer","debouncedInput","query","value","length","encodeURIComponent","processDropdown","Object","keys","hasResults","innerHTML","forEach","key","ele","objIcon","quality","indexOf","replace","setAttribute","poweredByLabel","contains","add","scrollAmount","rect","windowHeight","documentElement","clientHeight","bottom","elementHeight","visibleHeight","scrollToHeight","scrollBy","scrollIfNeeded","response","obj1Length","filter","isNaN","String","prototype","hasOwnProperty","call","newKey","clearTimeout","args","Array","slice","arguments","apply","this","bind","dragging","handleClickOutside","target","currentTarget","getAttribute","handleDropdownItemClick","dropdownItem","elem","selector","matches","msMatchesSelector","getClosest","activeElement","txt","textContent","trim","selectedObj","handlerDropdownItemClick","updateAutocomplete","newOptions","isWebGL2Supported","canvas","WebGL2RenderingContext","getContext","loadScript","script","src","head","toRad","x","PI","distanceInKM","lat1","lon1","lat2","lon2","dLon","acos","sin","cos","markerVectorSource","markerVectorLayer","markerOverlay","hasPopupInfo","createMarker","lonLat","name","markerFeature","Feature","geometry","geom","Point","proj","fromLonLat","icon","btoa","iconSolid","setId","markerStyle","Style","image","Icon","opacity","color","anchor","anchorXUnits","anchorYUnits","imgSize","documentMode","setStyle","markerTextStyle","text","Text","toString","fill","Fill","stroke","Stroke","offsetY","textBaseline","textAlign","font","markerTextFeature","waitForMapillary","mpyKey","map","mapillary","addMapillary","onMapillaryChange","change","evt","createEvent","state","initEvent","dispatchEvent","MapillaryKey","ua","navigator","userAgent","mplycss","href","rel","mlyContainer","maptarContainer","getTargetElement","getContainer","newDiv","insertBefore","mlyDiv","streetLevelIcon","scale","updateBearingStyle","bearing","rotation","photoDot","Circle","radius","photoDotAerial","mapillarySource","layer","VectorTile","source","format","MVT","tileGrid","tilegrid","createXYZ","maxZoom","tilePixelRatio","minZoom","streetLevelButton","control","Control","constructor","opt_options","options","SLbutton","cssText","super","handleStreetLevel","getView","getZoom","alert","mpjscanvas","mpjsdom","getMap","removeLayer","movingPointLayer","display","updateSize","setVisible","centerCurrent","toLonLat","getCenter","bboxCurrent","transformExtent","calculateExtent","getSize","maptarParent","xmlhttp","myArr","data","addLayer","mly","moveTo","reason","featureOverlay","compass_angle","getVisible","animate","zoom","duration","offsetHeight","resize","addControl","pointFeature","center","highlight","Vector","features","visible","Viewer","accessToken","component","cover","container","on","originalLngLat","lng","lat","setCenter","getGeometry","setCoordinates","compassAngle","pixel","isClick","feature","forEachFeatureAtPixel","layerFilter","hitTolerance","get","getSource","removeFeature","err","addFeature","displayFeatureInfo","StreetLevelControl","streetLevel","toArray","getBounds","streetLevelLoad","addSource","streetLevelIconSource","cirOpac","minzoom","maxzoom","paint","layout","zoomTo","coordinates","properties","tiles","onAdd","_map","_container","SLicon","onRemove","removeChild","lngLat","setData","flyTo","queryRenderedFeatures","point","layers","fkey","generalFunctions","addressAutocomplete","formTarget","tagName","inputFields","querySelectorAll","formParts","i","autoCompleteAttr","autoSection","split","lastSpaceIndex","lastIndexOf","returnUpdates","autoSectionKey","returnUpdate","returnInput","selectedItem","autoSectionEle","push","addAerialImagery","aerialImageryLoad","AIbbox","isInAerialArea","curmapaiz","inSatArea","bbarea","curmapcentr","BBX","extent","boundingExtent","containsCoordinate","satelliteSource","Tile","XYZ","zindex","satelliteSourceRaster","AIbutton","AIicon","AerialImageryControl","backgroundImage","getLayers","refresh","insertAt","showingAerialButton","AerialButton","click","isInAerialAreaMb","LngLatBounds","originalStyle","AerialImagery","slicosour","mimgsour","mimglay","getLayer","slilay","aerialImagerySource","getStyle","setPaintProperty","setLayoutProperty","scheme","tileSize","addMarkers","markers","markerFeatures","once","popupe","content","closer","Overlay","autoPan","autoPanAnimation","addOverlay","onclick","setPosition","blur","getId","markerIndex","iconStyle","falayers","Marker","offset","setLngLat","setPopup","Popup","setHTML","addTo","falayertext","highlightMarker","featureToHighlight","getFeatureById","featureImage","getImage","iconImage_","color_","setZIndex","hmarker","parentElement","zIndex","dehighlightMarker","removeMarker","featureToClose","hpopup","querySelector","setMarkerOpen","quickMarkersCenter","latAr","lonAr","num_coords","Number","distance","min","setInteractionOnFocus","div","mapob","mapDivEl","tabIndex","insertAdjacentHTML","mapDivNotice","getInteractions","interaction","DragPan","MouseWheelZoom","setActive","handleMapTouch","disable","enable","setTransform","transform","urlParts","baseUrl","params","newParams","join","view","startPoint","destination","lon","currentZoom","done","parts","called","getcenter","values","topZoom","complete","boundingbox","bbox","fitBounds","padding","right","flyOpt","maxDuration","distanceInMI","openlayersParts","controls","interactions","maplibreCheck","targetDivId","WebGLRenderingContext","isWebGL1Supported","getVersion","maplibreMap","maplibregls","loadMaplibre","processOptions","MglOptions","assign","antialias","navControlLocation","substring","defaultGlOptions","hash","attributionControl","attrname","Map","AttributionControl","compact","NavigationControl","loadMaplibreMap","slpy"],"mappings":"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"}