mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-07 01:08:49 +01:00
This commit is contained in:
parent
dbe4eb7d4d
commit
f80552f95c
1 changed files with 112 additions and 60 deletions
|
|
@ -18,6 +18,53 @@ import {newFileByName} from "../util/newFile";
|
|||
import {matchHotKey} from "../protyle/util/hotKey";
|
||||
import {filterMenu, getKeyByLiElement, initCriteriaMenu, moreMenu, queryMenu, saveCriterion} from "./menu";
|
||||
import {App} from "../index";
|
||||
import {upDownHint} from "../util/upDownHint";
|
||||
|
||||
const toggleReplaceHistory = (replaceHistoryElement: Element, historyElement: Element, replaceInputElement: HTMLInputElement) => {
|
||||
if (replaceHistoryElement.classList.contains("fn__none")) {
|
||||
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
|
||||
if (!list.replaceKeys || list.replaceKeys.length === 0) {
|
||||
return;
|
||||
}
|
||||
let html = "";
|
||||
list.replaceKeys.forEach((s: string) => {
|
||||
if (s !== replaceInputElement.value && s) {
|
||||
html += `<div class="b3-list-item${html ? "" : " b3-list-item--focus"}">${escapeHtml(s)}</div>`;
|
||||
}
|
||||
});
|
||||
if (html === "") {
|
||||
return;
|
||||
}
|
||||
replaceHistoryElement.classList.remove("fn__none");
|
||||
replaceHistoryElement.innerHTML = html;
|
||||
} else {
|
||||
replaceHistoryElement.classList.add("fn__none");
|
||||
}
|
||||
historyElement.classList.add("fn__none");
|
||||
}
|
||||
|
||||
const toggleSearchHistory = (historyElement: Element, replaceHistoryElement: Element, searchInputElement: HTMLInputElement) => {
|
||||
if (historyElement.classList.contains("fn__none")) {
|
||||
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
|
||||
if (!list.keys || list.keys.length === 0) {
|
||||
return;
|
||||
}
|
||||
let html = "";
|
||||
list.keys.forEach((s: string) => {
|
||||
if (s !== searchInputElement.value && s) {
|
||||
html += `<div class="b3-list-item${html ? "" : " b3-list-item--focus"}">${escapeHtml(s)}</div>`;
|
||||
}
|
||||
});
|
||||
if (html === "") {
|
||||
return;
|
||||
}
|
||||
historyElement.classList.remove("fn__none");
|
||||
historyElement.innerHTML = html;
|
||||
} else {
|
||||
historyElement.classList.add("fn__none");
|
||||
}
|
||||
replaceHistoryElement.classList.add("fn__none");
|
||||
}
|
||||
|
||||
const saveKeyList = (type: "keys" | "replaceKeys", value: string) => {
|
||||
let list: string[] = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS][type];
|
||||
|
|
@ -561,50 +608,12 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
|
|||
event.preventDefault();
|
||||
break;
|
||||
} else if (target.id === "searchHistoryBtn") {
|
||||
if (historyElement.classList.contains("fn__none")) {
|
||||
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
|
||||
if (!list.keys || list.keys.length === 0) {
|
||||
return;
|
||||
}
|
||||
let html = "";
|
||||
list.keys.forEach((s: string) => {
|
||||
if (s !== searchInputElement.value) {
|
||||
html += `<div class="b3-list-item">${escapeHtml(s)}</div>`;
|
||||
}
|
||||
});
|
||||
if (html === "") {
|
||||
return;
|
||||
}
|
||||
historyElement.classList.remove("fn__none");
|
||||
historyElement.innerHTML = html;
|
||||
} else {
|
||||
historyElement.classList.add("fn__none");
|
||||
}
|
||||
replaceHistoryElement.classList.add("fn__none");
|
||||
toggleSearchHistory(historyElement, replaceHistoryElement, searchInputElement)
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
} else if (target.id === "replaceHistoryBtn") {
|
||||
if (replaceHistoryElement.classList.contains("fn__none")) {
|
||||
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
|
||||
if (!list.replaceKeys || list.replaceKeys.length === 0) {
|
||||
return;
|
||||
}
|
||||
let html = "";
|
||||
list.replaceKeys.forEach((s: string) => {
|
||||
if (s !== replaceInputElement.value) {
|
||||
html += `<div class="b3-list-item">${escapeHtml(s)}</div>`;
|
||||
}
|
||||
});
|
||||
if (html === "") {
|
||||
return;
|
||||
}
|
||||
replaceHistoryElement.classList.remove("fn__none");
|
||||
replaceHistoryElement.innerHTML = html;
|
||||
} else {
|
||||
replaceHistoryElement.classList.add("fn__none");
|
||||
}
|
||||
historyElement.classList.add("fn__none");
|
||||
toggleReplaceHistory(replaceHistoryElement, historyElement, replaceInputElement)
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
|
|
@ -746,27 +755,48 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
|
|||
return;
|
||||
}
|
||||
const focusIsNew = currentList.getAttribute("data-type") === "search-new";
|
||||
const isHistory = !historyElement.classList.contains("fn__none")
|
||||
if (event.key === "Enter") {
|
||||
if (focusIsNew) {
|
||||
newFileByName(app, searchInputElement.value);
|
||||
} else {
|
||||
const id = currentList.getAttribute("data-node-id");
|
||||
fetchPost("/api/block/checkBlockFold", {id}, (foldResponse) => {
|
||||
openFileById({
|
||||
app,
|
||||
id,
|
||||
action: foldResponse.data ? [Constants.CB_GET_FOCUS, Constants.CB_GET_ALL] : [Constants.CB_GET_FOCUS, Constants.CB_GET_CONTEXT],
|
||||
zoomIn: foldResponse.data
|
||||
if (!isHistory) {
|
||||
if (focusIsNew) {
|
||||
newFileByName(app, searchInputElement.value);
|
||||
} else {
|
||||
const id = currentList.getAttribute("data-node-id");
|
||||
fetchPost("/api/block/checkBlockFold", {id}, (foldResponse) => {
|
||||
openFileById({
|
||||
app,
|
||||
id,
|
||||
action: foldResponse.data ? [Constants.CB_GET_FOCUS, Constants.CB_GET_ALL] : [Constants.CB_GET_FOCUS, Constants.CB_GET_CONTEXT],
|
||||
zoomIn: foldResponse.data
|
||||
});
|
||||
if (closeCB) {
|
||||
closeCB();
|
||||
}
|
||||
});
|
||||
if (closeCB) {
|
||||
closeCB();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
searchInputElement.value = historyElement.querySelector(".b3-list-item--focus").textContent.trim();
|
||||
config.page = 1;
|
||||
inputTimeout = inputEvent(element, config, inputTimeout, edit);
|
||||
toggleSearchHistory(historyElement, replaceHistoryElement, searchInputElement)
|
||||
}
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
if (focusIsNew) {
|
||||
if (event.key === "ArrowDown" && event.altKey) {
|
||||
toggleSearchHistory(historyElement, replaceHistoryElement, searchInputElement);
|
||||
return;
|
||||
}
|
||||
if (isHistory) {
|
||||
if (event.key === "Escape") {
|
||||
toggleSearchHistory(historyElement, replaceHistoryElement, searchInputElement)
|
||||
} else {
|
||||
upDownHint(historyElement, event);
|
||||
}
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
if (focusIsNew && !isHistory) {
|
||||
return;
|
||||
}
|
||||
if (event.key === "ArrowDown") {
|
||||
|
|
@ -826,11 +856,33 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
|
|||
}
|
||||
});
|
||||
replaceInputElement.addEventListener("keydown", (event: KeyboardEvent) => {
|
||||
if (event.isComposing || event.key !== "Enter") {
|
||||
if (event.isComposing) {
|
||||
return;
|
||||
}
|
||||
const isHistory = !replaceHistoryElement.classList.contains("fn__none")
|
||||
if (event.key === "Enter") {
|
||||
if (isHistory) {
|
||||
replaceInputElement.value = replaceHistoryElement.querySelector(".b3-list-item--focus").textContent.trim();
|
||||
toggleReplaceHistory(replaceHistoryElement, historyElement, replaceInputElement);
|
||||
} else {
|
||||
replace(element, config, edit, false);
|
||||
}
|
||||
event.preventDefault();
|
||||
}
|
||||
if (event.key === "ArrowDown" && event.altKey) {
|
||||
toggleReplaceHistory(replaceHistoryElement, historyElement, replaceInputElement);
|
||||
return;
|
||||
}
|
||||
if (isHistory) {
|
||||
if (event.key === "Escape") {
|
||||
toggleReplaceHistory(replaceHistoryElement, historyElement, replaceInputElement)
|
||||
} else {
|
||||
upDownHint(replaceHistoryElement, event);
|
||||
}
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
replace(element, config, edit, false);
|
||||
event.preventDefault();
|
||||
});
|
||||
inputTimeout = inputEvent(element, config, inputTimeout, edit);
|
||||
return edit;
|
||||
|
|
@ -987,7 +1039,7 @@ const replace = (element: Element, config: ISearchOption, edit: Protyle, isAll:
|
|||
}
|
||||
saveKeyList("replaceKeys", replaceInputElement.value);
|
||||
let currentList: HTMLElement = searchPanelElement.querySelector(".b3-list-item--focus");
|
||||
if (!currentList) {
|
||||
if (!currentList || currentList.dataset.type === "search-new") {
|
||||
return;
|
||||
}
|
||||
loadElement.classList.remove("fn__none");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue