外部projectのリンクの絞り込みテスト
試すこと
外部projectを非同期に読み込む
読み込んだprojectのpage titleで絞り込みをかける
試さないこと
入力候補の選択
入力候補の決定
その他
重複を取り除く処理を変えた
関数化をして整理した
テスト
課題
まだ検索精度が悪い
引っかかるようにした
空白文字を全て消去
何故か別projectに移ってもコードが実行されてしまう
class名を変えるとなんとかなるかも
多分違う。↑を入れていないprojectでもwindowが残ってしまった。
一応変えた
だめだった
code:script.js
import {suggestWindow} from '/api/code/takker/suggestWindow/script.js';
import {fizzSearch} from '/api/code/takker/fizzSearch/script.js';
import {importExternalPageName} from '/api/code/takker/importExternalPageName/script.js';
import {getLinkIncludingCursor} from '/api/code/takker/importExternalPageName/script.js';
main loop
code:script.js
export async function startSuggestingExternalProjectLinks(projectNames, maxSuggestionNum = 30) {
const suggestion=new suggestWindow();
let titles = await importExternalPageName(projectNames);
const eventHandler = () => {
const cursor = document.getElementById('text-input');
// code blockの頭とcode blockの中身では動作しないようにする
if (suggestion.editor.getElementsByClassName('cursor-line')0.textContent.trim() == 'code:' || suggestion.editor.getElementsByClassName('cursor-line code-block').length == 1) {
suggestion.close();
return;
}
const targetLinkWithBracket = getLinkIncludingCursor(suggestion.editor, cursor);
if(!targetLinkWithBracket) {
suggestion.close();
return;
}
const tergetString= targetLinkWithBracket.slice(1,targetLinkWithBracket.length - 1);
const suggestTitles = fizzSearch(tergetString, titles)
.slice(0,maxSuggestionNum);
if(suggestTitles.length == 0) {
suggestion.close();
return;
}
// 補完候補と既に入力されたリンクが同じであれば何もしない
if(suggestTitles.length == 1 && suggestTitles0 == tergetString) { suggestion.close();
return;
}
//入力補完windowに表示する項目を作成する
const guiList = suggestTitles
.map(title => {
//const a = document.createElement('a');
//a.setAttribute('tabindex', '0');
const text = document.createElement('div');
text.textContent = title;
text.style.userSelect = 'text';
//a.appendChild(text);
//a.onclick = () => {
// cursor.focus();
//};
//li.appendChild(a);
return text;
});
suggestion.open();
suggestion.updateItems(guiList);
suggestion.reDraw(cursor);
};
suggestion.editor.addEventListener('keyup', eventHandler);
suggestion.editor.addEventListener('mouseup', eventHandler);
}