Skip to content

Commit 57360ea

Browse files
committed
feat(tpls): show escape char in filename
1 parent 0d0e3d8 commit 57360ea

File tree

6 files changed

+53
-4
lines changed

6 files changed

+53
-4
lines changed

src/tpl/assert/main.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,14 @@ input, button {
191191
word-break: break-all;
192192
}
193193

194+
.item-list .name em {
195+
font-style: normal;
196+
font-weight: normal;
197+
padding: 0 0.2em;
198+
border: 1px #ddd solid;
199+
border-radius: 3px;
200+
}
201+
194202
.item-list .size {
195203
white-space: nowrap;
196204
text-align: right;

src/tpl/assert/main.css.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ font-size: 1.5em;
165165
white-space: pre-wrap;
166166
word-break: break-all;
167167
}
168+
.item-list .name em {
169+
font-style: normal;
170+
font-weight: normal;
171+
padding: 0 0.2em;
172+
border: 1px #ddd solid;
173+
border-radius: 3px;
174+
}
168175
.item-list .size {
169176
white-space: nowrap;
170177
text-align: right;

src/tpl/page.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
{{$isDir := .IsDir}}
5050
<li>
5151
<a href="{{$subItemPrefix}}{{.Name}}{{if $isDir}}/{{end}}" class="item {{if $isDir}}item-dir{{else}}item-file{{end}}">
52-
<span class="name">{{.Name}}{{if $isDir}}/{{end}}</span>
52+
<span class="name">{{fmtFilename .Name}}{{if $isDir}}/{{end}}</span>
5353
<span class="size">{{if not $isDir}}{{fmtSize .Size}}{{end}}</span>
5454
<span class="time">{{fmtTime .ModTime}}</span>
5555
</a>

src/tpl/page.html.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const pageTplStr = `
5454
{{$isDir := .IsDir}}
5555
<li>
5656
<a href="{{$subItemPrefix}}{{.Name}}{{if $isDir}}/{{end}}" class="item {{if $isDir}}item-dir{{else}}item-file{{end}}">
57-
<span class="name">{{.Name}}{{if $isDir}}/{{end}}</span>
57+
<span class="name">{{fmtFilename .Name}}{{if $isDir}}/{{end}}</span>
5858
<span class="size">{{if not $isDir}}{{fmtSize .Size}}{{end}}</span>
5959
<span class="time">{{fmtTime .ModTime}}</span>
6060
</a>
@@ -100,7 +100,8 @@ func LoadPage(tplPath string) (*template.Template, error) {
100100

101101
func addFuncMap(tpl *template.Template) *template.Template {
102102
return tpl.Funcs(template.FuncMap{
103-
"fmtSize": util.FormatSize,
104-
"fmtTime": util.FormatTimeMinute,
103+
"fmtFilename": util.FormatFilename,
104+
"fmtSize": util.FormatSize,
105+
"fmtTime": util.FormatTimeMinute,
105106
})
106107
}

src/util/formatFilename.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package util
2+
3+
import (
4+
"html/template"
5+
"strings"
6+
)
7+
8+
var filenameReplacer = strings.NewReplacer(
9+
"\r", "<em>\\r</em>",
10+
"\n", "<em>\\n</em>",
11+
"\a", "<em>\\a</em>",
12+
"\v", "<em>\\v</em>",
13+
)
14+
15+
func FormatFilename(filename string) template.HTML {
16+
escaped := template.HTMLEscapeString(filename)
17+
escaped = filenameReplacer.Replace(escaped)
18+
return template.HTML(escaped)
19+
}

src/util/formatFilename_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package util
2+
3+
import (
4+
"html/template"
5+
"testing"
6+
)
7+
8+
func TestFormatFilename(t *testing.T) {
9+
raw := "a\rb\nc"
10+
replaced := FormatFilename(raw)
11+
if replaced != template.HTML("a<em>\\r</em>b<em>\\n</em>c") {
12+
t.Error(replaced)
13+
}
14+
}

0 commit comments

Comments
 (0)