tree: directories first, add size column, fix ..

Signed-off-by: Derek Stevens <nilix@nilfm.cc>
This commit is contained in:
Derek Stevens 2023-02-01 23:01:36 -07:00 committed by Anirudh Oppiliappan
parent ee800624f5
commit b78354aee2
No known key found for this signature in database
GPG Key ID: 8A93F96F78C5D4C4
4 changed files with 30 additions and 15 deletions

View File

@ -19,7 +19,7 @@ func (g *GitRepo) FileTree(path string) ([]NiceTree, error) {
} }
if path == "" { if path == "" {
files = makeNiceTree(tree.Entries) files = makeNiceTree(tree)
} else { } else {
o, err := tree.FindEntry(path) o, err := tree.FindEntry(path)
if err != nil { if err != nil {
@ -32,7 +32,7 @@ func (g *GitRepo) FileTree(path string) ([]NiceTree, error) {
return nil, err return nil, err
} }
files = makeNiceTree(subtree.Entries) files = makeNiceTree(subtree)
} }
} }
@ -48,15 +48,17 @@ type NiceTree struct {
IsSubtree bool IsSubtree bool
} }
func makeNiceTree(es []object.TreeEntry) []NiceTree { func makeNiceTree(t *object.Tree) []NiceTree {
nts := []NiceTree{} nts := []NiceTree{}
for _, e := range es { for _, e := range t.Entries {
mode, _ := e.Mode.ToOSFileMode() mode, _ := e.Mode.ToOSFileMode()
sz, _ := t.Size(e.Name)
nts = append(nts, NiceTree{ nts = append(nts, NiceTree{
Name: e.Name, Name: e.Name,
Mode: mode.String(), Mode: mode.String(),
IsFile: e.Mode.IsFile(), IsFile: e.Mode.IsFile(),
Size: sz,
}) })
} }

View File

@ -254,6 +254,7 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
data["name"] = name data["name"] = name
data["ref"] = ref data["ref"] = ref
data["desc"] = getDescription(path) data["desc"] = getDescription(path)
data["dotdot"] = filepath.Dir(path)
if err := t.ExecuteTemplate(w, "log", data); err != nil { if err := t.ExecuteTemplate(w, "log", data); err != nil {
log.Println(err) log.Println(err)

View File

@ -125,7 +125,7 @@ a:hover {
.tree { .tree {
display: grid; display: grid;
grid-template-columns: 8em minmax(0, 1fr); grid-template-columns: 10ch auto 1fr;
grid-row-gap: 0.5em; grid-row-gap: 0.5em;
grid-column-gap: 1em; grid-column-gap: 1em;
min-width: 0; min-width: 0;
@ -145,9 +145,12 @@ a:hover {
white-space: pre-wrap; white-space: pre-wrap;
} }
.mode { .mode, .size {
font-family: var(--mono-font); font-family: var(--mono-font);
} }
.size {
text-align: right;
}
.readme pre { .readme pre {
white-space: pre-wrap; white-space: pre-wrap;

View File

@ -18,26 +18,35 @@
<div class="tree"> <div class="tree">
{{ if $parent }} {{ if $parent }}
<div></div> <div></div>
<div><a href="../">..</a></div> <div></div>
<div><a href="/{{ $repo }}/tree/{{ $ref }}/{{ .dotdot }}">..</a></div>
{{ end }} {{ end }}
{{ range .files }} {{ range .files }}
{{ if not .IsFile }}
<div class="mode">{{ .Mode }}</div> <div class="mode">{{ .Mode }}</div>
<div class="size">{{ .Size }}</div>
<div> <div>
{{ if .IsFile }}
{{ if $parent }}
<a href="/{{ $repo }}/blob/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}</a>
{{ else }}
<a href="/{{ $repo }}/blob/{{ $ref }}/{{ .Name }}">{{ .Name }}</a>
{{ end }}
{{ else }}
{{ if $parent }} {{ if $parent }}
<a href="/{{ $repo }}/tree/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}/</a> <a href="/{{ $repo }}/tree/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}/</a>
{{ else }} {{ else }}
<a href="/{{ $repo }}/tree/{{ $ref }}/{{ .Name }}">{{ .Name }}/</a> <a href="/{{ $repo }}/tree/{{ $ref }}/{{ .Name }}">{{ .Name }}/</a>
{{ end }} {{ end }}
</div>
{{ end }}
{{ end }}
{{ range .files }}
{{ if .IsFile }}
<div class="mode">{{ .Mode }}</div>
<div class="size">{{ .Size }}</div>
<div>
{{ if $parent }}
<a href="/{{ $repo }}/blob/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}</a>
{{ else }}
<a href="/{{ $repo }}/blob/{{ $ref }}/{{ .Name }}">{{ .Name }}</a>
{{ end }} {{ end }}
</div> </div>
{{ end }} {{ end }}
{{ end }}
</div> </div>
<article> <article>
<pre> <pre>