///
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,
};