import {Dialog} from "../dialog"; import {App} from "../index"; import {upDownHint} from "../util/upDownHint"; import {openSetting} from "../config"; import {updateHotkeyTip} from "../protyle/util/compatibility"; export const commandPanel = (app: App) => { const dialog = new Dialog({ width: "80vw", height: "70vh", content: `
` }) const listElement = dialog.element.querySelector("#commands"); app.plugins.forEach(plugin => { plugin.commands.forEach(command => { const liElement = document.createElement("li"); liElement.classList.add("b3-list-item") liElement.innerHTML = `${command.langText || plugin.i18n[command.langKey]} ${updateHotkeyTip(command.customHotkey)}`; liElement.addEventListener("click", () => { command.callback(); dialog.destroy(); }) listElement.insertAdjacentElement("beforeend", liElement); }) }) if (listElement.childElementCount === 0) { const liElement = document.createElement("li"); liElement.classList.add("b3-list-item"); liElement.innerHTML = `${window.siyuan.languages.commandEmpty}`; liElement.addEventListener("click", () => { dialog.destroy(); openSetting(app).element.querySelector('.b3-tab-bar [data-name="bazaar"]').dispatchEvent(new CustomEvent("click")); }) listElement.insertAdjacentElement("beforeend", liElement); } else { listElement.firstElementChild.classList.add("b3-list-item--focus"); } const inputElement = dialog.element.querySelector(".b3-text-field") as HTMLInputElement; inputElement.focus(); inputElement.addEventListener("keydown", (event: KeyboardEvent) => { event.stopPropagation(); if (event.isComposing) { return; } upDownHint(listElement, event); if (event.key === "Enter") { const currentElement = listElement.querySelector(".b3-list-item--focus"); if (currentElement) { currentElement.dispatchEvent(new CustomEvent("click")); } dialog.destroy(); } else if (event.key === "Escape") { dialog.destroy(); } }); inputElement.addEventListener("compositionend", (event: InputEvent) => { filterList(inputElement, listElement); }) inputElement.addEventListener("input", (event: InputEvent) => { if (event.isComposing) { return; } event.stopPropagation(); filterList(inputElement, listElement); }); } const filterList = (inputElement: HTMLInputElement, listElement: Element) => { const inputValue = inputElement.value.toLowerCase(); Array.from(listElement.children).forEach((element: HTMLElement) => { const elementValue = element.querySelector(".b3-list-item__text").textContent.toLowerCase(); if (inputValue.indexOf(elementValue) > -1 || elementValue.indexOf(inputValue) > -1) { element.classList.remove("fn__none"); } else { element.classList.add("fn__none") } }) }