diff --git a/src/index.ts b/src/index.ts index e4cd138..9aee33c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,6 +16,7 @@ import extractRef from "roamjs-components/util/extractRef"; import extractTag from "roamjs-components/util/extractTag"; import getChildrenLengthByParentUid from "roamjs-components/queries/getChildrenLengthByParentUid"; import initializeTodont, { TODONT_MODES } from "./utils/todont"; +import normalizeTodoArchivedPrefix from "./utils/normalizeTodoArchivedPrefix"; export default runExtension(async ({ extensionAPI }) => { const toggleTodont = initializeTodont(); @@ -128,6 +129,9 @@ export default runExtension(async ({ extensionAPI }) => { } const text = extensionAPI.settings.get("append-text") as string; let value = oldValue; + // Roam's Cmd/Ctrl+Enter prepends TODO for non-checkbox blocks. + // If the block starts with ARCHIVED, collapse TODO+ARCHIVED into TODO. + value = normalizeTodoArchivedPrefix(value); if (text) { const formattedText = ` ${text .replace(new RegExp("\\^", "g"), "\\^") @@ -352,7 +356,25 @@ export default runExtension(async ({ extensionAPI }) => { if (target.tagName === "TEXTAREA") { const textArea = target as HTMLTextAreaElement; const { blockUid } = getUids(textArea); - if (textArea.value.startsWith("{{[[DONE]]}}")) { + // Check data layer for ARCHIVED state — the textarea DOM value + // may lag behind after a recent API update. + const blockText = + getTextByBlockUid(blockUid) || textArea.value; + if (blockText.startsWith("{{[[ARCHIVED]]}}")) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + const withoutArchived = blockText.replace( + /^\{\{\[\[ARCHIVED\]\]\}}\s*/, + "", + ); + const normalized = withoutArchived + ? `{{[[TODO]]}} ${withoutArchived}` + : "{{[[TODO]]}}"; + if (normalized !== blockText) { + updateBlock({ uid: blockUid, text: normalized }); + } + } else if (textArea.value.startsWith("{{[[DONE]]}}")) { onDone(blockUid, textArea.value); } else if (textArea.value.startsWith("{{[[TODO]]}}")) { onTodo(blockUid, textArea.value); diff --git a/src/utils/normalizeTodoArchivedPrefix.ts b/src/utils/normalizeTodoArchivedPrefix.ts new file mode 100644 index 0000000..27896b1 --- /dev/null +++ b/src/utils/normalizeTodoArchivedPrefix.ts @@ -0,0 +1,7 @@ +const TODO_ARCHIVED_PREFIX_REGEX = + /^(\{\{\[\[TODO\]\]\}})\s*\{\{\[\[ARCHIVED\]\]\}}/; + +const normalizeTodoArchivedPrefix = (value: string): string => + value.replace(TODO_ARCHIVED_PREFIX_REGEX, "$1"); + +export default normalizeTodoArchivedPrefix;