diff --git a/app/src/search/util.ts b/app/src/search/util.ts
index 817401c10..709c0400f 100644
--- a/app/src/search/util.ts
+++ b/app/src/search/util.ts
@@ -306,7 +306,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
} else if (type === "next") {
if (!target.getAttribute("disabled")) {
config.page++;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
}
event.stopPropagation();
event.preventDefault();
@@ -314,7 +314,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
} else if (type === "previous") {
if (!target.getAttribute("disabled")) {
config.page--;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
}
event.stopPropagation();
event.preventDefault();
@@ -349,7 +349,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
config.page = 1;
searchPathInputElement.innerHTML = config.hPath;
searchPathInputElement.setAttribute("title", "");
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
const includeElement = element.querySelector("#searchInclude");
includeElement.classList.remove("b3-button--cancel");
includeElement.setAttribute("disabled", "disabled");
@@ -405,7 +405,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
} else {
includeElement.setAttribute("disabled", "disabled");
}
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
});
}, [], undefined, window.siyuan.languages.specifyPath);
event.stopPropagation();
@@ -427,7 +427,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
});
}
config.page = 1;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
event.stopPropagation();
event.preventDefault();
break;
@@ -449,14 +449,14 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
event.preventDefault();
break;
} else if (target.id === "searchRefresh") {
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
event.stopPropagation();
event.preventDefault();
break;
} else if (target.id === "searchMore") {
moreMenu(config, criteriaData, element, () => {
config.page = 1;
- inputEvent(element, config, undefined, edit, app);
+ inputEvent(element, config, undefined, edit);
}, () => {
updateConfig(element, {
removed: true,
@@ -544,7 +544,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
} else if (target.id === "searchFilter") {
filterMenu(config, () => {
config.page = 1;
- inputEvent(element, config, undefined, edit, app);
+ inputEvent(element, config, undefined, edit);
});
event.stopPropagation();
event.preventDefault();
@@ -553,7 +553,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
queryMenu(config, () => {
element.querySelector("#searchSyntaxCheck").setAttribute("aria-label", getQueryTip(config.method));
config.page = 1;
- inputEvent(element, config, undefined, edit, app);
+ inputEvent(element, config, undefined, edit);
});
const rect = target.getBoundingClientRect();
window.siyuan.menus.menu.popup({x: rect.right, y: rect.bottom}, true);
@@ -609,12 +609,12 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
event.preventDefault();
return;
} else if (target.id === "replaceAllBtn") {
- replace(element, config, edit, app, true);
+ replace(element, config, edit, true);
event.stopPropagation();
event.preventDefault();
break;
} else if (target.id === "replaceBtn") {
- replace(element, config, edit, app, false);
+ replace(element, config, edit, false);
event.stopPropagation();
event.preventDefault();
break;
@@ -628,7 +628,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
if (target.parentElement.id === "searchHistoryList") {
searchInputElement.value = target.textContent;
config.page = 1;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
} else if (target.parentElement.id === "replaceHistoryList") {
replaceInputElement.value = target.textContent;
replaceHistoryElement.classList.add("fn__none");
@@ -659,7 +659,6 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
id: target.getAttribute("data-node-id"),
config,
value: searchInputElement.value,
- app,
});
searchInputElement.focus();
} else if (target.classList.contains("b3-list-item--focus")) {
@@ -703,11 +702,11 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
searchInputElement.addEventListener("compositionend", (event: InputEvent) => {
config.page = 1;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app, event);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit, event);
});
searchInputElement.addEventListener("input", (event: InputEvent) => {
config.page = 1;
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app, event);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit, event);
});
searchInputElement.addEventListener("blur", () => {
if (config.removed) {
@@ -795,7 +794,6 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
config,
value: searchInputElement.value,
edit,
- app
});
event.preventDefault();
} else if (event.key === "ArrowUp") {
@@ -823,7 +821,6 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
config,
value: searchInputElement.value,
edit,
- app
});
event.preventDefault();
}
@@ -832,10 +829,10 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
if (event.isComposing || event.key !== "Enter") {
return;
}
- replace(element, config, edit, app, false);
+ replace(element, config, edit, false);
event.preventDefault();
});
- inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
+ inputTimeout = inputEvent(element, config, inputTimeout, edit);
return edit;
};
@@ -914,7 +911,7 @@ const updateConfig = (element: Element, item: ISearchOption, config: ISearchOpti
Object.assign(config, item);
window.siyuan.storage[Constants.LOCAL_SEARCHDATA] = Object.assign({}, config);
setStorageVal(Constants.LOCAL_SEARCHDATA, window.siyuan.storage[Constants.LOCAL_SEARCHDATA]);
- inputEvent(element, config, undefined, edit, app);
+ inputEvent(element, config, undefined, edit);
window.siyuan.menus.menu.remove();
};
@@ -947,7 +944,6 @@ const getArticle = (options: {
config: ISearchOption,
edit: Protyle
value: string,
- app: App
}) => {
fetchPost("/api/block/checkBlockFold", {id: options.id}, (foldResponse) => {
options.edit.protyle.scroll.lastScrollTop = 0;
@@ -976,7 +972,7 @@ const getArticle = (options: {
});
};
-const replace = (element: Element, config: ISearchOption, edit: Protyle, app: App, isAll: boolean) => {
+const replace = (element: Element, config: ISearchOption, edit: Protyle, isAll: boolean) => {
if (config.method === 1 || config.method === 2) {
showMessage(window.siyuan.languages._kernel[132]);
return;
@@ -1057,12 +1053,11 @@ const replace = (element: Element, config: ISearchOption, edit: Protyle, app: Ap
id: currentList.getAttribute("data-node-id"),
config,
value: searchInputElement.value,
- app,
});
});
};
-const inputEvent = (element: Element, config: ISearchOption, inputTimeout: number, edit: Protyle, app: App, event?: InputEvent) => {
+const inputEvent = (element: Element, config: ISearchOption, inputTimeout: number, edit: Protyle, event?: InputEvent) => {
if (event && event.isComposing) {
return;
}
@@ -1075,9 +1070,16 @@ const inputEvent = (element: Element, config: ISearchOption, inputTimeout: numbe
element.querySelector("#searchList").scrollTo(0, 0);
const previousElement = element.querySelector('[data-type="previous"]');
const nextElement = element.querySelector('[data-type="next"]');
+ edit.protyle?.app.plugins.forEach(item => {
+ item.eventBus.emit("input-search", {
+ protyle: edit,
+ config,
+ searchElement: searchInputElement,
+ });
+ });
if (inputValue === "" && (!config.idPath || config.idPath.length === 0)) {
fetchPost("/api/block/getRecentUpdatedBlocks", {}, (response) => {
- onSearch(response.data, edit, app, element, config);
+ onSearch(response.data, edit, element, config);
loadingElement.classList.add("fn__none");
element.querySelector("#searchResult").innerHTML = "";
previousElement.setAttribute("disabled", "true");
@@ -1106,7 +1108,7 @@ const inputEvent = (element: Element, config: ISearchOption, inputTimeout: numbe
} else {
nextElement.setAttribute("disabled", "disabled");
}
- onSearch(response.data.blocks, edit, app, element, config);
+ onSearch(response.data.blocks, edit, element, config);
element.querySelector("#searchResult").innerHTML = `${config.page}/${response.data.pageCount || 1}
${window.siyuan.languages.findInDoc.replace("${x}", response.data.matchedRootCount).replace("${y}", response.data.matchedBlockCount)}`;
loadingElement.classList.add("fn__none");
@@ -1116,7 +1118,7 @@ const inputEvent = (element: Element, config: ISearchOption, inputTimeout: numbe
return inputTimeout;
};
-const onSearch = (data: IBlock[], edit: Protyle, app: App, element: Element, config: ISearchOption) => {
+const onSearch = (data: IBlock[], edit: Protyle, element: Element, config: ISearchOption) => {
let resultHTML = "";
data.forEach((item, index) => {
const title = getNotebookName(item.box) + getDisplayName(item.hPath, false);
@@ -1156,7 +1158,6 @@ ${unicode2Emoji(item.ial.icon, "b3-list-item__graphic", true)}
id: data[0].children[0].id,
config,
value: searchInputElement.value,
- app,
});
} else {
getArticle({
@@ -1164,7 +1165,6 @@ ${unicode2Emoji(item.ial.icon, "b3-list-item__graphic", true)}
id: data[0].id,
config,
value: searchInputElement.value,
- app
});
}
} else {
diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts
index 031f58e1d..8c7c95cf5 100644
--- a/app/src/types/index.d.ts
+++ b/app/src/types/index.d.ts
@@ -42,6 +42,7 @@ type TEventBus = "ws-main" |
"open-noneditableblock" |
"open-menu-blockref" | "open-menu-fileannotationref" | "open-menu-tag" | "open-menu-link" | "open-menu-image" |
"open-menu-av" | "open-menu-content" | "open-menu-breadcrumbmore" |
+ "input-search" |
"loaded-protyle"
type TAVCol = "text" | "date" | "number" | "relation" | "rollup" | "select" | "block" | "mSelect"
type TAVFilterOperator =