From 1fefb44b515e85d9d7ea917f687bda9a81dc2d6a Mon Sep 17 00:00:00 2001 From: Henry Hiles Date: Mon, 28 Feb 2022 16:49:22 -0500 Subject: [PATCH] Added regex --- public/script.js | 34 ++++++++++++++++++++++++++++++++++ public/style.css | 13 ++++++++++--- server.js | 2 +- views/index.ejs | 4 ++-- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/public/script.js b/public/script.js index b7e2e40..adba1e9 100644 --- a/public/script.js +++ b/public/script.js @@ -5,6 +5,7 @@ const messageButton = document.querySelector("#send") const menuButton = document.querySelector("#menu") const nameButton = document.querySelector("#name") const nameInput = document.querySelector("input") +const roomInput = document.querySelector("#room") const roomContainer = document.querySelector("#room-container") const messageInput = document.querySelector("textarea") const login = document.querySelector("#login") @@ -28,6 +29,31 @@ const submitMessage = () => { messageInput.value = "" } +const type = (newText) => { + const element = document.activeElement + element.setRangeText( + newText, + element.selectionStart, + element.selectionEnd, + "end" + ) +} + +roomInput.addEventListener("keydown", (event) => { + if (event.code == "Space") { + event.preventDefault() + type("-") + } else if (!/^[-a-z0-9]+$/i.test(event.key)) event.preventDefault() +}) + +const checkAlphanumeric = (event) => { + const text = (event.clipboardData || event.dataTransfer).getData("Text") + if (!/^[-a-z0-9]+$/i.test(text)) event.preventDefault() +} + +roomInput.addEventListener("paste", checkAlphanumeric) +roomInput.addEventListener("drop", checkAlphanumeric) + messageInput.addEventListener("keydown", (event) => { if (event.key != "Enter" || event.shiftKey) return event.preventDefault() @@ -68,6 +94,14 @@ if (roomName) { } } +document.querySelector("#room-form").addEventListener("submit", (event) => { + if (!roomInput.value.trim()) { + event.preventDefault() + roomInput.required = true + document.querySelector("#room-button").classList.add("required") + } +}) + menuButton.addEventListener("click", toggleOpen) if (!localStorage.getItem("name")) login.classList.remove("done") diff --git a/public/style.css b/public/style.css index 912954b..a27f309 100644 --- a/public/style.css +++ b/public/style.css @@ -36,6 +36,7 @@ body { #rooms { background-color: var(--secondary); width: 0; + padding: 20px 0; overflow: hidden; align-items: center; transition: width 0.6s, padding 0.6s; @@ -294,12 +295,16 @@ button:is(:disabled, :hover) { display: flex; } -:is(input[type="text"], textarea):required { +:required { animation: shake 0.2s ease-in-out 0s 2; border-color: red !important; } -:is(input[type="text"], textarea):required::placeholder { +.required { + border-color: red !important; +} + +:required::placeholder { color: #f20000; } @@ -313,12 +318,14 @@ button:is(:disabled, :hover) { .input-field { flex: 1; + background-color: #3b3b3b; width: 100%; + color: #f5f5f5; font-size: 1em; } .input-field::placeholder { - color: var(--secondary) !important; + color: #f5f5f5; } .input-field:not(:first-child) { diff --git a/server.js b/server.js index 94447a2..f172683 100644 --- a/server.js +++ b/server.js @@ -31,7 +31,7 @@ app.get("/", (_, res) => { }) app.post("/", (req, res) => { - if (rooms[req.body.room] != null) { + if (!req.body.room.trim() || rooms[req.body.room]) { return res.redirect("/") } rooms[req.body.room] = { users: {} } diff --git a/views/index.ejs b/views/index.ejs index 47973a2..1955f5e 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -49,10 +49,10 @@

No rooms

<%} %> -
+
-