tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

AuditFilter.js (2248B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 const React = require("resource://devtools/client/shared/vendor/react.mjs");
      8 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs");
      9 const {
     10  connect,
     11 } = require("resource://devtools/client/shared/vendor/react-redux.js");
     12 
     13 const {
     14  isFiltered,
     15 } = require("resource://devtools/client/accessibility/utils/audit.js");
     16 const {
     17  FILTERS,
     18 } = require("resource://devtools/client/accessibility/constants.js");
     19 const {
     20  accessibility: {
     21    AUDIT_TYPE,
     22    SCORES: { BEST_PRACTICES, FAIL, WARNING },
     23  },
     24 } = require("resource://devtools/shared/constants.js");
     25 
     26 function validateCheck({ error, score }) {
     27  return !error && [BEST_PRACTICES, FAIL, WARNING].includes(score);
     28 }
     29 
     30 const AUDIT_TYPE_TO_FILTER = {
     31  [AUDIT_TYPE.CONTRAST]: {
     32    filterKey: FILTERS.CONTRAST,
     33    validator: validateCheck,
     34  },
     35  [AUDIT_TYPE.KEYBOARD]: {
     36    filterKey: FILTERS.KEYBOARD,
     37    validator: validateCheck,
     38  },
     39  [AUDIT_TYPE.TEXT_LABEL]: {
     40    filterKey: FILTERS.TEXT_LABEL,
     41    validator: validateCheck,
     42  },
     43 };
     44 
     45 class AuditFilter extends React.Component {
     46  static get propTypes() {
     47    return {
     48      checks: PropTypes.object,
     49      children: PropTypes.any,
     50      filters: PropTypes.object.isRequired,
     51    };
     52  }
     53 
     54  isVisible(filters) {
     55    return !isFiltered(filters);
     56  }
     57 
     58  shouldHide() {
     59    const { filters, checks } = this.props;
     60    if (this.isVisible(filters)) {
     61      return false;
     62    }
     63 
     64    if (!checks || Object.values(checks).every(check => check == null)) {
     65      return true;
     66    }
     67 
     68    for (const type in checks) {
     69      if (
     70        AUDIT_TYPE_TO_FILTER[type] &&
     71        checks[type] &&
     72        filters[AUDIT_TYPE_TO_FILTER[type].filterKey] &&
     73        AUDIT_TYPE_TO_FILTER[type].validator(checks[type])
     74      ) {
     75        return false;
     76      }
     77    }
     78 
     79    return true;
     80  }
     81 
     82  render() {
     83    return this.shouldHide() ? null : this.props.children;
     84  }
     85 }
     86 
     87 const mapStateToProps = ({ audit: { filters } }) => {
     88  return { filters };
     89 };
     90 
     91 module.exports = connect(mapStateToProps)(AuditFilter);