109 lines
2.4 KiB
JavaScript
109 lines
2.4 KiB
JavaScript
/* 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
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"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;
|