146
{{ define "index" }}
<!DOCTYPE html>
<html>
<head>
{{ if .Path }}
<title>{{ .Path }}</title>
{{ else }}
{{ if .Upload }}
<title>Upload</title>
{{ else }}
<title>Error</title>
{{ end }}
{{ end }}
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>
function fileExt(url) {
let i = url.toString().toLowerCase().lastIndexOf(".");
if (i === -1) {
return "";
}
return url.toString().toLowerCase().substring(url.toString().lastIndexOf("."));
}
const imgExts = [".jpg", ".jpeg", ".png", ".gif", ".webp"];
var dirPath = "{{ .Path }}";
if (!dirPath.endsWith("/")) {
dirPath += "/";
}
function IconCheck(elem) {
let icon = elem.querySelector(".icon");
if (icon.innerText === "F") {
return;
}
let url = elem.querySelector(".file-name").innerText;
let ext = fileExt(url);
if (imgExts.includes(ext)) {
let mod = elem.querySelector(".mod-time").title.replaceAll(" ", "_").replaceAll(":", "_");
url = dirPath + url;
icon.innerHTML = "<img src='"+url+".png?icon=" + url + "&mod="+ mod +"' alt='f'/>";
} else if (ext === ".mp4") {
icon.innerText = "v";
}
}
document.addEventListener("DOMContentLoaded", function() {
document.querySelectorAll(".filelabel").forEach(filelement => {
IconCheck(filelement);
});
});
</script>
<style>
:root{
color:white;
background: #262833;
@media (max-width: 2000px) and (min-width: 1500px) {
font-size: 100%;
}
@media (max-width: 1500px) and (min-width: 1200px) {
font-size: 85%;
}
@media (max-width: 1200px) and (min-width: 800px) {
font-size: 75%;
}
@media (max-width: 800px) and (min-width: 600px) {
font-size: 70%;
}
@media (max-width: 600px) and (min-width: 400px) {
font-size: 65%;
}
@media (max-width: 400px) {
font-size: 60%;
}
}
body {
width: 90ch;
max-width: calc(100% - 2ch);
margin: 0 auto 0 auto;
font-family: sans-serif;
}
.trees > a {
text-decoration: none;
display:contents;
color: unset;
}
.filelabel {
padding: 1em;
margin: 0;
display: grid;
grid-template-columns: 2ch calc(60% - 4em - 2ch) max(15ch,20%) max(15ch,20%);
justify-content: space-between;
align-items: center;
border-radius: 1em;
margin-bottom: .5lh;
}
.filelabel:hover {background: #2c2e46;}
.right{text-align: right;}
@font-face{
font-family: "sophuwuicons";
src: url("data:font/ttf;base64,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") format("truetype");
}
.icon {
font-family: "sophuwuicons";
font-size: 2rem;
}
.icon > img {
max-width: 2rem;
max-height: 2rem;
width: auto;
height: auto;
}
</style>
</head>
<body>
{{ if .Path }}
<h1>Index of: {{ .Path }}</h1>
<div class="trees">
{{ range .Dirs }}
{{ template "filelabel" . }}
{{ end }}
{{ range .Items }}
{{ template "filelabel" . }}
{{ end }}
</div>
{{ else }}
{{ if .Error }}
<h1>{{ .Error }}</h1>
{{ else }}
{{ if .Upload }}
<h1>Upload</h1>
<form class="trees" enctype="multipart/form-data" action="{{ .Upload }}" method="post">
<div class="filelabel"><span>Path:</span><input type="text" name="path" /></div>
<div class="filelabel"><span>File:</span><input type="file" name="myFile" /></div>
<div class="filelabel"><span>Username:</span><input type="text" name="username" /></div>
<div class="filelabel"><span>Password:</span><input type="password" name="password" /></div>
<div class="filelabel"><span>OTP:</span><input type="text" name="otp" /></div>
<div class="filelabel"><span></span><input type="submit" value="Upload" /></div>
</form>
{{ end }}
{{ end }}
{{ end }}
</body>
</html>
{{ end }}