mirivlad
88eb99e9af
fix: verstak:// links in preview, case-insensitive search, keyboard layout swap
1. Fix verstak:// links rendered as blocked/strikethrough in markdown preview:
- Changed href from 'javascript:void(0)' to hash-based '#verstak-type-id'
- DOMPurify no longer strips the link; click handler uses data-verstak-href
- CSS already handles .md-link--internal with cyan color, no strikethrough
2. Add markdown label escaping for internal link picker:
- New escapeMarkdownLabel() in markdown.ts escapes [ ] ( )
- Applied in InternalLinkPicker.selectResult() before inserting markdown
3. Fix case-insensitive search for RU/EN:
- Add title_lower column (migration 019) populated by Go strings.ToLower
- BackfillTitleLower() runs after migrations to populate existing rows
- Search() now queries title_lower with Go-level lowercase (Unicode-aware)
- insertNode() and UpdateTitle() populate title_lower automatically
- New migration 019 + BackfillTitleLower in storage.go
- Tests: TestSearchCaseInsensitive, TestSearchFindsCreatedNode
4. Add keyboard layout swap search support:
- New keyboardLayout.ts utility with RU↔EN QWERTY mapping
- expandKeyboardVariants() generates original + swapped + lowercased variants
- InternalLinkPicker.search() queries all variants in parallel, deduplicates by ID
- Examples: dthcnfr → верстак, руддщ → hello
Files changed:
- markdown.ts: hash href + escapeMarkdownLabel export
- InternalLinkPicker.svelte: label escaping + layout swap search
- keyboardLayout.ts: new RU/EN layout swap utility
- repository.go: title_lower in Search/insertNode/UpdateTitle
- storage.go: migration019 + BackfillTitleLower
- migrations_019.sql.go: new migration
- search_test.go, repository_test.go: new tests
2026-06-15 10:39:44 +08:00
..
2026-05-30 20:35:04 +08:00
2026-05-30 20:35:04 +08:00
2026-05-31 01:26:46 +08:00
2026-05-31 01:52:23 +08:00
2026-05-31 02:25:25 +08:00
2026-05-31 02:25:25 +08:00
2026-06-01 02:16:13 +08:00
2026-06-01 02:53:56 +08:00
2026-06-01 22:45:12 +08:00
2026-06-02 02:26:05 +08:00
2026-06-02 12:47:06 +08:00
2026-06-03 11:24:59 +08:00
2026-06-03 12:27:50 +08:00
2026-06-05 07:33:10 +08:00
2026-06-05 12:37:25 +08:00
2026-06-06 18:23:47 +08:00
2026-06-06 18:27:00 +08:00
2026-06-15 10:39:44 +08:00
2026-05-30 18:58:47 +08:00
2026-06-15 10:39:44 +08:00