Skip to content

Commit b5baaa2

Browse files
committed
feat(tpl): use link as delete button
1 parent 6443a0d commit b5baaa2

File tree

9 files changed

+87
-126
lines changed

9 files changed

+87
-126
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ root = true
33
[*]
44
end_of_line = lf
55
insert_final_newline = true
6+
max_line_length = 120
67
indent_style = tab
78
indent_size = 4
89
charset = utf-8

src/serverHandler/page.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,18 @@ func updateSubItemsHtml(data *responseData) {
3232
readableSize = tplutil.FormatSize(info.Size())
3333
}
3434

35+
var deleteUrl string
36+
if data.CanDelete {
37+
deleteUrl = data.SubItemPrefix + "?delete&name=" + name
38+
}
39+
3540
data.SubItemsHtml[i] = &itemHtml{
3641
Type: typ,
3742
Url: url,
3843
DisplayName: displayName,
3944
DisplaySize: readableSize,
4045
DisplayTime: tplutil.FormatTime(info.ModTime()),
46+
DeleteUrl: deleteUrl,
4147
}
4248
}
4349
}

src/serverHandler/responseData.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type itemHtml struct {
2121
DisplayName template.HTML
2222
DisplaySize template.HTML
2323
DisplayTime template.HTML
24+
DeleteUrl string
2425
}
2526

2627
type responseData struct {

src/tpl/assert/main.css

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ a:hover {
4545
}
4646

4747
input, button {
48+
min-width: 0;
4849
margin: 0;
4950
padding: 0.25em 0;
5051
}
@@ -198,7 +199,11 @@ em {
198199
margin: 1em;
199200
}
200201

201-
.item-list a {
202+
.item-list li {
203+
position: relative;
204+
}
205+
206+
.item-list .link {
202207
display: flex;
203208
flex-flow: row nowrap;
204209
align-items: center;
@@ -207,6 +212,10 @@ em {
207212
zoom: 1;
208213
}
209214

215+
.can-delete .link {
216+
padding-right: 2.2em;
217+
}
218+
210219
.item-list .name {
211220
flex-grow: 1;
212221
flex-shrink: 1;
@@ -231,20 +240,21 @@ em {
231240
}
232241

233242
.item-list .delete {
234-
display: none;
235-
border: 0;
236-
padding: 0.1em 0.5em;
243+
position: absolute;
244+
top: 0;
245+
right: 0;
246+
border-bottom: 1px #f5f5f5 solid;
237247
color: #800000;
238-
background: none;
239248
font-weight: bold;
240249
}
241250

242251
.item-list .delete:hover {
243252
background: #fee;
244253
}
245254

246-
.can-delete .delete {
247-
display: inline-block;
255+
.item-list .delete span {
256+
margin-left: 0;
257+
font-size: 1.5em;
248258
}
249259

250260
.item-list span,

src/tpl/assert/main.css.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ a:hover {
4040
background: #f5f5f5;
4141
}
4242
input, button {
43+
min-width: 0;
4344
margin: 0;
4445
padding: 0.25em 0;
4546
}
@@ -170,14 +171,20 @@ padding-right: 0.5em;
170171
.item-list {
171172
margin: 1em;
172173
}
173-
.item-list a {
174+
.item-list li {
175+
position: relative;
176+
}
177+
.item-list .link {
174178
display: flex;
175179
flex-flow: row nowrap;
176180
align-items: center;
177181
border-bottom: 1px #f5f5f5 solid;
178182
overflow: hidden;
179183
zoom: 1;
180184
}
185+
.can-delete .link {
186+
padding-right: 2.2em;
187+
}
181188
.item-list .name {
182189
flex-grow: 1;
183190
flex-shrink: 1;
@@ -199,18 +206,19 @@ white-space: nowrap;
199206
overflow: hidden;
200207
}
201208
.item-list .delete {
202-
display: none;
203-
border: 0;
204-
padding: 0.1em 0.5em;
209+
position: absolute;
210+
top: 0;
211+
right: 0;
212+
border-bottom: 1px #f5f5f5 solid;
205213
color: #800000;
206-
background: none;
207214
font-weight: bold;
208215
}
209216
.item-list .delete:hover {
210217
background: #fee;
211218
}
212-
.can-delete .delete {
213-
display: inline-block;
219+
.item-list .delete span {
220+
margin-left: 0;
221+
font-size: 1.5em;
214222
}
215223
.item-list span,
216224
.item-list button {

src/tpl/assert/main.js

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -45,43 +45,3 @@
4545
upload.addEventListener('dragleave', onDragLeave);
4646
upload.addEventListener('drop', onDrop);
4747
})();
48-
49-
(function enableDelete() {
50-
if (!canDelete || !document.querySelector) {
51-
return;
52-
}
53-
54-
var onClick = function (e) {
55-
var target = e ? e.target :
56-
event ? event.srcElement :
57-
null;
58-
59-
if (target && confirm('Delete?')) {
60-
// extract and assembly delete url
61-
// display name is not reliable since non-displayable char is escaped
62-
var pathName = target.parentNode.pathname;
63-
if (pathName.charAt(pathName.length - 1) === '/') {
64-
pathName = pathName.substr(0, pathName.length - 1);
65-
}
66-
67-
var index = pathName.lastIndexOf('/') + 1;
68-
var deleteUrl = pathName.substr(0, index) + '?delete&name=' + pathName.substr(index);
69-
location.href = deleteUrl;
70-
}
71-
72-
return false;
73-
};
74-
75-
var itemList = document.querySelector('.item-list');
76-
if (!itemList) {
77-
return;
78-
}
79-
80-
var buttons = itemList.querySelectorAll('.delete');
81-
var buttonCount = buttons.length;
82-
for (var i = 0; i < buttonCount; i++) {
83-
buttons[i].onclick = onClick;
84-
}
85-
86-
itemList.className += ' can-delete';
87-
})();

src/tpl/assert/main.js.go

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -40,36 +40,4 @@ upload.addEventListener('dragover', onDragEnterOver);
4040
upload.addEventListener('dragleave', onDragLeave);
4141
upload.addEventListener('drop', onDrop);
4242
})();
43-
(function enableDelete() {
44-
if (!canDelete || !document.querySelector) {
45-
return;
46-
}
47-
var onClick = function (e) {
48-
var target = e ? e.target :
49-
event ? event.srcElement :
50-
null;
51-
if (target && confirm('Delete?')) {
52-
// extract and assembly delete url
53-
// display name is not reliable since non-displayable char is escaped
54-
var pathName = target.parentNode.pathname;
55-
if (pathName.charAt(pathName.length - 1) === '/') {
56-
pathName = pathName.substr(0, pathName.length - 1);
57-
}
58-
var index = pathName.lastIndexOf('/') + 1;
59-
var deleteUrl = pathName.substr(0, index) + '?delete&name=' + pathName.substr(index);
60-
location.href = deleteUrl;
61-
}
62-
return false;
63-
};
64-
var itemList = document.querySelector('.item-list');
65-
if (!itemList) {
66-
return;
67-
}
68-
var buttons = itemList.querySelectorAll('.delete');
69-
var buttonCount = buttons.length;
70-
for (var i = 0; i < buttonCount; i++) {
71-
buttons[i].onclick = onClick;
72-
}
73-
itemList.className += ' can-delete';
74-
})();
7543
`

src/tpl/page.html

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
{{$subItemPrefix := .SubItemPrefix}}
21
<!DOCTYPE html>
32
<html lang="">
43
<head>
@@ -9,7 +8,6 @@
98
<meta name="renderer" content="webkit"/>
109
<meta name="wap-font-scale" content="no"/>
1110
<title>{{.Path}}</title>
12-
1311
<link rel="stylesheet" type="text/css" href="{{.RootRelPath}}/../assert/main.css"/>
1412
</head>
1513
<body class="{{if .IsRoot}}root-dir{{else}}sub-dir{{end}}">
@@ -22,47 +20,56 @@
2220

2321
{{if .CanUpload}}
2422
<div class="upload">
25-
<form method="POST" action="{{$subItemPrefix}}?upload" enctype="multipart/form-data">
23+
<form method="POST" action="{{.SubItemPrefix}}?upload" enctype="multipart/form-data">
2624
<input type="file" name="files" class="files" multiple="multiple"/>
2725
<input type="submit" value="Upload"/>
2826
</form>
2927
</div>
3028
{{end}}
3129

32-
{{if .CanArchive}}
33-
<div class="archive">
34-
<a href="{{$subItemPrefix}}?tar" download="{{.ItemName}}.tar">.tar</a>
35-
<a href="{{$subItemPrefix}}?tgz" download="{{.ItemName}}.tar.gz">.tar.gz</a>
36-
<a href="{{$subItemPrefix}}?zip" download="{{.ItemName}}.zip">.zip</a>
37-
</div>
38-
{{end}}
39-
4030
{{if .CanMkdir}}
4131
<div class="mkdir">
42-
<form method="POST" action="{{$subItemPrefix}}?mkdir">
32+
<form method="POST" action="{{.SubItemPrefix}}?mkdir">
4333
<input type="text" name="name" autocomplete="off"/>
4434
<button type="submit">mkdir</button>
4535
</form>
4636
</div>
4737
{{end}}
4838

49-
<ul class="item-list">
39+
{{if .CanArchive}}
40+
<div class="archive">
41+
<a href="{{.SubItemPrefix}}?tar" download="{{.ItemName}}.tar">.tar</a>
42+
<a href="{{.SubItemPrefix}}?tgz" download="{{.ItemName}}.tar.gz">.tar.gz</a>
43+
<a href="{{.SubItemPrefix}}?zip" download="{{.ItemName}}.zip">.zip</a>
44+
</div>
45+
{{end}}
46+
47+
{{$canDelete := .CanDelete}}
48+
{{if $canDelete}}
49+
<script type="text/javascript">
50+
function confirmDelete(el) {
51+
var href = el.href;
52+
var name = decodeURIComponent(href.substr(href.lastIndexOf('=') + 1));
53+
return confirm('Delete?\n' + name);
54+
}
55+
</script>
56+
{{end}}
57+
<ul class="item-list{{if $canDelete}} can-delete{{end}}">
5058
<li class="dir parent">
51-
<a href="{{if .IsRoot}}./{{else}}../{{end}}">
59+
<a href="{{if .IsRoot}}./{{else}}../{{end}}" class="link">
5260
<span class="name">../</span>
5361
<span class="size"></span>
5462
<span class="time"></span>
5563
</a>
5664
</li>
57-
{{$canDelete := .CanDelete}}
5865
{{range .SubItemsHtml}}
5966
<li class="{{.Type}}">
60-
<a href="{{.Url}}">
67+
<a href="{{.Url}}" class="link">
6168
<span class="name">{{.DisplayName}}</span>
6269
<span class="size">{{.DisplaySize}}</span>
6370
<span class="time">{{.DisplayTime}}</span>
64-
{{if $canDelete}}<button class="delete">x</button>{{end}}
6571
</a>
72+
{{if $canDelete}}<a href="{{.DeleteUrl}}" class="delete" onclick="return confirmDelete(this)"><span>x</span></a>{{end}}
6673
</li>
6774
{{end}}
6875
</ul>
@@ -75,10 +82,6 @@
7582
<div class="error">500 potential issue occurred</div>
7683
{{end}}
7784

78-
<script type="text/javascript">
79-
var canDelete = {{.CanDelete}};
80-
var canMkdir = {{.CanMkdir}};
81-
</script>
8285
<script type="text/javascript" src="{{.RootRelPath}}/../assert/main.js" defer="defer" async="async"></script>
8386
</body>
8487
</html>

0 commit comments

Comments
 (0)