Skip to content

Commit

Permalink
enhanced linkbuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
abarnhard committed Aug 8, 2014
1 parent 8483c0e commit 39d0b5a
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 30 deletions.
4 changes: 2 additions & 2 deletions app/controllers/tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
});
};
44 changes: 41 additions & 3 deletions app/helpers/linkbuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,55 @@

var _ = require('lodash');

function linkBuilder(query, name, text, count){
exports.sort = function (query, name, text, count){
var query2 = _.cloneDeep(query);
switch(name){
case 'due':
return makeDue(query2, text);
case 'completed':
return makeCom(query2, text);
}
}
};

exports.check = function(checked){
if(checked){
return '<input type="checkbox" name="completed" value="true" checked>';
}else{
return '<input type="checkbox" name="completed" value="true">';
}
};

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

Expand Down
23 changes: 6 additions & 17 deletions app/views/tasks/index.jade
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 18 additions & 8 deletions test/unit/linkbuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -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('<a href="/tasks?sortBy=due&order=1">Due</a>');
});
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('<a href="/tasks?sortBy=due&order=-1">Due</a>');
});
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('<a href="/tasks?sortBy=due&order=1&filter=home">Due</a>');
});
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('<a href="/tasks?sortBy=due&order=1&filter=home&page=2">Due</a>');
});
});
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('<a href="/tasks?sortBy=isComplete&order=1">Completed</a>');
});
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('<a href="/tasks?sortBy=isComplete&order=-1">Completed</a>');
});
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('<a href="/tasks?sortBy=isComplete&order=1&filter=home">Completed</a>');
});
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('<a href="/tasks?sortBy=isComplete&order=1&filter=home&page=2">Completed</a>');
});
});
describe('Make Checkbox', function(){
it('should make a checked checkbox', function(){
var check = linkBuilder.check(true);
expect(check).to.equal('<input type="checkbox" name="completed" value="true" checked>');
});
it('should make an unchecked checkbox', function(){
var check = linkBuilder.check(false);
expect(check).to.equal('<input type="checkbox" name="completed" value="true">');
});
});
});

0 comments on commit 39d0b5a

Please sign in to comment.