Make session control fully ajax
This commit is contained in:
@@ -28,15 +28,12 @@
|
||||
/>
|
||||
</a>
|
||||
<div class="header-right">
|
||||
<div class="signed_in">
|
||||
<button class="account-button" id="logout-button">LOGOUT</button>
|
||||
</div>
|
||||
<div class="not_signed_i">
|
||||
<button class="account-button" id="login-button">LOGIN</button>
|
||||
<button class="account-button" id="signup-button">SIGN UP</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span id="message"><%= @message %></span>
|
||||
<canvas id="main-canvas"></canvas>
|
||||
<div class="popup" id="popup">
|
||||
<span class="close" id="close">×</span>
|
||||
@@ -69,6 +66,9 @@
|
||||
<span class="info" id="signup-info"></span>
|
||||
</form>
|
||||
</div>
|
||||
<div class="popup-tab" id="settings">
|
||||
<!-- TODO: settings -->
|
||||
</div>
|
||||
<div class="popup-tab" id="forgot-pass">
|
||||
<form id="forgot-form" class="form">
|
||||
<input
|
||||
|
10
main.rb
10
main.rb
@@ -37,7 +37,8 @@ set :public_folder, "public"
|
||||
|
||||
get "/" do
|
||||
session = Sessions.new request, response
|
||||
Logman.log session.message if session.message != ""
|
||||
@message = session.message || ""
|
||||
session.message = ""
|
||||
@signed_in = session.signed_in?.nil? ? false : true
|
||||
ERB.new(File.read("index.erb")).result(binding)
|
||||
end
|
||||
@@ -104,20 +105,21 @@ post "/logout" do
|
||||
uid = session["user"]
|
||||
if $active_users[uid].nil?
|
||||
status 400
|
||||
return { "message" => "Not signed in!" }.to_json
|
||||
return { "message" => "Not logged in!" }.to_json
|
||||
end
|
||||
unless session.logout
|
||||
status 500
|
||||
return { "message" => "Internal server error when signing you out!" }.to_json
|
||||
return { "message" => "Internal server error when logging you out!" }.to_json
|
||||
end
|
||||
status 200
|
||||
return { "message" => "Signed out successfully!" }.to_json
|
||||
return { "message" => "Logged out successfully!", "success" => "true" }.to_json
|
||||
end
|
||||
|
||||
get "/logout" do
|
||||
session = Sessions.new request, response
|
||||
uid = session["user"]
|
||||
session.logout unless $active_users[uid].nil?
|
||||
session.message = "Logged out successfully!"
|
||||
redirect "/"
|
||||
end
|
||||
|
||||
|
@@ -16,6 +16,44 @@ body {
|
||||
font-family: "WDXL Lubrifont JP N", sans-serif;
|
||||
}
|
||||
|
||||
#message {
|
||||
color: white;
|
||||
position: absolute;
|
||||
background-color: #1b262c;
|
||||
width: calc(100vw - 10px);
|
||||
padding: 5px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 21px;
|
||||
font-family: "WDXL Lubrifont JP N", sans-serif;
|
||||
opacity: 1;
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
#message.hide {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#message::after {
|
||||
content: "X";
|
||||
color: white;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#message:hover::after {
|
||||
color: #90bdd9;
|
||||
}
|
||||
|
||||
#message:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#message:empty:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button {
|
||||
font-family: "WDXL Lubrifont JP N", sans-serif;
|
||||
font-size: 18px;
|
||||
@@ -132,7 +170,7 @@ input {
|
||||
}
|
||||
|
||||
.form button {
|
||||
margin-top: 20px;
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
background-color: #3498db;
|
||||
color: white;
|
||||
@@ -152,6 +190,9 @@ input {
|
||||
|
||||
.header-right {
|
||||
margin-right: 20px;
|
||||
display: flex;
|
||||
white-space: nowrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.account-button {
|
||||
@@ -160,7 +201,6 @@ input {
|
||||
cursor: pointer;
|
||||
color: #90bdd9;
|
||||
font-size: 23px;
|
||||
margin-right: 10px;
|
||||
font-family: "WDXL Lubrifont JP N", sans-serif;
|
||||
}
|
||||
|
||||
|
@@ -21,6 +21,9 @@ window.onload = async () => {
|
||||
const forgotButton = document.getElementById("forgot-link");
|
||||
const closeButton = document.getElementById("close");
|
||||
|
||||
const message = document.getElementById("message");
|
||||
message.onclick = () => message.classList.add("hide");
|
||||
|
||||
const signedInMeta = document.querySelector('meta[name="signed_in"]');
|
||||
const isSignedIn = signedInMeta?.content === "true";
|
||||
if (isSignedIn) {
|
||||
@@ -49,14 +52,20 @@ window.onload = async () => {
|
||||
|
||||
loginButton?.addEventListener("click", () => showPopup(loginSection));
|
||||
signupButton?.addEventListener("click", () => showPopup(signupSection));
|
||||
logoutButton?.addEventListener(
|
||||
"click",
|
||||
() => (window.location.href = "/logout"),
|
||||
);
|
||||
logoutButton?.addEventListener("click", async () => {
|
||||
const res = await fetch("/logout", { method: "POST" });
|
||||
const data = await res.json();
|
||||
message.innerText = data.message;
|
||||
message.classList.remove("hide");
|
||||
if (data.success == "true") {
|
||||
loginButton.style.display = "block";
|
||||
signupButton.style.display = "block";
|
||||
logoutButton.style.display = "none";
|
||||
}
|
||||
});
|
||||
forgotButton?.addEventListener("click", () => showPopup(forgotPassSection));
|
||||
closeButton?.addEventListener("click", hidePopup);
|
||||
|
||||
// TODO: if succesful hide form and popup success message
|
||||
loginForm?.addEventListener("submit", async (e) => {
|
||||
e.preventDefault();
|
||||
const { username, pass } = loginForm;
|
||||
@@ -71,10 +80,12 @@ window.onload = async () => {
|
||||
loginButton.style.display = "none";
|
||||
signupButton.style.display = "none";
|
||||
logoutButton.style.display = "block";
|
||||
message.innerText = data.message;
|
||||
message.classList.remove("hide");
|
||||
hidePopup();
|
||||
}
|
||||
});
|
||||
|
||||
// TODO: if succesful hide form and popup success message
|
||||
signupForm?.addEventListener("submit", async (e) => {
|
||||
e.preventDefault();
|
||||
const { username, email, pass } = signupForm;
|
||||
@@ -93,6 +104,9 @@ window.onload = async () => {
|
||||
loginButton.style.display = "none";
|
||||
signupButton.style.display = "none";
|
||||
logoutButton.style.display = "block";
|
||||
message.innerText = data.message;
|
||||
message.classList.remove("hide");
|
||||
hidePopup();
|
||||
}
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user