diff --git a/public/app.js b/public/app.js index 451b27d..2fdb91f 100644 --- a/public/app.js +++ b/public/app.js @@ -17,6 +17,7 @@ const codeBtn = document.getElementById("codeBtn"); const linkBtn = document.getElementById("linkBtn"); const checkboxBtn = document.getElementById("checkboxBtn"); const imageBtn = document.getElementById("imageBtn"); +const previewBtn = document.getElementById("previewBtn"); // Кнопка настроек const settingsBtn = document.getElementById("settings-btn"); @@ -27,6 +28,10 @@ const imagePreviewContainer = document.getElementById("imagePreviewContainer"); const imagePreviewList = document.getElementById("imagePreviewList"); const clearImagesBtn = document.getElementById("clearImagesBtn"); +// Элементы для предпросмотра заметки +const notePreviewContainer = document.getElementById("notePreviewContainer"); +const notePreviewContent = document.getElementById("notePreviewContent"); + // Модальное окно для просмотра изображений const imageModal = document.getElementById("imageModal"); const modalImage = document.getElementById("modalImage"); @@ -35,6 +40,9 @@ const modalClose = document.querySelector(".image-modal-close"); // Массив для хранения выбранных изображений let selectedImages = []; +// Флаг режима предпросмотра +let isPreviewMode = false; + // Глобальные переменные для заметок и фильтрации let allNotes = []; let selectedDateFilter = null; @@ -771,6 +779,52 @@ imageBtn.addEventListener("touchend", function (event) { imageInput.click(); }); +// Обработчик для кнопки предпросмотра +previewBtn.addEventListener("click", function () { + togglePreview(); +}); + +// Функция переключения режима предпросмотра +function togglePreview() { + isPreviewMode = !isPreviewMode; + + if (isPreviewMode) { + // Показываем предпросмотр + noteInput.style.display = "none"; + notePreviewContainer.style.display = "block"; + + // Получаем содержимое и рендерим его + const content = noteInput.value; + if (content.trim()) { + // Парсим markdown и делаем теги кликабельными + const htmlContent = marked.parse(content); + const contentWithTags = makeTagsClickable(htmlContent); + notePreviewContent.innerHTML = contentWithTags; + + // Инициализируем lazy loading для изображений в превью + setTimeout(() => { + initLazyLoading(); + }, 0); + } else { + notePreviewContent.innerHTML = + '
Нет содержимого для предпросмотра
'; + } + + // Меняем иконку кнопки + previewBtn.innerHTML = + ''; + previewBtn.title = "Закрыть предпросмотр"; + } else { + // Возвращаемся к редактированию + noteInput.style.display = "block"; + notePreviewContainer.style.display = "none"; + + // Меняем иконку обратно + previewBtn.innerHTML = ''; + previewBtn.title = "Предпросмотр"; + } +} + // Обработчик выбора файлов imageInput.addEventListener("change", function (event) { const files = Array.from(event.target.files); @@ -1278,14 +1332,24 @@ async function renderNotes(notes) {Нет содержимого для предпросмотра
'; + } + + // Меняем иконку кнопки + btn.innerHTML = + ''; + btn.title = "Закрыть предпросмотр"; + } else { + // Возвращаемся к редактированию + textarea.style.display = "block"; + editPreviewContainer.style.display = "none"; + + // Меняем иконку обратно + btn.innerHTML = + ''; + btn.title = "Предпросмотр"; + } } else { insertMarkdownForEdit(textarea, button.tag); } @@ -2163,6 +2305,17 @@ async function saveNote() { selectedImages = []; updateImagePreview(); imageInput.value = ""; + + // Сбрасываем режим предпросмотра, если он был активен + if (isPreviewMode) { + isPreviewMode = false; + noteInput.style.display = "block"; + notePreviewContainer.style.display = "none"; + previewBtn.innerHTML = + ''; + previewBtn.title = "Предпросмотр"; + } + await loadNotes(true); // Показываем уведомление об успешном сохранении @@ -2407,8 +2560,12 @@ async function loadUserInfo() { if (response.ok) { const user = await response.json(); const userAvatar = document.getElementById("user-avatar"); - const userAvatarContainer = document.getElementById("user-avatar-container"); - const userAvatarPlaceholder = document.getElementById("user-avatar-placeholder"); + const userAvatarContainer = document.getElementById( + "user-avatar-container" + ); + const userAvatarPlaceholder = document.getElementById( + "user-avatar-placeholder" + ); // Показываем аватарку или плейсхолдер if (user.avatar) { diff --git a/public/notes.html b/public/notes.html index 3b55d3e..26cea2b 100644 --- a/public/notes.html +++ b/public/notes.html @@ -222,41 +222,36 @@ style="display: none" >