From 1bd6ad183071455a0b710d40c06af57e891e973e Mon Sep 17 00:00:00 2001 From: Garrett Mills Date: Sat, 22 Jun 2019 12:51:29 -0500 Subject: [PATCH] UI improvements --- app/controllers/dash/v1.controller.js | 55 ++++++++++++++++++++++++--- app/routing/routers/dash/v1.routes.js | 5 +++ app/views/dash_v1/confirm.pug | 5 +++ app/views/dash_v1/main.pug | 51 +++++++++++-------------- app/views/dash_v1/out.pug | 21 +++------- app/views/dash_v1/project.pug | 26 ++++++------- app/views/dash_v1/template.pug | 18 +++++++++ app/views/dash_v1/view.pug | 45 +++++++++------------- 8 files changed, 135 insertions(+), 91 deletions(-) create mode 100644 app/views/dash_v1/confirm.pug create mode 100644 app/views/dash_v1/template.pug diff --git a/app/controllers/dash/v1.controller.js b/app/controllers/dash/v1.controller.js index 7afb0a0..2f76580 100644 --- a/app/controllers/dash/v1.controller.js +++ b/app/controllers/dash/v1.controller.js @@ -24,12 +24,37 @@ class v1 { } new_project_show(req, res, next){ - return _flitter.view(res, 'dash_v1:project', {}) + return _flitter.view(res, 'dash_v1:project', { show_back: true, title: 'Create New Project' }) + } + + async project_edit_show(req, res, next){ + const project = await Project.findById(req.params.id) + if ( !project ){ + return _flitter.error(res, 404, 'Project not found with the specified ID.') + } + + return _flitter.view(res, 'dash_v1:project', { show_back: true, title: 'Update Project', project_name: project.name}) + } + + async project_edit_do(req, res, next){ + const project = await Project.findById(req.params.id) + if ( !project ){ + return _flitter.error(res, 404, 'Project not found with the specified ID.') + } + + if ( !req.body || !req.body.name ){ + return _flitter.view(res, 'dash_v1:project', {show_back: true, title: 'Update Project', project_name: project.name, errors: ['Project name is required.']}) + } + + project.name = req.body.name + await project.save() + + return res.redirect('/dash/v1') } async new_project_do(req, res, next){ if ( !req.body.name ){ - return view(res, 'dash_v1:project', {errors: ['Project name is required.']}) + return _flitter.view(res, 'dash_v1:project', {show_back: true, title: 'Create Project', errors: ['Project name is required.']}) } const project = new Project({ @@ -49,13 +74,14 @@ class v1 { async project_view(req, res, next){ const project = await Project.findById(req.params.id) - const outs = await Out.find({ project_id: project.id }).sort('-created') if ( !project ){ _flitter.error(res, 404, 'Project not found.') } - return _flitter.view(res, 'dash_v1:view', { project, outs }) + const outs = await Out.find({ project_id: project.id }).sort('-created') + + return _flitter.view(res, 'dash_v1:view', { project, outs, show_back: true, title: 'View: '+project.name }) } async out_view(req, res, next){ @@ -66,7 +92,26 @@ class v1 { const pretty = JSON.stringify(JSON.parse(out.data), null, 4) // TODO permission access check - return _flitter.view(res, 'dash_v1:out', {out, prettyd:pretty}); + return _flitter.view(res, 'dash_v1:out', {out, prettyd:pretty, show_back: true, title: out.brief, title_small: true }); + } + + project_delete_show(req, res, next){ + return _flitter.view(res, 'dash_v1:confirm', {show_back: true, title: 'Are you sure?', text: 'Deleting this project will remove all stored breakpoint data. This action cannot be undone.', destination: '/dash/v1/project/delete/'+req.params.id}) + } + + async project_delete_do(req, res, next){ + const project = await Project.findById(req.params.id) + if ( project ){ + const outs = await Out.find({project_id: project.id}) + + for ( const key in outs ){ + await outs[key].delete() + } + + await project.delete() + } + + return res.redirect('/dash/v1') } } diff --git a/app/routing/routers/dash/v1.routes.js b/app/routing/routers/dash/v1.routes.js index dc2c896..ed0b329 100644 --- a/app/routing/routers/dash/v1.routes.js +++ b/app/routing/routers/dash/v1.routes.js @@ -39,6 +39,9 @@ const v1 = { '/project/new': [ _flitter.controller('dash:v1').new_project_show ], '/project/view/:id': [ _flitter.controller('dash:v1').project_view ], + '/project/delete/:id': [ _flitter.controller('dash:v1').project_delete_show ], + '/project/edit/:id': [ _flitter.controller('dash:v1').project_edit_show ], + '/out/view/:id': [ _flitter.controller('dash:v1').out_view ], }, @@ -53,6 +56,8 @@ const v1 = { */ post: { '/project/new': [ _flitter.controller('dash:v1').new_project_do ], + '/project/delete/:id': [ _flitter.controller('dash:v1').project_delete_do ], + '/project/edit/:id': [ _flitter.controller('dash:v1').project_edit_do ], }, } diff --git a/app/views/dash_v1/confirm.pug b/app/views/dash_v1/confirm.pug new file mode 100644 index 0000000..cd8d5c0 --- /dev/null +++ b/app/views/dash_v1/confirm.pug @@ -0,0 +1,5 @@ +extends ./template +block content + p #{text} + form(method='post' action=destination) + button(type='submit') Yes, I'm sure. \ No newline at end of file diff --git a/app/views/dash_v1/main.pug b/app/views/dash_v1/main.pug index 21d09f6..1a3a884 100644 --- a/app/views/dash_v1/main.pug +++ b/app/views/dash_v1/main.pug @@ -1,30 +1,23 @@ -html - head - title DevBug Dashboard - link(rel='stylesheet' href='/assets/dash_v1.css') - body - h1 DevBug Dashboard - ul.navul - li.navli - a.nava(href='/auth/logout') Logout - h3 My Projects - ul(style='list-style-type: none;') - li - a(href='/dash/v1/project/new') Create New Project - table - thead +extends ./template +block content + h3 My Projects + ul(style='list-style-type: none;') + li + a(href='/dash/v1/project/new') Create New Project + table + thead + tr + th(scope='col' style='min-width: 250px') Name + th(scope='col') Actions + tbody + each project in projects tr - th(scope='col' style='min-width: 250px') Name - th(scope='col') Actions - tbody - each project in projects - tr - td #{project.name} - td - ul(style='list-style-type: none; margin: 0; padding: 0;') - li - a.action(href='/dash/v1/project/view/'+project.id) View - li - a.action(href='/dash/v1/project/delete/'+project.id) Delete - li - a.action(href='/dash/v1/project/edit/'+project.id) Edit + td #{project.name} + td + ul(style='list-style-type: none; margin: 0; padding: 0;') + li + a.action(href='/dash/v1/project/view/'+project.id) View + li + a.action(href='/dash/v1/project/delete/'+project.id) Delete + li + a.action(href='/dash/v1/project/edit/'+project.id) Edit diff --git a/app/views/dash_v1/out.pug b/app/views/dash_v1/out.pug index b65dee7..a937236 100644 --- a/app/views/dash_v1/out.pug +++ b/app/views/dash_v1/out.pug @@ -1,16 +1,5 @@ -html - head - title #{out.brief} - link(rel='stylesheet' href='/assets/dash_v1.css') - body - h2 #{out.brief} - ul.navul - li.navli - a.nava(href='/dash/v1') Dashboard - li.navli - a.nava(href='javascript:window.history.back()') Back - li.navli - a.nava(href='/auth/logout') Logout - pre - code - div #{prettyd} \ No newline at end of file +extends ./template +block content + pre + code + div #{prettyd} \ No newline at end of file diff --git a/app/views/dash_v1/project.pug b/app/views/dash_v1/project.pug index ae49b7e..e7cfda7 100644 --- a/app/views/dash_v1/project.pug +++ b/app/views/dash_v1/project.pug @@ -1,15 +1,11 @@ -html - head - title #{(update ? 'Update Project' : 'Create New Project')} | DevBug - link(rel='stylesheet' href='/assets/dash_v1.css') - body - h2 #{(update ? 'Update Project' : 'Create New Project')} - if errors - each error in errors - p(style='color: red; font-weight: bold;') #{error} - form(method='post', enctype='multipart/form-data') - label(for='project_name') Project Name: - input#project_name(type='text', name='name' required autofocus) - br - br - button(type='submit') Create Project \ No newline at end of file +extends ./template +block content + if errors + each error in errors + p(style='color: red; font-weight: bold;') #{error} + form(method='post', enctype='multipart/form-data') + label(for='project_name') Project Name: + input#project_name(type='text', name='name' value=(project_name ? project_name : '') required autofocus) + br + br + button(type='submit') #{project_name ? 'Update Project' : 'Create Project'} \ No newline at end of file diff --git a/app/views/dash_v1/template.pug b/app/views/dash_v1/template.pug new file mode 100644 index 0000000..d8a8a33 --- /dev/null +++ b/app/views/dash_v1/template.pug @@ -0,0 +1,18 @@ +html + head + title #{(title ? title+' | DevBug' : 'DevBug Dashboard')} + link(rel='stylesheet' href='/assets/dash_v1.css') + body + if title_small + h3 #{(title ? title+' | DevBug' : 'DevBug Dashboard')} + else + h1 #{(title ? title+' | DevBug' : 'DevBug Dashboard')} + ul.navul + li.navli + a.nava(href='/dash/v1') Home + li.navli + a.nava(href='/auth/logout') Logout + if show_back + li.navli + a.nava(href='javascript:window.history.back()') Back + block content \ No newline at end of file diff --git a/app/views/dash_v1/view.pug b/app/views/dash_v1/view.pug index 9db5a59..5790aa0 100644 --- a/app/views/dash_v1/view.pug +++ b/app/views/dash_v1/view.pug @@ -1,27 +1,20 @@ -html - head - title View: #{project.name} | Devbug - link(rel='stylesheet' href='/assets/dash_v1.css') - body - h2 View: #{project.name} - h4 API Key: #{ project.uuid } - ul.navul - li.navli - a.nava(href='/dash/v1') Dashboard - li.navli - a.nava(href='/auth/logout') Logout - table - thead +extends ./template +block content + h3 Project API Key: #{project.uuid} + table + thead + tr + th(scope='col' style='min-width: 250px') Brief + th(scope='col' style='min-width: 250px') Created On + th(scope='col') Actions + tbody + each out in outs tr - th(scope='col' style='min-width: 250px') Brief - th(scope='col' style='min-width: 250px') Created On - th(scope='col') Actions - tbody - each out in outs - tr - td #{out.brief} - td #{ out.created.toLocaleString({timeZone: 'America/Chicago'}) } - td - ul(style='list-style-type: none; margin: 0; padding: 0;') - li - a.action(href='/dash/v1/out/view/'+out.id) View \ No newline at end of file + td #{out.brief} + td #{ out.created.toLocaleString({timeZone: 'America/Chicago'}) } + td + ul(style='list-style-type: none; margin: 0; padding: 0;') + li + a.action(href='/dash/v1/out/view/'+out.id) View + li + a.action(href='/dash/v1/out/delete/'+out.id) Delete \ No newline at end of file