1 | <!DOCTYPE html>
|
2 | <html lang="zh-CN">
|
3 | <head>
|
4 | <meta charset="UTF-8">
|
5 | <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 | <meta http-equiv="X-UA-Compatible" content="ie=edge">
|
7 | <title><%=pathname%>/</title>
|
8 | <style>
|
9 | body { min-height: 90vh; }
|
10 | ul li a { margin-right: 20px; }
|
11 | ul li.candel:focus:after { font-size: 13px; content: ' Del按键/鼠标双击 删除文件'; }
|
12 | .contextmenu { position: absolute; display: none; background: #fff; box-shadow: 3px 3px 15px #999; }
|
13 | .contextmenu > a { display: block; padding: 5px 12px; line-height: 20px; }
|
14 | .info-bar { position: fixed; left: 1rem; bottom: 1rem; }
|
15 | </style>
|
16 | </head>
|
17 | <body>
|
18 | <ul>
|
19 | <li><a href="../">../</a></li>
|
20 | <%=Object.keys(store).sort().map(k => ` <li tabindex="1"><a href="${pathname}/${k}">${k}</a></li>`).join('\n')%>
|
21 | </ul>
|
22 |
|
23 | <% if (conf.authorization) { %>
|
24 | <div class="info-bar">本页面支持拖拽上传文件(仅支持单文件,不支持文件夹)</div>
|
25 | <div class="contextmenu">
|
26 | <a href="javascript:;" class="new_folder">新建文件夹</a>
|
27 | </div>
|
28 | <script>
|
29 |
|
30 | const list = document.querySelectorAll('ul li[tabindex="1"]')
|
31 | const Fetch = (url, option) => fetch(url, option).then(res => {
|
32 | if (res.status === 500) {
|
33 | res.text().then(err => {
|
34 | const div = document.createElement('div')
|
35 | div.innerHTML = err
|
36 | alert(div.innerText)
|
37 | })
|
38 | }
|
39 | })
|
40 | list.forEach(el => {
|
41 | const file = el.innerText.trim()
|
42 | el.classList.add('candel')
|
43 | el.addEventListener('keyup', e => {
|
44 | switch(e.keyCode) {
|
45 | case 8: confirm('确定删除' + file) && Fetch('?file=' + file, { method: 'DELETE' });
|
46 | }
|
47 | })
|
48 | el.addEventListener('dblclick', function () {
|
49 | confirm('确定删除' + file) && Fetch('?file=' + file, { method: 'DELETE' });
|
50 | })
|
51 | })
|
52 | document.body.addEventListener('drop', function (e) {
|
53 | e.preventDefault()
|
54 | e.stopPropagation()
|
55 | const file = e.dataTransfer.files[0]
|
56 | Fetch('?file=' + file.name, {
|
57 | method: 'PUT',
|
58 | body: file
|
59 | })
|
60 | })
|
61 | document.body.addEventListener('dragover', function (e) {
|
62 | e.preventDefault()
|
63 | })
|
64 |
|
65 | const contextmenu = document.querySelector('.contextmenu')
|
66 | document.body.addEventListener('click', function (e) {
|
67 | if (e.target === contextmenu || contextmenu.contains(e.target)) {
|
68 | const item = e.target
|
69 | switch (item.className) {
|
70 | case 'new_folder':
|
71 | contextmenu.style.cssText = ''
|
72 | setTimeout(() => {
|
73 | const file = prompt('请输入文件夹名称')
|
74 | file && Fetch('?file=' + file, { method: 'POST' }).then(() => location.reload())
|
75 | }, 100);
|
76 | break;
|
77 | }
|
78 | } else {
|
79 | contextmenu.style.cssText = ''
|
80 | }
|
81 | })
|
82 | document.body.addEventListener('contextmenu', function (e) {
|
83 | contextmenu.style.cssText = 'left: ' + e.x + 'px; top: ' + e.y + 'px; display: block;'
|
84 | e.preventDefault();
|
85 | })
|
86 |
|
87 | </script>
|
88 | <% } %>
|
89 | </body>
|
90 | </html> |
\ | No newline at end of file |