Files
f7cloud_mobile/docs/app-map/calendar.md
T

14 KiB
Raw Blame History

Карта: Календарь

Приложение «Календарь» (/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 («первый понедельник») — вскроется на развёртке повторений.