Difference between revisions of "ARIA Menu"

From Level Access Web Labs
Jump to navigation Jump to search
Line 21: Line 21:
 
     }
 
     }
 
     .focus {
 
     .focus {
outline: dotted;
+
    outline: dotted;
 
     }
 
     }
 
   </style>
 
   </style>
Line 28: Line 28:
 
       var e = window.event ? window.event : evt;
 
       var e = window.event ? window.event : evt;
  
obj = e.target;
+
            obj = e.target;
toggle(obj,1);
+
            toggle(obj,1);
 
     }
 
     }
  
function visible(obj) {
+
        function visible(obj) {
if (window.getComputedStyle(obj,null).display == "none")
+
            if (window.getComputedStyle(obj,null).display == "none")
return false;
+
                return false;
else
+
            else
  return true;
+
              return true;
}
+
        }
  
// set force to 1 to force only that one to be displayed
+
        // set force to 1 to force only that one to be displayed
 
     function toggle(obj, force) {
 
     function toggle(obj, force) {
  
if (obj.tagName == "SPAN")
+
                if (obj.tagName == "SPAN")
  obj = obj.parentNode;
+
                  obj = obj.parentNode;
  
    if (obj.id == "l1" || obj.id == "l2") {
+
            if (obj.id == "l1" || obj.id == "l2") {
    obj = obj.children[1]
+
                obj = obj.children[1]
      }
+
          }
  
      if (obj.tagName == "UL") {
+
          if (obj.tagName == "UL") {
    if (force) {
+
                if (force) {
var o = document.getElementsByClassName('menu')
+
                        var o = document.getElementsByClassName('menu')
for (var i=0; i < o.length; i++) {
+
                        for (var i=0; i < o.length; i++) {
  
  o[i].style.display = "none";
+
                          o[i].style.display = "none";
}
+
                        }
      obj.style.display = "block";
+
                  obj.style.display = "block";
        }
+
            }
    else if (!visible(obj))
+
                else if (!visible(obj))
      obj.style.display = "block";
+
                  obj.style.display = "block";
    else
+
                else
    obj.style.display = "none";
+
                    obj.style.display = "none";
      }
+
          }
      else if (obj.tagName == "LI") {
+
          else if (obj.tagName == "LI") {
        obj.onclick();
+
            obj.onclick();
      }
+
          }
 
     }
 
     }
  
 
     function drawFocus() {
 
     function drawFocus() {
removeFocus();
+
      removeFocus();
  
 
       var id = document.getElementById('m1').getAttribute('aria-activedescendant');
 
       var id = document.getElementById('m1').getAttribute('aria-activedescendant');
var obj = document.getElementById(id);
+
      var obj = document.getElementById(id);
  
 
       if (!visible(obj)) {
 
       if (!visible(obj)) {
        toggle(obj,0);
+
            toggle(obj,0);
 
       }
 
       }
 
+
      if (!visible(obj.parentNode)) {
  if (!visible(obj.parentNode)) {
+
            toggle(obj.parentNode,0);
        toggle(obj.parentNode,0);
 
 
       }
 
       }
 
+
      if (document.getElementById(id).className)
if (document.getElementById(id).className)
+
        document.getElementById(id).className += " focus";
document.getElementById(id).className += " focus";
+
      else
else
+
        document.getElementById(id).className = "focus";
  document.getElementById(id).className = "focus";
 
 
     }
 
     }
  
 
     function removeFocus() {
 
     function removeFocus() {
var o = document.getElementsByClassName('focus')
+
            var o = document.getElementsByClassName('focus')
  
for(var i = 0; i < o.length; i++) {
+
            for(var i = 0; i < o.length; i++) {
    o[i].className = o[i].className.replace( /(?:^|\s)focus(?!\S)/g,'');
+
                o[i].className = o[i].className.replace( /(?:^|\s)focus(?!\S)/g,'');
}
+
            }
  
 
     }
 
     }
 
     function keystroke(evt) {
 
     function keystroke(evt) {
 
       var e = window.event ? window.event : evt;
 
       var e = window.event ? window.event : evt;
var activeID = document.getElementById('m1').getAttribute('aria-activedescendant');
+
            var activeID = document.getElementById('m1').getAttribute('aria-activedescendant');
  
if (e.which == 13) { // enter
+
            if (e.which == 13) { // enter
toggle(document.getElementById(activeID),0);
+
                toggle(document.getElementById(activeID),0);
}
+
            }
else if (e.which == 40) { // down arrow
+
            else if (e.which == 40) { // down arrow
 
           document.getElementById('m1').setAttribute('aria-activedescendant',document.getElementById(activeID).getAttribute('data-next'));
 
           document.getElementById('m1').setAttribute('aria-activedescendant',document.getElementById(activeID).getAttribute('data-next'));
 
           drawFocus();
 
           drawFocus();
}
+
            }
else if (e.which == 38) {  // up arrow
+
            else if (e.which == 38) {  // up arrow
 
           document.getElementById('m1').setAttribute('aria-activedescendant',document.getElementById(activeID).getAttribute('data-previous'));
 
           document.getElementById('m1').setAttribute('aria-activedescendant',document.getElementById(activeID).getAttribute('data-previous'));
 
           drawFocus();
 
           drawFocus();
}
+
            }
else if (e.which == 39) { // right arrow
+
            else if (e.which == 39) {           // right arrow
if (activeID.indexOf("l1") > -1) {
+
                    if (activeID.indexOf("l1") > -1) {
          toggle(document.getElementById('l2'),1);
+
              toggle(document.getElementById('l2'),1);
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l2");
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l2");
 
           }
 
           }
 
           else {
 
           else {
          toggle(document.getElementById('l1'),1);
+
              toggle(document.getElementById('l1'),1);
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l1");
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l1");
 
           }
 
           }
 
           drawFocus();
 
           drawFocus();
}
+
            }
else if (e.which == 37) { // left arrow
+
            else if (e.which == 37) {           // left arrow
if (activeID.indexOf("l1") > -1) {
+
                    if (activeID.indexOf("l1") > -1) {
          toggle(document.getElementById('l2'),1);
+
              toggle(document.getElementById('l2'),1);
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l2");
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l2");
 
           }
 
           }
 
           else {
 
           else {
        toggle(document.getElementById('l1'),1);
+
                toggle(document.getElementById('l1'),1);
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l1");
 
             document.getElementById('m1').setAttribute('aria-activedescendant',"l1");
 
           }
 
           }
 
           drawFocus();
 
           drawFocus();
}
+
            }
 
     }
 
     }
 
   </script>
 
   </script>

Revision as of 15:00, 4 September 2014

ARIA menus

Menubar with menu items that contain menus with other menu items