/// import { caret, getCharDOM, getLineDOM, press, insertText, goHeadLine, goLastLine, scrollUp, scrollDown, useStatusBar, } from "../scrapbox-userscript-std/dom.ts"; import { setDebugMode } from "../takker99%2FScrapBindings/mod.ts"; const pd = (e: Event) => e.preventDefault(); const sp = (e: Event) => e.stopPropagation(); import { popupMenu } from "../scrapbox-userscript-std/dom.ts"; const clickPopup = (e: KeyboardEvent, buttonName: string | RegExp): void => { const buttons = popupMenu()?.getElementsByClassName?.("button"); if (!buttons) return; const button = [...buttons].find( (button) => buttonName instanceof RegExp ? buttonName.test(button.textContent ?? "") : button.textContent === buttonName ); if (!(button instanceof HTMLDivElement)) return; if (e.target !== document.activeElement) return; pd(e);sp(e); button.click(); }; const popup = { // 複数行打ち消し線 "-": (e: KeyboardEvent) => clickPopup(e, "\uf0cc"), // リンクを外す "]": (e: KeyboardEvent) => clickPopup(e, "\uf127"), "c": (e: KeyboardEvent) => clickPopup(e, "Copy plain"), // 数式記法にする "$": (e: KeyboardEvent) => clickPopup(e, "\uf698"), // takker-books用 "{": (e: KeyboardEvent) => clickPopup(e, /{{c\d+}}/), "}": (e: KeyboardEvent) => clickPopup(e, "reset cloze"), "n": (e: KeyboardEvent) => clickPopup(e, "make note"), }; const navigation = { // リンクを踏む "": (e: KeyboardEvent) => { const { position: { line, char } } = caret(); const a = getCharDOM(line, char)?.closest("a.page-link") // なかったらその行の中で一番先頭のリンクを踏む ?? getLineDOM(line)?.querySelector?.("a.page-link"); if (!(a instanceof HTMLAnchorElement)) return; pd(e);sp(e); a.click(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);history.back(); }, }; const motion = { "": (e: KeyboardEvent) => { pd(e);sp(e);goHeadLine(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);goLastLine(); }, }; import { makeNewPage } from "../custom-new-page/mod.ts"; import { newPageHook, splittedLinkHook, taskLineHook, } from "../for-custom-new-page/mod.ts"; import { outdentLines, downLines, upLines, indentLines, outdentBlocks, downBlocks, upBlocks, indentBlocks, } from "../scrapbox-userscript-std/dom.ts"; import { Scrapbox } from "../scrapbox-jp%2Ftypes/userscript.ts"; declare const scrapbox: Scrapbox; const hooks = [taskLineHook, newPageHook, splittedLinkHook]; const edit = { "": (e: KeyboardEvent) => { const project = window.prompt("Create a new page at", scrapbox.Project.name); if (!project) return; pd(e);sp(e); makeNewPage({ project, mode: "self", hooks })?.(); }, "": (e: KeyboardEvent) => { const project = window.prompt("Create a new page at", scrapbox.Project.name); if (!project) return; pd(e);sp(e); makeNewPage({ project, mode: "noopen", hooks })?.(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);outdentLines(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);downLines(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);upLines(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);indentLines(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);outdentBlocks(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);downBlocks(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);upBlocks(); }, "": (e: KeyboardEvent) => { pd(e);sp(e);indentBlocks(); }, }; import { lightFormat, addDays } from "../date-fns/mod.ts"; // timestampを無効化する // alt+tの誤動作を防止する // @ts-ignore scrapbox-jp/typesのバグ scrapbox.TimeStamp.removeAllFormats(); const timestamp = { "": (e: KeyboardEvent) => { pd(e);sp(e); insertText(lightFormat(new Date(), '#yyyy-MM-dd HH:mm:ss ')); }, "": (e: KeyboardEvent) => { pd(e);sp(e); insertText(lightFormat(new Date(), 'yyyy-MM-dd HH:mm:ss ')); }, "": (e: KeyboardEvent) => { pd(e);sp(e); insertText(lightFormat(new Date(), 'HH:mm:ss ')); }, "": (e: KeyboardEvent) => { pd(e);sp(e); insertText(lightFormat(new Date(), 'yyyy-MM-dd')); }, }; import { taskCommon } from "./task-common.ts"; export { task } from "./task.ts"; export const config = { ...popup, ...navigation, ...motion, ...edit, ...timestamp, ...taskCommon, };