diff --git a/route/index.js b/route/index.js
index d33fee6..e0eaa30 100644
--- a/route/index.js
+++ b/route/index.js
@@ -1,5 +1,7 @@
'use strict';
+var presentTask = require('../view/presenter/task');
+
module.exports = route;
// Route definition
@@ -10,7 +12,7 @@ function route (app) {
return next(err);
}
res.render('index', {
- tasks: tasks,
+ tasks: tasks.map(presentTask),
deleted: (typeof req.query.deleted !== 'undefined')
});
});
diff --git a/route/task/delete.js b/route/task/delete.js
index c183213..28b7713 100644
--- a/route/task/delete.js
+++ b/route/task/delete.js
@@ -1,6 +1,7 @@
'use strict';
var _ = require('underscore');
+var presentTask = require('../../view/presenter/task');
module.exports = route;
@@ -13,7 +14,7 @@ function route (app) {
return next();
}
res.render('task/delete', {
- task: task
+ task: presentTask(task)
});
});
});
diff --git a/route/task/index.js b/route/task/index.js
index 6ea113b..ef8ceea 100644
--- a/route/task/index.js
+++ b/route/task/index.js
@@ -1,6 +1,7 @@
'use strict';
-var _ = require('underscore');
+var presentTask = require('../../view/presenter/task');
+var presentResult = require('../../view/presenter/result');
module.exports = route;
@@ -16,17 +17,10 @@ function route (app) {
if (err) {
return next(err);
}
- results.forEach(function (result) {
- var grouped = _.groupBy(result.results, 'code');
- result.messages = _.keys(grouped).map(function (group) {
- grouped[group][0].count = grouped[group].length;
- return grouped[group][0];
- });
- });
res.render('task', {
- task: task,
- results: results,
- lastResult: results[0] || null,
+ task: presentTask(task),
+ results: results.map(presentResult),
+ lastResult: presentResult(results[0]) || null,
added: (typeof req.query.added !== 'undefined')
});
});
diff --git a/view/partial/full-results.html b/view/partial/full-results.html
deleted file mode 100644
index 20495e8..0000000
--- a/view/partial/full-results.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- {{#results}}
- -
- Full results for {{date-format date format="DD MMM YYYY"}}
-
- {{#messages}}
- - {{type}}: {{code}} {{message}} ({{count}})
- {{/messages}}
-
-
- {{/results}}
-
diff --git a/view/partial/results.html b/view/partial/results.html
deleted file mode 100644
index 6c45823..0000000
--- a/view/partial/results.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- {{#results}}
- -
- Date: {{date-format date format="DD MMM YYYY"}}
- Errors: {{count.error}}
- Warnings: {{count.warning}}
- Notices: {{count.notice}}
-
- {{/results}}
-
diff --git a/view/partial/tasks.html b/view/partial/tasks.html
index 7363e93..36410c6 100644
--- a/view/partial/tasks.html
+++ b/view/partial/tasks.html
@@ -8,23 +8,23 @@
{{#tasks}}
-
+
{{simplify-url url}}
({{standard}})
- {{#if last_result}}
+ {{#if lastResult}}
- {{#last_result}}
+ {{#lastResult}}
- {{count.error}}
- {{count.warning}}
- {{count.notice}}
- {{/last_result}}
+ {{/lastResult}}
- Last run {{date-format last_result.date format="DD MMM YYYY"}}
+ Last run {{date-format lastResult.date format="DD MMM YYYY"}}
{{else}}
No results
{{/if}}
- Delete
+ Delete
{{/tasks}}
diff --git a/view/presenter/result.js b/view/presenter/result.js
new file mode 100644
index 0000000..fe08868
--- /dev/null
+++ b/view/presenter/result.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var _ = require('underscore');
+
+module.exports = presentResult;
+
+function presentResult (result) {
+
+ // Add additional info
+ result.href = '/' + result.task + '/' + result.id;
+ result.hrefCsv = '/' + result.task + '/' + result.id + '.csv';
+ result.hrefJson = '/' + result.task + '/' + result.id + '.json';
+
+ // Parse date
+ result.date = new Date(result.date);
+
+ // Split out message types
+ if (result.results) {
+ var groupedByType = _.groupBy(result.results, 'type');
+ ['error', 'warning', 'notice'].forEach(function (type) {
+ var pluralType = type + 's';
+ var results = groupedByType[type] || [];
+ var groupedByCode = _.groupBy(results, 'code');
+ result[pluralType] = _.keys(groupedByCode).map(function (group) {
+ var firstMessage = groupedByCode[group][0];
+ firstMessage.count = groupedByCode[group].length;
+ return firstMessage;
+ });
+ });
+ }
+
+ return result;
+}
diff --git a/view/presenter/task.js b/view/presenter/task.js
new file mode 100644
index 0000000..4dd4b3a
--- /dev/null
+++ b/view/presenter/task.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var presentResult = require('./result');
+
+module.exports = presentTask;
+
+function presentTask (task) {
+
+ // Add additional info
+ task.href = '/' + task.id;
+ task.hrefDelete = '/' + task.id + '/delete';
+ task.hrefJson = '/' + task.id + '.json';
+
+ // Present the last result if present
+ if (task.last_result) {
+ task.lastResult = presentResult(task.last_result);
+ delete task.last_result;
+ }
+
+ return task;
+}
diff --git a/view/task/delete.html b/view/task/delete.html
index 821abf7..6d0c148 100644
--- a/view/task/delete.html
+++ b/view/task/delete.html
@@ -3,7 +3,7 @@
Delete {{task.url}} ({{task.standard}})
{{/content}}
-