From 865efeb6025cde4b13948b288375b5b766366928 Mon Sep 17 00:00:00 2001 From: biglyderv Date: Sun, 20 Apr 2025 20:05:33 -0400 Subject: [PATCH] port over all static code --- arrows/left.svg | 1 + arrows/right.svg | 1 + index.css | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 30 ++++++++++++++++ index.js | 76 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 arrows/left.svg create mode 100644 arrows/right.svg create mode 100644 index.css create mode 100644 index.html create mode 100644 index.js diff --git a/arrows/left.svg b/arrows/left.svg new file mode 100644 index 0000000..216f5bc --- /dev/null +++ b/arrows/left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/arrows/right.svg b/arrows/right.svg new file mode 100644 index 0000000..9145fe9 --- /dev/null +++ b/arrows/right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.css b/index.css new file mode 100644 index 0000000..97f2874 --- /dev/null +++ b/index.css @@ -0,0 +1,94 @@ +:root, +input, +button { + font-family: sans-serif; +} + +body { + margin: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100vh; + +} + +#form { + background: rgba(0, 0, 0, 0.15); + padding: 0.25rem; + box-sizing: border-box; + backdrop-filter: blur(10px); + position: sticky; + bottom: 0; +} + +.inner-form { + display: flex; + flex-direction: row; + justify-content: center; +} + +#input { + border: none; + padding: 0 1rem; + border-radius: 0.3rem; + margin: 0.25rem; + height: 2rem; + flex-grow: 1; +} + +#input:focus { + outline: none; +} + +.inner-form>button { + background: #333; + border: none; + padding: 0 1rem; + margin: 0.25rem; + height: 2rem; + border-radius: 3px; + outline: none; + flex-grow: 1; +} + +button, button a { + color: #fff; + text-decoration: none; +} + +button a { + width: 100%; + height: 2rem; + text-align: center; + line-height:2rem; + vertical-align: middle; + display: inline-block; +} + +#messages { + list-style-type: none; + margin: 0; + padding: 0; +} + +#messages>li { + padding: 0.5rem 1rem; + white-space: pre-wrap; +} +#messages>li>li { + margin: 0; + line-height: 1em; + height: 1em; + padding-bottom: 0.1em; + overflow: hidden; +} + + +#messages>li>li>img { + height: 1.1em; +} + +#messages>li:nth-child(odd) { + background: #efefef; +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..6f7f524 --- /dev/null +++ b/index.html @@ -0,0 +1,30 @@ + + + + + Dervland + + + + + + + +
+
+ +
+
+ + + +
+ +
+ + + + \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..ae6600c --- /dev/null +++ b/index.js @@ -0,0 +1,76 @@ + +var messages = document.getElementById('messages'); +var form = document.getElementById('form'); +var input = document.getElementById('input'); +const server = new URLSearchParams(document.location.search).get('server') || '/'; + +async function goPage(count) { + let counter = input.value.match(/[^\s]+$/g); + if (!counter) return false; + + input.value = `${input.value.match(/^[^\s]+/g)[0]} ${counter[0] * 1 + count}`; + main(new Event('placeholder')); + return false; +} + +async function addMsg(msg) { + let lines = msg.split('\n'); + var wrap = document.createElement('li'); + + for (let line of lines) { + var item = document.createElement('li'); + item.textContent = line; + + if (line.startsWith('-') || line.startsWith('<')) { + let img = new Image(); + if (line.startsWith('<') || line[2] == '>') { + item.textContent = line.slice(3); + img.src = `arrows/left.svg`; + } else { + item.textContent = line.slice(2); + img.src = `arrows/right.svg`; + } + item.insertBefore(img, item.childNodes[0]) + } + wrap.appendChild(item); + } + messages.appendChild(wrap); + window.scrollTo(0, messages.offsetHeight); +} + +async function main(e) { + e.preventDefault(); + + if (!input.value) return false; + + let msg = await fetch(server, { + "method": "POST", + "headers": { + "content-type": "application/json", + }, + "body": JSON.stringify({ "data": input.value }) + }) + + msg = await msg.text(); + msg = msg.trim(); + + addMsg(input.value) + addMsg(msg) + + return false; +} + +form.addEventListener('submit', main); + +document.querySelector('.send').addEventListener('click', main); +document.querySelector('.prev').addEventListener('click', (e) => { e.preventDefault(); return goPage(1) }); +document.querySelector('.next').addEventListener('click', (e) => { e.preventDefault(); return goPage(-1) }); + + +input.value = '/help 1'; +goPage(0); + +setTimeout(function () { + input.value = '/inv 1'; + goPage(0); +}, 500) \ No newline at end of file