generated at
scrapbox-cursor-position-2
Next version
hr
scrapboxのcursorがいる行と文字のDOMを返す函数
cursorの縦棒の左側の文字を取得する
ScrapVimなどで使う
返り値
scrapbox-positionを使うようにした
また返り値と引数を変更した


2020-12-26
03:57:56 文字境界を使って判定するようにした
これでもうずれないはず
2020-12-18
04:35:46 APIを変更した
03:56:54
APIを変更する
scrapbox-line-info-2にあわせる
04:05:11 やめた
任意の div.span.c-* を受け取ってそれの情報を返すAPIを作ったほうが汎用性が高そう
scrapbox-char-infoを使うようにした
03:31:56
列数を取得する関数 getIndex を追加した

既知の問題
行頭にcursorがあるとエラーが出る
行頭だとscrapbox-positionがDOMを返してくれないのが原因
カーソルの左側ではなく、左右両方のDOMを使ってAPIを提供するように組み替えたほうが良さそう
{left: leftDOM ? charAccessor(leftDOM) : undefined, right: rightDOM ? charAccessor(leftDOM) : undefined} を返す
そこまでしないとしても、行頭にカーソルがあることを示す何らかの指標がほしい
カーソルの縦棒の位置に番号を振るのもよさそう
この方針で作ることにした

dependencies
script.js
import {char as charAccessor} from '/api/code/takker/scrapbox-char-info/script.js'; import {getCharBorder} from '/api/code/takker/scrapbox-position/script.js'; import {scrapboxDOM} from '/api/code/takker/scrapbox-dom-accessor/script.js'; export const cursor = () => { const {left,top} = scrapboxDOM.cursor.getBoundingClientRect();
↑ここ、#text-input.cursorのどっちを使ったら良いんだろう?
#text-inputだと、focusの有無によらずに位置を取得できるという利点がある
2020-12-25 .cursorにした
script.js
const {left: leftDOM} = getCharBorder({x: left, y: top}); return leftDOM ? charAccessor(leftDOM) : undefined; }

テストコードtakker
keydownだと、別の行から↓で次の行の末尾に移動したときに判定がずれる?
おそらく記法の展開前に座標を取得することで発生するズレだと思われる

test.js
import {cursor} from '/api/code/takker/scrapbox-cursor-position-2/script.js'; document.addEventListener('keydown', () => { const c = cursor(); console.log('[test:scrapbox-position] %o', c ? {index: c.index, text: c.text, char: c.charDOM} : 'HEAD'); });

#2021-01-01 12:17:39
#2020-12-29 06:13:51
#2020-12-26 03:44:34
#2020-12-25 12:09:08
#2020-12-24 02:21:21
#2020-12-18 03:31:11