Home

ugit @main - refs - log -
-
https://git.jolheiser.com/ugit.git
The code powering this h*ckin' site
ugit / internal / html / repo_tree.go
- raw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package html

import (
	"fmt"

	"go.jolheiser.com/ugit/internal/git"
	. "maragu.dev/gomponents"
	. "maragu.dev/gomponents/html"
)

type RepoTreeContext struct {
	BaseContext
	RepoHeaderComponentContext
	RepoBreadcrumbComponentContext
	RepoTreeComponentContext
	ReadmeComponentContext
	Description string
}

type RepoTreeComponentContext struct {
	Repo string
	Ref  string
	Tree []git.FileInfo
	Back string
}

func slashDir(name string, isDir bool) string {
	if isDir {
		return name + "/"
	}
	return name
}

func repoTreeComponent(rtcc RepoTreeComponentContext) Node {
	return Div(Class("grid grid-cols-3 sm:grid-cols-8 text-text py-5 rounded px-5 gap-x-3 gap-y-1 bg-base dark:bg-base/50"),
		If(rtcc.Back != "", Group([]Node{
			Div(Class("col-span-2")),
			Div(Class("sm:col-span-6"),
				A(Class("underline decoration-text/50 decoration-dashed hover:decoration-solid"), Href(fmt.Sprintf("/%s/tree/%s/%s", rtcc.Repo, rtcc.Ref, rtcc.Back)), Text("..")),
			),
		})),
		Map(rtcc.Tree, func(fi git.FileInfo) Node {
			return Group([]Node{
				Div(Class("sm:col-span-1 break-keep"), Text(fi.Mode)),
				Div(Class("sm:col-span-1 text-right"), Text(fi.Size)),
				Div(Class("sm:col-span-6 overflow-hidden text-ellipsis"),
					A(Class("underline decoration-text/50 decoration-dashed hover:decoration-solid"), Href(fmt.Sprintf("/%s/tree/%s/%s", rtcc.Repo, rtcc.Ref, fi.Path)), Text(slashDir(fi.Name(), fi.IsDir))),
				),
			})
		}),
	)
}

func RepoTreeTemplate(rtc RepoTreeContext) Node {
	return base(rtc.BaseContext, []Node{
		repoHeaderComponent(rtc.RepoHeaderComponentContext),
		repoBreadcrumbComponent(rtc.RepoBreadcrumbComponentContext),
		repoTreeComponent(rtc.RepoTreeComponentContext),
		readmeComponent(rtc.ReadmeComponentContext),
	}...)
}