register blah

This commit is contained in:
newtbot
2024-01-19 16:04:50 +08:00
parent 8dd917e541
commit e63bcf1734
9 changed files with 417 additions and 160 deletions

View File

@ -203,3 +203,51 @@ form
.form.login .back-to-login:hover {
text-decoration: underline;
}
.top-nav{
background-color: #ffffff !important;
}
.navbar-expand-lg.top-nav .navbar-nav .nav-link{
padding: 10px 15px;
color: #4e3914;
font-size: 14px;
font-weight: 300;
text-transform: uppercase;
}
.navbar-expand-lg.top-nav .navbar-nav .nav-link:hover{
background: #4eae3a;
color: #ffffff;
border-radius: 4.8px;
}
.navbar-expand-lg.top-nav .navbar-nav .nav-link.active{
background: #4eae3a;
color: #ffffff;
border-radius: 4.8px;
}
.navbar-expand-lg.top-nav .navbar-nav .dropdown-menu{
margin: 0px;
box-shadow: 3px 5px 15px rgba(0,0,0, .15);
border: none;
padding: 20px;
}
.navbar-expand-lg.top-nav .navbar-nav .dropdown-menu .dropdown-item{
font-size: 14px;
padding: 0px;
padding-bottom: 15px;
font-weight: 300;
}
.navbar-expand-lg.top-nav .navbar-nav .dropdown-menu .dropdown-item:last-child{
padding: 0px;
}
.navbar-expand-lg.top-nav .navbar-nav .dropdown-menu .dropdown-item:hover{
background: none;
color: #4eae3a;
}
.top-nav .navbar-toggler{
color: #4e3914;
border-color: #4e3914;
}
.top-nav .navbar-toggler:hover{
color: #4eae3a;
border-color: #4eae3a;
}

View File

@ -1,140 +1,202 @@
var app = {};
app.util = (function (app) {
function getUrlParameter(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
var results = regex.exec(location.search);
return results === null
? ""
: decodeURIComponent(results[1].replace(/\+/g, " "));
}
app.api = (function(app){
var baseURL = '/api/v0/'
function actionMessage(message, $target, type, callback) {
message = message || "";
$target = $target.closest("div.card").find(".actionMessage");
type = type || "info";
callback = callback || function () {};
function post(url, data, callback){
if ($target.html() === message) return;
if ($target.html()) {
$target.slideUp("fast", function () {
$target.html("");
$target.removeClass(function (index, className) {
return (className.match(/(^|\s)bg-\S+/g) || []).join(" ");
});
if (message) return actionMessage(message, $target, type, callback);
$target.hide();
});
} else {
if (type) $target.addClass("bg-" + type);
message =
'<button class="action-close btn btn-sm btn-outline-dark float-right"><i class="fa-solid fa-xmark"></i></button>' +
message;
$target.html(message).slideDown("fast");
}
setTimeout(callback, 10);
}
$.fn.serializeObject = function () {
var arr = $(this).serializeArray(),
obj = {};
for (var i = 0; i < arr.length; i++) {
if (obj[arr[i].name] === undefined) {
obj[arr[i].name] = arr[i].value;
} else {
if (!(obj[arr[i].name] instanceof Array)) {
obj[arr[i].name] = [obj[arr[i].name]];
}
obj[arr[i].name].push(arr[i].value);
}
}
return obj;
};
return {
getUrlParameter: getUrlParameter,
actionMessage: actionMessage,
};
})(app);
app.api = (function (app) {
var baseURL = "/api/v0/";
function post(url, data, callback) {
$.ajax({
type: 'POST',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
type: "POST",
url: baseURL + url,
headers: {
//register will getr undefined token
//login will get valid token
"auth-token": app.auth.getToken(),
},
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
complete: function (res, text) {
callback(
text !== 'success' ? res.statusText : null,
text !== "success" ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
);
},
});
}
function put(url, data, callback){
function put(url, data, callback) {
$.ajax({
type: 'PUT',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
type: "PUT",
url: baseURL + url,
headers: {
"auth-token": app.auth.getToken(),
},
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
complete: function (res, text) {
callback(
text !== 'success' ? res.statusText : null,
text !== "success" ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
);
},
});
}
function remove(url, callback, callback2){
if(!$.isFunction(callback)) callback = callback2;
function remove(url, callback, callback2) {
if (!$.isFunction(callback)) callback = callback2;
$.ajax({
type: 'delete',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
type: "delete",
url: baseURL + url,
headers: {
"auth-token": app.auth.getToken(),
},
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
complete: function (res, text) {
callback(
text !== 'success' ? res.statusText : null,
text !== "success" ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
);
},
});
}
function get(url, callback){
function get(url, callback) {
$.ajax({
type: 'GET',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
type: "GET",
url: baseURL + url,
headers: {
"auth-token": app.auth.getToken(),
},
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
complete: function (res, text) {
callback(
text !== 'success' ? res.statusText : null,
text !== "success" ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
);
},
});
}
return {post: post, get: get, put: put, delete: remove}
})(app)
return { post: post, get: get, put: put, delete: remove };
})(app);
app.auth = (function(app) {
var user = {}
function setToken(token){
localStorage.setItem('APIToken', token);
app.auth = (function (app) {
var user = {};
function setToken(token) {
localStorage.setItem("APIToken", token);
}
function getToken(){
return localStorage.getItem('APIToken');
function getToken() {
return localStorage.getItem("APIToken");
}
function isLoggedIn(callback){
if(getToken()){
return app.api.get('user/me', function(error, data){
if(!error) app.auth.user = data;
function isLoggedIn(callback) {
if (getToken()) {
return app.api.get("user/me", function (error, data) {
if (!error) app.auth.user = data;
return callback(error, data);
});
}else{
} else {
callback(null, false);
}
}
function logIn(args, callback){
app.api.post('auth/login', args, function(error, data){
if(data.login){
function logIn(args, callback) {
app.api.post("auth/login", args, function (error, data) {
if (data.login) {
setToken(data.token);
}
callback(error, !!data.token);
});
}
function logOut(callback){
localStorage.removeItem('APIToken');
function logOut(callback) {
localStorage.removeItem("APIToken");
callback();
}
function forceLogin(){
$.holdReady( true );
app.auth.isLoggedIn(function(error, isLoggedIn){
if(error || !isLoggedIn){
app.auth.logOut(function(){})
location.replace(`/login${location.href.replace(location.origin, '')}`);
}else{
$.holdReady( false );
function forceLogin() {
$.holdReady(true);
app.auth.isLoggedIn(function (error, isLoggedIn) {
if (error || !isLoggedIn) {
app.auth.logOut(function () {});
location.replace(`/login`);
} else {
$.holdReady(false);
}
});
}
function logInRedirect(){
window.location.href = location.href.replace(location.origin+'/login', '') || '/'
function logInRedirect() {
window.location.href =
location.href.replace(location.replace(`/login`)) || "/";
}
return {
@ -145,34 +207,35 @@ app.auth = (function(app) {
logOut: logOut,
forceLogin,
logInRedirect,
}
};
})(app);
//ajax form submit
function formAJAX( btn, del ) {
event.preventDefault(); // avoid to execute the actual submit of the form.
var $form = $(btn).closest( '[action]' ); // gets the 'form' parent
var formData = $form.find( '[name]' ).serializeObject(); // builds query formDataing
var method = $form.attr('method') || 'post';
event.preventDefault(); // avoid to execute the actual submit of the form.
var $form = $(btn).closest( '[action]' ); // gets the 'form' parent
var formData = $form.find( '[name]' ).serializeObject(); // builds query formDataing
var method = $form.attr('method') || 'post';
// if( !$form.validate()) {
// app.util.actionMessage('Please fix the form errors.', $form, 'danger')
// return false;
// }
app.util.actionMessage(
'<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>',
$form,
'info'
);
// if( !$form.validate()) {
// app.util.actionMessage('Please fix the form errors.', $form, 'danger')
// return false;
// }
app.util.actionMessage(
'<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>',
$form,
'info'
);
app.api[method]($form.attr('action'), formData, function(error, data){
app.util.actionMessage(data.message, $form, error ? 'danger' : 'success'); //re-populate table
if(!error){
$form.trigger("reset");
eval($form.attr('evalAJAX')); //gets JS to run after completion
}
});
//console.log('Data being sent to', $form.attr('action'), formData)
app.api[method]($form.attr('action'), formData, function(error, data){
//console.log('Data back from the server', error, data)
app.util.actionMessage(data.message, $form, error ? 'danger' : 'success'); //re-populate table
if(!error){
$form.trigger("reset");
eval($form.attr('evalAJAX')); //gets JS to run after completion
}
});
}

View File

@ -1,58 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Login & Signup Form</title>
<link rel="stylesheet" href="css/sp.css" />
</head>
<body>
<section class="wrapper">
<div class="form signup">
<header>Signup</header>
<form action="routes/user.js/register" method="get">
<input type="text" id="username" placeholder="Username" required />
<input type="text" id="email" placeholder="Email" required />
<input type="text" id="address" placeholder="Address" required />
<input type="text" id="phone" placeholder="Phone Number" required />
<input type="password" id="password" placeholder="Password" required />
<input type="password" id="confirmPassword" placeholder="Confirm Password" required />
<div class="checkbox">
<input type="checkbox" id="signupCheck" />
<label for="signupCheck">I accept all terms & conditions</label>
</div>
<input type="submit" onclick="validateFormSignup()" value="Signup" />
</form>
</div>
<div class="form login">
<header>Login</header>
<form action="#">
<input type="text" id="email" placeholder="Email address" required />
<input type="password" id="password" placeholder="Password" required />
<a href="forgotpassword.html">Forgot password?</a>
<input type="submit" onclick="validateFormLogin()" value="Login" />
</form>
</div>
<script>
const wrapper = document.querySelector(".wrapper"),
signupHeader = document.querySelector(".signup header"),
loginHeader = document.querySelector(".login header");
loginHeader.addEventListener("click", () => {
wrapper.classList.add("active");
});
signupHeader.addEventListener("click", () => {
wrapper.classList.remove("active");
});
</script>
</section>
<script src="js/signup.js"></script>
<script src="js/login.js"></script>
</body>
</html>