mirror of
https://github.com/pa11y/pa11y-dashboard.git
synced 2025-09-25 06:41:21 +00:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1d931671ff | ||
![]() |
9d95c79625 | ||
![]() |
b8029c56f7 | ||
![]() |
9a23b79d89 | ||
![]() |
b7d45c0913 | ||
![]() |
9ae73dc446 |
50
.github/workflows/tests.yml
vendored
Normal file
50
.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# This workflow will do a clean install of node dependencies, build the source code and run tests.
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Build and lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: # Run actions when code is committed to these branches
|
||||
- master
|
||||
pull_request:
|
||||
branches: # Run actions when a PR is pushed based on one of these branches
|
||||
- master
|
||||
|
||||
jobs:
|
||||
checkout_and_test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- node-version: 8.x
|
||||
lint: true # Linter is run only once to shorten the total build time
|
||||
- node-version: 10.x
|
||||
- node-version: 12.x
|
||||
|
||||
steps:
|
||||
- name: Checkout code from ${{ github.repository }}
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: MongoDB in GitHub Actions
|
||||
uses: supercharge/mongodb-github-action@1.3.0
|
||||
with:
|
||||
mongodb-version: 3.4
|
||||
- name: Install dependencies
|
||||
run: npm i
|
||||
- name: Run linter
|
||||
if: ${{ matrix.lint }}
|
||||
run: make lint
|
||||
- name: Create test config
|
||||
run: cp config/test.sample.json config/test.json
|
||||
- name: Start test app
|
||||
run: NODE_ENV=test node index.js &
|
||||
- name: Wait / Sleep
|
||||
uses: jakejarvis/wait-action@v0.1.0
|
||||
with:
|
||||
time: '10s'
|
||||
- name: Run tests
|
||||
run: make ci
|
24
.travis.yml
24
.travis.yml
@@ -1,24 +0,0 @@
|
||||
|
||||
# Language/versions
|
||||
language: node_js
|
||||
matrix:
|
||||
include:
|
||||
- node_js: '8'
|
||||
- node_js: '10'
|
||||
- node_js: '12'
|
||||
|
||||
# Build only master (and pull-requests)
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
# Services setup
|
||||
services:
|
||||
- mongodb
|
||||
|
||||
# Build script
|
||||
before_script:
|
||||
- cp config/test.sample.json config/test.json
|
||||
- NODE_ENV=test node index.js &
|
||||
- sleep 5 # give server time to start
|
||||
script: 'make ci'
|
@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## 3.3.0 (2021-04-27)
|
||||
|
||||
* Add new list view to the dashboard (thanks @sangitamane)
|
||||
* Upgrade express-hbs to the latest version in order to address several potential vulnerabilities
|
||||
* Fixes a MongoDB "ObjectID generation failed" error.
|
||||
* Update pa11y-webservice to version 3.2.1 and pa11y to version 5.3.1
|
||||
|
||||
## 3.2.0 (2020-10-05)
|
||||
|
||||
* Update pa11y to version 5.3.0, which means better compatibility with sites using AMD modules
|
||||
|
3
app.js
3
app.js
@@ -92,7 +92,6 @@ function initApp(config, callback) {
|
||||
|
||||
// Load routes
|
||||
require('./route/index')(app);
|
||||
require('./route/task/index')(app);
|
||||
require('./route/result/download')(app);
|
||||
if (!config.readonly) {
|
||||
require('./route/new')(app);
|
||||
@@ -102,6 +101,8 @@ function initApp(config, callback) {
|
||||
require('./route/task/ignore')(app);
|
||||
require('./route/task/unignore')(app);
|
||||
}
|
||||
// Needs to be loaded after `/route/new`
|
||||
require('./route/task/index')(app);
|
||||
// Needs to be loaded after `/route/task/edit`
|
||||
require('./route/result/index')(app);
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "pa11y-dashboard",
|
||||
"version": "3.2.0",
|
||||
"version": "3.3.0",
|
||||
"private": true,
|
||||
"description": "Pa11y Dashboard is a visual web interface to the Pa11y accessibility reporter",
|
||||
"keywords": [
|
||||
@@ -28,11 +28,11 @@
|
||||
"body-parser": "~1.19.0",
|
||||
"compression": "~1.7.4",
|
||||
"express": "~4.17.1",
|
||||
"express-hbs": "~2.1.2",
|
||||
"express-hbs": "~2.4.0",
|
||||
"http-headers": "~3.0.2",
|
||||
"kleur": "~4.1.2",
|
||||
"moment": "~2.29.0",
|
||||
"pa11y-webservice": "~3.2.0",
|
||||
"pa11y-webservice": "~3.2.1",
|
||||
"pa11y-webservice-client-node": "~2.0.0",
|
||||
"underscore": "~1.11.0"
|
||||
},
|
||||
|
2
public/css/site.min.css
vendored
2
public/css/site.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -27,6 +27,8 @@ $(document).ready(function(){
|
||||
var graphContainer = $('[data-role="graph"]');
|
||||
var dateSelectDropdownMenu = $('[data-role="date-select-dropdown-menu"]');
|
||||
var legend = graphContainer.parent('.graph-container').find('.dashedLegend');
|
||||
var list = localStorage.getItem("listview") || ""; // get choice or nothing
|
||||
|
||||
|
||||
var graphOptions = {
|
||||
series: {
|
||||
@@ -397,4 +399,38 @@ $(document).ready(function(){
|
||||
$.fn.collapse.Constructor.prototype.keydown
|
||||
);
|
||||
|
||||
// List View
|
||||
$('.btn-list').click(function () {
|
||||
var elements = $("#grid-container .task-card");
|
||||
for (i = 0; i < elements.length; i++) {
|
||||
$(elements[i]).removeClass('col-md-4 col-sm-6');
|
||||
$(elements[i]).addClass('col-md-12');
|
||||
$(elements[i]).find('.gridview:nth-child(1)').addClass('listview col-md-9 col-sm-8');
|
||||
$(elements[i]).find('.gridview:nth-child(2)').addClass('listview col-md-3 col-sm-4 task-actions clearfix');
|
||||
$(elements[i]).find('.gridview').removeClass('gridview');
|
||||
};
|
||||
$('.view-btn').removeClass('btn-default')
|
||||
$(this).addClass('btn-default');
|
||||
localStorage.setItem("listview", "yes") //save the choice
|
||||
});
|
||||
|
||||
// Grid View
|
||||
$('.btn-grid').click(function () {
|
||||
var elements = $("#grid-container .task-card");
|
||||
for (i = 0; i < elements.length; i++) {
|
||||
$(elements[i]).removeClass('col-md-12');
|
||||
$(elements[i]).addClass('col-md-4 col-sm-6');
|
||||
$(elements[i]).find('.listview').addClass('gridview')
|
||||
$(elements[i]).find('.listview:nth-child(1)').removeClass('listview col-md-9 col-sm-8');
|
||||
$(elements[i]).find('.listview:nth-child(2)').removeClass('listview col-md-3 col-sm-4 task-actions clearfix');
|
||||
};
|
||||
$('.view-btn').removeClass('btn-default')
|
||||
$(this).addClass('btn-default')
|
||||
localStorage.setItem("listview", "") //clears the choice
|
||||
});
|
||||
|
||||
//load the view as per user's choice
|
||||
if (list === 'yes') {
|
||||
$('.btn-list').trigger('click');
|
||||
}
|
||||
});
|
||||
|
2
public/js/site.min.js
vendored
2
public/js/site.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
|
||||
// Amend the width of container if you want to here
|
||||
@container-md-ie8: @container-md;
|
||||
|
||||
@grid-adjustment: percentage(@grid-gutter-width / @container-md-ie8);
|
||||
@grid-adjustment: percentage((@grid-gutter-width / @container-md-ie8));
|
||||
|
||||
.ie7, .ie8 {
|
||||
* {
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -233,7 +233,7 @@
|
||||
@navbar-default-bg: @brand-primary;
|
||||
@navbar-default-border: darken(@navbar-default-bg, 6.5%);
|
||||
@navbar-border-radius: @border-radius-base;
|
||||
@navbar-padding-horizontal: floor(@grid-gutter-width / 2); // ~15px
|
||||
@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); // ~15px
|
||||
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
|
||||
|
||||
// Navbar links
|
||||
|
@@ -247,7 +247,7 @@
|
||||
@navbar-height: 50px;
|
||||
@navbar-margin-bottom: @line-height-computed;
|
||||
@navbar-border-radius: @border-radius-base;
|
||||
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
|
||||
@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
|
||||
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
|
||||
|
||||
@navbar-default-color: #777;
|
||||
|
@@ -41,10 +41,18 @@ describe.only('GET /', function() {
|
||||
it('should display all of the expected tasks', function() {
|
||||
const tasks = this.last.dom('[data-test=task]');
|
||||
assert.strictEqual(tasks.length, 4);
|
||||
assert.match(tasks.eq(0).text(), /npg home\s+\(wcag2aa\)/i);
|
||||
assert.match(tasks.eq(1).text(), /npg home\s+\(wcag2aaa\)/i);
|
||||
assert.match(tasks.eq(2).text(), /nature news\s+\(section508\)/i);
|
||||
assert.match(tasks.eq(3).text(), /z integration test\s+\(wcag2aa\)/i);
|
||||
assert.equal(tasks.eq(0).find('.h3').text(), 'NPG Home');
|
||||
assert.equal(tasks.eq(0).find('.h4').text(), 'nature.com');
|
||||
assert.equal(tasks.eq(0).find('.h5').text(), '(WCAG2AA)');
|
||||
assert.equal(tasks.eq(1).find('.h3').text(), 'NPG Home');
|
||||
assert.equal(tasks.eq(1).find('.h4').text(), 'nature.com');
|
||||
assert.equal(tasks.eq(1).find('.h5').text(), '(WCAG2AAA)');
|
||||
assert.equal(tasks.eq(2).find('.h3').text(), 'Nature News');
|
||||
assert.equal(tasks.eq(2).find('.h4').text(), 'nature.com/news');
|
||||
assert.equal(tasks.eq(2).find('.h5').text(), '(Section508)');
|
||||
assert.equal(tasks.eq(3).find('.h3').text(), 'Z Integration Test');
|
||||
assert.equal(tasks.eq(3).find('.h4').text(), 'localhost:8132');
|
||||
assert.equal(tasks.eq(3).find('.h5').text(), '(WCAG2AA)');
|
||||
});
|
||||
|
||||
it('should have links to each task', function() {
|
||||
|
@@ -14,11 +14,15 @@ 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/>.
|
||||
}}
|
||||
<div class="col-md-12 task-card clearfix">
|
||||
<button class="btn view-btn btn-grid btn-default"><i class="glyphicon glyphicon-th"></i> Grid</button>
|
||||
<button class="btn view-btn btn-list"><i class="glyphicon glyphicon-align-justify "></i> List</button>
|
||||
|
||||
<ul class="list-unstyled clearfix crunch-bottom">
|
||||
</div>
|
||||
<ul class="list-unstyled clearfix crunch-bottom" id="grid-container">
|
||||
|
||||
{{#unless readonly}}
|
||||
<li class="col-md-4 col-sm-6 task-card add-task">
|
||||
<li class="col-md-4 col-sm-6 task-card add-task">
|
||||
<a class="well task-card-link crunch-bottom" data-role="add-task" href="/new" data-test="add-task">
|
||||
<p class="h3 crunch">Add new URL</p>
|
||||
<p class="supersize-me crunch">+</p>
|
||||
@@ -28,17 +32,23 @@ along with Pa11y Dashboard. If not, see <http://www.gnu.org/licenses/>.
|
||||
{{#each tasks}}
|
||||
<li class="col-md-4 col-sm-6 task-card" data-test="task" data-role="task" data-keywords="{{lowercase name}} {{lowercase standard}} {{simplify-url url}}">
|
||||
<a class="well task-card-link crunch-bottom" title="Details for URL {{simplify-url url}}" href="{{href}}">
|
||||
<p class="h3">{{name}}</p>
|
||||
<p class="h5">({{standard}})</p>
|
||||
<div class="gridview">
|
||||
<p class="h3">{{name}}</p>
|
||||
<p class="h4">{{simplify-url url}}</p>
|
||||
<p class="h5">({{standard}})</p>
|
||||
</div>
|
||||
|
||||
{{#if lastResult}}
|
||||
<ul class="clearfix list-unstyled floated-list task-stats">
|
||||
{{#lastResult}}
|
||||
<li class="danger" title="Number of errors ({{count.error}})">{{count.error}}<span class="stat-type">Errors</span></li>
|
||||
<li class="warning" title="Number of warnings ({{count.warning}})">{{count.warning}}<span class="stat-type">Warnings</span></li>
|
||||
<li class="info last" title="Number of notices ({{count.notice}})">{{count.notice}}<span class="stat-type">Notices</span></li>
|
||||
{{/lastResult}}
|
||||
</ul>
|
||||
Last run {{date-format lastResult.date format="DD MMM YYYY"}}
|
||||
<div class="gridview">
|
||||
<ul class="clearfix list-unstyled floated-list task-stats">
|
||||
{{#lastResult}}
|
||||
<li class="danger" title="Number of errors ({{count.error}})">{{count.error}}<span class="stat-type">Errors</span></li>
|
||||
<li class="warning" title="Number of warnings ({{count.warning}})">{{count.warning}}<span class="stat-type">Warnings</span></li>
|
||||
<li class="info last" title="Number of notices ({{count.notice}})">{{count.notice}}<span class="stat-type">Notices</span></li>
|
||||
{{/lastResult}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="last-run">Last run {{date-format lastResult.date format="DD MMM YYYY"}}</div>
|
||||
{{else}}
|
||||
<p class="no-results">No results</p>
|
||||
{{/if}}
|
||||
|
Reference in New Issue
Block a user