diff --git a/consumerWebsite/modules/app.js b/consumerWebsite/modules/app.js index 069240b..bd5f1e4 100644 --- a/consumerWebsite/modules/app.js +++ b/consumerWebsite/modules/app.js @@ -4,10 +4,6 @@ const app = express(); const port = 3000; const ejs = require("ejs"); -const bodyParser = require("body-parser"); // Middleware - -app.use(bodyParser.urlencoded({ extended: false })); - app.use(express.json()); app.set("json spaces", 2); diff --git a/consumerWebsite/public/css/sp.css b/consumerWebsite/public/css/sp.css index 0a58704..8c01b06 100644 --- a/consumerWebsite/public/css/sp.css +++ b/consumerWebsite/public/css/sp.css @@ -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; +} \ No newline at end of file diff --git a/consumerWebsite/public/js/app.js b/consumerWebsite/public/js/app.js index 3fb3560..e7dd68b 100644 --- a/consumerWebsite/public/js/app.js +++ b/consumerWebsite/public/js/app.js @@ -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 = + '' + + 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( - '