make form buy-by-phone

This commit is contained in:
Roman Pyrih
2026-01-13 16:01:05 +01:00
parent 5aa89eb4a4
commit 0751588e2e
8 changed files with 892 additions and 357 deletions

View File

@@ -295,202 +295,337 @@ jQuery(document).ready(function ($) {
$btnBox.removeClass('active')
}
})
});
})
/* custom.js — LEKKIE przeniesienie sekcji .custom-buttons
Góra: klony top-level bloków (dzieci #category-description) z WYŁĄCZNIE .custom-buttons
Dół: oryginał bez sekcji .custom-buttons
NIE DZIAŁA podczas edycji w Elementor/Creative Elements.
*/
(function () {
'use strict';
;(function () {
'use strict'
// --- GUARD: nie uruchamiaj w trybie edycji (Elementor / Creative Elements) ---
function isEditing() {
var href = String(location.href || '');
var ref = String(document.referrer || '');
var topHref = '';
try { topHref = String(window.top.location.href || ''); } catch (e) { /* cross-origin fallback */ }
// --- GUARD: nie uruchamiaj w trybie edycji (Elementor / Creative Elements) ---
function isEditing() {
var href = String(location.href || '')
var ref = String(document.referrer || '')
var topHref = ''
try {
topHref = String(window.top.location.href || '')
} catch (e) {
/* cross-origin fallback */
}
// Zbiorcza „słomka” do przeszukania (ramka, referrer, parent)
var haystack = (href + ' ' + ref + ' ' + topHref).toLowerCase();
// Zbiorcza „słomka” do przeszukania (ramka, referrer, parent)
var haystack = (href + ' ' + ref + ' ' + topHref).toLowerCase()
// 1) Najpewniejsze: kontroler zaplecza CE
if (haystack.indexOf('controller=adminceeditor') !== -1) return true;
// 1) Najpewniejsze: kontroler zaplecza CE
if (haystack.indexOf('controller=adminceeditor') !== -1) return true
// 2) Podgląd/edycja elementora/CE
if (haystack.indexOf('elementor-preview') !== -1) return true;
// 2) Podgląd/edycja elementora/CE
if (haystack.indexOf('elementor-preview') !== -1) return true
// 3) Klasy/markery edytora na body w tej ramce
var body = document.body;
if (body && /\b(elementor-editor-active|ce-editor-active|ce-editing)\b/i.test(body.className)) return true;
// 3) Klasy/markery edytora na body w tej ramce
var body = document.body
if (
body &&
/\b(elementor-editor-active|ce-editor-active|ce-editing)\b/i.test(
body.className
)
)
return true
// 4) Panele edytora w oknie nadrzędnym (gdy front leci w iframe)
if (window.self !== window.top) {
try {
if (window.top.document.querySelector('#elementor-panel, .elementor-panel, #ce-editor, .ce-editor, .ce-panel')) {
return true;
}
} catch (e) { /* ignoruj brak dostępu */ }
}
// 4) Panele edytora w oknie nadrzędnym (gdy front leci w iframe)
if (window.self !== window.top) {
try {
if (
window.top.document.querySelector(
'#elementor-panel, .elementor-panel, #ce-editor, .ce-editor, .ce-panel'
)
) {
return true
}
} catch (e) {
/* ignoruj brak dostępu */
}
}
// 5) Ręczny wyłącznik
if (window.__CE_DISABLE_MOVE === true) return true;
// 5) Ręczny wyłącznik
if (window.__CE_DISABLE_MOVE === true) return true
return false;
}
return false
}
// Wstaw ZARAZ po definicji isEditing()
if (isEditing()) return;
// Wstaw ZARAZ po definicji isEditing()
if (isEditing()) return
var SOURCE_SEL = '#category-description';
var TARGET_SEL = '.row.\\31 11'; // .row.111 (esc)
var WRAP_ID = 'moved-category-structure';
var BUTTON_SEC = 'section.custom-buttons, section.custom-buttons1';
var ANY_SEC = 'section'; // lub 'section.elementor-top-section' jeśli chcesz zawęzić
var SOURCE_SEL = '#category-description'
var TARGET_SEL = '.row.\\31 11' // .row.111 (esc)
var WRAP_ID = 'moved-category-structure'
var BUTTON_SEC = 'section.custom-buttons, section.custom-buttons1'
var ANY_SEC = 'section' // lub 'section.elementor-top-section' jeśli chcesz zawęzić
var didFinish = false;
var obs = null;
var debounceId = null;
var didFinish = false
var obs = null
var debounceId = null
function ensureWrapper(target) {
var wrap = document.getElementById(WRAP_ID);
if (!wrap) {
wrap = document.createElement('div');
wrap.id = WRAP_ID;
wrap.className = 'moved-category-structure';
target.parentNode.insertBefore(wrap, target);
}
return wrap;
}
function ensureWrapper(target) {
var wrap = document.getElementById(WRAP_ID)
if (!wrap) {
wrap = document.createElement('div')
wrap.id = WRAP_ID
wrap.className = 'moved-category-structure'
target.parentNode.insertBefore(wrap, target)
}
return wrap
}
function topLevelBlocks(src) {
var out = [];
for (var i = 0; i < src.children.length; i++) {
var el = src.children[i];
if (el.nodeType === 1) out.push(el);
}
return out;
}
function topLevelBlocks(src) {
var out = []
for (var i = 0; i < src.children.length; i++) {
var el = src.children[i]
if (el.nodeType === 1) out.push(el)
}
return out
}
function cloneBlockWithOnlyButtons(block) {
var clone = block.cloneNode(true);
clone.querySelectorAll(ANY_SEC + ':not(.custom-buttons):not(.custom-buttons1)').forEach(function (sec) {
sec.remove();
});
clone.querySelectorAll('.ce-edit-btn, .ce-edit-outline').forEach(function (n) { n.remove(); });
if (!clone.querySelector(BUTTON_SEC)) return null;
return clone;
}
function cloneBlockWithOnlyButtons(block) {
var clone = block.cloneNode(true)
clone
.querySelectorAll(ANY_SEC + ':not(.custom-buttons):not(.custom-buttons1)')
.forEach(function (sec) {
sec.remove()
})
clone
.querySelectorAll('.ce-edit-btn, .ce-edit-outline')
.forEach(function (n) {
n.remove()
})
if (!clone.querySelector(BUTTON_SEC)) return null
return clone
}
function syncOnce() {
if (didFinish) return true;
function syncOnce() {
if (didFinish) return true
var src = document.querySelector(SOURCE_SEL);
var target = document.querySelector(TARGET_SEL);
if (!src || !target) return false;
var src = document.querySelector(SOURCE_SEL)
var target = document.querySelector(TARGET_SEL)
if (!src || !target) return false
var blocks = topLevelBlocks(src);
var blocksWithButtons = blocks.filter(function (b) { return !!b.querySelector(BUTTON_SEC); });
if (!blocksWithButtons.length) return false;
var blocks = topLevelBlocks(src)
var blocksWithButtons = blocks.filter(function (b) {
return !!b.querySelector(BUTTON_SEC)
})
if (!blocksWithButtons.length) return false
var wrap = ensureWrapper(target);
var wrap = ensureWrapper(target)
var frag = document.createDocumentFragment();
blocksWithButtons.forEach(function (b) {
var prunedClone = cloneBlockWithOnlyButtons(b);
if (prunedClone) frag.appendChild(prunedClone);
});
var frag = document.createDocumentFragment()
blocksWithButtons.forEach(function (b) {
var prunedClone = cloneBlockWithOnlyButtons(b)
if (prunedClone) frag.appendChild(prunedClone)
})
if (!frag.firstChild) return false;
if (!frag.firstChild) return false
while (wrap.firstChild) wrap.removeChild(wrap.firstChild);
wrap.appendChild(frag);
while (wrap.firstChild) wrap.removeChild(wrap.firstChild)
wrap.appendChild(frag)
src.querySelectorAll(BUTTON_SEC).forEach(function (sec) {
if (sec && sec.parentNode) sec.parentNode.removeChild(sec);
});
src.querySelectorAll(BUTTON_SEC).forEach(function (sec) {
if (sec && sec.parentNode) sec.parentNode.removeChild(sec)
})
didFinish = true;
if (obs) obs.disconnect();
return true;
}
didFinish = true
if (obs) obs.disconnect()
return true
}
function trySyncDebounced() {
if (debounceId) return;
debounceId = setTimeout(function () {
debounceId = null;
if (syncOnce() && obs) obs.disconnect();
}, 50);
}
function trySyncDebounced() {
if (debounceId) return
debounceId = setTimeout(function () {
debounceId = null
if (syncOnce() && obs) obs.disconnect()
}, 50)
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', trySyncDebounced, { once: true });
} else {
trySyncDebounced();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', trySyncDebounced, {
once: true,
})
} else {
trySyncDebounced()
}
obs = new MutationObserver(trySyncDebounced);
obs.observe(document.body || document.documentElement, { childList: true, subtree: true });
obs = new MutationObserver(trySyncDebounced)
obs.observe(document.body || document.documentElement, {
childList: true,
subtree: true,
})
if (window.prestashop && typeof window.prestashop.on === 'function') {
['updateProductList', 'updatedCart', 'updatedProduct'].forEach(function (ev) {
window.prestashop.on(ev, trySyncDebounced);
});
}
if (window.prestashop && typeof window.prestashop.on === 'function') {
;['updateProductList', 'updatedCart', 'updatedProduct'].forEach(function (
ev
) {
window.prestashop.on(ev, trySyncDebounced)
})
}
(function hookHistory() {
var _ps = history.pushState, _rs = history.replaceState;
function onNav() { trySyncDebounced(); }
history.pushState = function () { _ps.apply(this, arguments); onNav(); };
history.replaceState = function () { _rs.apply(this, arguments); onNav(); };
window.addEventListener('popstate', onNav);
})();
})();
;(function hookHistory() {
var _ps = history.pushState,
_rs = history.replaceState
function onNav() {
trySyncDebounced()
}
history.pushState = function () {
_ps.apply(this, arguments)
onNav()
}
history.replaceState = function () {
_rs.apply(this, arguments)
onNav()
}
window.addEventListener('popstate', onNav)
})()
})()
$(document).ready(function () {
function toggleChatWidget(isOpen) {
var $widget = $('div[data-testid="widgetButtonFrame"]')
var $scrollBox = $('.scroll-brn-box')
function toggleChatWidget(isOpen) {
var $widget = $('div[data-testid="widgetButtonFrame"]');
var $scrollBox = $('.scroll-brn-box')
if ($widget.length) {
if (isOpen) {
$widget.hide()
$scrollBox.hide()
} else {
$widget.show()
$scrollBox.show()
}
}
}
if ($widget.length) {
if (isOpen) {
$widget.hide();
$scrollBox.hide();
} else {
$widget.show();
$scrollBox.show();
}
}
}
function checkCartState() {
var $cart = $('.elementor-cart__container')
var isOpen = $cart.hasClass('elementor-cart--shown')
toggleChatWidget(isOpen)
}
function checkCartState() {
var $cart = $('.elementor-cart__container');
var isOpen = $cart.hasClass('elementor-cart--shown');
toggleChatWidget(isOpen);
}
$('a[href*="koszyk"][class*="elementor-button"]').on('click', function () {
setTimeout(checkCartState, 300)
})
$('a[href*="koszyk"][class*="elementor-button"]').on('click', function () {
setTimeout(checkCartState, 300);
});
$(document).on('click', '.elementor-cart__close-button', function () {
setTimeout(checkCartState, 300)
})
$(document).on('click', '.elementor-cart__close-button', function () {
setTimeout(checkCartState, 300);
});
$(document).on(
'click',
'.elementor-cart__container.elementor-lightbox.elementor-cart--shown',
function (e) {
if (e.target === this) {
setTimeout(checkCartState, 300)
}
}
)
$(document).on('click', '.elementor-cart__container.elementor-lightbox.elementor-cart--shown', function (e) {
if (e.target === this) {
setTimeout(checkCartState, 300);
}
});
const cartContainer = document.querySelector('.elementor-cart__container')
if (cartContainer) {
const observer = new MutationObserver(() => checkCartState())
observer.observe(cartContainer, {
attributes: true,
attributeFilter: ['class'],
})
}
const cartContainer = document.querySelector('.elementor-cart__container');
if (cartContainer) {
const observer = new MutationObserver(() => checkCartState());
observer.observe(cartContainer, { attributes: true, attributeFilter: ['class'] });
}
checkCartState();
});
checkCartState()
})
$(document).ready(function () {
if ($('#buy-by-phone-popup').length) {
var buyByPhonePopup = $('#buy-by-phone-popup')
$('#buy_by_phone_btn').on('click', function (e) {
$('#buy-by-phone-popup').find('input[name="buy-by-phone-name"]').val('')
$('#buy-by-phone-popup').find('input[name="buy-by-phone-phone"]').val('')
$('#buy-by-phone-popup').find('input[name="contact-time"]').val('')
$('#buy-by-phone-popup').find('input[name="product-name"]').val('')
$('#buy-by-phone-popup').find('input[name="shipping-address"]').val('')
$('#buy-by-phone-popup').find('input[name="phone-for-courier"]').val('')
$('#buy-by-phone-popup').find('input[name="email"]').val('')
$('#buy-by-phone-popup').find('input[name="comments-to-order"]').val('')
$('#buy-by-phone-popup .popup-footer').empty()
$('#buy-by-phone-popup')
.find('input[name="polityka"]')
.prop('checked', false)
buyByPhonePopup.addClass('active')
})
$('.close-popup', buyByPhonePopup).on('click', function (e) {
e.preventDefault()
buyByPhonePopup.removeClass('active')
})
$('.close-popup-alert', buyByPhonePopup).on('click', function (e) {
e.preventDefault()
$('.popup-alert', buyByPhonePopup).removeClass('active')
})
$('#buy-by-phone-form-btn').on('click', function (e) {
e.preventDefault()
$('#buy-by-phone-popup .popup-footer').empty()
var name = $('#buy-by-phone-popup')
.find('input[name="buy-by-phone-name"]')
.val()
var phone = $('#buy-by-phone-popup')
.find('input[name="buy-by-phone-phone"]')
.val()
var contact_time = $('#buy-by-phone-popup')
.find('input[name="contact-time"]')
.val()
var politics = $('#buy-by-phone-popup')
.find('input[name="polityka"]')
.prop('checked')
if (!phone) {
popupAlert('<p>Proszę wypełnić wymagane pola formularza</p>')
return
}
if (!politics) {
popupAlert('<p>Proszę wypełnić wymagane pola formularza</p>')
return
}
$(this).prop('disabled', true)
var formData = $('#buy-by-phone-form').serialize()
$.ajax({
type: 'POST',
url: '/buy-by-phone.php',
data: formData,
success: function (response) {
popupAlert(response)
$('#buy-by-phone-form-btn').prop('disabled', false)
setTimeout(function () {
buyByPhonePopup.removeClass('active')
}, 5000)
},
error: function () {
popupAlert('<p>Wystąpił błąd podczas wysyłania danych</p>')
$('#buy-by-phone-form-btn').prop('disabled', false)
},
})
})
function popupAlert(text) {
$('.popup-alert', buyByPhonePopup).addClass('active')
$('.popup-alert .popup-alert-data', buyByPhonePopup).empty()
$('.popup-alert .popup-alert-data', buyByPhonePopup).append(text)
setTimeout(function () {
$('.popup-alert', buyByPhonePopup).removeClass('active')
}, 3000)
}
}
})