This is a bookmarklet to visualize/unvisualize Mermaid format code output by ChatGPT(or Copilot). When the bookmarklet is executed, a mermaid icon appears in the upper right corner, and each click on this icon toggles between source and image views.
ChatGPT(Copilot)が出力したMermaid形式のコードをビジュアライズ/解除するブックマークレットです。 ブックマークレットを実行すると右上隅にマーメイドのアイコンが現れ、これをクリックするごとにソース表示と画像表示が切り替わります。
Off | On |
---|---|
[!IMPORTANT] If you are looking directly at README.md, the Bookmarklet link is not enabled with the following instructions. Please access the link below. github.io/chatgpt-mermaid-bookmarklet
Installation and usage instructions are as follows.
DRAG following link on your bookmark toolbar to create bookmarklet.
🧜♀️️ visualize
mermaid.min.js
file and drop on the dialog in order to be loaded.Step 1, 2, and 5 are required once (Step 5, 6 is required for each service). After set up is done, JS file is saved in localStorage and loaded from there.
[!IMPORTANT] README.mdを直接見ている場合は以下の説明でBookmarkletリンクが有効になりません。下記のリンクにアクセスしてください。 github.io/chatgpt-mermaid-bookmarklet
インストール、利用方法は次のとおりです。
下記のリンクをブックマークバーにドラッグしてブックマークレットを作成します。
🧜♀️️ visualize
mermaid.min.js
をダイアログの上にドラッグし、JSファイルを読み込ませます。上記のステップ1,2、5は初回のみ必要です。(ステップ5, 6はサービス毎に実施が必要です。)2回目以降にBookmarkletを起動した場合、スクリプトはローカルストレージから読み込まれます。
By repeatedly clicking the icon, you can toggle between Mermaid format display and graph display. After displaying the graph, if you return to the Mermaid format display, it will become editable. If there is a syntax error in the Mermaid format output by the LLM, you can fix it on the page.
アイコンのクリックを繰り返すとMermaid形式表示とグラフ表示を切り替えることができます。 一度グラフ表示したあとにMermaid形式表示に戻すと編集可能になります。 LLMが出力したMermaid書式に問題があってSyntax Errorが発生する場合、ページ上で修正可能です。
You can drag and move the Mermaid icon to a desired position. The display position is saved and will appear in the same place the next time you start.
マーメイドアイコンの位置はドラッグして移動できます。表示位置は記録され、次回起動時に同じ場所に表示されます。
To update Mermaid JS, follow these steps (needs to be executed for each site):
Mermaid JSをアップデートするには以下の手順に従います。(サイトごとに実行が必要です)
To delete the recorded MermaidJS and other information from Localstorage, follow these steps (needs to be executed for each site):
記録したMermaidJSやその他の情報をLocalstorageから削除するには以下の手順にしたがいます。(サイトごとに実行が必要です)
This bookmarklet uses Mermaid.js to visualize the Mermaid code. mermaid.js is published on CDN and freely accessible, but ChatGPT’s CSP does not allow you to import it by specifying script.src or by using fetch.
To work around this limitation, we decided to have users download Mermaid.js and then pass it to the bookmarklet. Once passed, Mermaid.js is stored in localStorage (in ChatGPT’s domain), so this operation is not necessary after the second time.
このブックマークレットはMermaid.jsを使ってMermaidのコードを可視化します。mermaid.jsはCDNで公開されており、自由にアクセスできますが、ChatGPTのCSPではscript.srcを指定したり、fetchを使ってインポートすることができません。
この制限を回避するために、ユーザにMermaid.jsをダウンロードしてもらい、それをブックマークレットに渡すことにしました。一度渡されたMermaid.jsはlocalStorage(ChatGPTのドメイン内)に保存されますので、2回目以降はこの操作は必要ありません。
This bookmarklet extracts codes
corresponds to code.language-mermaid
,which is generated by ChatGPT/Copilot,
and processes it one by one in the form mermaid.run({nodes:[TARGET]})
.
mermaid.run
can also treat the query code.language-mermaid
directly, in which case it processes this query internally using document.querySelector
.
While document.querySelector
is powerful, it cannot find the element under it if ShadowDOM is used (i.e. case of Copilot).
This bookmarklet will search inside the ShadowDOM to find the code matching code.laguage-mermaid
and pass it to mermaind.run
.
Since Mermaid.js also uses document.querySelector
inside each diagram render, the above tweaks is not sufficient to achieve visualization in the case of Copilot. The patched Mermaid.min.js provided here has been modified so that where document.querySelector
is called (where it becomes null when using ShadowDOM), it becomes a call to TARGET.querySelector
.
このブックマークレットでは表示されている画面のcode.language-mermaid
に該当する箇所を抽出して mermaid.run({nodes:[TARGET]})
という形で一箇所ずつ渡します。
mermaid.run
はcode.language-mermaid
というクエリを直接受け取ることもでき、その場合、内部でdocument.querySelector
などを使ってこのqueryを処理します。
document.querySelector
は強力ですが、ShadowDOMが利用されている場合(つまりCopilotの場合)にはその配下の要素を見つけることができません。
このブックマークレットではShadowDOMの内部まで探索してcode.laguage-mermaid
に合致するコードを見つけ、mermaind.run
に渡します。
Mermaid.jsでは個々のレンダーの内部でもdocument.querySelector
を利用して操作を行うため、Copilotでのビジュアライズを実現するには上記の対応でも不十分です。ここで提供しているパッチ適用されたMermaid.min.jsはdocument.querySelector
が呼ばれているところ(ShadowDOM利用時にnullになるところ)がTARGET.querySelector
の呼び出しになるよう、変更を加えています。
Markdownではリンクを[xxx](link)
という形式で表記します。
linkに()
を含むと正しく認識できないため、
通常のbookmarkletではエスケープしないこれらの文字もエスケープする必要があります。このREADME.mdに添付しているブックマークレットは下記のコマンドで生成しています。
bookmarklet source.js | sed 's/(/%28/g; s/)/%29/g' | pbcopy
We do not plan to update the patch even if Mermaid.js is updated.