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

This commit is contained in:
Liang Ding 2023-04-22 09:18:00 +08:00
parent 4393d844ad
commit 4ec4e1d882
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
12 changed files with 38 additions and 13 deletions

View file

@ -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",

View file

@ -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",

View file

@ -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 ?",

View file

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

View file

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

View file

@ -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,

View file

@ -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"
]),
// 文档树

View file

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

View file

@ -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;

View file

@ -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,

View file

@ -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"` // 反链提及默认展开数量
}

View file

@ -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()