package filetree import ( "fmt" "local/notes-server/config" "os" "path" "strings" ) type Path struct { Local string HREF string Base string BaseHREF string } func NewPathFromLocal(p string) Path { splits := strings.SplitN(p, path.Base(config.Root)+"/", 2) href := splits[0] if len(splits) > 1 && (splits[0] == "" || splits[0] == "/") { href = splits[1] } href = path.Join("/notes", href) return NewPathFromURL(href) } func NewPathFromURL(p string) Path { p = path.Clean(p) base := path.Base(p) href := p local := strings.TrimPrefix(p, "/") locals := strings.SplitN(local, "/", 2) local = locals[0] if len(locals) > 1 { local = locals[1] } baseHREF := local local = path.Join(config.Root, local) if strings.Trim(p, "/") == base { local = config.Root baseHREF = "/" } return Path{ Base: base, HREF: href, Local: local, BaseHREF: baseHREF, } } func (p Path) MultiLink() string { href := p.BaseHREF href = strings.TrimPrefix(href, "/") href = strings.TrimSuffix(href, "/") href = path.Join("notes/", href) segments := strings.Split(href, "/") full := "" for i := range segments { href := "/" + strings.Join(segments[:i], "/") + "/" href += segments[i] href = path.Clean(href) base := segments[i] add := fmt.Sprintf(`/%s`, href, base) full += add } return full } func (p Path) LI() string { return fmt.Sprintf(`