dorfteich/packages/shared/i18n/en/common.json
Claude Opus 4.8 69b00fcf2f
All checks were successful
CD / Build and push images (push) Successful in 3m1s
CI / Lint, typecheck, test (push) Successful in 2m13s
CI / Auth e2e pack (push) Successful in 2m36s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 9s
CD / Smoke tests against Test (push) Successful in 1m13s
CD / Promote to Int (push) Successful in 11s
Add manual page ordering with drag-and-drop (#45)
Enable the third sidebar sort mode — a freely defined order.

- api: `PATCH /pages/:id/position` (before/after neighbour) recomputes only
  the moved page's fractional `sort_key`. Pure `sort-key.ts` helpers
  (`nextKeyOrRebalance`, `evenlySpacedKeys`) decide between the cheap
  single-key path and a full pond rebalance to evenly-spaced keys when a key
  would exceed MAX_SORT_KEY_LENGTH or the client's neighbours are stale;
  rebalance runs in one transaction. Order is server-authoritative.
- web: enable 'manual' in the sort-mode switch; in manual mode the owner can
  reorder via native drag-and-drop (drop above/below by pointer half) or the
  keyboard (per-row up/down buttons), each announced through an aria-live
  region. Reordering is hidden while a label filter narrows the list. New
  pages already append at the end (create uses generateKeyBetween(last, null)).
  Pure `reorder.ts` neighbour helpers, unit-tested.
- i18n: manual sort mode + reorder strings (de + en).
- tests: sort-key property test (10.000 adversarial reorders never collide or
  overflow — rebalance verified); reposition db test (persist, server-order,
  sort-mode switch keeps manual order); reorder e2e pack (keyboard reorder
  persists across reload + identical on a fresh read; aria-live announced).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PGdhRiwU1WRL4XxJfZYipY
2026-07-09 12:18:44 +02:00

52 lines
1.3 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"layout": {
"sidebar": {
"expand": "Show sidebar",
"collapse": "Hide sidebar",
"label": "Pages",
"placeholder": "Your ponds and pages will appear here.",
"empty": "No pages yet.",
"sortLabel": "Sort pages",
"sortMode": {
"alpha": "AZ",
"created": "Creation date",
"manual": "Manual order"
},
"reorder": {
"up": "Move up",
"down": "Move down",
"dragHint": "Drag to reorder",
"moved": "Moved {{title}} to position {{position}} of {{count}}."
},
"newPage": "+ New page",
"newPageTitle": "Title",
"create": "Create",
"cancel": "Cancel"
},
"pondSwitcher": {
"label": "Switch pond",
"trigger": "Select a pond"
},
"user": {
"anonymous": "Not signed in"
}
},
"pondHome": {
"empty": "This pond doesn't have any pages yet — create one from the sidebar."
},
"home": {
"title": "Welcome to Dorfteich",
"intro": "Dorfteich is an open-source wiki with real-time collaboration. This instance is being set up.",
"api": {
"checking": "Checking API …",
"ok": "API reachable",
"error": "API not reachable"
}
},
"notFound": {
"title": "Page not found",
"body": "The address you opened does not exist.",
"home": "Back to the start page"
}
}