diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 9949269d3..d8b907c7e 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,6 +1,6 @@ { "onlySearchForDoc": "[[ only search documents", - "onlySearchForDocTip": "After enabling, [[ to search for block references only in doc blocks", + "onlySearchForDocTip": "After enabling, [[ or 【【 to search for block references only in doc blocks", "ocrResult": "OCR result text", "reOCR": "Re OCR", "continueReview1": "Continue Review", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index bbb1c0869..da7217e50 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,6 +1,6 @@ { "onlySearchForDoc": "[[ solo buscar documentos", - "onlySearchForDocTip": "Después de habilitar, [[ para buscar referencias de bloque solo en bloques de documentos", + "onlySearchForDocTip": "Después de habilitar, [[ o 【【 para buscar referencias de bloque solo en bloques de documentos", "ocrResult": "Texto de resultado de OCR", "reOCR": "Re-OCR", "continueReview1": "Continuar revisión", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index d1270e0cb..e338d521d 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,6 +1,6 @@ { "onlySearchForDoc": "[[ rechercher uniquement les documents", - "onlySearchForDocTip": "Après l'activation, [[ pour rechercher des références de bloc uniquement dans les blocs doc", + "onlySearchForDocTip": "Après l'activation, [[ ou 【【 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 ${count} à examiner, continuer ?", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 24d9cdfb2..350291ca0 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,6 +1,6 @@ { "onlySearchForDoc": "[[ 僅搜索文檔", - "onlySearchForDocTip": "啟用後使用 [[ 搜索塊引用時將只在文檔塊中進行搜索", + "onlySearchForDocTip": "啟用後使用 [[ 或 【【 搜索塊引用時將只在文檔塊中進行搜索", "ocrResult": "OCR 結果文本", "reOCR": "重新 OCR", "continueReview1": "繼續複習", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index c9c123644..adf9e5556 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,6 +1,6 @@ { "onlySearchForDoc": "[[ 仅搜索文档", - "onlySearchForDocTip": "启用后使用 [[ 搜索块引用时将只在文档块中进行搜索", + "onlySearchForDocTip": "启用后使用 [[ 或 【【 搜索块引用时将只在文档块中进行搜索", "ocrResult": "OCR 结果文本", "reOCR": "重新 OCR", "continueReview1": "继续复习", diff --git a/app/src/protyle/hint/extend.ts b/app/src/protyle/hint/extend.ts index 2ddb7a9fb..4c4f1c243 100644 --- a/app/src/protyle/hint/extend.ts +++ b/app/src/protyle/hint/extend.ts @@ -307,6 +307,7 @@ export const hintRef = (key: string, protyle: IProtyle, isQuick = false): IHintD id: nodeElement ? nodeElement.getAttribute("data-node-id") : protyle.block.parentID, beforeLen: Math.floor((Math.max(protyle.element.clientWidth / 2, 320) - 58) / 28.8), rootID: protyle.block.rootID, + isSquareBrackets: ["[[", "【【"].includes(protyle.hint.splitChar) }, (response) => { const dataList: IHintData[] = []; if (response.data.newDoc) { diff --git a/kernel/api/search.go b/kernel/api/search.go index d9806e8a0..1f7294029 100644 --- a/kernel/api/search.go +++ b/kernel/api/search.go @@ -191,11 +191,16 @@ func searchRefBlock(c *gin.Context) { return } + isSquareBrackets := false + if isSquareBracketsArg := arg["isSquareBrackets"]; nil != isSquareBracketsArg { + isSquareBrackets = isSquareBracketsArg.(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) + blocks, newDoc := model.SearchRefBlock(id, rootID, keyword, beforeLen, isSquareBrackets) ret.Data = map[string]interface{}{ "blocks": blocks, "newDoc": newDoc, diff --git a/kernel/model/search.go b/kernel/model/search.go index 54beed227..827813dc2 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -121,12 +121,17 @@ func searchEmbedBlock(embedBlockID, stmt string, excludeIDs []string, headingMod return } -func SearchRefBlock(id, rootID, keyword string, beforeLen int) (ret []*Block, newDoc bool) { +func SearchRefBlock(id, rootID, keyword string, beforeLen int, isSquareBrackets bool) (ret []*Block, newDoc bool) { cachedTrees := map[string]*parse.Tree{} + onlyDoc := false + if isSquareBrackets { + onlyDoc = Conf.Editor.OnlySearchForDoc + } + if "" == keyword { // 查询为空时默认的块引排序规则按最近使用优先 https://github.com/siyuan-note/siyuan/issues/3218 - refs := sql.QueryRefsRecent(Conf.Editor.OnlySearchForDoc) + refs := sql.QueryRefsRecent(onlyDoc) for _, ref := range refs { tree := cachedTrees[ref.DefBlockRootID] if nil == tree { @@ -158,7 +163,7 @@ func SearchRefBlock(id, rootID, keyword string, beforeLen int) (ret []*Block, ne return } - ret = fullTextSearchRefBlock(keyword, beforeLen) + ret = fullTextSearchRefBlock(keyword, beforeLen, onlyDoc) tmp := ret[:0] for _, b := range ret { tree := cachedTrees[b.RootID] @@ -646,7 +651,7 @@ func removeLimitClause(stmt string) string { return stmt } -func fullTextSearchRefBlock(keyword string, beforeLen int) (ret []*Block) { +func fullTextSearchRefBlock(keyword string, beforeLen int, onlyDoc bool) (ret []*Block) { keyword = gulu.Str.RemoveInvisible(keyword) if ast.IsNodeIDPattern(keyword) { @@ -669,7 +674,7 @@ func fullTextSearchRefBlock(keyword string, beforeLen int) (ret []*Block) { "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 Conf.Editor.OnlySearchForDoc { + if onlyDoc { stmt += " = 'd'" } else { stmt += " IN " + Conf.Search.TypeFilter()