UNPKG

apex4x

Version:

The Comprehensive ARIA Development Suite

10 lines 15 kB
/*@license CalcNames: The AccName Computation Prototype, compute the Name and Description property values for a DOM node Returns an object with 'name' and 'desc' properties. Functionality mirrors the steps within the W3C Accessible Name and Description computation algorithm. https://w3c.github.io/accname/ Author: Bryan Garaventa https://github.com/whatsock/w3c-alternative-text-computation Distributed under the terms of the Open Source Initiative OSI - MIT License */ !function(){var r=window.AccNamePrototypeNameSpace||window,me=(r&&"string"==typeof r&&r.length&&(window[r]={},r=window[r]),r.getAccNameVersion="2.62",r.getAccName=r.calcNames=function(e,t,W,r){var G=(r=r||{}).document||document,n={name:"",desc:"",error:""},p=!1,Q=!1;try{if(!e||1!==e.nodeType)return n;var U=e,o=me(e.getAttribute("role")||""),z={name:[],desc:[]},F=[],J=function(I,P,R,E,B,H,$){($=$||{}).tag=$.tag||!1,$.role=$.role||!1,$.go=$.go||!1;function f(e,t,r){var n={name:"",title:""};if(e){var o,i,a,l,d,u=!(!e||1!==e.nodeType||!x(e)),s=e,c=t(e)||{};if(c.name&&c.name.length&&(n.name+=c.name),!c.skip&&(o=e,!(i=H.top)||!o||1!==i.nodeType||1!==o.nodeType||(a=X(o),l=o.nodeName.toLowerCase(),(d=function(e,t){return a&&0<=t.roles.indexOf(a)||!a&&0<=t.tags.indexOf(l)})(0,h)?o!==i||o.id&&H[o.id]&&H[o.id].node?g(o,H.top)&&"select"!==o.nodeName.toLowerCase()||d(0,m):Y(o):!d(0,b)&&(o!==U||d(0,m))||!(a||-1===["section"].indexOf(l)||o.getAttribute("aria-labelledby")||o.getAttribute("aria-label"))||$.go)))for($.go&&($.go=!1),e=e.firstChild;e;)n.name+=f(e,t,r).name,e=e.nextSibling;n.name+=c.owns||"",U===s&&r===s&&!me(n.name)&&me(c.title)?n.name=ie(c.title):U===s&&r===s&&me(c.title)&&(n.title=ie(c.title)),U===s&&r===s&&me(c.desc)&&(n.title=ie(c.desc)),U===s&&r===s&&me(c.placeholder)&&!me(n.name)?(n.name=ie(c.placeholder),p=!0):U===s&&r===s&&me(c.placeholder)&&!me(n.title)&&(n.title=ie(c.placeholder)),(u||c.isWidget)&&(n.name=ie(n.name))}return n}var e={name:"",title:""},M=!1,g=function(e,t){for(var r=[];e;){if((e=e.id&&H[e.id]&&H[e.id].node&&-1===r.indexOf(e)?(r.push(e),H[e.id].node):e.parentNode)&&e===t)return!0;if(!e||e===H.top||e===G.body)return!1}return!1},t={before:"",after:""},e=($.tag||$.role||-1!==z[H.computingDesc?"desc":"name"].indexOf(I)||(t=ae(I,null),W&&(-1===t.before.indexOf(" [ARIA] ")&&-1===t.before.indexOf(" aria-")&&-1===t.before.indexOf(" accName: ")||(t.before=""),-1===t.after.indexOf(" [ARIA] ")&&-1===t.after.indexOf(" aria-")&&-1===t.after.indexOf(" accDescription: ")||(t.after=""))),f(I,function(e){var t=0,r=null,n=[],o=[],i={name:"",title:"",owns:"",skip:!1},a=!!(e&&1===e.nodeType&&E&&E.length&&-1!==E.indexOf(e)&&e===U&&e!==I),l=!1;if((!R&&e&&!re(e,H.top)||B||a)&&!$.tag&&!$.role&&-1===z[H.computingDesc?"desc":"name"].indexOf(e)){z[H.computingDesc?"desc":"name"].push(e);var d="",u="",s={before:"",after:""},c=I===e?e:e.parentNode;if($.tag||$.role||-1!==z[H.computingDesc?"desc":"name"].indexOf(c)||(z[H.computingDesc?"desc":"name"].push(c),s=ae(c,I),W&&(-1===s.before.indexOf(" [ARIA] ")&&-1===s.before.indexOf(" aria-")&&-1===s.before.indexOf(" accName: ")||(s.before=""),-1===s.after.indexOf(" [ARIA] ")&&-1===s.after.indexOf(" aria-")&&-1===s.after.indexOf(" accDescription: ")||(s.after=""))),1===e.nodeType){var c=e.nodeName.toLowerCase(),f=X(e),g=!$.tag&&!$.role&&e.getAttribute("aria-labelledby")||"",p=!$.tag&&!$.role&&e.getAttribute("aria-describedby")||"",m=!$.tag&&!$.role&&e.getAttribute("aria-description"),b=!$.tag&&!$.role&&e.getAttribute("aria-label")||"",h=!$.tag&&!$.role&&e.getAttribute("title")||"";if(e===U&&!f&&-1!==Z.indexOf(c))return i;if(e===U&&(-1!==_.indexOf(f)||!f&&-1!==ee.indexOf(c)))return i;var x=-1!==le.indexOf(c),y=-1!==["input"].indexOf(c),A=-1!==de.indexOf(f),v=-1!==ue.indexOf(f),O=-1!==se.indexOf(f),w=A||v||O||"combobox"===f,N=(w||-1!==ce.indexOf(f))&&"link"!==f,C=(i.isWidget=x||N,!1),k=!1,S=e.getAttribute("aria-owns")||"",a=!($.tag||$.role||a||!(e!==I&&(x||w)||e.id&&H[e.id]&&H[e.id].target&&H[e.id].target===e));if(!P&&!$.tag&&!$.role&&g){for(n=g.split(/\s+/),o=[],t=0;t<n.length;t++)r=G.getElementById(n[t]),o.push(J(r,!0,R,[e],r===I,{ref:H,top:r}).name);d=me(o.join(" ")),me(d)&&(M=l=C=!0,i.skip=!0)}if(!P&&e===I&&!$.tag&&!$.role&&(p||m)){if(p){for(n=p.split(/\s+/),o=[],t=0;t<n.length;t++)r=G.getElementById(n[t]),o.push(J(r,!0,!1,[e],!1,{ref:H,top:r,computingDesc:!0}).name);D=me(o.join(" "))}else D=me(m);me(D)&&(i.desc=D,k=!0)}$.tag||$.role||C||!me(b)||a||me(d=b)&&(l=C=!0,e===I)&&(M=R=!0);w=!$.tag&&!$.role&&!C&&"iframe"!==c&&f&&-1!==te.indexOf(f)&&!Y(e)&&!fe(e);if(!a){if(!$.tag&&!$.role&&!C&&e===I&&x){var L=G.querySelectorAll("label"),T="",V=ge(e,"label")||!1;for(t=0;t<L.length;t++)(L[t]!==V||"string"==typeof V.getAttribute("for"))&&L[t].getAttribute("for")!==e.id||ne(L[t],G.body)||(T+=ie(J(L[t],!0,R,[e],!1,{ref:H,top:L[t]}).name));me(d=T)&&(C=!0)}var g=!$.tag&&!$.role&&y&&(e.getAttribute("type")||"").toLowerCase()||!1,p=!$.tag&&!$.role&&g&&me(e.getAttribute("value"))||!1,D=w&&"img"===c?"":me(e.alt||e.getAttribute("alt"));if($.tag||$.role||C||w||"img"!==f&&"img"!==c&&"image"!==g||!D&&!me(h)||(d=me(D)||me(h),me(d)&&(C=!0)),$.tag||$.role||C||w||"area"!==c||!D||(d=me(D),me(d)&&(C=!0)),"optgroup"===c&&($.tag||$.role||C||w||!e.getAttribute("label")||(d=me(e.getAttribute("label")),me(d)&&(C=!0)),i.skip=!0),!$.tag&&!$.role&&!C&&e===I&&g&&-1!==["button","submit","reset"].indexOf(g)){if(p)d=p;else switch(g){case"submit":d="submit";break;case"reset":d="reset";break;default:d=""}me(d)&&(C=!0)}!$.tag&&!$.role&&C&&e===I&&g&&-1!==["button","submit","reset"].indexOf(g)&&p&&p!==d&&!i.desc&&(i.desc=p,k=!0),$.tag||$.role||C||e!==I||!g||"image"!==g||(d="Submit Query",Q=C=!0),!($.tag||$.role||C||e!==U||"group"!==f&&"radiogroup"!==f&&(f||"fieldset"!==c))&&((q=K(e,["legend"],["legend"])||!1)&&(d=me(J(q,P,!1,[],!1,{ref:H,top:q}).name)),me(d)&&(C=!0),R=!0),!($.tag||$.role||C||e!==U||"table"!==f&&(f||"table"!==c))&&((q=K(e,["caption"],["caption"])||!1)&&(d=me(J(q,P,!1,[],!1,{ref:H,top:q}).name)),me(d)&&(C=!0),R=!0),$.tag||$.role||"svg"!==c||(b=e.querySelector("title")||!1,y=e===U&&e.querySelector("desc")||!1,!C&&b&&(d=me(J(b,!0,!1,[],!1,{ref:H,top:b}).name)),!k&&y&&(D=me(J(y,!0,!1,[],!1,{ref:H,top:y}).name),me(D))&&(i.desc=D),i.skip=!0)}$.tag||$.role||!a||E&&E.length&&-1!==E.indexOf(e)||(A?d=oe(f,e,!0):v||"combobox"===f&&x?d=oe(f,e,!1,!0):O?d=oe(f,e,!1,!1,!0):!x||-1===["input","textarea"].indexOf(c)||N&&!v?!x||"select"!==c||N&&"combobox"!==f||(d=oe(f,e,!1,!1,!0,!0)):d=oe(f,e,!1,!1,!1,!0),d=me(d)),$.tag||$.role||w||!me(h)||d&&" "===m||(i.title=me(h));var j,p=(p=x&&me(e.getAttribute("type")||"").toLowerCase())||"text",g=!$.tag&&!$.role&&e===U&&e===I&&(v||x&&("textarea"===c||"input"===c&&-1!==["password","search","tel","text","url","email"].indexOf(p)))&&me(e.getAttribute("placeholder")||e.getAttribute("aria-placeholder")),q=(g&&(i.placeholder=g),$.role&&$.role===f||!f&&$.tag&&$.tag===c);if(q&&(d=me(J(e,P,!1,[],!1,{ref:H,top:e}).name),me(d))&&(R=!0),!q&&S&&-1===["input","img","progress"].indexOf(c)){for(n=S.split(/\s+/),o=[],t=0;t<n.length;t++)(r=G.getElementById(n[t]))&&-1===F.indexOf(n[t])&&(F.push(n[t]),(j={ref:H,top:H.top})[n[t]]={refNode:I,node:e,target:r},ne(r,G.body)||o.push(J(r,!0,R,[],!1,j).name));u=o.join("")}}else $.tag||$.role||3!==e.nodeType||(d=e.data);(d=l?d:s.before+d.replace(/\s+/g," ")+s.after).length&&!pe(e,H.top,H)&&(i.name=d),i.owns=u}return i},I));return M||(e.name=t.before+e.name.replace(/\s+/g," ")+t.after),e},K=function(e,t,r,n){for(e=e?e.firstChild:null;e;){var o=X(e)||!1;if(1===e.nodeType&&(!t&&!r||o&&r&&-1!==r.indexOf(o)||!o&&t&&-1!==t.indexOf(e.nodeName.toLowerCase())))return e;if(!n&&1===e.nodeType&&(t||r))return null;e=e.nextSibling}return e},X=function(e){var t=e&&e.getAttribute?(e.getAttribute("role")||"").toLowerCase():"";if(me(t))for(var r=function(e){return 0<me(t).length&&0<=e.roles.indexOf(t)},n=t.split(/\s+/),o=0;o<n.length;o++)if(t=n[o],r(m)||r(b)||r(h)||r(i)||-1!==te.indexOf(t))return t;return""},Y=function(e){var t=e.nodeName.toLowerCase();return!!e.getAttribute("tabindex")||!("a"!==t||!e.getAttribute("href"))||-1!==["button","input","select","textarea"].indexOf(t)&&"hidden"!==(e.getAttribute("type")||"").toLowerCase()},m={roles:["button","checkbox","link","option","radio","switch","tab","treeitem","menuitem","menuitemcheckbox","menuitemradio","row","cell","gridcell","columnheader","rowheader","tooltip","heading"],tags:["a","button","summary","input","h1","h2","h3","h4","h5","h6","menuitem","option","tr","td","th"]},b={roles:["application","alert","log","marquee","timer","alertdialog","dialog","banner","complementary","form","main","navigation","progressbar","region","search","article","document","feed","figure","img","math","toolbar","menu","menubar","grid","listbox","radiogroup","textbox","searchbox","spinbutton","scrollbar","slider","tablist","tabpanel","tree","treegrid","separator","rowgroup","group"],tags:["article","aside","body","select","datalist","optgroup","dialog","figure","footer","form","header","hr","iframe","img","textarea","input","main","math","menu","nav","section","thead","tbody","tfoot","fieldset","progress"]},h={roles:["term","definition","directory","list","note","status","table","contentinfo"],tags:["dl","ul","ol","dd","details","output","table"]},i={roles:["legend","caption","code","deletion","emphasis","generic","insertion","paragraph","strong","subscript","superscript"],tags:["legend","caption","figcaption","code","del","em","div","span","ins","p","strong","sub","sup"]},Z=["div","span"],_=["caption","code","deletion","emphasis","generic","insertion","none","paragraph","presentation","strong","subscript","superscript"],ee=["caption","figcaption","code","del","em","div","span","ins","p","strong","sub","sup"],le=["button","input","progress","select","textarea"],de=["scrollbar","slider","spinbutton","progressbar"],ue=["searchbox","textbox"],se=["grid","listbox","tablist","tree","treegrid"],ce=["button","checkbox","link","switch","option","menu","menubar","menuitem","menuitemcheckbox","menuitemradio","radio","tab","treeitem","gridcell"],te=["presentation","none"],fe=function(e){for(var t=["labelledby","label","describedby","busy","controls","current","details","disabled","dropeffect","errormessage","flowto","grabbed","haspopup","invalid","keyshortcuts","live","owns","roledescription"],r=0;r<t.length;r++)if(me(e.getAttribute("aria-"+t[r])))return!0;return!1},re=r.isHidden||function(e,t){return!(!(e=e)||1!==e.nodeType||e===t||"true"!==e.getAttribute("aria-hidden")&&!e.getAttribute("hidden")&&"none"!==(e=a(e)).display&&"hidden"!==e.visibility)},ne=function(e,t,r,n){for(;e&&e!==t;){if(!n&&1===e.nodeType&&re(e,t))return!0;n=!1,e=e.parentNode}return!1},a=r.getStyleObject||function(e){var t={};return G.defaultView&&G.defaultView.getComputedStyle?t=G.defaultView.getComputedStyle(e,""):e.currentStyle&&(t=e.currentStyle),t},l=function(e,t){if(-1!==(i=t).indexOf("attr("))for(var r=i.match(/attr\((.|\n|\r\n)*?\)/g),n=0;n<r.length;n++)var o=r[n].slice(5,-1),o=e.getAttribute(o)||"",i=i.replace(r[n],o);return i=i.replace(/url\((.*?)\)\s+\/|url\((.*?)\)/g,"").replace(/\"/g,"")},x=function(e,t){var r,n=t||a(e);for(r in d)for(var o=d[r],i=0;i<o.length;i++)if(n[r]&&(0===o[i].indexOf("!")&&-1===[o[i].slice(1),"inherit","initial","unset"].indexOf(n[r])||0===n[r].indexOf(o[i])))return!0;return!t&&e.nodeName&&-1!==f.indexOf(e.nodeName.toLowerCase())&&!(n.display&&0===n.display.indexOf("inline")&&"br"!==e.nodeName.toLowerCase())},d={display:["block","grid","table","flow-root","flex"],position:["absolute","fixed"],float:["left","right","inline"],clear:["left","right","both","inline"],overflow:["hidden","scroll","auto"],"column-count":["!auto"],"column-width":["!auto"],"column-span":["all"],contain:["layout","content","strict"]},f=["address","article","aside","blockquote","br","canvas","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","legend","li","main","nav","noscript","ol","output","p","pre","section","table","td","tfoot","th","tr","ul","video"],oe=function(e,t,r,n,o,i){var a,l="",d=!1;return r&&!i?l=t.getAttribute("aria-valuetext")||t.getAttribute("aria-valuenow")||"":n&&!i?l=s(t)||"":o&&!i&&(a=[],"grid"===e||"treegrid"===e?a=["gridcell","rowheader","columnheader"]:"listbox"===e?a=["option"]:"tablist"===e?a=["tab"]:"tree"===e&&(a=["treeitem"]),l=u(t,t.querySelectorAll('*[aria-selected="true"]'),!1,a),d=!0),!(l=me(l))&&(r||n)&&t.value&&(l=t.value),l=d||l||!i?l:o?u(t,t.querySelectorAll("option[selected]"),!0):t.value},ie=function(e){return me(e).length?" "+e+" ":" "},u=function(e,t,r,n){if(!t||!t.length)return"";for(var o=[],i=0;i<t.length;i++){var a=X(t[i]);(!n||-1!==n.indexOf(a))&&o.push(r?s(t[i]):J(t[i],!0,!1,[],!1,{top:t[i]}).name)}return o.join(" ")},g=r.getPseudoElStyleObj||function(e,t){var r,n={};for(r in d)n[r]=G.defaultView.getComputedStyle(e,t).getPropertyValue(r);return n.content=G.defaultView.getComputedStyle(e,t).getPropertyValue("content").replace(/^"|\\|"$/g,""),n},s=function(e,t){var r,n;return t||1!==e.nodeType?(n=(r=g(e,t)).content)&&"none"!==n?(x({},r)&&(":before"===t?n+=" ":":after"===t&&(n=" "+n)),n):"":e.innerText||e.textContent||""},ae=r.getCSSText||function(e,t){return e&&1!==e.nodeType||e===t||-1!==["input","select","textarea","img","iframe","optgroup"].indexOf(e.nodeName.toLowerCase())?{before:"",after:""}:{before:l(e,s(e,":before")),after:l(e,s(e,":after"))}},ge=function(e,t,r,n){for(n=!!n;e;)if((e=e.parentNode)&&(r&&X(e)===r||t&&e.nodeName&&e.nodeName.toLowerCase()===t&&(!n||X(e).length<1)))return e;return{}},pe=function(e,t,r,n){for(var o=[];e&&e!==t;)if((e=e.id&&r&&r[e.id]&&r[e.id].node&&-1===o.indexOf(e)?(o.push(e),r[e.id].node):e.parentNode)&&e.getAttribute&&(me(e.getAttribute("aria-label"))||!n&&re(e,t)))return!0;return!1};if(ne(e,G.body,0,!(!e||!e.nodeName||"area"!==e.nodeName.toLowerCase())))return n;var c=J(e,!1,!1,[],!1,{top:e}),y=me(c.name.replace(/\s+/g," ")),A=me(c.title.replace(/\s+/g," "));n.hasUpperCase=!(!o||o===o.toLowerCase()),n.name=y,n.desc=A,z={name:[],desc:[]},F=[]}catch(e){n.error=e}return n.placeholder=p,n.userAgent=Q,t&&"function"==typeof t?t.apply(e,[n,e]):n},function(e){return"string"!=typeof e?"":e.replace(/^\s+|\s+$/g,"")});r.getAccNameMsg=r.getNames=function(e,t){e=r.getAccName(e,null,!1,t);return e.error?e.error+"\n\nAn error has been thrown in AccName Prototype version "+r.getAccNameVersion+". Please copy this error message and the HTML markup that caused it, and submit both as a new GitHub issue at\nhttps://github.com/whatsock/w3c-alternative-text-computation":(t='accName: "'+e.name+'"\n\naccDesc: "'+e.desc+'"\n\n',e.placeholder&&(t+="Name from placeholder: true\n\n"),e.userAgent&&(t+="Name from user agent: true\n\n"),t+("(Running AccName Computation Prototype version: "+r.getAccNameVersion)+")")},"object"==typeof module&&module.exports&&(module.exports={getNames:r.getNames,calcNames:r.calcNames})}(),$A.extend({getAccName:window.getAccName});