From 39d0b5a8a2161f95da3133d524752d6682dd6b8b Mon Sep 17 00:00:00 2001 From: Adam Barnhard Date: Thu, 7 Aug 2014 21:14:07 -0500 Subject: [PATCH] enhanced linkbuilder --- app/controllers/tasks.js | 4 ++-- app/helpers/linkbuilder.js | 44 +++++++++++++++++++++++++++++++++++--- app/views/tasks/index.jade | 23 ++++++-------------- test/unit/linkbuilder.js | 26 +++++++++++++++------- 4 files changed, 67 insertions(+), 30 deletions(-) diff --git a/app/controllers/tasks.js b/app/controllers/tasks.js index d12951c..2573085 100644 --- a/app/controllers/tasks.js +++ b/app/controllers/tasks.js @@ -29,7 +29,7 @@ exports.index = function(req, res){ exports.update = function(req, res){ Task.update(req.params.id, req.body, function(){ - console.log(req.query); - res.redirect('/tasks'); + //console.log(req.query); + res.redirect('/tasks' + linkBuilder.makeString(req.query)); }); }; diff --git a/app/helpers/linkbuilder.js b/app/helpers/linkbuilder.js index 131c361..973530a 100644 --- a/app/helpers/linkbuilder.js +++ b/app/helpers/linkbuilder.js @@ -2,7 +2,7 @@ var _ = require('lodash'); -function linkBuilder(query, name, text, count){ +exports.sort = function (query, name, text, count){ var query2 = _.cloneDeep(query); switch(name){ case 'due': @@ -10,9 +10,47 @@ function linkBuilder(query, name, text, count){ case 'completed': return makeCom(query2, text); } -} +}; + +exports.check = function(checked){ + if(checked){ + return ''; + }else{ + return ''; + } +}; + +exports.makeString = function(query){ + var keys = Object.keys(query); + //console.log(keys); + if(!keys.length){return '';} + + var query2 = _.cloneDeep(query); + var s = '?'; + for(var p in query2){ + if(query.hasOwnProperty(p)){ + s += p + '=' + query[p] + '&'; + } + } + //console.log(s); + return s.substring(0, s.length - 1); +}; + +exports.makeTags = function(tags, query){ + var links = tags.map(function(tag){ + var s = 'filter=' + tag; + var keys = Object.keys(query); + if(keys.indexOf('sortBy') !== -1){ + s += '&sortBy=' + query.sortBy + '&order=' + query.order; + } + return makeA(s, tag); + }); + return links.join(', '); +}; + +exports.makePages = function(){ -module.exports = linkBuilder; +}; // Helper Functions diff --git a/app/views/tasks/index.jade b/app/views/tasks/index.jade index 43881e4..7c24b0f 100644 --- a/app/views/tasks/index.jade +++ b/app/views/tasks/index.jade @@ -7,33 +7,22 @@ block content thead tr th Name - th:!= linkBuilder(query, 'due', 'Due') + th:!= linkBuilder.sort(query, 'due', 'Due') th Photo - - var comOrder = query.order === '-1' && query.sortBy === 'isComplete' ? '1' : '-1' - th: a(href='/tasks?sortBy=isComplete&order=#{comOrder}#{query.filter ? "&filter=" + query.filter : ""}') Completed + th:!= linkBuilder.sort(query, 'completed', 'Completed') th Tags th Priority tbody each task in tasks tr(style="background-color:#{task.priority.color}") td= task.name - td - = moment(task.due).format('ll') - br - |(#{moment(task.due).fromNow()}) + td #{moment(task.due).format('ll')} (#{moment(task.due).fromNow()}) td: img(src='#{task.photo}', width='100px', height='100px') td - //- form(method="post" action="/tasks/#{task._id}/update?#{((query.sortBy) ? '&sortBy=' + query.sortBy : '') + ((query.filter) ? '&filter=' + query.filter : '') + ((query.page) ? '&page=' + query.page : '')}") - form(method='post', action='/tasks/#{task._id}/update') - if task.isComplete - input(type="checkbox", name="completed", value="true", checked) - else - input(type="checkbox", name="completed", value="true") + form(method='post', action='/tasks/#{task._id}/update#{linkBuilder.makeString(query)}') + != linkBuilder.check(task.isComplete) button Update - td - each tag in task.tags - a(href="/tasks?filter=#{tag + ((query.sortBy) ? '&sortBy=' + query.sortBy : '')}") #{tag} - | + td:!= linkBuilder.makeTags(task.tags, query) td= task.priority.name #pages ul diff --git a/test/unit/linkbuilder.js b/test/unit/linkbuilder.js index 1c0cbc1..acdbb20 100644 --- a/test/unit/linkbuilder.js +++ b/test/unit/linkbuilder.js @@ -9,38 +9,48 @@ var linkBuilder = require('../../app/helpers/linkbuilder'); describe('linkBuilder', function(){ describe('Due link', function(){ it('Should return a link to sort by Due in ascending order', function(){ - var link = linkBuilder({}, 'due', 'Due'); + var link = linkBuilder.sort({}, 'due', 'Due'); expect(link).to.equal('Due'); }); it('Should return a link to sort by Due in descending order', function(){ - var link = linkBuilder({sortBy:'due', order:'1'}, 'due', 'Due'); + var link = linkBuilder.sort({sortBy:'due', order:'1'}, 'due', 'Due'); expect(link).to.equal('Due'); }); it('Should return a link to sort by Due in ascending order filtered by home', function(){ - var link = linkBuilder({filter:'home'}, 'due', 'Due'); + var link = linkBuilder.sort({filter:'home'}, 'due', 'Due'); expect(link).to.equal('Due'); }); it('Should return a link to 2nd page sorted by Due in ascending order filtered by home', function(){ - var link = linkBuilder({filter:'home', page:'2'}, 'due', 'Due'); + var link = linkBuilder.sort({filter:'home', page:'2'}, 'due', 'Due'); expect(link).to.equal('Due'); }); }); describe('Completed Link', function(){ it('Should return a link to sort by Completed in ascending order', function(){ - var link = linkBuilder({}, 'completed', 'Completed'); + var link = linkBuilder.sort({}, 'completed', 'Completed'); expect(link).to.equal('Completed'); }); it('Should return a link to sort by Completed in descending order', function(){ - var link = linkBuilder({sortBy:'isCompleted', order:'1'}, 'completed', 'Completed'); + var link = linkBuilder.sort({sortBy:'isCompleted', order:'1'}, 'completed', 'Completed'); expect(link).to.equal('Completed'); }); it('Should return a link to sort by Completed in acending order filtered by home', function(){ - var link = linkBuilder({filter:'home'}, 'completed', 'Completed'); + var link = linkBuilder.sort({filter:'home'}, 'completed', 'Completed'); expect(link).to.equal('Completed'); }); it('Should return a link to 2nd page sorted by Completed in acending order filtered by home', function(){ - var link = linkBuilder({filter:'home', page:'2'}, 'completed', 'Completed'); + var link = linkBuilder.sort({filter:'home', page:'2'}, 'completed', 'Completed'); expect(link).to.equal('Completed'); }); }); + describe('Make Checkbox', function(){ + it('should make a checked checkbox', function(){ + var check = linkBuilder.check(true); + expect(check).to.equal(''); + }); + it('should make an unchecked checkbox', function(){ + var check = linkBuilder.check(false); + expect(check).to.equal(''); + }); + }); });