ScrapRun
コードブロックなんでも実行script
特徴
コードブロックを隠してpreviewerのみだす
コードブロックにカーソルが侵入したときのみ、コードブロックを表示する
CSSだけで実装した
コードブロックの処理方法は外部から指定する
大抵のことはできるはず
既定で用意してあるprevewer
SVG
PlantUML
GLSL
使い方
installation
簡単な方法
jsimport { setup, previewSVG, previewGLSL, previewPlantUML } from "../../takker-dist/ScrapRun-min/mod.js";
setup({ compilers: [
{ when: /(?:^|\.)svg$/, compile: previewSVG },
{ when: /(?:^|\.)glsl$/, compile: previewGLSL },
{ when: /(?:^|\.)p(?:lant)?uml$/, compile: previewPlantUML },
]});
それ以外
ただし、コードのコピペは事実上不可能です
本コードはクソデカwasmバイナリをbase64エンコーディングして無理やり取り込んであるので、数百KBもの大きさがあります
しかもその殆どが1行に詰め込まれているので、scrapboxに貼ると行折返しの計算でbrowserが固まります
$ deno run -r=https://scrapbox.io -A https://scrapbox.io/api/code/takker/deno_bundleの代替コード/json.ts https://scrapbox.io/api/code/takker/ScrapRun/mod.ts ScrapRun-min
これをjson形式で保存してimportすれば、 ScrapRun-min/mod.js
からコードを読み込めるようになります
サイズが大きいのは
previewPlantUML
だけなので、もし
PlantUMLのpreviewが不要であれば、これをimportから削除して
tree shakingしていただければコピペできるサイズに収まります
configuration
compilers
にpreview
詳しくはソースコードの型定義を参照
2.jsimport { setup, previewSVG, previewGLSL, previewPlantUML } from "../../takker-dist/ScrapRun-min/mod.js";
setup({ compilers: [
{ when: /(?:^|\.)svg$/, compile: previewSVG },
{ when: /(?:^|\.)glsl$/, compile: previewGLSL },
{ when: /(?:^|\.)p(?:lant)?uml$/, compile: previewPlantUML },
]});
プリセットの実装状況
Compile
を自分で実装すれば、基本的にどんな機能も実装できる
非同期周りはちょっと怪しいかも
ここには
が実装したいと思っているものを載せておく
TS→bundleして実行
preview方法を選べるようにする
これはモチベができたらやる
<svg>
を直接埋め込む
<img>
として読み込む
<iframe>
にsvg fileとして読み込む
✅TeX→hot reloadつきpreview
✅PlantUML→hot reloadつきpreview
❌mermaid→hot reloadつきpreview
標準実装されたので不要
HTML→hot reloadつきpreview
これでサクッとweb appを試すことができる
別タブで開いてもいいかも
wandbox→hot reloadつきpreview
wandboxにデータを送って結果を表示する
✅GLSL→hot reloadつきpreview
設計
coreとpluginに分ける
core
コードブロックの抽出
ボタンなどのUIの表示
コードブロックの更新監視
plugin
言語ごとの処理方法
userが独自のpreviewerを作ることもできる
着想
コードブロックの監視とUIは全く同じなので、基幹部分を共通化させ、コードブロックの処理方法だけカスタマイズできるようにすればいいと思い立った
実装したいこと
✅読み込み中表示は2秒経過後に表示することにする
✅読み込み中表示のかわりに、ログを流す
そっちのほうが進捗がわかりやすい
行数が多いページで編集したとき、
CSS再計算に非常に時間がかかるケースがあった
現状だと行が消えるので、行の付近をクリックしても編集状態に移行できない
行の高さの合計とpreviewerの高さに食い違いがあるとき困らないか?
ページ遷移時に前ページのpreviewが消えずに残ってしまっていた
コード実行をpreviewerの一つとして提供する
mod.tsexport * from "https://raw.githubusercontent.com/takker99/ScrapRun/0.4.1/mod.ts"
worker.tsimport "https://raw.githubusercontent.com/takker99/ScrapRun/0.4.1/previewers/TikZ/worker.ts";
prototypes