Warning:
This wiki has been archived and is now read-only.
Text Alternative Computation
From Automated WCAG Monitoring Community Group
Draft pseudo-code of Text Alternative Computation Algorithm in current WAI-ARIA Recommendation
Node node Text accumulatedText Array EMBEDDED_CONTROLS = {textbox, button, combobox, option, range, spinbutton, slider} Array ALLOWS_NAME_FROM_CONTENTS = {button, checkbox, columnheader, directory, gridcell, heading, link, listitem, menuitem, menuitemcheckbox, menuitemradio, option, radio, row, rowgroup, rowheader, section, sectionhead, tab, tooltip, treeitem} function textAlternativeComputation(node, Boolean recursion) { if(not recursion) { accumulatedText = ""; } // 1 if(node.hidden and not node.referenced) { return ""; } else { if(node.CSS.before not empty) { accumulatedText += " " + node.CSS.before; } // 2A.1 else if(not recursion and node.aria-labelledby not empty) { // accumulatedText = ""; foreach(node = node.aria-labelledby.iDREF) { result = textAlternativeComputation(node, bool recursion = true); accumulatedText += " " + result; } return addCSS_AfterAndReturn(node, accumulatedText); } // 2A.2 else if (node.aria-label not empty){ if(recursion and node.role contained in EMBEDDED_CONTROLS) { ; } else { return addCSS_AfterAndReturn(node, node.aria-label.value); } } // added to skip to 2B as specified in 2A.2 else if (not recursion and not node.role contained in EMBEDDED_CONTROLS)) { // 2A.3 if(not node.role = "presentation") { if(node.alt not empty) { return addCSS_AfterAndReturn(node, node.alt.value); } if(node referenced by label) { return addCSS_AfterAndReturn(node, node.referencingLabel.value); } } } // 2B else if (node.role contained in EMBEDDED_CONTROLS) { if(node.role = "textbox") { return addCSS_AfterAndReturn(node, node.value); } if(node.role = "menu") { return textAlternativeComputation(node.selected, bool recursion = true); } if(node.role = "select" or node.role = "combobox") { return textAlternativeComputation(node.option, bool recursion = true); } if(node.role = "range" or node.role = "spinbutton" or node.role = "slider") { if(node.aria-valuetext not empty) { return addCSS_AfterAndReturn(node,node.aria-valuetext.value); } else if (node.aria-valuenow not empty) { return addCSS_AfterAndReturn(node, node.aria-valuenow.value); } } } // 2C else if (node.role contained in ALLOWS_NAME_FROM_CONTENTS) { // accumulatedText = ""; foreach(childNode = node.child) { result = textAlternativeComputation(childNode, bool recursion = true); accumulatedText += result; } return addCSS_AfterAndReturn(node, accumulatedText); } // 2D else if (node.title not empty) { return node.title.value; } } } function addCSS_AfterAndReturn(node, Text text) { // 3 if(node.CSS.after not empty) { text += node.CSS.after; } return text; }
Draft UML activity diagram of Text Alternative Computation Algorithm in current WAI-ARIA Recommendation
Error creating thumbnail: Unable to save thumbnail to destination