/* * Copyright 2024 DPD Polska Sp. z o.o. * * NOTICE OF LICENSE * * Licensed under the EUPL-1.2 or later. * You may not use this work except in compliance with the Licence. * * You may obtain a copy of the Licence at: * https://joinup.ec.europa.eu/software/page/eupl * It is also bundled with this package in the file LICENSE.txt * * Unless required by applicable law or agreed to in writing, * software distributed under the Licence is distributed on an AS IS basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions * and limitations under the Licence. * * @author DPD Polska Sp. z o.o. * @copyright 2024 DPD Polska Sp. z o.o. * @license https://joinup.ec.europa.eu/software/page/eupl */ // noinspection JSUnresolvedReference console.log('[DPD SwipBox] Skrypt załadowany'); if (typeof dpsShippingSwipBoxEventCreated == 'undefined') { var dpsShippingSwipBoxEventCreated = false; } if (typeof dpsShippingSwipBoxIframeCreated == 'undefined') { var dpsShippingSwipBoxIframeCreated = false; } /** * Tworzy iframe dla mapy SwipBox - wywoływane przy otwieraniu modala */ function dpsShippingSwipBoxCreateIframe() { console.log('[DPD SwipBox] Próba utworzenia iframe...'); // Sprawdź czy iframe już istnieje if (document.getElementById("dpdshipping-widget-pudo-swipbox-iframe")) { console.log('[DPD SwipBox] Iframe już istnieje'); return true; } // Walidacja: sprawdź czy URL iframe jest zdefiniowany if (typeof dpdshipping_iframe_swipbox_url === 'undefined' || !dpdshipping_iframe_swipbox_url) { console.error('[DPD SwipBox] Błąd: dpdshipping_iframe_swipbox_url nie jest zdefiniowany lub jest pusty'); console.error('[DPD SwipBox] Dostępne zmienne:', { dpdshipping_iframe_swipbox_url: typeof dpdshipping_iframe_swipbox_url !== 'undefined' ? dpdshipping_iframe_swipbox_url : 'UNDEFINED', dpdshipping_id_pudo_swipbox_carrier: typeof dpdshipping_id_pudo_swipbox_carrier !== 'undefined' ? dpdshipping_id_pudo_swipbox_carrier : 'UNDEFINED' }); return false; } // Walidacja: sprawdź czy element docelowy istnieje var dpsShippingSwipBox_script = document.getElementById("dpdshipping-widget-pudo-swipbox"); if (!dpsShippingSwipBox_script) { console.error('[DPD SwipBox] Błąd: Nie znaleziono elementu #dpdshipping-widget-pudo-swipbox'); return false; } var dpsShippingSwipBox_iframe = document.createElement("iframe"); dpsShippingSwipBox_iframe.setAttribute("id", "dpdshipping-widget-pudo-swipbox-iframe"); dpsShippingSwipBox_iframe.setAttribute("allow", "geolocation"); dpsShippingSwipBox_iframe.style.width = "100%"; dpsShippingSwipBox_iframe.style.border = "none"; dpsShippingSwipBox_iframe.style.minHeight = "400px"; dpsShippingSwipBox_iframe.style.height = "768px"; // Obsługa błędów ładowania iframe dpsShippingSwipBox_iframe.onerror = function() { console.error('[DPD SwipBox] Błąd ładowania iframe'); }; dpsShippingSwipBox_iframe.onload = function() { console.log('[DPD SwipBox] Iframe załadowany pomyślnie'); }; // Ustaw src dpsShippingSwipBox_iframe.src = dpdshipping_iframe_swipbox_url; dpsShippingSwipBox_script.parentNode.insertBefore(dpsShippingSwipBox_iframe, dpsShippingSwipBox_script); console.log('[DPD SwipBox] Iframe dodany do DOM, URL:', dpdshipping_iframe_swipbox_url); // Eksportuj iframe do globalnego scope window.dpsShippingSwipBox_iframe = dpsShippingSwipBox_iframe; dpsShippingSwipBoxIframeCreated = true; return true; } // Obserwator DOM - czeka na pojawienie się elementu function dpsShippingSwipBoxObserveDOM() { // Sprawdź czy element już istnieje if (document.getElementById("dpdshipping-widget-pudo-swipbox")) { console.log('[DPD SwipBox] Element znaleziony w DOM'); dpsShippingSwipBoxCreateIframe(); return; } // Jeśli nie ma, obserwuj zmiany w DOM if (typeof MutationObserver !== 'undefined') { console.log('[DPD SwipBox] Uruchamiam MutationObserver...'); var observer = new MutationObserver(function(mutations) { if (document.getElementById("dpdshipping-widget-pudo-swipbox")) { console.log('[DPD SwipBox] Element pojawił się w DOM (MutationObserver)'); observer.disconnect(); dpsShippingSwipBoxCreateIframe(); } }); observer.observe(document.body, { childList: true, subtree: true }); // Timeout - zatrzymaj obserwację po 30 sekundach setTimeout(function() { observer.disconnect(); }, 30000); } } // Próba utworzenia iframe przy DOMContentLoaded if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { console.log('[DPD SwipBox] DOMContentLoaded'); dpsShippingSwipBoxObserveDOM(); }); } else { // DOM już załadowany console.log('[DPD SwipBox] DOM już załadowany'); dpsShippingSwipBoxObserveDOM(); } // Dodatkowa próba przy otwieraniu modala - nasłuchuj na zdarzenia modala $(document).ready(function() { console.log('[DPD SwipBox] jQuery ready'); // Nasłuchuj na otwieranie modala $(document).on('click', '.dpdshipping-pudo-swipbox-open-map-btn, .dpdshipping-pudo-swipbox-change-map-btn', function() { console.log('[DPD SwipBox] Kliknięto przycisk otwierania mapy'); // Sprawdź ponownie po kliknięciu setTimeout(function() { console.log('[DPD SwipBox] Sprawdzam element po kliknięciu...'); console.log('[DPD SwipBox] Modal:', document.getElementById('dpdshippingPudoSwipBoxModal')); console.log('[DPD SwipBox] Script element:', document.getElementById('dpdshipping-widget-pudo-swipbox')); dpsShippingSwipBoxCreateIframe(); }, 200); }); // Nasłuchuj na zdarzenie show modala (Bootstrap) $(document).on('show.bs.modal shown.bs.modal', '#dpdshippingPudoSwipBoxModal', function() { console.log('[DPD SwipBox] Modal pokazywany (Bootstrap event)'); dpsShippingSwipBoxCreateIframe(); }); }); // Event listener dla wiadomości z iframe if (!dpsShippingSwipBoxEventCreated) { var dpsShippingSwipBox_eventListener = window[window.addEventListener ? "addEventListener" : "attachEvent"]; var dpsShippingSwipBox_messageEvent = ("attachEvent" === dpsShippingSwipBox_eventListener) ? "onmessage" : "message"; dpsShippingSwipBox_eventListener(dpsShippingSwipBox_messageEvent, function (a) { if (typeof getDpdshippingIdPudoSwipBoxCarrier !== 'function' || typeof getDpdshippingSelectedCarrier !== 'function') { return; } if (getDpdshippingIdPudoSwipBoxCarrier() === getDpdshippingSelectedCarrier()) { var iframe = window.dpsShippingSwipBox_iframe || document.getElementById("dpdshipping-widget-pudo-swipbox-iframe"); if (a.data && a.data.height && !isNaN(a.data.height)) { if (iframe) { iframe.style.height = a.data.height + "px"; } } else if (a.data && a.data.point_id) { dpdShippingSwipBoxPointSelected(a.data.point_id); } } }, !1); dpsShippingSwipBoxEventCreated = true; } function dpdShippingSwipBoxPointSelected(pudoSwipBoxe) { if (!pudoSwipBoxe) { console.error('[DPD SwipBox] Błąd: Brak ID punktu'); return; } $('.container_dpdshipping_pudo_swipbox_error').css("display", "none"); $('.dpdshipping-pudo-swipbox-new-point').css("display", "none"); $('.dpdshipping-pudo-swipbox-selected-point').css("display", "block"); if (typeof dpdshippingSavePudoCode === 'function') { dpdshippingSavePudoCode(pudoSwipBoxe, $('#dpdshippingPudoSwipBoxModal')); } else { console.error('[DPD SwipBox] Funkcja dpdshippingSavePudoCode nie jest dostępna'); } if (typeof dpdshippingGetPudoAddress === 'function') { dpdshippingGetPudoAddress(pudoSwipBoxe, $('.dpdshipping-swipbox-selected-point')); } else { console.error('[DPD SwipBox] Funkcja dpdshippingGetPudoAddress nie jest dostępna'); } console.log('[DPD SwipBox] Wybrano punkt:', pudoSwipBoxe); }