messengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscord
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.2 KiB
130 lines
3.2 KiB
9 years ago
|
/** */
|
||
|
Ext.define('Ext.aria.view.View', {
|
||
|
override: 'Ext.view.View',
|
||
|
|
||
|
initComponent: function() {
|
||
|
var me = this,
|
||
|
selModel;
|
||
|
|
||
|
me.callParent();
|
||
|
|
||
|
selModel = me.getSelectionModel();
|
||
|
|
||
|
selModel.on({
|
||
|
scope: me,
|
||
|
select: me.ariaSelect,
|
||
|
deselect: me.ariaDeselect
|
||
|
});
|
||
|
|
||
|
me.on({
|
||
|
scope: me,
|
||
|
refresh: me.ariaInitViewItems,
|
||
|
itemadd: me.ariaItemAdd,
|
||
|
itemremove: me.ariaItemRemove
|
||
|
});
|
||
|
},
|
||
|
|
||
|
ariaGetRenderAttributes: function() {
|
||
|
var me = this,
|
||
|
attrs, mode;
|
||
|
|
||
|
attrs = me.callParent();
|
||
|
mode = me.getSelectionModel().getSelectionMode();
|
||
|
|
||
|
if (mode !== 'SINGLE') {
|
||
|
attrs['aria-multiselectable'] = true;
|
||
|
}
|
||
|
|
||
|
if (me.title) {
|
||
|
attrs['aria-label'] = me.title;
|
||
|
}
|
||
|
|
||
|
return attrs;
|
||
|
},
|
||
|
|
||
|
// For Views, we have to apply ARIA attributes to the list items
|
||
|
// post factum, because we have no control over the template
|
||
|
// that is used to create the items.
|
||
|
ariaInitViewItems: function() {
|
||
|
var me = this,
|
||
|
updateSize = me.pageSize || me.store.buffered,
|
||
|
pos = me.store.requestStart + 1,
|
||
|
nodes, node, size, i, len;
|
||
|
|
||
|
nodes = me.getNodes();
|
||
|
size = me.store.getTotalCount();
|
||
|
|
||
|
for (i = 0, len = nodes.length; i < len; i++) {
|
||
|
node = nodes[i];
|
||
|
|
||
|
if (!node.id) {
|
||
|
node.setAttribute('id', Ext.id());
|
||
|
}
|
||
|
|
||
|
node.setAttribute('role', me.itemAriaRole);
|
||
|
node.setAttribute('aria-selected', false);
|
||
|
|
||
|
if (updateSize) {
|
||
|
node.setAttribute('aria-setsize', size);
|
||
|
node.setAttribute('aria-posinset', pos + i);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
ariaSelect: function(selModel, record) {
|
||
|
var me = this,
|
||
|
node;
|
||
|
|
||
|
node = me.getNode(record);
|
||
|
|
||
|
if (node) {
|
||
|
node.setAttribute('aria-selected', true);
|
||
|
|
||
|
me.ariaUpdate({ 'aria-activedescendant': node.id });
|
||
|
}
|
||
|
},
|
||
|
|
||
|
ariaDeselect: function(selModel, record) {
|
||
|
var me = this,
|
||
|
node;
|
||
|
|
||
|
node = me.getNode(record);
|
||
|
|
||
|
if (node) {
|
||
|
node.removeAttribute('aria-selected');
|
||
|
|
||
|
me.ariaUpdate({ 'aria-activedescendant': undefined });
|
||
|
}
|
||
|
},
|
||
|
|
||
|
ariaItemRemove: function(records, index, nodes) {
|
||
|
if (!nodes) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var me = this,
|
||
|
ariaSelected, i, len;
|
||
|
|
||
|
ariaSelected = me.el.getAttribute('aria-activedescendant');
|
||
|
|
||
|
for (i = 0, len = nodes.length; i < len; i++) {
|
||
|
if (ariaSelected === nodes[i].id) {
|
||
|
me.ariaUpdate({ 'aria-activedescendant': undefined });
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
ariaItemAdd: function(records, index, nodes) {
|
||
|
this.ariaInitViewItems(records, index, nodes);
|
||
|
},
|
||
|
|
||
|
setTitle: function(title) {
|
||
|
var me = this;
|
||
|
|
||
|
me.title = title;
|
||
|
me.ariaUpdate({ 'aria-label': title });
|
||
|
}
|
||
|
});
|