CloudStorage / templates /upload.html
thejagstudio's picture
Upload 30 files
0a08d4d verified
raw
history blame
10.6 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Uploader</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<div class="pt-1 h-screen bg-white px-2">
<header class="h-20 flex justify-between items-center py-4 md:py-8 mb-4">
<!-- logo - start -->
<a href="/" class="my-5 inline-flex items-center text-black-800 text-2xl md:text-3xl font-bold gap-2.5" aria-label="logo">
<svg class="w-[10%] text-indigo-500" id="outputsvg" xmlns="http://www.w3.org/2000/svg" style="transform: none; transform-origin: 50% 50%; cursor: move; transition: none 0s ease 0s" viewBox="0 0 3500 3500">
<g id="l5TLm6F9JGem8YOQ8A41YML" fill="rgb(100,103,241)" style="transform: none">
<g><path id="pulsHdoRs" d="M1455 3470 c-164 -30 -323 -83 -480 -160 -487 -242 -829 -689 -935 -1226 -28 -139 -37 -389 -21 -534 64 -550 390 -1040 879 -1319 170 -98 440 -186 642 -211 203 -24 460 -7 658 45 609 160 1093 651 1246 1263 120 479 34 978 -238 1387 -258 387 -641 646 -1101 745 -149 33 -495 38 -650 10z m488 -574 c37 -7 70 -15 72 -18 3 -3 -39 -24 -92 -48 -214 -94 -369 -196 -520 -343 -336 -327 -433 -761 -242 -1084 19 -31 67 -89 107 -130 40 -40 70 -73 67 -73 -15 0 -143 54 -225 95 -221 111 -505 336 -517 410 -9 55 17 270 43 362 121 418 441 719 869 818 117 28 326 33 438 11z m360 -132 c271 -152 315 -279 149 -436 -70 -67 -94 -78 -165 -78 -46 0 -61 6 -127 51 -90 62 -156 92 -258 121 -65 17 -95 20 -187 15 -153 -7 -269 -48 -381 -133 -27 -21 -44 -31 -38 -23 110 147 205 237 364 343 100 67 296 166 395 199 l70 24 55 -23 c30 -12 85 -39 123 -60z m-1463 -1370 c262 -187 520 -287 807 -314 125 -12 210 -3 313 31 81 26 86 29 188 96 128 86 196 84 296 -8 59 -54 106 -135 106 -183 -1 -41 -30 -104 -66 -139 -47 -47 -187 -136 -271 -172 -299 -129 -612 -133 -916 -10 -250 102 -488 336 -599 590 -42 96 -74 194 -83 254 l-7 44 73 -64 c41 -36 112 -92 159 -125z"></path></g>
</g>
</svg>
Cloud Storage
</a>
<!-- logo - end -->
<!-- nav - start -->
<nav class="hidden lg:flex gap-12">
<a href="../" class="text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">Home</a>
<a href="../list" class="text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">List</a>
<a href="../upload" class="text-indigo-500 text-lg font-semibold">Upload</a>
<a href="../logout" class="text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">Logout</a>
</nav>
<!-- nav - end -->
<!-- buttons - start -->
<div id="nav" onmouseout="outB()" onmouseover="inB()" class="overflow-visible z-10 mt-[150px] grid grid-cols-1 grid-rows-5">
<button type="button" class="shadow-xl inline-flex items-center lg:hidden bg-gray-200 hover:bg-gray-300 focus-visible:ring ring-indigo-300 text-gray-500 active:text-gray-700 text-sm md:text-base font-semibold rounded-lg gap-2 px-2.5 py-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h6a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd" />
</svg>
Menu
</button>
<a href="../" class="shadow-xl mt-2 hidden bg-white px-2 text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">Home</a>
<a href="../list" class="shadow-xl hidden bg-white px-2 text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">List</a>
<a href="../upload" class="shadow-xl hidden rounded-t-lg bg-white px-2 text-indigo-500 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">Upload</a>
<a href="../logout" class="shadow-xl hidden bg-white px-2 text-gray-600 hover:text-indigo-500 active:text-indigo-700 text-lg font-semibold transition duration-100">Logout</a>
</div>
<!-- buttons - end -->
</header>
<div class="max-w-md mx-auto bg-indigo-500 rounded-lg overflow-hidden md:max-w-lg">
<div class="md:flex">
<div class="w-full">
<div class="p-4 border-b-2">
<span class="text-lg font-bold text-white">Upload documents</span>
</div>
<form action="../uploader/" id="myform" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="p-3">
<div class="mb-2">
<span class="text-sm text-white">Title</span>
<input type="text" id="title" name="title" class="h-12 px-3 w-full border-indigo-200 border rounded focus:outline-none focus:border-indigo-300" />
</div>
<div class="mb-2">
<span class="text-sm text-white">Attachments</span>
<div class="relative h-40 rounded-lg border-dashed border-2 border-gray-500 bg-white flex justify-center items-center hover:cursor-pointer">
<div class="absolute">
<div class="flex flex-col items-center" id="Attach">
<i class="fa fa-cloud-upload fa-3x text-indigo-200"></i>
<span class="block text-indigo-400 font-normal">Attach you files here</span>
<span class="block text-indigo-400 font-normal">or</span>
<span class="block text-blue-400 font-normal">Browse files</span>
</div>
<div class="flex flex-col items-center hidden" id="Fileinfo">
<i class="fa fa-cloud-upload fa-3x text-indigo-200"></i>
<span class="block text-indigo-800 font-normal" id="name">Attach you files here</span>
<span class="block text-indigo-800 font-normal" id="size">or</span>
<span class="block text-indigo-800 font-normal" id="type">Browse files</span>
</div>
</div>
<input type="file" onchange="showname()" class="h-full w-full m-auto opacity-0" id="file" name="file" action="http://localhost:5000/uploader" method="POST" enctype="multipart/form-data" />
</div>
</div>
<div class="mt-3 text-center pb-3">
<input type="submit" id="upload_btn" onclick="loading()" value="Upload" class="w-full h-12 text-lg w-32 hover:bg-white rounded hover:text-indigo-500 bg-indigo-800 text-white" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script>
function humanFileSize(bytes, si = false, dp = 1) {
const thresh = si ? 1000 : 1024;
if (Math.abs(bytes) < thresh) {
return bytes + " B";
}
const units = si ? ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] : ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
let u = -1;
const r = 10 ** dp;
do {
bytes /= thresh;
++u;
} while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
return bytes.toFixed(dp) + " " + units[u];
}
function showname() {
var name = document.getElementById("file");
var attach = document.getElementById("Attach");
var fileinfo = document.getElementById("Fileinfo");
if (name.files[0].size > 1000000000) {
alert("File size is too large , Limit is 1GB");
name.value = "";
} else {
fileinfo.classList.remove("hidden");
attach.classList.add("hidden");
document.getElementById("name").innerHTML = name.files[0].name;
document.getElementById("size").innerHTML = humanFileSize(name.files[0].size);
document.getElementById("type").innerHTML = name.files[0].type;
}
}
function loading() {
var upload_btn = document.getElementById("upload_btn");
upload_btn.value = "Uploading...";
upload_btn.disabled = true;
var form = document.getElementById("myform");
form.submit();
}
</script>
<script>
function inB(event) {
ass = document.getElementById("nav").getElementsByTagName("a");
for (let i = 0; i < ass.length; i++) {
ass[i].classList.remove("hidden");
}
}
function outB(event) {
ass = document.getElementById("nav").getElementsByTagName("a");
for (let i = 0; i < ass.length; i++) {
ass[i].classList.add("hidden");
}
}
</script>
</body>
</html>