-
-
-
+
-
+
+
+
+
+
+
+
+
diff --git a/app/public/css/style-light.css b/app/public/css/style-light.css
new file mode 100644
index 0000000..092e906
--- /dev/null
+++ b/app/public/css/style-light.css
@@ -0,0 +1,204 @@
+* {
+ font-family: OpenSans;
+}
+
+@font-face {
+ font-family: OpenSans;
+ src: url("/fonts/OpenSans-Medium.ttf");
+}
+html,
+body {
+ padding: 0;
+ margin: 0;
+}
+
+body {
+ background-color: #ffffff;
+}
+
+a:link {
+ text-decoration: none;
+}
+
+a:visited {
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+a:active {
+ text-decoration: none;
+}
+
+.container {
+ height: 100vh;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.view-container {
+ height: 95vh;
+ width: 95%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ border: 1px solid #091202;
+}
+
+.view-nav {
+ padding-top: 20px;
+ gap: 20px;
+ width: 98%;
+ display: flex;
+ flex-direction: row;
+ flex-basis: 50px;
+}
+.view-nav .button-primary {
+ flex-basis: 15%;
+}
+.view-nav .button-secondary {
+ flex-basis: 15%;
+}
+.view-nav .spacer {
+ flex-basis: 30%;
+}
+
+.file {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+.file .icon {
+ width: 64px;
+ height: 64px;
+}
+.file .filename p {
+ font-size: 50px;
+ margin: 0;
+ flex-wrap: 80%;
+}
+
+.file-view {
+ flex-basis: 90%;
+ width: 98%;
+ border: 1px dotted #091202;
+}
+.file-view .file-container {
+ display: flex;
+ flex-wrap: wrap;
+}
+.file-view .file-container .file {
+ height: 40px;
+ flex: 0 0 200px;
+ row-gap: 2px;
+}
+.file-view .file-container .file .icon {
+ width: 45px;
+ height: 40px;
+}
+.file-view .file-container .file .filename p {
+ font-size: 20px;
+ margin: 0;
+ flex-wrap: 80%;
+}
+.file-view .file-container .file:hover {
+ transform: scale(1.05);
+ transition: all 0.3s;
+}
+
+.button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 4px;
+ background-color: #e42200;
+ border: none;
+ color: #FFFFFF;
+ font-family: OpenSans;
+ font-size: 20px;
+ padding: 4px;
+ width: 200px;
+ transition: all 0.3s;
+ cursor: pointer;
+}
+.button p {
+ margin: 0;
+}
+
+.button:hover {
+ transform: scale(1.05);
+}
+
+.primary {
+ background-color: #fd9700;
+}
+
+.secondary {
+ background-color: #114388;
+ color: #ffffff;
+}
+
+.link-box {
+ display: flex;
+ height: 40px;
+ flex-direction: row;
+ flex-basis: 40%;
+ align-items: center;
+ justify-content: center;
+}
+.link-box .button-copy {
+ display: flex;
+ background-color: #114388;
+ color: #ffffff;
+ height: 100%;
+ border: 3px solid #091202;
+ border-left: none;
+ align-items: center;
+ justify-content: center;
+}
+.link-box .text-link {
+ height: 100%;
+ width: 100%;
+ border: 3px solid #091202;
+}
+.link-box .text-link input[type=text] {
+ width: 100%;
+ height: 100%;
+ font-size: 20px;
+ padding: 12px 20px;
+ box-sizing: border-box;
+ border: none;
+ background-color: #114388;
+ color: #ffffff;
+}
+
+.hidden {
+ display: none;
+}
+
+.copy {
+ height: 30px;
+}
+
+.checkmark {
+ height: 30px;
+ stroke-dasharray: 1000;
+ stroke-dashoffset: 1000;
+ animation-iteration-count: 1;
+ stroke-dashoffset: 0;
+ animation: checkmark 0.3s linear;
+}
+
+@keyframes checkmark {
+ from {
+ stroke-dashoffset: -500;
+ }
+ to {
+ stroke-dashoffset: 0;
+ }
+}/*# sourceMappingURL=style-light.css.map */
\ No newline at end of file
diff --git a/app/public/css/style-light.css.map b/app/public/css/style-light.css.map
new file mode 100644
index 0000000..fc35ccb
--- /dev/null
+++ b/app/public/css/style-light.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["style-light.scss","style-light.css"],"names":[],"mappings":"AASA;EACI,qBAAA;ACRJ;;ADWA;EACI,qBAAA;EACA,sCAAA;ACRJ;ADWA;;EAEE,UAAA;EACA,SAAA;ACTF;;ADaA;EACI,yBArBe;ACWnB;;ADcA;EAAS,qBAAA;ACVT;;ADYA;EAAY,qBAAA;ACRZ;;ADUA;EAAU,qBAAA;ACNV;;ADQA;EAAW,qBAAA;ACJX;;ADMA;EACI,aAAA;EACA,WAAA;EACA,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,uBAAA;ACHJ;;ADOA;EACI,YAAA;EACA,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,yBAAA;ACJJ;;ADQA;EACI,iBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,mBAAA;EACA,gBAAA;ACLJ;ADMI;EACI,eAAA;ACJR;ADMI;EACI,eAAA;ACJR;ADMI;EACI,eAAA;ACJR;;ADQA;EACI,aAAA;EACA,mBAAA;EACA,mBAAA;ACLJ;ADMI;EACI,WAAA;EACA,YAAA;ACJR;ADOQ;EACI,eAAA;EACA,SAAA;EACA,cAAA;ACLZ;;ADUA;EACI,eAAA;EACA,UAAA;EACA,0BAAA;ACPJ;ADQI;EACI,aAAA;EACA,eAAA;ACNR;ADOQ;EACI,YAAA;EACA,eAAA;EACA,YAAA;ACLZ;ADMY;EACI,WAAA;EACA,YAAA;ACJhB;ADOgB;EACI,eAAA;EACA,SAAA;EACA,cAAA;ACLpB;ADSQ;EACI,sBAAA;EACA,oBAAA;ACPZ;;ADYA;EACI,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,yBAAA;EACA,YAAA;EACA,cAAA;EACA,qBAAA;EACA,eAAA;EACA,YAAA;EACA,YAAA;EACA,oBAAA;EACA,eAAA;ACTJ;ADUI;EACI,SAAA;ACRR;;ADYA;EACI,sBAAA;ACTJ;;ADYA;EACI,yBAlJY;ACyIhB;;ADYA;EACI,yBApJc;EAqJd,cApJmB;AC2IvB;;ADYA;EACI,aAAA;EACA,YAAA;EACA,mBAAA;EACA,eAAA;EACA,mBAAA;EACA,uBAAA;ACTJ;ADUI;EACI,aAAA;EACA,yBAjKU;EAkKV,cAjKe;EAkKf,YAAA;EACA,yBAAA;EACA,iBAAA;EACA,mBAAA;EACA,uBAAA;ACRR;ADUI;EACI,YAAA;EACA,WAAA;EACA,yBAAA;ACRR;ADSQ;EACI,WAAA;EACA,YAAA;EACA,eAAA;EACA,kBAAA;EACA,sBAAA;EACA,YAAA;EACA,yBApLM;EAqLN,cApLW;AC6KvB;;ADYA;EACI,aAAA;ACTJ;;ADYA;EACI,YAAA;ACTJ;;ADYA;EACI,YAAA;EACA,sBAAA;EACA,uBAAA;EACA,4BAAA;EACA,oBAAA;EACA,gCAAA;ACTJ;;ADYA;EAEI;IACI,uBAAA;ECVN;EDYE;IACI,oBAAA;ECVN;AACF","file":"style-light.css"}
\ No newline at end of file
diff --git a/app/public/css/style-light.scss b/app/public/css/style-light.scss
new file mode 100644
index 0000000..672300d
--- /dev/null
+++ b/app/public/css/style-light.scss
@@ -0,0 +1,215 @@
+
+$color-primary: #fd9700;
+$color-primary-text: #ffffff;
+$color-secondary: #114388;
+$color-secondary-text: #ffffff;
+$color-background: #ffffff;
+$color-text: #091202;
+
+
+* {
+ font-family: OpenSans;
+}
+
+@font-face {
+ font-family: OpenSans;
+ src: url("/fonts/OpenSans-Medium.ttf");
+}
+
+html,
+body {
+ padding: 0;
+ margin: 0;
+}
+
+
+body {
+ background-color: $color-background;
+
+}
+
+a:link { text-decoration: none; }
+
+a:visited { text-decoration: none; }
+
+a:hover { text-decoration: none; }
+
+a:active { text-decoration: none; }
+
+.container {
+ height: 100vh;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+
+.view-container {
+ height: 95vh;
+ width: 95%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ border: 1px solid $color-text;
+}
+
+
+.view-nav {
+ padding-top: 20px;
+ gap: 20px;
+ width: 98%;
+ display: flex;
+ flex-direction: row;
+ flex-basis: 50px;
+ .button-primary {
+ flex-basis: 15%;
+ }
+ .button-secondary {
+ flex-basis: 15%;
+ }
+ .spacer {
+ flex-basis: 30%
+ }
+}
+
+.file {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ .icon {
+ width: 64px;
+ height: 64px;
+ }
+ .filename {
+ p {
+ font-size: 50px;
+ margin: 0;
+ flex-wrap: 80%;
+ }
+ }
+}
+
+.file-view {
+ flex-basis: 90%;
+ width: 98%;
+ border: 1px dotted $color-text;
+ .file-container {
+ display: flex;
+ flex-wrap: wrap;
+ .file {
+ height: 40px;
+ flex: 0 0 200px;
+ row-gap: 2px;
+ .icon {
+ width: 45px;
+ height: 40px;
+ }
+ .filename {
+ p {
+ font-size: 20px;
+ margin: 0;
+ flex-wrap: 80%;
+ }
+ }
+ }
+ .file:hover {
+ transform: scale(1.05);
+ transition: all 0.3s;
+ }
+ }
+}
+
+.button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 4px;
+ background-color: #e42200;
+ border: none;
+ color: #FFFFFF;
+ font-family: OpenSans;
+ font-size: 20px;
+ padding: 4px;
+ width: 200px;
+ transition: all 0.3s;
+ cursor: pointer;
+ p {
+ margin: 0;
+ }
+}
+
+.button:hover {
+ transform: scale(1.05);
+}
+
+.primary {
+ background-color: $color-primary;
+}
+
+.secondary {
+ background-color: $color-secondary;
+ color: $color-secondary-text;
+}
+
+.link-box {
+ display: flex;
+ height: 40px;
+ flex-direction: row;
+ flex-basis: 40%;
+ align-items: center;
+ justify-content: center;
+ .button-copy {
+ display: flex;
+ background-color: $color-secondary;
+ color: $color-secondary-text;
+ height: 100%;
+ border: 3px solid $color-text;
+ border-left: none;
+ align-items: center;
+ justify-content: center;
+ }
+ .text-link {
+ height: 100%;
+ width: 100%;
+ border: 3px solid $color-text;
+ input[type=text] {
+ width: 100%;
+ height: 100%;
+ font-size: 20px;
+ padding: 12px 20px;
+ box-sizing: border-box;
+ border: none;
+ background-color: $color-secondary;
+ color: $color-secondary-text;
+ }
+ }
+}
+
+.hidden {
+ display: none;
+}
+
+.copy {
+ height: 30px;
+}
+
+.checkmark {
+ height: 30px;
+ stroke-dasharray: 1000;
+ stroke-dashoffset: 1000;
+ animation-iteration-count: 1;
+ stroke-dashoffset: 0;
+ animation: checkmark 0.3s linear;
+}
+
+@keyframes checkmark {
+
+ from {
+ stroke-dashoffset: -500;
+ }
+ to {
+ stroke-dashoffset: 0;
+ }
+}
\ No newline at end of file
diff --git a/app/public/fonts/OpenSans-Medium.ttf b/app/public/fonts/OpenSans-Medium.ttf
new file mode 100644
index 0000000..a76d4ce
Binary files /dev/null and b/app/public/fonts/OpenSans-Medium.ttf differ
diff --git a/app/public/ico/apk.svg b/app/public/ico/apk.svg
new file mode 100644
index 0000000..e117365
--- /dev/null
+++ b/app/public/ico/apk.svg
@@ -0,0 +1,11 @@
+
diff --git a/app/public/ico/archive.svg b/app/public/ico/archive.svg
new file mode 100644
index 0000000..2b77eff
--- /dev/null
+++ b/app/public/ico/archive.svg
@@ -0,0 +1,18 @@
+
diff --git a/app/public/ico/audio.svg b/app/public/ico/audio.svg
new file mode 100644
index 0000000..eb88521
--- /dev/null
+++ b/app/public/ico/audio.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/code.svg b/app/public/ico/code.svg
new file mode 100644
index 0000000..c3dc8f0
--- /dev/null
+++ b/app/public/ico/code.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/exec.svg b/app/public/ico/exec.svg
new file mode 100644
index 0000000..9f73cb4
--- /dev/null
+++ b/app/public/ico/exec.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/public/ico/extensions.json b/app/public/ico/extensions.json
new file mode 100644
index 0000000..e4a0527
--- /dev/null
+++ b/app/public/ico/extensions.json
@@ -0,0 +1,240 @@
+{
+ "1.ada": ["code"],
+ "2.ada": ["code"],
+ "3dm": ["image"],
+ "3ds": ["image"],
+ "3g2": ["video"],
+ "3gp": ["video"],
+ "7z": ["archive"],
+ "a": ["archive"],
+ "aac": ["audio"],
+ "aaf": ["video"],
+ "ada": ["code"],
+ "adb": ["code"],
+ "ads": ["code"],
+ "ai": ["image"],
+ "aiff": ["audio"],
+ "ape": ["audio"],
+ "apk": ["apk"],
+ "ar": ["archive"],
+ "asf": ["video"],
+ "asm": ["code"],
+ "asp": ["code", "web"],
+ "aspx": ["code", "web"],
+ "au": ["audio"],
+ "avchd": ["video"],
+ "avi": ["video"],
+ "azw": ["book"],
+ "azw1": ["book"],
+ "azw3": ["book"],
+ "azw4": ["book"],
+ "azw6": ["book"],
+ "bas": ["script"],
+ "bash": ["script"],
+ "bat": ["script"],
+ "bin": ["exec"],
+ "bmp": ["image"],
+ "bz2": ["archive"],
+ "c": ["code"],
+ "c++": ["code"],
+ "cab": ["archive"],
+ "cbl": ["code"],
+ "cbr": ["book"],
+ "cbz": ["book"],
+ "cc": ["code"],
+ "class": ["code"],
+ "clj": ["code"],
+ "cob": ["code"],
+ "command": ["exec"],
+ "cpio": ["archive"],
+ "cpp": ["code"],
+ "crx": ["exec"],
+ "cs": ["code"],
+ "csh": ["script"],
+ "css": ["web"],
+ "csv": ["sheet"],
+ "cxx": ["code"],
+ "d": ["code"],
+ "dds": ["image"],
+ "deb": ["archive"],
+ "diff": ["code"],
+ "dmg": ["archive"],
+ "doc": ["text"],
+ "docx": ["text"],
+ "drc": ["video"],
+ "dwg": ["image"],
+ "dxf": ["image"],
+ "e": ["code"],
+ "ebook": ["text"],
+ "egg": ["archive"],
+ "el": ["code"],
+ "eot": ["font"],
+ "eps": ["image"],
+ "epub": ["book"],
+ "exe": ["exec"],
+ "f": ["code"],
+ "f77": ["code"],
+ "f90": ["code"],
+ "fish": ["code", "exec"],
+ "flac": ["audio"],
+ "flv": ["video"],
+ "for": ["code"],
+ "fth": ["code"],
+ "ftn": ["code"],
+ "gif": ["image"],
+ "go": ["code"],
+ "gpx": ["image"],
+ "groovy": ["code"],
+ "gsm": ["audio"],
+ "gz": ["gzip"],
+ "h": ["code"],
+ "hh": ["code"],
+ "hpp": ["code"],
+ "hs": ["code"],
+ "htm": ["code", "web"],
+ "html": ["code", "web"],
+ "hxx": ["code"],
+ "ics": ["sheet"],
+ "inc": ["code", "web"],
+ "iso": ["iso"],
+ "it": ["audio"],
+ "jar": ["archive"],
+ "java": ["code"],
+ "jpeg": ["image"],
+ "jpg": ["image"],
+ "js": ["code", "web"],
+ "jsp": ["code", "web"],
+ "jsx": ["code", "web"],
+ "kml": ["image"],
+ "kmz": ["image"],
+ "ksh": ["script"],
+ "kt": ["code"],
+ "less": ["web"],
+ "lha": ["archive"],
+ "lhs": ["code"],
+ "lisp": ["code"],
+ "log": ["text"],
+ "lua": ["code"],
+ "m": ["code"],
+ "m2v": ["video"],
+ "m3u": ["audio"],
+ "m4": ["code"],
+ "m4a": ["audio"],
+ "m4p": ["video"],
+ "m4v": ["video"],
+ "mar": ["archive"],
+ "max": ["image"],
+ "md": ["text"],
+ "mid": ["audio"],
+ "mkv": ["video"],
+ "mng": ["video"],
+ "mobi": ["book"],
+ "mod": ["audio"],
+ "mov": ["video"],
+ "mp2": ["video"],
+ "mp3": ["audio"],
+ "mp4": ["video"],
+ "mpa": ["audio"],
+ "mpe": ["video"],
+ "mpeg": ["video"],
+ "mpg": ["video"],
+ "mpv": ["video"],
+ "msg": ["text"],
+ "msi": ["exec"],
+ "mxf": ["video"],
+ "nim": ["code"],
+ "nsv": ["video"],
+ "odp": ["slideshow"],
+ "ods": ["sheet"],
+ "odt": ["text"],
+ "ogg": ["audio"],
+ "ogm": ["video"],
+ "ogv": ["video"],
+ "org": ["text"],
+ "otf": ["font"],
+ "pages": ["text"],
+ "pak": ["archive"],
+ "patch": ["code"],
+ "pdf": ["text"],
+ "pea": ["archive"],
+ "php": ["code", "web"],
+ "php3": ["code", "web"],
+ "php4": ["code", "web"],
+ "php5": ["code", "web"],
+ "phtml": ["code", "web"],
+ "pl": ["code"],
+ "pls": ["audio"],
+ "png": ["image"],
+ "po": ["code"],
+ "pp": ["code"],
+ "ppt": ["slideshow"],
+ "ps": ["image"],
+ "psd": ["image"],
+ "py": ["code"],
+ "qt": ["video"],
+ "r": ["code"],
+ "ra": ["audio"],
+ "rar": ["archive"],
+ "rb": ["code"],
+ "rm": ["video"],
+ "rmvb": ["video"],
+ "roq": ["video"],
+ "rpm": ["archive"],
+ "rs": ["code"],
+ "rst": ["text"],
+ "rtf": ["text"],
+ "s": ["code"],
+ "s3m": ["audio"],
+ "s7z": ["archive"],
+ "scala": ["code"],
+ "scss": ["code"],
+ "sh": ["script"],
+ "shar": ["archive"],
+ "sid": ["audio"],
+ "srt": ["subtitle"],
+ "svg": ["image"],
+ "svi": ["video"],
+ "swg": ["code"],
+ "swift": ["code"],
+ "tar": ["archive"],
+ "tbz2": ["archive"],
+ "tex": ["text"],
+ "tga": ["image"],
+ "tgz": ["archive"],
+ "thm": ["image"],
+ "tif": ["image"],
+ "tiff": ["image"],
+ "tlz": ["archive"],
+ "tsv": ["sheet"],
+ "ttf": ["font"],
+ "txt": ["text"],
+ "v": ["code"],
+ "vb": ["code"],
+ "vcf": ["sheet"],
+ "vcxproj": ["code"],
+ "vob": ["video"],
+ "war": ["archive"],
+ "wasm": ["web"],
+ "wav": ["audio"],
+ "webm": ["video"],
+ "webp": ["image"],
+ "whl": ["archive"],
+ "wma": ["audio"],
+ "wmv": ["video"],
+ "woff": ["font"],
+ "woff2": ["font"],
+ "wpd": ["text"],
+ "wps": ["text"],
+ "xcf": ["image"],
+ "xcodeproj": ["code"],
+ "xls": ["sheet"],
+ "xlsx": ["sheet"],
+ "xm": ["audio"],
+ "xml": ["code"],
+ "xpi": ["archive"],
+ "xz": ["archive"],
+ "yuv": ["image", "video"],
+ "zip": ["archive"],
+ "zipx": ["archive"],
+ "zsh": ["script"]
+}
diff --git a/app/public/ico/font.svg b/app/public/ico/font.svg
new file mode 100644
index 0000000..05a0b2c
--- /dev/null
+++ b/app/public/ico/font.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/gzip.svg b/app/public/ico/gzip.svg
new file mode 100644
index 0000000..69bf578
--- /dev/null
+++ b/app/public/ico/gzip.svg
@@ -0,0 +1,20 @@
+
diff --git a/app/public/ico/image.svg b/app/public/ico/image.svg
new file mode 100644
index 0000000..c695a87
--- /dev/null
+++ b/app/public/ico/image.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/public/ico/iso.svg b/app/public/ico/iso.svg
new file mode 100644
index 0000000..4c05c25
--- /dev/null
+++ b/app/public/ico/iso.svg
@@ -0,0 +1,10 @@
+
diff --git a/app/public/ico/lua.svg b/app/public/ico/lua.svg
new file mode 100644
index 0000000..9b1bee5
--- /dev/null
+++ b/app/public/ico/lua.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/script.svg b/app/public/ico/script.svg
new file mode 100644
index 0000000..20799a4
--- /dev/null
+++ b/app/public/ico/script.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/sheet.svg b/app/public/ico/sheet.svg
new file mode 100644
index 0000000..9f7ee10
--- /dev/null
+++ b/app/public/ico/sheet.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/slideshow.svg b/app/public/ico/slideshow.svg
new file mode 100644
index 0000000..1b366e8
--- /dev/null
+++ b/app/public/ico/slideshow.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/subtitle.svg b/app/public/ico/subtitle.svg
new file mode 100644
index 0000000..908fcc8
--- /dev/null
+++ b/app/public/ico/subtitle.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/public/ico/text.svg b/app/public/ico/text.svg
new file mode 100644
index 0000000..0e5e83d
--- /dev/null
+++ b/app/public/ico/text.svg
@@ -0,0 +1,8 @@
+
diff --git a/app/public/ico/unknown.svg b/app/public/ico/unknown.svg
new file mode 100644
index 0000000..82fa337
--- /dev/null
+++ b/app/public/ico/unknown.svg
@@ -0,0 +1,9 @@
+
diff --git a/app/public/ico/video.svg b/app/public/ico/video.svg
new file mode 100644
index 0000000..ae221f3
--- /dev/null
+++ b/app/public/ico/video.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/public/img/add-sharp.svg b/app/public/img/add-sharp.svg
new file mode 100644
index 0000000..d4e12e4
--- /dev/null
+++ b/app/public/img/add-sharp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/arrow-down.svg b/app/public/img/arrow-down.svg
new file mode 100644
index 0000000..f6027be
--- /dev/null
+++ b/app/public/img/arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/checkmark.svg b/app/public/img/checkmark.svg
new file mode 100644
index 0000000..8c07ee2
--- /dev/null
+++ b/app/public/img/checkmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/cloud-download-outline-white.svg b/app/public/img/cloud-download-outline-white.svg
new file mode 100644
index 0000000..ad964c1
--- /dev/null
+++ b/app/public/img/cloud-download-outline-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/cloud-download-outline.svg b/app/public/img/cloud-download-outline.svg
new file mode 100644
index 0000000..a69daa9
--- /dev/null
+++ b/app/public/img/cloud-download-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/cloud-upload-outline.svg b/app/public/img/cloud-upload-outline.svg
new file mode 100644
index 0000000..9af1dc8
--- /dev/null
+++ b/app/public/img/cloud-upload-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/copy-outline.svg b/app/public/img/copy-outline.svg
new file mode 100644
index 0000000..ef3cb11
--- /dev/null
+++ b/app/public/img/copy-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/img/download-outline-white.svg b/app/public/img/download-outline-white.svg
new file mode 100644
index 0000000..c0d2fea
--- /dev/null
+++ b/app/public/img/download-outline-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/public/js/download.js b/app/public/js/download.js
new file mode 100644
index 0000000..05ae318
--- /dev/null
+++ b/app/public/js/download.js
@@ -0,0 +1,127 @@
+function copyToClipboard(button) {
+ input = button.parentElement.getElementsByTagName("input")[0];
+ input.select();
+ input.setSelectionRange(0, 99999);
+ navigator.clipboard.writeText(input.value)
+ temp0.parentElement.getElementsByClassName("copy")[0].classList.add("hidden");
+ temp0.parentElement.getElementsByClassName("checkmark")[1].classList.remove("hidden");
+}
+
+
+
+/*
+
+
+

+
+
+
+
+*/
+class file {
+ constructor(filename, extensions, index=0, hash="") {
+ this.filename = filename;
+ this.index = index;
+ this.hash = hash;
+ this.extensions = extensions;
+ }
+
+ getImage() {
+ var keys = Object.keys(this.extensions);
+ for(var i = 0; i < keys.length; i++) {
+ if (this.filename.endsWith("." + keys[i])) {
+ return "/ico/" + this.extensions[keys[i]][0] + ".svg";
+ };
+ }
+ return "/ico/unknown.svg";
+ }
+
+ getElement() {
+ if (this.hash.length > 0) {
+ var body = document.createElement("a");
+ body.href = document.location.protocol+"//"+document.location.host+"/download/"+this.hash+"/index/"+this.index;
+ } else {
+ var body = document.createElement("div");
+ }
+
+ body.classList.add("file");
+ var icon = document.createElement("img");
+ icon.classList.add("icon");
+ icon.src = this.getImage();
+ body.appendChild(icon);
+ var fn = document.createElement("div");
+ fn.classList.add("filename");
+ var p = document.createElement("p");
+ p.innerText = this.shortString(this.filename, 15);
+ fn.appendChild(p);
+ body.appendChild(fn);
+ return body;
+ }
+
+ shortString(str, maxlen = 18) {
+ if (str.length > maxlen) {
+ var shortstr = str.slice(0, (maxlen - 3) / 2) + "..." + str.slice(-(maxlen - 3) / 2);
+ } else {
+ shortstr = str;
+ }
+ return shortstr;
+ }
+}
+
+
+
+function loadPage(hash) {
+ fetch('/api/download/' + hash)
+ .then(
+ response => response.json()
+ ).then(jsonResponse => {
+ console.log(jsonResponse);
+
+ if (jsonResponse.code == 200) {
+ var files = jsonResponse.result.files;
+ console.log(files);
+ fetch('/ico/extensions.json')
+ .then(
+ response=>response.json()
+ ).then(jsonResponse => {
+ var extensions = jsonResponse;
+ vc = document.getElementsByClassName("view-container")[0];
+ if (files.length > 1) {
+ fc = document.getElementsByClassName("file-container")[0];
+ for(var i = 0; i < files.length; i++) {
+ var fo = new file(files[i].filename, extensions, i, hash)
+ fc.appendChild(fo.getElement());
+ }
+ vc.classList.remove("hidden");
+ } else if (files.length == 1) {
+ var container = document.createElement("div");
+ container.classList.add("container");
+ console.log(extensions);
+ var fo = new file(files[0].filename, extensions, 0);
+ container.appendChild(fo.getElement());
+ container.innerHTML = container.innerHTML+"
";
+ vc.innerHTML = "";
+ vc.appendChild(container);
+ vc.classList.remove("hidden");
+ } else {
+ document.getElementsByClassName("container")[0].innerHTML = "
Invalid Response
";
+ }
+ })
+ } else {
+ document.getElementsByClassName("container")[0].innerHTML = "
404 Not Found
";
+ }
+ });
+}
+
+/*
+
+

+
+
+*/