v2.0.2 — English tag aliases, English-only website, undo-body flaky fix

- tags: accept #birthday and #appointment as English synonyms for
  #geburtstag and #termin. Normalised to the German canonical form at
  extractTags() write-time so every downstream check (parseTags /
  calendar logic / board filters) keeps working without per-call-site
  aliasing. Editor body-regex extended so the "new appointment"
  heuristic and auto-sync trigger on either variant.
- website: replace #termin/#geburtstag with #appointment/#birthday in
  tag chips, calendar feature list, and calendar legend.
- tests: fix flaky "Undo: Editor Save → Ctrl+Z reverts body change"
  that raced doSave(). The test polled the server for the patched body
  and fired Ctrl+Z as soon as it landed, but the undo shortcut is
  guarded by !guards.isOpen('modal'), and closeModal() only runs after
  the post-patch _reloadAll — on fast servers the key was swallowed.
  Poll now also waits for the modal `.open` class to drop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
thandClaude Opus 4.7 committed 2026-04-18 10:04:08 +02:00
1 parent 89d84d3538
commit 48b5907f4c
6 files changed
+25 -12

No files matched your search

+2 -2
View File
@@ -234,7 +234,7 @@ export function openModal(card = null) {
// `card` can be `null` (add-button new) or a shell `{id: null, ...}`
// from the calendar day-popup — both count as "new", so key on
// card?.id not the card ref itself.
const isNewAppointment = !card?.id && /#(termin|geburtstag)\b/.test(body.value);
const isNewAppointment = !card?.id && /#(termin|appointment|geburtstag|birthday)\b/.test(body.value);
inpBucket.value = card?.bucket_id ? card.bucket_id
: (isNewAppointment ? ''
: (!virtualBuckets.includes(state.activeBucket) ? state.activeBucket : ''));
@@ -512,7 +512,7 @@ async function doSave(close, { animate = true } = {}) {
}
await window._reloadAll();
// Auto-sync if card has #termin or #geburtstag
if (data.body && /#(termin|geburtstag)\b/.test(data.body)) {
if (data.body && /#(termin|appointment|geburtstag|birthday)\b/.test(data.body)) {
window._triggerSync?.();
}
if (close) {