(WIP)awesome-suggestion
補完ソースと補完開始条件、キーバインドをそれぞれ独自に設定できる
仕様
設定データ
code:ts
type Config = <T>{
fetchCallback: () => Promise<T[]>;
converter: (item: T) => string;
trigger: {
DOM: string;
when: RegExp | (DOM: HTMLElement) => boolean;
target: (DOM: HTMLElement) => string;
};
keymap: {
key: string;
command: '';
}
}[];
Web WorkerをConfigだけで共通化するのは難しいかも
Web Workerには関数を渡せない
できることは、検索語句と補完ソース、検索の方法を指示するoption変数を渡すくらいが限度
Web Workerのコードを直接編集するほかなさそうだ
処理の共通化
補完ソースを用意する
補完の開始と終了の条件を決める
違い
<Up>or<Down>による開始/終了条件を削る
e.g.
開始
[/]の中
[* ]の中
[$ ]の中かつ\を押したとき
/icons/javascript.iconのcode block中かつ.を押したとき
etc.
code:js
const condition = {
DOM: '.page-link',
when: /^\[?\//,
// 関数も可
//when: (DOM) => /^\[?\//.test(DOM.textContent),
target: (DOM) => DOM.textContent.replace(/^\?\/(\w*)\?$/, '$1'), };
終了
候補を確定したとき
カーソルの位置や書き込まれている文字列が条件に合わなくなったとき
カーソル移動だけで、何も文字入力していないとき
終了の方はある程度共通化できそう?takker.icon
検索語句の変化を検知して渡す
処理を共通化するの難しそう……takker.icon
2021-02-15 01:52:34 できた
JavaScript.icon