Vanessa 2023-08-12 23:51:14 +08:00
parent 0635af2fc5
commit c2bc25bac7
4 changed files with 100 additions and 6 deletions

View File

@ -70,6 +70,7 @@ export abstract class Constants {
public static readonly LOCAL_ZOOM = "local-zoom";
public static readonly LOCAL_SEARCHDATA = "local-searchdata";
public static readonly LOCAL_SEARCHKEYS = "local-searchkeys";
public static readonly LOCAL_SEARCHASSET = "local-searchasset";
public static readonly LOCAL_DOCINFO = "local-docinfo"; // only mobile
public static readonly LOCAL_DAILYNOTEID = "local-dailynoteid"; // string
public static readonly LOCAL_HISTORYNOTEID = "local-historynoteid"; // string

View File

@ -148,6 +148,16 @@ export const getLocalStorage = (cb: () => void) => {
window.siyuan.storage = response.data;
// 历史数据迁移
const defaultStorage: any = {};
defaultStorage[Constants.LOCAL_SEARCHASSET] = {
keys: [],
col: "",
row: "",
layout: 0,
method: 0,
types: [".txt", ".md", ".docx", ".xlsx", ".pptx"],
sort: 0,
k: "",
};
defaultStorage[Constants.LOCAL_SEARCHKEYS] = {
keys: [],
replaceKeys: [],
@ -216,9 +226,10 @@ export const getLocalStorage = (cb: () => void) => {
};
defaultStorage[Constants.LOCAL_ZOOM] = 1;
[Constants.LOCAL_EXPORTIMG, Constants.LOCAL_SEARCHKEYS, Constants.LOCAL_PDFTHEME, Constants.LOCAL_BAZAAR, Constants.LOCAL_EXPORTWORD,
Constants.LOCAL_EXPORTPDF, Constants.LOCAL_DOCINFO, Constants.LOCAL_FONTSTYLES, Constants.LOCAL_SEARCHDATA,
Constants.LOCAL_ZOOM, Constants.LOCAL_LAYOUTS, Constants.LOCAL_AI, Constants.LOCAL_PLUGINTOPUNPIN].forEach((key) => {
[Constants.LOCAL_EXPORTIMG, Constants.LOCAL_SEARCHKEYS, Constants.LOCAL_PDFTHEME, Constants.LOCAL_BAZAAR,
Constants.LOCAL_EXPORTWORD, Constants.LOCAL_EXPORTPDF, Constants.LOCAL_DOCINFO, Constants.LOCAL_FONTSTYLES,
Constants.LOCAL_SEARCHDATA, Constants.LOCAL_ZOOM, Constants.LOCAL_LAYOUTS, Constants.LOCAL_AI,
Constants.LOCAL_PLUGINTOPUNPIN, Constants.LOCAL_SEARCHASSET].forEach((key) => {
if (typeof response.data[key] === "string") {
try {
const parseData = JSON.parse(response.data[key]);

View File

@ -1,3 +1,84 @@
export const openSearchAsset = () => {
import {Constants} from "../constants";
import {fetchPost} from "../util/fetch";
export const openSearchAsset = (element: HTMLElement, isStick: boolean) => {
const localSearch = window.siyuan.storage[Constants.LOCAL_SEARCHASSET]
let methodText = window.siyuan.languages.keyword;
if (localSearch.method === 1) {
methodText = window.siyuan.languages.querySyntax;
} else if (localSearch.method === 2) {
methodText = "SQL";
} else if (localSearch.method === 3) {
methodText = window.siyuan.languages.regex;
}
const loadingElement = element.nextElementSibling;
loadingElement.classList.remove("fn__none");
element.innerHTML = `<div class="b3-form__icon search__header">
<span class="fn__a" id="searchHistoryBtn">
<svg data-menu="true" class="b3-form__icon-icon"><use xlink:href="#iconSearch"></use></svg>
<svg class="search__arrowdown"><use xlink:href="#iconDown"></use></svg>
</span>
<input id="searchInput" style="padding-right: 60px" class="b3-text-field b3-text-field--text" placeholder="${window.siyuan.languages.keyword}">
<div id="searchHistoryList" data-close="false" class="fn__none b3-menu b3-list b3-list--background"></div>
<div class="block__icons">
<span id="searchRefresh" aria-label="${window.siyuan.languages.refresh}" class="block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconRefresh"></use></svg>
</span>
<span class="fn__space"></span>
<span id="searchSyntaxCheck" aria-label="${window.siyuan.languages.searchMethod} ${methodText}" class="block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconRegex"></use></svg>
</span>
<span class="fn__space"></span>
<span id="searchFilter" aria-label="${window.siyuan.languages.type}" class="block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconFilter"></use></svg>
</span>
<span class="fn__space"></span>
<span id="searchMore" aria-label="${window.siyuan.languages.more}" class="block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconMore"></use></svg>
</span>
<span class="${isStick ? "" : "fn__none "}fn__space"></span>
<span id="searchOpen" aria-label="${window.siyuan.languages.openInNewTab}" class="${isStick ? "" : "fn__none "}block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconLayoutRight"></use></svg>
</span>
<span class="fn__space"></span>
<span id="searchAsset" aria-label="${isStick ? window.siyuan.languages.stickSearch : window.siyuan.languages.globalSearch}" class="block__icon b3-tooltips b3-tooltips__w">
<svg><use xlink:href="#iconBack"></use></svg>
</span>
</div>
</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>
<span data-type="next" class="block__icon block__icon--show b3-tooltips b3-tooltips__ne" disabled="disabled" aria-label="${window.siyuan.languages.nextLabel}"><svg><use xlink:href='#iconRight'></use></svg></span>
<span class="fn__space"></span>
<span id="searchResult"></span>
<span class="fn__space"></span>
<span class="fn__flex-1"></span>
</div>
<div class="search__layout${localSearch.layout === 1 ? " search__layout--row" : ""}">
<div id="searchList" class="fn__flex-1 search__list b3-list b3-list--background"></div>
<div class="search__drag"></div>
<div id="searchPreview" class="fn__flex-1 search__preview"></div>
</div>
<div class="search__tip${isStick ? "" : " fn__none"}">
<kbd>/</kbd> ${window.siyuan.languages.searchTip1}
<kbd>Enter/Double Click</kbd> ${window.siyuan.languages.searchTip2}
<kbd>Esc</kbd> ${window.siyuan.languages.searchTip5}
</div>`
element.previousElementSibling.classList.add("fn__none");
element.classList.remove("fn__none")
if (element.querySelector("#searchList").innerHTML !== "") {
return
}
fetchPost("/api/search/fullTextSearchAssetContent", {
page: 1,
query: localSearch.k,
types: localSearch.types,
method: localSearch.method,
orderBy: localSearch.sort
}, (response) => {
loadingElement.classList.remove("fn__none")
console.log(response)
})
}

View File

@ -216,7 +216,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
<div class="search__drag"></div>
<div id="searchPreview" class="fn__flex-1 search__preview"></div>
</div>
<div class="search__tip">
<div class="search__tip${closeCB ? "" : " fn__none"}">
<kbd>/</kbd> ${window.siyuan.languages.searchTip1}
<kbd>${updateHotkeyTip(window.siyuan.config.keymap.general.newFile.custom)}</kbd> ${window.siyuan.languages.new}
<kbd>Enter/Double Click</kbd> ${window.siyuan.languages.searchTip2}
@ -225,6 +225,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
<kbd>Esc</kbd> ${window.siyuan.languages.searchTip5}
</div>
</div>
<div class="fn__flex-column search__assets fn__none" style="height: 100%;${closeCB ? "border-radius: var(--b3-border-radius-b);overflow: hidden;" : ""}"></div>
<div class="fn__loading fn__loading--top"><img width="120px" src="/stage/loading-pure.svg"></div>`;
const criteriaData: ISearchOption[] = [];
@ -495,7 +496,7 @@ export const genSearch = (app: App, config: ISearchOption, element: Element, clo
event.preventDefault();
break;
} else if (target.id === "searchAsset") {
openSearchAsset();
openSearchAsset(element.querySelector(".search__assets"), !!closeCB);
event.stopPropagation();
event.preventDefault();
break;