From d8eacb0d49a5a5eb7847b7f348bf569f9e575bcf Mon Sep 17 00:00:00 2001 From: Alomairi Date: Mon, 2 Sep 2024 14:23:57 +0000 Subject: [PATCH] add city selection --- main.js | 21 +- static/css/navbar.css | 156 ++++++++++++ static/css/{nav.css => notification.css} | 118 +-------- static/css/options.css | 170 +++++++++++++ static/css/style.css | 175 ++++++++----- static/images/logo.png | Bin 15889 -> 0 bytes static/images/profiles/ahmed.jpg | Bin 0 -> 742 bytes static/index2.html | 274 +++++++++++++-------- static/js/citydetails.js | 153 ++++++++++++ static/js/diag.js | 126 +++++++--- static/js/navbar.js | 18 ++ static/js/options.js | 32 ++- views/home.ejs | 300 ++++++++++++++--------- 13 files changed, 1096 insertions(+), 447 deletions(-) create mode 100644 static/css/navbar.css rename static/css/{nav.css => notification.css} (53%) create mode 100644 static/css/options.css delete mode 100644 static/images/logo.png create mode 100644 static/images/profiles/ahmed.jpg create mode 100644 static/js/citydetails.js create mode 100644 static/js/navbar.js diff --git a/main.js b/main.js index 2419100..a756d7f 100644 --- a/main.js +++ b/main.js @@ -47,7 +47,7 @@ app.use(express.static(path.join(__dirname, 'static'))); -app.get('/', function(request, response) { +app.get('/x', function(request, response) { if (request.session.loggedin) { // Output username // response.send('Welcome back, ' + request.session.username + '!'); @@ -67,7 +67,7 @@ console.log(request.session.username , 'open main page'); app.get('/login', function(request, response) { /// Render login template with any message from query parameters console.log('Message:', request.query.message); // Log the message - response.render('login', { message: request.query.message || '' }); + response.render('login', { message: request.query.message || '' }); @@ -107,8 +107,11 @@ app.post('/auth', async function(request, response) { // Authenticate the user request.session.loggedin = true; request.session.username = rows[0].username; + request.session.avatar = rows[0].avatar; // request.session.username = username; // Redirect to home page + console.log(rows); + response.redirect('/'); } else { response.redirect('/login?message=Incorrect Username and/or Password!'); @@ -126,14 +129,24 @@ app.post('/auth', async function(request, response) { // http://localhost:3000/home -app.get('/home', function(request, response) { +app.get('/', function(request, response) { // If the user is loggedin if (request.session.loggedin) { // Output username // response.send('Welcome back, ' + request.session.username + '!'); + let avatarSrc = ''; + if (request.session.avatar) { + // Convert BLOB to Base64 if it exists + const avatarBase64 = Buffer.from(request.session.avatar).toString('base64'); + avatarSrc = `data:image/jpeg;base64,${avatarBase64}`; // Adjust MIME type as necessary + } + // Render home page with username - response.render('home', { username: request.session.username }); + response.render('home', { + username: request.session.username, + avatar: avatarSrc + }); } else { // Not logged in diff --git a/static/css/navbar.css b/static/css/navbar.css new file mode 100644 index 0000000..cd34098 --- /dev/null +++ b/static/css/navbar.css @@ -0,0 +1,156 @@ +body2 { + margin: 0; + font-family: Arial, sans-serif; + background-color: #f8f9fa; /* Light background */ + background-color: #4a4e52; +} +.navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: transparent; + padding: 4px 20px 0px; /* Padding adjustments */ + width: auto; +} + +.navbar-brand { + display: flex; + align-items: center; + color: white; /* Set text color to white */ + font-size: 14px; /* Smaller font size */ + text-decoration: none; /* Remove underline */ +} +.navbar-brand img { + height: 24px; /* Logo height */ + margin-right: 10px; /* Space between logo and title */ +} +.user-photo { + width: 24px; /* User photo size */ + height: 24px; + border-radius: 50%; /* Circular photo */ + cursor: pointer; + position: relative; /* To position dropdown */ +} + +.user-name { + color: white; font-weight: bold; +} + +img.user-photo:hover { + box-shadow: 0px 0px 5px 5px rgb(92 207 255 / 78%); +} + +.dropdown-menu { + position: absolute; /* Position it correctly */ + display: none; /* Hide dropdown by default */ + /* background-color: #343a40; */ + background-color: #1e1e1e; + right: 20px; /* Align to the right */ + min-width: 200px; /* Minimum width */ + z-index: 1000; /* Ensure it appears above other content */ + margin-top: 10px; /* Space between photo and menu */ + border-radius: 5px; /* Rounded corners */ + padding: 15px; /* Padding for dropdown */ + /* text-align: center; */ + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5); +} +.dropdown-menu.show { + display: block; /* Show when active */ +} +.dropdown-item { + cursor: pointer; + padding: 10px; + color: white; /* Color for dropdown items */ + text-decoration: none; /* Remove underline */ + display: block; /* Block display for easy clicking */ +} +.dropdown-item:hover { + background-color: #495057; /* Hover effect */ +} +.user-details { + margin-bottom: 10px; /* Space below user details */ + text-align: center; +} +.dropdown-divider { + height: 1px; + background-color: rgba(255, 255, 255, 0.12); + margin: 5px 0; +} + + + /* city details */ + + + select#banksList { + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; +} + +input#datepicker { + width: 70px; + + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + +} + + .select-city { + /* position: absolute; */ + position: relative; + width: 300px; + display: flex; + height: 24px; +} + + + +#cityInput { + border: 2px solid #ccc; + /* Default border */ + padding: 10px; + width: 200px; + box-sizing: border-box; + height: -webkit-fill-available; +} + +#cityInput.invalid { + border-color: red; + /* Red border for invalid input */ +} + +#cityInput.valid { + border-color: green; + /* Green border for valid selection */ +} + +#cityList { + color: black; + font-size: smaller; + border: 1px solid #ccc; + max-height: 150px; + overflow-y: auto; + display: none; + position: absolute; + background-color: white; + z-index: 1000; +} + +.city-item { + padding: 10px; + cursor: pointer; +} + +.city-item:hover { + background-color: #f0f0f0; +} + +.auto-complete-text { + position: absolute; + /* float: right; */ + /* padding-left: 55%; */ + + right: 19px; + top: 3px; + color: green; + margin-bottom: 4px; +} \ No newline at end of file diff --git a/static/css/nav.css b/static/css/notification.css similarity index 53% rename from static/css/nav.css rename to static/css/notification.css index d8ea7d5..dedaf4d 100644 --- a/static/css/nav.css +++ b/static/css/notification.css @@ -1,122 +1,5 @@ -/* Navbar styles */ -.logo{ - display: flex; - align-items: center; - } -.flex{ - display: flex; - justify-content: space-between; - align-items: center; -} -.nav-bar{ - padding: 3px 10px 0px 20px; -} -.nav-bar a{ - color: #fff; - cursor: pointer; -} -.nav-bar .hm{ - font-size: 20px; -} -#m-bar{ - display: none; - font-size: 20px; -} -#menu-links ul{ - margin: 0; - padding: 0; -} -#menu-links ul li{ - display: inline-block; - margin: 0 35px; - list-style-type: none; -} -#menu-links a{ - text-decoration: none; - font-weight: 500; - font-size: 15px; - text-transform: uppercase; -} -.nav-btn{ - padding: 3px 15px; - background-color: #868686; - text-decoration: none; - color: black; - border-radius: 35px; -} -.nav-btn:hover{ - background-color: #6791e0 !important; -} -.active{ - color: #2d6cdf !important; -} -#menu-links a:hover{ - color: #6dabf1 !important; -} -@media only screen and (max-width: 1105px){ - #btn{ - display: none; - } - .hidden-title{ - display: none !important; - } - .inputHolder { - width: -webkit-fill-available !important; - - } - .btn-remove { - right: 15px; - - } -} -@media only screen and (max-width: 750px){ - .nav-bar{ - display: block; - text-align: center; - background-color: rgba(0, 0, 0, .4); - } - #menu-links ul li{ - display: block; - margin: 25px 0; - } - #btn{ - display: block; - } - #m-bar{ - display: block; - } - .hidden{ - display: none !important; - } - .not-hidden{ - display: block !important; - } - .hidden-title{ - display: block !important; - } - - -} - -.bg-tarakan{ - display: none; - position: absolute; - max-width: 1140px; - width: -webkit-fill-available; -} -.show-tarakan{ - display: block; -} - - - - - - - /* toast notification */ - .toast { position: absolute; top: 25px; @@ -128,6 +11,7 @@ overflow: hidden; transform: translateX(calc(100% + 30px)); transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.35); + z-index: 100; } .toast-up{ diff --git a/static/css/options.css b/static/css/options.css new file mode 100644 index 0000000..9f2fd39 --- /dev/null +++ b/static/css/options.css @@ -0,0 +1,170 @@ +.options-box { + color: white; + background-color: #1e1e1e; + border-radius: 10px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5); + padding: 20px; + max-width: 400px; + /* position: relative; */ + /* margin: auto; */ + width: 66%; + display: none; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 9999; +} + +.close-btn { + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; + font-size: 20px; + color: #ffffff; /* Close button color */ +} + +.option-title { + margin: 0 0 18px; /* Space below the title */ + font-size: 20px; /* Title size */ + text-align: center; /* Center the title */ +} + +.form-group { + display: flex; /* Flexbox for alignment */ + align-items: flex-start; + justify-content: space-between; /* Space between label and input */ + align-items: center; /* Vertically align items */ + /* margin-top: 15px; */ +} +.switch-title{ + padding-top: 10px; + margin: 0; +} + +label { + flex: 1; /* Takes available space */ + font-size: 14px; /* Smaller font size for labels */ +} + +.options-button { + background-color: #3a3a3a; /* Button background */ + color: #ffffff; /* Button text color */ + border: none; /* No border */ + padding: 10px; /* Padding inside buttons */ + border-radius: 5px; /* Rounded corners */ + cursor: pointer; /* Pointer cursor on hover */ + width: 100%; /* Full width buttons */ + margin-top: 15px; /* Space above buttons */ + transition: background-color 0.3s; /* Smooth background transition */ +} +.options-button:hover { + background-color: #505050; /* Lighter on hover */ +} +hr { + border: none; + height: 1px; + background-color: rgba(255, 255, 255, 0.1); /* Light divider */ + margin: 5px; /* Margin around the divider */ +} +.centered { + text-align: center; /* Center align text in buttons */ +} + +/* has */ + +label.switch.has-label { + display: grid; + grid-template-areas: "col-1 col-2 "; + grid-gap: 1px; + align-items: center; + justify-content: space-between; + } + label.switch.has-label .off { + color: rgba(255, 255, 255 ); + grid-area: col-1; + transition: var(--transition); + } + label.switch.has-label .on { + color: rgba(0, 0, 0, 0.3); + grid-area: col-3; + transition: var(--transition); + } + label.switch.has-label .track { + grid-area: col-2; + } + label.switch.has-label input[type=checkbox]:checked ~ .on { + color: rgb(255, 255, 255); + } + label.switch.has-label input[type=checkbox]:checked ~ .off { + color: rgb(255 253 253 / 47%); + } + + + +/* Main Component Styles */ +label.switch { + text-align: -webkit-right; + /* padding-bottom: 10px; */ + --switch-size: 40px; + --thumb-gap: 4px; + --thumb-size: calc(var(--switch-size) * 0.55 - var(--thumb-gap)); + --thumb-active-offset: calc(var(--switch-size) / 2); + --track-radius: calc(var(--switch-size) / 1.6666); + --thumb-color: #fff; + --track-color: rgba(146, 146, 146, 0.479); + --accent-color: #2f57d4; + --transition: 200ms ease; + } + label.switch .track { + width: var(--switch-size); + height: calc(var(--switch-size) / 1.6666); + background: var(--track-color); + border-radius: var(--track-radius); + border-radius: calc(var(--track-radius) / 2); + display: flex; + align-items: center; + box-shadow: inset 0px 0px 4px -2px rgba(0, 0, 0, 0.129); + transition: 250ms ease; + } + label.switch .thumb { + display: inline-block; + background: var(--thumb-color); + width: var(--thumb-size); + height: var(--thumb-size); + border-radius: 50%; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.17); + transform: translateX(var(--thumb-gap)); + transition: transform 250ms ease-in-out; + } + label.switch input[type=checkbox] { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + } + label.switch input[type=checkbox]:checked + .track { + background: var(--accent-color); + } + label.switch input[type=checkbox]:checked + .track .thumb { + transform: translateX(var(--thumb-active-offset)); + } + label.switch input[type=checkbox]:focus + .track { + box-shadow: inset 0px 0px 4px 1px rgba(0, 0, 0, 0.09); + } + + + .addedButtonsContainer{ + display: flex; + padding: 8px; + flex-wrap: wrap; + justify-content: center; + align-items: center; + } + +.group-options-title{ + margin: 9px 0px; + color: #818193a6; + font-size: 13px; + font-family: monospace; +} \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index 489029c..57d9bac 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,14 +1,15 @@ -html{ - /* background: url(https://i.ibb.co/njV5xJS/background.jpg) no-repeat center center fixed; +html { + /* background: url(https://i.ibb.co/njV5xJS/background.jpg) no-repeat center center fixed; background-size: cover; height: 100%; */ } body { font-family: 'Rubik', sans-serif; - /* margin:0; */ - max-width: 1140px; - margin: 0 auto; + /* margin:0; */ + max-width: 1140px; + margin: 0 auto; + overflow: hidden; /* background-color: rgb(71, 71, 71); */ /* background: linear-gradient(135deg, #7d7e7d 0%, #0e0e0e 100%); @@ -19,9 +20,10 @@ body { margin: auto; } -.maparea{ +.maparea { margin: auto; } + .buttons { display: flex; justify-content: space-around; @@ -65,20 +67,22 @@ body { /* padding: 10px; */ /* text-align: center; */ } -.modelselect{ - border-radius: 20px; - font-size: large; - padding: 10px 0px; + +.modelselect { + border-radius: 20px; + font-size: large; + padding: 10px 0px; /* padding: 10px; */ text-align: center; align-self: center; } -.modelselect option{ + +.modelselect option { text-align: center; overflow: hidden; } - + .form-control { width: 183px; @@ -129,19 +133,20 @@ body { font-size: small; } -.btn-remove{ + +.btn-remove { cursor: pointer; - /* border-radius: 15px; */ - color: red; - /* border-color: red; */ - /* border-width: 2px; */ - position: absolute; - margin-top: 5px !important; - z-index: 5; - padding: 5px; - font-size: x-large; - background: transparent; - border-style: none; + /* border-radius: 15px; */ + color: red; + /* border-color: red; */ + /* border-width: 2px; */ + position: absolute; + margin-top: 5px !important; + z-index: 5; + padding: 5px; + font-size: x-large; + background: transparent; + border-style: none; } .clean { @@ -192,7 +197,7 @@ td { left: 77px; } -.visible-table{ +.visible-table { display: none !important; } @@ -278,58 +283,27 @@ footer { } -.bold{ +.bold { font-weight: bold; color: darkred; } -.not-show{ +.not-show { display: none !important; } -#history{ +#history { display: flex; - justify-content: center; + justify-content: center; } -.copy-text{ +.copy-text { margin: 15px; - padding: 10px; + padding: 10px; } + -.options-icon { - cursor: pointer; -} - -.options-box { - width: 66%; - display: none; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - padding-right: 20px; - padding-bottom: 20px; - padding-left: 20px; - background-color: white; - border: 1px solid #ccc; - border-radius: 5px; - z-index: 9999; - background: rgb(229 229 229 / 94%); -} -.options-box input { - padding: 5px; - border-radius: 7px; - margin: 2px; -} - -.close-btn { - position: absolute; - top: 10px; - right: 10px; - cursor: pointer; -} .additionalInfo { background-color: yellow; @@ -345,7 +319,8 @@ footer { border-radius: 5px; cursor: pointer; } -.centered{ + +/* .centered { margin-left: 36%; margin-top: 5px; margin-right: 5px; @@ -355,10 +330,74 @@ footer { padding-right: 20px; padding-bottom: 3px; padding-left: 20px; -} +} */ -.additionalButtonsContainer{ +.additionalButtonsContainer { display: flex; justify-content: center; - gap: 10px; -} \ No newline at end of file + gap: 10px; +} + + +.blinking { + animation: blink 0.5s infinite; + /* border-radius: 5px; */ +} + +@keyframes blink { + + /* 0% {border: white solid 5px; } + 100% {border: red solid 5px; } */ + 0% { + box-shadow: 0px 0px 0px 5px white inset; + } + + 100% { + box-shadow: 0px 0px 0px 5px red inset; + } +} + +.blinking2 { + animation: blink-animation 1s infinite; +} + +@keyframes blink-animation { + 0% { + opacity: 1; + } + + 50% { + opacity: 0.5; + } + + 100% { + opacity: 1; + } +} + + + +@media only screen and (max-width: 1105px){ + .inputHolder { + width: -webkit-fill-available !important; + } + .btn-remove { + right: 15px; + } +} + + +.bg-tarakan{ + display: none; + position: absolute; + max-width: 1140px; + width: -webkit-fill-available; +} +.show-tarakan{ + display: block; +} + + + + + diff --git a/static/images/logo.png b/static/images/logo.png deleted file mode 100644 index 085d471f16ba3487368fec4f4416f42c02c626cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15889 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 diff --git a/static/images/profiles/ahmed.jpg b/static/images/profiles/ahmed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35638989102e4a72d6b6f4ac70958139b3454cee GIT binary patch literal 742 zcmVSH_Lk;|{h>KXu=ca^)i!_kk8eD%Q>xq|o`{xAXFtLlQtMC5E0092~ zwXY-V`HxXd-WvRupc#WUv$hP0?4)aP!x|}R?*E{~EJfEF$t>gG*Lh+7ML-GAG z#=)^mSKU@EVS6}%kl8LP&C0MNR~)zv{T6X^v?FtI_@Vh9(4LwUQaQ#5NYreRgR1NE zIi;~&$e|v*bZb(u>s&<6SR0=9T^=GAU_66tc2}yU2+5hOynJTNz3Z9d!qiujmO<;{ z5c`?BW`a;o$rzv(^RvDx{=Z_7rbz2)#C!~)8JX!Yag#^OWz z=R~mhTjF;Hh~I894A+XBDKtSOcx?L}=M#r4uzXfbhN>$--160pzU1cmkgg)uaR2R>6a(Te5HZ+cs=yR1^Oysd>*45Gcd`&gAhI$?;ac0 ze7<^bLr%b-pIay$41l(GHtgJ`xUPyNW$3=oq*pq=*mj}u8cjtst^Q~ Yn~LOPax S90 - + + + @@ -29,6 +31,7 @@ + @@ -40,7 +43,6 @@ -
Success Your changes has been saved @@ -48,41 +50,41 @@
-
-