ARIA.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:3k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ (function() {
  2. Ext.a11y.ARIA = Ext.apply(new Ext.util.Observable(), function() {
  3.     return {
  4.         setRole : function(el, role) {
  5.             el = Ext.getDom(el);
  6.             if(el) {
  7.                 el.setAttribute('role', role.toString());
  8.             }
  9.         },
  10.         
  11.         setProperty : function(el, key, value) {
  12.             el = Ext.getDom(el);
  13.             if(el) {
  14.                 el.setAttribute(key.toString(), value.toString());
  15.             }                
  16.         }
  17.     }
  18. }());
  19. var ARIA = Ext.a11y.ARIA;
  20. Ext.override(Ext.tree.TreeNode, {
  21.     render : function(bulkRender){
  22.         this.ui.render(bulkRender);
  23.         if(!this.rendered){
  24.             // make sure it is registered
  25.             this.getOwnerTree().registerNode(this);
  26.             this.rendered = true;
  27.             this.fireEvent('noderender', this);
  28.             if(this.expanded){
  29.                 this.expanded = false;
  30.                 this.expand(false, false);
  31.             }
  32.         }
  33.     }
  34. });
  35. Ext.override(Ext.tree.TreePanel, {
  36.     initARIA : function() {
  37.         Ext.tree.TreePanel.superclass.initARIA.call(this);
  38.         this.getSelectionModel().on('selectionchange', this.onNodeSelect, this);
  39.         this.ariaTreeEl = this.body.down('.x-tree-root-ct');
  40.         this.on('collapsenode', this.onNodeCollapse, this);
  41.         this.on('expandnode', this.onNodeExpand, this);
  42.     },
  43.     
  44.     // private
  45.     registerNode : function(node){
  46.         if(this.nodeHash[node.id] === undefined) {
  47.             node.on('noderender', this.onNodeRender, this);
  48.         }
  49.         this.nodeHash[node.id] = node;
  50.     },
  51.     // private
  52.     unregisterNode : function(node){
  53.         node.un('noderender', this.onNodeRender, this);
  54.         delete this.nodeHash[node.id];
  55.     },
  56.     
  57.     onNodeRender : function(node) {
  58.         var a = node.ui.anchor,
  59.             level = this.rootVisible ? 1 : 0,
  60.             pnode = node;
  61.                                 
  62.         if(node.isRoot) {
  63.             ARIA.setRole(this.ariaTreeEl, 'tree');
  64.             ARIA.setProperty(this.ariaTreeEl, 'aria-labelledby', Ext.id(node.ui.textNode));
  65.             ARIA.setProperty(this.ariaTreeEl, 'aria-activedescendant', 'false');
  66.             if(!this.rootVisible) {
  67.                 return;
  68.             }
  69.         }
  70.         ARIA.setRole(node.ui.wrap, 'treeitem');
  71.         ARIA.setProperty(node.ui.wrap, 'aria-labelledby', Ext.id(node.ui.textNode));            
  72.         ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'false');
  73.         ARIA.setProperty(node.ui.wrap, 'aria-selected', 'false');
  74.         while (pnode.parentNode) {
  75.             level++;
  76.             pnode = pnode.parentNode;
  77.         }
  78.         ARIA.setProperty(node.ui.wrap, 'aria-level', level);   
  79.         if(!node.isLeaf()) {
  80.             ARIA.setRole(node.ui.ctNode, 'group');
  81.             ARIA.setProperty(node.ui.wrap, 'aria-expanded', node.isExpanded());
  82.         }
  83.     },
  84.     
  85.     onNodeSelect : function(sm, node) {
  86.         ARIA.setProperty(this.ariaTreeEl, 'aria-activedescendant', Ext.id(node.ui.wrap));
  87.         ARIA.setProperty(node.ui.wrap, 'aria-selected', 'true');
  88.     },
  89.     
  90.     onNodeCollapse : function(node) {
  91.         ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'false');
  92.     },
  93.     
  94.     onNodeExpand : function(node) {
  95.         ARIA.setProperty(node.ui.wrap, 'aria-expanded', 'true');
  96.     }
  97. });
  98.      
  99. })();