commit 78d6c27c8940da32a6de8e64327c86f74fdaa2eb Author: adminoo <git@kadath.corp> Date: Wed Feb 4 12:59:22 2026 +0100 feat: freebsd log rotation config thingie commit 55af4e6c70122e679272ed247c26e04b1247f694 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 12:58:43 2026 +0100 feat: embed templates, static resolution commit 29c917f929a7378ec29c54315ee2e9f420747787 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 10:44:34 2026 +0100 feat: set log file path commit 294fd3d1549979eab63587ceec6ff5d0978e9afc Author: adminoo <git@kadath.corp> Date: Wed Feb 4 10:23:53 2026 +0100 feat: logging HTTP request commit c9ae80b240d58e1abed7ae3b7b2c3b283a31f1a1 Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:54:05 2026 +0100 feat: freebsd-specific compile target and scripts commit 86ca154dedd19aa1fe5f571c445dcf17a8396bfa Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:25:16 2026 +0100 feat: mobile friendly CSS commit 199f4319e0b08a4b6d595d7eb3effb6db6c7beec Author: adminoo <git@kadath.corp> Date: Wed Feb 4 09:25:03 2026 +0100 feat: persisting rendered note commit 865e258237e45d7c542685a4653bcad3c5af259d Author: adminoo <git@kadath.corp> Date: Wed Feb 4 08:06:38 2026 +0100 fix: grouping notes by folder commit 242d1d074c92461f38212b033c7a9e383f9dc550 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 16:52:50 2026 +0100 feat: storage layer logic - Prune notes from db not matching current folder structure at start - Detect file system deletion on start by comparing in-db notes - Prevent updating of in-db notes at start if modification time is not newer - Delete by path commit d75d46bc1ab22bd990d0fdc307e571fe52f0dd99 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 15:27:07 2026 +0100 feat: group notes by root folders commit e1e25a938e717599332f7b40a449d9bb854b673a Author: adminoo <git@kadath.corp> Date: Tue Feb 3 14:24:37 2026 +0100 feat: size in kilobytes commit 61220272a2df2b66c2b8e356ba359ed01de3bd12 Author: adminoo <git@kadath.corp> Date: Tue Feb 3 14:19:40 2026 +0100 feat: styling inputs
83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package note
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Note struct {
|
|
ID string
|
|
Path string
|
|
Title string
|
|
Content string
|
|
Size int64
|
|
// HTMLContent string
|
|
// Directly in Note
|
|
Tags []string
|
|
UpdatedAt time.Time
|
|
Published bool
|
|
}
|
|
|
|
func NewNote() *Note {
|
|
return &Note{}
|
|
}
|
|
|
|
func formatDateRep(date time.Time) string {
|
|
return date.Format("2006-01-02 15:04:05")
|
|
}
|
|
|
|
func (n *Note) GetUpdateDateRep() string {
|
|
return formatDateRep(n.UpdatedAt)
|
|
}
|
|
|
|
func (n *Note) GetSizeKB() string {
|
|
if n.Size <= 0 {
|
|
return "0 KB"
|
|
}
|
|
kb := float64(n.Size) / 1024.0
|
|
return fmt.Sprintf("%.1f KB", kb)
|
|
}
|
|
|
|
// ExtractTitle return the first level heading content ('# title')
|
|
func ExtractTitle(mkd string) string {
|
|
if mkd == "" {
|
|
return ""
|
|
}
|
|
|
|
lines := strings.Split(mkd, "\n")
|
|
for _, line := range lines {
|
|
line = strings.TrimSpace(line)
|
|
if strings.HasPrefix(line, "# ") {
|
|
// Extract title from # heading
|
|
title := strings.TrimPrefix(line, "# ")
|
|
title = strings.TrimSpace(title)
|
|
// Remove common markdown formatting
|
|
title = removeMarkdownFormatting(title)
|
|
return title
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// removeMarkdownFormatting removes common markdown formatting from text
|
|
func removeMarkdownFormatting(text string) string {
|
|
// Remove **bold** and *italic* formatting
|
|
result := text
|
|
result = strings.ReplaceAll(result, "**", "")
|
|
result = strings.ReplaceAll(result, "*", "")
|
|
result = strings.ReplaceAll(result, "_", "")
|
|
result = strings.ReplaceAll(result, "`", "")
|
|
result = strings.ReplaceAll(result, "~~", "")
|
|
|
|
// Clean up multiple spaces
|
|
result = strings.Join(strings.Fields(result), " ")
|
|
|
|
return result
|
|
}
|
|
|
|
func GenerateNoteID(path string) string {
|
|
return fmt.Sprintf("%x", sha256.Sum256([]byte(path)))[:10]
|
|
}
|