docs(app-map): карта Календаря из кода (calendar v6.4.0 + тема forbion), read-only
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
# Карта: Календарь
|
||||
|
||||
Приложение «Календарь» (`/apps/calendar/`) на forbion.f7cloud.ru. Структура кнопок/меню снята
|
||||
**из кода** (метод mail/078): апстрим `nextcloud/calendar` **v6.4.0** (`src/**/*.vue` — точная
|
||||
версия с forbion, канон README) + мобильная тема forbion
|
||||
(`design-reference/forbion-theme/css/pages/pages-mobile/_mobile-calendar.css`,
|
||||
`css/pages/app-calendar/`). Живой мобильный web (Browser 1, `cloude`, mail/079) — только для
|
||||
визуальной сверки «как выглядит/порядок»; **строго read-only** (mail/073): ничего не
|
||||
создаётся/не меняется/не удаляется, приглашения не отправляются, free/busy-запросы не шлются.
|
||||
Приватность: реальные названия/участники событий не фиксируются — только структура UI.
|
||||
|
||||
> Статус визуальной сверки на живом forbion: **ожидает** — для выбора конкретной Chrome-сессии
|
||||
> (`Browser 1 c9284989`) нужен шаг владельца (в сессии видно 2 браузера, инструмент требует
|
||||
> выбор владельцем). Дерево ниже построено из кода и валидно; отметки `визуал(?)` = требуют
|
||||
> финального взгляда на экран (в первую очередь — порядок пунктов и мобильная модель месяца).
|
||||
|
||||
> **F7-форк**: окно события на forbion кастомизировано (тема адресует `.f7-calendar-event-view`,
|
||||
> `.f7-invitee-status-row`, `.f7-location-talk-row`, `.property-add-talk`) — набор кнопок тот же,
|
||||
> что в апстрим-компонентах `Editor/*`, отличается вёрстка/порядок (предмет попиксельной сверки).
|
||||
|
||||
## Компоненты-источники (nextcloud/calendar v6.4.0)
|
||||
`views/Calendar.vue` (шелл: навигация + сетка) · `components/CalendarGrid.vue` (сетка) ·
|
||||
`AppNavigation/AppNavigationHeader.vue` (шапка: навигация периодов, «Создать», переключатель
|
||||
вида) · `AppNavigation/CalendarList/*` (список календарей, действия, корзина) ·
|
||||
`AppNavigation/EditCalendarModal.vue` + `EditCalendarModal/ShareItem.vue` (правка/шаринг
|
||||
календаря) · `AppNavigation/Settings.vue` (настройки) · `views/EditSimple.vue`/`EditFull.vue`
|
||||
(окно события) · `Editor/Properties/*` (поля) · `Editor/Repeat/*` (повторение) ·
|
||||
`Editor/Alarm/*` (напоминания) · `Editor/Invitees/*` + `InvitationResponseButtons.vue`
|
||||
(участники/ответы) · `Editor/Attachments/*` (вложения) · `Editor/AddTalkModal.vue` (беседа
|
||||
Talk) · `Editor/FreeBusy/*` (занятость).
|
||||
|
||||
## Вход
|
||||
Нижняя плавающая панель / шторка приложений (по «трём полоскам») → «Календарь», или прямой URL
|
||||
`/apps/calendar/`. Оболочку описывает `shell.md` (зона лида) — здесь только специфика приложения.
|
||||
|
||||
## Экран: Календарь (главный, сетка)
|
||||
**Шапка (`AppNavigationHeader`):**
|
||||
- «**‹**» (Предыдущий период) → сдвиг диапазона назад.
|
||||
- «**Сегодня**» → текущая дата.
|
||||
- «**›**» (Следующий период) → сдвиг вперёд.
|
||||
- Заголовок периода (месяц/неделя/…) → выпадающий выбор даты (date-picker).
|
||||
- «**Переключатель вида**» → меню: «День», «Неделя», «Месяц», «Год», «Список».
|
||||
- `расхождение:` в нативе есть только День/Неделя/Месяц; «Год» и «Список» отсутствуют.
|
||||
- «**+ Создать событие**» → окно события (см. «Экран: Событие»); write — на forbion не сохраняю.
|
||||
|
||||
**Тело:** сетка календаря. На мобильном (узкий вьюпорт) модель компактная — месяц сверху +
|
||||
список событий выбранного дня снизу `визуал(?)` (сверить порядок/скролл на экране).
|
||||
|
||||
**Действия в теле:**
|
||||
- Тап по ячейке дня → выбор дня (список событий этого дня внизу).
|
||||
- Тап по пилюле события → открыть событие (просмотр/редактор).
|
||||
|
||||
## Экран: Навигация календарей (сайдбар / бургер)
|
||||
**Тело:** список «**Мои календари**», ниже — «Корзина» и «Настройки».
|
||||
|
||||
**Строка календаря:**
|
||||
- Чекбокс видимости → включить/выключить показ календаря.
|
||||
- Название + счётчик.
|
||||
- «**⋯**» (действия) → меню:
|
||||
- «**Изменить**» / «**Изменить и поделиться**» → модалка правки календаря (ниже). write.
|
||||
- «**Копировать публичную ссылку**» / «**Копировать ссылку подписки**».
|
||||
- «**Экспорт**» → скачивание `.ics`.
|
||||
- «**Удалить**» → подтверждение. write.
|
||||
|
||||
**Действия списка:**
|
||||
- «**+ Добавить новый**» → меню:
|
||||
- «**Новый календарь**» / «**Новый календарь со списком задач**». write.
|
||||
- «**Новая подписка по ссылке (только чтение)**». write.
|
||||
- «**Добавить календарь праздников**» / «**Добавить произвольный публичный календарь**». write.
|
||||
|
||||
### Подэкран: Корзина
|
||||
**Тело:** список удалённых календарей/событий.
|
||||
**Действия:** «**Восстановить**» (write) · «**Удалить навсегда**» (write) ·
|
||||
«**Очистить корзину**» → подтверждение «Действительно очистить корзину?» (write).
|
||||
|
||||
### Подэкран: Изменить календарь (модалка `EditCalendarModal`)
|
||||
**Тело/действия:**
|
||||
- «**Имя календаря**» + выбор цвета. write.
|
||||
- «**Поделиться календарём**» → поиск «Share with users or groups» → строка получателя:
|
||||
право «может редактировать и видеть конфиденциальные события», снять доступ. write.
|
||||
- «**Напоминания по умолчанию**» для полнодневных/частичных событий этого календаря.
|
||||
- «**Не показывать меня занятым**» (сделать календарь прозрачным).
|
||||
- «**Экспорт**» · «**Удалить**» (write) · «**Убрать у меня**» (для расшаренных, write).
|
||||
|
||||
### Подэкран: Настройки (`Settings.vue`)
|
||||
**Тело (тумблеры/пункты):** «Номера недель», «Выходные», «Задачи в календаре», «Плотность в
|
||||
День/Неделя», «Лимит событий в Месяце», «Простой редактор событий» («"Подробнее" открывает
|
||||
детальный редактор»), «Календарь дней рождения», «Напоминание по умолчанию» (полнодневные/
|
||||
частичные), «Календарь по умолчанию для входящих приглашений», «Настройки доступности» (write),
|
||||
«Импорт календарей» (write).
|
||||
- Блок «**CalDAV**»: «CalDAV URL», «Адрес сервера для iOS и macOS» — информационные (копирование).
|
||||
|
||||
## Экран: Событие (окно, `EditSimple`/`EditFull`, форк `.f7-calendar-event-view`)
|
||||
Открытие: пилюля события или «Создать событие». Переключение простой↔полный: «**Подробнее**».
|
||||
|
||||
**Шапка:**
|
||||
- «**×**» (Закрыть) → при несохранённых правках диалог «Отменить изменения?»
|
||||
(«Точно отменить изменения этого события?»).
|
||||
- «**✓ Сохранить**» (write). У повторяющегося события → выбор «Обновить это повторение» /
|
||||
«Обновить это и все будущие» (write).
|
||||
- «**⋯**» (действия) → меню: «Дублировать» (write), «Экспорт», «Удалить» (write);
|
||||
у серии — «Удалить это повторение» / «Удалить это и все будущие».
|
||||
|
||||
**Тело — поля (`Editor/Properties`):**
|
||||
- «**Заголовок**» события. write.
|
||||
- «**Весь день**» (тумблер).
|
||||
- «**С**» / «**По**» — нативные пикеры даты/времени (в нативе совпадает).
|
||||
- Выбор «**Календаря**» (коллекции).
|
||||
- «Местоположение», «Описание», «Категории».
|
||||
- Выбор «**Цвета**» / «Убрать цвет».
|
||||
|
||||
**Тело — Повторение (`Editor/Repeat`):**
|
||||
- «**Повтор**» («Не повторяется») → меню пресетов + «**Настроить повторение**»:
|
||||
- «Повторять каждые» N + частота (день/неделя/месяц/год).
|
||||
- Неделя: кружки дней недели (Пн…Вс).
|
||||
- Месяц: «В конкретный день» / «В N-й» (первый… / будний / выходной / день).
|
||||
- «Окончание»: «никогда» / «на дату» / «после» N «повторений».
|
||||
- Предупреждение о неполной поддержке rrule (часть повторений может быть потеряна при правке).
|
||||
- `расхождение (бэклог, mail/072):` натив НЕ разворачивает оккуренции в сетке (долг №2) и не
|
||||
поддерживает EXDATE/RECURRENCE-ID (долг №3); `toRrule` не сериализует «первый понедельник»
|
||||
(`BYDAY=1MO`).
|
||||
|
||||
**Тело — Напоминания (`Editor/Alarm`):**
|
||||
- «**Добавить напоминание**» (write) → тип (Уведомление/Email/Аудио), смещение
|
||||
(«за … минут/часов/дней/недель до») или «На дату»; «Удалить напоминание».
|
||||
|
||||
**Тело — Участники / приглашения (`Editor/Invitees`, форк `.f7-invitee-status-row`):**
|
||||
- «**Участники**» («Пока нет участников») → поиск «эл. почты, пользователи, контакты, группы,
|
||||
команды». write.
|
||||
- Роль участника: «Обязательный»/«Необязательный»/«Председатель»/«Не участвует»; «Запросить
|
||||
ответ»; «Удалить участника».
|
||||
- «**Найти время**» → сетка занятости (ниже).
|
||||
- Настройка ответов: «Только приглашённые могут отвечать» / «Любой с приглашением может
|
||||
отвечать», «Разрешить пересылку».
|
||||
- «**Кнопки ответа на приглашение**» (входящее событие, `InvitationResponseButtons`):
|
||||
«**Принять**» / «**Отклонить**» / «**Под вопросом**». write (iTIP REPLY).
|
||||
- `расхождение (бэклог, mail/072, долг №4):` экрана accept/decline входящих приглашений в
|
||||
нативе нет.
|
||||
|
||||
**Тело — Беседа Talk (`AddTalkModal`, форк `.property-add-talk`):**
|
||||
- «**Добавить беседу Talk**» → модалка: выбрать существующую беседу или создать
|
||||
публичную/приватную. write при создании.
|
||||
|
||||
**Тело — Вложения (`Editor/Attachments`):**
|
||||
- «**Из файлов**» → навигация по WebDAV (добавить файл / поделиться ссылкой).
|
||||
- «**Загрузить с устройства**» (write).
|
||||
- Пункт вложения → «Удалить файл» (write); пусто — «Нет вложений».
|
||||
|
||||
**Тело — Занятость (`Editor/FreeBusy`):**
|
||||
- «**Проверить доступность / Найти время**» → сетка Free/Busy: «Свободен»/«Занят»/«Занят
|
||||
(под вопросом)»/«Нет на месте», навигация «Пред./След. дата», легенда.
|
||||
write (POST в DAV outbox — на forbion НЕ выполняю), `визуал(?)`.
|
||||
|
||||
## Расхождения натив ↔ forbion (сводный бэклог, приоритет по mail/072)
|
||||
1. Повторения не разворачиваются в сетке (долг №2, подтверждён лидом) — «Событие: Повторение» / сетка.
|
||||
2. EXDATE / RECURRENCE-ID не поддержаны (долг №3) — «Событие: шапка / Повторение».
|
||||
3. Входящие приглашения без «Принять/Отклонить» (долг №4) — «Событие: Участники».
|
||||
4. Виды «Год» / «Список» отсутствуют в нативе — «Календарь: шапка».
|
||||
5. `toRrule` не сериализует `BYDAY=1MO` («первый понедельник») — вскроется на развёртке повторений.
|
||||
Reference in New Issue
Block a user