scrapbox-cursor-position
scrapboxのcursorの縦棒の位置を取得する関数
返り値
code:ts
type Return = {
left?: Char; // cursorの左側
right?: Char; // cursorの右側
line: Line; // cursorのいる行
};
cursorの縦棒の位置が特定できなかったらline以外undefinedとなる
dependencies
code:script.js
import {char as c} from '../scrapbox-char-accessor/script.js';
import {line as l} from '../scrapbox-line-accessor/script.js';
import {getBorder} from '../scrapbox-position/script.js';
import {scrapboxDOM} from '../scrapbox-dom-accessor/script.js';
export const cursor = () => {
const origin = scrapboxDOM.editor.getBoundingClientRect();
const x = origin.left + parseInt(scrapboxDOM.cursor.style.left);
const y = origin.top + parseInt(scrapboxDOM.cursor.style.top)
+ parseInt(scrapboxDOM.cursor.style.height) / 2; // 誤検出を防ぐために、縦棒の真ん中辺りを指定しておく
return getBorder({x, y});
};
test code
code:js
import('/api/code/programming-notes/scrapbox-cursor-position/test1.js');
code:test1.js
import {cursor} from './script.js';
document.addEventListener('keydown', () => {
const c = cursor();
if (!c.left && !c.right) throw Error([test:scrapbox-cursor-position] Both char DOMs are undefined: ${c.message});
});