generated at
import-devにbackgroundでテストコードを貼り付けるUserScript
Mijinko SDさんが実装したコードを使う

動機
import-devにコードを貼り付けるのがめんどい
UIがしょっちゅう固まる
コードサイズが大きいと、複数回に分けて貼らなければならない
メモ帳を起動し、全部一旦貼り付け、上から順に貼り付けられそうなサイズを見極めて切り取り、貼り付け、UIフリーズを待機し、解除されたら残りを切り取り、また貼り付け、フリーズ解除を待ち……
patch()を使ったコードブロック変更プログラムを使えばUIを介することなく瞬時にコードを更新できる
dev mode (UserScript)のときに動くようにする

$ 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

#2024-06-18 09:07:49