Files
f7cloud_mobile/docs/app-map/notes.md
T
b-mob-notes 03460dceaf docs(app-map): notes.md — визуальная сверка на forbion (Browser 1, read-only)
Подтверждено живьём: welcome-пустое, новая заметка/поиск/образец, навигация категорий,
меню настроек (Мобильные приложения). Ненаблюдаемое read-only (нет заметок у cloude) —
меню/редактор/конфликт помечены код-only. mail/079.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 22:32:15 +00:00

17 KiB
Raw Blame History

Карта: Заметки

Приложение «Заметки» (/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.vueNoteRich.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.
  • Настройки: режим отображения, расширение файла, папка заметок.