✅scrapbox-headless-scriptをscrapbox-userscript-stdに統合
scrapbox-headless-scriptをscrapbox-userscript-stdに統合する
ScrapboxのWebSocketを使っている部分だけ別にする必要性がないので
./browser/websocketに置く
段取り
まずはscrapbox-headless-scriptでいくつかrefactoringと機能追加を済ませる
✅project IDとuser IDをcacheする
✅getPage()をscrapbox-userscript-stdのに置き換える
📝roomを使わずにページ編集する
それが終わったら統合する
逆でもいい気がするがtakker.icon
2022-02-10
19:01:16 merged
18:59:59 終了
使いやすいように、subdirectoryにもmod.tsを置いた
https://github.com/takker99/scrapbox-userscript-std/pull/7
18:38:33 統合作業開始
18:36:15 テスト終了
修正PRを出す
18:37:55 merged
17:34:20 minified codeをscrapbox-headless-scriptに貼り付けた
いくつかサンプルコードをここに書いて、/takker/@takker/ScrapJupyter経由で試す
2022-02-11 17:26:47 scrapbox-userscript-std/browser/websocketの動作確認用コードにテンプレを移した
patch()
新しいページを作るだけ
code:js
import { patch } from "../scrapbox-headless-script/mod.js";
//新しいページを作るだけ
await patch(scrapbox.Project.name, "test-new-page", (lines) => lines.map(line => line.text));
17:39:50 あ、存在しないページだと早期returnしてたhttps://github.com/takker99/scrapbox-headless-script/blob/0.3.0/shortcuts.ts#L76
直そう
17:43:41 成功!
タイトルのすぐ下に追記する
code:js
import { patch } from "../scrapbox-headless-script/mod.js";
await patch(scrapbox.Project.name, "test-new-page", (lines) => lines.length < 2 ? [
lines0.text,
"新しい行その1",
] : [
lines0.text,
lines1.text.replace(/(\d+)/, (_, n) => ${parseInt(n) + 1}),
...lines.slice(1).map(line => line.text),
]);
18:28:25 問題なさそう
https://gyazo.com/04876da91ed4a1513ec2f39f18521b5d
patch()とdelete()
新しいページを作って消す
code:js
import { patch, deletePage } from "../scrapbox-headless-script/mod.js";
//新しいページを作って消す
const page = "test-new-page";
await patch(scrapbox.Project.name, page, (lines) => lines.map(line => line.text));
await deletePage(scrapbox.Project.name, page);
17:48:02 成功
patch()で何も更新しないと、ページの読み込み中に wss://scrapbox.io/socket.io/?EIO=4&transport=websocket への接続が切断されましたというエラーがコンソールに流れる
ネットワーク欄には何も表示されない
17:57:36 わかった。socket.on("connect", () => {...})で通信確立を待つ前にSocket.disconnect()で切断したからだ
Socket.on()やSocket.emit()を呼び出すときは、勝手にconnectを待機するようだ
Client API | Socket.IO
✅connect eventを待ってからSocketを返すようにしようす
これはscrapbox-userscript-websocketをいじるしかないな。
18:19:48 直った
pin()
ページが存在しないときはピンしない
code:js
import { pin } from "../scrapbox-headless-script/mod.js";
await pin(scrapbox.Project.name, "test-new-page");
18:31:14 あれ?pinされてしまった……
18:33:29 コードミスってた
直したhttps://github.com/takker99/scrapbox-headless-script/commit/635831c0bed501ea1ee59f74120978704e7177ce
ページが存在しないときはページを作ってからピンする
code:js
import { pin } from "../scrapbox-headless-script/mod.js";
await pin(scrapbox.Project.name, "test-new-page", { create: true });
unpin()
code:js
import { unpin } from "../scrapbox-headless-script/mod.js";
await unpin(scrapbox.Project.name, "test-new-page");
18:35:57 pin()/unpin()のテスト終了
17:30:04 一通りテストしたら統合作業に入る
#2022-02-11 17:26:57
#2022-02-10 15:28:47