{ "version": 3, "sources": ["node_modules/imba/src/imba/dom/fragment.imba"], "sourcesContent": ["import {Text,createComment,createTextNode,Comment} from './core'\n\nexport class Fragment\n\t\n\tdef constructor\n\t\tchildNodes = []\n\t\t\n\tdef log ...params\n\t\treturn\n\t\tconsole.log this.constructor.name,...params\n\t\t\n\tdef hasChildNodes\n\t\tfalse\n\nlet counter = 0\n# like a list\nclass VirtualFragment < Fragment\n\tdef constructor flags, parent\n\t\tsuper\n\t\t##up = parent\n\t\tparentNode = null\n\t\t#domFlags = flags\n\t\tchildNodes = []\n\t\t#end = createComment('slot' + counter++)\n\t\t# #end.node = self\n\t\t\n\t\tif parent\n\t\t\tparent.#appendChild(self)\n\n\tget #parent\n\t\t##parent or parentNode or ##up\n\t\n\tset textContent text\n\t\t#textContent = text\n\t\n\tget textContent\n\t\t#textContent\n\t\t\n\tdef hasChildNodes\n\t\tfor item in childNodes\n\t\t\tif item isa Fragment\n\t\t\t\treturn true if item.hasChildNodes!\n\t\t\tif item isa Comment\n\t\t\t\tyes\n\t\t\telif item isa Node\n\t\t\t\treturn true\n\n\t\t\t# unless item isa Comment\n\t\t\t#\treturn false\n\t\treturn false\n\t\t# #children.length == 0\n\t\t\n\tdef text$ item\n\t\tunless #textNode\n\t\t\t#textNode = #placeChild(item)\n\t\telse\n\t\t\t#textNode.textContent = item\n\t\treturn #textNode\n\t\t\n\tdef appendChild child\n\t\tif parentNode\n\t\t\tchild.#insertInto(parentNode,#end)\n\t\tchildNodes.push(child)\n\t\n\tdef #appendChild child\n\t\tif parentNode\n\t\t\tchild.#insertInto(parentNode,#end)\n\t\tchildNodes.push(child)\n\t\n\tdef insertBefore node,refnode\n\t\t# check if this should really happen?\n\t\tif parentNode\n\t\t\tparentNode.#insertChild(node,refnode)\n\t\tlet idx = childNodes.indexOf(refnode)\n\t\tif idx >= 0\n\t\t\tchildNodes.splice(idx,0,node)\n\t\treturn node\n\t\n\t\n\tdef #removeChild node\n\t\tif parentNode\n\t\t\tparentNode.#removeChild(node)\n\t\tlet idx = childNodes.indexOf(node)\n\t\tif idx >= 0\n\t\t\tchildNodes.splice(idx,1)\n\t\treturn\n\t\t\t\n\tdef #insertInto parent, before\n\t\t# console.log 'frag #insertInto',parent,before,#children\n\t\tlet prev = parentNode\n\n\t\tif parentNode =? parent\n\t\t\t# log '#insertInto',parent,prev,before,#end\n\t\t\t# what if before is a fragment etc?\n\t\t\tif #end\n\t\t\t\tbefore = #end.#insertInto(parent,before)\n\t\t\t# before = #end\n\t\t\tfor item in childNodes\n\t\t\t\titem.#insertInto(parent,before)\n\t\treturn self\n\t\t\n\tdef #replaceWith node, parent\n\t\t# log '#replaceWith',node,parent\n\t\t# what if this\n\t\t# log 'replaced with',node,parent\n\t\tlet res = node.#insertInto(parent,#end)\n\t\t#removeFrom(parent)\n\t\tres\n\t\n\tdef #insertChild node,refnode\n\t\tif parentNode\n\t\t\tinsertBefore(node,refnode or #end)\n\t\t\n\t\tif refnode\n\t\t\tlet idx = childNodes.indexOf(refnode)\n\t\t\t# console.log 'vfragment #insertChild',node,refnode,refnode == #end,idx,#children\n\t\t\tif idx >= 0\n\t\t\t\tchildNodes.splice(idx,0,node)\n\t\telse\n\t\t\tchildNodes.push(node)\n\t\treturn node\n\t\t\n\t\t\n\t\t# for item in #children\n\t\t# \titem.#removeFrom(parent)\n\t\n\tdef #removeFrom parent\n\t\tfor item in childNodes\n\t\t\t# log '#removeFrom',item,parent\n\t\t\titem.#removeFrom(parent)\n\t\t#end.#removeFrom(parent) if #end\n\t\tparentNode = null\n\t\tself\n\n\tdef #placeChild item, f, prev\n\t\tlet par = parentNode\n\t\tlet type = typeof item\n\t\t\n\t\tif type === 'undefined' or item === null\n\t\t\tif prev and prev isa Comment # check perf\n\t\t\t\treturn prev\n\t\t\t\n\t\t\tlet el = createComment('')\n\t\t\t\n\t\t\tif prev\n\t\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\t\tchildNodes.splice(idx,1,el)\n\t\t\t\tif par\n\t\t\t\t\tprev.#replaceWith(el,par)\n\t\t\t\t# parentNode.#insert(item,f,prev or #end)\n\t\t\t\treturn el\n\t\t\t\n\t\t\t\n\t\t\tchildNodes.push(el)\n\t\t\tel.#insertInto(par,#end) if par\n\t\t\treturn el\n\t\t\t# return prev ? prev.#replaceWith(el,self) : el.#insertInto(this,null)\n\n\t\tif item === prev\n\t\t\treturn item\n\t\t\t\n\t\tif type !== 'object'\n\t\t\tlet res\n\t\t\tlet txt = item\n\n\t\t\tif prev\n\t\t\t\tif prev isa Text # check perf\n\t\t\t\t\tprev.textContent = txt\n\t\t\t\t\treturn prev\n\t\t\t\telse\n\t\t\t\t\tres = createTextNode(txt)\n\t\t\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\t\t\tchildNodes.splice(idx,1,res)\n\t\t\t\t\tprev.#replaceWith(res,par) if par\n\t\t\t\t\treturn res\n\t\t\telse\n\t\t\t\tchildNodes.push(res = createTextNode(txt))\n\t\t\t\t# self.appendChild$(res = createTextNode(txt))\n\t\t\t\tres.#insertInto(par,#end) if par\n\t\t\t\treturn res\n\n\t\telif prev\n\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\tchildNodes.splice(idx,1,item)\n\t\t\tprev.#replaceWith(item,par) if par\n\t\t\treturn item\n\t\telse\n\t\t\tchildNodes.push(item)\n\t\t\titem.#insertInto(par,#end) if par\n\t\t\treturn item\n\n\nexport def createLiveFragment bitflags, par\n\tconst el = new VirtualFragment(bitflags, par)\n\treturn el\n\t\nexport def createSlot bitflags, par\n\tconst el = new VirtualFragment(bitflags, null)\n\tel.##up = par\n\t# el.setup$(bitflags, options)\n\t# el.##up = par if par\n\treturn el"], "mappings": ";oEAgMO,WAAuB,EAAU,EAAG,CAE1C,MADe,IAAA,GAAgB,EAAU", "names": [] }