NoteJS/public/notes.html
Fovway 9ecc787719 Обновлены зависимости и улучшена поддержка PWA
- Добавлена библиотека pngjs для работы с PNG изображениями
- Добавлены мета-теги для улучшения поддержки PWA на страницах: index.html, notes.html, profile.html, register.html
- Обновлен сервисный работник для улучшенного кэширования и обработки запросов
- Добавлены функции для отладки PWA в консоли
2025-10-20 09:09:45 +07:00

286 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Заметки - NoteJS</title>
<!-- PWA Meta Tags -->
<meta name="description" content="NoteJS - современная система заметок с поддержкой Markdown, изображений, тегов и календаря" />
<meta name="theme-color" content="#007bff" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="apple-mobile-web-app-title" content="NoteJS" />
<meta name="msapplication-TileColor" content="#007bff" />
<!-- Icons -->
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/icons/icon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/icons/icon-16x16.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-192x192.png" />
<link rel="mask-icon" href="/icon.svg" color="#007bff" />
<!-- Manifest -->
<link rel="manifest" href="/manifest.json" />
<!-- Styles -->
<link rel="stylesheet" href="/style.css?v=4" />
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/iconify/2.0.0/iconify.min.js"></script>
</head>
<body>
<!-- Кнопка открытия слайдера для мобильной версии -->
<div class="mobile-menu-btn" id="mobileMenuBtn">
<span class="iconify" data-icon="mdi:menu"></span>
</div>
<!-- Слайдер для мобильной версии -->
<div class="mobile-sidebar" id="mobileSidebar">
<div class="sidebar-close-btn" id="sidebarCloseBtn">
<span class="iconify" data-icon="mdi:close"></span>
</div>
<div class="sidebar-content">
<div class="mini-calendar">
<div class="calendar-header">
<button class="calendar-nav" id="prevMonthMobile"></button>
<span class="calendar-month-year" id="monthYearMobile"></span>
<button class="calendar-nav" id="nextMonthMobile"></button>
</div>
<div class="calendar-weekdays">
<div class="calendar-weekday">Пн</div>
<div class="calendar-weekday">Вт</div>
<div class="calendar-weekday">Ср</div>
<div class="calendar-weekday">Чт</div>
<div class="calendar-weekday">Пт</div>
<div class="calendar-weekday">Сб</div>
<div class="calendar-weekday">Вс</div>
</div>
<div class="calendar-days" id="calendarDaysMobile"></div>
</div>
<!-- Секция поиска -->
<div class="search-section">
<div class="search-header">
<span class="search-title"
><span class="iconify" data-icon="mdi:magnify"></span> Поиск</span
>
</div>
<div class="search-container">
<input
type="text"
id="searchInputMobile"
placeholder="Поиск по заметкам..."
class="search-input"
/>
<button
id="clearSearchBtnMobile"
class="clear-search-btn"
style="display: none"
>
</button>
</div>
</div>
<!-- Секция тегов -->
<div class="tags-section">
<div class="tags-header">
<span class="tags-title"
><span class="iconify" data-icon="mdi:tag"></span> Теги</span
>
</div>
<div class="tags-container" id="tagsContainerMobile">
<!-- Теги будут добавлены динамически -->
</div>
</div>
</div>
</div>
<!-- Оверлей для закрытия слайдера -->
<div class="mobile-sidebar-overlay" id="sidebarOverlay"></div>
<div class="container-leftside">
<div class="mini-calendar">
<div class="calendar-header">
<button class="calendar-nav" id="prevMonth"></button>
<span class="calendar-month-year" id="monthYear"></span>
<button class="calendar-nav" id="nextMonth"></button>
</div>
<div class="calendar-weekdays">
<div class="calendar-weekday">Пн</div>
<div class="calendar-weekday">Вт</div>
<div class="calendar-weekday">Ср</div>
<div class="calendar-weekday">Чт</div>
<div class="calendar-weekday">Пт</div>
<div class="calendar-weekday">Сб</div>
<div class="calendar-weekday">Вс</div>
</div>
<div class="calendar-days" id="calendarDays"></div>
</div>
<!-- Секция поиска -->
<div class="search-section">
<div class="search-header">
<span class="search-title"
><span class="iconify" data-icon="mdi:magnify"></span> Поиск</span
>
</div>
<div class="search-container">
<input
type="text"
id="searchInput"
placeholder="Поиск по заметкам..."
class="search-input"
/>
<button
id="clearSearchBtn"
class="clear-search-btn"
style="display: none"
>
</button>
</div>
</div>
<!-- Секция тегов -->
<div class="tags-section">
<div class="tags-header">
<span class="tags-title"
><span class="iconify" data-icon="mdi:tag"></span> Теги</span
>
</div>
<div class="tags-container" id="tagsContainer">
<!-- Теги будут добавлены динамически -->
</div>
</div>
</div>
<div class="center">
<div class="container">
<header class="notes-header">
<div class="notes-header-left">
<span
><span class="iconify" data-icon="mdi:note-text"></span> Мои
заметки</span
>
<div
id="filter-indicator"
class="filter-indicator"
style="display: none"
></div>
</div>
<div class="user-info">
<div
id="user-avatar-container"
style="display: none; margin-right: 10px"
>
<img
id="user-avatar"
src=""
alt="Аватар"
style="
width: 32px;
height: 32px;
border-radius: 50%;
object-fit: cover;
vertical-align: middle;
border: 2px solid #007bff;
"
/>
</div>
<span id="username-display" class="username-clickable"></span>
<form action="/logout" method="POST" style="display: inline">
<button type="submit" class="logout-btn">
<span class="iconify" data-icon="mdi:logout"></span> Выйти
</button>
</form>
</div>
</header>
<div class="main">
<div class="markdown-buttons">
<button class="btnMarkdown" id="boldBtn" title="Жирный текст">
<span class="iconify" data-icon="mdi:format-bold"></span>
</button>
<button class="btnMarkdown" id="italicBtn" title="Курсив">
<span class="iconify" data-icon="mdi:format-italic"></span>
</button>
<button class="btnMarkdown" id="headerBtn" title="Заголовок">
<span class="iconify" data-icon="mdi:format-header-1"></span>
</button>
<button class="btnMarkdown" id="listBtn" title="Список">
<span class="iconify" data-icon="mdi:format-list-bulleted"></span>
</button>
<button class="btnMarkdown" id="quoteBtn" title="Цитата">
<span class="iconify" data-icon="mdi:format-quote-close"></span>
</button>
<button class="btnMarkdown" id="codeBtn" title="Код">
<span class="iconify" data-icon="mdi:code-tags"></span>
</button>
<button class="btnMarkdown" id="linkBtn" title="Ссылка">
<span class="iconify" data-icon="mdi:link"></span>
</button>
<button class="btnMarkdown" id="imageBtn" title="Загрузить изображения">
<span class="iconify" data-icon="mdi:image-plus"></span>
</button>
</div>
<textarea
class="textInput"
id="noteInput"
placeholder="Ваша заметка..."
></textarea>
<!-- Скрытый input для загрузки изображений -->
<input type="file" id="imageInput" accept="image/*" multiple style="display: none;">
<!-- Контейнер для отображения загруженных изображений -->
<div id="imagePreviewContainer" class="image-preview-container" style="display: none;">
<div class="image-preview-header">
<span>Загруженные изображения:</span>
<button type="button" id="clearImagesBtn" class="clear-images-btn">Очистить все</button>
</div>
<div id="imagePreviewList" class="image-preview-list"></div>
</div>
<div class="save-button-container">
<button class="btnSave" id="saveBtn">Сохранить</button>
<span class="save-hint">или нажмите Alt + Enter</span>
</div>
</div>
</div>
<div id="notes-container" class="notes-container"></div>
</div>
<div class="footer">
<p>Создатель: <span>Fovway</span></p>
</div>
<!-- Модальное окно для просмотра изображений -->
<div id="imageModal" class="image-modal">
<span class="image-modal-close">&times;</span>
<img class="image-modal-content" id="modalImage">
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/11.1.0/marked.min.js"></script>
<script src="/app.js"></script>
<!-- PWA Script -->
<script src="/pwa.js"></script>
<script>
// Проверяем загрузку Iconify
document.addEventListener("DOMContentLoaded", function () {
if (typeof Iconify === "undefined") {
console.warn(
"Iconify не загружен, загружаем альтернативную версию..."
);
const script = document.createElement("script");
script.src =
"https://cdnjs.cloudflare.com/ajax/libs/iconify/2.0.0/iconify.min.js";
document.head.appendChild(script);
}
});
</script>
</body>
</html>