From 3e033db0beedc35c8bc48c69701ab816e1ccd406 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 29 Dec 2025 10:41:32 +0800 Subject: [PATCH] press `t o` to toggle collapse/expand --- deps/publish/src/logseq/publish/publish.js | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/deps/publish/src/logseq/publish/publish.js b/deps/publish/src/logseq/publish/publish.js index 25ce8ffb6d..011aa0d361 100644 --- a/deps/publish/src/logseq/publish/publish.js +++ b/deps/publish/src/logseq/publish/publish.js @@ -35,6 +35,52 @@ document.addEventListener("click", (event) => { btn.setAttribute("aria-expanded", String(!collapsed)); }); +let sequenceKey = null; +let sequenceTimer = null; +const SEQUENCE_TIMEOUT_MS = 900; + +const resetSequence = () => { + sequenceKey = null; + if (sequenceTimer) { + clearTimeout(sequenceTimer); + sequenceTimer = null; + } +}; + +const isTypingTarget = (target) => { + if (!target) return false; + const tag = target.tagName; + return ( + tag === "INPUT" || + tag === "TEXTAREA" || + target.isContentEditable + ); +}; + +document.addEventListener("keydown", (event) => { + if (event.metaKey || event.ctrlKey || event.altKey) return; + if (isTypingTarget(event.target)) return; + + const key = (event.key || "").toLowerCase(); + if (!key) return; + + if (sequenceKey === "t" && key === "o") { + resetSequence(); + window.toggleTopBlocks(); + event.preventDefault(); + return; + } + + if (key === "t") { + sequenceKey = "t"; + if (sequenceTimer) clearTimeout(sequenceTimer); + sequenceTimer = setTimeout(resetSequence, SEQUENCE_TIMEOUT_MS); + return; + } + + resetSequence(); +}); + document.addEventListener("click", (event) => { const toggle = event.target.closest(".theme-toggle"); if (!toggle) return;