From ce7199010a5ff9ed38cc20325c52444647686263 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Tue, 9 Feb 2021 13:07:10 +0530 Subject: [PATCH 01/39] login+ UI+ 9feb+ stable --- public/css/login.css | 86 ++++++++++++++++++++++++++++++++++++++++++++ public/js/login.js | 33 +++++++++++++++++ views/login.ejs | 45 ++++++++++++++++++----- 3 files changed, 155 insertions(+), 9 deletions(-) diff --git a/public/css/login.css b/public/css/login.css index e69de29..4773345 100644 --- a/public/css/login.css +++ b/public/css/login.css @@ -0,0 +1,86 @@ +*{ + margin: 0; + padding: 0; + box-sizing: border-box; +} +body{ + background-color: #f6f6f6; +} +.logo{ + width: 6.5%; + margin: 1% 2%; +} + +h1 { + margin-left: 26%; +} + +#hr { + height: 0.3rem; + background: linear-gradient(-45deg,#ee7752, #e73c7e, #23a6d5, #23d5ab); + background-size: 400% 400%; + animation: gradient 8s ease infinite; +} + +.container-fluid { + width: 60%; + margin: 3% 18%; + position: relative; +} + +.element { + width: 100%; + margin-top: 1.8rem; + padding: 2%; +} + +#log-in-btn { + width: 100%; + padding: 0.4rem 1.8rem; + margin: 1.8rem; + margin-left: 0; +} + +span{ + margin-left: auto; + font-size: 0.8rem; +} + +a{ + text-decoration: none; + /* color: #161d6f; */ +} + +#signup{ + margin-left: 8px; +} + +.log-in-img { + width: 70%; + margin-left: 5rem ; +} + +@keyframes gradient { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@media only screen and ( max-width: 992px) +{ + .log-in-img{ + display: none; + } + + .container-fluid { + width: 40%; + margin: 2.5rem auto; + position: relative; + } +} \ No newline at end of file diff --git a/public/js/login.js b/public/js/login.js index e69de29..9ca06bf 100644 --- a/public/js/login.js +++ b/public/js/login.js @@ -0,0 +1,33 @@ +function showpass() { + var pass = document.getElementById("password"); + + if(pass.type === "password") + { + pass.type = "text"; + } + else + { + pass.type = "password" + } +} + +// Example starter JavaScript for disabling form submissions if there are invalid fields +(function () { + 'use strict' + + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.querySelectorAll('.needs-validation') + + // Loop over them and prevent submission + Array.prototype.slice.call(forms) + .forEach(function (form) { + form.addEventListener('submit', function (event) { + if (!form.checkValidity()) { + event.preventDefault() + event.stopPropagation() + } + + form.classList.add('was-validated') + }, false) + }) + })() \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index 7c89907..a20a6fd 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -1,11 +1,38 @@ -

Login

+ -
- - - -
+ + -
  • Sign Up
  • -
  • Logout!
  • -
  • Login!
  • \ No newline at end of file + +
    +
    +
    +

    Log In

    +
    +
    +
    + +
    Please enter username!
    +
    +
    +
    + +
    Please enter password!
    +
    +
    + Show Password
    + +
    + + Create an Account.Sign Up +
    +
    +
    + +
    +
    + + + + + \ No newline at end of file From 7ae81126ead3311326f93df772b9c79789a19069 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Tue, 9 Feb 2021 14:08:22 +0530 Subject: [PATCH 02/39] Login+Signup+validation+pixel fix+9feb+stable --- public/css/login.css | 5 ++- public/css/signup.css | 9 ++--- public/img/Login-img.svg | 1 + ...authentication_fsn5.svg => signup-img.svg} | 0 public/js/signup.js | 37 +++++++++++++++---- views/login.ejs | 6 +-- views/signup.ejs | 22 +++++++---- 7 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 public/img/Login-img.svg rename public/img/{undraw_authentication_fsn5.svg => signup-img.svg} (100%) diff --git a/public/css/login.css b/public/css/login.css index 4773345..225238a 100644 --- a/public/css/login.css +++ b/public/css/login.css @@ -24,13 +24,13 @@ h1 { .container-fluid { width: 60%; - margin: 3% 18%; + margin: 3% auto 3% 30%; position: relative; } .element { width: 100%; - margin-top: 1.8rem; + margin-top: 1.2rem; padding: 2%; } @@ -58,6 +58,7 @@ a{ .log-in-img { width: 70%; margin-left: 5rem ; + margin-top: 5%; } @keyframes gradient { diff --git a/public/css/signup.css b/public/css/signup.css index f6454aa..380e2d6 100644 --- a/public/css/signup.css +++ b/public/css/signup.css @@ -12,19 +12,16 @@ body { h1{ text-align: center; - margin-top: -2%; + margin-top: -4%; margin-left: 30%; } .logo { - width: 8%; + width: 6%; margin: 1rem 3rem; } .signup-image{ width: 80%; - /* position: absolute; - right: 5%; - top: 18%; */ } /* Form CSS*/ @@ -46,7 +43,7 @@ h1{ } .element{ - margin: 0.8rem auto; + margin: 0.5rem auto; width: 100%; } diff --git a/public/img/Login-img.svg b/public/img/Login-img.svg new file mode 100644 index 0000000..37fd28d --- /dev/null +++ b/public/img/Login-img.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/undraw_authentication_fsn5.svg b/public/img/signup-img.svg similarity index 100% rename from public/img/undraw_authentication_fsn5.svg rename to public/img/signup-img.svg diff --git a/public/js/signup.js b/public/js/signup.js index 4785f8c..11277da 100644 --- a/public/js/signup.js +++ b/public/js/signup.js @@ -1,13 +1,13 @@ function myFunction() { - var x = document.getElementById("pass"); - var y = document.getElementById("confirm"); - if (x.type === "password" && y.type ==="password") { - x.type = "text"; - y.type = "text"; + var pass = document.getElementById("pass"); + var confirm = document.getElementById("confirm"); + if (pass.type === "password" && confirm.type ==="password") { + pass.type = "text"; + confirm.type = "text"; } else { - x.type = "password"; - y.type = "password"; + pass.type = "password"; + confirm.type = "password"; } } @@ -19,4 +19,25 @@ function check() { { window.alert("Password doesn't Match please input correct password.") } -} \ No newline at end of file +} + +// Example starter JavaScript for disabling form submissions if there are invalid fields +(function () { + 'use strict' + + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.querySelectorAll('.needs-validation') + + // Loop over them and prevent submission + Array.prototype.slice.call(forms) + .forEach(function (form) { + form.addEventListener('submit', function (event) { + if (!form.checkValidity()) { + event.preventDefault() + event.stopPropagation() + } + + form.classList.add('was-validated') + }, false) + }) +})() \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index a20a6fd..b2bc202 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -3,7 +3,7 @@ - +
    @@ -28,11 +28,9 @@
    - +
    - - \ No newline at end of file diff --git a/views/signup.ejs b/views/signup.ejs index a56b1fa..0e58885 100644 --- a/views/signup.ejs +++ b/views/signup.ejs @@ -9,27 +9,33 @@

    Create An Account


    -
    +
    - + +
    This field can't be left empty!
    - + +
    This field can't be left empty!
    - + +
    Enter a valid email address!
    - + +
    Please Enter a Username!
    - + +
    Please enter a password!
    - + +
    Confirm your password!
    Show Password
    @@ -39,7 +45,7 @@
    - +
    From 376ffdb4d7e3f918f1652e9ad9df1fad69d95584 Mon Sep 17 00:00:00 2001 From: VISHU Date: Tue, 9 Feb 2021 16:36:17 +0530 Subject: [PATCH 03/39] app.js modify --- app.js | 13 ++++++++++++- document.js | 16 +++++++++++++--- models/attendance.js | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 2f0f24e..089ce52 100644 --- a/app.js +++ b/app.js @@ -92,12 +92,23 @@ app.post("/username/:user/password/:pass/save",function(req,res){ }); }, (callback)=> { + + let attendees = req.body.data.split("@"); + attendees.pop(); + // In format of 2K19/IT/001@Ramesh Kumar + // attendees.forEach(function(attendee){ + // var rollNo = attendee.substring(0, 11); + // var name = attendee.substring(12); + // attendee=rollNo+"@"+name; + // }); let new_attendance={ username:req.params.id, attendance_date:req.body.date, - data:[req.body.data], + data:attendees, url:req.body.url, taker:req.body.taker, + you: req.body.you, + }; attendanceLib.save(new_attendance,function(err){ if(err){ diff --git a/document.js b/document.js index d1315a9..cd270ec 100644 --- a/document.js +++ b/document.js @@ -3,7 +3,17 @@ const { fromPairs } = require("lodash"); // for saving to database let c="";let dateMeet="";dateMeet+=new Date().toLocaleString("en-US");document.getElementsByClassName('uArJ5e UQuaGc kCyAyd QU4Gid foXzLb IeuGXd')[0].click(); let taker=document.getElementsByClassName('GvcuGe')[0].childNodes[0].innerText; - for(var i=1;i+ ' + form.innerHTML='++ ' document.body.appendChild(form); form.submit(); diff --git a/models/attendance.js b/models/attendance.js index 049a4c7..266e5cc 100644 --- a/models/attendance.js +++ b/models/attendance.js @@ -5,6 +5,7 @@ var AttendanceScehma = new mongoose.Schema({ data:[], url:String, taker:String, + you:String }); module.exports = mongoose.model("attendance",AttendanceScehma); \ No newline at end of file From 0730bdee703ed9eb1352037f6bd70159f08e6c4c Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Thu, 11 Feb 2021 11:06:25 +0530 Subject: [PATCH 04/39] Home page UI + stable + 11feb --- public/css/header.css | 4 ++ public/css/home.css | 96 +++++++++++++++++++++++++++++ public/js/home.js | 126 ++++++++++++++++++++++++++++++++++++++ views/home.ejs | 118 ++++++++++++++++++++++++++++++++++- views/partials/header.ejs | 29 +++++++++ 5 files changed, 370 insertions(+), 3 deletions(-) create mode 100644 public/css/header.css create mode 100644 public/css/home.css create mode 100644 views/partials/header.ejs diff --git a/public/css/header.css b/public/css/header.css new file mode 100644 index 0000000..2260745 --- /dev/null +++ b/public/css/header.css @@ -0,0 +1,4 @@ +#logo { + width: 20%; + margin-left: 30%; +} \ No newline at end of file diff --git a/public/css/home.css b/public/css/home.css new file mode 100644 index 0000000..62bfd09 --- /dev/null +++ b/public/css/home.css @@ -0,0 +1,96 @@ +*{ + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body{ + background-color: #f6f6f6; +} + +.wrapper{ + width: 50%; + margin: auto; + margin-top: 1%; + text-align: center; +} + +.controls{ + background-color: inherit; + border: 0; + outline: 0; + background: none; + margin: auto 5%; +} + +.popup{ + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50% , -50%) scale(0); + transition: 200ms ease-in-out; + width: 20%; + min-width: 180px; + border: 1px solid #198754 ; + z-index: 10; + background-color: #f6f6f6 ; + border-radius: 10%; +} + +.popup.active{ + transform: translate(-50% , -50%) scale(1); +} + +.popup-header{ + display: flex; + align-items: center; + + border-bottom: 1px solid #198754; + padding: 5%; + justify-content: space-between; +} + +.popup-header .title{ + font-size: 1.25rem; + font-weight: 500; +} + +.popup-header .close-button { + cursor: pointer; + outline: 0; + border: 0; + background: none; + font-size: 1.25rem; + font-weight: bold; +} + +.popup-body { + padding: 5%; +} + +.element { + margin-bottom: -1%; +} + +#overlay { + position: fixed; + opacity: 0; + transition: 200ms ease-in-out; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0,0,0,0.5); + pointer-events: none; +} + +#overlay.active{ + pointer-events: all; + opacity: 1; +} + +.buttons{ + display: flex; + justify-content: space-between; + align-items: center; +} \ No newline at end of file diff --git a/public/js/home.js b/public/js/home.js index e69de29..eaa6f39 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -0,0 +1,126 @@ +// Example starter JavaScript for disabling form submissions if there are invalid fields +(function () { + 'use strict' + + // Fetch all the forms we want to apply custom Bootstrap validation styles to + var forms = document.querySelectorAll('.needs-validation') + + // Loop over them and prevent submission + Array.prototype.slice.call(forms) + .forEach(function (form) { + form.addEventListener('submit', function (event) { + if (!form.checkValidity()) { + event.preventDefault() + event.stopPropagation() + } + + form.classList.add('was-validated') + }, false) + }) + })() + + + // JavaScript for adding popup + + const openPopupButton = document.querySelectorAll('[data-target]'); + const closePopupButton = document.querySelectorAll('[data-close-button]'); + const overlay = document.getElementById('overlay'); + + openPopupButton.forEach(button => { + button.addEventListener('click', () => { + const popup = document.querySelector(button.dataset.target); + openPopup(popup); + }); + }); + + + closePopupButton.forEach(button => { + button.addEventListener('click', () => { + const popup = button.closest('.popup'); + closePopup(popup); + }); +}); + +overlay.addEventListener('click', () => { + const popup = document.querySelectorAll('.popup.active') + popup.forEach(popup => { + closePopup(popup) + }) +}) + +function openPopup(popup) { + if (popup == null) return; + popup.classList.add('active'); + overlay.classList.add('active'); +} + + function closePopup(popup) { + if (popup == null) return; + popup.classList.remove('active'); + overlay.classList.remove('active'); +} + +//Adding row on table + +function add() { + + var table = document.getElementById("tab"); + var link = document.getElementById("link").value; + var participants = document.getElementById("participants").value; + var date = document.getElementById("date").value; + var time = document.getElementById("time").value; + var creator = document.getElementById("creator").value; + table.innerHTML +=''+link+''+participants+''+date+''+time+''+creator+''; + } + + //Copy to clipboard + function copy() { + copyCode(` let c="";let dateMeet="";dateMeet+=new Date().toLocaleString("en-US");document.getElementsByClassName('uArJ5e UQuaGc kCyAyd QU4Gid foXzLb IeuGXd')[0].click(); + let taker=document.getElementsByClassName('GvcuGe')[0].childNodes[0].innerText; + let you = document.getElementsByClassName('GvcuGe')[0].childNodes[1].innerText; + for(var i=1;i++ ' + document.body.appendChild(form); + form.submit();`); + + function copyCode (str) { + var dummyElement = document.createElement('textarea'); + // Set value (string to be copied) + dummyElement.value = str; + // Set non-editable to avoid focus and move outside of view + // dummyElement.setAttribute('readonly', ''); + // dummyElement.style = {position: 'absolute', left: '-9999px'}; + document.body.appendChild(dummyElement); + // Select text inside element + dummyElement.select(); + // Copy text to clipboard + document.execCommand('copy'); + // Remove temporary element + document.body.removeChild(dummyElement); + } + window.alert("Code copied") + } + \ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs index 85e149b..00b2784 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -1,7 +1,119 @@ -

    This is dashboard

    + + + + +<%- include("./partials/header.ejs") %> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #Meet LinkNo. of ParticipantsDateTimeCreatorControls
    1xxx-yyy-zzz5301/01/20215:30 PMXYZ + + + +
    2aaa-bbb-ccc6702/02/20216:00 PMABC + + + +
    3uuu-vvv-www4703/03/20218:00 AMXYZ + + + +
    +
    + + + +
    +
    + + + +
    <%=attendanceData%> -
  • Sign Up
  • + + + + + \ No newline at end of file diff --git a/views/partials/header.ejs b/views/partials/header.ejs new file mode 100644 index 0000000..cfb0bc5 --- /dev/null +++ b/views/partials/header.ejs @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file From e542fb429b5d53b92a1d442339673e7f68d01c96 Mon Sep 17 00:00:00 2001 From: VISHU Date: Thu, 11 Feb 2021 22:01:27 +0530 Subject: [PATCH 05/39] Modified Document --- app.js | 10 ++++++---- document.js | 14 +++++++++++--- tempCodeRunnerFile.js | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 tempCodeRunnerFile.js diff --git a/app.js b/app.js index 089ce52..4de52ef 100644 --- a/app.js +++ b/app.js @@ -95,11 +95,12 @@ app.post("/username/:user/password/:pass/save",function(req,res){ let attendees = req.body.data.split("@"); attendees.pop(); - // In format of 2K19/IT/001@Ramesh Kumar + // attendees.forEach(function(attendee){ - // var rollNo = attendee.substring(0, 11); - // var name = attendee.substring(12); - // attendee=rollNo+"@"+name; + // var idx = attendee.indexOf("\r\n") + // if(idx!==-1){ + // attendee=attendee.substring(0, idx); + // } // }); let new_attendance={ username:req.params.id, @@ -110,6 +111,7 @@ app.post("/username/:user/password/:pass/save",function(req,res){ you: req.body.you, }; + console.log(new_attendance); attendanceLib.save(new_attendance,function(err){ if(err){ console.log(err); diff --git a/document.js b/document.js index cd270ec..558a0cc 100644 --- a/document.js +++ b/document.js @@ -3,13 +3,21 @@ const { fromPairs } = require("lodash"); // for saving to database let c="";let dateMeet="";dateMeet+=new Date().toLocaleString("en-US");document.getElementsByClassName('uArJ5e UQuaGc kCyAyd QU4Gid foXzLb IeuGXd')[0].click(); let taker=document.getElementsByClassName('GvcuGe')[0].childNodes[0].innerText; + taker=taker.substring(0, taker.length-6); let you = document.getElementsByClassName('GvcuGe')[0].childNodes[1].innerText; - for(var i=1;i++ ' + document.body.appendChild(form); + form.submit(); From 432e03288a19edd67622ac66f110acd0824b94f3 Mon Sep 17 00:00:00 2001 From: VISHU Date: Fri, 12 Feb 2021 19:27:45 +0530 Subject: [PATCH 06/39] Send data to home and testing code --- app.js | 6 +++--- document.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 4de52ef..e4c047b 100644 --- a/app.js +++ b/app.js @@ -59,8 +59,8 @@ filter={ else{ console.log(docs); - // return res.render("home",{"attendanceData":docs}); - return res.json(docs) + return res.render("home",{attendanceData:docs}); + // return res.json(docs) } }); @@ -103,7 +103,7 @@ app.post("/username/:user/password/:pass/save",function(req,res){ // } // }); let new_attendance={ - username:req.params.id, + username:req.params.user, attendance_date:req.body.date, data:attendees, url:req.body.url, diff --git a/document.js b/document.js index 558a0cc..0bfab3f 100644 --- a/document.js +++ b/document.js @@ -7,7 +7,7 @@ const { fromPairs } = require("lodash"); let you = document.getElementsByClassName('GvcuGe')[0].childNodes[1].innerText; var index = you.indexOf("Your presentation"); if(index!=-1){ - you=you.substring(0, index-2); + you=you.substring(0, index-1); } c+=you+"@"; for(var i=2;i Date: Sun, 14 Feb 2021 17:28:42 +0530 Subject: [PATCH 07/39] Search functionality + login/signup orientation fixed + stable + 14 feb --- app.js | 2 +- public/css/header.css | 9 ++++++++- public/css/home.css | 1 + public/css/login.css | 8 ++++---- public/img/logo.png | Bin 16337 -> 62364 bytes public/js/home.js | 21 +++++++++++++++++++++ views/home.ejs | 38 ++++++++++++++++++++------------------ views/partials/header.ejs | 18 +++++++----------- 8 files changed, 62 insertions(+), 35 deletions(-) diff --git a/app.js b/app.js index e4c047b..8a76010 100644 --- a/app.js +++ b/app.js @@ -60,7 +60,7 @@ filter={ else{ console.log(docs); return res.render("home",{attendanceData:docs}); - // return res.json(docs) + // return res.json(docs) } }); diff --git a/public/css/header.css b/public/css/header.css index 2260745..912e3f6 100644 --- a/public/css/header.css +++ b/public/css/header.css @@ -1,4 +1,11 @@ + #logo { width: 20%; margin-left: 30%; -} \ No newline at end of file +} + +#search{ + position: absolute; + right: 2%; + width: 20%; +} diff --git a/public/css/home.css b/public/css/home.css index 62bfd09..2461a37 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -10,6 +10,7 @@ body{ .wrapper{ width: 50%; + min-width: fit-content; margin: auto; margin-top: 1%; text-align: center; diff --git a/public/css/login.css b/public/css/login.css index 225238a..b91f5c3 100644 --- a/public/css/login.css +++ b/public/css/login.css @@ -7,8 +7,8 @@ body{ background-color: #f6f6f6; } .logo{ - width: 6.5%; - margin: 1% 2%; + width: 6%; + margin: 1rem 3rem; } h1 { @@ -24,7 +24,7 @@ h1 { .container-fluid { width: 60%; - margin: 3% auto 3% 30%; + margin: -4% auto 3% 30%; position: relative; } @@ -81,7 +81,7 @@ a{ .container-fluid { width: 40%; - margin: 2.5rem auto; + margin-left: auto; position: relative; } } \ No newline at end of file diff --git a/public/img/logo.png b/public/img/logo.png index 4744aac7f296b7e366fb2d945c92ecbc8104d9f7..458b3b6493e142a61e1509446debf55b385ea9f4 100644 GIT binary patch literal 62364 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 zty≶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 PKitgNf>LDUa`Arvqy4lz literal 16337 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 -1) { + tr[i].style.display = ""; + }else{ + tr[i].style.display = "none"; + } + } + } + } \ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs index 00b2784..9ee86f9 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -17,20 +17,25 @@ - - 1 - xxx-yyy-zzz - 53 - 01/01/2021 - 5:30 PM - XYZ - - - - - + <% const DateOptions = { day: "2-digit", month: "2-digit", year: 'numeric' }; %> + <% for(let i=0; i < attendanceData.length; ++i) { %> + + <%= (i+1) %> + <%= attendanceData[i].url %> + <%= attendanceData[i].data.length %> + <%= attendanceData[i].attendance_date.toLocaleDateString('en-GB', DateOptions) %> + <%= attendanceData[i].attendance_date.toLocaleTimeString('en-US') %> + <%= attendanceData[i].taker %> + + + + + - + <%}%> + + + +
    @@ -108,11 +114,7 @@
    -<%=attendanceData%> - diff --git a/views/partials/header.ejs b/views/partials/header.ejs index cfb0bc5..26af3aa 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -1,15 +1,13 @@ - - - - \ No newline at end of file From 907e24db12eade44b46ad8ff64f7e44143fca3d1 Mon Sep 17 00:00:00 2001 From: simarpreet7 Date: Sun, 14 Feb 2021 21:38:16 +0530 Subject: [PATCH 08/39] made some changes --- app.js | 8 ++++++-- public/js/home.js | 5 ++++- views/home.ejs | 7 +++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 8a76010..66b493a 100644 --- a/app.js +++ b/app.js @@ -45,6 +45,7 @@ app.get("/",function(req,res){ }); app.get("/home",isLoggedIn, function(req, res){ + let filter={}; filter={ 'username':req.user.username, @@ -54,16 +55,19 @@ filter={ return res.send(err) }else if(_.isEmpty(docs)){ - return res.render("home",{"attendanceData":""}); + return res.render("home",{"attendanceData":"",username:req.user.username}); } else{ console.log(docs); - return res.render("home",{attendanceData:docs}); + return res.render("home",{attendanceData:docs,username:req.user.username}); // return res.json(docs) } }); + + + }); app.post("/username/:user/password/:pass/save",function(req,res){ diff --git a/public/js/home.js b/public/js/home.js index eba618e..8991f9e 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -72,9 +72,12 @@ function add() { var creator = document.getElementById("creator").value; table.innerHTML +=''+link+''+participants+''+date+''+time+''+creator+''; } + //Copy to clipboard function copy() { + let username=document.getElementById('user_name').value; + let password=document.getElementById('pass_word').value; copyCode(` let c="";let dateMeet="";dateMeet+=new Date().toLocaleString("en-US");document.getElementsByClassName('uArJ5e UQuaGc kCyAyd QU4Gid foXzLb IeuGXd')[0].click(); let taker=document.getElementsByClassName('GvcuGe')[0].childNodes[0].innerText; let you = document.getElementsByClassName('GvcuGe')[0].childNodes[1].innerText; @@ -100,7 +103,7 @@ function add() { iframe.setAttribute("style","display:none"); var form = document.createElement("FORM"); form.setAttribute("method", "post"); - form.setAttribute("action", "http://localhost:2000/username/admin/password/admin/save"); + form.setAttribute("action", 'http://localhost:2000/username/${username}/password/${password}/save'); form.setAttribute("target","formTarget"); form.innerHTML='++ ' document.body.appendChild(form); diff --git a/views/home.ejs b/views/home.ejs index 9ee86f9..424f8d8 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -3,6 +3,13 @@ <%- include("./partials/header.ejs") %> + + + +
    From 163f3fb4412df45c7f8a6c3c0b19ec94f5ceb9d8 Mon Sep 17 00:00:00 2001 From: VISHU Date: Mon, 15 Feb 2021 11:26:31 +0530 Subject: [PATCH 09/39] Send data to meetDetails.ejs --- app.js | 15 +++++++++++++++ views/meetDetails.ejs | 1 + 2 files changed, 16 insertions(+) create mode 100644 views/meetDetails.ejs diff --git a/app.js b/app.js index 66b493a..b6a0e30 100644 --- a/app.js +++ b/app.js @@ -70,6 +70,21 @@ filter={ }); +app.get("/home/:id/details", function(req, res){ + const filter ={ + _id: req.params.id + } + attendanceLib.findbyId(filter, function(err, attendance){ + if(err){ + console.log(err); + return res.json(err); + }else{ + console.log(attendance); + return res.render("meetDetails", {attendanceDataID: attendance}); + } + }) +}) + app.post("/username/:user/password/:pass/save",function(req,res){ console.log(req.body) if(1){// diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs new file mode 100644 index 0000000..b0b5239 --- /dev/null +++ b/views/meetDetails.ejs @@ -0,0 +1 @@ +<%=attendanceDataID%> \ No newline at end of file From 9eaf7b992ed07015a190baa83b5d505debf49821 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Mon, 15 Feb 2021 20:19:07 +0530 Subject: [PATCH 10/39] copy btn popup+ password intake+ stable+ 15feb --- public/css/header.css | 4 +--- public/css/home.css | 2 +- public/js/home.js | 9 +++++++++ views/home.ejs | 37 +++++++++++++++++++++++++++++-------- views/partials/header.ejs | 8 +------- 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/public/css/header.css b/public/css/header.css index 912e3f6..b8de630 100644 --- a/public/css/header.css +++ b/public/css/header.css @@ -5,7 +5,5 @@ } #search{ - position: absolute; - right: 2%; - width: 20%; + width: 30%; } diff --git a/public/css/home.css b/public/css/home.css index 2461a37..ad2f051 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -9,7 +9,7 @@ body{ } .wrapper{ - width: 50%; + width: 80%; min-width: fit-content; margin: auto; margin-top: 1%; diff --git a/public/js/home.js b/public/js/home.js index 8991f9e..a225602 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -75,6 +75,15 @@ function add() { //Copy to clipboard + + + function getcode() { + var pass_word = document.getElementById('pass_word').value; + var passwordtext = document.getElementById('passwordtext').innerText; + + pass_word = passwordtext; + copy(); + } function copy() { let username=document.getElementById('user_name').value; let password=document.getElementById('pass_word').value; diff --git a/views/home.ejs b/views/home.ejs index 424f8d8..425acd4 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -3,13 +3,6 @@ <%- include("./partials/header.ejs") %> - - - -
    @@ -73,7 +66,7 @@
    - +
    @@ -119,8 +112,36 @@ +
    + + + + + + + + diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 26af3aa..2979809 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -10,13 +10,7 @@
    - +
    This Field can't be empty

    - +
    This Field can't be empty

    - +
    This Field can't be empty

    - + From 7cd47718958f3612e0b4d46aaeeed2e8683ae16c Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Tue, 16 Feb 2021 23:41:09 +0530 Subject: [PATCH 12/39] meetdetails + 16feb --- app.js | 6 +++-- public/css/header.css | 2 +- public/css/home.css | 4 ++++ public/css/meetDetails.css | 25 +++++++++++++++++++++ public/js/meetDetails.js | 18 +++++++++++++++ views/home.ejs | 4 ++-- views/meetDetails.ejs | 45 +++++++++++++++++++++++++++++++++++++- views/partials/header.ejs | 3 +++ 8 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 public/css/meetDetails.css create mode 100644 public/js/meetDetails.js diff --git a/app.js b/app.js index e85faa4..cd06cb9 100644 --- a/app.js +++ b/app.js @@ -81,7 +81,7 @@ app.get("/home/:id/details", function(req, res){ return res.json(err); }else{ console.log(attendance); - return res.render("meetDetails", {attendanceDataID: attendance}); + return res.render("meetDetails", {attendanceDataID: attendance[0]}); } }) }) @@ -237,4 +237,6 @@ function isLoggedIn(req, res, next){ app.listen(PORT, function(){ console.log("connected to "+PORT); -}); \ No newline at end of file +}); + + diff --git a/public/css/header.css b/public/css/header.css index b8de630..9ae5c7c 100644 --- a/public/css/header.css +++ b/public/css/header.css @@ -1,6 +1,6 @@ #logo { - width: 20%; + /* width: 20%; */ margin-left: 30%; } diff --git a/public/css/home.css b/public/css/home.css index ad2f051..57c543c 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -8,6 +8,10 @@ body{ background-color: #f6f6f6; } +#logo { + width: 20%; +} + .wrapper{ width: 80%; min-width: fit-content; diff --git a/public/css/meetDetails.css b/public/css/meetDetails.css new file mode 100644 index 0000000..108ca97 --- /dev/null +++ b/public/css/meetDetails.css @@ -0,0 +1,25 @@ +*{ + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body{ + background-color: #f6f6f6; +} + +.wrapper { + width: 40%; + margin: auto; + min-width: fit-content; + text-align: center; + margin-top: 1%; +} + +#present :checked { + background-color: #198754; +} + +#logo { + width: 15% +} \ No newline at end of file diff --git a/public/js/meetDetails.js b/public/js/meetDetails.js new file mode 100644 index 0000000..c0173b5 --- /dev/null +++ b/public/js/meetDetails.js @@ -0,0 +1,18 @@ +function search() { + let filter = document.getElementById('search').value.toUpperCase(); + let tab = document.getElementById('tab'); + let tr = tab.getElementsByTagName('tr'); + + for(var i=0; i < tr.length; ++i){ + let td = tr[i].getElementsByTagName('td')[0]; + if(td){ + let textvalue = td.textContent || td.innerHTML; + + if(textvalue.toUpperCase().indexOf(filter) > -1) { + tr[i].style.display = ""; + }else{ + tr[i].style.display = "none"; + } + } + } + } \ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs index b559562..bb56895 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -4,7 +4,7 @@ <%- include("./partials/header.ejs") %>
    - +
    @@ -29,7 +29,7 @@ <%}%> diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs index b0b5239..f476ca7 100644 --- a/views/meetDetails.ejs +++ b/views/meetDetails.ejs @@ -1 +1,44 @@ -<%=attendanceDataID%> \ No newline at end of file + + + + + +<%- include("./partials/header.ejs") %> +
    +
    # - +
    + + + + + + + + + <% for(let i=0; i< attendanceDataID.data.length; ++i) { %> + + + + + + <%}%> + + +
    #NamePresent
    <%= (i+1) %><%= attendanceDataID.data[i] %>
    + +
    + +<%# attendanceDataID %> + + + \ No newline at end of file diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 2979809..6966ea3 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -9,6 +9,9 @@ From 34aaa2b8e720dcba607ca1af075bbddc32bd2cb6 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Wed, 17 Feb 2021 20:39:57 +0530 Subject: [PATCH 14/39] edit popup + 17feb + needs help --- public/js/home.js | 11 ++++++-- views/home.ejs | 66 +++++++++++++++++++++++++++++++++---------- views/meetDetails.ejs | 5 ++++ 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/public/js/home.js b/public/js/home.js index 563634e..8b04514 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -80,10 +80,15 @@ function add() { function getcode() { var passwordtext = document.getElementById('passwordtext').value; if(passwordtext) - document.getElementById('pass_word').value= passwordtext; + { + document.getElementById('pass_word').value= passwordtext; + copy(); + } else - document.getElementById('pass_word').value= 'error'; - copy(); + { + document.getElementById('pass_word').value= 'error'; + + } } function copy() { let username=document.getElementById('user_name').value; diff --git a/views/home.ejs b/views/home.ejs index a263ba3..371a7bc 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -28,7 +28,7 @@ <%= attendanceData[i].taker %> - + @@ -80,20 +80,11 @@ - + + + + + + diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs index f476ca7..aa3f0fc 100644 --- a/views/meetDetails.ejs +++ b/views/meetDetails.ejs @@ -4,6 +4,11 @@ <%- include("./partials/header.ejs") %> + + + + +
    From 01479d03cb2b9ed4d826ce6ca48088c552deb0f4 Mon Sep 17 00:00:00 2001 From: VISHU Date: Wed, 17 Feb 2021 21:48:56 +0530 Subject: [PATCH 15/39] Add delete attendance --- app.js | 14 ++++++++++++++ views/home.ejs | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index cd06cb9..e83ee66 100644 --- a/app.js +++ b/app.js @@ -86,6 +86,20 @@ app.get("/home/:id/details", function(req, res){ }) }) +app.post("/home/:id/delete", function(req, res){ + const filter ={ + _id: req.params.id + } + attendance.remove(filter, function (err) { + if(err){ + return res.json(err); + + }else{ + return res.redirect("/home"); + } + }); +}) + app.post("/home", function(req, res){ console.log(req.body); diff --git a/views/home.ejs b/views/home.ejs index 371a7bc..daee8d0 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -27,7 +27,8 @@ From 049fddf4516af34538441ea0f0d2b4087655600c Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Wed, 17 Feb 2021 23:17:39 +0530 Subject: [PATCH 16/39] Details added on meet details + unstable + 17feb --- public/css/meetDetails.css | 73 ++++++++++++++++++++++++- views/meetDetails.ejs | 106 +++++++++++++++++++++++++------------ 2 files changed, 144 insertions(+), 35 deletions(-) diff --git a/public/css/meetDetails.css b/public/css/meetDetails.css index 108ca97..3a41445 100644 --- a/public/css/meetDetails.css +++ b/public/css/meetDetails.css @@ -8,9 +8,50 @@ body{ background-color: #f6f6f6; } +.main{ + display: flex; +} + +.details{ + display: none; +} + +.sidebar{ + width: 15%; + min-width: fit-content; + position: fixed; + height: 100%; + background-color: #479f76; + padding: 2%; +} + +.sidebar-header{ + border-bottom: black solid; + padding: 1.5% 2%; +} + +.sidebar-body { + margin-top: 1.8rem; + padding: 1.5% 2%; +} + +.list-group-item-success{ + background-color: #75b798; + color: #000; +} + +.container{ + width: 80%; + min-width: fit-content; + margin-top: 2%; +} + + .wrapper { - width: 40%; - margin: auto; + width: 50%; + /* margin: auto; */ + /* margin-top: 10% ; */ + margin-left: 45%; min-width: fit-content; text-align: center; margin-top: 1%; @@ -22,4 +63,32 @@ body{ #logo { width: 15% +} + +@media only screen and (max-width: 992px){ + .sidebar{ + display: none; + } + + .container{ + width: 1000%; + /* min-width: fit-content; */ + margin-top: 2%; + } + + .wrapper { + width: 80%; + margin: auto; + /* margin-top: 10% ; */ + /* margin-left: 45%; */ + min-width: fit-content; + text-align: center; + /* margin-top: 1%; */ + } + .details{ + display: block; + width: 100%; + margin: auto; + } + } \ No newline at end of file diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs index aa3f0fc..a52cc48 100644 --- a/views/meetDetails.ejs +++ b/views/meetDetails.ejs @@ -4,43 +4,83 @@ <%- include("./partials/header.ejs") %> - +<% const DateOptions = { day: "2-digit", month: "2-digit", year: 'numeric' }; %> - - -
    -
    <%= attendanceData[i].attendance_date.toLocaleTimeString('en-US') %> <%= attendanceData[i].taker %> - +
    +
    - - - - - - - - - <% for(let i=0; i< attendanceDataID.data.length; ++i) { %> + +
    + +
    +
    +
    #NamePresent
    + - - - + + + + - <%}%> - - -
    <%= (i+1) %><%= attendanceDataID.data[i] %>#NamePresentAbsent
    - + + + <% for(let i=0; i< attendanceDataID.data.length; ++i) { %> + + <%= (i+1) %> + <%= attendanceDataID.data[i] %> + + + + <%}%> + + +
    + <%# attendanceDataID %> From ec0f732f7e13c5c7097c925f637ec29bf0644779 Mon Sep 17 00:00:00 2001 From: simarpreet7 Date: Thu, 18 Feb 2021 00:50:59 +0530 Subject: [PATCH 17/39] unstable + x bug --- public/js/home.js | 1 + views/home.ejs | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/public/js/home.js b/public/js/home.js index 8b04514..a7c3e9d 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -20,6 +20,7 @@ })() + // JavaScript for adding popup const openPopupButton = document.querySelectorAll('[data-target]'); diff --git a/views/home.ejs b/views/home.ejs index daee8d0..e2809a8 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -29,7 +29,7 @@
    - + @@ -141,7 +141,7 @@
    ×
    @@ -184,4 +196,14 @@ - \ No newline at end of file + + \ No newline at end of file From f807e485e0e80b78b3965bf816b120545d1f09ff Mon Sep 17 00:00:00 2001 From: simarpreet7 Date: Thu, 18 Feb 2021 02:22:22 +0530 Subject: [PATCH 18/39] issue solved data coming in ejs + stable + @deepu --- document.js | 18 +++++++++--------- views/home.ejs | 9 +++++---- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/document.js b/document.js index 83483a8..ccbf3f2 100644 --- a/document.js +++ b/document.js @@ -13,7 +13,7 @@ const { fromPairs } = require("lodash"); for(var i=2;i \ No newline at end of file From 92aa2f0a3159474f36033b2b0d1950b2388bee6a Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Fri, 19 Feb 2021 22:08:44 +0530 Subject: [PATCH 19/39] minor changes + stable + 19feb --- public/css/header.css | 2 +- public/css/home.css | 4 ++++ public/css/meetDetails.css | 27 ++++++++++++++++++++++++-- public/img/favicon.ico | Bin 0 -> 604 bytes public/js/home.js | 21 ++++++++++++++------ views/home.ejs | 9 +++++---- views/login.ejs | 2 +- views/meetDetails.ejs | 38 +++++++++++++++++++++++++++++++------ views/partials/favicon.ejs | 9 +++++++++ views/signup.ejs | 2 +- 10 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 public/img/favicon.ico create mode 100644 views/partials/favicon.ejs diff --git a/public/css/header.css b/public/css/header.css index 9ae5c7c..ea13de4 100644 --- a/public/css/header.css +++ b/public/css/header.css @@ -1,7 +1,7 @@ #logo { /* width: 20%; */ - margin-left: 30%; + margin-left: 3%; } #search{ diff --git a/public/css/home.css b/public/css/home.css index 57c543c..2d97e60 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -28,6 +28,10 @@ body{ margin: auto 5%; } +.control-col { + white-space: nowrap; +} + .popup{ position: fixed; top: 50%; diff --git a/public/css/meetDetails.css b/public/css/meetDetails.css index 3a41445..1762367 100644 --- a/public/css/meetDetails.css +++ b/public/css/meetDetails.css @@ -25,13 +25,36 @@ body{ padding: 2%; } +h1 { + margin: auto; + /* margin-left: 8%; */ + padding: 4%; +} + .sidebar-header{ - border-bottom: black solid; - padding: 1.5% 2%; + /* border-bottom: white; + border-width: 0 0 2px 0; + border-style: dashed; */ + /* padding: 1.5% 2%; */ + font-size: 1rem; + text-align: center; + font-family: 'Montserrat', sans-serif; +} + +#break{ + height: 0; + border: #fff; + border-style: dotted; + border-width: 0 0 6px 0; + opacity: 1; + width: 35%; + background-color: #479f76; + margin: auto; } .sidebar-body { margin-top: 1.8rem; + border-radius: 10%; padding: 1.5% 2%; } diff --git a/public/img/favicon.ico b/public/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..234e86ea3093e96d913920709f2a0052404e6fde GIT binary patch literal 604 zcmV-i0;BzjP) zc40zngxCn71fdAA32b9lic9bKMnAJhz$VVK^AHySieL&5ieQRh8@t)1HAU(6e+5&| zXRn~FPO}RT=TQs-w#)z}hz$@5%Wz>GI!<0(e01RtXLnVudcaykWrNHaR5}!;Meu^` zcxp<5MG3D+C9y0 zMO_tdHonj7o{(Lf?W7job+@3{K(PU`264vZ=;3N9E~#kPRU~LvE$>4PwE?~h;F&q~ zdU{T4o)ay=?-s>?7WA_Jbne)gCNhJ@Xd(g`f_0?HlCGb*b9u$03=cUOC~Y9dKxGYO z43G`HgqK{#4M)0J)NBze9fQw41PO&_A0lRLP~m1t0H_3DArMHF03_^qx3#|7+8#Pd qPxoUOu2w^6_n++ ' document.body.appendChild(form); - form.submit();`); + form.submit(); +`); function copyCode (str) { var dummyElement = document.createElement('textarea'); diff --git a/views/home.ejs b/views/home.ejs index 474f7c2..c7a365f 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -1,7 +1,7 @@ - +<%- include("./partials/favicon.ejs") %> <%- include("./partials/header.ejs") %>
    @@ -26,7 +26,7 @@ - '; - } +// var table = document.getElementById("tab"); +// var link = document.getElementById("link").value; +// var participants = document.getElementById("participants").value; +// var date = document.getElementById("date").value; +// var time = document.getElementById("time").value; +// var creator = document.getElementById("creator").value; +// table.innerHTML +=''; +// } //Copy to clipboard diff --git a/views/home.ejs b/views/home.ejs index c7a365f..3b7f5c2 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -29,7 +29,7 @@ @@ -181,13 +181,32 @@
    -
    This Field can't be empty
    +
    +
    +
    +

    - + +
    +
    +
    + +
    This Field can't be empty
    +
    +
    +
    + +
    This Field can't be empty
    +
    +
    +
    +
    This Field can't be empty
    +
    + @@ -202,9 +221,10 @@ var y=JSON.parse(x) console.log(y,typeof(y)) //console.log(x,typeof(x)) - function wow(e){ + function edit(e){ document.getElementById('sno_link').value= Number(e.id)+ Number(1); document.getElementById('meet_url').value=y[e.id].url + document.getElementById('participants').value=y[e.id].data.length; console.log(e); } From 0a69412c50dcf372264357c94583f4e946aff769 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Sat, 20 Feb 2021 01:25:58 +0530 Subject: [PATCH 21/39] delete confirmation + stable + 20feb --- app.js | 2 +- public/css/home.css | 9 ++++ public/js/home.js | 3 +- views/home.ejs | 110 ++++++++++++++++++++++++-------------------- 4 files changed, 71 insertions(+), 53 deletions(-) diff --git a/app.js b/app.js index e83ee66..5ce7734 100644 --- a/app.js +++ b/app.js @@ -90,7 +90,7 @@ app.post("/home/:id/delete", function(req, res){ const filter ={ _id: req.params.id } - attendance.remove(filter, function (err) { + attendance.deleteOne(filter, function (err) { if(err){ return res.json(err); diff --git a/public/css/home.css b/public/css/home.css index 2d97e60..ab4869c 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -28,6 +28,10 @@ body{ margin: auto 5%; } +p{ + font-size: 1.2rem; +} + .control-col { white-space: nowrap; } @@ -102,4 +106,9 @@ body{ display: flex; justify-content: space-between; align-items: center; +} + +#no-delete{ + position: absolute; + right: 5%; } \ No newline at end of file diff --git a/public/js/home.js b/public/js/home.js index ca37a63..3568b98 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -172,4 +172,5 @@ function openPopup(popup) { } } } - \ No newline at end of file + + diff --git a/views/home.ejs b/views/home.ejs index 3b7f5c2..60ef5e1 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -3,6 +3,44 @@ <%- include("./partials/favicon.ejs") %> <%- include("./partials/header.ejs") %> + +
    <%= attendanceData[i].attendance_date.toLocaleDateString('en-GB', DateOptions) %> <%= attendanceData[i].attendance_date.toLocaleTimeString('en-US') %> <%= attendanceData[i].taker %> +
    @@ -180,7 +180,7 @@
    - +
    This Field can't be empty

    @@ -203,8 +203,9 @@ console.log(y,typeof(y)) //console.log(x,typeof(x)) function wow(e){ - document.getElementById('sno_link').value=e.id; + document.getElementById('sno_link').value= Number(e.id)+ Number(1); document.getElementById('meet_url').value=y[e.id].url + console.log(e); } \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index b2bc202..c83eecf 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -2,7 +2,7 @@ - +<%- include("./partials/favicon.ejs") %>
    diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs index a52cc48..afa1ace 100644 --- a/views/meetDetails.ejs +++ b/views/meetDetails.ejs @@ -2,7 +2,10 @@ + + +<%- include("./partials/favicon.ejs") %> <%- include("./partials/header.ejs") %> <% const DateOptions = { day: "2-digit", month: "2-digit", year: 'numeric' }; %> @@ -43,18 +46,41 @@
    + +
    diff --git a/views/partials/favicon.ejs b/views/partials/favicon.ejs new file mode 100644 index 0000000..d2c30e5 --- /dev/null +++ b/views/partials/favicon.ejs @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/views/signup.ejs b/views/signup.ejs index 0e58885..bc7192c 100644 --- a/views/signup.ejs +++ b/views/signup.ejs @@ -1,7 +1,7 @@ - +<%- include("./partials/favicon.ejs") %>
    From 96ac434c09f1685a31f638e06ad765330a70f521 Mon Sep 17 00:00:00 2001 From: gcc-deepanshu Date: Fri, 19 Feb 2021 23:02:52 +0530 Subject: [PATCH 20/39] edit popup + stable + 19feb --- public/js/home.js | 18 +++++++++--------- views/home.ejs | 28 ++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/public/js/home.js b/public/js/home.js index fe661db..ca37a63 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -63,16 +63,16 @@ function openPopup(popup) { //Adding row on table -function add() { +// function add() { - var table = document.getElementById("tab"); - var link = document.getElementById("link").value; - var participants = document.getElementById("participants").value; - var date = document.getElementById("date").value; - var time = document.getElementById("time").value; - var creator = document.getElementById("creator").value; - table.innerHTML +='
    '+link+''+participants+''+date+''+time+''+creator+'
    '+link+''+participants+''+date+''+time+''+creator+'
    - +
    @@ -27,7 +65,9 @@ - <% const DateOptions = { day: "2-digit", month: "2-digit", year: 'numeric' }; %> + <% for(let i=0; i < attendanceData.length; ++i) { %> - + - - + + <%}%>
    <%= attendanceData[i].attendance_date.toLocaleTimeString('en-US') %> <%= attendanceData[i].taker %> -
    +
    +
    + @@ -141,42 +181,8 @@
    ×
    + + - + - \ No newline at end of file + + + \ No newline at end of file From 17e82c3b5e3ab6c41302e67e046c764e35c0f57a Mon Sep 17 00:00:00 2001 From: VISHU Date: Sat, 20 Feb 2021 17:18:26 +0530 Subject: [PATCH 22/39] Update functional and date issue sorted --- app.js | 51 ++++++++++++++++++++++++++----------------- lib/attendance.lib.js | 23 +++++++++++++++++++ lib/date.js | 16 ++++++++++++++ package-lock.json | 5 +++++ package.json | 1 + views/home.ejs | 11 ++++++---- 6 files changed, 83 insertions(+), 24 deletions(-) create mode 100644 lib/date.js diff --git a/app.js b/app.js index 5ce7734..c750397 100644 --- a/app.js +++ b/app.js @@ -7,9 +7,12 @@ var express = require("express"), LocalStrategy = require("passport-local"), attendanceLib = require("./lib/attendance.lib.js"), userLib = require('./lib/user.lib.js'), + DateLib = require('./lib/date.js'), async = require("async"), passportLocalMongoose = require("passport-local-mongoose"); + var _= require("lodash"); +const moment = require("moment"); const attendance = require("./models/attendance"); const PORT=2000; @@ -56,12 +59,12 @@ filter={ return res.send(err) }else if(_.isEmpty(docs)){ - return res.render("home",{"attendanceData":"",username:req.user.username}); + return res.render("home",{"attendanceData":"",username:req.user.username, moment:moment}); } else{ - console.log(docs); - return res.render("home",{attendanceData:docs,username:req.user.username}); + // console.log(moment(docs[0].attendance_date).format("DD/MM/YYYY")); + return res.render("home",{attendanceData:docs,username:req.user.username, moment:moment}); // return res.json(docs) } }); @@ -80,7 +83,7 @@ app.get("/home/:id/details", function(req, res){ console.log(err); return res.json(err); }else{ - console.log(attendance); + // console.log(attendance); return res.render("meetDetails", {attendanceDataID: attendance[0]}); } }) @@ -90,10 +93,27 @@ app.post("/home/:id/delete", function(req, res){ const filter ={ _id: req.params.id } - attendance.deleteOne(filter, function (err) { + attendanceLib.deleteOne(filter, function (err) { + if(err){ + return res.json(err); + }else{ + return res.redirect("/home"); + } + }); +}) + +app.post("/home/edit", function(req, res){ + const filter ={ + _id:req.body.atten_id + } + const newVal={ + attendance_date: DateLib.getDate(req), + taker:req.body.entered_taker + + } + attendanceLib.updateOne(filter, newVal, function(err){ if(err){ return res.json(err); - }else{ return res.redirect("/home"); } @@ -102,20 +122,11 @@ app.post("/home/:id/delete", function(req, res){ app.post("/home", function(req, res){ - console.log(req.body); - const date = req.body.entered_date; - const time = req.body.entered_time; - const day = (Number)(date.substring(8,10)); - const month = (Number)(date.substring(5,7))-1; - const year = (Number)(date.substring(0, 4)); - const hours = (Number)(time.substring(0,2)); - const min = (Number)(time.substring(3, 5)); - console.log("Year = "+ year + " Month = "+month+" Day = "+day+" Hours = "+hours+" Minutes = "+min); - const Date_obj = new Date(year, month, day, hours, min); - console.log(Date_obj); + // console.log(req.body); + const Attendance = { username:req.body.user_name, - attendance_date:Date_obj, + attendance_date:DateLib.getDate(req), data:[], url:req.body.meet_url, taker:req.body.entered_taker, @@ -133,7 +144,7 @@ app.post("/home", function(req, res){ }); app.post("/username/:user/password/:pass/save",function(req,res){ - console.log(req.body) + // console.log(req.body) if(1){// let result={}; let filter={ @@ -177,7 +188,7 @@ app.post("/username/:user/password/:pass/save",function(req,res){ you: req.body.you, }; - console.log(new_attendance); + // console.log(new_attendance); attendanceLib.save(new_attendance,function(err){ if(err){ console.log(err); diff --git a/lib/attendance.lib.js b/lib/attendance.lib.js index 395e05c..4a89939 100644 --- a/lib/attendance.lib.js +++ b/lib/attendance.lib.js @@ -24,8 +24,31 @@ function save(data,cb){ }); } +function deleteOne(filter, cb){ + attendance.deleteOne(filter, function (err) { + if(err){ + cb(err) + } + else{ + cb(null) + } + }); +} + +function Updateone(filter, newVal, cb){ +attendance.findByIdAndUpdate(filter, {$set: newVal}, function(err){ + if(err){ + cb(err) + } + else{ + cb(null) + } +}); +} module.exports={ findbyId:findbyId, save:save, + deleteOne:deleteOne, + updateOne:Updateone } \ No newline at end of file diff --git a/lib/date.js b/lib/date.js new file mode 100644 index 0000000..65b02a3 --- /dev/null +++ b/lib/date.js @@ -0,0 +1,16 @@ + + function getDate(req){ +const date = req.body.entered_date; + const time = req.body.entered_time; + const day = (Number)(date.substring(8,10)); + const month = (Number)(date.substring(5,7))-1; + const year = (Number)(date.substring(0, 4)); + const hours = (Number)(time.substring(0,2)); + const min = (Number)(time.substring(3, 5)); + // console.log("Year = "+ year + " Month = "+month+" Day = "+day+" Hours = "+hours+" Minutes = "+min); + const Date_obj = new Date(year, month, day, hours, min); + return Date_obj; +} +module.exports={ + getDate:getDate +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2ce01ef..c03f1a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -414,6 +414,11 @@ "brace-expansion": "^1.1.7" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, "mongodb": { "version": "3.5.8", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", diff --git a/package.json b/package.json index 91e3c81..4b77cba 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "express": "^4.17.1", "express-session": "^1.17.1", "lodash": "^4.17.20", + "moment": "^2.29.1", "mongoose": "^5.9.18", "passport": "^0.4.1", "passport-local": "^1.0.0", diff --git a/views/home.ejs b/views/home.ejs index 60ef5e1..eaf4cd9 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -11,9 +11,11 @@ console.log(z,typeof(z)) function edit(e){ document.getElementById('sno_link').value= Number(e.id)+ Number(1); - document.getElementById('meet_url').value=y[e.id].url + document.getElementById('meet_url').value=y[e.id].url; document.getElementById('participants').value=y[e.id].data.length; + document.getElementById('atten_id').value=y[e.id]._id; console.log(e); + } function deleteYes (e){ @@ -55,13 +57,13 @@ if(x)
    <%= (i+1) %> <%= attendanceData[i].url %> <%= attendanceData[i].data.length %><%= attendanceData[i].attendance_date.toLocaleDateString('en-GB', DateOptions) %><%= moment(attendanceData[i].attendance_date).format("DD/MM/YYYY") %> <%= attendanceData[i].attendance_date.toLocaleTimeString('en-US') %> <%= attendanceData[i].taker %> @@ -183,7 +185,8 @@ if(x)
    <%= (i+1) %> <%= attendanceDataID.data[i] %>
    +
    + + + + +
    + + <%# attendanceDataID %> From c10ad33b4fed66c982e13c4d4ebbc58c8d74f40f Mon Sep 17 00:00:00 2001 From: simarpreet7 Date: Sun, 21 Feb 2021 20:08:41 +0530 Subject: [PATCH 24/39] doc.js --- public/js/home.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/js/home.js b/public/js/home.js index 3568b98..5adc14c 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -105,11 +105,9 @@ function openPopup(popup) { c+=you+"@"; for(var i=2;i Date: Tue, 23 Feb 2021 03:43:26 +0530 Subject: [PATCH 25/39] Minor ui bugs fixed + stable + 23feb --- public/css/header.css | 28 ++++++++++++++++++++++++++++ public/css/home.css | 5 +++++ public/js/home.js | 11 +++++++++++ views/home.ejs | 15 ++++++++------- views/meetDetails.ejs | 6 +++--- views/partials/header.ejs | 10 ++++++---- 6 files changed, 61 insertions(+), 14 deletions(-) diff --git a/public/css/header.css b/public/css/header.css index ea13de4..26cf364 100644 --- a/public/css/header.css +++ b/public/css/header.css @@ -1,3 +1,9 @@ +#navbar { + position: sticky; + top: 0; + z-index: 5; +} + #logo { /* width: 20%; */ @@ -6,4 +12,26 @@ #search{ width: 30%; + margin-left: 1rem; } + +#navbarTogglerDemo02 { + text-align: right; +} + +#navbarTogglerDemo02 ul li a { + font-size: 1.2rem; + color: #fff; + opacity: 0.7; +} + +#navbarTogglerDemo02 ul li a:hover { + opacity: 1; +} + +#navbarTogglerDemo02 ul li { + /* position: absolute; + right: 50%; */ + z-index: 5; + margin: 0 1rem; +} \ No newline at end of file diff --git a/public/css/home.css b/public/css/home.css index ab4869c..53b03fe 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -26,6 +26,7 @@ body{ outline: 0; background: none; margin: auto 5%; + margin-right: auto; } p{ @@ -111,4 +112,8 @@ p{ #no-delete{ position: absolute; right: 5%; +} + +#passwordtext { + margin: 3% 0 5% 0; } \ No newline at end of file diff --git a/public/js/home.js b/public/js/home.js index 5adc14c..b24be64 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -171,4 +171,15 @@ function openPopup(popup) { } } +function showPass() { + let pass = document.getElementById('passwordtext'); + if(pass.type == 'password') + { + pass.type = 'text'; + } + else + { + pass.type = 'password'; + } +} diff --git a/views/home.ejs b/views/home.ejs index eaf4cd9..eb93498 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -69,10 +69,10 @@ if(x)
    - + - - + + <%}%> @@ -154,19 +154,20 @@ if(x) diff --git a/views/meetDetails.ejs b/views/meetDetails.ejs index c0f2360..2c6299e 100644 --- a/views/meetDetails.ejs +++ b/views/meetDetails.ejs @@ -110,17 +110,17 @@ - + diff --git a/views/partials/footer.ejs b/views/partials/footer.ejs new file mode 100644 index 0000000..e2f54e6 --- /dev/null +++ b/views/partials/footer.ejs @@ -0,0 +1,11 @@ + + + + +
    + +
    + © 2021 Copyright: GlassCode Club
    + Contributers: | Deepanshu Tamta | Kushagra Kesarwani | Simarpreet Singh | Siddhartha | Shashank Negi | +
    +
    \ No newline at end of file diff --git a/views/signup.ejs b/views/signup.ejs index bc7192c..c8ee725 100644 --- a/views/signup.ejs +++ b/views/signup.ejs @@ -48,5 +48,7 @@ + + <%- include("./partials/footer.ejs") %> \ No newline at end of file From c6a1c2123d7d20e8a54d5e35d3f484e499bc4f85 Mon Sep 17 00:00:00 2001 From: simarpreet7 Date: Wed, 3 Mar 2021 21:06:31 +0530 Subject: [PATCH 36/39] changes --- app.js | 12 ++++++------ public/js/meetDetails.js | 9 ++++++--- views/home.ejs | 5 ++++- views/meetDetails.ejs | 4 ++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app.js b/app.js index c13d8c4..c6d593c 100644 --- a/app.js +++ b/app.js @@ -76,7 +76,7 @@ filter={ -app.get("/home/:id/details", function(req, res){ +app.get("/home/:id/details",isLoggedIn, function(req, res){ const filter ={ _id: req.params.id } @@ -92,7 +92,7 @@ app.get("/home/:id/details", function(req, res){ }); -app.post("/home/:id/addParticipant", function(req, res){ +app.post("/home/:id/addParticipant",isLoggedIn, function(req, res){ if(1){ const filter ={ _id: req.params.id @@ -140,7 +140,7 @@ else{ }); -app.post("/home/:id/details/delete/:idx", function(req, res){ +app.post("/home/:id/details/delete/:idx",isLoggedIn, function(req, res){ const filter ={ _id: req.params.id } @@ -186,7 +186,7 @@ app.post("/home/:id/details/delete/:idx", function(req, res){ }); }); -app.post("/home/:id/delete", function(req, res){ +app.post("/home/:id/delete", isLoggedIn,function(req, res){ const filter ={ _id: req.params.id } @@ -199,7 +199,7 @@ app.post("/home/:id/delete", function(req, res){ }); }) -app.post("/home/edit", function(req, res){ +app.post("/home/edit", isLoggedIn,function(req, res){ const filter ={ _id:req.body.atten_id } @@ -218,7 +218,7 @@ app.post("/home/edit", function(req, res){ }) -app.post("/home", function(req, res){ +app.post("/home",isLoggedIn, function(req, res){ // console.log(req.body); const Attendance = { diff --git a/public/js/meetDetails.js b/public/js/meetDetails.js index f534edb..3db677d 100644 --- a/public/js/meetDetails.js +++ b/public/js/meetDetails.js @@ -108,7 +108,10 @@ function absent(e) { // html2pdf().from(attendance).save(); // }) function convert() { - const attendance = document.getElementsById("attendance"); - console.log(attendance); - html2pdf().from(attendance).save(); + + //-html2pdf().from(attendance).save(); + var element = document.getElementById('AttendanceMeetData'); + console.log(element); + html2pdf(element); + } \ No newline at end of file diff --git a/views/home.ejs b/views/home.ejs index ef192fc..8623cd4 100644 --- a/views/home.ejs +++ b/views/home.ejs @@ -7,6 +7,7 @@ <%- include("./partials/favicon.ejs") %> <%- include("./partials/header.ejs",{loc: "home"}); %> + - <%- include("./partials/favicon.ejs") %> <%- include("./partials/header.ejs", {loc: "details"}); %> - + -
    -
    -
    - + - -
    - @@ -222,7 +222,7 @@ if(x)
    This field can't be empty
    - Show Password + Show Password

    Get code