diff --git a/API.md b/API.md index dd23d9a32..097312642 100644 --- a/API.md +++ b/API.md @@ -73,7 +73,8 @@ * Endpoint: `http://127.0.0.1:6806` * Both are POST methods -* An interface with parameters is required, the parameter is a JSON string, placed in the body, and the header Content-Type is `application/json` +* An interface with parameters is required, the parameter is a JSON string, placed in the body, and the header + Content-Type is `application/json` * Return value ````json @@ -328,7 +329,8 @@ View API token in Settings - About, request header: `Authorization: T ``` * `notebook`: Notebook ID - * `path`: Document path, which needs to start with / and separate levels with / (path here corresponds to the database hpath field) + * `path`: Document path, which needs to start with / and separate levels with / (path here corresponds to the + database hpath field) * `markdown`: GFM Markdown content * Return value @@ -381,8 +383,8 @@ Rename a document by `id`: } ``` - * `id`: Document ID - * `title`: New document title + * `id`: Document ID + * `title`: New document title * Return value ```json @@ -416,7 +418,7 @@ Rename a document by `id`: "data": null } ``` - + Remove a document by `id`: * `/api/filetree/removeDocByID` @@ -428,7 +430,7 @@ Remove a document by `id`: } ``` - * `id`: Document ID + * `id`: Document ID * Return value ```json @@ -465,6 +467,30 @@ Remove a document by `id`: } ``` +Move documents by `id`: + +* `/api/filetree/moveDocsByID` +* Parameters + + ```json + { + "fromIDs": ["20210917220056-yxtyl7i"], + "toID": "20210817205410-2kvfpfn" + } + ``` + + * `fromIDs`: Source docs' IDs + * `toID`: Target parent ID +* Return value + + ```json + { + "code": 0, + "msg": "", + "data": null + } + ``` + ### Get human-readable path based on path * `/api/filetree/getHPathByPath` @@ -510,7 +536,7 @@ Remove a document by `id`: "data": "/foo/bar" } ``` - + ### Get storage path based on ID * `/api/filetree/getPathByID` @@ -522,7 +548,7 @@ Remove a document by `id`: } ``` - * `id`: Block ID + * `id`: Block ID * Return value ```json @@ -545,8 +571,8 @@ Remove a document by `id`: } ``` - * `path`: Human-readable path - * `notebook`: Notebook ID + * `path`: Human-readable path + * `notebook`: Notebook ID * Return value ```json @@ -570,7 +596,8 @@ Remove a document by `id`: * `"/assets/"`: workspace/data/assets/ folder * `"/assets/sub/"`: workspace/data/assets/sub/ folder - Under normal circumstances, it is recommended to use the first method, which is stored in the assets folder of the workspace, putting in a subdirectory has some side effects, please refer to the assets chapter of the user guide. + Under normal circumstances, it is recommended to use the first method, which is stored in the assets folder of the + workspace, putting in a subdirectory has some side effects, please refer to the assets chapter of the user guide. * `file[]`: Uploaded file list * Return value @@ -588,7 +615,9 @@ Remove a document by `id`: ``` * `errFiles`: List of filenames with errors in upload processing - * `succMap`: For successfully processed files, the key is the file name when uploading, and the value is assets/foo-id.png, which is used to replace the asset link address in the existing Markdown content with the uploaded address + * `succMap`: For successfully processed files, the key is the file name when uploading, and the value is + assets/foo-id.png, which is used to replace the asset link address in the existing Markdown content with the + uploaded address ## Blocks @@ -613,7 +642,8 @@ Remove a document by `id`: * `previousID`: The ID of the previous block, used to anchor the insertion position * `parentID`: The ID of the parent block, used to anchor the insertion position - `nextID`, `previousID`, and `parentID` must have at least one value, using priority: `nextID` > `previousID` > `parentID` + `nextID`, `previousID`, and `parentID` must have at least one value, using priority: `nextID` > `previousID` > + `parentID` * Return value ```json @@ -820,7 +850,8 @@ Remove a document by `id`: * `id`: Block ID to move * `previousID`: The ID of the previous block, used to anchor the insertion position - * `parentID`: The ID of the parent block, used to anchor the insertion position, `previousID` and `parentID` cannot be empty at the same time, if they exist at the same time, `previousID` will be used first + * `parentID`: The ID of the parent block, used to anchor the insertion position, `previousID` and `parentID` cannot + be empty at the same time, if they exist at the same time, `previousID` will be used first * Return value ```json @@ -860,7 +891,7 @@ Remove a document by `id`: } ``` - * `id`: Block ID to fold + * `id`: Block ID to fold * Return value ```json @@ -882,7 +913,7 @@ Remove a document by `id`: } ``` - * `id`: Block ID to unfold + * `id`: Block ID to unfold * Return value ```json @@ -1380,7 +1411,8 @@ Remove a document by `id`: "timeout": 7000 } ``` - * `timeout`: The duration of the message display in milliseconds. This field can be omitted, the default is 7000 milliseconds + * `timeout`: The duration of the message display in milliseconds. This field can be omitted, the default is 7000 + milliseconds * Return value ```json @@ -1405,7 +1437,8 @@ Remove a document by `id`: "timeout": 7000 } ``` - * `timeout`: The duration of the message display in milliseconds. This field can be omitted, the default is 7000 milliseconds + * `timeout`: The duration of the message display in milliseconds. This field can be omitted, the default is 7000 + milliseconds * Return value ```json @@ -1457,7 +1490,8 @@ Remove a document by `id`: * `base32` | `base32-std` * `base32-hex` * `hex` - * `responseEncoding`: The encoding scheme used by `body` in response data, default is `text`, optional values are as follows + * `responseEncoding`: The encoding scheme used by `body` in response data, default is `text`, optional values are as + follows * `text` * `base64` | `base64-std` @@ -1484,7 +1518,8 @@ Remove a document by `id`: } ``` - * `bodyEncoding`: The encoding scheme used by `body`, is consistent with field `responseEncoding` in request, default is `text`, optional values are as follows + * `bodyEncoding`: The encoding scheme used by `body`, is consistent with field `responseEncoding` in request, + default is `text`, optional values are as follows * `text` * `base64` | `base64-std` diff --git a/API_zh_CN.md b/API_zh_CN.md index 31780b93c..e97735a79 100644 --- a/API_zh_CN.md +++ b/API_zh_CN.md @@ -381,8 +381,8 @@ } ``` - * `id`:文档 ID - * `title`:新标题 + * `id`:文档 ID + * `title`:新标题 * 返回值 ```json @@ -416,7 +416,7 @@ "data": null } ``` - + 通过 `id` 删除文档: * `/api/filetree/removeDocByID` @@ -428,7 +428,7 @@ } ``` - * `id`:文档 ID + * `id`:文档 ID * 返回值 ```json @@ -465,6 +465,30 @@ } ``` +通过 `id` 移动文档: + +* `/api/filetree/moveDocsByID` +* 参数 + + ```json + { + "fromIDs": ["20210917220056-yxtyl7i"], + "toID": "20210817205410-2kvfpfn" + } + ``` + + * `fromIDs`:源文档 ID + * `toID`:目标父文档 ID +* 返回值 + + ```json + { + "code": 0, + "msg": "", + "data": null + } + ``` + ### 根据路径获取人类可读路径 * `/api/filetree/getHPathByPath` @@ -522,7 +546,7 @@ } ``` - * `id`:块 ID + * `id`:块 ID * 返回值 ```json @@ -545,8 +569,8 @@ } ``` - * `path`:人类可读路径 - * `notebook`:笔记本 ID + * `path`:人类可读路径 + * `notebook`:笔记本 ID * 返回值 ```json @@ -860,7 +884,7 @@ } ``` - * `id`:待折叠块的 ID + * `id`:待折叠块的 ID * 返回值 ```json @@ -882,7 +906,7 @@ } ``` - * `id`:待展开块的 ID + * `id`:待展开块的 ID * 返回值 ```json @@ -1063,7 +1087,7 @@ ] } ``` - + ### 提交事务 * `/api/sqlite/flushTransaction` diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json index 473285856..dd63d64f2 100644 --- a/app/appearance/langs/de_DE.json +++ b/app/appearance/langs/de_DE.json @@ -1,7 +1,7 @@ { "empty": "Leer", "newRowInRelation": "Erstellen Sie einen neuen Eintrag in ${x} ${y}", - "keyContent": "Schlüsselinhalt", + "copyKeyContent": "Primärschlüsseltext kopieren", "addDesc": "Beschreibung hinzufügen", "dataRepoAutoPurgeIndexRetentionDays": "Daten-Snapshot-Aufbewahrungstage", "dataRepoAutoPurgeRetentionIndexesDaily": "Daten-Snapshots pro Tag", diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 053e6076e..d9fc82c34 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,7 +1,7 @@ { "empty": "Empty", "newRowInRelation": "Create a new entry in ${x} ${y}", - "keyContent": "Key content", + "copyKeyContent": "Copy primary key text", "addDesc": "Add description", "dataRepoAutoPurgeIndexRetentionDays": "Data snapshot retention days", "dataRepoAutoPurgeRetentionIndexesDaily": "Data snapshots per day", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 9b352987b..3797cdff4 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,7 +1,7 @@ { "empty": "Vacío", "newRowInRelation": "Crear una nueva entrada en ${x} ${y}", - "keyContent": "Contenido de la clave", + "copyKeyContent": "Copiar texto de la clave principal", "addDesc": "Agregar descripción", "dataRepoAutoPurgeIndexRetentionDays": "Días de retención de instantáneas de datos", "dataRepoAutoPurgeRetentionIndexesDaily": "Número de instantáneas de datos por día", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 87ba3b6f0..2ffa9d106 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,6 +1,6 @@ { "newRowInRelation": "Créer une nouvelle entrée dans ${x} ${y}", - "keyContent": "Contenu de la clé", + "copyKeyContent": "Copier le texte de la clé principale", "addDesc": "Ajouter une description", "dataRepoAutoPurgeIndexRetentionDays": "Jours de rétention des instantanés de données", "dataRepoAutoPurgeRetentionIndexesDaily": "Nombre d'instantanés de données par jour", diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json index 6e72a3a48..f506c0a91 100644 --- a/app/appearance/langs/he_IL.json +++ b/app/appearance/langs/he_IL.json @@ -1,7 +1,7 @@ { "empty": "ריק", "newRowInRelation": "צור ערך חדש ב-${x} ${y}", - "keyContent": "תוכן המפתח", + "copyKeyContent": "העתק טקסט מפתח ראשי", "addDesc": "הוסף תיאור", "dataRepoAutoPurgeIndexRetentionDays": "ימי שמירת תמונות נתונים", "dataRepoAutoPurgeRetentionIndexesDaily": "מספר תמונות נתונים ביום", diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json index a46a8cacb..658fc94a8 100644 --- a/app/appearance/langs/it_IT.json +++ b/app/appearance/langs/it_IT.json @@ -1,7 +1,7 @@ { "empty": "Vuoto", "newRowInRelation": "Crea una nuova voce in ${x} ${y}", - "keyContent": "Contenuto della chiave", + "copyKeyContent": "Copia il testo della chiave primaria", "addDesc": "Aggiungi descrizione", "dataRepoAutoPurgeIndexRetentionDays": "Giorni di conservazione degli snapshot dei dati", "dataRepoAutoPurgeRetentionIndexesDaily": "Numero di snapshot dei dati al giorno", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index f19ad5912..a751003bd 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -1,7 +1,7 @@ { "empty": "空白", "newRowInRelation": "${x} に新しい項目を作成 ${y}", - "keyContent": "キーコンテンツ", + "copyKeyContent": "主キーのテキストをコピー", "addDesc": "説明を追加", "dataRepoAutoPurgeIndexRetentionDays": "データスナップショットの保持日数", "dataRepoAutoPurgeRetentionIndexesDaily": "データスナップショットの毎日の保持数", diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json index 2275f0410..d65672a72 100644 --- a/app/appearance/langs/pl_PL.json +++ b/app/appearance/langs/pl_PL.json @@ -1,7 +1,7 @@ { "empty": "Pusty", "newRowInRelation": "Utwórz nowy wpis w ${x} ${y}", - "keyContent": "Zawartość klucza", + "copyKeyContent": "Skopiuj tekst klucza głównego", "addDesc": "Dodaj opis", "dataRepoAutoPurgeIndexRetentionDays": "Dni przechowywania migawek danych", "dataRepoAutoPurgeRetentionIndexesDaily": "Liczba migawek danych dziennie", diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json index 9a3009193..992b5a6eb 100644 --- a/app/appearance/langs/ru_RU.json +++ b/app/appearance/langs/ru_RU.json @@ -1,7 +1,7 @@ { "empty": "Пусто", "newRowInRelation": "Создать новую запись в ${x} ${y}", - "keyContent": "Содержимое ключа", + "copyKeyContent": "Скопировать текст основного ключа", "addDesc": "Добавить описание", "dataRepoAutoPurgeIndexRetentionDays": "Срок хранения снимков данных", "dataRepoAutoPurgeRetentionIndexesDaily": "Количество снимков данных в день", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 1c87a79f2..525edf846 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,7 +1,7 @@ { "empty": "空白", "newRowInRelation": "在 ${x} 中新建條目 ${y}", - "keyContent": "主鍵內容", + "copyKeyContent": "複製主鍵文本", "addDesc": "添加描述", "dataRepoAutoPurgeIndexRetentionDays": "數據快照保留天數", "dataRepoAutoPurgeRetentionIndexesDaily": "數據快照每天保留個數", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 164537d63..ab8073fb6 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,7 +1,7 @@ { "empty": "空白", "newRowInRelation": "在 ${x} 中新建条目 ${y}", - "keyContent": "主键内容", + "copyKeyContent": "复制主键文本", "addDesc": "添加描述", "dataRepoAutoPurgeIndexRetentionDays": "数据快照保留天数", "dataRepoAutoPurgeRetentionIndexesDaily": "数据快照每天保留个数", diff --git a/app/src/protyle/render/av/action.ts b/app/src/protyle/render/av/action.ts index efe631aec..df03453df 100644 --- a/app/src/protyle/render/av/action.ts +++ b/app/src/protyle/render/av/action.ts @@ -298,7 +298,7 @@ export const avContextmenu = (protyle: IProtyle, rowElement: HTMLElement, positi }); const copyMenu: IMenu[] = [{ iconHTML: "", - label: window.siyuan.languages.keyContent, + label: window.siyuan.languages.copyKeyContent, click() { let text = ""; rowElements.forEach((item, i) => { diff --git a/kernel/api/filetree.go b/kernel/api/filetree.go index 614d32cf2..030c8dc3e 100644 --- a/kernel/api/filetree.go +++ b/kernel/api/filetree.go @@ -472,9 +472,7 @@ func moveDocs(c *gin.Context) { if util.InvalidIDPattern(toNotebook, ret) { return } - callback := arg["callback"] - err := model.MoveDocs(fromPaths, toNotebook, toPath, callback) if err != nil { ret.Code = -1 @@ -484,6 +482,61 @@ func moveDocs(c *gin.Context) { } } +func moveDocsByID(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + fromIDsArg := arg["fromIDs"].([]any) + var fromIDs []string + for _, fromIDArg := range fromIDsArg { + fromID := fromIDArg.(string) + if util.InvalidIDPattern(fromID, ret) { + return + } + fromIDs = append(fromIDs, fromID) + } + toID := arg["toID"].(string) + if util.InvalidIDPattern(toID, ret) { + return + } + + var fromPaths []string + for _, fromID := range fromIDs { + tree, err := model.LoadTreeByBlockID(fromID) + if err != nil { + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 7000} + return + } + fromPaths = append(fromPaths, tree.Path) + } + fromPaths = gulu.Str.RemoveDuplicatedElem(fromPaths) + + toTree, err := model.LoadTreeByBlockID(toID) + if err != nil { + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 7000} + return + } + toNotebook := toTree.Box + toPath := toTree.Path + callback := arg["callback"] + err = model.MoveDocs(fromPaths, toNotebook, toPath, callback) + if err != nil { + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 7000} + return + } +} + func removeDoc(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) @@ -1061,8 +1114,14 @@ func getDoc(c *gin.Context) { if nil != isBacklinkArg { isBacklink = isBacklinkArg.(bool) } + highlightArg := arg["highlight"] + highlight := true + if nil != highlightArg { + highlight = highlightArg.(bool) + } - blockCount, content, parentID, parent2ID, rootID, typ, eof, scroll, boxID, docPath, isBacklinkExpand, err := model.GetDoc(startID, endID, id, index, query, queryTypes, queryMethod, mode, size, isBacklink) + blockCount, content, parentID, parent2ID, rootID, typ, eof, scroll, boxID, docPath, isBacklinkExpand, err := + model.GetDoc(startID, endID, id, index, query, queryTypes, queryMethod, mode, size, isBacklink, highlight) if model.ErrBlockNotFound == err { ret.Code = 3 return diff --git a/kernel/api/history.go b/kernel/api/history.go index 220bbfec1..29014224e 100644 --- a/kernel/api/history.go +++ b/kernel/api/history.go @@ -145,7 +145,11 @@ func getDocHistoryContent(c *gin.Context) { if nil != k { keyword = k.(string) } - id, rootID, content, isLargeDoc, err := model.GetDocHistoryContent(historyPath, keyword) + highlight := true + if val, ok := arg["highlight"]; ok { + highlight = val.(bool) + } + id, rootID, content, isLargeDoc, err := model.GetDocHistoryContent(historyPath, keyword, highlight) if err != nil { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/api/ref.go b/kernel/api/ref.go index 9a06f44e7..4de046c81 100644 --- a/kernel/api/ref.go +++ b/kernel/api/ref.go @@ -56,7 +56,11 @@ func getBackmentionDoc(c *gin.Context) { if val, ok := arg["containChildren"]; ok { containChildren = val.(bool) } - backlinks := model.GetBackmentionDoc(defID, refTreeID, keyword, containChildren) + highlight := true + if val, ok := arg["highlight"]; ok { + highlight = val.(bool) + } + backlinks := model.GetBackmentionDoc(defID, refTreeID, keyword, containChildren, highlight) ret.Data = map[string]interface{}{ "backmentions": backlinks, } @@ -78,7 +82,11 @@ func getBacklinkDoc(c *gin.Context) { if val, ok := arg["containChildren"]; ok { containChildren = val.(bool) } - backlinks := model.GetBacklinkDoc(defID, refTreeID, keyword, containChildren) + highlight := true + if val, ok := arg["highlight"]; ok { + highlight = val.(bool) + } + backlinks := model.GetBacklinkDoc(defID, refTreeID, keyword, containChildren, highlight) ret.Data = map[string]interface{}{ "backlinks": backlinks, } diff --git a/kernel/api/router.go b/kernel/api/router.go index ec2d5dbd0..da62f40ed 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -109,6 +109,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/filetree/removeDocByID", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, removeDocByID) ginServer.Handle("POST", "/api/filetree/removeDocs", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, removeDocs) ginServer.Handle("POST", "/api/filetree/moveDocs", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, moveDocs) + ginServer.Handle("POST", "/api/filetree/moveDocsByID", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, moveDocsByID) ginServer.Handle("POST", "/api/filetree/duplicateDoc", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, duplicateDoc) ginServer.Handle("POST", "/api/filetree/getHPathByPath", model.CheckAuth, getHPathByPath) ginServer.Handle("POST", "/api/filetree/getHPathsByPaths", model.CheckAuth, getHPathsByPaths) diff --git a/kernel/model/backlink.go b/kernel/model/backlink.go index 04ef857bb..9bf0b9d50 100644 --- a/kernel/model/backlink.go +++ b/kernel/model/backlink.go @@ -62,7 +62,7 @@ type Backlink struct { node *ast.Node // 仅用于按文档内容顺序排序 } -func GetBackmentionDoc(defID, refTreeID, keyword string, containChildren bool) (ret []*Backlink) { +func GetBackmentionDoc(defID, refTreeID, keyword string, containChildren, highlight bool) (ret []*Backlink) { var keywords []string keyword = strings.TrimSpace(keyword) if "" != keyword { @@ -102,7 +102,7 @@ func GetBackmentionDoc(defID, refTreeID, keyword string, containChildren bool) ( var refTree *parse.Tree trees := filesys.LoadTrees(mentionBlockIDs) for id, tree := range trees { - backlink := buildBacklink(id, tree, mentionKeywords, luteEngine) + backlink := buildBacklink(id, tree, mentionKeywords, highlight, luteEngine) if nil != backlink { ret = append(ret, backlink) } @@ -118,7 +118,7 @@ func GetBackmentionDoc(defID, refTreeID, keyword string, containChildren bool) ( return } -func GetBacklinkDoc(defID, refTreeID, keyword string, containChildren bool) (ret []*Backlink) { +func GetBacklinkDoc(defID, refTreeID, keyword string, containChildren, highlight bool) (ret []*Backlink) { var keywords []string keyword = strings.TrimSpace(keyword) if "" != keyword { @@ -150,7 +150,7 @@ func GetBacklinkDoc(defID, refTreeID, keyword string, containChildren bool) (ret luteEngine := util.NewLute() for _, linkRef := range linkRefs { - backlink := buildBacklink(linkRef.ID, refTree, keywords, luteEngine) + backlink := buildBacklink(linkRef.ID, refTree, keywords, highlight, luteEngine) if nil != backlink { ret = append(ret, backlink) } @@ -191,7 +191,7 @@ func sortBacklinks(backlinks []*Backlink, tree *parse.Tree) { }) } -func buildBacklink(refID string, refTree *parse.Tree, keywords []string, luteEngine *lute.Lute) (ret *Backlink) { +func buildBacklink(refID string, refTree *parse.Tree, keywords []string, highlight bool, luteEngine *lute.Lute) (ret *Backlink) { n := treenode.GetNodeInTree(refTree, refID) if nil == n { return @@ -199,7 +199,7 @@ func buildBacklink(refID string, refTree *parse.Tree, keywords []string, luteEng renderNodes, expand := getBacklinkRenderNodes(n) - if 0 < len(keywords) { + if highlight && 0 < len(keywords) { for _, renderNode := range renderNodes { var unlinks []*ast.Node diff --git a/kernel/model/file.go b/kernel/model/file.go index 34b23320e..b8a343651 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -599,7 +599,7 @@ func StatTree(id string) (ret *util.BlockStatResult) { } } -func GetDoc(startID, endID, id string, index int, query string, queryTypes map[string]bool, queryMethod, mode int, size int, isBacklink bool) (blockCount int, dom, parentID, parent2ID, rootID, typ string, eof, scroll bool, boxID, docPath string, isBacklinkExpand bool, err error) { +func GetDoc(startID, endID, id string, index int, query string, queryTypes map[string]bool, queryMethod, mode int, size int, isBacklink, highlight bool) (blockCount int, dom, parentID, parent2ID, rootID, typ string, eof, scroll bool, boxID, docPath string, isBacklinkExpand bool, err error) { //os.MkdirAll("pprof", 0755) //cpuProfile, _ := os.Create("pprof/GetDoc") //pprof.StartCPUProfile(cpuProfile) @@ -844,7 +844,7 @@ func GetDoc(startID, endID, id string, index int, query string, queryTypes map[s } } - if 0 < len(keywords) { + if highlight && 0 < len(keywords) { hitBlock := false for p := n.Parent; nil != p; p = p.Parent { if p.ID == id { diff --git a/kernel/model/history.go b/kernel/model/history.go index a49c1cc05..4940586f3 100644 --- a/kernel/model/history.go +++ b/kernel/model/history.go @@ -147,7 +147,7 @@ func ClearWorkspaceHistory() (err error) { return } -func GetDocHistoryContent(historyPath, keyword string) (id, rootID, content string, isLargeDoc bool, err error) { +func GetDocHistoryContent(historyPath, keyword string, highlight bool) (id, rootID, content string, isLargeDoc bool, err error) { if !gulu.File.IsExist(historyPath) { logging.LogWarnf("doc history [%s] not exist", historyPath) return @@ -185,7 +185,7 @@ func GetDocHistoryContent(historyPath, keyword string) (id, rootID, content stri n.RemoveIALAttr("heading-fold") n.RemoveIALAttr("fold") - if 0 < len(keywords) { + if highlight && 0 < len(keywords) { if markReplaceSpan(n, &unlinks, keywords, search.MarkDataType, luteEngine) { return ast.WalkContinue }