mirror of
https://github.com/pa11y/pa11y-dashboard.git
synced 2025-09-25 06:41:21 +00:00
Merge branch 'master' of https://github.com/nature/pa11y-dashboard
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var presentTask = require('../view/presenter/task');
|
||||||
|
|
||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
// Route definition
|
// Route definition
|
||||||
@@ -10,7 +12,7 @@ function route (app) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
res.render('index', {
|
res.render('index', {
|
||||||
tasks: tasks,
|
tasks: tasks.map(presentTask),
|
||||||
deleted: (typeof req.query.deleted !== 'undefined')
|
deleted: (typeof req.query.deleted !== 'undefined')
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var _ = require('underscore');
|
var _ = require('underscore');
|
||||||
|
var presentTask = require('../../view/presenter/task');
|
||||||
|
|
||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
@@ -13,7 +14,7 @@ function route (app) {
|
|||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
res.render('task/delete', {
|
res.render('task/delete', {
|
||||||
task: task
|
task: presentTask(task)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var _ = require('underscore');
|
var presentTask = require('../../view/presenter/task');
|
||||||
|
var presentResult = require('../../view/presenter/result');
|
||||||
|
|
||||||
module.exports = route;
|
module.exports = route;
|
||||||
|
|
||||||
@@ -16,17 +17,10 @@ function route (app) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
return next(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', {
|
res.render('task', {
|
||||||
task: task,
|
task: presentTask(task),
|
||||||
results: results,
|
results: results.map(presentResult),
|
||||||
lastResult: results[0] || null,
|
lastResult: presentResult(results[0]) || null,
|
||||||
added: (typeof req.query.added !== 'undefined')
|
added: (typeof req.query.added !== 'undefined')
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
<ul>
|
|
||||||
{{#results}}
|
|
||||||
<li>
|
|
||||||
<b>Full results for {{date-format date format="DD MMM YYYY"}}</b>
|
|
||||||
<ul>
|
|
||||||
{{#messages}}
|
|
||||||
<li>{{type}}: {{code}} {{message}} ({{count}})</li>
|
|
||||||
{{/messages}}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{{/results}}
|
|
||||||
</ul>
|
|
@@ -1,11 +0,0 @@
|
|||||||
|
|
||||||
<ul>
|
|
||||||
{{#results}}
|
|
||||||
<li>
|
|
||||||
<b>Date:</b> {{date-format date format="DD MMM YYYY"}}<br/>
|
|
||||||
<b>Errors:</b> {{count.error}}<br/>
|
|
||||||
<b>Warnings:</b> {{count.warning}}<br/>
|
|
||||||
<b>Notices:</b> {{count.notice}}
|
|
||||||
</li>
|
|
||||||
{{/results}}
|
|
||||||
</ul>
|
|
@@ -8,23 +8,23 @@
|
|||||||
</li>
|
</li>
|
||||||
{{#tasks}}
|
{{#tasks}}
|
||||||
<li class="col-md-4 col-sm-6 task-card">
|
<li class="col-md-4 col-sm-6 task-card">
|
||||||
<a class="well task-card-link crunch-bottom" title="Details for URL {{simplify-url url}}" href="/{{id}}">
|
<a class="well task-card-link crunch-bottom" title="Details for URL {{simplify-url url}}" href="{{href}}">
|
||||||
<p class="h3">{{simplify-url url}}</p>
|
<p class="h3">{{simplify-url url}}</p>
|
||||||
<p class="h5">({{standard}})</p>
|
<p class="h5">({{standard}})</p>
|
||||||
{{#if last_result}}
|
{{#if lastResult}}
|
||||||
<ul class="clearfix list-unstyled floated-list task-stats">
|
<ul class="clearfix list-unstyled floated-list task-stats">
|
||||||
{{#last_result}}
|
{{#lastResult}}
|
||||||
<li class="danger" title="Number of errors ({{count.error}})">{{count.error}}</li>
|
<li class="danger" title="Number of errors ({{count.error}})">{{count.error}}</li>
|
||||||
<li class="warning" title="Number of warnings ({{count.warning}})">{{count.warning}}</li>
|
<li class="warning" title="Number of warnings ({{count.warning}})">{{count.warning}}</li>
|
||||||
<li class="info last" title="Number of notifications ({{count.notice}})">{{count.notice}}</li>
|
<li class="info last" title="Number of notifications ({{count.notice}})">{{count.notice}}</li>
|
||||||
{{/last_result}}
|
{{/lastResult}}
|
||||||
</ul>
|
</ul>
|
||||||
Last run {{date-format last_result.date format="DD MMM YYYY"}}
|
Last run {{date-format lastResult.date format="DD MMM YYYY"}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<p class="no-results">No results</p>
|
<p class="no-results">No results</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</a>
|
</a>
|
||||||
<a title="Delete this URL" class="delete-button" href="/{{id}}/delete"><span class="sr-only">Delete </span><span class="glyphicon glyphicon-remove"></span></a>
|
<a title="Delete this URL" class="delete-button" href="{{hrefDelete}}"><span class="sr-only">Delete </span><span class="glyphicon glyphicon-remove"></span></a>
|
||||||
</li>
|
</li>
|
||||||
{{/tasks}}
|
{{/tasks}}
|
||||||
</ul>
|
</ul>
|
||||||
|
33
view/presenter/result.js
Normal file
33
view/presenter/result.js
Normal file
@@ -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;
|
||||||
|
}
|
21
view/presenter/task.js
Normal file
21
view/presenter/task.js
Normal file
@@ -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;
|
||||||
|
}
|
@@ -3,7 +3,7 @@
|
|||||||
Delete {{task.url}} ({{task.standard}})
|
Delete {{task.url}} ({{task.standard}})
|
||||||
{{/content}}
|
{{/content}}
|
||||||
|
|
||||||
<form class="col-md-12" action="/{{task.id}}/delete" method="post">
|
<form class="col-md-12" action="{{task.hrefDelete}}" method="post">
|
||||||
<div class="legend">
|
<div class="legend">
|
||||||
<legend>Delete URL ({{simplify-url task.url}})</legend>
|
<legend>Delete URL ({{simplify-url task.url}})</legend>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -106,48 +106,48 @@
|
|||||||
{{#if results}}
|
{{#if results}}
|
||||||
<div class="heading label-danger showing first" id="errors">
|
<div class="heading label-danger showing first" id="errors">
|
||||||
<span data-role="expander" class="pull-right expander"> - </span>
|
<span data-role="expander" class="pull-right expander"> - </span>
|
||||||
Errors ( 13 )
|
Errors ( {{lastResult.count.error}} )
|
||||||
</div>
|
</div>
|
||||||
<div class="task-danger tasks-list collapse clearfix in">
|
<div class="task-danger tasks-list collapse clearfix in">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
{{#lastResult.messages}}
|
{{#lastResult.errors}}
|
||||||
<li>
|
<li>
|
||||||
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
||||||
<p>{{message}}</p>
|
<p>{{message}}</p>
|
||||||
</li>
|
</li>
|
||||||
{{/lastResult.messages}}
|
{{/lastResult.errors}}
|
||||||
</ul>
|
</ul>
|
||||||
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="heading label-warning" id="warnings">
|
<div class="heading label-warning" id="warnings">
|
||||||
<span data-role="expander" class="pull-right expander"> + </span>
|
<span data-role="expander" class="pull-right expander"> + </span>
|
||||||
Warnings ( 142 )
|
Warnings ( {{lastResult.count.warning}} )
|
||||||
</div>
|
</div>
|
||||||
<div class="task-warning tasks-list collapse clearfix">
|
<div class="task-warning tasks-list collapse clearfix">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
{{#lastResult.messages}}
|
{{#lastResult.warnings}}
|
||||||
<li>
|
<li>
|
||||||
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
||||||
<p>{{message}}</p>
|
<p>{{message}}</p>
|
||||||
</li>
|
</li>
|
||||||
{{/lastResult.messages}}
|
{{/lastResult.warnings}}
|
||||||
</ul>
|
</ul>
|
||||||
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="heading label-info" id="notifications">
|
<div class="heading label-info" id="notifications">
|
||||||
<span data-role="expander" class="pull-right expander"> + </span>
|
<span data-role="expander" class="pull-right expander"> + </span>
|
||||||
Notifications ( 166 )
|
Notifications ( {{lastResult.count.notice}} )
|
||||||
</div>
|
</div>
|
||||||
<div class="task-info tasks-list collapse clearfix">
|
<div class="task-info tasks-list collapse clearfix">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
{{#lastResult.messages}}
|
{{#lastResult.notices}}
|
||||||
<li>
|
<li>
|
||||||
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
<p class="crunch rule-name">{{type}} : {{code}} <span class="badge">{{count}}</span></p>
|
||||||
<p>{{message}}</p>
|
<p>{{message}}</p>
|
||||||
</li>
|
</li>
|
||||||
{{/lastResult.messages}}
|
{{/lastResult.notices}}
|
||||||
</ul>
|
</ul>
|
||||||
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
<a class="pull-right" href="#top" data-role="top">Back to top</a>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user