mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-28 19:26:09 +01:00
This commit is contained in:
parent
471e1e5f02
commit
bf942208f0
8 changed files with 110 additions and 63 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@
|
|||
"sortByRankDesc": "按相關度降序",
|
||||
"sortByRankAsc": "按相關度升序",
|
||||
"saveCriterion": "保存查詢條件",
|
||||
"useCriterion": "使用查詢條件",
|
||||
"useCriterion": "清空後可使用上一次的查詢條件",
|
||||
"removeCriterion": "清空查詢條件",
|
||||
"group": "分組",
|
||||
"noGroupBy": "不分組",
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@
|
|||
"sortByRankDesc": "按相关度降序",
|
||||
"sortByRankAsc": "按相关度升序",
|
||||
"saveCriterion": "保存查询条件",
|
||||
"useCriterion": "使用查询条件",
|
||||
"useCriterion": "清空后可使用上一次的查询条件",
|
||||
"removeCriterion": "清空查询条件",
|
||||
"group": "分组",
|
||||
"noGroupBy": "不分组",
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue