82 lines
2.8 KiB
JavaScript
82 lines
2.8 KiB
JavaScript
// static/programmer/js/floating-button.js
|
||
const CallbackModal = {
|
||
shown: false,
|
||
modalId: 'callbackModal',
|
||
floatingBtnId: 'floatingButton',
|
||
|
||
init() {
|
||
const body = document.body;
|
||
const showButton = body.dataset.showFloatingButton !== 'false' && body.dataset.showFloatingButton !== '0';
|
||
const delay = parseInt(body.dataset.floatingDelay, 10) || 5000;
|
||
|
||
if (!showButton) {
|
||
// Кнопка отключена – скрываем навсегда
|
||
const btn = document.getElementById(this.floatingBtnId);
|
||
if (btn) btn.style.display = 'none';
|
||
return;
|
||
}
|
||
|
||
setTimeout(() => {
|
||
const btn = document.getElementById(this.floatingBtnId);
|
||
if (btn) {
|
||
btn.style.display = 'block';
|
||
this.shown = true;
|
||
const button = btn.querySelector('.btn');
|
||
if (button) button.classList.add('pulse');
|
||
}
|
||
}, delay);
|
||
},
|
||
|
||
open(productTitle) {
|
||
const modal = document.getElementById(this.modalId);
|
||
if (modal) {
|
||
|
||
if (productTitle) {
|
||
const questionField = modal.querySelector('#id_question');
|
||
if (questionField) {
|
||
questionField.value = `Запрос цены по ПП "${productTitle}"`;
|
||
}
|
||
}
|
||
|
||
modal.style.display = 'block';
|
||
const floatingBtn = document.getElementById(this.floatingBtnId);
|
||
if (floatingBtn && this.shown) {
|
||
floatingBtn.style.display = 'none';
|
||
}
|
||
}
|
||
},
|
||
|
||
close() {
|
||
const modal = document.getElementById(this.modalId);
|
||
if (modal) {
|
||
modal.style.display = 'none';
|
||
const floatingBtn = document.getElementById(this.floatingBtnId);
|
||
if (floatingBtn && this.shown) {
|
||
floatingBtn.style.display = 'block';
|
||
const button = floatingBtn.querySelector('.btn.pulse');
|
||
if (button) {
|
||
button.style.animation = 'none';
|
||
setTimeout(() => button.style.animation = '', 10);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
// Инициализация и глобальные обработчики
|
||
document.addEventListener('DOMContentLoaded', () => {
|
||
CallbackModal.init();
|
||
|
||
// Закрытие по клику вне модального окна
|
||
const modal = document.getElementById(CallbackModal.modalId);
|
||
if (modal) {
|
||
modal.addEventListener('click', (event) => {
|
||
if (event.target === modal) CallbackModal.close();
|
||
});
|
||
}
|
||
|
||
// Закрытие по ESC
|
||
document.addEventListener('keydown', (event) => {
|
||
if (event.key === 'Escape') CallbackModal.close();
|
||
});
|
||
}); |