Подтверждено живьём: welcome-пустое, новая заметка/поиск/образец, навигация категорий, меню настроек (Мобильные приложения). Ненаблюдаемое read-only (нет заметок у cloude) — меню/редактор/конфликт помечены код-only. mail/079. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
17 KiB
Карта: Заметки
Приложение «Заметки» (/apps/notes/) на forbion.f7cloud.ru. Структура кнопок/меню снята
из кода (метод mail/078): апстрим nextcloud/notes v5.0.0 (src/**/*.vue — точная
версия с forbion, канон README) + мобильная тема forbion
(design-reference/forbion-theme/css/pages/pages-mobile/_mobile-notes.css,
css/pages/app-notes/). Живой мобильный web (Browser 1, cloude, mail/079) — только для
визуальной сверки «как выглядит/порядок»; строго read-only (mail/073): ничего не
создаётся/не меняется/не удаляется. Приватность: реальные заголовки/тексты заметок не
фиксируются — только структура UI и дерево переходов.
Статус визуальной сверки на живом forbion (Browser 1
c9284989,cloude, mail/079, техника same-origin iframe 390px): выполнена частично, 2026-07-12. Мобильная вёрстка подтверждена (header__mobile,header__mobile-bottom). Подтверждено на живом сервере: пустое состояние Welcome (тексты 1:1 с кодом), кнопка «Новая заметка», поле поиска, «Создайте образец заметки с помощью Markdown», навигация «Все заметки» (со счётчиком) / капшен «Категории» / «Новая категория», «Меню настроек» (модалка открывается, секция «Мобильные приложения» — Android / iPhone and iPad). НЕ наблюдаемо read-only: список строк-заметок, меню заметки (⋮), редактор (rich/plain/preview), диалог конфликта, детальные секции настроек «Общее» — уcloudeзаметок НЕТ, а создание/открытие = запись (запрещено mail/073). Эти узлы остаются из кода (v5.0.0) — помеченыкод-onlyниже. NB: при первом входе поверх приложения всплывает глобальный онбординг-попап «Добро пожаловать в F7cloud!» (не notes-специфичный, не закрывал — dismiss может писать флаг на сервер).
Компоненты-источники (nextcloud/notes v5.0.0)
App.vue (шелл: навигация категорий + настройки) · NotesView.vue (список + поиск + «Новая
заметка») · NotesList.vue/NoteItem.vue (строка заметки + меню действий) ·
CategoriesList.vue (навигация: Все заметки / Категории) · Note.vue→NoteRich.vue
(rich-редактор @nextcloud/text) / NotePlain.vue (простой/preview) · AppSettings.vue
(модалка настроек) · Welcome.vue (пустое состояние) · ConflictSolution.vue (конфликт
версий) · NoteShareSidebar.vue (шаринг).
Вход
Шторка приложений (по «трём полоскам») → «Заметки», или прямой URL /apps/notes/.
Оболочку (нижняя панель, шторка, бургер) описывает shell.md (зона лида) — здесь только
специфика приложения. На мобильном (узкий вьюпорт) сначала показывается список заметок;
выбор заметки открывает редактор поверх (NcAppContent show-details), возврат — «назад».
Экран: Список заметок (главный)
Шапка списка (content-list__search) — ✔ кнопка и поле подтверждены на forbion:
- Кнопка «Новая заметка» (primary, иконка +) → создаёт заметку и открывает редактор (write — на forbion НЕ нажимаю).
- Поле «Искать заметки» (
Search for notes) → фильтрация списка по заголовку по мере ввода; крестик (trailing) очищает поиск.
Тело: список строк-заметок, сгруппированный. Группировка (NotesView groupedNotes):
- если выбраны «Все заметки» и настроен режим — по временным слотам (заголовки-капшены
через
NotesCaption: сегодня/недавние/… — таймслоты) и/или по категориям; - избранные сортируются выше (favorite → вверх), затем по дате изменения.
Строка заметки (NoteItem = NcListItem):
- Тап по строке → открыть заметку в редакторе.
- Индикатор «расшарена» (значок ShareVariant, если у заметки есть шаринг).
- Кнопка «действия» (⋮, меню строки) → см. «Меню заметки».
Пустое состояние (нет заметок / Welcome.vue) — ✔ подтверждено на forbion (cloude,
route /apps/notes/welcome): заголовок «Заметки» + «Начните писать заметку, нажав «Новая
заметка».» + кнопка «Новая заметка»; подсказки: «Записывайте свои мысли, ни на что не
отвлекаясь.», «Поддержка языка разметки Markdown для оформления текста;», кнопка «Создайте
образец заметки с помощью Markdown» (CreateSampleButton — write, не нажимаю), «Поддержка
категорий;».
Состояние загрузки: «Загрузка …» (Loading …). Пустой поиск в категории: кнопка
«Найти во всех категориях» (сбрасывает выбранную категорию).
Меню заметки (⋮ в строке — NoteItem #actions) — код-only
(У cloude заметок нет → строку и её меню на forbion read-only не наблюдал; из кода v5.0.0.)
Порядок пунктов:
- «Добавить в избранное» / «Удалить из избранного» (тумблер, звезда) →
PUT /favorite. - «Поделиться» (Share) → открывает сайдбар шаринга (
NoteShareSidebar, стандартный NC-шэринг). (состав панели — общий NC sharing; детально не раскрывал — визуал(?)) - «<Категория>» / «Изменить категорию» → инлайн-выбор категории (мультиселект с
возможностью ввести новую, taggable) →
PUT /category. - «Переименовать» → инлайн-поле ввода нового заголовка →
PUT /title. - —— разделитель ——
- «Удалить заметку» (если не read-only) → удаление (
DELETE) с возможностью отмены (POST /notes/undo). (write — не выполняю на forbion.)
Экран: Редактор заметки — код-only
(Открытие/создание заметки = запись → на forbion read-only не наблюдал; из кода v5.0.0.) Открывается тапом по заметке или «Новая заметка». Режим определяется настройкой Display (rich / plain / preview, см. Настройки).
Заголовок: формируется автоматически из первой строки (autotitle, PUT /autotitle);
пустая заметка → «Новая заметка».
Rich-режим (NoteRich → редактор @nextcloud/text):
- Панель форматирования (
.text-menubar— в теме_mobile-notes.cssона переносится на мобильном:flex-wrap: wrap). Инструменты (из списка горячих клавишAppSettings): жирный, курсив, цитата, моноширинный, очистить стиль, список, нумерованный список, заголовок / крупный заголовок, вставить ссылку. (точный набор иконок на узком экране — визуал(?)) - Тело — редактируемый markdown-контент; автосохранение (debounce) →
PUT /notes/{id}с заголовкомIf-Match: "<etag>".
Plain-режим (NotePlain) — меню действий редактора (NcActions):
- «Просмотр» / «Правка» (тумблер preview⇄edit, подсказка «CTRL + /»).
- «Полный экран» / «Выйти из полноэкранного режима» (тумблер).
- Плейсхолдер пустого тела: «Write …» (или «Empty note» в preview).
Read-only заметка: пункт-индикатор «Заметка только для чтения. Вы не можете её
изменить.» (PencilOffOutline), редактирование заблокировано.
Ошибка сохранения: пункт «Сохранение не удалось. Нажмите, чтобы повторить.»
(onManualSave) — ручной повтор PUT.
Диалог: Конфликт версий (ConflictSolution) — код-only
Возникает, если заметка изменена в другой сессии (сервер вернул конфликт на If-Match):
- Текст: «Заметка была изменена в другой сессии. Выберите, какую версию сохранить.»
- Кнопка «Использовать версию с сервера».
- Кнопка «Использовать текущую версию».
Прямое подтверждение моего плана (mail/071 п.2): конфликт разрешается ЯВНЫМ выбором, а не молчаливой перезаписью. Нативный
NoteEditorScreenобязан воспроизвести этот диалог.
Навигация: Категории (левая шторка — App.vue + CategoriesList)
На мобильном — за «бургером»/шторкой навигации приложения (не нижняя панель оболочки).
✔ На forbion подтверждены: «Все заметки» (со счётчиком 0), капшен «Категории», «Новая
категория», кнопка «Меню настроек». Список конкретных категорий пуст (у cloude нет заметок).
- «Новая категория» (
NcAppNavigationNew, иконка папка+) → создание категории (drag-n-drop заметки на неё тоже вешает категорию). (write — не выполняю.) - «Все заметки» + счётчик (bubble) → сброс фильтра категории, весь список.
- Капшен «Категории», далее список категорий:
- «Без категории» (uncategorized) + счётчик.
- Каждая категория: название (иконка папки, в теме заменена на серую
folder-gray.svg) + счётчик; действия: «Переименовать категорию» (инлайн-правка), «Удалить категорию» → подтверждение (диалог «Удалить категорию» / «Удалить» / «Отмена»). (write — не выполняю.)
- Подкатегории: имя вида
parent/childразворачивается вложенно. - Внизу навигации: «Настройки заметок» (шестерёнка) → модалка настроек.
Модалка: Настройки заметок (AppSettings)
На мобильном тема раскрывает её на весь экран (_mobile-notes.css: modal-container height
100%, скрыт заголовок modal-header). ✔ На forbion открыл модалку read-only и подтвердил секцию
«Мобильные приложения» (подписи «Android», «iPhone and iPad» = HelpMobile.vue). Секции
«Общее»/«Комбинации клавиш» детально не раскрывал (код-only, из v5.0.0). Секции:
- Общее (
General):- «Отображение» (Display): «Форматированный текст» (rich) / «Простой текст» (plain) / «Просмотр» (preview).
- «Расширение файла» (для новых заметок): «.md» / «.txt» / «Свой» (+ поле «Своё расширение файла»).
- «Файлы» → «Папка заметок» (
NcFormBoxButton) → выбор папки хранения заметок (WebDAV picker). (write-настройка — не меняю.)
- Мобильные приложения (
Mobile apps) — ссылки/подсказки на приложения (в теме секция клавиш-шорткатов и это скрыты частично — визуал(?)). - Комбинации клавиш (
Shortcuts) — справочный список (см. панель форматирования выше). В теме forbion секцияkeyboard-shortcutsскрыта (display:none) — на forbion её, вероятно, не видно.визуал(?)
API-контур (для нативного модуля — подтверждает mail/071)
Базовый путь apps/notes/api/v1 (в вебе — apps/notes/...):
GET /notes?pruneBefore=<ts>— список (инкрементальный синк по времени; в нашем клиенте —exclude=contentдля лёгкого списка + ETag-коллекция).GET /notes/{id}— заметка;POST /notes— создать;PUT /notes/{id}(телоcontent, заголовокIf-Match: "<etag>") — сохранить;DELETE /notes/{id};POST /notes/undo.PUT /notes/{id}/favorite,/category,/title,/autotitle;PATCH /notes/category(переименовать),DELETE /notes/category(удалить категорию).- Поля модели:
id, title, category, content, favorite, modified, etag, readonly.
Расхождения с нативным клиентом
Модуль feature/notes ещё не создан (скелет заводит лид по mail/071) — поэтому полный
список расхождений = весь функционал выше как первичный бэклог. Ключевые пункты к паритету
при реализации плана 1→2→3 (mail/071):
- Список: поиск по заголовку, группировка (таймслоты + категории), сортировка «избранное вверх», индикатор шаринга, пустое/загрузочное состояния.
- Меню заметки: избранное, категория (с созданием новой), переименование, удаление с undo, шаринг.
- Редактор: rich (панель форматирования) ↔ plain ↔ preview, полноэкранный режим, автосейв
с
If-Match, автозаголовок, read-only состояние. - Диалог конфликта версий (обязателен — не молчаливая перезапись).
- Категории: навигация «Все/Без категории/по категориям» со счётчиками, CRUD категорий,
вложенность
parent/child. - Настройки: режим отображения, расширение файла, папка заметок.