scriptからscrapboxに文字を流し込んだときの挙動を調べる
とても便利takker.icon*3
しかし、scrapboxの自動入力が邪魔してうまく行かない場合がある
確認済みの現象
引用文中で挿入すると、改行の前に勝手に>が入る
どんな場合にどんな不具合が生じるのかを調べておこうと思う
目的
不具合の発生条件を洗い出し、それへの対策を試みる
方法
1. 次のコードをUserScriptに入れる
code:js
import '/api/code/takker/scrapbox-insert-text/test1.js';
developper toolからinsertText()が使えるようになる
2. consoleから様々なcursor位置でinsertText()を実行して調べる
調査結果
改行なし
/icons/pass.icon本文に挿入
/icons/pass.iconコードブロックに挿入
/icons/pass.iconアイコン記法の途中に挿入
/icons/pass.icon折返しのある行の途中に挿入
/icons/pass.icon展開すると折返しが発生するほど長い外部リンク記法の内外で挿入
改行あり
/icons/pass.iconインデントなしの文中に挿入
インデントありの文中に挿入
インデントは維持されなかった
Shift+Enterの挙動と同じ
空白のみの行
空白が維持された
Shift+Enterの挙動と同じ
折返しのある行の途中に挿入
インデントは維持されなかった
Shift+Enterの挙動と同じ
引用文中に挿入
インデント及び引用を維持して改行された
2020-12-30 07:44:18 コードブロックの空白行に挿入
コードブロックとインデントを維持して改行された
ここまでの調査を踏まえた暫定の結論
\nを挿入されたとき、インデントは維持されない
引用文中に挿入されると、インデントと引用が維持される
コードブロックの空白行中に挿入されると、インデントとコードブロックが維持される
対処
目標
どんな場所であっても、インデントや引用を無視して文字列を挿入する
方法
カーソルが引用文中にあるかどうかで処理を切り替える
DOMの親要素にspan.quoteがいたら、改行をEnterで代用する
いなかったら普通に挿入する
cons: 挿入のたびにcursorの位置計算が必要になる?
すべての改行をShift + Enterで代用する
多分無理
前にキーボード代行をやったとき、Shift + Enterだけ動かなかった覚えがある
もしできたとしても、引用文中はEnterを使わないと引用を無視できないので、どのみち引用文中にカーソルがあるかどうかの判定が必要になる
.*\nまで入力したあと、カーソルがどの位置にいるかを都度確認する
先頭にいなかったら、インデントetc.が挿入されたとみなしてHomeHomeShift+EndDelを実行する