Files
pa11y-dashboard/view/presenter/result.js
Elena Musatova 66d97769a0 Updated results page (#196)
* Update gitignore

* Update makefile. Add hbs helper

* Collect all selectors for errors/warnings/notices

* Add list of techniques that help to solve problems

* Remove task-stats block from sidebar

* Remove script from Makefile

* Update tooltips. Map standards and techniques

* Update layout for new components: new tabs, errors panels, lists of selectors, tooltips and popovers

* Update styles for new layout and components

* Graph buttons and popovers styles

* Reformat less code

* Include popover. Update IE styles

* Problem details. Context popovers

* Update graph buttons. Add sorting by number of errors

* Update graph buttons params

* Fix tooltip names

* Swap details and ignore link-buttons

* Set ignore link colors
2017-10-31 16:10:24 +00:00

73 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 _ = require('underscore');
const presentIgnoreRules = require('./ignore');
const techs = require('../../data/techniques')();
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);
// Enhance the ignored rules
result.ignore = presentIgnoreRules(result.ignore);
// Split out message types
if (result.results) {
const groupedByType = _.groupBy(result.results, 'type');
['error', 'warning', 'notice'].forEach(type => {
const pluralType = `${type}s`;
const results = groupedByType[type] || [];
const groupedByCode = _.groupBy(results, 'code');
result[pluralType] = _.keys(groupedByCode).map(group => {
const groupMessage = groupedByCode[group][0];
groupMessage.count = groupedByCode[group].length;
groupMessage.items = groupedByCode[group].map(plural => ({
selector: plural.selector,
context: plural.context
}));
// Map standard to techniques
const data = groupMessage.code.split('.');
data.splice(0, 4);
const techniques = data.join('.').split(',').map(code => code.split('.')[0]);
groupMessage.solutions = techniques.reduce((prev, technique) => {
if (techs[technique] && techs[technique].title) {
prev.push({
title: techs[technique].title || null,
url: techs[technique].url || null
});
}
return prev;
}, []);
return groupMessage;
})
.sort((currentItem, nextItem) => {
return nextItem.count - currentItem.count;
});
});
}
return result;
}