accessibleprimevue
Version:
Note: This is the forked version of the Primefaces/PrimeVue repository. Since V3 has reached its EOL this is use to fix identified accessibility bugs in the v3 version of primevue. PrimeVue is an open source UI library for Vue featuring a rich set of 80+
2 lines (1 loc) • 3.96 kB
JavaScript
this.primevue=this.primevue||{},this.primevue.styleclass=function(e,s){"use strict";function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}return l(primevue.basedirective).default.extend({}).extend("styleclass",{mounted:function(e,s){e.setAttribute("data-pd-styleclass",!0),this.bind(e,s)},unmounted:function(e){this.unbind(e)},methods:{bind:function(s,l){var t=this,a=this.resolveTarget(s,l);this.$el=a,s.$_pstyleclass_clicklistener=function(){l.value.toggleClass?e.DomHandler.hasClass(a,l.value.toggleClass)?e.DomHandler.removeClass(a,l.value.toggleClass):e.DomHandler.addClass(a,l.value.toggleClass):null===a.offsetParent?t.enter(a,s,l):t.leave(a,l)},s.addEventListener("click",s.$_pstyleclass_clicklistener)},unbind:function(e){e.$_pstyleclass_clicklistener&&(e.removeEventListener("click",e.$_pstyleclass_clicklistener),e.$_pstyleclass_clicklistener=null),this.unbindDocumentListener(e)},enter:function(s,l,t){t.value.enterActiveClass?s.$_pstyleclass_animating||(s.$_pstyleclass_animating=!0,"slidedown"===t.value.enterActiveClass&&(s.style.height="0px",e.DomHandler.removeClass(s,"hidden"),s.style.maxHeight=s.scrollHeight+"px",e.DomHandler.addClass(s,"hidden"),s.style.height=""),e.DomHandler.addClass(s,t.value.enterActiveClass),t.value.enterClass&&e.DomHandler.removeClass(s,t.value.enterClass),t.value.enterFromClass&&e.DomHandler.removeClass(s,t.value.enterFromClass),s.$p_styleclass_enterlistener=function(){e.DomHandler.removeClass(s,t.value.enterActiveClass),t.value.enterToClass&&e.DomHandler.addClass(s,t.value.enterToClass),s.removeEventListener("animationend",s.$p_styleclass_enterlistener),"slidedown"===t.value.enterActiveClass&&(s.style.maxHeight=""),s.$_pstyleclass_animating=!1},s.addEventListener("animationend",s.$p_styleclass_enterlistener)):(t.value.enterClass&&e.DomHandler.removeClass(s,t.value.enterClass),t.value.enterFromClass&&e.DomHandler.removeClass(s,t.value.enterFromClass),t.value.enterToClass&&e.DomHandler.addClass(s,t.value.enterToClass)),t.value.hideOnOutsideClick&&this.bindDocumentListener(s,l,t)},leave:function(s,l){l.value.leaveActiveClass?s.$_pstyleclass_animating||(s.$_pstyleclass_animating=!0,e.DomHandler.addClass(s,l.value.leaveActiveClass),l.value.leaveClass&&e.DomHandler.removeClass(s,l.value.leaveClass),l.value.leaveFromClass&&e.DomHandler.removeClass(s,l.value.leaveFromClass),s.$p_styleclass_leavelistener=function(){e.DomHandler.removeClass(s,l.value.leaveActiveClass),l.value.leaveToClass&&e.DomHandler.addClass(s,l.value.leaveToClass),s.removeEventListener("animationend",s.$p_styleclass_leavelistener),s.$_pstyleclass_animating=!1},s.addEventListener("animationend",s.$p_styleclass_leavelistener)):(l.value.leaveClass&&e.DomHandler.removeClass(s,l.value.leaveClass),l.value.leaveFromClass&&e.DomHandler.removeClass(s,l.value.leaveFromClass),l.value.leaveToClass&&e.DomHandler.addClass(s,l.value.leaveToClass)),l.value.hideOnOutsideClick&&this.unbindDocumentListener(s)},resolveTarget:function(e,s){switch(s.value.selector){case"@next":return e.nextElementSibling;case"@prev":return e.previousElementSibling;case"@parent":return e.parentElement;case"@grandparent":return e.parentElement.parentElement;default:return document.querySelector(s.value.selector)}},bindDocumentListener:function(e,s,l){var t=this;e.$p_styleclass_documentlistener||(e.$p_styleclass_documentlistener=function(a){t.isVisible(e)&&"static"!==getComputedStyle(e).getPropertyValue("position")?t.isOutsideClick(a,e,s)&&t.leave(e,l):t.unbindDocumentListener(e)},e.ownerDocument.addEventListener("click",e.$p_styleclass_documentlistener))},unbindDocumentListener:function(e){e.$p_styleclass_documentlistener&&(e.ownerDocument.removeEventListener("click",e.$p_styleclass_documentlistener),e.$p_styleclass_documentlistener=null)},isVisible:function(e){return null!==e.offsetParent},isOutsideClick:function(e,s,l){return!l.isSameNode(e.target)&&!l.contains(e.target)&&!s.contains(e.target)}}})}(primevue.utils);