IITAA Rule 79: Effective labels should be unique.

Rule Mapping

Markup References

Validation Code

Dependencies

None

Context

document

Parameters

None

Code

function (ruleContext) {
  var dataarray = new Array();
  var xp = "//button|//input|//textarea|//select";
  var xpathResult = OpenAjax.a11y.xpath.evaluate(xp, ruleContext, util.defaultNSResolver, OpenAjax.a11y.xpath.XPathResult.ANY_TYPE, null);
  var r = xpathResult.iterateNext();
  while (r) {
    var formObj = { node: r,
                    label: util.parseLabel(r).label,
                    legend: null,
                    duplicatelabel: false
                  }; // end object
                  
    formObj.legend = util.getFieldSetNodeLegendForElement(r);
    
    if (formObj.label != null) {
      formObj.label = formObj.label.toLowerCase();
    } // endif
    
    if (formObj.legend != null) {
      formObj.legend = formObj.legend.toLowerCase();
    } // endif
    
    dataarray.push(formObj);
    
    r = xpathResult.iterateNext();
    
  } // endwhile
  
  var retArray = new Array();
  var retMsgArray = new Array();
  
  for (var i=0, j=0, n=dataarray.length; i<n; i++) {    
  if (dataarray[i].label == null) continue;              
  var effLab1 = dataarray[i].legend + ' ' + dataarray[i].label;          
  for (j=i+1; j<n; j++) {  
    if (dataarray[j].label == null) continue;  
    var effLab2 = dataarray[j].legend + ' ' + dataarray[j].label;          
    if (effLab1 == effLab2) {
      dataarray[i].duplicatelabel=dataarray[j].duplicatelabel=true;
    }//endif  
  } //endfor
} //endfor
for (var i=0; i < dataarray.length;i++) {
  retArray.push(dataarray[i].node);
  if (dataarray[i].duplicatelabel) {
    if (dataarray[i].legend != null) {
      retMsgArray.push(dataarray[i].legend + ' ' + dataarray[i].label);
    } else {
      retMsgArray.push(dataarray[i].label);
    } //end if
  } //end if
} //end for

var passed = (retArray.length == 0);
return new ValidationResult(passed, retArray, [], '', retMsgArray);
} // endfunction