src/core/services/aria/aria.js
function parentHasAriaLabel(element, level) {
    level = level || 1;
    var node = angular.element(element)[0] || element;
    if (!node.parentNode) {
      return false;
    }
    if (performCheck(node.parentNode)) {
      return true;
    }
    level--;
    if (level) {
      return parentHasAriaLabel(node.parentNode, level);
    }
    return false;

    function performCheck(parentNode) {
      if (!hasAriaLabel(parentNode)) {
        return false;
      }
      /* Perform role blacklist check */
      if (parentNode.hasAttribute('role')) {
        switch (parentNode.getAttribute('role').toLowerCase()) {
          case 'command':
          case 'definition':
          case 'directory':
          case 'grid':
          case 'list':
          case 'listitem':
          case 'log':
          case 'marquee':
          case 'menu':
          case 'menubar':
          case 'note':
          case 'presentation':
          case 'separator':
          case 'scrollbar':
          case 'status':
          case 'tablist':
            return false;
        }
      }
      /* Perform tagName blacklist check */
      switch (parentNode.tagName.toLowerCase()) {
        case 'abbr':
        case 'acronym':
        case 'address':
        case 'applet':
        case 'audio':
        case 'b':
        case 'bdi':
        case 'bdo':
        case 'big':
        case 'blockquote':
        case 'br':
        case 'canvas':
        case 'caption':
        case 'center':
        case 'cite':
        case 'code':
        case 'col':
        case 'data':
        case 'dd':
        case 'del':
        case 'dfn':
        case 'dir':
        case 'div':
        case 'dl':
        case 'em':
        case 'embed':
        case 'fieldset':
        case 'figcaption':
        case 'font':
        case 'h1':
        case 'h2':
        case 'h3':
        case 'h4':
        case 'h5':
        case 'h6':
        case 'hgroup':
        case 'html':
        case 'i':
        case 'ins':
        case 'isindex':
        case 'kbd':
        case 'keygen':
        case 'label':
        case 'legend':
        case 'li':
        case 'map':
        case 'mark':
        case 'menu':
        case 'object':
        case 'ol':
        case 'output':
        case 'pre':
        case 'presentation':
        case 'q':
        case 'rt':
        case 'ruby':
        case 'samp':
        case 'small':
        case 'source':
        case 'span':
        case 'status':
        case 'strike':
        case 'strong':
        case 'sub':
        case 'sup':
        case 'svg':
        case 'tbody':
        case 'td':
        case 'th':
        case 'thead':
        case 'time':
        case 'tr':
        case 'track':
        case 'tt':
        case 'ul':
        case 'var':
          return false;
      }
      return true;
    }
  }
function parentHasAriaLabel(element, level) {
    level = level || 1;
    var node = angular.element(element)[0] || element;
    if (!node.parentNode) {
      return false;
    }
    if (performCheck(node.parentNode)) {
      return true;
    }
    level--;
    if (level) {
      return parentHasAriaLabel(node.parentNode, level);
    }
    return false;

    function performCheck(parentNode) {
      if (!hasAriaLabel(parentNode)) {
        return false;
      }
      /* Perform role blacklist check */
      if (parentNode.hasAttribute('role')) {
        switch (parentNode.getAttribute('role').toLowerCase()) {
          case 'command':
          case 'definition':
          case 'directory':
          case 'grid':
          case 'list':
          case 'listitem':
          case 'log':
          case 'marquee':
          case 'menu':
          case 'menubar':
          case 'note':
          case 'presentation':
          case 'separator':
          case 'scrollbar':
          case 'status':
          case 'tablist':
            return false;
        }
      }
      /* Perform tagName blacklist check */
      switch (parentNode.tagName.toLowerCase()) {
        case 'abbr':
        case 'acronym':
        case 'address':
        case 'applet':
        case 'audio':
        case 'b':
        case 'bdi':
        case 'bdo':
        case 'big':
        case 'blockquote':
        case 'br':
        case 'canvas':
        case 'caption':
        case 'center':
        case 'cite':
        case 'code':
        case 'col':
        case 'data':
        case 'dd':
        case 'del':
        case 'dfn':
        case 'dir':
        case 'div':
        case 'dl':
        case 'em':
        case 'embed':
        case 'fieldset':
        case 'figcaption':
        case 'font':
        case 'h1':
        case 'h2':
        case 'h3':
        case 'h4':
        case 'h5':
        case 'h6':
        case 'hgroup':
        case 'html':
        case 'i':
        case 'ins':
        case 'isindex':
        case 'kbd':
        case 'keygen':
        case 'label':
        case 'legend':
        case 'li':
        case 'map':
        case 'mark':
        case 'menu':
        case 'object':
        case 'ol':
        case 'output':
        case 'pre':
        case 'presentation':
        case 'q':
        case 'rt':
        case 'ruby':
        case 'samp':
        case 'small':
        case 'source':
        case 'span':
        case 'status':
        case 'strike':
        case 'strong':
        case 'sub':
        case 'sup':
        case 'svg':
        case 'tbody':
        case 'td':
        case 'th':
        case 'thead':
        case 'time':
        case 'tr':
        case 'track':
        case 'tt':
        case 'ul':
        case 'var':
          return false;
      }
      return true;
    }
  }
function parentHasAriaLabel ( element , level ) { level = level || 1 ; var node = angular . element ( element ) [ 0 ] || element ; if ( ! node . parentNode ) { return false ; } if ( performCheck ( node . parentNode ) ) { return true ; } level -- ; if ( level ) { return parentHasAriaLabel ( node . parentNode , level ) ; } return false ; function performCheck ( parentNode ) { if ( ! hasAriaLabel ( parentNode ) ) { return false ; } /* Perform role blacklist check */ if ( parentNode . hasAttribute ( 'role' ) ) { switch ( parentNode . getAttribute ( 'role' ) . toLowerCase ( ) ) { case 'command' : case 'definition' : case 'directory' : case 'grid' : case 'list' : case 'listitem' : case 'log' : case 'marquee' : case 'menu' : case 'menubar' : case 'note' : case 'presentation' : case 'separator' : case 'scrollbar' : case 'status' : case 'tablist' : return false ; } } /* Perform tagName blacklist check */ switch ( parentNode . tagName . toLowerCase ( ) ) { case 'abbr' : case 'acronym' : case 'address' : case 'applet' : case 'audio' : case 'b' : case 'bdi' : case 'bdo' : case 'big' : case 'blockquote' : case 'br' : case 'canvas' : case 'caption' : case 'center' : case 'cite' : case 'code' : case 'col' : case 'data' : case 'dd' : case 'del' : case 'dfn' : case 'dir' : case 'div' : case 'dl' : case 'em' : case 'embed' : case 'fieldset' : case 'figcaption' : case 'font' : case 'h1' : case 'h2' : case 'h3' : case 'h4' : case 'h5' : case 'h6' : case 'hgroup' : case 'html' : case 'i' : case 'ins' : case 'isindex' : case 'kbd' : case 'keygen' : case 'label' : case 'legend' : case 'li' : case 'map' : case 'mark' : case 'menu' : case 'object' : case 'ol' : case 'output' : case 'pre' : case 'presentation' : case 'q' : case 'rt' : case 'ruby' : case 'samp' : case 'small' : case 'source' : case 'span' : case 'status' : case 'strike' : case 'strong' : case 'sub' : case 'sup' : case 'svg' : case 'tbody' : case 'td' : case 'th' : case 'thead' : case 'time' : case 'tr' : case 'track' : case 'tt' : case 'ul' : case 'var' : return false ; } return true ; } }
Check if expected element's parent has aria label attribute and has valid role and tagName
@param element
@param {optional} level Number of levels deep search should be performed
Check if expected element s parent has aria label attribute and has valid role and tagName