瀏覽代碼

:art: https://github.com/siyuan-note/siyuan/issues/8874

Vanessa 1 年之前
父節點
當前提交
c2bc25bac7
共有 4 個文件被更改,包括 100 次插入6 次删除
  1. 1 0
      app/src/constants.ts
  2. 14 3
      app/src/protyle/util/compatibility.ts
  3. 82 1
      app/src/search/assets.ts
  4. 3 2
      app/src/search/util.ts

+ 1 - 0
app/src/constants.ts

@@ -70,6 +70,7 @@ export abstract class Constants {
     public static readonly LOCAL_ZOOM = "local-zoom";
     public static readonly LOCAL_ZOOM = "local-zoom";
     public static readonly LOCAL_SEARCHDATA = "local-searchdata";
     public static readonly LOCAL_SEARCHDATA = "local-searchdata";
     public static readonly LOCAL_SEARCHKEYS = "local-searchkeys";
     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_DOCINFO = "local-docinfo"; // only mobile
     public static readonly LOCAL_DAILYNOTEID = "local-dailynoteid"; // string
     public static readonly LOCAL_DAILYNOTEID = "local-dailynoteid"; // string
     public static readonly LOCAL_HISTORYNOTEID = "local-historynoteid"; // string
     public static readonly LOCAL_HISTORYNOTEID = "local-historynoteid"; // string

+ 14 - 3
app/src/protyle/util/compatibility.ts

@@ -148,6 +148,16 @@ export const getLocalStorage = (cb: () => void) => {
         window.siyuan.storage = response.data;
         window.siyuan.storage = response.data;
         // 历史数据迁移
         // 历史数据迁移
         const defaultStorage: any = {};
         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] = {
         defaultStorage[Constants.LOCAL_SEARCHKEYS] = {
             keys: [],
             keys: [],
             replaceKeys: [],
             replaceKeys: [],
@@ -216,9 +226,10 @@ export const getLocalStorage = (cb: () => void) => {
         };
         };
         defaultStorage[Constants.LOCAL_ZOOM] = 1;
         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") {
             if (typeof response.data[key] === "string") {
                 try {
                 try {
                     const parseData = JSON.parse(response.data[key]);
                     const parseData = JSON.parse(response.data[key]);

+ 82 - 1
app/src/search/assets.ts

@@ -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)
+    })
 }
 }

+ 3 - 2
app/src/search/util.ts

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