UNPKG

vue-frag

Version:

Vue 2 fragment directive to return multiple root elements

2 lines (1 loc) 3.25 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Frag=t()}(this,(function(){"use strict";var e,t=Symbol(),n=Symbol(),r=Symbol(),i=Symbol(),o=function(e){return"frag"in e},f={get:function(){return this[n]||this.parentElement},configurable:!0},a=function(e,t){n in e||(e[n]=t,Object.defineProperty(e,"parentNode",f))},s={get:function(){var e=this.parentNode.childNodes,t=e.indexOf(this);return t>-1&&e[t+1]||null}},c=function(e){r in e||(e[r]=!0,Object.defineProperty(e,"nextSibling",s))},u=function(t){if(!e){var n=Object.getOwnPropertyDescriptor(Node.prototype,"childNodes");e=n.get}var r=e.apply(t),i=Array.from(r).map((function(e){return function(e,t){for(;e.parentNode!==t;){var n=e.parentNode;n&&(e=n)}return e}(e,t)}));return i.filter((function(e,t){return e!==i[t-1]}))},h={get:function(){return this.frag||u(this)}},l={get:function(){return this.childNodes[0]||null}};function d(){return this.childNodes.length>0}var p=function(e){i in e||(e[i]=!0,Object.defineProperties(e,{childNodes:h,firstChild:l}),e.hasChildNodes=d)};function g(){var e;(e=this.frag[0]).before.apply(e,arguments)}function v(){var e=this.frag;e.splice(0,e.length).forEach((function(e){e.remove()}))}var m=function e(t){var n;return(n=Array.prototype).concat.apply(n,t.map((function(t){return o(t)?e(t.frag):t})))};function y(e){if(o(this)){var n=this.frag.indexOf(e);if(n>-1){var r=this.frag.splice(n,1)[0];0===this.frag.length&&function(e,n){var r=e[t];n.before(r),a(r,e),e.frag.unshift(r)}(this,r),e.remove()}}else{u(this).indexOf(e)>-1&&e.remove()}return e}function b(e,t){var r=this,i=e.frag||[e];if(o(this)){if(e[n]===this&&e.parentElement)return e;var f=this.frag;if(t){var s=f.indexOf(t);s>-1&&(f.splice.apply(f,[s,0].concat(i)),t.before.apply(t,i))}else{var u=f[f.length-1];f.push.apply(f,i),u.after.apply(u,i)}O(this)}else t?this.childNodes.includes(t)&&t.before.apply(t,i):this.append.apply(this,i);i.forEach((function(e){a(e,r)}));var h=i[i.length-1];return c(h),e}function N(e){if(e[n]===this&&e.parentElement)return e;var t=this.frag;return t[t.length-1].after(e),a(e,this),O(this),t.push(e),e}var O=function(e){var n=e[t];e.frag[0]===n&&(e.frag.shift(),n.remove())},E={set:function(e){var n=this;if(this.frag[0]!==this[t]&&this.frag.slice().forEach((function(e){return n.removeChild(e)})),e){var r=document.createElement("div");r.innerHTML=e,Array.from(r.childNodes).forEach((function(e){n.appendChild(e)}))}},get:function(){return""}},j={inserted:function(e){var n=e.parentNode,r=e.nextSibling,i=e.previousSibling,o=Array.from(e.childNodes),f=document.createComment("");0===o.length&&o.push(f),e.frag=o,e[t]=f;var s=document.createDocumentFragment();s.append.apply(s,m(o)),e.replaceWith(s),o.forEach((function(t){a(t,e),c(t)})),p(e),Object.assign(e,{remove:v,appendChild:N,insertBefore:b,removeChild:y,before:g}),Object.defineProperty(e,"innerHTML",E),n&&(Object.assign(n,{removeChild:y,insertBefore:b}),a(e,n),p(n)),r&&c(e),i&&c(i)},unbind:function(e){e.remove()}},x={name:"Fragment",directives:{frag:j},render:function(e){return e("div",{directives:[{name:"frag"}]},this.$slots.default)}};return j.Fragment=x,j}));