Просмотр исходного кода

:art: Add configuration item `Editor` - `[[ Only search doc block` Fix https://github.com/siyuan-note/siyuan/issues/8077

Liang Ding 2 лет назад
Родитель
Сommit
4ec4e1d882

+ 2 - 0
app/appearance/langs/en_US.json

@@ -1,4 +1,6 @@
 {
+  "onlySearchForDoc": "<code class='fn__code'>[[</code> only search documents",
+  "onlySearchForDocTip": "After enabling, [[ to search for block references only in doc blocks",
   "ocrResult": "OCR result text",
   "reOCR": "Re OCR",
   "continueReview1": "Continue Review",

+ 2 - 0
app/appearance/langs/es_ES.json

@@ -1,4 +1,6 @@
 {
+  "onlySearchForDoc": "<code class='fn__code'>[[</code> solo buscar documentos",
+  "onlySearchForDocTip": "Después de habilitar, [[ para buscar referencias de bloque solo en bloques de documentos",
   "ocrResult": "Texto de resultado de OCR",
   "reOCR": "Re-OCR",
   "continueReview1": "Continuar revisión",

+ 2 - 0
app/appearance/langs/fr_FR.json

@@ -1,4 +1,6 @@
 {
+  "onlySearchForDoc": "<code class='fn__code'>[[</code> rechercher uniquement les documents",
+  "onlySearchForDocTip": "Après l'activation, [[ pour rechercher des références de bloc uniquement dans les blocs doc",
   "reOCR": "ReOCR",
   "continueReview1": "Continuer la révision",
   "continueReview2": "Il reste encore des fiches <code class='fn__code'>${count}</code> à examiner, continuer ?",

+ 2 - 0
app/appearance/langs/zh_CHT.json

@@ -1,4 +1,6 @@
 {
+  "onlySearchForDoc": "<code class='fn__code'>[[</code> 僅搜索文檔",
+  "onlySearchForDocTip": "啟用後使用 [[ 搜索塊引用時將只在文檔塊中進行搜索",
   "ocrResult": "OCR 結果文本",
   "reOCR": "重新 OCR",
   "continueReview1": "繼續複習",

+ 2 - 0
app/appearance/langs/zh_CN.json

@@ -1,4 +1,6 @@
 {
+  "onlySearchForDoc": "<code class='fn__code'>[[</code> 仅搜索文档",
+  "onlySearchForDocTip": "启用后使用 [[ 搜索块引用时将只在文档块中进行搜索",
   "ocrResult": "OCR 结果文本",
   "reOCR": "重新 OCR",
   "continueReview1": "继续复习",

+ 9 - 0
app/src/config/editor.ts

@@ -98,6 +98,14 @@ export const editor = {
     <span class="fn__space"></span>
     <input class="b3-switch fn__flex-center" id="spellcheck" type="checkbox"${window.siyuan.config.editor.spellcheck ? " checked" : ""}/>
 </label>
+<label class="fn__flex b3-label">
+    <div class="fn__flex-1">
+        ${window.siyuan.languages.onlySearchForDoc}
+        <div class="b3-label__text">${window.siyuan.languages.onlySearchForDocTip}</div>
+    </div>
+    <span class="fn__space"></span>
+    <input class="b3-switch fn__flex-center" id="onlySearchForDoc" type="checkbox"${window.siyuan.config.editor.onlySearchForDoc ? " checked" : ""}/>
+</label>
 <label class="fn__flex b3-label">
     <div class="fn__flex-1">
         ${window.siyuan.languages.md31}
@@ -280,6 +288,7 @@ export const editor = {
                 embedBlockBreadcrumb: (editor.element.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked,
                 listLogicalOutdent: (editor.element.querySelector("#listLogicalOutdent") as HTMLInputElement).checked,
                 spellcheck: (editor.element.querySelector("#spellcheck") as HTMLInputElement).checked,
+                onlySearchForDoc: (editor.element.querySelector("#onlySearchForDoc") as HTMLInputElement).checked,
                 floatWindowMode: (editor.element.querySelector("#floatWindowMode") as HTMLInputElement).checked ? 0 : 1,
                 plantUMLServePath: (editor.element.querySelector("#plantUMLServePath") as HTMLInputElement).value,
                 katexMacros: (editor.element.querySelector("#katexMacros") as HTMLTextAreaElement).value,

+ 1 - 1
app/src/config/search.ts

@@ -19,7 +19,7 @@ export const initConfigSearch = (element: HTMLElement) => {
             "historyRetentionDays", "historyRetentionDaysTip", "clearHistory", "katexMacros", "katexMacrosTip",
             "editReadonly", "editReadonlyTip", "embedBlockBreadcrumb", "embedBlockBreadcrumbTip", "outlineOutdentTip",
             "outdent", "floatWindowMode", "floatWindowModeTip", "justify", "justifyTip", "rtl", "rtlTip", "spellcheck",
-            "spellcheckTip", "backlinkExpand", "backlinkExpandTip"
+            "spellcheckTip", "backlinkExpand", "backlinkExpandTip", "onlySearchForDocTip"
         ]),
 
         // 文档树

+ 9 - 0
app/src/mobile/settings/editor.ts

@@ -29,6 +29,7 @@ const setEditor = (modelMainElement: Element) => {
     window.siyuan.config.editor.embedBlockBreadcrumb = (modelMainElement.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked;
     window.siyuan.config.editor.listLogicalOutdent = (modelMainElement.querySelector("#listLogicalOutdent") as HTMLInputElement).checked;
     window.siyuan.config.editor.spellcheck = (modelMainElement.querySelector("#spellcheck") as HTMLInputElement).checked;
+    window.siyuan.config.editor.onlySearchForDoc = (modelMainElement.querySelector("#onlySearchForDoc") as HTMLInputElement).checked;
     window.siyuan.config.editor.plantUMLServePath = (modelMainElement.querySelector("#plantUMLServePath") as HTMLInputElement).value;
     window.siyuan.config.editor.katexMacros = (modelMainElement.querySelector("#katexMacros") as HTMLTextAreaElement).value;
     window.siyuan.config.editor.codeLineWrap = (modelMainElement.querySelector("#codeLineWrap") as HTMLInputElement).checked;
@@ -108,6 +109,14 @@ export const initEditor = () => {
     <span class="fn__space"></span>
     <input class="b3-switch fn__flex-center" id="spellcheck" type="checkbox"${window.siyuan.config.editor.spellcheck ? " checked" : ""}/>
 </label>
+<label class="fn__flex b3-label">
+    <div class="fn__flex-1">
+        ${window.siyuan.languages.onlySearchForDoc}
+        <div class="b3-label__text">${window.siyuan.languages.onlySearchForDocTip}</div>
+    </div>
+    <span class="fn__space"></span>
+    <input class="b3-switch fn__flex-center" id="onlySearchForDoc" type="checkbox"${window.siyuan.config.editor.spellcheck ? " checked" : ""}/>
+</label>
 <label class="fn__flex b3-label">
     <div class="fn__flex-1">
         ${window.siyuan.languages.md31}

+ 2 - 1
app/src/types/index.d.ts

@@ -200,7 +200,7 @@ interface ISiyuan {
     mobile?: {
         editor?: import("../protyle").Protyle
         popEditor?: import("../protyle").Protyle
-        files?: import("../mobile/util/MobileFiles").MobileFiles
+        files?: import("../mobile/dock/MobileFiles").MobileFiles
     },
     user?: {
         userId: string
@@ -332,6 +332,7 @@ declare interface IEditor {
     readOnly: boolean;
     listLogicalOutdent: boolean;
     spellcheck: boolean;
+    onlySearchForDoc: boolean;
     katexMacros: string;
     fullWidth: boolean;
     floatWindowMode: number;

+ 1 - 6
kernel/api/search.go

@@ -191,16 +191,11 @@ func searchRefBlock(c *gin.Context) {
 		return
 	}
 
-	onlyDoc := false
-	if nil != arg["onlyDoc"] {
-		onlyDoc = arg["onlyDoc"].(bool)
-	}
-
 	rootID := arg["rootID"].(string)
 	id := arg["id"].(string)
 	keyword := arg["k"].(string)
 	beforeLen := int(arg["beforeLen"].(float64))
-	blocks, newDoc := model.SearchRefBlock(id, rootID, keyword, beforeLen, onlyDoc)
+	blocks, newDoc := model.SearchRefBlock(id, rootID, keyword, beforeLen)
 	ret.Data = map[string]interface{}{
 		"blocks": blocks,
 		"newDoc": newDoc,

+ 1 - 0
kernel/conf/editor.go

@@ -43,6 +43,7 @@ type Editor struct {
 	Justify                         bool     `json:"justify"`                         // 是否两端对齐
 	RTL                             bool     `json:"rtl"`                             // 是否从右到左显示
 	Spellcheck                      bool     `json:"spellcheck"`                      // 是否启用拼写检查
+	OnlySearchForDoc                bool     `json:"onlySearchForDoc"`                // 是否启用 [[ 仅搜索文档块
 	BacklinkExpandCount             int      `json:"backlinkExpandCount"`             // 反向链接默认展开数量
 	BackmentionExpandCount          int      `json:"backmentionExpandCount"`          // 反链提及默认展开数量
 }

+ 5 - 5
kernel/model/search.go

@@ -121,12 +121,12 @@ func searchEmbedBlock(embedBlockID, stmt string, excludeIDs []string, headingMod
 	return
 }
 
-func SearchRefBlock(id, rootID, keyword string, beforeLen int, onlyDoc bool) (ret []*Block, newDoc bool) {
+func SearchRefBlock(id, rootID, keyword string, beforeLen int) (ret []*Block, newDoc bool) {
 	cachedTrees := map[string]*parse.Tree{}
 
 	if "" == keyword {
 		// 查询为空时默认的块引排序规则按最近使用优先 https://github.com/siyuan-note/siyuan/issues/3218
-		refs := sql.QueryRefsRecent(onlyDoc)
+		refs := sql.QueryRefsRecent(Conf.Editor.OnlySearchForDoc)
 		for _, ref := range refs {
 			tree := cachedTrees[ref.DefBlockRootID]
 			if nil == tree {
@@ -158,7 +158,7 @@ func SearchRefBlock(id, rootID, keyword string, beforeLen int, onlyDoc bool) (re
 		return
 	}
 
-	ret = fullTextSearchRefBlock(keyword, beforeLen, onlyDoc)
+	ret = fullTextSearchRefBlock(keyword, beforeLen)
 	tmp := ret[:0]
 	for _, b := range ret {
 		tree := cachedTrees[b.RootID]
@@ -646,7 +646,7 @@ func removeLimitClause(stmt string) string {
 	return stmt
 }
 
-func fullTextSearchRefBlock(keyword string, beforeLen int, onlyDoc bool) (ret []*Block) {
+func fullTextSearchRefBlock(keyword string, beforeLen int) (ret []*Block) {
 	keyword = gulu.Str.RemoveInvisible(keyword)
 
 	if ast.IsNodeIDPattern(keyword) {
@@ -669,7 +669,7 @@ func fullTextSearchRefBlock(keyword string, beforeLen int, onlyDoc bool) (ret []
 		"snippet(" + table + ", 11, '" + search.SearchMarkLeft + "', '" + search.SearchMarkRight + "', '...', 64) AS content, " +
 		"fcontent, markdown, length, type, subtype, ial, sort, created, updated"
 	stmt := "SELECT " + projections + " FROM " + table + " WHERE " + table + " MATCH '" + columnFilter() + ":(" + quotedKeyword + ")' AND type"
-	if onlyDoc {
+	if Conf.Editor.OnlySearchForDoc {
 		stmt += " = 'd'"
 	} else {
 		stmt += " IN " + Conf.Search.TypeFilter()