UNPKG

3.27 kBHTMLView Raw
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