scrapbox-cursor-position-2
Next version
scrapboxのcursorがいる行と文字のDOMを返す函数
cursorの縦棒の左側の文字を取得する
返り値
また返り値と引数を変更した
2020-12-26
03:57:56 文字境界を使って判定するようにした
これでもうずれないはず
2020-12-18
04:35:46 APIを変更した
03:56:54
APIを変更する
04:05:11 やめた
任意の div.span.c-*
を受け取ってそれの情報を返すAPIを作ったほうが汎用性が高そう
03:31:56
列数を取得する関数 getIndex
を追加した
既知の問題
行頭にcursorがあるとエラーが出る
カーソルの左側ではなく、左右両方のDOMを使ってAPIを提供するように組み替えたほうが良さそう
{left: leftDOM ? charAccessor(leftDOM) : undefined, right: rightDOM ? charAccessor(leftDOM) : undefined}
を返す
そこまでしないとしても、行頭にカーソルがあることを示す何らかの指標がほしい
カーソルの縦棒の位置に番号を振るのもよさそう
この方針で作ることにした
dependencies
script.jsimport {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();
script.js const {left: leftDOM} = getCharBorder({x: left, y: top});
return leftDOM ? charAccessor(leftDOM) : undefined;
}
テストコード
keydownだと、別の行から↓で次の行の末尾に移動したときに判定がずれる?
おそらく記法の展開前に座標を取得することで発生するズレだと思われる
test.jsimport {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');
});