ultisuite-backend/internal/api/richtext/paths.go
2026-06-09 14:30:34 +02:00

75 lines
1.4 KiB
Go

package richtext
import (
"strings"
)
const UltidocExtension = "ultidoc.json"
// Config holds rich-text editor integration settings.
type Config struct {
Enabled bool
HocuspocusPublicURL string
HocuspocusSecret string
APIInternalURL string
StorageMode string // sidecar | overwrite
ExportMirrorFormat string // "" | docx
}
func normalizePath(p string) string {
p = strings.TrimSpace(p)
if p == "" {
return "/"
}
if !strings.HasPrefix(p, "/") {
p = "/" + p
}
return strings.ReplaceAll(p, "//", "/")
}
func fileNameFromPath(p string) string {
p = normalizePath(p)
if p == "/" {
return ""
}
if i := strings.LastIndex(p, "/"); i >= 0 {
return p[i+1:]
}
return p
}
func isUltidocPath(path string) bool {
return strings.HasSuffix(strings.ToLower(path), "."+UltidocExtension)
}
func sidecarPathForSource(sourcePath string) string {
sourcePath = normalizePath(sourcePath)
dir := "/"
name := strings.TrimPrefix(sourcePath, "/")
if i := strings.LastIndex(name, "/"); i >= 0 {
dir = "/" + name[:i]
name = name[i+1:]
}
base := name
if dot := strings.LastIndex(name, "."); dot > 0 {
base = name[:dot]
}
sidecar := base + "." + UltidocExtension
if dir == "/" {
return "/" + sidecar
}
return dir + "/" + sidecar
}
func parentDir(path string) string {
path = normalizePath(path)
if path == "/" {
return "/"
}
idx := strings.LastIndex(path, "/")
if idx <= 0 {
return "/"
}
return path[:idx]
}