aktualizacja modułu dpd
This commit is contained in:
203
modules/dpdshipping/views/js/dpdshipping-pudo-swipbox-iframe.js
Normal file
203
modules/dpdshipping/views/js/dpdshipping-pudo-swipbox-iframe.js
Normal file
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
Reference in New Issue
Block a user