Files
pa11y-dashboard/route/result/download.js
Rowan Manning b24076abf1 Tooling update (#184)
* Use a common Makefile/build process

* Use ESLint with the pa11y lint config
2017-03-21 13:41:46 +00:00

88 lines
2.4 KiB
JavaScript

// This file is part of Pa11y Dashboard.
//
// Pa11y Dashboard is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Pa11y Dashboard is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Pa11y Dashboard. If not, see <http://www.gnu.org/licenses/>.
'use strict';
const moment = require('moment');
module.exports = route;
// Route definition
function route(app) {
function getTaskAndResult(request, response, next) {
app.webservice.task(request.params.id).get({}, (error, task) => {
if (error) {
return next('route');
}
app.webservice
.task(request.params.id)
.result(request.params.rid)
.get({full: true}, (error, result) => {
if (error) {
return next('route');
}
response.locals.task = task;
response.locals.result = result;
next();
});
});
}
function getDownloadFileName(task, result, extension) {
return [
'pa11y',
'--',
task.url
.replace(/^https?:\/\//i, '')
.replace(/\/$/, '')
.replace(/[^a-z0-9.\-_]+/gi, '-'),
'--',
task.standard.toLowerCase(),
'--',
moment(result.date).format('YYYY-MM-DD'),
'.',
extension
].join('');
}
app.express.get('/:id/:rid.csv', getTaskAndResult, (request, response) => {
const task = response.locals.task;
const result = response.locals.result;
const rows = ['"code","message","type","context","selector"'];
result.results.forEach(msg => {
rows.push([
JSON.stringify(msg.code),
JSON.stringify(msg.message),
JSON.stringify(msg.type),
JSON.stringify(msg.context),
JSON.stringify(msg.selector)
].join(','));
});
response.attachment(getDownloadFileName(task, result, 'csv'));
response.send(rows.join('\n'));
});
app.express.get('/:id/:rid.json', getTaskAndResult, (request, response) => {
const task = response.locals.task;
const result = response.locals.result;
response.attachment(getDownloadFileName(task, result, 'json'));
delete task.id;
delete result.id;
result.task = task;
response.send(result);
});
}