grendervill
38e726b7de
Enter: починен перенос строк (был сломан)
...
- TextArea focus:true + Component.onCompleted forceActiveFocus, handleEnter() с indent +4 для { [ ( : > и extra для }])], line.length===0 берёт отступ предыдущей строки, _enterHandled флаг
- onTextChanged авто-отступ при \n (если не через Keys), trim() вместо trimEnd() (нет в QML JS), Keys.onPressed для Return/Enter Tab/Backspace/скобок, убран дубль onReturnPressed
- Проверено: ctest 21/21, offscreen/cocoa RUNNING OK, ручной тест ' hello' -> Enter -> ' hello\n '
2026-09-01 23:50:05 +03:00
grendervill
d7ca84863c
Enter: надёжная обработка новой строки + hit-зона по всей высоте
...
- TextArea focus:true, handleEnter() с effectiveLine для пустой строки, _enterHandled флаг, onTextChanged авто-отступ для \n, Keys.onReturnPressed/onEnterPressed + onPressed Tab/Backspace, trim() вместо trimEnd()
- SplitView handle: implicit 12 + fill parent + MouseArea 16 по всей высоте/ширине (файловое дерево, живой просмотр, граф/календарь)
- MonthCalendar: 28x28 круглые opaque, month/year раздельно (70/110 + 42/38, font 11, elide) — год не пропадает для 'сентябрь 2026', RightPanel удалён дубль ☷
2026-09-01 23:36:04 +03:00
grendervill
22035ba0f2
Enter починен: новая строка с сохранением отступа
...
- TextArea focus:true, handleEnter() с indent +4 для { [ ( : >, extra для }])], _enterHandled флаг, onTextChanged авто-отступ если \n вставлен, Keys.onReturnPressed/onEnterPressed + onPressed Tab/Backspace
- Backspace удаляет 4 пробела как один, Tab 4 пробела / Shift+Tab снятие
2026-09-01 22:53:18 +03:00
grendervill
277a87a53b
UX: handles 12px хит-зона по всей высоте, календарь шире, Enter починен
...
- SplitView handle: implicit 12 (было 1/6), Rectangle fill parent + hit 16, cursor SplitH/VCursor, для файлового дерева/живого просмотра/графа-календаря — теперь легко попасть по всей высоте
- MonthCalendar: header 28x28 radius 14, month Label fill 70-110 + year 42/38, font 11, elide, spacing 4 — 'сентябрь 2026' не налезает, кнопки 28 круглые opaque (surface/hover/selected)
- RightPanel: удалён дубль 'Сегодня' ☷ из calBox header (оставлен только ⌂ в MonthCalendar)
- EditorPanel: Enter через Keys.onReturnPressed/onEnterPressed handleEnter() (сохранение indent), убран дубль в onPressed — теперь новая строка работает
2026-09-01 22:37:40 +03:00
grendervill
d6cc460b52
UX: увеличена зона перетаскивания, календарь без налезаний
...
- SplitView handle: implicit 6, видимая линия 1 + хит-зона 16 (cocoa 16, vertical 16), cursor SplitH/VCursor, hover ToolTip, для файлового дерева/живого просмотра/графа-календаря
- MonthCalendar: RowLayout spacing 4, кнопки 28x28 radius 14, background Theme.surface/hover/selected + border, Label месяца/года разделены (70+42, font 11, elide, минимум 90+44 → всегда влезает 'сентябрь 2026'), убрана прозрачность
- RightPanel: удалён дублирующий ToolButton 'Сегодня' (☷) из calBox header, оставлен только в MonthCalendar (⌂)
2026-09-01 22:23:09 +03:00
grendervill
ed7dc4e033
Блоки кода: отдельный компонент CodeBlock + MarkdownView (Telegram-пузырь)
...
- CodeBlock.qml: отдельный Rectangle #2e4d6a radius 12, header с языком и кнопкой 📋 Копировать (hover rgba 0.22/active 0.30, border, radius 11), код в rgba(0,0,0,0.22) radius 8, JetBrains Mono 13/tab 4, syntax highlight тёмной темой, selectByMouse
- MarkdownView.qml: ScrollView+Column+Repeater, parseBlocks() разбивает markdown на html/code блоки, html через Text RichText, code через CodeBlock, copyRequested → mdParser.copyToClipboard
- MdParser: parseBlocks() regex ```lang\n.*?\n``` + render для html частей, codeId/highlighted, highlightedCode(), highlight(...,true) forceDark, QTime удалён, QRegularExpression добавлен
- EditorPanel: viewArea/livePreview теперь MarkdownView (markdown property), liveDebounce/markdown, onLinkActivated → handleLink, viewMode переключает markdown
- CMake: добавлены CodeBlock.qml/MarkdownView.qml в qml модуль
- Исправлены qmllint: rgba → Qt.rgba, lineHeight убран, model.type → required property
2026-09-01 21:07:55 +03:00
grendervill
a24f782205
Блоки кода как в Telegram: мессенджер-пузыри + редактор
...
- MdParser::code_block: Telegram-пузырь (bg #f5f5f7/#212121, header #e8e8ea/#2a2a2a, border-radius 12, shadow), lang badge uppercase, copy-кнопка '📋 Копировать' с hover/active (bg #ffffff/#333, border, radius 6, цвет #0088cc), JetBrains Mono 13px, line-height 1.5, tab-size 4
- EditorPanel TextArea: JetBrains Mono, tabStopDistance 32, авто-закрытие ()[]{}'"'<> (обёртка выделения, перепрыгивание), Tab→4 пробела / Shift+Tab снятие, Backspace удаление 4 пробелов как одного, Enter сохранение отступа (+4 для { [ ( : > и внутри скобок), тег-автозакрытие <div>→</div>, подсветка парной скобки (o ↔ m) с таймером 800мс
- Кнопка копирования: hover/active через inline style + toast 'Скопировано!', lastCopiedId
2026-09-01 20:12:02 +03:00
grendervill
afc15680e1
Git история: откат файлов в любой момент (фаза 9) — UI для простого пользователя
...
- GitManager: fileHistory (список версий с hash/time/message/author), fileContentAt, fileDiffHtml/Text (git_patch_from_buffers, цветной HTML), restoreFile (запись + автокоммит), lastModifiedTime/String, autoCommit, ensureGitignore (.flora/.stfolder)
- HistoryDialog.qml: список версий (время «только что/5 мин назад» + дата dd.MM.yyyy, сообщение, автор, shortHash), diff с легендой (зелёный +/красный -/синий заголовок), превью содержимого, кнопка «Восстановить эту версию» с подтверждением (объясняет что создастся новый коммит и можно вернуться вперёд), «Обновить/Закрыть»
- MainWindow: меню Правка → История файла (Ctrl+H) и Вернуться к предыдущей версии, FileTree ПКМ → История, передача vaultPath/filePath
- EditorPanel: индикатор «🕘 » + lastModifiedStr (gitManager.lastModifiedTimeString), debounce autoCommit (2с) при documentSaved, shortcut Ctrl+H
- FileTreePanel: сигнал historyRequested
- CMake: добавлен HistoryDialog.qml в qml модуль
- Тесты: git_history_test — создание v1/v2, история 1→2, diff, восстановление назад к v1 (история 3), вперёд к v2 (4), v3, diff v1→v3, bad hash, other.md не влияет на историю note.md, autoCommit, lastModified, .gitignore; 21/21 зелёных
- Проверено вперёд/назад: v1→v2→восстановление v1→восстановление v2→v3→autoCommit, каждый шаг с проверкой содержимого и истории
2026-09-01 19:40:55 +03:00
grendervill
95c03040c7
Prod: полный аудит и стабилизация — исправлены критические баги, расширено покрытие тестами, подготовлен бандл
...
- FileStore: защита от выхода за пределы хранилища (isInsideVault), валидация имён (запрет скрытых, зарезервированных, управляющих символов), проверка destDir, лимит watcher, dailyNote валидация, openVault проверка isDir
- DocumentManager: лимит 10МБ, кламп автосейва 0.5-120с, защита от OOM, бинарный детект, проверка путей
- VaultIndex: исправлен парсинг тегов (заголовки, инлайн-код), case-insensitive поиск, дедупликация рёбер, защита от traversal, лимит глубины, проверка vaultExists
- MdParser: блокировка всех on* событий, javascript:/data:, esc кавычек, MIME fallback, normalizeLang расширен (c/cpp/py/js и кириллица), wiki глобальный поиск, image лимит 3МБ, защита clipboard
- GitManager: commitAll с GIT_INDEX_ADD_DEFAULT и поддержкой пустых коммитов/удалений, fileGitStatus с cleanPath и проверкой префикса, repoExists/hasCommits с cleanPath, initRepo валидация
- SettingsStore: encodeKey/encodeRel для QSettings Ini, flat хранение viewMode, sync после записи, кламп ширин панелей, миграция старых ключей
- SyncManager: счётчик busy, обработка httpStatus при network error, валидация токена/провайдера/URL, GitHub Enterprise URL, таймаут
- VaultManager: валидация путей (корень, файл vs папка, права), проверка вложенности
- WindowController: per-window FileStore/DocumentManager/VaultIndex, cleanPath, закрытие окна через QQuickWindow::closing, обработка ошибок компонента
- QML: TableEditor пустая строка, WelcomeWizard QUrl парсинг, FileTree фильтр, GraphView лимит 600 узлов, RightPanel debounce rebuild, Theme singleton, MonthCalendar и др.
- Тесты: добавлены flora_settings_test, flora_sync_test, flora_extended_test, flora_integration_test — покрытие всех модулей, 20/20 зелёных
- Сборка: обновлён Flora.app (4.6М бинарь -> 173М бандл, ad-hoc подпись, проверен offscreen запуск, версия 0.0.1 + cmark 0.29 + libgit2 1.9)
- .gitignore: добавлены Testing/, coverage, gcda/gcov, __pycache__, .tmp, test-vault и др.
2026-09-01 19:25:07 +03:00
Flora (opencode)
0858b48cb3
Fix: правая панель (.calendar/ссылки/теги/граф без ColumnLayout);.editorArea без Flickable —Text+clip+anchors.bottomMargin:32; виджеты исправлены
2026-08-18 00:27:27 +03:00
Flora (opencode)
d709724fed
Fix: TextEdit anchors.top: headerBar/bottom + anchors.bottom: parent.bottom (без Flickable — Flickable получал нулевую высоту); убран debug yellow rectangle
2026-08-17 19:41:26 +03:00
Flora (opencode)
84cbe55d32
Debug: Text+z:1000+yellow прямо в EditorPanel — видимый поверх всего; проверка QML-рендеринга
2026-08-17 19:39:02 +03:00
Flora (opencode)
aa2e157f5f
Fix: EditorPanel переписан на anchors (tabBar → formatToolbar → editorArea) вместо ColumnLayout — SplitView теперь корректно задаёт высоту; вкладки сверху, тулбар под ними, редактор заполняет остаток
2026-08-17 18:22:56 +03:00
Flora (opencode)
8048b2be2f
Fix: корень EditorPanel — ColumnLayout вместо Item (исправляет layout в SplitView: вкладки сверху, редактор снизу); убрана обёртка Item; color:text на TextArea; автооткрытие первого .md
2026-08-17 18:15:22 +03:00
Flora (opencode)
7b43b0c4fc
Массовые исправления UX: вкладки (MouseArea не блокирует ×), контент редактора (onDocIndexChanged), авто-расширение .md, ошибка дубликата, ПКМ-создание внутри папок, точки в календаре, граф (зум колесом, клик по файлу, pan правой кнопкой), fileExists(), 16/16 тестов
2026-08-17 15:42:56 +03:00
Flora (opencode)
9946e440ce
Фикс: ProviderSetupGuide модальный-в-модальном (non-modal + z:100), index required property в delegate'ах FileTreePanel/EditorPanel, добавлена диагностика openProviderGuide, vault=/Users/alex/Nextcloud/test
2026-08-17 15:16:19 +03:00
Flora (opencode)
3317aa169a
Фаза 5: панель форматирования — FormatToolbar/TbButton, JS-форматирование в EditorPane (инлайн/списки/задачи/заголовки/цвета/индексы/цитата/выноска/обтекание), TableEditor (2×1, полосы «+» 20px)
2026-08-17 12:34:03 +03:00
Flora (opencode)
e7d873903b
Фаза 4: редактор — DocumentManager (вкладки, автосохранение 5с, сохранение при закрытии), EditorPane/EditorPanel (вкладки, режимы, «открыть рядом», Ctrl+S/W/E/Tab), открытие из дерева; тест docmgr (14/14)
2026-08-17 01:14:00 +03:00
Flora (opencode)
980fbcedcb
Фаза 0: каркас — CMake (cmark-gfm, libgit2+SSH, libssh2), QML-скелет (меню, 3 панели, кнопка «+»), VaultManager, LICENSE GPL-3.0
2026-08-17 00:05:20 +03:00