Vanessa 2023-03-22 18:39:13 +08:00
parent df502ec42a
commit f1330f0df9

View file

@ -4,7 +4,7 @@ import {Tab} from "../layout/Tab";
import {Search} from "./index";
import {Wnd} from "../layout/Wnd";
import {Constants} from "../constants";
import {escapeHtml} from "../util/escape";
import {escapeAttr, escapeGreat, escapeHtml} from "../util/escape";
import {fetchPost, fetchSyncPost} from "../util/fetch";
import {openFileById} from "../editor/util";
import {showMessage} from "../dialog/message";
@ -146,8 +146,8 @@ export const genSearch = (config: ISearchOption, element: Element, closeCB?: ()
<span id="searchResult" class="search__result"></span>
<span class="fn__space"></span>
<span class="fn__flex-1"></span>
<span id="searchPathInput" class="search__path ft__on-surface fn__flex-center ft__smaller fn__ellipsis" title="${config.hPath}">
${config.hPath}
<span id="searchPathInput" class="search__path ft__on-surface fn__flex-center ft__smaller fn__ellipsis" title="${escapeAttr(config.hPath)}">
${escapeHtml(config.hPath)}
<svg class="search__rmpath${config.hPath ? "" : " fn__none"}"><use xlink:href="#iconClose"></use></svg>
</span>
<span class="fn__space"></span>
@ -263,11 +263,13 @@ export const genSearch = (config: ISearchOption, element: Element, closeCB?: ()
element.addEventListener("click", (event: MouseEvent) => {
let target = event.target as HTMLElement;
const searchPathInputElement = element.querySelector("#searchPathInput");
while (target && !target.isSameNode(element)) {
if (target.classList.contains("search__rmpath")) {
config.idPath = [];
config.hPath = "";
element.querySelector("#searchPathInput").innerHTML = config.hPath;
searchPathInputElement.innerHTML = config.hPath;
searchPathInputElement.setAttribute("title", "");
inputTimeout = inputEvent(element, config, inputTimeout, edit);
const includeElement = element.querySelector("#searchInclude");
includeElement.classList.remove("b3-button--cancel");
@ -304,7 +306,7 @@ export const genSearch = (config: ISearchOption, element: Element, closeCB?: ()
toPath.forEach((item, index) => {
if (item === "/") {
config.idPath.push(toNotebook[index]);
hPathList.push(escapeHtml(getNotebookName(toNotebook[index])));
hPathList.push(getNotebookName(toNotebook[index]));
} else {
enableIncludeChild = true;
config.idPath.push(pathPosix().join(toNotebook[index], item.replace(".sy", "")));
@ -313,8 +315,9 @@ export const genSearch = (config: ISearchOption, element: Element, closeCB?: ()
if (response.data) {
hPathList.push(...response.data);
}
config.hPath = escapeHtml(hPathList.join(" "));
element.querySelector("#searchPathInput").innerHTML = `${config.hPath}<svg class="search__rmpath"><use xlink:href="#iconClose"></use></svg>`;
config.hPath = hPathList.join(" ");
searchPathInputElement.innerHTML = `${escapeHtml(config.hPath)}<svg class="search__rmpath"><use xlink:href="#iconClose"></use></svg>`;
searchPathInputElement.setAttribute("title", config.hPath);
const includeElement = element.querySelector("#searchInclude");
includeElement.classList.remove("b3-button--cancel");
if (enableIncludeChild) {
@ -878,10 +881,13 @@ const updateConfig = (element: Element, item: ISearchOption, config: ISearchOpti
element.querySelector("#replaceHistoryBtn").parentElement.classList.add("fn__none");
}
}
const searchPathInputElement = element.querySelector("#searchPathInput")
if (item.hPath) {
element.querySelector("#searchPathInput").innerHTML = `${item.hPath}<svg class="search__rmpath"><use xlink:href="#iconClose"></use></svg>`;
searchPathInputElement.innerHTML = `${escapeHtml(item.hPath)}<svg class="search__rmpath"><use xlink:href="#iconClose"></use></svg>`;
searchPathInputElement.setAttribute("title", item.hPath);
} else {
element.querySelector("#searchPathInput").innerHTML = "";
searchPathInputElement.innerHTML = "";
searchPathInputElement.setAttribute("title", "");
}
if (config.group !== item.group) {
if (item.group === 0) {
@ -1285,7 +1291,7 @@ const inputEvent = (element: Element, config: ISearchOption, inputTimeout: numbe
const onSearch = (data: IBlock[], edit: Protyle, element: Element) => {
let resultHTML = "";
data.forEach((item, index) => {
const title = escapeHtml(getNotebookName(item.box)) + getDisplayName(item.hPath, false);
const title = getNotebookName(item.box) + getDisplayName(item.hPath, false);
if (item.children) {
resultHTML += `<div class="b3-list-item">
<span class="b3-list-item__toggle b3-list-item__toggle--hl">
@ -1307,7 +1313,7 @@ ${unicode2Emoji(childItem.ial.icon, false, "b3-list-item__graphic", true)}
<svg class="b3-list-item__graphic"><use xlink:href="#${getIconByType(item.type)}"></use></svg>
${unicode2Emoji(item.ial.icon, false, "b3-list-item__graphic", true)}
<span class="b3-list-item__text">${item.content}</span>
<span class="b3-list-item__meta b3-list-item__meta--ellipsis" title="${title}">${title}</span>
<span class="b3-list-item__meta b3-list-item__meta--ellipsis" title="${escapeAttr(title)}">${escapeGreat(title)}</span>
</div>`;
}
});