diff --git a/kernel/api/export.go b/kernel/api/export.go index 4295a070e..ba1d01a3c 100644 --- a/kernel/api/export.go +++ b/kernel/api/export.go @@ -580,10 +580,9 @@ func exportPreview(c *gin.Context) { } id := arg["id"].(string) - stdHTML, outline := model.Preview(id) + stdHTML := model.Preview(id) ret.Data = map[string]interface{}{ - "html": stdHTML, - "outline": outline, + "html": stdHTML, } } diff --git a/kernel/api/outline.go b/kernel/api/outline.go index ba1c3f3ea..83c35c6e3 100644 --- a/kernel/api/outline.go +++ b/kernel/api/outline.go @@ -38,8 +38,13 @@ func getDocOutline(c *gin.Context) { return } + preview := false + if previewArg := arg["preview"]; nil != previewArg { + preview = previewArg.(bool) + } + rootID := arg["id"].(string) - headings, err := model.Outline(rootID) + headings, err := model.Outline(rootID, preview) if err != nil { ret.Code = 1 ret.Msg = err.Error() diff --git a/kernel/model/export.go b/kernel/model/export.go index ae7d9c792..fbe7b6ff8 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -567,7 +567,7 @@ func ExportResources(resourcePaths []string, mainName string) (exportFilePath st return } -func Preview(id string) (retStdHTML string, retOutline []*Path) { +func Preview(id string) (retStdHTML string) { tree, _ := LoadTreeByBlockID(id) tree = exportTree(tree, false, false, true, Conf.Export.BlockRefMode, Conf.Export.BlockEmbedMode, Conf.Export.FileAnnotationRefMode, @@ -586,7 +586,6 @@ func Preview(id string) (retStdHTML string, retOutline []*Path) { if footnotesDefBlock := tree.Root.ChildByType(ast.NodeFootnotesDefBlock); nil != footnotesDefBlock { footnotesDefBlock.Unlink() } - retOutline = outline(tree) return } diff --git a/kernel/model/outline.go b/kernel/model/outline.go index f68a1ee9e..ead94e5a1 100644 --- a/kernel/model/outline.go +++ b/kernel/model/outline.go @@ -17,6 +17,7 @@ package model import ( + "github.com/88250/lute/html" "time" "github.com/88250/lute/ast" @@ -207,7 +208,7 @@ func (tx *Transaction) doMoveOutlineHeading(operation *Operation) (ret *TxErr) { return } -func Outline(rootID string) (ret []*Path, err error) { +func Outline(rootID string, preview bool) (ret []*Path, err error) { time.Sleep(util.FrontendQueueInterval) WaitForWritingFiles() @@ -217,6 +218,24 @@ func Outline(rootID string) (ret []*Path, err error) { return } + if preview && Conf.Export.AddTitle { + if root, _ := getBlock(tree.ID, tree); nil != root { + root.IAL["type"] = "doc" + title := &ast.Node{Type: ast.NodeHeading, HeadingLevel: 1} + for k, v := range root.IAL { + if "type" == k { + continue + } + title.SetIALAttr(k, v) + } + title.InsertAfter(&ast.Node{Type: ast.NodeKramdownBlockIAL, Tokens: parse.IAL2Tokens(title.KramdownIAL)}) + + content := html.UnescapeString(root.Content) + title.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(content)}) + tree.Root.PrependChild(title) + } + } + ret = outline(tree) return }