- commit
- 5c8b1bdd66dd9d0d7585b8b1241e3261dd3610f1
- parent
- 368cca37cc0a188016a39ba9dc0ebba3013d1c03
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2018-02-05 23:48
install accdc from npm
Diffstat
| D | lib/accdc.js | 338 | ------------------------------------------------------------ |
| M | package.json | 3 | ++- |
| M | src/babel.js | 2 | +- |
3 files changed, 3 insertions, 340 deletions
diff --git a/lib/accdc.js b/lib/accdc.js
@@ -1,337 +0,0 @@1 -1 /*!2 -1 calcNames 1.2, compute the Name and Description property values for a DOM node3 -1 Returns an object with 'name' and 'desc' properties.4 -1 Authored by Bryan Garaventa plus contrabutions by Tobias Bengfort5 -1 Distributed under the terms of the Open Source Initiative OSI - MIT License6 -1 */7 -18 -1 var calcNames = function(node, fnc, preventVisualARIASelfCSSRef) {9 -1 if (!node || node.nodeType !== 1) {10 -1 return;11 -1 }12 -113 -1 var trim = function(str) {14 -1 if (typeof str !== 'string') {15 -1 return '';16 -1 }17 -118 -1 return str.replace(/^\s+|\s+$/g, '');19 -1 };20 -121 -1 var walkDOM = function(node, fn, refNode) {22 -1 if (!node) {23 -1 return;24 -1 }25 -1 fn(node);26 -127 -1 if (!isException(node, refNode)) {28 -1 node = node.firstChild;29 -130 -1 while (node) {31 -1 walkDOM(node, fn, refNode);32 -1 node = node.nextSibling;33 -1 }34 -1 }35 -1 };36 -137 -1 var isFocusable = function(node) {38 -1 var nodeName = node.nodeName.toLowerCase();39 -140 -1 if (node.getAttribute('tabindex')) {41 -1 return true;42 -1 }43 -1 if (nodeName === 'a' && node.getAttribute('href')) {44 -1 return true;45 -1 }46 -1 if (['input', 'select', 'button'].indexOf(nodeName) !== -1 && node.getAttribute('type') !== 'hidden') {47 -1 return true;48 -1 }49 -1 return false;50 -1 };51 -152 -1 var isException = function(node, refNode) {53 -1 if (!refNode || !node || refNode.nodeType !== 1 || node.nodeType !== 1) {54 -1 return false;55 -1 }56 -157 -1 var list1 = {58 -1 roles: ['link', 'button', 'checkbox', 'option', 'radio', 'switch', 'tab', 'treeitem', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'cell', 'columnheader', 'rowheader', 'tooltip', 'heading'],59 -1 tags: ['a', 'button', 'summary', 'input', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'menuitem', 'option', 'td', 'th']60 -1 };61 -162 -1 var list2 = {63 -1 roles: ['application', 'alert', 'log', 'marquee', 'timer', 'alertdialog', 'dialog', 'banner', 'complementary', 'form', 'main', 'navigation', 'region', 'search', 'article', 'document', 'feed', 'figure', 'img', 'math', 'toolbar', 'menu', 'menubar', 'grid', 'listbox', 'radiogroup', 'textbox', 'searchbox', 'spinbutton', 'scrollbar', 'slider', 'tablist', 'tabpanel', 'tree', 'treegrid', 'separator'],64 -1 tags: ['article', 'aside', 'body', 'select', 'datalist', 'optgroup', 'dialog', 'figure', 'footer', 'form', 'header', 'hr', 'img', 'textarea', 'input', 'main', 'math', 'menu', 'nav', 'section']65 -1 };66 -167 -1 var list3 = {68 -1 roles: ['combobox', 'term', 'definition', 'directory', 'list', 'group', 'note', 'status', 'table', 'rowgroup', 'row', 'contentinfo'],69 -1 tags: ['dl', 'ul', 'ol', 'dd', 'details', 'output', 'table', 'thead', 'tbody', 'tfoot', 'tr']70 -1 };71 -172 -1 var inList = function(node, list) {73 -1 var role = node.getAttribute('role');74 -1 var tag = node.nodeName.toLowerCase();75 -1 return (76 -1 list.roles.indexOf(role) >= 0 ||77 -1 (!role && list2.tags.indexOf(tag) >= 0)78 -1 );79 -1 };80 -181 -1 if (inList(node, list2)) {82 -1 return true;83 -1 } else if (inList(node, list3)) {84 -1 if (node === refNode) {85 -1 return !isFocusable(node);86 -1 } else {87 -1 return !inList(refNode, list1);88 -1 }89 -1 } else {90 -1 return false;91 -1 }92 -1 };93 -194 -1 var isHidden = function(node, refNode) {95 -1 if (node.nodeType !== 1 || node == refNode) {96 -1 return false;97 -1 }98 -199 -1 if (node.getAttribute('aria-hidden') === 'true') {100 -1 return true;101 -1 }102 -1103 -1 var style = {};104 -1 if (document.defaultView && document.defaultView.getComputedStyle) {105 -1 style = document.defaultView.getComputedStyle(node, '');106 -1 } else if (node.currentStyle) {107 -1 style = node.currentStyle;108 -1 }109 -1 if (style['display'] === 'none' || style['visibility'] === 'hidden') {110 -1 return true;111 -1 }112 -1113 -1 return false;114 -1 };115 -1116 -1 var getCSSText = function(node, refNode) {117 -1 if (node.nodeType !== 1 || node == refNode || ['input', 'select', 'textarea', 'img', 'iframe'].indexOf(node.nodeName.toLowerCase()) !== -1) {118 -1 return {before: '', after: ''};119 -1 }120 -1121 -1 var getText = function(node, position) {122 -1 var text = document.defaultView.getComputedStyle(node, position).getPropertyValue('content').replace(/^\"|\"$/g, '');123 -1 if (!text || text === 'none') {124 -1 return '';125 -1 } else {126 -1 return text;127 -1 }128 -1 };129 -1130 -1 if (document.defaultView && document.defaultView.getComputedStyle) {131 -1 return {132 -1 before: getText(node, ':before'),133 -1 after: getText(node, ':after')134 -1 };135 -1 } else {136 -1 return {before: '', after: ''};137 -1 }138 -1 };139 -1140 -1 var hasParentLabel = function(node, noLabel, refNode) {141 -1 while (node && node !== refNode) {142 -1 node = node.parentNode;143 -1144 -1 if (node.getAttribute) {145 -1 if (['presentation', 'none'].indexOf(node.getAttribute('role')) === -1) {146 -1 if (!noLabel && node.getAttribute('aria-label')) {147 -1 return true;148 -1 }149 -1 if (isHidden(node, refNode)) {150 -1 return true;151 -1 }152 -1 }153 -1 }154 -1 }155 -1156 -1 return false;157 -1 };158 -1159 -1 var walk = function(refNode, stop, skip) {160 -1 var fullName = '';161 -1 var nodes = [];162 -1 var cssOP = {163 -1 before: '',164 -1 after: ''165 -1 };166 -1167 -1 if (nodes.indexOf(refNode) === -1) {168 -1 nodes.push(refNode);169 -1 cssOP = getCSSText(refNode, null);170 -1171 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips172 -1 if (preventVisualARIASelfCSSRef) {173 -1 if (cssOP.before.indexOf(' [ARIA] ') !== -1 || cssOP.before.indexOf(' aria-') !== -1)174 -1 cssOP.before = '';175 -1 if (cssOP.after.indexOf(' [ARIA] ') !== -1 || cssOP.after.indexOf(' aria-') !== -1)176 -1 cssOP.after = '';177 -1 }178 -1 }179 -1180 -1 walkDOM(refNode, function(node) {181 -1 if (skip || !node || (isHidden(node, refNode))) {182 -1 return;183 -1 }184 -1185 -1 var name = '';186 -1 var cssO = {187 -1 before: '',188 -1 after: ''189 -1 };190 -1191 -1 var parent = refNode === node ? node : node.parentNode;192 -1 if (nodes.indexOf(parent) === -1) {193 -1 nodes.push(parent);194 -1 cssO = getCSSText(parent, refNode);195 -1196 -1 // Enabled in Visual ARIA to prevent self referencing by Visual ARIA tooltips197 -1 if (preventVisualARIASelfCSSRef) {198 -1 if (cssO.before.indexOf(' [ARIA] ') !== -1 || cssO.before.indexOf(' aria-') !== -1)199 -1 cssO.before = '';200 -1 if (cssO.after.indexOf(' [ARIA] ') !== -1 || cssO.after.indexOf(' aria-') !== -1)201 -1 cssO.after = '';202 -1 }203 -1204 -1 }205 -1206 -1 if (node.nodeType === 1) {207 -1 var aLabelledby = node.getAttribute('aria-labelledby') || '';208 -1 var aLabel = node.getAttribute('aria-label') || '';209 -1 var nTitle = node.getAttribute('title') || '';210 -1 var rolePresentation = ['presentation', 'none'].indexOf(node.getAttribute('role')) !== -1;211 -1212 -1 if (!node.firstChild || (node == refNode && (aLabelledby || aLabel)) || (node.firstChild && node != refNode && aLabel)) {213 -1 if (!stop && node === refNode && aLabelledby) {214 -1 if (!rolePresentation) {215 -1 var ids = aLabelledby.split(/\s+/);216 -1 var parts = [];217 -1218 -1 for (var i = 0; i < ids.length; i++) {219 -1 var element = document.getElementById(ids[i]);220 -1 parts.push(walk(element, true, skip));221 -1 }222 -1 name = parts.join(' ');223 -1 }224 -1225 -1 if (name || rolePresentation) {226 -1 skip = true;227 -1 }228 -1 }229 -1230 -1 /*!@ Add values of custom controls here if recursive controls with values */231 -1232 -1 if (!name && !rolePresentation && aLabel) {233 -1 name = aLabel;234 -1235 -1 if (name && node === refNode) {236 -1 skip = true;237 -1 }238 -1 }239 -1240 -1 if (!name && !rolePresentation && ['input', 'select', 'textarea'].indexOf(node.nodeName.toLowerCase()) !== -1 && node.id && document.querySelectorAll('label[for="' + node.id + '"]').length) {241 -1 var label = document.querySelector('label[for="' + node.id + '"]');242 -1 name = walk(label, true, skip);243 -1 }244 -1245 -1 if (!name && !rolePresentation && node.nodeName.toLowerCase() == 'img' && node.getAttribute('alt')) {246 -1 name = node.getAttribute('alt');247 -1 }248 -1249 -1 if (!name && !rolePresentation && nTitle) {250 -1 name = nTitle;251 -1 }252 -1 }253 -1 } else if (node.nodeType === 3) {254 -1 name = node.data;255 -1 }256 -1257 -1 name = cssO.before + name + cssO.after;258 -1259 -1 if (name && !hasParentLabel(node, false, refNode)) {260 -1 fullName += name;261 -1 }262 -1 }, refNode);263 -1264 -1 fullName = cssOP.before + fullName + cssOP.after;265 -1 return fullName;266 -1 };267 -1268 -1 if (isHidden(node, document.body) || hasParentLabel(node, true, document.body)) {269 -1 return;270 -1 }271 -1272 -1 var accName = walk(node, false);273 -1 var accDesc = '';274 -1275 -1 if (['presentation', 'none'].indexOf(node.getAttribute('role')) === -1) {276 -1 var desc = '';277 -1278 -1 var title = node.getAttribute('title') || '';279 -1 if (title) {280 -1 if (!accName) {281 -1 accName = title;282 -1 } else {283 -1 accDesc = title;284 -1 }285 -1 }286 -1287 -1 var describedby = node.getAttribute('aria-describedby') || '';288 -1 if (describedby) {289 -1 var ids = describedby.split(/\s+/);290 -1 var parts = [];291 -1292 -1 for (var j = 0; j < ids.length; j++) {293 -1 var element = document.getElementById(ids[j]);294 -1 parts.push(walk(element, true));295 -1 }296 -1297 -1 if (parts.length) {298 -1 accDesc = parts.join(' ');299 -1 }300 -1 }301 -1 }302 -1303 -1 accName = trim(accName.replace(/\s+/g, ' '));304 -1 accDesc = trim(accDesc.replace(/\s+/g, ' '));305 -1306 -1 if (accName === accDesc) {307 -1 accDesc = '';308 -1 }309 -1310 -1 var props = {311 -1 name: accName,312 -1 desc: accDesc313 -1 };314 -1315 -1 if (fnc && typeof fnc == 'function') {316 -1 return fnc.apply(node, [317 -1 node,318 -1 props319 -1 ]);320 -1 } else {321 -1 return props;322 -1 }323 -1 };324 -1325 -1 // Customize returned string326 -1327 -1 var getNames = function(node) {328 -1 var props = calcNames(node);329 -1 return 'accName: "' + props.name + '"\n\naccDesc: "' + props.desc + '"';330 -1 };331 -1332 -1 if (typeof module === 'object' && module.exports) {333 -1 module.exports = {334 -1 getNames: getNames,335 -1 calcNames: calcNames,336 -1 };337 -1337 -1 \ No newline at end of file
diff --git a/package.json b/package.json
@@ -5,7 +5,8 @@ 5 5 "devDependencies": { 6 6 "accessibility-developer-tools": "^2.12.0", 7 7 "aria-api": "^0.2.1",8 -1 "axe-core": "^2.6.1"-1 8 "axe-core": "^2.6.1", -1 9 "w3c-alternative-text-computation": "github:accdc/w3c-alternative-text-computation" 9 10 }, 10 11 "repository": { 11 12 "type": "git",
diff --git a/src/babel.js b/src/babel.js
@@ -1,5 +1,5 @@ 1 1 var ariaApi = require('aria-api');2 -1 var accdc = require('../lib/accdc');-1 2 var accdc = require('w3c-alternative-text-computation'); 3 3 var axe = require('axe-core'); 4 4 var axs = require('../lib/axs'); 5 5