diff options
author | Joris | 2024-05-20 20:09:01 +0200 |
---|---|---|
committer | Joris | 2024-06-02 14:20:50 +0200 |
commit | e8da9790dc6d55cd2e8883322cdf9a7bf5b4f5b7 (patch) | |
tree | c960e1036e3d93c1f91b58dfe9e3c8e6038ed363 /static | |
parent | d2f33d8e854b7fda6bae389d983025e6c8609842 (diff) |
Migrate to sanic
Diffstat (limited to 'static')
-rw-r--r-- | static/main.css | 71 | ||||
-rw-r--r-- | static/main.js | 48 |
2 files changed, 119 insertions, 0 deletions
diff --git a/static/main.css b/static/main.css new file mode 100644 index 0000000..db9a678 --- /dev/null +++ b/static/main.css @@ -0,0 +1,71 @@ +html { + margin: 0 1rem; +} + +body { + max-width: 30rem; + margin: 0 auto; + font-family: sans-serif; +} + +a { + text-decoration: none; + color: #06C; +} + +h1 { + text-align: center; + font-variant: small-caps; + font-size: 40px; + letter-spacing: 0.2rem; + margin-bottom: 4rem; +} + +.g-Link { + text-decoration: underline; +} + +label { + display: flex; + gap: 0.5rem; + flex-direction: column; + margin-bottom: 2rem; +} + +input[type=submit] { + width: 100%; +} + +.g-Loading { + display: none; + align-items: center; + justify-content: center; + gap: 1rem; + margin-bottom: 2rem; +} + +.g-Error { + text-align: center; + margin-bottom: 2rem; + color: #C00; +} + +.g-Spinner { + width: 25px; + height: 25px; + border: 4px solid #06C; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: rotation 1s linear infinite; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/static/main.js b/static/main.js new file mode 100644 index 0000000..1729d38 --- /dev/null +++ b/static/main.js @@ -0,0 +1,48 @@ +window.onload = function() { + const form = document.querySelector('form') + + if (form !== null) { + const submit = document.querySelector('input[type="submit"]') + const loading = document.querySelector('.g-Loading') + const error = document.querySelector('.g-Error') + + function showError(msg) { + loading.style.display = 'none' + submit.disabled = false + error.innerText = msg + error.style.display = 'block' + } + + form.onsubmit = function(event) { + event.preventDefault() + + loading.style.display = 'flex' + submit.disabled = true + error.style.display = 'none' + + const key = document.querySelector('input[name="key"]').value + const expiration = document.querySelector('select[name="expiration"]').value + const file = document.querySelector('input[name="file"]').files[0] + + // Wait a bit to prevent showing the loader too briefly + setTimeout(function() { + const xhr = new XMLHttpRequest() + xhr.open('POST', '/', true) + xhr.onload = function () { + if (xhr.status === 200) { + window.location = `/${xhr.responseText}` + } else { + showError(`Error uploading: ${xhr.status}`) + } + } + xhr.onerror = function () { + showError('Upload error') + } + xhr.setRequestHeader('X-FileName', file.name) + xhr.setRequestHeader('X-Expiration', expiration) + xhr.setRequestHeader('X-Key', key) + xhr.send(file) + }, 500) + } + } +} |