From 01c3f407bba02a9b2f646b6f7fdc4c33ae261da7 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 25 Mar 2017 20:50:54 -0700 Subject: [PATCH 01/17] Init dashboard --- app.js | 2 ++ routes/dashboard.js | 15 ++++++++++++++ sass/main.scss | 1 + sass/partials/_dashboard.scss | 3 +++ views/TEMPLATE.jade | 2 +- views/dashboard.jade | 5 +++++ views/layout-dashboard.jade | 9 ++++++++ views/layout.jade | 10 +++++++-- views/partials/_footer-dashboard.jade | 1 + views/partials/_navbar-dashboard.jade | 30 +++++++++++++++++++++++++++ 10 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 routes/dashboard.js create mode 100644 sass/partials/_dashboard.scss create mode 100644 views/dashboard.jade create mode 100644 views/layout-dashboard.jade create mode 100644 views/partials/_footer-dashboard.jade create mode 100644 views/partials/_navbar-dashboard.jade diff --git a/app.js b/app.js index 9d43283..4b3ce02 100644 --- a/app.js +++ b/app.js @@ -11,6 +11,7 @@ var projects = require('./routes/projects'); var events = require('./routes/events'); var members = require('./routes/members'); var about = require('./routes/about'); +var dashboard = require('./routes/dashboard'); var app = express(); @@ -53,6 +54,7 @@ app.use('/projects/', projects); app.use('/', events); app.use('/members', members); app.use('/about', about); +app.use('/dashboard', dashboard); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/routes/dashboard.js b/routes/dashboard.js new file mode 100644 index 0000000..0f60ea7 --- /dev/null +++ b/routes/dashboard.js @@ -0,0 +1,15 @@ +var express = require('express'); +var tempDB = require('./TEMP_schema'); +var router = express.Router(); +var helper = require('./helper_methods'); + +router.get('/', function(req, res, next) { + var navbar = { + active: '', + links: [] + }; + + res.render('dashboard', {dashboard: true, title: 'CS Dashboard', navbar: navbar}); +}) + +module.exports = router; diff --git a/sass/main.scss b/sass/main.scss index db4808a..e58c0db 100644 --- a/sass/main.scss +++ b/sass/main.scss @@ -83,6 +83,7 @@ p.header { @import 'partials/members_page'; @import 'partials/member_page'; @import 'partials/about'; +@import 'partials/dashboard'; @import 'imported'; diff --git a/sass/partials/_dashboard.scss b/sass/partials/_dashboard.scss new file mode 100644 index 0000000..74d45b8 --- /dev/null +++ b/sass/partials/_dashboard.scss @@ -0,0 +1,3 @@ +#dashboard-page { + +} diff --git a/views/TEMPLATE.jade b/views/TEMPLATE.jade index 887d8bd..40931ec 100644 --- a/views/TEMPLATE.jade +++ b/views/TEMPLATE.jade @@ -1,4 +1,4 @@ extends layout block content - #PLACEHOLDER-page.content + #PLACEHOLDER-page.content diff --git a/views/dashboard.jade b/views/dashboard.jade new file mode 100644 index 0000000..f78123b --- /dev/null +++ b/views/dashboard.jade @@ -0,0 +1,5 @@ +extends layout-dashboard + +block view + #dashboard-page.content + h2 heres some content diff --git a/views/layout-dashboard.jade b/views/layout-dashboard.jade new file mode 100644 index 0000000..7768e8e --- /dev/null +++ b/views/layout-dashboard.jade @@ -0,0 +1,9 @@ +extends layout + +block content + #dashboard-page.content + .row + .col-md-2 + h1 Profile + .col-md-10 + block view diff --git a/views/layout.jade b/views/layout.jade index b114273..fdff462 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -11,10 +11,16 @@ html(ng-app="csApp") //script(src="/angular/angular.js") body - include ./partials/_navbar + - if (dashboard == undefined) + include ./partials/_navbar + - else + include ./partials/_navbar-dashboard .container-fluid .starter-template(style="padding: 3rem 1.5rem 1rem;") block content - include ./partials/_footer + - if (dashboard == undefined) + include ./partials/_footer + - else + include ./partials/_footer-dashboard script(src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js") script(src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" crossorigin="anonymous") diff --git a/views/partials/_footer-dashboard.jade b/views/partials/_footer-dashboard.jade new file mode 100644 index 0000000..9998ed3 --- /dev/null +++ b/views/partials/_footer-dashboard.jade @@ -0,0 +1 @@ +#footer-dashboard diff --git a/views/partials/_navbar-dashboard.jade b/views/partials/_navbar-dashboard.jade new file mode 100644 index 0000000..c1d13af --- /dev/null +++ b/views/partials/_navbar-dashboard.jade @@ -0,0 +1,30 @@ +mixin links() + li.nav-item + a.nav-link(href='/') View Website + +.hidden-sm-down + nav.navbar.navbar-fixed-top.navbar-dark.bg-inverse + .nbw2 + .navbar-wrapper + a.navbar-brand(href='/dashboard')= title + ul.nav.navbar-nav.pull-xs-right + mixin links() +.hidden-md-up + nav.navbar-mobile.navbar-fixed-top.navbar-dark.bg-inverse + .nbw2 + .navbar-wrapper + a(href='/') + img.thumb(src='/images/icons/logo-64@2x.png' style="width: 52px; height: 52px;") + button(class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navBar-collapse" aria-controls="navBar-collapse" aria-expanded="false" aria-label="navBar-control") + span(aria-hidden="false").glyphicon.glyphicon-menu-hamburger Menu + .navbar-mobile-secondary.collapse(id="navBar-collapse") + mixin links() + +.hidden-sm-down + nav.navbar.navbar-fixed-top.navbar-dark.navbar-secondary + .nbw2 + .navbar-wrapper + ul.nav.navbar-nav.pull-xs-right + each link, index in navbar.links + li.nav-item(class= link.active === true ? 'active' : '') + a.nav-link(href=link.url)= link.name From 8f24120e8a2bf60a792a925e1593b9ffc4ca2a68 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 25 Mar 2017 22:20:54 -0700 Subject: [PATCH 02/17] Dashboard List all projects and events, for now --- routes/dashboard.js | 22 ++++++++++++++++++++-- sass/main.scss | 5 +++++ sass/partials/_dashboard.scss | 26 ++++++++++++++++++++++++++ views/dashboard.jade | 16 ++++++++++++++-- views/layout-dashboard.jade | 19 ++++++++++++++++--- 5 files changed, 81 insertions(+), 7 deletions(-) diff --git a/routes/dashboard.js b/routes/dashboard.js index 0f60ea7..2c3bcc5 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -5,11 +5,29 @@ var helper = require('./helper_methods'); router.get('/', function(req, res, next) { var navbar = { - active: '', + active: 'dashboard', links: [] }; - res.render('dashboard', {dashboard: true, title: 'CS Dashboard', navbar: navbar}); + var projects = tempDB.projects; + + for ( var project of projects) { + project.members = helper.findProjectMembers( project) + } + + var login = null; + + login = { + id: 1, + token: "123456789", + first_name: "Erick", + last_name: "Sanchez", + role: 0 + } + + login.name = login.first_name + ' ' + login.last_name; + + res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: projects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); }) module.exports = router; diff --git a/sass/main.scss b/sass/main.scss index e58c0db..d94046b 100644 --- a/sass/main.scss +++ b/sass/main.scss @@ -117,6 +117,11 @@ p.header { background: $lightgray; } +img.img-avatar { + margin: 15px 10px; + border-radius: 50%; +} + #atoms { .member-cell { width: 100%; diff --git a/sass/partials/_dashboard.scss b/sass/partials/_dashboard.scss index 74d45b8..89b267b 100644 --- a/sass/partials/_dashboard.scss +++ b/sass/partials/_dashboard.scss @@ -1,3 +1,29 @@ #dashboard-page { + .sidebar { + padding-right: 0; + p.name { + text-align: center; + } + .navbar { + padding-top: $margin-md; + } + .list-group .list-group-item { + text-align: left; + } + } + #dashboard { + a:link { + text-decoration: none; + } + .cell { + @extend .cell; + .content { + padding: $margin-sm; + p { + margin-bottom: 0; + } + } + } + } } diff --git a/views/dashboard.jade b/views/dashboard.jade index f78123b..ba3860f 100644 --- a/views/dashboard.jade +++ b/views/dashboard.jade @@ -1,5 +1,17 @@ extends layout-dashboard block view - #dashboard-page.content - h2 heres some content + #dashboard.content + h3 My Projects + each project in my_projects + a(href='dashboard/projects/'+ project.id).cell + .content + p.header= project.title + p= helper.pluralize('member', project.members.length, true) + p= project.description_short + h3 My Teammates + h3 My Events + each event in my_events + a.cell + .content + p= event.title diff --git a/views/layout-dashboard.jade b/views/layout-dashboard.jade index 7768e8e..a1f23f2 100644 --- a/views/layout-dashboard.jade +++ b/views/layout-dashboard.jade @@ -3,7 +3,20 @@ extends layout block content #dashboard-page.content .row - .col-md-2 - h1 Profile - .col-md-10 + .col-lg-2.col-md-3.sidebar + .hidden-sm-down + h2 Welcome + img.img-avatar(src='http://placehold.it/64x64/77cb6f') + p.name= token.name + .btn-group(role="group" aria-label="Basic example") + button.btn.btn-secondary(type="button") msg + button.btn.btn-secondary(type="button") dir + button.btn.btn-secondary(type="button") act + .navbar.list-group + a(href="/dashboard" class=navbar.active == 'dashboard' ? 'active' : '').list-group-item Home Page + a(href="/dashboard/projects" class=navbar.active == 'projects' ? 'active' : '').list-group-item Projects + a(href="/dashboard/events" class=navbar.active == 'events' ? 'active' : '').list-group-item Events + a(href="/dashboard/members" class=navbar.active == 'members' ? 'active' : '').list-group-item Members + a(href="/").list-group-item Sign Out + .col-lg-10.col-md-9 block view From f0597b511434d7c42d3a0b2c2d599c0d18b267b3 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 25 Mar 2017 22:47:06 -0700 Subject: [PATCH 03/17] Projects page --- routes/dashboard.js | 34 +++++++++++++++++++++++++--------- sass/assets/tables.scss | 1 + sass/partials/_dashboard.scss | 17 ++++++----------- views/dashboard-projects.jade | 10 ++++++++++ views/dashboard.jade | 4 ++-- views/layout-dashboard.jade | 2 +- views/layout.jade | 8 -------- 7 files changed, 45 insertions(+), 31 deletions(-) create mode 100644 views/dashboard-projects.jade diff --git a/routes/dashboard.js b/routes/dashboard.js index 2c3bcc5..0b0f7d6 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -3,6 +3,18 @@ var tempDB = require('./TEMP_schema'); var router = express.Router(); var helper = require('./helper_methods'); +var login = null; + +login = { + id: 1, + token: "123456789", + first_name: "Erick", + last_name: "Sanchez", + role: 1 +} + +login.name = login.first_name + ' ' + login.last_name; + router.get('/', function(req, res, next) { var navbar = { active: 'dashboard', @@ -15,19 +27,23 @@ router.get('/', function(req, res, next) { project.members = helper.findProjectMembers( project) } - var login = null; + res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: projects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); +}) + +router.get('/projects', function(req, res, next) { + var navbar = { + active: 'projects', + links: [] + }; + + var projects = tempDB.projects; - login = { - id: 1, - token: "123456789", - first_name: "Erick", - last_name: "Sanchez", - role: 0 + for ( var project of projects) { + project.members = helper.findProjectMembers( project) } - login.name = login.first_name + ' ' + login.last_name; + res.render('dashboard-projects', {dashboard: true, title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); - res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: projects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); }) module.exports = router; diff --git a/sass/assets/tables.scss b/sass/assets/tables.scss index 45421a0..ed70bff 100644 --- a/sass/assets/tables.scss +++ b/sass/assets/tables.scss @@ -10,6 +10,7 @@ } } a.cell { + text-decoration: none; :hover { background-color: $highlighted; } diff --git a/sass/partials/_dashboard.scss b/sass/partials/_dashboard.scss index 89b267b..7e9040d 100644 --- a/sass/partials/_dashboard.scss +++ b/sass/partials/_dashboard.scss @@ -13,17 +13,12 @@ } #dashboard { - a:link { - text-decoration: none; - } - .cell { - @extend .cell; - .content { - padding: $margin-sm; - p { - margin-bottom: 0; - } - } + } + #projects-page { + .disabled { + cursor: not-allowed; + color: $gray-darkgray; + background-color: $highlighted; } } } diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade new file mode 100644 index 0000000..4318f17 --- /dev/null +++ b/views/dashboard-projects.jade @@ -0,0 +1,10 @@ +extends layout-dashboard + +block view + #projects-page.content + each project in projects + a(href=token.role == 0 ? "#" : "" class=token.role != 0 ? 'disabled' : '').cell + .context + p.header= project.title + p= helper.pluralize('member', project.members.length, true) + p= project.description_short diff --git a/views/dashboard.jade b/views/dashboard.jade index ba3860f..46523f0 100644 --- a/views/dashboard.jade +++ b/views/dashboard.jade @@ -5,7 +5,7 @@ block view h3 My Projects each project in my_projects a(href='dashboard/projects/'+ project.id).cell - .content + .context p.header= project.title p= helper.pluralize('member', project.members.length, true) p= project.description_short @@ -13,5 +13,5 @@ block view h3 My Events each event in my_events a.cell - .content + .context p= event.title diff --git a/views/layout-dashboard.jade b/views/layout-dashboard.jade index a1f23f2..ec90fae 100644 --- a/views/layout-dashboard.jade +++ b/views/layout-dashboard.jade @@ -17,6 +17,6 @@ block content a(href="/dashboard/projects" class=navbar.active == 'projects' ? 'active' : '').list-group-item Projects a(href="/dashboard/events" class=navbar.active == 'events' ? 'active' : '').list-group-item Events a(href="/dashboard/members" class=navbar.active == 'members' ? 'active' : '').list-group-item Members - a(href="/").list-group-item Sign Out + a(href="/").list-group-item.disabled Sign Out .col-lg-10.col-md-9 block view diff --git a/views/layout.jade b/views/layout.jade index fdff462..7aff842 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -11,16 +11,8 @@ html(ng-app="csApp") //script(src="/angular/angular.js") body - - if (dashboard == undefined) - include ./partials/_navbar - - else - include ./partials/_navbar-dashboard .container-fluid .starter-template(style="padding: 3rem 1.5rem 1rem;") block content - - if (dashboard == undefined) - include ./partials/_footer - - else - include ./partials/_footer-dashboard script(src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js") script(src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" crossorigin="anonymous") From 559ec89d85fd79c94f2fa2d09ea6916da77659c2 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 25 Mar 2017 23:09:54 -0700 Subject: [PATCH 04/17] Update db add admins to project member relationships --- routes/TEMP_schema.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index cf90048..2d7b036 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -26,11 +26,12 @@ function Member( id, first_name, last_name, bio, bio_short, links, email, langua this.languages = languages; } -function ProjectsMembers( id, project_id, member_id, role, assignedArea ) +function ProjectsMembers( id, project_id, member_id, role, admin, assignedArea ) { this.id = id; this.project_id = project_id; this.member_id = member_id; + this.admin = admin; this.role = role; this.assignedArea = assignedArea; @@ -483,14 +484,14 @@ var members = [ var members_projects = [ //Micromouse - new ProjectsMembers( 15 , 0 , 9 , 'Co-Lead Developer' ), - new ProjectsMembers( 0 , 0 , 0 , 'Co-Lead Developer' ), - new ProjectsMembers( 3 , 0 , 1 , 'Co-Lead Developer' ), + new ProjectsMembers( 15 , 0 , 9 , 'Co-Lead Developer', true ), + new ProjectsMembers( 0 , 0 , 0 , 'Co-Lead Developer', true ), + new ProjectsMembers( 3 , 0 , 1 , 'Co-Lead Developer', true ), new ProjectsMembers( 4 , 0 , 2 , 'Programmer' ), new ProjectsMembers( 5 , 0 , 3 , 'Programmer' ), //CS Website - new ProjectsMembers( 6 , 1 , 2 , 'Project Manager' ), - new ProjectsMembers( 1 , 1 , 0 , 'Lead Developer' ), + new ProjectsMembers( 6 , 1 , 2 , 'Project Manager', true ), + new ProjectsMembers( 1 , 1 , 0 , 'Lead Developer', true ), new ProjectsMembers( 49 , 1 , 23 , 'Programmer' ), new ProjectsMembers( 33 , 1 , 16 , 'Programmer' ), new ProjectsMembers( 34 , 1 , 19 , 'Programmer' ), @@ -499,19 +500,19 @@ var members_projects = [ new ProjectsMembers( 12 , 1 , 8 , 'Programmer' ), new ProjectsMembers( 26 , 1 , 13 , 'Programmer' ), //2D Platformer - new ProjectsMembers( 10 , 2 , 2 , 'Project Manager' ), + new ProjectsMembers( 10 , 2 , 2 , 'Project Manager', true ), //Function Fighters - new ProjectsMembers( 2 , 3 , 1 , 'Project Manager & AI Player' ), + new ProjectsMembers( 2 , 3 , 1 , 'Project Manager & AI Player', true ), new ProjectsMembers( 9 , 3 , 3 , 'Beta Tester, AI Player' ), new ProjectsMembers( 43 , 3 , 14 , 'AI Player' ), new ProjectsMembers( 7 , 3 , 2 , 'AI Player' ), new ProjectsMembers( 8 , 3 , 4 , 'AI Player' ), new ProjectsMembers( 36 , 3 , 19 , 'AI Player' ), //Quad-Copter - new ProjectsMembers( 14 , 4 , 9 , 'Lead Developer' ), - new ProjectsMembers( 13 , 4 , 3 , 'Developer' ), + new ProjectsMembers( 14 , 4 , 9 , 'Lead Developer', true ), + new ProjectsMembers( 13 , 4 , 3 , 'Developer', true ), //Line Follower - new ProjectsMembers( 17 , 5 , 4 , 'Project Manager' ), + new ProjectsMembers( 17 , 5 , 4 , 'Project Manager', true ), new ProjectsMembers( 18 , 5 , 1 , 'Lead Developer' ), new ProjectsMembers( 19 , 5 , 3 , 'Developer' ), new ProjectsMembers( 25 , 5 , 10 , 'Programmer' ), @@ -521,11 +522,11 @@ var members_projects = [ new ProjectsMembers( 23 , 5 , 12 , 'Programmer' ), new ProjectsMembers( 21 , 5 , 2 , 'Programmer' ), //Retailer - new ProjectsMembers( 28 , 6 , 2 , 'Project Manager' ), + new ProjectsMembers( 28 , 6 , 2 , 'Project Manager', true ), new ProjectsMembers( 29 , 6 , 14 , 'Developer' ), new ProjectsMembers( 39 , 6 , 18 , 'Programmer' ), //srjc-scheduler - new ProjectsMembers( 30 , 7 , 0 , 'Project Founder' ), + new ProjectsMembers( 30 , 7 , 0 , 'Project Founder', true ), new ProjectsMembers( 31 , 7 , 1 , 'Developer' ), new ProjectsMembers( 50 , 7 , 20 , 'Developer' ), new ProjectsMembers( 32 , 7 , 2 , 'Programmer' ), @@ -533,18 +534,18 @@ var members_projects = [ new ProjectsMembers( 35 , 7 , 19 , 'Programmer' ), new ProjectsMembers( 47 , 7 , 11 , 'Programmer' ), //Dreamscape - new ProjectsMembers( 36 , 8 , 15 , 'Project Manager' ), + new ProjectsMembers( 36 , 8 , 15 , 'Project Manager', true ), new ProjectsMembers( 37 , 8 , 2 , 'Programmer' ), new ProjectsMembers( 40 , 8 , 17 , 'Programmer' ), new ProjectsMembers( 42 , 8 , 14 , 'Programmer' ), //Club App - new ProjectsMembers( 38 , 9 , 2 , 'Project Manager' ), + new ProjectsMembers( 38 , 9 , 2 , 'Project Manager', true ), new ProjectsMembers( 49 , 9 , 20 , 'Developer' ), new ProjectsMembers( 46 , 9 , 19 , 'Programmer' ), new ProjectsMembers( 45 , 9 , 16 , 'Programmer' ), new ProjectsMembers( 48 , 9 , 11 , 'Programmer' ), //ShortLink - new ProjectsMembers( 51 , 10 , 12 , 'Project Manager'), + new ProjectsMembers( 51 , 10 , 12 , 'Project Manager', true ), new ProjectsMembers( 52 , 10 , 2 , 'Developer') ]; //50 From fe211df2d31c54fa2d0871ee5b5ae222643be4e6 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 25 Mar 2017 23:10:19 -0700 Subject: [PATCH 05/17] Disable/enable CRUD on projects Based on admin of the project or an admin user on the site --- routes/dashboard.js | 3 +++ routes/helper_methods.js | 15 +++++++++++++++ views/dashboard-projects.jade | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/routes/dashboard.js b/routes/dashboard.js index 0b0f7d6..93a7379 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -8,6 +8,7 @@ var login = null; login = { id: 1, token: "123456789", + member: tempDB.members[0], first_name: "Erick", last_name: "Sanchez", role: 1 @@ -40,6 +41,8 @@ router.get('/projects', function(req, res, next) { for ( var project of projects) { project.members = helper.findProjectMembers( project) + + project.admin = helper.isProjectAdmin(project, login.member); } res.render('dashboard-projects', {dashboard: true, title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); diff --git a/routes/helper_methods.js b/routes/helper_methods.js index bd6827b..2e7dff8 100644 --- a/routes/helper_methods.js +++ b/routes/helper_methods.js @@ -166,6 +166,20 @@ function findClubOfficers() return members; } +function isProjectAdmin(project, member) +{ + for ( var link of tempDB.members_projects) { + console.log(member); + if (link.project_id == project.id) { + if (link.member_id == member.id) { + return link.admin; + } + } + } + + return false; +} + function replaceColorIntensity(project_interest) { if (project_interest.interest != undefined) { @@ -224,6 +238,7 @@ module.exports = { findMemberForID, findAllEvents, findClubOfficers, + isProjectAdmin, replaceColorIntensity, replaceColorTitle, pluralize, trimURL diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade index 4318f17..851502d 100644 --- a/views/dashboard-projects.jade +++ b/views/dashboard-projects.jade @@ -3,7 +3,8 @@ extends layout-dashboard block view #projects-page.content each project in projects - a(href=token.role == 0 ? "#" : "" class=token.role != 0 ? 'disabled' : '').cell + - var canCRUD = token.role == 1 || project.admin == true ? true : false; + a(href= canCRUD ? "projects/" + project.id : "#" class= !canCRUD ? 'disabled' : '').cell .context p.header= project.title p= helper.pluralize('member', project.members.length, true) From 346223404244863be08b432ef01facb40caeffb1 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Wed, 29 Mar 2017 13:52:18 -0700 Subject: [PATCH 06/17] Project Class and methods --- routes/TEMP_schema.js | 28 ++++++++++++++-------------- routes/dashboard.js | 13 ++++++++++--- routes/modules/projects.js | 12 ++++++++++++ 3 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 routes/modules/projects.js diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 2d7b036..1331dd1 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -1,18 +1,5 @@ //This will act as temporary database placeholder - - -function Project( id, title, description, description_short, status, post, milestones, links, images ) -{ - this.id = id; - this.title = title; - this.description = description; - this.description_short = description_short; - this.status = status; - this.post = post; - this.milestones = milestones; - this.links = links; - this.images = images; -} +var Project = require('./modules/projects') function Member( id, first_name, last_name, bio, bio_short, links, email, languages ) { @@ -733,3 +720,16 @@ module.exports = { services, club_officers }; + +Project.prototype.isProjectAdmin = function(member) +{ + for ( var link of members_projects) { + if (link.project_id == this.id) { + if (link.member_id == member.id) { + return link.admin; + } + } + } + + return false; +} \ No newline at end of file diff --git a/routes/dashboard.js b/routes/dashboard.js index 93a7379..fc43ec4 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -1,7 +1,7 @@ var express = require('express'); var tempDB = require('./TEMP_schema'); -var router = express.Router(); var helper = require('./helper_methods'); +var router = express.Router(); var login = null; @@ -24,11 +24,18 @@ router.get('/', function(req, res, next) { var projects = tempDB.projects; - for ( var project of projects) { + var myProjects = []; + + for ( var project of projects ) { + if (project.isProjectAdmin(login.member)) + myProjects.push(project); + } + + for ( var project of myProjects) { project.members = helper.findProjectMembers( project) } - res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: projects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); + res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: myProjects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); }) router.get('/projects', function(req, res, next) { diff --git a/routes/modules/projects.js b/routes/modules/projects.js new file mode 100644 index 0000000..88231d4 --- /dev/null +++ b/routes/modules/projects.js @@ -0,0 +1,12 @@ +module.exports = function Project( id, title, description, description_short, status, post, milestones, links, images ) +{ + this.id = id; + this.title = title; + this.description = description; + this.description_short = description_short; + this.status = status; + this.post = post; + this.milestones = milestones; + this.links = links; + this.images = images; +} From efc7906a6eccc928156cfa28eb2386705ad492f4 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Wed, 29 Mar 2017 13:59:56 -0700 Subject: [PATCH 07/17] Other classes --- routes/TEMP_schema.js | 85 +++++---------------------- routes/modules/NonProjectEvent.js | 10 ++++ routes/modules/ProjectAreaRequests.js | 11 ++++ routes/modules/ProjectEvent.js | 11 ++++ routes/modules/members.js | 11 ++++ routes/modules/projectsmembers.js | 10 ++++ 6 files changed, 69 insertions(+), 69 deletions(-) create mode 100644 routes/modules/NonProjectEvent.js create mode 100644 routes/modules/ProjectAreaRequests.js create mode 100644 routes/modules/ProjectEvent.js create mode 100644 routes/modules/members.js create mode 100644 routes/modules/projectsmembers.js diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 1331dd1..373a8d3 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -1,71 +1,10 @@ //This will act as temporary database placeholder var Project = require('./modules/projects') - -function Member( id, first_name, last_name, bio, bio_short, links, email, languages ) -{ - this.id = id; - this.first_name = first_name; - this.last_name = last_name; - this.bio = bio; - this.bio_short = bio_short; - this.links = links; - this.email = email; - this.languages = languages; -} - -function ProjectsMembers( id, project_id, member_id, role, admin, assignedArea ) -{ - this.id = id; - this.project_id = project_id; - this.member_id = member_id; - this.admin = admin; - this.role = role; - - this.assignedArea = assignedArea; -} - -function ProjectAreaRequests( id, project_id, title, description, project_interest, nPositions, assets, author_id) -{ - this.id = id; - this.project_id = project_id; - this.title = title; - this.description = description; - this.project_interest = project_interest; - this.nPositions = nPositions; - this.assets = assets; - this.author_id = author_id; -} - -function ProjectEvent( id, project_id, title, description, description_short, location, date_range, media) -{ - this.id = id; - this.project_id = project_id; - this.title = title; - this.description = description; - this.description_short = description_short; - this.location = location; - this.date_range = date_range; - this.media = media; -} - -function Event( id, title, description, description_short, location, date_range, media) -{ - this.id = id; - this.title = title; - this.description = description; - this.description_short = description_short; - this.location = location; - this.date_range = date_range; - this.media = media; -} - -function ClubOfficers( id, member_id, position_title, swatch) -{ - this.id = id; - this.member_id = member_id; - this.position_title = position_title; - this.swatch = swatch; -} +var Member = require('./modules/members') +var ProjectsMembers = require('./modules/projectsmembers') +var ProjectAreaRequests = require('./modules/ProjectAreaRequests') +var ProjectEvent = require('./modules/ProjectEvent') +var NonProjectEvent = require('./modules/NonProjectEvent') //9 var projects = [ @@ -625,7 +564,7 @@ var project_events = [ ] var events = [ - new Event(0, '2017 Make-a-thon', + new NonProjectEvent(0, '2017 Make-a-thon', 'description', 'Rohnert Park\'s Make-a-thon event!', 'Rohnert Park, CA', @@ -636,7 +575,7 @@ var events = [ {caption: 'The Teams', image: '2017 make-a-thon/club.jpg', url: 'http://drive.google.com/uc?export=view&id=0B3wyRcLxpH4jcU93OTJUdlRpNG8'} ] ), - new Event( 1,'Hackathon', + new NonProjectEvent( 1,'Hackathon', 'description', '', 'San Fransisco, CA', @@ -645,7 +584,7 @@ var events = [ {caption: 'Developer Week', image: 'dev-week/hackathon-1.png', url: 'http://www.developerweek.com/hackathon/'} ] ), - new Event( 2,' Keysight Trip', + new NonProjectEvent( 2,' Keysight Trip', 'Check out this trip at the weekly meeting!', '', '1400 Fountaingrove Pkwy, Santa Rosa, CA 95403', @@ -700,6 +639,14 @@ var services = { } }; +function ClubOfficers( id, member_id, position_title, swatch) +{ + this.id = id; + this.member_id = member_id; + this.position_title = position_title; + this.swatch = swatch; +} + var club_officers = [ new ClubOfficers( 0, 2, 'President', "#055B75"), diff --git a/routes/modules/NonProjectEvent.js b/routes/modules/NonProjectEvent.js new file mode 100644 index 0000000..74ddeb5 --- /dev/null +++ b/routes/modules/NonProjectEvent.js @@ -0,0 +1,10 @@ +module.exports = function Event( id, title, description, description_short, location, date_range, media) +{ + this.id = id; + this.title = title; + this.description = description; + this.description_short = description_short; + this.location = location; + this.date_range = date_range; + this.media = media; +} \ No newline at end of file diff --git a/routes/modules/ProjectAreaRequests.js b/routes/modules/ProjectAreaRequests.js new file mode 100644 index 0000000..d3f4e9e --- /dev/null +++ b/routes/modules/ProjectAreaRequests.js @@ -0,0 +1,11 @@ +module.exports = function ProjectAreaRequests( id, project_id, title, description, project_interest, nPositions, assets, author_id) +{ + this.id = id; + this.project_id = project_id; + this.title = title; + this.description = description; + this.project_interest = project_interest; + this.nPositions = nPositions; + this.assets = assets; + this.author_id = author_id; +} \ No newline at end of file diff --git a/routes/modules/ProjectEvent.js b/routes/modules/ProjectEvent.js new file mode 100644 index 0000000..e504047 --- /dev/null +++ b/routes/modules/ProjectEvent.js @@ -0,0 +1,11 @@ +module.exports = function ProjectEvent( id, project_id, title, description, description_short, location, date_range, media) +{ + this.id = id; + this.project_id = project_id; + this.title = title; + this.description = description; + this.description_short = description_short; + this.location = location; + this.date_range = date_range; + this.media = media; +} \ No newline at end of file diff --git a/routes/modules/members.js b/routes/modules/members.js new file mode 100644 index 0000000..70230ac --- /dev/null +++ b/routes/modules/members.js @@ -0,0 +1,11 @@ +module.exports = function Member( id, first_name, last_name, bio, bio_short, links, email, languages ) +{ + this.id = id; + this.first_name = first_name; + this.last_name = last_name; + this.bio = bio; + this.bio_short = bio_short; + this.links = links; + this.email = email; + this.languages = languages; +} \ No newline at end of file diff --git a/routes/modules/projectsmembers.js b/routes/modules/projectsmembers.js new file mode 100644 index 0000000..9ed1de6 --- /dev/null +++ b/routes/modules/projectsmembers.js @@ -0,0 +1,10 @@ +module.exports = function ProjectsMembers( id, project_id, member_id, role, admin, assignedArea ) +{ + this.id = id; + this.project_id = project_id; + this.member_id = member_id; + this.admin = admin; + this.role = role; + + this.assignedArea = assignedArea; +} \ No newline at end of file From 3022f8138a6905a4e8d76ea6bb49b8bf1321d2f6 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Wed, 29 Mar 2017 14:03:43 -0700 Subject: [PATCH 08/17] Fix : navbar --- routes/dashboard.js | 10 ++++++---- views/layout.jade | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/routes/dashboard.js b/routes/dashboard.js index fc43ec4..b544b50 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -11,7 +11,7 @@ login = { member: tempDB.members[0], first_name: "Erick", last_name: "Sanchez", - role: 1 + role: 0 } login.name = login.first_name + ' ' + login.last_name; @@ -36,7 +36,9 @@ router.get('/', function(req, res, next) { } res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: myProjects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); -}) +}); + + router.get('/projects', function(req, res, next) { var navbar = { @@ -49,11 +51,11 @@ router.get('/projects', function(req, res, next) { for ( var project of projects) { project.members = helper.findProjectMembers( project) - project.admin = helper.isProjectAdmin(project, login.member); + project.admin = project.isProjectAdmin(login.member); } res.render('dashboard-projects', {dashboard: true, title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); -}) +}); module.exports = router; diff --git a/views/layout.jade b/views/layout.jade index 7aff842..fdff462 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -11,8 +11,16 @@ html(ng-app="csApp") //script(src="/angular/angular.js") body + - if (dashboard == undefined) + include ./partials/_navbar + - else + include ./partials/_navbar-dashboard .container-fluid .starter-template(style="padding: 3rem 1.5rem 1rem;") block content + - if (dashboard == undefined) + include ./partials/_footer + - else + include ./partials/_footer-dashboard script(src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js") script(src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" crossorigin="anonymous") From 81d3859b8f98a254ae8acc3d156ff0628d7dbe0a Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Thu, 30 Mar 2017 00:07:15 -0700 Subject: [PATCH 09/17] update helper functions into prototypes --- routes/TEMP_schema.js | 121 ++++++++++++--- routes/dashboard.js | 5 +- routes/events.js | 7 +- routes/helper_methods.js | 146 ++---------------- routes/index.js | 8 +- routes/members.js | 6 +- ...tAreaRequests.js => ProjectAreaRequest.js} | 0 routes/projects.js | 18 +-- 8 files changed, 132 insertions(+), 179 deletions(-) rename routes/modules/{ProjectAreaRequests.js => ProjectAreaRequest.js} (100%) diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 373a8d3..4fc2bac 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -2,12 +2,12 @@ var Project = require('./modules/projects') var Member = require('./modules/members') var ProjectsMembers = require('./modules/projectsmembers') -var ProjectAreaRequests = require('./modules/ProjectAreaRequests') +var ProjectAreaRequest = require('./modules/ProjectAreaRequest') var ProjectEvent = require('./modules/ProjectEvent') var NonProjectEvent = require('./modules/NonProjectEvent') //9 -var projects = [ +var _projects = [ new Project(1,'CS Website', 'Not only will this new website show off each of our projects, tasks and quick links to all of our resources and tools the club is using, but it will also become a hub for our new and current members to digest a project and become a great help! Any new top news, upcoming event, and project updates will be posted to our site for everyone to view. My vision in this website is for everyone, members, programmers, and potental members to stay informed about progress and details in every project. Members and potental members can comment and give feedback to any project as a comment feed in each project. Each project contains a detailed description about goals, requirments, and the platform as well as images, list of participating members, and a timeline of events and achivements. As for members, a club member can create a profile and fill in a picture, short and long bios, and show off any work done outside of the club. Quick links will show all of the projects, listed on the website, each member has participated in. As for the About and Contact Us pages, egeryone will have the opprotunuty to ask how to join the club and learn about what we do.', 'A new website to showoff what we do as a club', @@ -158,7 +158,7 @@ var projects = [ ]; //25 -var members = [ +var _members = [ new Member(2, 'Erick', 'Sanchez', 'Began programming since GameMaker was installed on the computer of my 8th grade English class. Made a game from complete scratch and messing around with my friends watching me make a face follow the cursor then something shooting at the face! And this is how Face Game was made, a simple concept turned into something amusing. This game was a hit for too many students during English D: But I expanded to the iPhone, the Mac World! And I\'ll never go back, to PC *cough*. I planned to recreate the Face Game on the iOS with all new faces and cooler stuff because it\'s on the phone. Butt I was too intrested in making other iOS apps and created a few utilities enough to make myself noticed for a client. I programmed and designed an application for a client, George Moskoff. George was the sole creator of Kids-Self Evaluation. This app is sold on the iPhone AppStore. I learned to making my own apps to sell on the AppStore, Mulah, iLogs, Assigned, and whatever else comes out of my head :)', 'Making apps on the iPhone and on other platforms.', @@ -408,7 +408,7 @@ var members = [ ) ]; -var members_projects = [ +var _members_projects = [ //Micromouse new ProjectsMembers( 15 , 0 , 9 , 'Co-Lead Developer', true ), new ProjectsMembers( 0 , 0 , 0 , 'Co-Lead Developer', true ), @@ -485,9 +485,9 @@ var members_projects = [ //11 -var project_area_requests = [ +var _project_area_requests = [ //CS Website - new ProjectAreaRequests( 0, 1,"Front-End Developers", + new ProjectAreaRequest( 0, 1,"Front-End Developers", "Help program and design the front-end of our website. This will not only help mask and structure our website, but also help make this site responsive to all platforms.", ":4", 3, [ @@ -496,7 +496,7 @@ var project_area_requests = [ ], 2 ), - new ProjectAreaRequests( 1, 1,"Back-End Developers", + new ProjectAreaRequest( 1, 1,"Back-End Developers", "Check out MongoDB for our technologies for backend", ":3", 2, [ @@ -505,7 +505,7 @@ var project_area_requests = [ 2 ), //function-fighters - new ProjectAreaRequests( 2, 3,"AI Players", + new ProjectAreaRequest( 2, 3,"AI Players", "", "Welcome!:2", "∞", [ @@ -514,7 +514,7 @@ var project_area_requests = [ 1 ), //Line-Follower - new ProjectAreaRequests( 11, 5,"Hardware Designers", + new ProjectAreaRequest( 11, 5,"Hardware Designers", "", ":3", 0, [ @@ -524,7 +524,7 @@ var project_area_requests = [ 2 ), //Retailer - new ProjectAreaRequests( 3, 6,"Game Developers", + new ProjectAreaRequest( 3, 6,"Game Developers", "", ":5", 4, [ @@ -532,7 +532,7 @@ var project_area_requests = [ ], 2 ), - new ProjectAreaRequests( 4, 6,"Graphic/Asset Designers", + new ProjectAreaRequest( 4, 6,"Graphic/Asset Designers", "", ":3", 1, [ @@ -541,7 +541,7 @@ var project_area_requests = [ ], 2 ), - new ProjectAreaRequests( 5, 6,"Back-End Developer", + new ProjectAreaRequest( 5, 6,"Back-End Developer", "", ":1", 1, [], @@ -550,7 +550,7 @@ var project_area_requests = [ ]; //0 -var project_events = [ +var _project_events = [ new ProjectEvent( 0, 5,'RoboGames—Line Follower', 'description', 'Robotics competition for our line follower project.', @@ -563,7 +563,7 @@ var project_events = [ ) ] -var events = [ +var _events = [ new NonProjectEvent(0, '2017 Make-a-thon', 'description', 'Rohnert Park\'s Make-a-thon event!', @@ -594,7 +594,7 @@ var events = [ ] //Global instances for icons -var services = { +var _services = { noone: { name: 'Link', @@ -647,7 +647,7 @@ function ClubOfficers( id, member_id, position_title, swatch) this.swatch = swatch; } -var club_officers = +var _club_officers = [ new ClubOfficers( 0, 2, 'President', "#055B75"), new ClubOfficers( 1, 1, 'Vice
President', "#0D94BD"), @@ -658,16 +658,18 @@ var club_officers = ]; module.exports = { - projects, - members, - members_projects, - project_area_requests, - project_events, - events, - services, - club_officers + projects: _projects, + members: _members, + members_projects: _members_projects, + project_area_requests: _project_area_requests, + project_events: _project_events, + events: _events, + services: _services, + club_officers: _club_officers }; +var helper = require('./helper_methods') + Project.prototype.isProjectAdmin = function(member) { for ( var link of members_projects) { @@ -679,4 +681,75 @@ Project.prototype.isProjectAdmin = function(member) } return false; +} + +Project.prototype.findProjectMembers = function() +{ + var members = []; + + for( var member_project of _members_projects ) + { + if ( member_project.project_id == this.id ) + { + var potentialMember = helper.findIdInCollection(member_project.member_id, _members); + + if (potentialMember !== undefined ) { + potentialMember.role = member_project.role; + members.push( potentialMember); + } + } + } + + return members; +} + +Project.prototype.findProjectAreaRequests = function() +{ + var requests = []; + + for ( var area_request of _project_area_requests ) + { + if (this.id == area_request.project_id) + { + requests.push(area_request); + } + } + + return requests; +} + +Project.prototype.findProjectEvents = function() +{ + var events = []; + + for ( var event of _project_events ) + { + if (this.id == event.project_id) + { + events.push(event); + } + } + + return events; +} + +Member.prototype.findProjectsForMember = function() +{ + var projects = []; + + for ( var member_project of _members_projects ) + { + if ( member_project.member_id == this.id ) + { + var potentialProject = helper.findIdInCollection(member_project.project_id, _projects); + + if (potentialProject !== undefined ) { + potentialProject.role = member_project.role; + projects.push( potentialProject); + } + } + + } + + return projects; } \ No newline at end of file diff --git a/routes/dashboard.js b/routes/dashboard.js index b544b50..1317d9c 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -32,7 +32,7 @@ router.get('/', function(req, res, next) { } for ( var project of myProjects) { - project.members = helper.findProjectMembers( project) + project.members = project.findProjectMembers(); } res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: myProjects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); @@ -49,8 +49,7 @@ router.get('/projects', function(req, res, next) { var projects = tempDB.projects; for ( var project of projects) { - project.members = helper.findProjectMembers( project) - + project.members = project.findProjectMembers(); project.admin = project.isProjectAdmin(login.member); } diff --git a/routes/events.js b/routes/events.js index e2aaede..15664ee 100644 --- a/routes/events.js +++ b/routes/events.js @@ -29,13 +29,12 @@ router.get('/events/:eventID', function(req, res, next) { links: [] }; - var event = helper.findProjectEventForID(tempDB.events, req.params.eventID); + var event = helper.findIdInCollection(req.params.eventID, tempDB.events); res.render('event', { title: 'CS Club - Events', event: event, navbar: navbar }); }); - /* GET Project Event Page. */ router.get('/project-events/:eventID', function(req, res, next) { var navbar = { @@ -43,8 +42,8 @@ router.get('/project-events/:eventID', function(req, res, next) { links: [] }; - var event = helper.findProjectEventForID(tempDB.project_events, req.params.eventID); - event.project = helper.findProjectForID(tempDB.projects, event.project_id); + var event = helper.findIdInCollection(req.params.eventID, tempDB.project_events); + event.project = helper.findIdInCollection(event.project_id, tempDB.projects); res.render('event', { title: 'CS Club - Events', event: event, navbar: navbar }); }); diff --git a/routes/helper_methods.js b/routes/helper_methods.js index 2e7dff8..0f77454 100644 --- a/routes/helper_methods.js +++ b/routes/helper_methods.js @@ -1,6 +1,19 @@ var tempDB = require('./TEMP_schema'); var pluralize = require('pluralize'); +function findIdInCollection(id,collection) +{ + var found = undefined; + for (var item of collection) { + if (id == item.id) { + found = item; + break; + } + } + + return found; +} + var trimURL = function trimURL(url) { var start = -1, end = -1, length = url.length, i = 0; while ( i < length) { @@ -16,116 +29,6 @@ var trimURL = function trimURL(url) { return url.substring(start, end); } -function findProjectForID( projects, id ) -{ - var found; - for( var project of projects) - { - if (project.id == id) - found = project; - } - - return found; - -} - -function findProjectMembers( project ) -{ - var members = []; - - for( var member_project of tempDB.members_projects ) - { - if ( member_project.project_id == project.id ) - { - var potentialMember = findMemberForID(tempDB.members,member_project.member_id); - - if (potentialMember !== undefined ) { - potentialMember.role = member_project.role; - members.push( potentialMember); - } - } - } - - return members; -} - -function findProjectAreaRequests( project ) -{ - var requests = []; - - for ( var area_request of tempDB.project_area_requests ) - { - if (project.id == area_request.project_id) - { - requests.push(area_request); - } - } - - return requests; -} - -function findProjectEvents( project ) -{ - var events = []; - - for ( var event of tempDB.project_events ) - { - if (project.id == event.project_id) - { - events.push(event); - } - } - - return events; -} - -function findProjectEventForID( events, id ) -{ - var found; - for ( var event of events) - { - if (event.id == id) - found = event; - } - - return found; - -} - -function findProjectsForMember( member ) -{ - var projects = []; - - for ( var member_project of tempDB.members_projects ) - { - if ( member_project.member_id == member.id ) - { - var potentialProject = findProjectForID(tempDB.projects,member_project.project_id); - - if (potentialProject !== undefined ) { - potentialProject.role = member_project.role; - projects.push( potentialProject); - } - } - - } - - return projects; -} - -function findMemberForID( members, id ) -{ - var found; - for( var member of members) - { - if (member.id == id) - found = member; - } - - return found; - -} - function findAllEvents() { var events = tempDB.project_events.concat(tempDB.events); @@ -166,20 +69,6 @@ function findClubOfficers() return members; } -function isProjectAdmin(project, member) -{ - for ( var link of tempDB.members_projects) { - console.log(member); - if (link.project_id == project.id) { - if (link.member_id == member.id) { - return link.admin; - } - } - } - - return false; -} - function replaceColorIntensity(project_interest) { if (project_interest.interest != undefined) { @@ -229,16 +118,9 @@ function replaceColorTitle(project_interest) } module.exports = { - findProjectForID, - findProjectMembers, - findProjectAreaRequests, - findProjectEvents, - findProjectEventForID, - findProjectsForMember, - findMemberForID, + findIdInCollection, findAllEvents, findClubOfficers, - isProjectAdmin, replaceColorIntensity, replaceColorTitle, pluralize, trimURL diff --git a/routes/index.js b/routes/index.js index 1cf1797..d5bdc9e 100644 --- a/routes/index.js +++ b/routes/index.js @@ -32,12 +32,12 @@ router.get('/', function(req, res, next) { var projects = tempDB.projects; for ( var project of projects) { - project.members= helper.findProjectMembers(project); - project.areaRequests= helper.findProjectAreaRequests(project); + project.members= project.findProjectMembers(); + project.areaRequests= project.findProjectAreaRequests(); for ( var request of project.areaRequests) { request.project_interest_color = helper.replaceColorIntensity({interest: request.project_interest}); } - project.events = helper.findProjectEvents( project); + project.events = project.findProjectEvents(); } res.render('index', { title: 'CS Club', projects: projects, navbar: navbar, canidates: results, helper: helper}); @@ -101,7 +101,7 @@ router.get('/join/submit', function(req, res, next) { var projects = tempDB.projects.slice(0,4); for ( var project of projects) { - project.members= helper.findProjectMembers(project); + project.members= project.findProjectMembers(); } res.render('submit', { title: 'CS Club', results: recipient, club_officers: helper.findClubOfficers(), popular_projects: projects, upcoming_events: helper.findAllEvents().upcoming_events, navbar: navbar, helper: helper}); diff --git a/routes/members.js b/routes/members.js index c2e91e3..f538e0d 100644 --- a/routes/members.js +++ b/routes/members.js @@ -23,7 +23,7 @@ router.get('/', function(req, res, next) { for ( var member of members) { - member.numberOfProjects = helper.findProjectsForMember( member).length; + member.numberOfProjects = member.findProjectsForMember().length; } res.render('members', { title: 'CS Club - Members (' + members.length + ')', members: members, officers: tempDB.club_officers, navbar: navbar, helper: helper}); @@ -31,9 +31,9 @@ router.get('/', function(req, res, next) { /* GET member page. */ router.get('/:memberID', function(req, res, next) { - var member = helper.findMemberForID(tempDB.members,req.params.memberID); + var member = helper.findIdInCollection(req.params.memberID, tempDB.members); - member.projects = helper.findProjectsForMember(member); + member.projects = member.findProjectsForMember(); var navbar = { active: 'members', diff --git a/routes/modules/ProjectAreaRequests.js b/routes/modules/ProjectAreaRequest.js similarity index 100% rename from routes/modules/ProjectAreaRequests.js rename to routes/modules/ProjectAreaRequest.js diff --git a/routes/projects.js b/routes/projects.js index cdc5865..731b8f5 100644 --- a/routes/projects.js +++ b/routes/projects.js @@ -23,7 +23,7 @@ router.get('/', function(req, res, next) { var archviedProjects = []; for ( var project of projects) { - project.members= helper.findProjectMembers(project); + project.members= project.findProjectMembers(); if (navbar.links.length < 4) navbar.links.push({name: project.title, url: '/projects/' + project.id}); if (project.status == "Archived" || project.satus == "Completed" || project.status == "Resigned" || project.status == "") @@ -38,8 +38,6 @@ router.get('/', function(req, res, next) { } } - console.log({top: topProjects, secondary: secondaryProjects, archvied: archviedProjects}); - res.render('projects', { title: 'CS Club | Projects' , list_of_projects: {top: topProjects, secondary: secondaryProjects, archived: archviedProjects}, helper: helper, navbar: navbar}); }); @@ -52,7 +50,7 @@ router.get('/:projectID', function(req, res, next) { links: [] }; - var project = helper.findProjectForID( projects, req.params.projectID); + var project = helper.findIdInCollection( req.params.projectID, projects); for ( var p of projects) { if (navbar.links.length < 4) @@ -60,7 +58,7 @@ router.get('/:projectID', function(req, res, next) { } navbar.links.push({name: "List of Projects", url: '/projects'}); - project.members = helper.findProjectMembers( project ); + project.members = project.findProjectMembers(); project.team = {project_managers: [], members: []}; for (var member of project.members) { if (member.role.includes("Project Founder") | member.role.includes("Project Manager") | member.role.includes("Sub-Project Manager")) @@ -103,9 +101,9 @@ router.get('/:projectID', function(req, res, next) { return 0; }); - project.areaRequests= helper.findProjectAreaRequests(project); + project.areaRequests= project.findProjectAreaRequests(); for ( var request of project.areaRequests) { - request.author = helper.findMemberForID( project.members, request.author_id); + request.author = helper.findIdInCollection( request.author_id, project.members); var project_interest = {interest: request.project_interest, title: 'undefined', value: '0'}; request.project_interest_color = helper.replaceColorIntensity(project_interest); request.project_interest_title = helper.replaceColorTitle(project_interest); @@ -113,7 +111,9 @@ router.get('/:projectID', function(req, res, next) { asset.experience_color = helper.replaceColorIntensity({value: asset.experience}); } } - project.events = helper.findProjectEvents( project); + // console.log("DEBUG: "+ JSON.stringify(project, null, 4)); + + project.events = project.findProjectEvents(); res.render('project', { title: 'CS Club' , project: project, services: tempDB.services, navbar: navbar, helper: helper}); }); @@ -129,7 +129,7 @@ router.get('/:projectID/photo-gallery', function(req, res, next) { ] }; - var project = helper.findProjectForID( tempDB.projects, req.params.projectID); + var project = helper.findIdInCollection( req.params.projectID, tempDB.projects); res.render('project_photo-gallery', { title: 'CS Club', project: project, navbar: navbar }); }); From 2fa20b84ad9e86f10d8508046554b8d30562f2b4 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Thu, 30 Mar 2017 00:11:01 -0700 Subject: [PATCH 10/17] Fix : var typo --- routes/TEMP_schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 4fc2bac..04a480f 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -672,7 +672,7 @@ var helper = require('./helper_methods') Project.prototype.isProjectAdmin = function(member) { - for ( var link of members_projects) { + for ( var link of _members_projects) { if (link.project_id == this.id) { if (link.member_id == member.id) { return link.admin; From 4a55242301c9f96ce87487ac557962ecab55913c Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Thu, 30 Mar 2017 00:52:05 -0700 Subject: [PATCH 11/17] Sort projects by user.admin projects the user admins will show on top --- routes/TEMP_schema.js | 2 +- routes/dashboard.js | 10 ++++++++++ views/dashboard-projects.jade | 9 +++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 04a480f..0b334c4 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -675,7 +675,7 @@ Project.prototype.isProjectAdmin = function(member) for ( var link of _members_projects) { if (link.project_id == this.id) { if (link.member_id == member.id) { - return link.admin; + return (link.admin == true ? true : false); } } } diff --git a/routes/dashboard.js b/routes/dashboard.js index 1317d9c..1d037d1 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -53,6 +53,16 @@ router.get('/projects', function(req, res, next) { project.admin = project.isProjectAdmin(login.member); } + projects.sort(function(a,b) { + if (a.admin == true && b.admin == false) + return -1; + if (b.admin == true && a.admin == false ) + return 1; + + return 0; + }); + + res.render('dashboard-projects', {dashboard: true, title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); }); diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade index 851502d..73896b2 100644 --- a/views/dashboard-projects.jade +++ b/views/dashboard-projects.jade @@ -2,8 +2,13 @@ extends layout-dashboard block view #projects-page.content - each project in projects - - var canCRUD = token.role == 1 || project.admin == true ? true : false; + p My Projects + - for (var i = 0; i < projects.length; i += 1) + - var project = projects[i]; + - var lastProject = (i != 0) ? projects[i -1] : undefined; + - var canCRUD = token.role == 1 || project.admin == true; + - if (i == 0 && project.admin == false || i != 0 && project.admin == false && lastProject.admin == true) + p Other projects a(href= canCRUD ? "projects/" + project.id : "#" class= !canCRUD ? 'disabled' : '').cell .context p.header= project.title From b72f605e5079462d948cd7241f413bba934faa13 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 21:13:19 -0700 Subject: [PATCH 12/17] project.isProjectMember(member) Disable buttons for admin and joining --- routes/TEMP_schema.js | 15 +++++++++++++++ routes/dashboard.js | 1 + sass/partials/_dashboard.scss | 12 ++++++++++++ views/dashboard-projects.jade | 6 +++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/routes/TEMP_schema.js b/routes/TEMP_schema.js index 0b334c4..a6ed23e 100644 --- a/routes/TEMP_schema.js +++ b/routes/TEMP_schema.js @@ -683,6 +683,21 @@ Project.prototype.isProjectAdmin = function(member) return false; } +Project.prototype.isProjectMember = function(member) +{ + var isFound = false; + + for ( var link of _members_projects) { + if (link.project_id == this.id) { + if (link.member_id == member.id) { + isFound = true; + } + } + } + + return isFound; +} + Project.prototype.findProjectMembers = function() { var members = []; diff --git a/routes/dashboard.js b/routes/dashboard.js index 1d037d1..8e9962b 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -51,6 +51,7 @@ router.get('/projects', function(req, res, next) { for ( var project of projects) { project.members = project.findProjectMembers(); project.admin = project.isProjectAdmin(login.member); + project.isMember = project.isProjectMember(login.member); } projects.sort(function(a,b) { diff --git a/sass/partials/_dashboard.scss b/sass/partials/_dashboard.scss index 7e9040d..5e21aca 100644 --- a/sass/partials/_dashboard.scss +++ b/sass/partials/_dashboard.scss @@ -20,5 +20,17 @@ color: $gray-darkgray; background-color: $highlighted; } + .project-cell { + @extend .cell; + .project-controls { + a { + @extend .btn, .btn-primary; + margin: auto $margin-sm; + } + a.remove { + @extend .btn-danger; + } + } + } } } diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade index 73896b2..25d8762 100644 --- a/views/dashboard-projects.jade +++ b/views/dashboard-projects.jade @@ -9,8 +9,12 @@ block view - var canCRUD = token.role == 1 || project.admin == true; - if (i == 0 && project.admin == false || i != 0 && project.admin == false && lastProject.admin == true) p Other projects - a(href= canCRUD ? "projects/" + project.id : "#" class= !canCRUD ? 'disabled' : '').cell + .project-cell .context + .project-controls.pull-xs-right + a(href= project.id) view + a(href= "edit/" + project.id class= canCRUD ? "" : "disabled") admin + a(class= project.isMember ? "remove" : "")= project.isMember ? "Unjoin" : "Join" p.header= project.title p= helper.pluralize('member', project.members.length, true) p= project.description_short From 827b93693a7a88b321cf44b5b4174126bbc03cc2 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 22:15:10 -0700 Subject: [PATCH 13/17] Detail view of project --- public/images/projects/cs website/.DS_Store | Bin 6148 -> 6148 bytes routes/dashboard.js | 31 ++++++++++++++++---- sass/partials/_dashboard.scss | 12 ++++++++ views/dashboard-project.jade | 26 ++++++++++++++++ views/dashboard-projects.jade | 2 +- 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 views/dashboard-project.jade diff --git a/public/images/projects/cs website/.DS_Store b/public/images/projects/cs website/.DS_Store index 42a5f59512f01cb2ca17086420fba9805431fc49..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 100644 GIT binary patch delta 70 zcmZoMXfc=|#>AjHu~2NHo+1YW5HK<@2yEWS7{<2w0Am#6W_AvK4xj>{$am(+{342+ UKzW7)kiy9(Jj$D6L{=~Z04^gBI{*Lx delta 238 zcmZoMXfc=|#>B`mF;Q%yo}wr#0|Nsi1A_nqLkUB1PP$=ma(-^X#Kh(GAPF{xRE9Dj z&O??2io*bkd~UvrOG;@;G6Tbvy^B_Xm7vL|;FT}PfLIPOTn^KKvf!e;ocz3WpbX>2 p#CW#J1|lq*xjDEwfWFz7_?>w&zlb6$6Hr!RvZ09ZW)G1)%m5BEHNpS@ diff --git a/routes/dashboard.js b/routes/dashboard.js index 8e9962b..3ee0fd7 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -11,7 +11,7 @@ login = { member: tempDB.members[0], first_name: "Erick", last_name: "Sanchez", - role: 0 + isAdmin: true } login.name = login.first_name + ' ' + login.last_name; @@ -35,11 +35,9 @@ router.get('/', function(req, res, next) { project.members = project.findProjectMembers(); } - res.render('dashboard', {dashboard: true, title: 'CS Dashboard', token: login, navbar: navbar, my_projects: myProjects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); + res.render('dashboard', {dashboard: [], title: 'CS Dashboard', token: login, navbar: navbar, my_projects: myProjects, my_events: helper.findAllEvents().upcoming_events, helper: helper}); }); - - router.get('/projects', function(req, res, next) { var navbar = { active: 'projects', @@ -63,9 +61,32 @@ router.get('/projects', function(req, res, next) { return 0; }); + res.render('dashboard-projects', {dashboard: [], title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); + +}); + +router.get('/projects/:projectID', function(req, res, next) { + var navbar = { + active: 'projects', + links: [] + }; + + var project = helper.findIdInCollection(req.params.projectID, tempDB.projects); + + if (project.isProjectAdmin(login.member) || login.isAdmin) + navbar.links.push({name: "Edit", url: "edit/" + req.params.projectID}); - res.render('dashboard-projects', {dashboard: true, title: 'CS Dashboard - Projects', projects: projects, token: login, navbar: navbar, helper: helper}); + if (project.isProjectMember(login.member)) { + if (login.isAdmin) + navbar.links.push({name: "Unjoin", url: "#"}); + } else { + if (login.isAdmin) + navbar.links.push({name: "Join", url: "#"}); + else + navbar.links.push({name: "Request to Join", url: "#"}); + } + res.render('dashboard-project', {dashboard: ['hideSidebar'], title: 'Edit Project', project: project, token: login, navbar: navbar, helper: helper}); }); module.exports = router; diff --git a/sass/partials/_dashboard.scss b/sass/partials/_dashboard.scss index 5e21aca..aa5e38f 100644 --- a/sass/partials/_dashboard.scss +++ b/sass/partials/_dashboard.scss @@ -33,4 +33,16 @@ } } } + #project-page { + .image-cell { + @extend .cell; + img { + height: 64px; + width: 64px; + } + a { + text-align: left; + } + } + } } diff --git a/views/dashboard-project.jade b/views/dashboard-project.jade new file mode 100644 index 0000000..9c6cd2e --- /dev/null +++ b/views/dashboard-project.jade @@ -0,0 +1,26 @@ +extends layout-dashboard + +block view + #project-page.content + h1= project.title + p= "Description: " + project.description + p= "Short: " + project.description_short + p= "Status: " + project.status + p= "Post: " + project.post + p= "Milestones: " + //- each stone in project.milestones + p= "Links: " + each link, name in project.links + a(href=link target="_blank").cell + .context + p.pull-xs-right= link + p= name + p= "Images: " + each image in project.images + .image-cell + .context + - var source = "/images/projects/"+project.title.toLowerCase()+"/images/"+image; + a(href=source target="_blank").thumb.pull-xs-right + img(src=source) + p= image + p 12k \ No newline at end of file diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade index 25d8762..723ead5 100644 --- a/views/dashboard-projects.jade +++ b/views/dashboard-projects.jade @@ -12,7 +12,7 @@ block view .project-cell .context .project-controls.pull-xs-right - a(href= project.id) view + a(href= "projects/" + project.id) view a(href= "edit/" + project.id class= canCRUD ? "" : "disabled") admin a(class= project.isMember ? "remove" : "")= project.isMember ? "Unjoin" : "Join" p.header= project.title From 06681c3fccebd6a909d32a7c4dce62d479d68138 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 22:24:10 -0700 Subject: [PATCH 14/17] Dashboard control Include options by dashboard --- routes/dashboard.js | 11 +++++++++++ views/dashboard-project-edit.jade | 5 +++++ views/layout-dashboard.jade | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 views/dashboard-project-edit.jade diff --git a/routes/dashboard.js b/routes/dashboard.js index 3ee0fd7..cca5954 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -89,4 +89,15 @@ router.get('/projects/:projectID', function(req, res, next) { res.render('dashboard-project', {dashboard: ['hideSidebar'], title: 'Edit Project', project: project, token: login, navbar: navbar, helper: helper}); }); +router.get('/projects/edit/:projectID', function(req, res, next) { + var navbar = { + active: 'projects', + links: [] + }; + + var project = helper.findIdInCollection(req.params.projectID, tempDB.projects); + + res.render('dashboard-project-edit', {dashboard: ['hideSidebar'], title: 'Edit Project', project: project, token: login, navbar: navbar, helper: helper}); +}); + module.exports = router; diff --git a/views/dashboard-project-edit.jade b/views/dashboard-project-edit.jade new file mode 100644 index 0000000..226242c --- /dev/null +++ b/views/dashboard-project-edit.jade @@ -0,0 +1,5 @@ +extends layout-dashboard + +block view + #project-edit-page.content + \ No newline at end of file diff --git a/views/layout-dashboard.jade b/views/layout-dashboard.jade index ec90fae..572988c 100644 --- a/views/layout-dashboard.jade +++ b/views/layout-dashboard.jade @@ -3,7 +3,7 @@ extends layout block content #dashboard-page.content .row - .col-lg-2.col-md-3.sidebar + .sidebar(class= dashboard.includes('hideSidebar') ? "hidden-xs-up" : "col-lg-2 col-md-3") .hidden-sm-down h2 Welcome img.img-avatar(src='http://placehold.it/64x64/77cb6f') @@ -18,5 +18,5 @@ block content a(href="/dashboard/events" class=navbar.active == 'events' ? 'active' : '').list-group-item Events a(href="/dashboard/members" class=navbar.active == 'members' ? 'active' : '').list-group-item Members a(href="/").list-group-item.disabled Sign Out - .col-lg-10.col-md-9 + .view(class= dashboard.includes('hideSidebar') ? "col-xs-12" : "col-lg-10 col-md-9") block view From 1d75139c659c5ad13535d0d9b27284b61f7a8db1 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 22:55:31 -0700 Subject: [PATCH 15/17] Init edit form --- routes/dashboard.js | 10 +++++--- views/dashboard-project-edit.jade | 39 ++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/routes/dashboard.js b/routes/dashboard.js index cca5954..0fbc23d 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -90,13 +90,17 @@ router.get('/projects/:projectID', function(req, res, next) { }); router.get('/projects/edit/:projectID', function(req, res, next) { + + var project = helper.findIdInCollection(req.params.projectID, tempDB.projects); + var navbar = { active: 'projects', - links: [] + links: [ + {name: "Go Back", url: "/dashboard/projects/" + project.id}, + {name: "Save Changes", url: "#", active: true} + ] }; - var project = helper.findIdInCollection(req.params.projectID, tempDB.projects); - res.render('dashboard-project-edit', {dashboard: ['hideSidebar'], title: 'Edit Project', project: project, token: login, navbar: navbar, helper: helper}); }); diff --git a/views/dashboard-project-edit.jade b/views/dashboard-project-edit.jade index 226242c..0ddc232 100644 --- a/views/dashboard-project-edit.jade +++ b/views/dashboard-project-edit.jade @@ -2,4 +2,41 @@ extends layout-dashboard block view #project-edit-page.content - \ No newline at end of file + .row + .col-md-4.hidden-sm-down + p.header= project.title + p= project.description_short + .col-md-8 + form(action="" method="POST") + .form-group.row + label(for="title").col-2.col-form-label Title + .col-10 + input(type="text" id="title" name="title" value= project.title).form-control + .form-group.row + label(for="description") Description + .col-12 + textarea(id="description" name="description" placeholder="e.g." rows="3" value= project.description).form-control + .form-group.row + label(for="description_short").col-2.col-form-label Short Description + .col-10 + input(type="text" id="description_short" name="description_short" value= project.description_short).form-control + .form-group.row + label(for="status").col-2.col-form-label Status + .col-10 + input(type="text" id="status" name="status" value= project.status).form-control + .form-group.row + label(for="post").col-2.col-form-label Post + .col-10 + input(type="text" id="post" name="post" value= project.post).form-control + .form-group.row + label(for="milestones").col-2.col-form-label Milestones + .col-10 + input(type="text" id="milestones" name="milestones" value= project.milestones).form-control + .form-group.row + label(for="links").col-2.col-form-label Links + .col-10 + input(type="text" id="links" name="links" value= project.links).form-control + .form-group.row + label(for="images").col-2.col-form-label Images + .col-10 + input(type="text" id="images" name="images" value= project.images).form-control \ No newline at end of file From 0568785d9d59064e76d97737561e4017a15a949d Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 22:57:01 -0700 Subject: [PATCH 16/17] Metadata --- views/dashboard-project.jade | 49 ++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/views/dashboard-project.jade b/views/dashboard-project.jade index 9c6cd2e..b74800a 100644 --- a/views/dashboard-project.jade +++ b/views/dashboard-project.jade @@ -2,25 +2,30 @@ extends layout-dashboard block view #project-page.content - h1= project.title - p= "Description: " + project.description - p= "Short: " + project.description_short - p= "Status: " + project.status - p= "Post: " + project.post - p= "Milestones: " - //- each stone in project.milestones - p= "Links: " - each link, name in project.links - a(href=link target="_blank").cell - .context - p.pull-xs-right= link - p= name - p= "Images: " - each image in project.images - .image-cell - .context - - var source = "/images/projects/"+project.title.toLowerCase()+"/images/"+image; - a(href=source target="_blank").thumb.pull-xs-right - img(src=source) - p= image - p 12k \ No newline at end of file + .row + .col-md-4.hidden-sm-down + p.header Metadata + p= "Number of Members: " + project.findProjectMembers().length + .col-md-8 + h1= project.title + p= "Description: " + project.description + p= "Short: " + project.description_short + p= "Status: " + project.status + p= "Post: " + project.post + p= "Milestones: " + //- each stone in project.milestones + p= "Links: " + each link, name in project.links + a(href=link target="_blank").cell + .context + p.pull-xs-right= link + p= name + p= "Images: " + each image in project.images + .image-cell + .context + - var source = "/images/projects/"+project.title.toLowerCase()+"/images/"+image; + a(href=source target="_blank").thumb.pull-xs-right + img(src=source) + p= image + p 12k \ No newline at end of file From 12bcb696f4cb7f125d13e075d65958ff814520e5 Mon Sep 17 00:00:00 2001 From: Erick Sanchez Date: Sat, 1 Apr 2017 23:03:08 -0700 Subject: [PATCH 17/17] adding sub links --- routes/dashboard.js | 3 +++ views/dashboard-project-edit.jade | 4 ++-- views/dashboard-project.jade | 4 ++-- views/dashboard-projects.jade | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/routes/dashboard.js b/routes/dashboard.js index 0fbc23d..5b8bac7 100644 --- a/routes/dashboard.js +++ b/routes/dashboard.js @@ -86,6 +86,8 @@ router.get('/projects/:projectID', function(req, res, next) { navbar.links.push({name: "Request to Join", url: "#"}); } + navbar.links.push({name: "List of Projects", url: "/dashboard/projects", active: true}); + res.render('dashboard-project', {dashboard: ['hideSidebar'], title: 'Edit Project', project: project, token: login, navbar: navbar, helper: helper}); }); @@ -97,6 +99,7 @@ router.get('/projects/edit/:projectID', function(req, res, next) { active: 'projects', links: [ {name: "Go Back", url: "/dashboard/projects/" + project.id}, + {name: "Add a Member", url: ""}, {name: "Save Changes", url: "#", active: true} ] }; diff --git a/views/dashboard-project-edit.jade b/views/dashboard-project-edit.jade index 0ddc232..bf0e4af 100644 --- a/views/dashboard-project-edit.jade +++ b/views/dashboard-project-edit.jade @@ -3,10 +3,10 @@ extends layout-dashboard block view #project-edit-page.content .row - .col-md-4.hidden-sm-down + .col-md-2.hidden-sm-down p.header= project.title p= project.description_short - .col-md-8 + .col-md-10 form(action="" method="POST") .form-group.row label(for="title").col-2.col-form-label Title diff --git a/views/dashboard-project.jade b/views/dashboard-project.jade index b74800a..cd32e29 100644 --- a/views/dashboard-project.jade +++ b/views/dashboard-project.jade @@ -3,10 +3,10 @@ extends layout-dashboard block view #project-page.content .row - .col-md-4.hidden-sm-down + .col-md-2.hidden-sm-down p.header Metadata p= "Number of Members: " + project.findProjectMembers().length - .col-md-8 + .col-md-10 h1= project.title p= "Description: " + project.description p= "Short: " + project.description_short diff --git a/views/dashboard-projects.jade b/views/dashboard-projects.jade index 723ead5..6a9cb44 100644 --- a/views/dashboard-projects.jade +++ b/views/dashboard-projects.jade @@ -13,7 +13,7 @@ block view .context .project-controls.pull-xs-right a(href= "projects/" + project.id) view - a(href= "edit/" + project.id class= canCRUD ? "" : "disabled") admin + a(href= "projects/edit/" + project.id class= canCRUD ? "" : "disabled") admin a(class= project.isMember ? "remove" : "")= project.isMember ? "Unjoin" : "Join" p.header= project.title p= helper.pluralize('member', project.members.length, true)