diff options
author | curly <curly@infernal.garden> | 2024-07-15 17:08:30 -0600 |
---|---|---|
committer | curly <curly@infernal.garden> | 2024-07-15 17:08:30 -0600 |
commit | 30b53f64f3bba30d259f04dcb6669a56203f94c6 (patch) | |
tree | 2c6e67a12844ebb9daf63077e73b25f9c58eeaa8 /src | |
parent | e6150a01fef7cb8614f1337abbc9630be373aac5 (diff) | |
download | poko_web-30b53f64f3bba30d259f04dcb6669a56203f94c6.tar.gz poko_web-30b53f64f3bba30d259f04dcb6669a56203f94c6.tar.bz2 poko_web-30b53f64f3bba30d259f04dcb6669a56203f94c6.zip |
styled
Diffstat (limited to 'src')
-rw-r--r-- | src/index.html | 23 | ||||
-rw-r--r-- | src/login.html | 35 | ||||
-rw-r--r-- | src/main.css | 128 | ||||
-rw-r--r-- | src/main.js | 85 | ||||
-rw-r--r-- | src/register.html | 39 | ||||
-rw-r--r-- | src/transfer.html | 48 | ||||
-rw-r--r-- | src/user.html | 44 |
7 files changed, 327 insertions, 75 deletions
diff --git a/src/index.html b/src/index.html index f9b952b..48f5123 100644 --- a/src/index.html +++ b/src/index.html @@ -5,17 +5,28 @@ <script src="main.js" defer></script> </head> <body onload="has_session()"> - <div id="content"> - <a href="login.html"> - <button>Login</button> + <header> + <a href="/"> + <center class="button navbutton">HOME</center> </a> - <a href="register.html"> - <button>Register</button> + <a href="/login.html"> + <center class="button navbutton">LOGIN</center> </a> + <a href="/register.html"> + <center class="button navbutton">REGISTER</center> + </a> + </header> + <div id="page"> + <center> + <h2>POKO</h2> + </center> + <hr> + <div id="content"> + </div> </div> <footer> <center> - <a href="/">POKO</a> + <p>POKO</p> </center> </footer> </body> diff --git a/src/login.html b/src/login.html index 0b77009..30119c1 100644 --- a/src/login.html +++ b/src/login.html @@ -5,18 +5,35 @@ <script src="main.js" defer></script> </head> <body> - <div id="content"> - <form action="javascript:login_form()"> - <label for="id">ID</label> - <input type="text" id="id" minlength="4" maxlength="4" pattern="[0123456789abcedfABCDEF]{4}" required> - <label for="password">Password</label> - <input type="password" id="password" minlength="4" required> - <input type="submit" value="Login"> - </form> + <header> + <a href="/"> + <center class="button navbutton">HOME</center> + </a> + <a href="/login.html"> + <center class="button navbutton">LOGIN</center> + </a> + <a href="/register.html"> + <center class="button navbutton">REGISTER</center> + </a> + </header> + <div id="page"> + <center> + <h2>LOGIN</h2> + </center> + <hr> + <div id="content"> + <form action="javascript:login_form()" class="formbox"> + <label for="id">ID</label> + <input type="text" id="id" minlength="4" maxlength="4" pattern="[0123456789abcedfABCDEF]{4}" required> + <label for="password">PASSWORD</label> + <input type="password" id="password" minlength="4" required> + <input type="submit" class="button formbutton" value="LOGIN"> + </form> + </div> </div> <footer> <center> - <a href="/">POKO</a> + <p>POKO</p> </center> </footer> </body> diff --git a/src/main.css b/src/main.css index 2c53965..45911ed 100644 --- a/src/main.css +++ b/src/main.css @@ -2,11 +2,15 @@ html, body { margin: 0; padding: 0; border: 0; - background-color: grey; + background-color: var(--background-tertiary); } footer { - border-top: 2px solid black; + border-top: 2px solid var(--text-primary); font-weight: bold; + background-color: var(--background); + position: sticky; + bottom: 0; + width: 100%; } footer > center > p { margin: 0; @@ -17,17 +21,33 @@ body { height: 100vh; width: 100vw; } -#content { +#page { flex-grow: 1; - max-width: 70vw; + max-width: 65vw; + min-width: 45vw; margin: auto; + padding: 20px; display: flex; flex-direction: column; + background-color: var(--background); + margin-top: 8px; + margin-bottom: 8px; +} +hr { + color: var(--text-primary); + width: 100%; +} +#content { + flex-grow: 1; + display: flex; + flex-direction: row; + flex-wrap: wrap; + background-color: var(--background); + padding: 20px; } form { display: flex; flex-direction: column; - max-width: 40vw; align-self: center; } form > label { @@ -35,29 +55,109 @@ form > label { } input:invalid { - border: 2px dotted red; + border: 4px dotted var(--text-warning); } bold { font-weight: bold; - color: red; - background-color: black; + color: var(--text-warning); + background-color: var(--background); } +header { + display: flex; + justify-content: center; + flex-wrap: wrap; + position: sticky; + top: 0; + width: 100%; +} +a:last-child > .navbutton { + border-right: none; +} +.button { + padding: 2px 10px 2px 10px; + border-right: 2px solid var(--text-primary); + font-family: inherit; + font-size: inherit; + background-color: var(--background); + border: 2px solid var(--text-primary); +} +.formbutton { + box-shadow: none; + border-radius: 0; + margin-top: 6px; +} +.navbutton { + border: none; + border-right: 2px solid var(--text-primary); + border-bottom: 2px solid var(--text-primary); +} +.button:hover { + background-color: var(--secondary); +} + +input { + font-family: inherit; + font-size: inherit; + border: 4px dotted var(--text-primary); + background-color: var(--background-seconday); +} +form > select.button { + background-color: var(--background-seconday); + border: 4px dotted var(--text-primary); +} + +.halfbox { + width: 50%; + display: grid; + flex-grow: 1; + align-content: start; +} +.formbox { + display: grid; + flex-grow: 1; + align-content: start; + align-self: start; +} + +#page > center > h2 { + margin-top: 12px; + margin-bottom: 12px; +} + +header > a, header > a:visited, header > a:link { + text-decoration: none; + color: var(--text-primary); + font-weight: bold; + justify-content: center; + flex-grow: 1;} + :root { - --primary: #efefef; - --text-primary: #222; + --background: #fbf9f4; + --background-seconday: #fbfaca; + --background-tertiary: #e0e0e0; + --primary: #222; + --secondary: #ccc; + --text-primary: #4f474a; + --text-warning: red; + font-family: monospace; + font-size: 2em; + color: var(--text-primary) } @media (prefers-color-scheme: dark) { :root { - --primary: #222; - --text-primary: #eee; } } -@media screen and (max-width: 500px) { - #content { +@media screen and (max-width: 800px) { + #page { + max-width: 100vw; + min-width: 90vw; + } + #content > div { + width: 100%; max-width: unset; } }
\ No newline at end of file diff --git a/src/main.js b/src/main.js index 2b880a2..3060767 100644 --- a/src/main.js +++ b/src/main.js @@ -1,4 +1,3 @@ -// const host = window.location.protocol + "//" + window.location.host; const server = window.location.protocol + "//" + window.location.hostname + ":8000"; const host = window.location.protocol + "//" + window.location.host; const client_id = "POKO Web 0.0" @@ -64,7 +63,7 @@ async function register() { if (req.status == 201) { await login(req.body.id, password) - window.location.href = host + window.location.href = host + "/user.html" } else { alert(req.status + ": " + req.body) } @@ -89,7 +88,7 @@ async function login(id, password) { if (req.status == 200) { // Set session cookie set_session(req.body, id) - window.location.href = host; + window.location.href = host + "/user.html"; } else { alert(req.status + ": " + req.body) } @@ -142,56 +141,64 @@ async function logout() { } } -async function has_session() { +async function is_logged_in() { const session = get_session(); const id = get_id(); - const users = await userlist(); - const content = document.getElementById("content"); - - // If session exists if (session != "") { - // If ID exists if (id != "") { const url = server + "/user/get" const body = {"id": id, "session": session} const req = await xhttp_post(url, body); if (req.status == 200) { - - const tokens = format_tokovec(req.body.tokovec); - - content.innerHTML = ` - <div id="userinfo"> - <h3>User Info</h3> - <p>Username: ${req.body.name}</p> - <p>ID: ${id}</p> - </div> - <div id="balance"> - <h3>Tokens Balance</h3> - ${tokens} - </div> - <div id="actions"> - <h3>Actions</h3> - <a href="/transfer.html"><button>Transfer</button></a> - <button onclick="logout()">Logout</button> - <button onclick="logout_all()">Logout All //TODO</button> - </div> - <div id="users"> - <h3>Users</h3> - ${users} - </div> - `; + return true } else if (req.status == 404) { if (req.body == "Not Authenticated") { del_session() + return false } } } else { del_session() } - } else { - content.innerHTML += users; + } + + return false +} + +async function user() { + const session = get_session(); + const id = get_id(); + + const user_name = document.getElementById("user.name"); + const user_id = document.getElementById("user.id"); + const users = document.getElementById("users"); + const balance = document.getElementById("balance"); + + + if (is_logged_in()) { + + + const url = server + "/user/get" + const body = {"id": id, "session": session} + const req = await xhttp_post(url, body); + + if (req.status == 200) { + + const tokens = format_tokovec(req.body.tokovec); + const user_list = await userlist(); + + user_name.innerHTML = `Name: ${req.body.name}`; + user_id.innerHTML = `ID: ${id}`; + users.innerHTML += user_list; + balance.innerHTML += tokens; + + } else if (req.status == 404) { + if (req.body == "Not Authenticated") { + del_session() + } + } } } @@ -226,4 +233,12 @@ async function userlist() { } catch {} return out +} + +function transfer() {} + +function transfer_form() { + const to_id = document.getElementById("to_id").value; + const color = document.getElementById("color").value; + const amount = document.getElementById("amount").value; }
\ No newline at end of file diff --git a/src/register.html b/src/register.html index 34deb49..b80bab6 100644 --- a/src/register.html +++ b/src/register.html @@ -5,20 +5,37 @@ <script src="main.js" defer></script> </head> <body> - <div id="content"> - <form action="javascript:register()"> - <label for="username">Username</label> - <input type="text" id="username" minlength="1" required> - <label for="password">Password<br><bold>DO NOT REUSE A PASSWORD. THIS APPLICATION IS NOT SECURE</bold></label> - <input type="password" id="password" minlength="4" required> - <label for="id">ID (optional)<br>This is what you use to login. Do not lose it. One will be generated if not specified</label> - <input type="text" id="id" minlength="4" maxlength="4" pattern="[0123456789abcedfABCDEF]{4}"> - <input type="submit" value="Register"> - </form> + <header> + <a href="/"> + <center class="button navbutton">HOME</center> + </a> + <a href="/login.html"> + <center class="button navbutton">LOGIN</center> + </a> + <a href="/register.html"> + <center class="button navbutton">REGISTER</center> + </a> + </header> + <div id="page"> + <center> + <h2>REGISTER</h2> + </center> + <hr> + <div id="content"> + <form action="javascript:register()" class="formbox"> + <label for="username">USERNAME</label> + <input type="text" id="username" minlength="1" required> + <label for="password">PASSWORD<br><bold>DO NOT REUSE A PASSWORD! THIS APPLICATION IS NOT SECURE!</bold></label> + <input type="password" id="password" minlength="4" required> + <label for="id">ID (OPTIONAL)<br>THIS IS WHAT YOU USE TO LOGIN. <bold>DO NOT LOSE IT!</bold> ONE WILL BE GENERATED IF NOT SPECIFIED.</label> + <input type="text" id="id" minlength="4" maxlength="4" pattern="[0123456789abcedfABCDEF]{4}"> + <input type="submit" class="button formbutton" value="REGISTER"> + </form> + </div> </div> <footer> <center> - <a href="/">POKO</a> + <p>POKO</p> </center> </footer> </body> diff --git a/src/transfer.html b/src/transfer.html new file mode 100644 index 0000000..920c779 --- /dev/null +++ b/src/transfer.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> + <head> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="main.css"> + <script src="main.js" defer></script> + </head> + <body> + <header> + <a href="/user.html"> + <center class="button navbutton">USER</center> + </a> + <a href="/transfer.html"> + <center class="button navbutton">TRANSFER</center> + </a> + <a href="#" onclick="logout()"> + <center class="button navbutton">LOGOUT</center> + </a> + </header> + <div id="page"> + <center> + <h2>TRANSFER</h2> + </center> + <hr> + <div id="content"> + <form action="javascript:transfer_form()" class="formbox"> + <label for="to_id">RECIPIENT ID</label> + <input type="text" id="to_id" minlength="4" maxlength="4" pattern="[0123456789abcedfABCDEF]{4}" required> + <label for="color">COLOR</label> + <select class="button" required> + <option>WHITE</option> + <option>RED</option> + <option>GREEN</option> + <option>BLUE</option> + <option>YELLOW</option> + </select> + <label for="amount">AMOUNT</label> + <input type="number" id="amount" required> + <input type="submit" class="button formbutton" value="SEND"> + </form> + </div> + </div> + <footer> + <center> + <p>POKO</p> + </center> + </footer> + </body> +</html>
\ No newline at end of file diff --git a/src/user.html b/src/user.html new file mode 100644 index 0000000..00bfad6 --- /dev/null +++ b/src/user.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> + <head> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="main.css"> + <script src="main.js" defer></script> + </head> + <body onload="user()"> + <header> + <a href="/user.html"> + <center class="button navbutton">USER</center> + </a> + <a href="/transfer.html"> + <center class="button navbutton">TRANSFER</center> + </a> + <a href="#" onclick="logout()"> + <center class="button navbutton">LOGOUT</center> + </a> + </header> + <div id="page"> + <center> + <h2>USER</h2> + </center> + <hr> + <div id="content"> + <div id="userinfo" class="halfbox"> + <h3>User Info</h3> + <p id="user.name"></p> + <p id="user.id"></p> + </div> + <div id="balance" class="halfbox"> + <h3>Tokens Balance</h3> + </div> + <div id="users" class="halfbox"> + <h3>Users</h3> + </div> + </div> + </div> + <footer> + <center> + <p>POKO</p> + </center> + </footer> + </body> +</html>
\ No newline at end of file |