196 lines
5.1 KiB
HTML
196 lines
5.1 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1, user-scalable=no"
|
|
/>
|
|
|
|
[{[ if .ReCaptcha -]}]
|
|
<script src="[{[ .ReCaptchaHost ]}]/recaptcha/api.js?render=explicit"></script>
|
|
[{[ end ]}]
|
|
|
|
<title>
|
|
[{[ if .Name -]}][{[ .Name ]}][{[ else ]}]File Browser[{[ end ]}]
|
|
</title>
|
|
|
|
<meta name="robots" content="noindex,nofollow">
|
|
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="32x32"
|
|
href="[{[ .StaticURL ]}]/img/icons/favicon-32x32.png"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="16x16"
|
|
href="[{[ .StaticURL ]}]/img/icons/favicon-16x16.png"
|
|
/>
|
|
|
|
<!-- Add to home screen for Android and modern mobile browsers -->
|
|
<link
|
|
rel="manifest"
|
|
id="manifestPlaceholder"
|
|
crossorigin="use-credentials"
|
|
/>
|
|
<meta
|
|
name="theme-color"
|
|
content="[{[ if .Color -]}][{[ .Color ]}][{[ else ]}]#2979ff[{[ end ]}]"
|
|
/>
|
|
|
|
<!-- Add to home screen for Safari on iOS/iPadOS -->
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
|
<meta name="apple-mobile-web-app-title" content="assets" />
|
|
<link
|
|
rel="apple-touch-icon"
|
|
href="[{[ .StaticURL ]}]/img/icons/apple-touch-icon.png"
|
|
/>
|
|
|
|
<!-- Add to home screen for Windows -->
|
|
<meta
|
|
name="msapplication-TileImage"
|
|
content="[{[ .StaticURL ]}]/img/icons/mstile-144x144.png"
|
|
/>
|
|
<meta
|
|
name="msapplication-TileColor"
|
|
content="[{[ if .Color -]}][{[ .Color ]}][{[ else ]}]#2979ff[{[ end ]}]"
|
|
/>
|
|
|
|
<!-- Inject Some Variables and generate the manifest json -->
|
|
<script>
|
|
// We can assign JSON directly
|
|
window.FileBrowser = [{[ .Json ]}];
|
|
// Global function to prepend static url
|
|
window.__prependStaticUrl = (url) => {
|
|
return `${window.FileBrowser.StaticURL}/${url.replace(/^\/+/, "")}`;
|
|
};
|
|
var dynamicManifest = {
|
|
name: window.FileBrowser.Name || "File Browser",
|
|
short_name: window.FileBrowser.Name || "File Browser",
|
|
icons: [
|
|
{
|
|
src: window.__prependStaticUrl("/img/icons/android-chrome-192x192.png"),
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
},
|
|
{
|
|
src: window.__prependStaticUrl("/img/icons/android-chrome-512x512.png"),
|
|
sizes: "512x512",
|
|
type: "image/png",
|
|
},
|
|
],
|
|
start_url: window.location.origin + window.FileBrowser.BaseURL,
|
|
display: "standalone",
|
|
background_color: "#ffffff",
|
|
theme_color: window.FileBrowser.Color || "#455a64",
|
|
};
|
|
|
|
const stringManifest = JSON.stringify(dynamicManifest);
|
|
const blob = new Blob([stringManifest], { type: "application/json" });
|
|
const manifestURL = URL.createObjectURL(blob);
|
|
document
|
|
.querySelector("#manifestPlaceholder")
|
|
.setAttribute("href", manifestURL);
|
|
</script>
|
|
|
|
<style>
|
|
#loading {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: #fff;
|
|
z-index: 9999;
|
|
transition: 0.1s ease opacity;
|
|
-webkit-transition: 0.1s ease opacity;
|
|
}
|
|
|
|
#loading.done {
|
|
opacity: 0;
|
|
}
|
|
|
|
#loading .spinner {
|
|
width: 70px;
|
|
text-align: center;
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
-webkit-transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
#loading .spinner > div {
|
|
width: 18px;
|
|
height: 18px;
|
|
background-color: #333;
|
|
border-radius: 100%;
|
|
display: inline-block;
|
|
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
}
|
|
|
|
#loading .spinner .bounce1 {
|
|
-webkit-animation-delay: -0.32s;
|
|
animation-delay: -0.32s;
|
|
}
|
|
|
|
#loading .spinner .bounce2 {
|
|
-webkit-animation-delay: -0.16s;
|
|
animation-delay: -0.16s;
|
|
}
|
|
|
|
@-webkit-keyframes sk-bouncedelay {
|
|
0%,
|
|
80%,
|
|
100% {
|
|
-webkit-transform: scale(0);
|
|
}
|
|
40% {
|
|
-webkit-transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes sk-bouncedelay {
|
|
0%,
|
|
80%,
|
|
100% {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
40% {
|
|
-webkit-transform: scale(1);
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="app"></div>
|
|
|
|
<div id="loading">
|
|
<div class="spinner">
|
|
<div class="bounce1"></div>
|
|
<div class="bounce2"></div>
|
|
<div class="bounce3"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="module" src="/src/main.js"></script>
|
|
|
|
[{[ if .Theme -]}]
|
|
<link
|
|
rel="stylesheet"
|
|
href="[{[ .StaticURL ]}]/themes/[{[ .Theme ]}].css"
|
|
/>
|
|
[{[ end ]}] [{[ if .CSS -]}]
|
|
<link rel="stylesheet" href="[{[ .StaticURL ]}]/custom.css" />
|
|
[{[ end ]}]
|
|
</body>
|
|
</html>
|