scrapbox-line-info
scrapboxの行に関わる関数を集めたもの
変数
number: 行番号
id: 行のid
lines: div.lines
行番号→行id
code:script.js
export function getLineId(number, lines) {
return lines.childrennumber?.id; }
行id→行番号
code:script.js
export function getLineNumber(id, lines) {
if (isHeadLine(id, lines)) return 0;
if (isTailLine(id, lines)) return lines.children.length - 1;
const line = document.getElementById(id);
if (!line) return undefined;
}
export function isHeadLine(id, lines) {
return scrapVim.lines.firstElementChild.id === id;
}
export function isTailLine(id, lines) {
return scrapVim.lines.lastElementChild.id === id;
}
leftから文字を取得する
lineから文字を探す
2020-11-25 10:02:10 leftだけだと行が折り返しているときに対応できない
topとleftで判別する必要がある
code:script.js
export function getCharFromPosision(targetLeft, line) {
// 行内の文字を<span>のまま取得する
const chars = [...line?.querySelectorAll('spanclass^="c-"')]; //console.log('chars in the line: %o',chars)
// leftに位置する<span>を検索する
const targetPosition = Math.round(targetLeft);
//console.log('target position is %o', targetPosition);
const targetChar = chars?.find(char => {
const {left, right} = char.getBoundingClientRect();
return Math.round(left) <= targetPosition && targetPosition < Math.round(right);
});
return {
target: targetChar,
index: targetChar? parseInt(targetChar.className.replace(/c-(\d+)/,'$1')) :
chars?.length, // 改行文字として、最後の文字より一つ後ろの番号を返す
};
}