126 lines
5.4 KiB
JavaScript
126 lines
5.4 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
||
const newsletterTitle = document.getElementById("newsletter-title");
|
||
const newsletterForm = document.getElementById("newsletter-form");
|
||
const newsletterMessageInput = document.getElementById("newsletter-message");
|
||
const newsletterButton = document.getElementById("newsletter-button");
|
||
const newsletterModal = document.getElementById("newsletter-modal");
|
||
const closeButton = document.querySelectorAll(".close-button");
|
||
|
||
// Проверка существования элементов перед добавлением обработчиков
|
||
if (newsletterButton) {
|
||
newsletterButton.addEventListener("click", () => {
|
||
if (newsletterTitle && newsletterMessageInput && newsletterModal) {
|
||
newsletterMessageInput.value = ""; // Очистить поле ввода
|
||
newsletterTitle.textContent = "Рассылка";
|
||
newsletterModal.classList.add("show"); // Показать модальное окно
|
||
}
|
||
});
|
||
}
|
||
|
||
if (newsletterForm) {
|
||
newsletterForm.addEventListener("submit", async (event) => {
|
||
event.preventDefault();
|
||
const message = newsletterMessageInput.value;
|
||
|
||
try {
|
||
const response = await fetch(`/send-newsletter`, {
|
||
method: "POST",
|
||
headers: {
|
||
"Content-Type": "application/json"
|
||
},
|
||
body: JSON.stringify({ message: message })
|
||
});
|
||
|
||
// Парсим JSON-ответ
|
||
const result = await response.json();
|
||
|
||
if (response.ok) {
|
||
alert("Рассылка отправлена успешно!");
|
||
if (newsletterModal) {
|
||
newsletterModal.classList.remove("show"); // Скрыть модальное окно
|
||
}
|
||
} else {
|
||
// Показать сообщение об ошибке, если оно есть
|
||
const errorMessage = result.message || "Произошла ошибка, рассылка не была начата";
|
||
alert(`Ошибка: ${errorMessage}`);
|
||
if (newsletterModal) {
|
||
newsletterModal.classList.remove("show"); // Скрыть модальное окно
|
||
}
|
||
}
|
||
} catch (error) {
|
||
console.error("Error:", error);
|
||
alert("Произошла ошибка при отправке запроса.");
|
||
}
|
||
});
|
||
}
|
||
|
||
if (closeButton.length > 0) {
|
||
closeButton.forEach(button => {
|
||
button.addEventListener("click", (event) => {
|
||
const modalId = event.target.getAttribute("data-modal-id");
|
||
const modal = document.getElementById(modalId);
|
||
if (modal) {
|
||
modal.classList.remove("show"); // Скрыть соответствующее модальное окно
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
function closeModal(event) {
|
||
if (newsletterModal && event.target === newsletterModal) {
|
||
newsletterModal.classList.remove("show"); // Скрыть модальное окно при клике вне его
|
||
}
|
||
}
|
||
|
||
window.addEventListener("click", closeModal);
|
||
window.addEventListener("touchend", closeModal); // Обработка касания на мобильных устройствах
|
||
|
||
const statusToggles = document.querySelectorAll('.status-toggle');
|
||
|
||
statusToggles.forEach(toggle => {
|
||
toggle.addEventListener('change', async function() {
|
||
const userId = this.getAttribute('data-user-id');
|
||
const status = this.checked ? 'enabled' : 'disabled';
|
||
|
||
try {
|
||
const response = await fetch(`/update_status/${userId}`, {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
'X-CSRFToken': getCookie('csrftoken') // Получение CSRF токена
|
||
},
|
||
body: JSON.stringify({ status: status })
|
||
});
|
||
|
||
if (response.ok) {
|
||
const statusLabel = this.closest('.user-status').querySelector('.status-label');
|
||
if (statusLabel) {
|
||
statusLabel.textContent = this.checked ? 'Доступ открыт' : 'Доступ закрыт';
|
||
}
|
||
console.log('Status updated successfully');
|
||
} else {
|
||
console.error('Failed to update status');
|
||
}
|
||
} catch (error) {
|
||
console.error('Error:', error);
|
||
}
|
||
});
|
||
});
|
||
});
|
||
|
||
// Функция для получения CSRF токена из cookie
|
||
function getCookie(name) {
|
||
let cookieValue = null;
|
||
if (document.cookie && document.cookie !== '') {
|
||
const cookies = document.cookie.split(';');
|
||
for (let i = 0; i < cookies.length; i++) {
|
||
const cookie = cookies[i].trim();
|
||
if (cookie.substring(0, name.length + 1) === (name + '=')) {
|
||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return cookieValue;
|
||
}
|