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