caddy_file_listing/template.html

101 lines
4.5 KiB
HTML

<!DOCTYPE html>
{{/*
This template is based on the file provided at
https://github.com/caddyserver/caddy/blob/master/modules/caddyhttp/fileserver/browse.html
Features:
- Simpler design than the original template
- README file rendering
- embed mode (activated by appending a '?embed' query)
*/}}
<html lang="en">
<head>
<title>{{html .Name}}</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/style.css" rel="stylesheet">
</head>
<body>
{{if (not .Req.URL.Query.embed)}}
<header>
<h1>
{{range $i, $crumb := .Breadcrumbs}}<a href="{{html $crumb.Link}}">{{html $crumb.Text}}</a>{{if ne $i 0}}/{{end}}{{end}}
</h1>
</header>
{{end}}
{{$embed := .Req.URL.Query.embed}}
<main>
<div class="listing">
<table>
<thead>
<th>
{{- if and (eq .Sort "name") (ne .Order "desc")}}
<a href="?sort=name&order=desc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Name</a>
{{- else if and (eq .Sort "name") (ne .Order "asc")}}
<a href="?sort=name&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Name</a>
{{- else}}
<a href="?sort=name&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Name </a>
{{- end}}
</th>
<th>
{{- if and (eq .Sort "size") (ne .Order "desc")}}
<a href="?sort=size&order=desc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Size</a>
{{- else if and (eq .Sort "size") (ne .Order "asc")}}
<a href="?sort=size&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Size</a>
{{- else}}
<a href="?sort=size&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Size</a>
{{- end}}
</th>
<th class="hideable">
{{- if and (eq .Sort "time") (ne .Order "desc")}}
<a href="?sort=time&order=desc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Modified</a>
{{- else if and (eq .Sort "time") (ne .Order "asc")}}
<a href="?sort=time&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Modified</a>
{{- else}}
<a href="?sort=time&order=asc{{if ne 0 .Limit}}&limit={{.Limit}}{{end}}{{if ne 0 .Offset}}&offset={{.Offset}}{{end}}{{if $embed}}&embed{{end}}">Modified</a>
{{- end}}
</th>
</thead>
<tbody>
{{- if .CanGoUp}}
<td><a href="..">..</a></td>
<td>&mdash;</td>
<td class="hideable">&mdash;</td>
</tr>
{{- end}}
{{- range .Items}}
<tr class="file">
<td>
<a href="{{html .URL}}" target="_top">
<span class="name">{{html .Name}}</span>
</a>
</td>
{{- if .IsDir}}
<td data-order="-1">&mdash;</td>
{{- else}}
<td data-order="{{.Size}}">{{.HumanSize}}</td>
{{- end}}
<td class="hideable"><time datetime="{{.HumanModTime "2006-01-02T15:04:05Z"}}">{{.HumanModTime "01/02/2006 03:04:05 PM -07:00"}}</time></td>
</tr>
{{- end}}
</tbody>
</table>
</div>
{{if (not .Req.URL.Query.embed)}}
{{ $readmeFilePath := list (placeholder "http.request.uri.path") "README" | join ""}}
{{ $altReadmeFilePath := list (placeholder "http.request.uri.path") "README.md" | join ""}}
{{if (fileExists $readmeFilePath )}}
<div class="readmeFile">
<div class="readmeHeader">README</div>
{{markdown (include $readmeFilePath)}}
</div>
{{- else if (fileExists $altReadmeFilePath)}}
<div class="readmeFile">
<div class="readmeHeader">README</div>
{{markdown (include $altReadmeFilePath)}}
</div>
{{end}}
{{end}}
</main>
</body>
</html>