UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

74 lines (63 loc) 2.29 kB
// Helper methods for automated testing function isVisible(/*dijit._Widget || DomNode*/ node){ // summary: // Return true if node/widget is visible var p; if(node.domNode){ node = node.domNode; } return (dojo.style(node, "display") != "none") && (dojo.style(node, "visibility") != "hidden") && (p = dojo.position(node, true), p.y + p.h >= 0 && p.x + p.w >= 0 && p.h && p.w); } function isHidden(/*dijit._Widget || DomNode*/ node){ // summary: // Return true if node/widget is hidden var p; if(node.domNode){ node = node.domNode; } return (dojo.style(node, "display") == "none") || (dojo.style(node, "visibility") == "hidden") || (p = dojo.position(node, true), p.y + p.h < 0 || p.x + p.w < 0 || p.h <= 0 || p.w <= 0); } function innerText(/*DomNode*/ node){ // summary: // Browser portable function to get the innerText of specified DOMNode return node.textContent || node.innerText || ""; } function tabOrder(/*DomNode?*/ root){ // summary: // Return all tab-navigable elements under specified node in the order that // they will be visited (by repeated presses of the tab key) var elems = []; function walkTree(/*DOMNode*/parent){ dojo.query("> *", parent).forEach(function(child){ // Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE, // since show() invokes getAttribute("type"), which crash on VML nodes in IE. if((dojo.isIE && child.scopeName!=="HTML") || !dijit._isElementShown(child)){ return; } if(dijit.isTabNavigable(child)){ elems.push({ elem: child, tabIndex: dojo.hasAttr(child, "tabIndex") ? dojo.attr(child, "tabIndex") : 0, pos: elems.length }); } if(child.nodeName.toUpperCase() != 'SELECT'){ walkTree(child); } }); }; walkTree(root || dojo.body()); elems.sort(function(a, b){ return a.tabIndex != b.tabIndex ? a.tabIndex - b.tabIndex : a.pos - b.pos; }); return dojo.map(elems, function(elem){ return elem.elem; }); } function onFocus(func){ // summary: // On the next change of focus, and after widget has had time to react to focus event, // call func(node) with the newly focused node var handle = dojo.subscribe("focusNode", function(node){ dojo.unsubscribe(handle); setTimeout(function(){ func(node); }, 0); }); }