dsathyakumar/a11y-auditor

View on GitHub
lib/rulesImpl/AX_06.js

Summary

Maintainability
C
1 day
Test Coverage
'use strict';

/***************************************************************************************
 * Add to the list of Audit Rules
 * Rule : Any ID referred to via an IDREF must be unique in the DOM
 * @return Rule Info object with Rule ID, Info, ErrMsg, Tags, Handler
 **/

var $ = require('jquery');
var _ = require('lodash/core');
var enums = require('../enums/enums');

function _ruleExector(elem) {
    var _severityEnum = enums.severityEnum,
        _id, _objArr;

    // get the element ID present within this element's idref attribute
    _id = $(elem).attr('idref');
    _id = $.trim(_id);

    //check $("[id='_id']") results in more than one element
    if (!_.isEmpty(_id) && _id !== '') {
        _objArr = $('[id=' + _id + ']').get();
        if (_objArr.length <= 1) {
            return {
                TYPE: _severityEnum.INFO,
                RESULT: true,
                MSG: 'Passed!'
            };
        } else {
            return {
                TYPE: _severityEnum.ERROR,
                RESULT: false,
                MSG: 'Failed! The Id ' + _id + ' referred in this elements IDREF attribute is not unique'
            };
        }
    }
    // if the ID doesnt exists
    return {
        TYPE: _severityEnum.WARN,
        RESULT: true,
        MSG: 'WARNING! But No IDREF is set for this element'
    };
}

module.exports = {
    name: 'isIdInIdRefUnique',
    description: 'Any ID referred to via an IDREF must be unique in the DOM',
    ruleID: 'AX_06',
    tagName: ['*'],
    handler: _ruleExector,
    compliance: 'A',
    isGlobal: false
};