document.addEventListener('DOMContentLoaded', () => { // Не запускать на странице создания книги if (window.location.href.includes('/books/create')) { return; } // Ждём инициализации writerEditor function initAutosave() { const writerEditor = window.writerEditor; if (!writerEditor || !writerEditor.quill) { // Пробуем снова через 500ms setTimeout(initAutosave, 500); return; } const textarea = writerEditor.textarea; if (!textarea) return; let lastSavedContent = textarea.value; let saveTimeout; function showMessage(message, isError = false) { let msgEl = document.getElementById('autosave-message'); if (!msgEl) { msgEl = document.createElement('div'); msgEl.id = 'autosave-message'; msgEl.style.cssText = ` position: fixed; top: 70px; right: 10px; padding: 8px 12px; background: ${isError ? '#dc3545' : '#28a745'}; color: white; border-radius: 3px; z-index: 10000; font-size: 0.8rem; box-shadow: 0 2px 5px rgba(0,0,0,0.2); `; document.body.appendChild(msgEl); } msgEl.textContent = message; msgEl.style.background = isError ? '#dc3545' : '#28a745'; msgEl.style.display = 'block'; setTimeout(() => msgEl.style.display = 'none', 2000); } const autoSave = () => { const currentContent = textarea.value; // Не сохранять пустой контент if (!currentContent || currentContent.trim() === '' || currentContent === '


') { return; } if (currentContent === lastSavedContent) return; const form = writerEditor.form; if (!form) return; const formData = new FormData(form); formData.append('autosave', 'true'); formData.append('content', currentContent); showMessage('Сохранение...'); fetch(window.location.href, { method: 'POST', body: formData }) .then(res => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .then(data => { if (data.success) { lastSavedContent = currentContent; showMessage('Автосохранено: ' + new Date().toLocaleTimeString()); } else { throw new Error(data.error || 'Ошибка сервера'); } }) .catch(err => { console.error(err); showMessage('Ошибка автосохранения: ' + err.message, true); }); }; writerEditor.quill.on('text-change', () => { clearTimeout(saveTimeout); saveTimeout = setTimeout(autoSave, 2000); }); // Периодическая автосохранение setInterval(autoSave, 30000); } // Запускаем initAutosave(); });