カーソル行の座標と文字列の座標を表示するテスト
code:script.js
import {suggestWindow} from '/api/code/takker/suggestWindow/script.js';
const suggestion=new suggestWindow();
suggestion.editor.addEventListener('keyup',() => {
const line = suggestion.editor.getElementsByClassName('cursor-line')0; const text = line.textContent;
/icons/done.icon正規表現テスト
ちゃんと別々にマッチする
斜体はマッチしない
code:script.js
if(matches.length == 0) {
suggestion.close();
return;
}
const cursor = document.getElementById('text-input');
let list = [ textContent: ${text.replace(/\s/g,'t')},
left(cusor): ${cursor.style.left},
...matches
.map(match => {
const cursorLine = suggestion.editor
.getElementsByClassName('cursor-line')0; const start = cursorLine
// '['の内側にカーソルが入ったときの座標
// i.e. '/'の左端の座標
.getElementsByClassName(c-${match.index})0; const startLeft = start.offsetLeft;
const startLeft2 = start.getBoundingClientRect().left - cursorLine.getBoundingClientRect().left;
const startChar = start.textContent;
const end = cursorLine
.getElementsByClassName(c-${match.index + match[0].length - 1})0; const endLeft = end.offsetLeft;
const endLeft2 = end.getBoundingClientRect().left - cursorLine.getBoundingClientRect().left;
const endChar = end.textContent;
//return ${match[0]}: c-${match.index+1} = ${startLeft}px c-${match.index + match[0].length - 1} = ${endLeft}px.;
// firefox調査用
return ${match[0]}: ${startChar} = ${startLeft2}px | ${endChar} = ${endLeft2}px;
})];
ちょっとずれる?
↑の2つ目の括弧のはじめの部分の座標が合わない
まあ、括弧の外で補完判定されるわけではないので構わないか?
/icons/firefox.iconだと判定がずれる
常にstart.left=4pxのまま
取得できる文字を確認してみる
/icons/done.icon問題なし
/icons/done.icon直った!
原因(推測)
/icons/firefox.iconのoffsetLeftだと<a>タグからの相対座標を取得してしまう 一つ上の親要素を基準にしている
ちゃんとcursor-lineを基準にすれば正しい座標が表示される
code:script.js
suggestion.open();
suggestion.updateItems(list.map(item => {
const div = document.createElement('div');
div.textContent = item;
return div;
}));
suggestion.reDraw(cursor);
});