forked from Qortal/q-blog
39 lines
1.8 KiB
Markdown
39 lines
1.8 KiB
Markdown
Q-Blog v0.2.0 — Wiki Mode Canonical Selection
|
||
|
||
Date: 2025-08-22
|
||
|
||
Highlights
|
||
|
||
- Wiki Mode canonical selection: When multiple authors publish the same `BLOG_POST` identifier, the app now selects a single canonical revision to display based on blog settings.
|
||
- Per-blog settings cache: Efficiently resolves each blog’s owner and wiki settings (`wikiEnabled`, `editorWhitelist`, `editorBlacklist`).
|
||
- Favorites and Subscriptions respect wiki mode: Lists deduplicate by identifier across names and pick the canonical author.
|
||
- Individual post view resolves canonical author when wiki is enabled before fetching content JSON.
|
||
- UI: Navbar search/filter and persistent Tile/List view toggle. Notifications consolidated in one place.
|
||
- Quality: Accessibility tests and stronger utility/unit coverage; minor code cleanup and worker URL fix.
|
||
|
||
Canonical selection rules
|
||
|
||
- Owner is always allowed (cannot be blocked by blacklist).
|
||
- Blacklist disallows others even if whitelisted; whitelist gates non-owners if non-empty.
|
||
- Among authorized authors: pick latest by `updatedAt`/`qdnUpdated`; owner wins ties; otherwise lowest id as last tiebreaker.
|
||
|
||
Implementation notes
|
||
|
||
- `utils/wiki.ts` implements `isAuthorized`, `canEdit`, and `selectCanonical`.
|
||
- `utils/wikiSettingsCache.ts` caches per-blog owner/settings, preferring metadata when available.
|
||
- `hooks/useFetchPosts.tsx` canonicalizes search results for feed, favorites, and subscriptions.
|
||
- `pages/BlogIndividualPost/BlogIndividualPost.tsx` selects the canonical author for the requested post.
|
||
|
||
Breaking changes
|
||
|
||
- None. Existing identifiers and endpoints are unchanged.
|
||
|
||
Fixes & cleanup
|
||
|
||
- Removed an unused web worker and fixed a BLOG_POST worker URL.
|
||
- Removed redundant local helper where a shared util exists.
|
||
|
||
Upgrade notes
|
||
|
||
- No migration steps required. Deploy as usual; v0.2.0 is compatible with prior data.
|