import-devにbackgroundでテストコードを貼り付けるUserScript
さんが実装したコードを使う
動機
UIがしょっちゅう固まる
コードサイズが大きいと、複数回に分けて貼らなければならない
メモ帳を起動し、全部一旦貼り付け、上から順に貼り付けられそうなサイズを見極めて切り取り、貼り付け、UIフリーズを待機し、解除されたら残りを切り取り、また貼り付け、フリーズ解除を待ち……
patch()を使ったコードブロック変更プログラムを使えばUIを介することなく瞬時にコードを更新できる
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/takker/import-devにbackgroundでテストコードを貼り付けるUserScript/script.ts
script.ts/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="dom" />
import { useStatusBar } from "../scrapbox-userscript-std/dom.ts";
import { updateCodeFile } from "../scrapbox-userscript-std/websocket.ts";
import { Scrapbox } from "../scrapbox-jp%2Ftypes/userscript.ts";
declare const scrapbox: Scrapbox;
scrapbox.PageMenu.addMenu({
title: "Update dev UserScript",
image: "https://i.gyazo.com/95e1d28e25db16bf7c4fdeeb16452179.png",
onClick: async () => {
const content = globalThis.prompt("type new code");
if (!content?.trim?.()) return;
const bar = useStatusBar();
bar.render({
type: "group",
items: [{ type: "spinner" }, {
type: "text",
text: "Update import-dev/mod.js...",
}],
});
try {
await updateCodeFile({ filename: "mod.js", content }, "takker", "import-dev");
bar.render({
type: "group",
items: [{ type: "check-circle" }, {
type: "text",
text: "Updated",
}],
});
} catch(e: unknown) {
console.error(e);
if(!(e instanceof Error)) throw e;
bar.render({
type: "group",
items: [{ type: "exclamation-triangle" }, {
type: "text",
text: `${e.name} ${e.message}`,
}],
});
} finally {
setTimeout(() => bar.dispose(), 2000);
}
},
});
dist