Skip to content

Commit 2db33ee

Browse files
committed
feat(tpl): add delete controls for frontend
1 parent c03e07a commit 2db33ee

File tree

6 files changed

+128
-13
lines changed

6 files changed

+128
-13
lines changed

src/tpl/assert/main.css

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,6 @@ em {
188188
zoom: 1;
189189
}
190190

191-
.item-list span {
192-
margin-left: 1em;
193-
flex-shrink: 0;
194-
}
195-
196191
.item-list .name {
197192
flex-grow: 1;
198193
flex-shrink: 1;
@@ -214,7 +209,29 @@ em {
214209
text-align: right;
215210
white-space: nowrap;
216211
overflow: hidden;
217-
float: right;
212+
}
213+
214+
.item-list .delete {
215+
display: none;
216+
border: 0;
217+
padding: 0.1em 0.5em;
218+
color: #800000;
219+
background: none;
220+
font-weight: bold;
221+
}
222+
223+
.item-list .delete:hover {
224+
background: #fee;
225+
}
226+
227+
.can-delete .delete {
228+
display: inline-block;
229+
}
230+
231+
.item-list span,
232+
.item-list button {
233+
margin: 0 0 0 1em;
234+
flex-shrink: 0;
218235
}
219236

220237
.error {

src/tpl/assert/main.css.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,6 @@ border-bottom: 1px #f5f5f5 solid;
163163
overflow: hidden;
164164
zoom: 1;
165165
}
166-
.item-list span {
167-
margin-left: 1em;
168-
flex-shrink: 0;
169-
}
170166
.item-list .name {
171167
flex-grow: 1;
172168
flex-shrink: 1;
@@ -186,7 +182,25 @@ color: #999;
186182
text-align: right;
187183
white-space: nowrap;
188184
overflow: hidden;
189-
float: right;
185+
}
186+
.item-list .delete {
187+
display: none;
188+
border: 0;
189+
padding: 0.1em 0.5em;
190+
color: #800000;
191+
background: none;
192+
font-weight: bold;
193+
}
194+
.item-list .delete:hover {
195+
background: #fee;
196+
}
197+
.can-delete .delete {
198+
display: inline-block;
199+
}
200+
.item-list span,
201+
.item-list button {
202+
margin: 0 0 0 1em;
203+
flex-shrink: 0;
190204
}
191205
.error {
192206
margin: 1em;

src/tpl/assert/main.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,43 @@
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: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,36 @@ 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+
})();
4375
`

src/tpl/page.html

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@
4545
<span class="time"></span>
4646
</a>
4747
</li>
48+
{{$canDelete := .CanDelete}}
4849
{{range .SubItemsHtml}}
4950
<li class="{{.Type}}">
5051
<a href="{{.Url}}">
5152
<span class="name">{{.DisplayName}}</span>
5253
<span class="size">{{.DisplaySize}}</span>
5354
<span class="time">{{.DisplayTime}}</span>
55+
{{if $canDelete}}<button class="delete">x</button>{{end}}
5456
</a>
5557
</li>
5658
{{end}}
@@ -64,6 +66,10 @@
6466
<div class="error">500 potential issue occurred</div>
6567
{{end}}
6668

67-
<script type="text/javascript" src="{{.RootRelPath}}/../assert/main.js"></script>
69+
<script type="text/javascript">
70+
var canDelete = {{.CanDelete}};
71+
var canMkdir = {{.CanMkdir}};
72+
</script>
73+
<script type="text/javascript" src="{{.RootRelPath}}/../assert/main.js" defer="defer" async="async"></script>
6874
</body>
6975
</html>

src/tpl/page.html.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ const pageTplStr = `
5050
<span class="time"></span>
5151
</a>
5252
</li>
53+
{{$canDelete := .CanDelete}}
5354
{{range .SubItemsHtml}}
5455
<li class="{{.Type}}">
5556
<a href="{{.Url}}">
5657
<span class="name">{{.DisplayName}}</span>
5758
<span class="size">{{.DisplaySize}}</span>
5859
<span class="time">{{.DisplayTime}}</span>
60+
{{if $canDelete}}<button class="delete">x</button>{{end}}
5961
</a>
6062
</li>
6163
{{end}}
@@ -67,7 +69,11 @@ const pageTplStr = `
6769
{{else if eq .Status 500}}
6870
<div class="error">500 potential issue occurred</div>
6971
{{end}}
70-
<script type="text/javascript" src="{{.RootRelPath}}?assert=main.js"></script>
72+
<script type="text/javascript">
73+
var canDelete = {{.CanDelete}};
74+
var canMkdir = {{.CanMkdir}};
75+
</script>
76+
<script type="text/javascript" src="{{.RootRelPath}}?assert=main.js" defer="defer" async="async"></script>
7177
</body>
7278
</html>
7379
`

0 commit comments

Comments
 (0)