From c752df919ae6b55ede607b353e849602689b7eec Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 22 Mar 2024 17:25:48 +0800 Subject: [PATCH 1/4] :art: Search type filtering supports Audio, Video, IFrame and Widget block https://github.com/siyuan-note/siyuan/issues/10645 --- kernel/model/storage.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/model/storage.go b/kernel/model/storage.go index 397dc1339..818ee9bba 100644 --- a/kernel/model/storage.go +++ b/kernel/model/storage.go @@ -187,6 +187,10 @@ type CriterionTypes struct { HtmlBlock bool `json:"htmlBlock"` EmbedBlock bool `json:"embedBlock"` DatabaseBlock bool `json:"databaseBlock"` + AudioBlock bool `json:"audioBlock"` + VideoBlock bool `json:"videoBlock"` + IFrameBlock bool `json:"iframeBlock"` + WidgetBlock bool `json:"widgetBlock"` } type CriterionReplaceTypes struct { From 45df03aede6857e25a91c8b2dd4128a6f242e7a0 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 22 Mar 2024 19:28:59 +0800 Subject: [PATCH 2/4] :bug: Unable to search replace hyperlink anchor text https://github.com/siyuan-note/siyuan/issues/10689 --- kernel/model/search.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/model/search.go b/kernel/model/search.go index 0fcd5f484..698ea925c 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -592,7 +592,7 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids } else if n.IsTextMarkType("a") { if replaceTypes["aText"] { if 0 == method { - if bytes.Contains(n.Tokens, []byte(keyword)) { + if strings.Contains(n.TextMarkTextContent, keyword) { n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, keyword, replacement) } } else if 3 == method { From 8b7e6661f5b0290ffff4919dbe845cebd0bc1d60 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 22 Mar 2024 19:46:48 +0800 Subject: [PATCH 3/4] :art: Creating a dailynote template supports doc attributes https://github.com/siyuan-note/siyuan/issues/10698 --- kernel/api/template.go | 2 +- kernel/model/file.go | 18 +++++++++++++----- kernel/model/template.go | 28 ++++++++++++++-------------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/kernel/api/template.go b/kernel/api/template.go index c706f2eb6..2913e3a9b 100644 --- a/kernel/api/template.go +++ b/kernel/api/template.go @@ -85,7 +85,7 @@ func renderTemplate(c *gin.Context) { preview = previewArg.(bool) } - content, err := model.RenderTemplate(p, id, preview) + _, content, err := model.RenderTemplate(p, id, preview) if nil != err { ret.Code = -1 ret.Msg = util.EscapeHTML(err.Error()) diff --git a/kernel/model/file.go b/kernel/model/file.go index 69663ff2a..4a1021222 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -1096,26 +1096,28 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) { return } - var dom string + var templateTree *parse.Tree + var templateDom string if "" != boxConf.DailyNoteTemplatePath { tplPath := filepath.Join(util.DataDir, "templates", boxConf.DailyNoteTemplatePath) if !filelock.IsExist(tplPath) { logging.LogWarnf("not found daily note template [%s]", tplPath) } else { - dom, err = renderTemplate(tplPath, id, false) - if nil != err { + var renderErr error + templateTree, templateDom, renderErr = RenderTemplate(tplPath, id, false) + if nil != renderErr { logging.LogWarnf("render daily note template [%s] failed: %s", boxConf.DailyNoteTemplatePath, err) } } } - if "" != dom { + if "" != templateDom { var tree *parse.Tree tree, err = LoadTreeByBlockID(id) if nil == err { tree.Root.FirstChild.Unlink() luteEngine := util.NewLute() - newTree := luteEngine.BlockDOM2Tree(dom) + newTree := luteEngine.BlockDOM2Tree(templateDom) var children []*ast.Node for c := newTree.Root.FirstChild; nil != c; c = c.Next { children = append(children, c) @@ -1123,6 +1125,12 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) { for _, c := range children { tree.Root.AppendChild(c) } + templateIALs := parse.IAL2Map(templateTree.Root.KramdownIAL) + for k, v := range templateIALs { + if "name" == k || "alias" == k || "bookmark" == k || "memo" == k || "title" == k || strings.HasPrefix(k, "custom-") { + tree.Root.SetIALAttr(k, v) + } + } tree.Root.SetIALAttr("updated", util.CurrentTimeSecondsStr()) if err = indexWriteJSONQueue(tree); nil != err { return diff --git a/kernel/model/template.go b/kernel/model/template.go index 2ccf1606c..bc71bb049 100644 --- a/kernel/model/template.go +++ b/kernel/model/template.go @@ -183,24 +183,21 @@ func DocSaveAsTemplate(id, name string, overwrite bool) (code int, err error) { return } -func RenderTemplate(p, id string, preview bool) (string, error) { - return renderTemplate(p, id, preview) -} - -func renderTemplate(p, id string, preview bool) (string, error) { - tree, err := LoadTreeByBlockID(id) +func RenderTemplate(p, id string, preview bool) (tree *parse.Tree, dom string, err error) { + tree, err = LoadTreeByBlockID(id) if nil != err { - return "", err + return } node := treenode.GetNodeInTree(tree, id) if nil == node { - return "", ErrBlockNotFound + err = ErrBlockNotFound + return } block := sql.BuildBlockFromNode(node, tree) md, err := os.ReadFile(p) if nil != err { - return "", err + return } dataModel := map[string]string{} @@ -222,20 +219,23 @@ func renderTemplate(p, id string, preview bool) (string, error) { goTpl = goTpl.Funcs(tplFuncMap) tpl, err := goTpl.Funcs(tplFuncMap).Parse(gulu.Str.FromBytes(md)) if nil != err { - return "", errors.New(fmt.Sprintf(Conf.Language(44), err.Error())) + err = errors.New(fmt.Sprintf(Conf.Language(44), err.Error())) + return } buf := &bytes.Buffer{} buf.Grow(4096) if err = tpl.Execute(buf, dataModel); nil != err { - return "", errors.New(fmt.Sprintf(Conf.Language(44), err.Error())) + err = errors.New(fmt.Sprintf(Conf.Language(44), err.Error())) + return } md = buf.Bytes() tree = parseKTree(md) if nil == tree { msg := fmt.Sprintf("parse tree [%s] failed", p) logging.LogErrorf(msg) - return "", errors.New(msg) + err = errors.New(msg) + return } var nodesNeedAppendChild, unlinks []*ast.Node @@ -357,8 +357,8 @@ func renderTemplate(p, id string, preview bool) (string, error) { }) luteEngine := NewLute() - dom := luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions) - return dom, nil + dom = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions) + return } func addBlockIALNodes(tree *parse.Tree, removeUpdated bool) { From 5c6be798f4a50ec26fd7cf398158a40b6c70e00b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 22 Mar 2024 19:47:03 +0800 Subject: [PATCH 4/4] :art: Creating a dailynote template supports doc attributes https://github.com/siyuan-note/siyuan/issues/10698 --- kernel/model/file.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/model/file.go b/kernel/model/file.go index 4a1021222..53b7300a0 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -1125,12 +1125,15 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) { for _, c := range children { tree.Root.AppendChild(c) } + + // Creating a dailynote template supports doc attributes https://github.com/siyuan-note/siyuan/issues/10698 templateIALs := parse.IAL2Map(templateTree.Root.KramdownIAL) for k, v := range templateIALs { if "name" == k || "alias" == k || "bookmark" == k || "memo" == k || "title" == k || strings.HasPrefix(k, "custom-") { tree.Root.SetIALAttr(k, v) } } + tree.Root.SetIALAttr("updated", util.CurrentTimeSecondsStr()) if err = indexWriteJSONQueue(tree); nil != err { return