feat: перепиши кейс Card Columns без черновиков
This commit is contained in:
1 parent
d25c2e2185
commit
8b50c821a7
5 files changed
+387
-1396
No files matched your search
@@ -1,115 +1,72 @@
|
||||
# Card Columns — плагин-вид для Obsidian Bases
|
||||
# Card Columns для Obsidian Bases
|
||||
|
||||
- **Источник:** `public/cases/card-columns-obsidian/index.html`
|
||||
- **Источник:** `src/pages/cases/card-columns-obsidian.html`
|
||||
- **eyebrow:** Obsidian Bases · Plugin
|
||||
- **meta description:** Кейс: Card Columns, плагин-вид для Obsidian Bases. Показывает заметки как карточки, разложенные по колонкам, с фильтрацией тегов по И/ИЛИ.
|
||||
- **meta description:** Как я создал Card Columns для Obsidian Bases: группировка заметок по свойствам, фильтрация тегов AND/OR и перенос карточек между колонками.
|
||||
|
||||
---
|
||||
## Канбан-доска для Obsidian Bases с фильтрацией и перетаскиванием
|
||||
|
||||
**Заметка по путям к медиа:** файлы кладутся в `public/assets/card-columns-obsidian/`, в разметке страницы пути `../assets/card-columns-obsidian/файл.webp`. Форматы: WebP (изображения, постеры), WebM + MP4 (видео).
|
||||
Card Columns: группировка по свойствам, быстрый отбор тегов AND/OR.
|
||||
|
||||
## Brief (блок метаданных на странице)
|
||||
На скриншоте моя база Links: Obsidian показывает 196 результатов.
|
||||
|
||||
- **Роль:** Продуктовый дизайн и разработка
|
||||
- **Платформа:** Obsidian Bases
|
||||
- **Статус:** Рабочий плагин в [каталоге плагинов Obsidian](https://community.obsidian.md/plugins/card-columns), open source (MIT)
|
||||
- **Команда:** Соло, пет-проект
|
||||
Card Columns - мой плагин-вид для Obsidian Bases. Я спроектировал и разработал его сам: хотел видеть заметки колонками, а не искать нужные в длинной ленте штатного Cards. Плагин опубликован в [каталоге Obsidian Community](https://community.obsidian.md/plugins/card-columns), исходный код открыт по лицензии MIT.
|
||||
|
||||
## Введение
|
||||
## От запроса Bases к колонкам
|
||||
|
||||
В Obsidian появились Bases, отдельный тип файла, который показывает заметки не текстом, а в разных видах: таблицей, карточками, деревом. Стандартный вид карточек мне не зашёл: он плоский, без группировки, и в нём не разобраться, когда заметок сотни. Я хотел видеть их раскладку по колонкам, как канбан, но без лишнего веса. Так появился плагин-вид Card Columns.
|
||||
Файл `.base` описывает запрос к заметкам в vault: какие записи показать и какие свойства вывести. Штатный вид Cards в моей базе складывал результаты в длинную ленту. Я хотел видеть ту же выборку по группам, например по статусу или тегу.
|
||||
|
||||
## Контекст
|
||||
Columns подключается как ещё один BasesView и получает результат запроса. Сортировка, фильтры, набор свойств и поиск остаются за штатным тулбаром. Я не стал заводить отдельную доску: заметки и настройки запроса остаются в Bases, плагин меняет только их представление.
|
||||
|
||||
Bases, это не заметка и не отдельная база данных. Это запрос к vault-у: выбираешь заметки по фильтру, и фреймворк рисует их в выбранном виде. У самого Obsidian есть встроенный вид карточек, но он одноплановый: нет группировки по свойствам, нет нормальной фильтрации. Я решил сделать свой вид, который встраивается в переключатель Bases наравне со штатными.
|
||||
## Сначала сгруппировать, потом отобрать
|
||||
|
||||
Главное ограничение было в самом фреймворке: плагин не хранит данные, а рисует то, что выдал Bases-запрос (Sort, Filter, Properties, Search из тулбара). Значит, вся логика выборки остаётся на Bases, а моя задача, только представление и навигация по нему.
|
||||
Группировку настраиваю через Group by в тулбаре Bases: по тегу, статусу, категории или любому frontmatter-свойству. Если свойство не задано, Columns группирует по тегам. Колонки строятся из значений выбранного свойства, а исходный запрос остаётся тем же. Одна база подходит для разных разрезов: меняю только группировку.
|
||||
|
||||
## Задача
|
||||
Теги для быстрого отбора вынесены отдельными пилюлями под тулбаром. Щёлкнул один раз, оставил этот тег. Выбрал следующий, добавил его по OR. Для точного переключения использую Ctrl+клик или правую кнопку мыши, а кнопкой OR/AND меняю логику отбора:
|
||||
|
||||
Спроектировать и собрать view-плагин для Obsidian Bases: заметки из запроса показываются карточками, разложенными по колонкам, а по колонкам легко ориентироваться и отбирать нужное. Вид должен жить в переключателе Bases рядом со штатными и не ломать встроенный тулбар (сортировку, фильтр, поиск).
|
||||
Эти пилюли не заменяют Filter в тулбаре. Bases формирует исходную выборку, а теговый фильтр сужает её уже внутри Columns. Так я не меняю запрос, когда нужно быстро посмотреть подмножество.
|
||||
|
||||
> **Callout (📌):** Главный риск, сделать вид, который конфликтует со штатным тулбаром Bases. Тогда пользователь теряет сортировку и поиск, ради которых Bases и берут. Этого нельзя было допустить.
|
||||
- первый тег оставляет только заметки с ним;
|
||||
- следующий добавляет заметки с любым из выбранных тегов;
|
||||
- Ctrl+клик или правый клик добавляет и снимает один тег, не сбрасывая остальные;
|
||||
- OR/AND переключает условие между «любой из» и «все выбранные», All очищает выбор.
|
||||
|
||||
## Решение
|
||||
Фильтр остаётся перед глазами вместе с доской. Модальное окно здесь только мешало бы: пришлось бы закрывать его, чтобы проверить результат.
|
||||
|
||||
Плагин добавляет в Bases вид «Columns». Карточки строятся из результатов Bases-запроса, группировка задаётся свойством, а отбор, кликабельными тегами.
|
||||
## Карточка показывает нужные поля
|
||||
|
||||
### Группировка по любому свойству
|
||||
Состав карточки задаётся штатным списком Properties. Первое выбранное свойство становится заголовком, остальные отображаются чипами: текст, теги, ссылки, булевы значения и даты. Для чипов можно выбрать вертикальный стек или компактную сетку, настроить перенос и формат даты.
|
||||
|
||||
Колонки формируются из Group by в тулбаре Bases, по тегу, статусу, категории или любому frontmatter-свойству. Меняешь свойство в запросе, и доска пересобирается сама. Так одна и та же база закрывает разные разрезы: проекты по статусу, заметки по тегам, задачи по приоритету.
|
||||
Если базе нужны обложки, Columns возьмёт первую картинку из заметки или значение указанного frontmatter-свойства. Можно настроить пропорции (Auto, 1:1, 3:2, 4:3 или 16:9), вписывание и место обложки. Карточка открывается в активной панели, модальном окне, новой вкладке или сплите. В сплите обычный клик переиспользует панель, Ctrl+клик открывает новую вкладку. Так можно читать заметку рядом с доской и не терять контекст выборки.
|
||||
|
||||
### Фильтр тегов по И и ИЛИ
|
||||
## Перетаскивание меняет свойство заметки
|
||||
|
||||
Это то, ради чего плагин и задумывался. Под тулбаром, пилюли тегов, по клику они отсеивают карточки по всем колонкам сразу:
|
||||
В релизе 0.9.0 карточку можно перетащить в другую колонку, и Columns обновит frontmatter-свойство, по которому построена группировка, через API Obsidian `processFrontMatter()`. Если колонки собраны по статусу, после переноса меняется именно статус заметки. Если в свойстве несколько значений, старое убирается, новое добавляется, остальные сохраняются.
|
||||
|
||||
- Левый клик по тегу, показать только его (сбрасывает остальные фильтры).
|
||||
- Левый клик по следующему тегу, показать заметки с ЛЮБЫМ из выбранных (режим ИЛИ).
|
||||
- Ctrl+Клик или правый клик, переключить тег, не сбрасывая выбор.
|
||||
- Кнопка OR/AND, переключить между «любой из» и «все перечисленные» для нескольких тегов.
|
||||
- All, снять все фильтры.
|
||||
Я оставил этот сценарий настраиваемым. Drag-and-drop включён по умолчанию, но его можно отключить в General. Так пользователь сам выбирает: только смотреть на группы или менять значение свойства прямо с доски.
|
||||
|
||||
Связка «ИЛИ-добавление левым кликом + точный toggle через Ctrl» получилась интуитивной: быстрый отбор не сбивает то, что уже выбрано. Альтернативу, вынести фильтр в модалку, отверг сразу: лишний клик и потеря контекста того, что уже отфильтровано.
|
||||
### Настройки под разные базы
|
||||
|
||||
### Карточки и обложки
|
||||
У вида четыре группы настроек: General, Title, Properties и Cover. В них задаются ширина карточек, число колонок внутри группы (от 1 до 6), порядок колонок, зебра и masonry. Порядок можно оставить автоматическим или задать вручную; пустые колонки в этом списке сохраняются. Сетка показывает несколько карточек рядом, masonry заполняет вертикальные пустоты, а зебра помогает не сбиться при чтении широкой доски. Отдельно настраиваются заголовки, чипы, даты и обложки. Один вид подстраивается под разные базы, а не наоборот.
|
||||
|
||||
По каждой заметке рисуются свойства как чипы, текст, теги, ссылки, булевы, даты. Можно показать обложку: из первой картинки в заметке или из отдельного свойства. У обложки полный контроль, соотношение сторон (Auto, 1:1, 3:2, 4:3, 16:9), рамка, вписывание (cover/contain), ориентация и место на карточке (над заголовком, под ним, после всего).
|
||||
## Результат: доска внутри Obsidian Bases
|
||||
|
||||
### Что заведено в настройки
|
||||
Card Columns оставляет заметки в Bases, но меняет способ их обзора: я задаю группировку, отбираю теги и открываю карточки рядом с доской. Когда нужна смена статуса, перетаскивание правит то же frontmatter-свойство, по которому строятся колонки. Я продолжаю пользоваться Columns в своей базе: заметки остаются в vault, отдельную доску синхронизировать не нужно.
|
||||
|
||||
Всю внешнюю вариативность я вынел в gear-меню, разбив на четыре секции, чтобы вид подстраивался под разные базы, а не под мой единственный сценарий.
|
||||
Плагин опубликован в каталоге Obsidian Community. На момент обновления кейса там указаны версия 0.9.0 и 846 загрузок; поддерживаются Obsidian 1.8.0+, Desktop и Mobile, лицензия MIT.
|
||||
|
||||
**General**
|
||||
|
||||
- Куда открывать карточку: активная панель, всплывающее окно, новая вкладка, сплит вправо / вниз.
|
||||
- Ширина карточки (px).
|
||||
- Колонок в группе (1–6), сетка внутри колонки.
|
||||
- Зебра колонок (чередование фона для сканирования).
|
||||
- Masonry-раскладка (карточки заполняют вертикальные пустоты).
|
||||
|
||||
**Title**
|
||||
|
||||
- Перенос заголовка, жирный заголовок, размер шрифта (px).
|
||||
|
||||
**Properties**
|
||||
|
||||
- Раскладка чипов: стек (вертикально) или сетка (компактно в строку).
|
||||
- Перенос многострочных значений, размер шрифта.
|
||||
- Формат даты и даты-времени + локаль (Moment.js).
|
||||
|
||||
**Cover**
|
||||
|
||||
- Источник: нет / первая картинка в заметке / свойство-обложка.
|
||||
- Стиль (без рамки / с рамкой), соотношение сторон, ориентация, вписывание, позиция на карточке.
|
||||
|
||||
> **Callout (💡):** Сплит-превью сделал как в самом Obsidian: левый клик переиспользует панель, Ctrl+Клик, новую вкладку внутри сплита. Без этого на широком экране карточки неудобно просматривать рядом с доской.
|
||||
|
||||
### Работает внутри штатного тулбара
|
||||
|
||||
Вид цепляется к BasesView-фреймворку, поэтому сортировка, фильтр, свойства и поиск из тулбара Bases остаются рабочими. Плагин только рисует результат запроса, данные не дублируются и не зависят от отдельного хранилища.
|
||||
|
||||
## Результат
|
||||
|
||||
Вид закрыл мою боль: Bases-запрос теперь читается как доска, а не как плоская лента карточек. Группировка по свойству + отбор по тегам И/ИЛИ, то, чего не хватало штатному виду. Всё крутится на запросе Bases, так что перенос vault-а и синхронизация ничего не ломают.
|
||||
|
||||
Метрики у пет-проекта нет, и придумывать её не стану. Проверяю проще: юзабилити на себе в ежедневной работе. Критерий, сколько действий нужно, чтобы отобрать заметки по двум тегам и найти нужную карточку. В штатном виде карточек это был скролл ленты с ручным поиском по заголовкам; здесь, два клика по пилюлям и колонка перед глазами. Если бы замерял всерьёз, считал бы время на задачу на выборке из 20–30 заметок до и после, но на своей повседневной базе разница заметна и без секундомера.
|
||||
|
||||
Что сделал бы иначе. Drag-and-drop карточек между колонками не стал делать сознательно, это меняет свойство в заметке, и для view-плагина это отдельный риск целостности данных. Но вижу запрос на это у пользователей, и, возможно, добавлю как опциональный режим. А пока плагин живёт вручную (через community-каталог ещё не прошёл), это единственное, что мешает им пользоваться сходу.
|
||||
|
||||
> **Callout (✅):** Главный вывод: вид для Bases получается рабочим только тогда, когда он уважает тулбар фреймворка. Я добавил представление, а не вторую систему хранения, и заметки остались обычными заметками.
|
||||
Для меня важна граница между обзором и изменением данных. Группировка и фильтр помогают читать базу; перенос карточки меняет её свойство. В Columns это действие видно и его можно отключить.
|
||||
|
||||
## Медиа
|
||||
|
||||
| Файл | Что показывает | Источник |
|
||||
|---|---|---|
|
||||
| `overview.webp` | База заметок в режиме Columns, сгруппированная по тегам | `card-columns/images/overview.webp` |
|
||||
| `filter-use.webp` | Фильтрация карточек кликабельными тегами | `card-columns/images/filter use.webp` |
|
||||
| `view-configure.webp` | Настройка вида и ширины колонок | `card-columns/images/view configure.webp` |
|
||||
Изображения взяты из репозитория Card Columns и лежат в `public/assets/card-columns-obsidian/`:
|
||||
|
||||
- `overview.webp` - обзор базы Links;
|
||||
- `filter-use.webp` - фильтрация тегами;
|
||||
- `view-configure.webp` - настройки вида.
|
||||
|
||||
## Источники фактуры
|
||||
|
||||
- Репозиторий: `https://github.com/mamadaevv/card-columns` (лицензия MIT).
|
||||
- Каталог плагинов Obsidian: `https://community.obsidian.md/plugins/card-columns`.
|
||||
- Скриншоты взяты из `images/` репозитория Card Columns.
|
||||
- Все параметры кастомизации и логика фильтрации взяты из README репозитория.
|
||||
- Drag-and-drop в плагине **отсутствует**: он есть у соседнего `ewerx/obsidian-bases-kanban`, не путать.
|
||||
- Репозиторий Card Columns, версия `0.9.0`: `README.md`, `manifest.json`, `main.ts`.
|
||||
- Карточка плагина в [Obsidian Community](https://community.obsidian.md/plugins/card-columns): версия, совместимость и число загрузок.
|
||||
- Скриншот обзора показывает 196 результатов в базе Links.
|
||||
Reference in new issue
Block a user