Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
"use strict";
const {
accessibility: { AUDIT_TYPE },
} = require("resource://devtools/shared/constants.js");
const {
AUDIT,
AUDITING,
AUDIT_PROGRESS,
FILTER_TOGGLE,
FILTERS,
RESET,
SELECT,
} = require("resource://devtools/client/accessibility/constants.js");
/**
* Initial state definition
*/
function getInitialState() {
return {
filters: {
[FILTERS.ALL]: false,
[FILTERS.CONTRAST]: false,
[FILTERS.KEYBOARD]: false,
[FILTERS.TEXT_LABEL]: false,
},
auditing: [],
progress: null,
};
}
/**
* State with all filters active.
*/
function allActiveFilters() {
return {
[FILTERS.ALL]: true,
[FILTERS.CONTRAST]: true,
[FILTERS.KEYBOARD]: true,
[FILTERS.TEXT_LABEL]: true,
};
}
function audit(state = getInitialState(), action) {
switch (action.type) {
case FILTER_TOGGLE:
const { filter } = action;
let { filters } = state;
const isToggledToActive = !filters[filter];
if (filter === FILTERS.NONE) {
filters = getInitialState().filters;
} else if (filter === FILTERS.ALL) {
filters = isToggledToActive
? allActiveFilters()
: getInitialState().filters;
} else {
filters = {
...filters,
[filter]: isToggledToActive,
};
const allAuditTypesActive = Object.values(AUDIT_TYPE)
.filter(filterKey => filters.hasOwnProperty(filterKey))
.every(filterKey => filters[filterKey]);
if (isToggledToActive && !filters[FILTERS.ALL] && allAuditTypesActive) {
filters[FILTERS.ALL] = true;
} else if (!isToggledToActive && filters[FILTERS.ALL]) {
filters[FILTERS.ALL] = false;
}
}
return {
...state,
filters,
};
case AUDITING:
const { auditing } = action;
return {
...state,
auditing,
};
case AUDIT:
return {
...state,
auditing: getInitialState().auditing,
progress: null,
};
case AUDIT_PROGRESS:
const { progress } = action;
return {
...state,
progress,
};
case SELECT:
case RESET:
return getInitialState();
default:
return state;
}
}
exports.audit = audit;