summaryrefslogtreecommitdiffstats
path: root/devtools/client/accessibility/reducers/audit.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/accessibility/reducers/audit.js')
-rw-r--r--devtools/client/accessibility/reducers/audit.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/devtools/client/accessibility/reducers/audit.js b/devtools/client/accessibility/reducers/audit.js
new file mode 100644
index 0000000000..e65251ba64
--- /dev/null
+++ b/devtools/client/accessibility/reducers/audit.js
@@ -0,0 +1,109 @@
+/* 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;