(function ($) { var map = null; var cluster = null; var elementInvoking = null; var postRequest = null; var searchValue = null; var refreshing = false; var refresh = 0; var lastRefresh = 0; var markers = []; var defaultSettings = { autoClose: true, sourceUrl: "api/getInpostMachines.xml", type: "point", title: "Wybierz punkt nadania", country: "PL", }; var callbackGlobal = null; var scrollToElem = null; var settings = {}; // old browser compatible below var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var icons = { red: new (L.Icon.Default)({ iconUrl: 'marker-icon.png', iconRetinaUrl: 'marker-icon-2x.png', shadowUrl: '', shadowSize: [0, 0] }), }; window.displayMessage = function (type) { $(".pointsList .choose-point-info").show(); $(".pointsList .choose-point-info").hide(); $(".pointsList .choose-point-" + type).show(); } // window.ShowMap = function (event, courierSource, lat, lng, autoClose = true) { window.ShowMap = function (event, courierSource, lat, lng, autoClose = true, callback = function () { }) { return new Promise(async (resolve, reject) => { // debugger; $('#mapPopup').show(); $("#mapPopup #search-input").val(""); callbackGlobal = callback; elementInvoking = null; elementInvoking = event.target; defaultSettings = sources[courierSource]; if (typeof defaultSettings !== "undefined") { // defaultSettings = courierSource; settings = _extends({}, defaultSettings, settings); var boundingbox = [ "49.0020468", "55.0336963", "14.1229707", "24.145783" ]; var zoom = 10; if (lat !== undefined && lng !== undefined) { zoom = 12; } else { zoom = 6; } if (lat === undefined) lat = 52.209402; if (lng === undefined) lng = 19.302979; if (!map) { map = L.map('placeMapHere', { center: [lat, lng], zoom: zoom, maxBounds: [ [boundingbox[0], boundingbox[2]], [boundingbox[1], boundingbox[3]], ] }); L.tileLayer('https://b.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA', maxZoom: 18, }).addTo(map); map.addLayer(cluster = L.markerClusterGroup( { maxClusterRadius: 50 } )); map.on('zoomend', idle); map.on('moveend', idle); } else { markers.forEach(function (marker) { $("#mapPopup #point-details-" + marker.fullPointData.id).remove(); if (marker.fullPointData.source !== undefined) { $("#mapPopup #point-details-" + marker.fullPointData.id + "---" + marker.fullPointData.source.id).remove(); } cluster.removeLayer(marker); }); map.setView(new L.LatLng(lat, lng), zoom, { animation: false }); map.fire('moveend'); } // await Promise.all([refreshPoints(lat, lng)]).then(resolve).catch(reject); await Promise.all([refreshPoints(lat, lng, callback)]).then(resolve).catch(reject); } else { window.displayMessage("nocarrier"); markers = []; $('#mapPopup').hide(); await Promise.all([callback(elementInvoking, null, 'Prawdopodobnie dostęp do tego kuriera nie został włączony. Skontaktuj się z administratorem serwisu www.epaka.pl')]).then(resolve).catch(reject); } }); } async function idle() { // await Promise.all([refreshPoints(map.getCenter().lat, map.getCenter().lng)]).then(() => { await Promise.all([refreshPoints(map.getCenter().lat, map.getCenter().lng, callbackGlobal)]).then(() => { if (scrollToElem != null) { $(".pointsList").scrollTo($(scrollToElem), 1000); } }); } // function refreshPoints(lat, lon/*,callback*/) { function refreshPoints(lat, lon, callback) { return new Promise((resolve, reject) => { // debugger; refreshing = true; refresh = (new Date()).getTime(); var data = _extends({ lat: lat, lon: lon, map: true }, settings.additionalData); if (postRequest != null) { postRequest.abort(); // postRequest = null; } console.log('| showMapPopUp Ajax POINT SEARCHING START...'); window.displayMessage("searching"); console.log(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent(defaultSettings.sourceUrl)); postRequest = $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent(defaultSettings.sourceUrl), data, function (response) { postRequest = null; // debugger; if (typeof response != "undefined") { if (typeof response != "object") { response = JSON.parse(response); } if (!jQuery.isEmptyObject(response)) { if (response.status == "OK") { // Promise.all([refreshPointsFromData(response.points/*,callback*/)]); Promise.all([refreshPointsFromData(response.points, callback)]); } } } resolve(); }, "json"); }); } function filterMap(map, markers) { // debugger; if (markers.length) { var bounds = map.getBounds(); var found = 0; for (var i in markers) { if (bounds.contains(markers[i].getLatLng())) { $('#point-details-' + markers[i].customPointId).removeClass("d-none"); found++; } else { $('#point-details-' + markers[i].customPointId).addClass("d-none"); } } if(!found && refreshing){ window.displayMessage("searching"); } else if(!found) { window.displayMessage("empty"); } else { window.displayMessage(""); } } } function createSearchPointSuccessHandler(mode = 17) { return function (response) { var isArray = Array.isArray(response); var isEmptyArray = isArray ? response.length === 0 : false // debugger; if (response && !isEmptyArray) { if (isArray) { response = response[0]; }; var latlng = { lat: parseFloat(response.lat), lng: parseFloat(response.lon), }; map.setView(latlng, mode); setTimeout(function () { filterMap(map, markers); }, 50); } else { filterMap(map, markers); window.displayMessage("notfound"); } } } function searchPoint() { const postcode = /([0-9]{2}-[0-9]{3})|([0-9]{5})/; const regInpost = /(\P\O\P\-)?[a-zA-Z]{3}[0-9]{1,3}[a-zA-Z]{0,2}/; const regPWR = /[a-zA-Z0-9]{2}-[0-9]{6}-[0-9]{2}-[0-9]{2}/; const regDPD = /[a-zA-Z]{2}[0-9]{5,6}/; const regDHL = /[0-9]{6,8}/; const regPP = /(UP|PP|DER|FUP)\W[a-zA-ZęĘóÓąĄśŚłŁżŻźŹćĆńŃ]{3,}/; if (searchValue == $('#search-input').val()) return; searchValue = $('#search-input').val(); $('.choose-point-details').css("display", "none"); $('.choose-point-searching').css("display", "inline-block"); // debugger; if (searchValue == "") { $('.choose-point-details').css("display", "inline-block"); $('.choose-point-searching').css("display", "none"); var latlng = { lat: 52.209402, lng: 19.302979, }; map.setView(latlng, 5); } else if (regInpost.test(searchValue)) { console.log("searchInpost: " + epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchInpost")); $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchInpost"), { q: searchValue }, createSearchPointSuccessHandler(), "json"); } else if (regPWR.test(searchValue)) { console.log("searchPWR (inpost): " + epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchPWR")); $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchPWR"), { q: searchValue }, createSearchPointSuccessHandler(), "json"); } else if (regDPD.test(searchValue)) { console.log("searchDPD: " + epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchDPD")); $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchDPD"), { q: searchValue }, createSearchPointSuccessHandler(), "json"); } else if (regDHL.test(searchValue)) { console.log("searchDHLSP: " + epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchDHLSP")); $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchDHLSP"), { q: searchValue }, createSearchPointSuccessHandler(), "json"); } else if (regPP.test(searchValue)) { console.log("searchPP: " + epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchPP")); $.post(epakaGetMachinesPointsAjax + '&endpoint=' + encodeURIComponent("map_popup/searchPP"), { q: searchValue }, createSearchPointSuccessHandler(), "json"); } else { var params = { limit: '1', countrycodes: settings.country, format: 'json', addressdetails: '1', }; if (postcode.test(searchValue)) { params.postalcode = searchValue; } else { params.q = searchValue; params.limit = 10; } var sanitizedPayload = encodeURIComponent("map.php?" + $.param(params)); console.log("searchPoint: " + EPAKA_API_URL_FULL + sanitizedPayload); $.ajax({ data: {}, method: 'GET', dataType: 'json', url: EPAKA_API_URL_FULL + sanitizedPayload, success: createSearchPointSuccessHandler(14) }).done(function (msg) { createSearchPointSuccessHandler(14); }); } return false; } // function refreshPointsFromData(data, /*callback*/) { function refreshPointsFromData(data, callback) { return new Promise((resolve, reject) => { // debugger; $('.choose-point-searching').css("display", "none"); var pointsArray = null; if (Array.isArray(data.point)) { // if (!jQuery.isEmptyObject(points)) { pointsArray = data.point; } else { pointsArray = [data.point]; } if (pointsArray === undefined) { reject(); return; }; if (refresh < lastRefresh) { return; } lastRefresh = refresh; var pointsToDelete = []; var pointsToKeep = []; var pointsToAdd = []; markers.forEach(function (el, index) { var test = false; for (var i = 0; i < pointsArray.length; i++) { if (el.fullPointData.id == pointsArray[i].id) { pointsToKeep.push(el); test = true; break; } } if (!test) { pointsToDelete.push(el); } }); pointsToDelete.forEach(function (el) { $("#mapPopup #point-details-" + el.fullPointData.id).remove(); if (el.fullPointData.source !== undefined) { $("#mapPopup #point-details-" + el.fullPointData.id + "---" + el.fullPointData.source.id).remove(); } cluster.removeLayer(el); }); markers = [...pointsToKeep]; for (var i = 0; i < pointsArray.length; i++) { var point = pointsArray[i]; if (point === undefined) continue; var newPoint = true; for (var x = 0; x < pointsToKeep.length; x++) { if (point.id == pointsToKeep[x].fullPointData.id) { newPoint = false; break; } } if (newPoint) { var icon = icons["red"]; if (point.source !== undefined) { if (point.source.marker !== undefined) { icon = icons[point.source.marker]; } } var marker = L.marker({ lat: point.lat, lng: point.lng }, { title: point.name, icon: icon }) // var marker = L.marker({ lat: point.lat, lng: point.lng }, { title: point.name }) markers.push(marker); if (point.source !== undefined) { marker.customPointId = point.id + "---" + point.source.id; } else { marker.customPointId = point.id; } marker.fullPointData = point; cluster.addLayer(marker); var choosePointDetailsElement = "