Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / ARIA.html
diff --git a/docs/source/ARIA.html b/docs/source/ARIA.html
new file mode 100644 (file)
index 0000000..b083329
--- /dev/null
@@ -0,0 +1,113 @@
+<html>\r
+<head>\r
+  <title>The source code</title>\r
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body  onload="prettyPrint();">\r
+    <pre class="prettyprint lang-js">(function() {\r
+\r
+Ext.a11y.ARIA = Ext.apply(new Ext.util.Observable(), function() {\r
+    return {\r
+        setRole : function(el, role) {\r
+            el = Ext.getDom(el);\r
+            if(el) {\r
+                el.setAttribute('role', role.toString());\r
+            }\r
+        },\r
+        \r
+        setProperty : function(el, key, value) {\r
+            el = Ext.getDom(el);\r
+            if(el) {\r
+                el.setAttribute(key.toString(), value.toString());\r
+            }                \r
+        }\r
+    }\r
+}());\r
+\r
+var ARIA = Ext.a11y.ARIA;\r
+\r
+Ext.override(Ext.tree.TreeNode, {\r
+    render : function(bulkRender){\r
+        this.ui.render(bulkRender);\r
+        if(!this.rendered){\r
+            // make sure it is registered\r
+            this.getOwnerTree().registerNode(this);\r
+            this.rendered = true;\r
+            this.fireEvent('noderender', this);\r
+            if(this.expanded){\r
+                this.expanded = false;\r
+                this.expand(false, false);\r
+            }\r
+        }\r
+    }\r
+});\r
+\r
+Ext.override(Ext.tree.TreePanel, {\r
+    initARIA : function() {\r
+        Ext.tree.TreePanel.superclass.initARIA.call(this);\r
+        this.getSelectionModel().on('selectionchange', this.onNodeSelect, this);\r
+        this.ariaTreeEl = this.body.down('.x-tree-root-ct');\r
+        this.on('collapsenode', this.onNodeCollapse, this);\r
+        this.on('expandnode', this.onNodeExpand, this);\r
+    },\r
+    \r
+    // private\r
+    registerNode : function(node){\r
+        if(this.nodeHash[node.id] === undefined) {\r
+            node.on('noderender', this.onNodeRender, this);\r
+        }\r
+        this.nodeHash[node.id] = node;\r
+    },\r
+\r
+    // private\r
+    unregisterNode : function(node){\r
+        node.un('noderender', this.onNodeRender, this);\r
+        delete this.nodeHash[node.id];\r
+    },\r
+    \r
+    onNodeRender : function(node) {\r
+        var a = node.ui.anchor,\r
+            level = this.rootVisible ? 1 : 0,\r
+            pnode = node;\r
+                                \r
+        if(node.isRoot) {\r
+            ARIA.setRole(this.ariaTreeEl, 'tree');\r
+            ARIA.setProperty(this.ariaTreeEl, 'aria-labelledby', Ext.id(node.ui.textNode));\r
+            ARIA.setProperty(this.ariaTreeEl, 'aria-activedescendant', 'false');\r
+            if(!this.rootVisible) {\r
+                return;\r
+            }\r
+        }\r
+        ARIA.setRole(node.ui.wrap, 'treeitem');\r
+        ARIA.setProperty(node.ui.wrap, 'aria-labelledby', Ext.id(node.ui.textNode));            \r
+        ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'false');\r
+        ARIA.setProperty(node.ui.wrap, 'aria-selected', 'false');\r
+        while (pnode.parentNode) {\r
+            level++;\r
+            pnode = pnode.parentNode;\r
+        }\r
+        ARIA.setProperty(node.ui.wrap, 'aria-level', level);   \r
+        if(!node.isLeaf()) {\r
+            ARIA.setRole(node.ui.ctNode, 'group');\r
+            ARIA.setProperty(node.ui.wrap, 'aria-expanded', node.isExpanded());\r
+        }\r
+    },\r
+    \r
+    onNodeSelect : function(sm, node) {\r
+        ARIA.setProperty(this.ariaTreeEl, 'aria-activedescendant', Ext.id(node.ui.wrap));\r
+        ARIA.setProperty(node.ui.wrap, 'aria-selected', 'true');\r
+    },\r
+    \r
+    onNodeCollapse : function(node) {\r
+        ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'false');\r
+    },\r
+    \r
+    onNodeExpand : function(node) {\r
+        ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'true');\r
+    }\r
+});\r
+     \r
+})();</pre>    \r
+</body>\r
+</html>
\ No newline at end of file