Show attachment size on entry page
This commit is contained in:
parent
912a98788e
commit
b3869a7833
4 changed files with 43 additions and 9 deletions
|
@ -31,10 +31,11 @@ type funcMap struct {
|
||||||
// Map returns a map of template functions that are compiled during template parsing.
|
// Map returns a map of template functions that are compiled during template parsing.
|
||||||
func (f *funcMap) Map() template.FuncMap {
|
func (f *funcMap) Map() template.FuncMap {
|
||||||
return template.FuncMap{
|
return template.FuncMap{
|
||||||
"dict": dict,
|
"formatFileSize": formatFileSize,
|
||||||
"hasKey": hasKey,
|
"dict": dict,
|
||||||
"truncate": truncate,
|
"hasKey": hasKey,
|
||||||
"isEmail": isEmail,
|
"truncate": truncate,
|
||||||
|
"isEmail": isEmail,
|
||||||
"baseURL": func() string {
|
"baseURL": func() string {
|
||||||
return config.Opts.BaseURL()
|
return config.Opts.BaseURL()
|
||||||
},
|
},
|
||||||
|
@ -200,3 +201,17 @@ func proxify(router *mux.Router, link string) string {
|
||||||
// We use base64 url encoding to avoid slash in the URL.
|
// We use base64 url encoding to avoid slash in the URL.
|
||||||
return route.Path(router, "proxy", "encodedURL", base64.URLEncoding.EncodeToString([]byte(link)))
|
return route.Path(router, "proxy", "encodedURL", base64.URLEncoding.EncodeToString([]byte(link)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatFileSize(b int64) string {
|
||||||
|
const unit = 1024
|
||||||
|
if b < unit {
|
||||||
|
return fmt.Sprintf("%d B", b)
|
||||||
|
}
|
||||||
|
div, exp := int64(unit), 0
|
||||||
|
for n := b / unit; n >= unit; n /= unit {
|
||||||
|
div *= unit
|
||||||
|
exp++
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%.1f %ciB",
|
||||||
|
float64(b)/float64(div), "KMGTPE"[exp])
|
||||||
|
}
|
||||||
|
|
|
@ -314,3 +314,22 @@ func TestProxyFilterWithHttpsInvalid(t *testing.T) {
|
||||||
t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected)
|
t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFormatFileSize(t *testing.T) {
|
||||||
|
scenarios := []struct {
|
||||||
|
input int64
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{500, "500 B"},
|
||||||
|
{1024, "1.0 KiB"},
|
||||||
|
{43520, "42.5 KiB"},
|
||||||
|
{5000 * 1024 * 1024, "4.9 GiB"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, scenario := range scenarios {
|
||||||
|
result := formatFileSize(scenario.input)
|
||||||
|
if result != scenario.expected {
|
||||||
|
t.Errorf(`Unexpected result, got %q instead of %q for %d`, result, scenario.expected, scenario.input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -115,8 +115,8 @@
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<div class="entry-enclosure-download">
|
<div class="entry-enclosure-download">
|
||||||
<a href="{{ .URL }}" title="{{ .URL }} ({{ .MimeType }})" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "action.download" }}</a>
|
<a href="{{ .URL }}" title="{{ t "action.download" }}{{ if gt .Size 0 }} - {{ formatFileSize .Size }}{{ end }} ({{ .MimeType }})" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ .URL }}</a>
|
||||||
<small>({{ .URL }})</small>
|
<small>{{ if gt .Size 0 }} - <strong>{{ formatFileSize .Size }}</strong>{{ end }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
@ -680,8 +680,8 @@ var templateViewsMap = map[string]string{
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<div class="entry-enclosure-download">
|
<div class="entry-enclosure-download">
|
||||||
<a href="{{ .URL }}" title="{{ .URL }} ({{ .MimeType }})" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "action.download" }}</a>
|
<a href="{{ .URL }}" title="{{ t "action.download" }}{{ if gt .Size 0 }} - {{ formatFileSize .Size }}{{ end }} ({{ .MimeType }})" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ .URL }}</a>
|
||||||
<small>({{ .URL }})</small>
|
<small>{{ if gt .Size 0 }} - <strong>{{ formatFileSize .Size }}</strong>{{ end }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@ -1354,7 +1354,7 @@ var templateViewsMapChecksums = map[string]string{
|
||||||
"edit_category": "b1c0b38f1b714c5d884edcd61e5b5295a5f1c8b71c469b35391e4dcc97cc6d36",
|
"edit_category": "b1c0b38f1b714c5d884edcd61e5b5295a5f1c8b71c469b35391e4dcc97cc6d36",
|
||||||
"edit_feed": "34aa0d668b3ea1a1b5fa480c20cebeae729b37010af3bb915d2a9eed73d3b996",
|
"edit_feed": "34aa0d668b3ea1a1b5fa480c20cebeae729b37010af3bb915d2a9eed73d3b996",
|
||||||
"edit_user": "c692db9de1a084c57b93e95a14b041d39bf489846cbb91fc982a62b72b77062a",
|
"edit_user": "c692db9de1a084c57b93e95a14b041d39bf489846cbb91fc982a62b72b77062a",
|
||||||
"entry": "24aeba26ef9a51ce585ca5c4af090f1de7d7bfd7f1e3ff1b63af520e2afa76bd",
|
"entry": "36c75170b4831e96ba7d7726f8c80e5401366c626a1283629712a47f5e1e8caf",
|
||||||
"feed_entries": "9c70b82f55e4b311eff20be1641733612e3c1b406ce8010861e4c417d97b6dcc",
|
"feed_entries": "9c70b82f55e4b311eff20be1641733612e3c1b406ce8010861e4c417d97b6dcc",
|
||||||
"feeds": "fa06cd1e1e3fec79132386972c640a2fe91237f5dba572389d5f45be74545f25",
|
"feeds": "fa06cd1e1e3fec79132386972c640a2fe91237f5dba572389d5f45be74545f25",
|
||||||
"history_entries": "87e17d39de70eb3fdbc4000326283be610928758eae7924e4b08dcb446f3b6a9",
|
"history_entries": "87e17d39de70eb3fdbc4000326283be610928758eae7924e4b08dcb446f3b6a9",
|
||||||
|
|
Loading…
Reference in a new issue