This commit is contained in:
Vanessa 2023-06-15 19:24:54 +08:00
parent 471e1e5f02
commit bf942208f0
8 changed files with 110 additions and 63 deletions

View file

@ -145,7 +145,7 @@
"sortByRankDesc": "Relevance DESC",
"sortByRankAsc": "Relevance ASC",
"saveCriterion": "Save query criteria",
"useCriterion": "Use query criteria",
"useCriterion": "After clearing, the last query condition can be used",
"removeCriterion": "Remove query criteria",
"group": "Group",
"noGroupBy": "No grouping",

View file

@ -145,7 +145,7 @@
"sortByRankDesc": "Relevancia DESC",
"sortByRankAsc": "Relevancia ASC",
"saveCriterion": "Guardar criterios de consulta",
"useCriterion": "Usar criterios de consulta",
"useCriterion": "Después de borrar, se puede usar la última condición de consulta",
"removeCriterion": "Eliminar criterios de consulta",
"grupo": "Grupo",
"noGroupBy": "Sin agrupar",

View file

@ -145,7 +145,7 @@
"sortByRankDesc": "DESC de pertinence",
"sortByRankAsc": "ASC de pertinence",
"saveCriterion": "Enregistrer les critères de requête",
"useCriterion": "Utiliser les critères de requête",
"useCriterion": "Après effacement, la dernière condition de requête peut être utilisée",
"removeCriterion": "Supprimer les critères de requête",
"groupe": "Groupe",
"noGroupBy": "Aucun regroupement",

View file

@ -145,7 +145,7 @@
"sortByRankDesc": "按相關度降序",
"sortByRankAsc": "按相關度升序",
"saveCriterion": "保存查詢條件",
"useCriterion": "使用查詢條件",
"useCriterion": "清空後可使用上一次的查詢條件",
"removeCriterion": "清空查詢條件",
"group": "分組",
"noGroupBy": "不分組",

View file

@ -145,7 +145,7 @@
"sortByRankDesc": "按相关度降序",
"sortByRankAsc": "按相关度升序",
"saveCriterion": "保存查询条件",
"useCriterion": "使用查询条件",
"useCriterion": "清空后可使用上一次的查询条件",
"removeCriterion": "清空查询条件",
"group": "分组",
"noGroupBy": "不分组",

View file

@ -319,10 +319,8 @@ const initSearchEvent = (app: App, element: Element, config: ISearchOption) => {
});
if (target.parentElement.parentElement.childElementCount === 1) {
target.parentElement.parentElement.classList.add("fn__none");
target.parentElement.remove();
} else {
target.parentElement.remove();
}
target.parentElement.remove();
event.stopPropagation();
event.preventDefault();
break;
@ -546,7 +544,7 @@ export const popSearch = (app: App, config = window.siyuan.storage[Constants.LOC
<button data-type="replace" class="b3-button b3-button--outline fn__flex-center">${window.siyuan.languages.replace}</button>
<div class="fn__space"></div>
</div>
<div id="criteria" style="background-color: var(--b3-theme-background);" class="b3-chips"></div>
<div id="criteria" style="background-color: var(--b3-theme-background);"></div>
<div class="toolbar">
<span class="fn__space"></span>
<span data-type="result" class="fn__flex-1 fn__flex"></span>

View file

@ -180,6 +180,55 @@ export const queryMenu = (config: ISearchOption, cb: () => void) => {
}).element);
};
export const saveCriterion = (config: ISearchOption,
criteriaData: ISearchOption[],
element: Element,) => {
const saveDialog = new Dialog({
title: window.siyuan.languages.saveCriterion,
content: `<div class="b3-dialog__content">
<input class="b3-text-field fn__block" placeholder="${window.siyuan.languages.memo}">
</div>
<div class="b3-dialog__action">
<button class="b3-button b3-button--cancel">${window.siyuan.languages.cancel}</button><div class="fn__space"></div>
<button class="b3-button b3-button--text">${window.siyuan.languages.confirm}</button>
</div>`,
width: isMobile() ? "92vw" : "520px",
});
const btnsElement = saveDialog.element.querySelectorAll(".b3-button");
saveDialog.bindInput(saveDialog.element.querySelector("input"), () => {
btnsElement[1].dispatchEvent(new CustomEvent("click"));
});
btnsElement[0].addEventListener("click", () => {
saveDialog.destroy();
});
btnsElement[1].addEventListener("click", () => {
const value = saveDialog.element.querySelector("input").value;
if (!value) {
showMessage(window.siyuan.languages["_kernel"]["142"]);
return;
}
if (isMobile()) {
config.k = (document.querySelector("#toolbarSearch") as HTMLInputElement).value;
config.r = (element.querySelector("#toolbarReplace") as HTMLInputElement).value;
} else {
config.k = (element.querySelector("#searchInput") as HTMLInputElement).value;
config.r = (element.querySelector("#replaceInput") as HTMLInputElement).value;
}
config.removed = false;
const criterion = config;
criterion.name = value;
criteriaData.push(Object.assign({}, criterion));
window.siyuan.storage[Constants.LOCAL_SEARCHDATA] = Object.assign({}, config);
setStorageVal(Constants.LOCAL_SEARCHDATA, window.siyuan.storage[Constants.LOCAL_SEARCHDATA]);
fetchPost("/api/storage/setCriterion", {criterion}, () => {
saveDialog.destroy();
const criteriaElement = element.querySelector("#criteria");
criteriaElement.classList.remove("fn__none");
criteriaElement.firstElementChild.insertAdjacentHTML("beforeend", `<div data-type="set-criteria" class="b3-chip b3-chip--middle b3-chip--pointer b3-chip--${["secondary", "primary", "info", "success", "warning", "error", ""][(criteriaElement.firstElementChild.childElementCount) % 7]}">${criterion.name}<svg class="b3-chip__close" data-type="remove-criteria"><use xlink:href="#iconCloseRound"></use></svg></div>`);
});
});
}
export const moreMenu = async (config: ISearchOption,
criteriaData: ISearchOption[],
element: Element,
@ -306,50 +355,7 @@ export const moreMenu = async (config: ISearchOption,
label: window.siyuan.languages.saveCriterion,
iconHTML: Constants.ZWSP,
click() {
const saveDialog = new Dialog({
title: window.siyuan.languages.saveCriterion,
content: `<div class="b3-dialog__content">
<input class="b3-text-field fn__block" placeholder="${window.siyuan.languages.memo}">
</div>
<div class="b3-dialog__action">
<button class="b3-button b3-button--cancel">${window.siyuan.languages.cancel}</button><div class="fn__space"></div>
<button class="b3-button b3-button--text">${window.siyuan.languages.confirm}</button>
</div>`,
width: isMobile() ? "92vw" : "520px",
});
const btnsElement = saveDialog.element.querySelectorAll(".b3-button");
saveDialog.bindInput(saveDialog.element.querySelector("input"), () => {
btnsElement[1].dispatchEvent(new CustomEvent("click"));
});
btnsElement[0].addEventListener("click", () => {
saveDialog.destroy();
});
btnsElement[1].addEventListener("click", () => {
const value = saveDialog.element.querySelector("input").value;
if (!value) {
showMessage(window.siyuan.languages["_kernel"]["142"]);
return;
}
if (isMobile()) {
config.k = (document.querySelector("#toolbarSearch") as HTMLInputElement).value;
config.r = (element.querySelector("#toolbarReplace") as HTMLInputElement).value;
} else {
config.k = (element.querySelector("#searchInput") as HTMLInputElement).value;
config.r = (element.querySelector("#replaceInput") as HTMLInputElement).value;
}
config.removed = false;
const criterion = config;
criterion.name = value;
criteriaData.push(Object.assign({}, criterion));
window.siyuan.storage[Constants.LOCAL_SEARCHDATA] = Object.assign({}, config);
setStorageVal(Constants.LOCAL_SEARCHDATA, window.siyuan.storage[Constants.LOCAL_SEARCHDATA]);
fetchPost("/api/storage/setCriterion", {criterion}, () => {
saveDialog.destroy();
const criteriaElement = element.querySelector("#criteria");
criteriaElement.classList.remove("fn__none");
criteriaElement.insertAdjacentHTML("beforeend", `<div data-type="set-criteria" class="b3-chip b3-chip--middle b3-chip--pointer b3-chip--${["secondary", "primary", "info", "success", "warning", "error", ""][(criteriaElement.childElementCount) % 7]}">${criterion.name}<svg class="b3-chip__close" data-type="remove-criteria"><use xlink:href="#iconCloseRound"></use></svg></div>`);
});
});
saveCriterion(config, criteriaData, element);
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
@ -368,12 +374,25 @@ export const initCriteriaMenu = (element: HTMLElement, data: ISearchOption[]) =>
data.push(item);
html += `<div data-type="set-criteria" class="b3-chip b3-chip--middle b3-chip--pointer b3-chip--${["secondary", "primary", "info", "success", "warning", "error", ""][index % 7]}">${escapeHtml(item.name)}<svg class="b3-chip__close" data-type="remove-criteria"><use xlink:href="#iconCloseRound"></use></svg></div>`;
});
element.innerHTML = html;
/// #if MOBILE
element.innerHTML = `<div class="b3-chips">
${html}
</div>`;
if (html === "") {
element.classList.add("fn__none");
} else {
element.classList.remove("fn__none");
}
/// #else
element.innerHTML = `<div class="b3-chips">
${html}
</div>
<span class="fn__flex-1"></span>
<button data-type="saveCriterion" class="b3-button b3-button--small b3-button--outline fn__flex-center">${window.siyuan.languages.saveCriterion}</button>
<span class="fn__space"></span>
<button data-type="removeCriterion" aria-label="${window.siyuan.languages.useCriterion}" class="b3-tooltips b3-tooltips__nw b3-button b3-button--small b3-button--outline fn__flex-center">${window.siyuan.languages.removeCriterion}</button>
<span class="fn__space"></span>`;
/// #endif
});
};

View file

@ -16,7 +16,7 @@ import {hasClosestByClassName} from "../protyle/util/hasClosest";
import {setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility";
import {newFileByName} from "../util/newFile";
import {matchHotKey} from "../protyle/util/hotKey";
import {filterMenu, getKeyByLiElement, initCriteriaMenu, moreMenu, queryMenu} from "./menu";
import {filterMenu, getKeyByLiElement, initCriteriaMenu, moreMenu, queryMenu, saveCriterion} from "./menu";
import {App} from "../index";
const saveKeyList = (type: "keys" | "replaceKeys", value: string) => {
@ -128,7 +128,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
<div class="fn__space"></div>
<div id="replaceHistoryList" data-close="false" class="fn__none b3-menu b3-list b3-list--background"></div>
</div>
<div id="criteria" class="b3-chips" style="background-color: var(--b3-theme-background)"></div>
<div id="criteria" class="fn__flex" style="min-height:40px;background-color: var(--b3-theme-background)"></div>
<div class="block__icons">
<span data-type="previous" class="block__icon block__icon--show b3-tooltips b3-tooltips__ne" disabled="disabled" aria-label="${window.siyuan.languages.previousLabel}"><svg><use xlink:href='#iconLeft'></use></svg></span>
<span class="fn__space"></span>
@ -268,7 +268,42 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
const searchPathInputElement = element.querySelector("#searchPathInput");
while (target && !target.isSameNode(element)) {
const type = target.getAttribute("data-type");
if (type === "next") {
if (type === "removeCriterion") {
updateConfig(element, {
removed: true,
sort: 0,
group: 0,
hasReplace: false,
method: 0,
hPath: "",
idPath: [],
k: "",
r: "",
page: 1,
types: {
document: window.siyuan.config.search.document,
heading: window.siyuan.config.search.heading,
list: window.siyuan.config.search.list,
listItem: window.siyuan.config.search.listItem,
codeBlock: window.siyuan.config.search.codeBlock,
htmlBlock: window.siyuan.config.search.htmlBlock,
mathBlock: window.siyuan.config.search.mathBlock,
table: window.siyuan.config.search.table,
blockquote: window.siyuan.config.search.blockquote,
superBlock: window.siyuan.config.search.superBlock,
paragraph: window.siyuan.config.search.paragraph,
embedBlock: window.siyuan.config.search.embedBlock,
}
}, config, edit, app);
event.stopPropagation();
event.preventDefault();
break;
} else if (type === "saveCriterion") {
saveCriterion(config, criteriaData, element);
event.stopPropagation();
event.preventDefault();
break;
} else if (type === "next") {
if (!target.getAttribute("disabled")) {
config.page++;
inputTimeout = inputEvent(element, config, inputTimeout, edit, app);
@ -304,12 +339,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
return true;
}
});
if (target.parentElement.parentElement.childElementCount === 1) {
target.parentElement.parentElement.classList.add("fn__none");
target.parentElement.remove();
} else {
target.parentElement.remove();
}
target.parentElement.remove();
event.stopPropagation();
event.preventDefault();
break;