accessibility-developer-tools
Version:
This is a library of accessibility-related testing and utility code.
90 lines (81 loc) • 3.6 kB
JavaScript
// Copyright 2012 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.require('axs.AuditRule');
goog.provide('axs.AuditRules');
(function() {
var auditRulesByName = {};
var auditRulesByCode = {};
/** @type {Object.<string, axs.AuditRule.Spec>} */
axs.AuditRules.specs = {};
/**
* Instantiates and registers an audit rule.
* If a conflicting rule is already registered then the new rule will not be added.
* @param {axs.AuditRule.Spec} spec The object which defines the AuditRule to add.
* @throws {Error} If the rule duplicates properties that must be unique.
*/
axs.AuditRules.addRule = function(spec) {
// create the auditRule before checking props as we can expect the constructor to perform the
// first layer of sanity checking.
var auditRule = new axs.AuditRule(spec);
if (auditRule.code in auditRulesByCode)
throw new Error('Can not add audit rule with same code: "' + auditRule.code + '"');
if (auditRule.name in auditRulesByName)
throw new Error('Can not add audit rule with same name: "' + auditRule.name + '"');
auditRulesByName[auditRule.name] = auditRulesByCode[auditRule.code] = auditRule;
axs.AuditRules.specs[spec.name] = spec;
};
/**
* Gets the audit rule with the given name.
* @param {string} name The name (or code) of an audit rule.
* @return {axs.AuditRule}
*/
axs.AuditRules.getRule = function(name) {
return auditRulesByName[name] || auditRulesByCode[name] || null;
};
/**
* Gets all registered audit rules.
* @param {boolean=} opt_namesOnly If true then the result will contain only the rule names.
* @return {Array.<axs.AuditRule>|Array.<string>}
*/
axs.AuditRules.getRules = function(opt_namesOnly) {
var ruleNames = Object.keys(auditRulesByName);
if (opt_namesOnly)
return ruleNames;
return ruleNames.map(function(name) {
return this.getRule(name);
}, axs.AuditRules);
};
/**
* Gets all registered audit rules which are not excluded by configuration.
* @param {axs.AuditConfiguration} configuration Used to determine ignored rules.
* @return {Array.<axs.AuditRule>}
*/
axs.AuditRules.getActiveRules = function(configuration) {
var auditRules;
if (configuration.auditRulesToRun && configuration.auditRulesToRun.length > 0) {
auditRules = configuration.auditRulesToRun;
} else {
auditRules = axs.AuditRules.getRules(true);
}
if (configuration.auditRulesToIgnore) {
for (var i = 0; i < configuration.auditRulesToIgnore.length; i++) {
var auditRuleToIgnore = configuration.auditRulesToIgnore[i];
if (auditRules.indexOf(auditRuleToIgnore) < 0)
continue;
auditRules.splice(auditRules.indexOf(auditRuleToIgnore), 1);
}
}
return auditRules.map(axs.AuditRules.getRule);
};
})();