UNPKG

eleva

Version:

A minimalist and lightweight, pure vanilla JavaScript frontend runtime framework.

4 lines (3 loc) 2.42 kB
/*! Eleva Attr Plugin v1.0.0-rc.1 | MIT License | https://elevajs.com */ var e,t;e=this,t=function(e){"use strict";const t=/-([a-z])/g;e.AttrPlugin={name:"attr",version:"1.0.0-rc.1",description:"Advanced attribute handling for Eleva components",install(e,r={}){const{enableAria:n=!0,enableData:o=!0,enableBoolean:i=!0,enableDynamic:a=!0}=r,s=(e,r)=>{const s=e.attributes,l=r.attributes;for(let r=0;r<l.length;r++){const{name:s,value:d}=l[r];if(!s.startsWith("@")&&e.getAttribute(s)!==d)if(n&&s.startsWith("aria-"))e["aria"+s.slice(5).replace(t,(e,t)=>t.toUpperCase())]=d,e.setAttribute(s,d);else if(o&&s.startsWith("data-"))e.dataset[s.slice(5)]=d,e.setAttribute(s,d);else{let r=s.replace(t,(e,t)=>t.toUpperCase());if(a&&!(r in e)&&!Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),r)){const t=Object.getOwnPropertyNames(Object.getPrototypeOf(e)).find(e=>e.toLowerCase()===s.toLowerCase()||e.toLowerCase().includes(s.toLowerCase())||s.toLowerCase().includes(e.toLowerCase()));t&&(r=t)}const n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),r);if(r in e||n)if(i)if("boolean"==typeof e[r]||(null==n?void 0:n.get)&&"boolean"==typeof n.get.call(e)){const t="false"!==d&&(""===d||d===r||"true"===d);e[r]=t,t?e.setAttribute(s,""):e.removeAttribute(s)}else e[r]=d,e.setAttribute(s,d);else e[r]=d,e.setAttribute(s,d);else e.setAttribute(s,d)}}for(let t=s.length-1;t>=0;t--){const n=s[t].name;r.hasAttribute(n)||e.removeAttribute(n)}};e.renderer&&(e.renderer.updateAttributes=s,e.renderer._originalPatchNode=e.renderer._patchNode,e.renderer._patchNode=function(e,t){null!=e&&e._eleva_instance||(this._isSameNode(e,t)?e.nodeType===Node.ELEMENT_NODE?(s(e,t),this._diff(e,t)):e.nodeType===Node.TEXT_NODE&&e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue):e.replaceWith(t.cloneNode(!0)))}),e.plugins||(e.plugins=new Map),e.plugins.set(this.name,{name:this.name,version:this.version,description:this.description,options:r}),e.updateElementAttributes=s},uninstall(e){e.renderer&&e.renderer._originalPatchNode&&(e.renderer._patchNode=e.renderer._originalPatchNode,delete e.renderer._originalPatchNode),e.plugins&&e.plugins.delete(this.name),delete e.updateElementAttributes}}},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ElevaAttrPlugin={}); //# sourceMappingURL=attr.umd.min.js.map