<!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" /> <title>File Browser</title> <link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png" /> <link rel="icon" type="image/png" sizes="16x16" href="/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="#2979ff" /> <!-- 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="/img/icons/apple-touch-icon.png" /> <!-- Add to home screen for Windows --> <meta name="msapplication-TileImage" content="/img/icons/mstile-144x144.png" /> <meta name="msapplication-TileColor" content="#2979ff" /> <!-- Inject Some Variables and generate the manifest json --> <script> // We can assign JSON directly window.FileBrowser = { AuthMethod: "json", BaseURL: "", CSS: false, Color: "", DisableExternal: false, DisableUsedPercentage: false, EnableExec: true, EnableThumbs: true, LoginPage: true, Name: "", NoAuth: false, ReCaptcha: false, ResizePreview: true, Signup: false, StaticURL: "", Theme: "", TusSettings: { chunkSize: 10485760, retryCount: 5 }, Version: "(untracked)", }; // 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.ts"></script> </body> </html>