azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.84 kB
JavaScript
var MaxAnnounceChildren=1,MaxAnnounceContainers=10,DefaultAnnounceDelay=1e3,ParentContainerId="utils-accessibility-announce",nextId=0;function getAnnounceContainer(){var n=document.getElementById(ParentContainerId);return n||((n=document.createElement("div")).id=ParentContainerId,n.classList.add("visually-hidden"),document.body.appendChild(n)),n}function announce(n,e,t){var o,i,a,r;void 0===e&&(e=!1),void 0===t&&(t=100),n&&(r=e?"assertive":"polite",!(a=0<(i=(o=getAnnounceContainer()).getElementsByClassName(r)).length?i[i.length-1]:null)||a.childElementCount>=MaxAnnounceChildren?((a=document.createElement("div")).id=ParentContainerId+nextId++,a.setAttribute("aria-live",r),a.classList.add(r),a.setAttribute("aria-relevant","additions"),o.appendChild(a),i.length>MaxAnnounceContainers&&o.removeChild(i[0]),window.setTimeout(function(){announce(n,e)},t)):((r=document.createElement("p")).textContent=n,a.appendChild(r),a.style.visibility="hidden",a.style.visibility="visible"))}var ProgressAnnouncer=function(){function o(n){this._startAnnounced=!1,this._completed=!1,this._options=n,this._start()}return o.forPromise=function(n,e){var t=new o(e);return n.then(function(){t.announceCompleted()},function(){t.announceError()}),t},o.prototype.announceCompleted=function(){this._completed||(this._completed=!0,this._startAnnounced&&announce(this._options.announceEndMessage))},o.prototype.announceError=function(){this._completed||(this._completed=!0,announce(this._options.announceErrorMessage))},o.prototype.cancel=function(){this._completed=!0},o.prototype._start=function(){var n=this;window.setTimeout(function(){n._completed||announce(n._options.announceStartMessage),n._startAnnounced=!0},void 0!==this._options.announceStartDelay?this._options.announceStartDelay:DefaultAnnounceDelay)},o}();export{announce,ProgressAnnouncer};