{ "version": 3, "sources": ["node_modules/imba/src/imba/dom/keyed-list.imba"], "sourcesContent": ["import {createComment} from './core'\nimport {Fragment} from './fragment'\n\nclass KeyedTagFragment < Fragment\n\t\n\tdef constructor f, parent\n\t\tsuper\n\t\t#domFlags = f\n\t\t#parent = parent\n\t\tchanges = new Map\n\t\tdirty = no\n\t\tarray = childNodes\n\t\tself.$ = {}\n\n\t\t# if !(f & $TAG_FIRST_CHILD$)\n\t\t# \t#start = createComment('start')\n\t\t# \t# parent.#appendChild(#start) if parent\n\n\t\tif !(f & $TAG_LAST_CHILD$)\n\t\t\t#end = createComment('map')\n\t\t\t# #end.node = self\n\t\t\t# parent.#appendChild(#end) if parent\n\t\t\t\n\t\tif parent\n\t\t\tparent.#appendChild(self)\n\n\n\tdef #appendChild item\n\t\tif parentNode\n\t\t\tparentNode.#insertChild(item,#end)\n\t\n\tdef hasChildNodes\n\t\treturn false if childNodes.length == 0\n\t\treturn true\n\t\t\n\tdef push item, idx\n\t\t# on first iteration we can merely run through\n\t\tunless #domFlags & $TAG_INITED$\n\t\t\t\n\t\t\tself.array.push(item)\n\t\t\tself.#appendChild(item)\n\t\t\treturn\n\n\t\tlet toReplace = self.array[idx]\n\n\t\tif toReplace === item\n\t\t\tyes\n\t\telse\n\t\t\tself.dirty = yes\n\t\t\t# if this is a new item\n\t\t\tlet prevIndex = self.array.indexOf(item)\n\t\t\tlet changed = self.changes.get(item)\n\n\t\t\tif prevIndex === -1\n\t\t\t\t# should we mark the one currently in slot as removed?\n\t\t\t\tself.array.splice(idx,0,item)\n\t\t\t\tself.insertChild(item,idx,prevIndex)\n\n\t\t\telif prevIndex === idx + 1\n\t\t\t\tif toReplace\n\t\t\t\t\tself.changes.set(toReplace,-1)\n\t\t\t\tself.array.splice(idx,1)\n\n\t\t\telse\n\t\t\t\tself.array.splice(prevIndex,1) if prevIndex >= 0\n\t\t\t\tself.array.splice(idx,0,item)\n\t\t\t\tself.moveChild(item,idx,prevIndex)\n\n\t\t\tif changed == -1\n\t\t\t\tself.changes.delete(item)\n\t\treturn\n\n\tdef insertChild item, index, prevIndex\n\t\tlet par = parentNode\n\t\treturn unless par\n\t\t\n\t\t# console.log 'insertChild',item,index\n\t\t# log 'insertBefore',index,item,parentNode\n\t\tif index > 0\n\t\t\tlet other = self.array[index - 1]\n\t\t\t# will fail with text nodes\n\t\t\tpar.#insertChild(item,other.nextSibling)\n\t\telse\n\t\t\tpar.#insertChild(item,childNodes[index + 1] or #end)\n\t\treturn\n\t\t\n\tdef moveChild item, index, prevIndex\n\t\tinsertChild(item,index, prevIndex)\n\n\tdef removeChild item, index\n\t\t# self.map.delete(item)\n\t\t# what if this is a fragment or virtual node?\n\t\tif item.parentNode\n\t\t\t# log 'removeChild',item,item.parentNode\n\t\t\titem.#removeFrom(item.parentNode)\n\n\t\t\t# #parent.removeChild(item)\n\t\treturn\n\t\t\n\tdef #insertChild node,relnode\n\t\treturn\n\t\t\n\t# def #appendChild\n\t#\treturn\n\n\tdef #replaceWith rel, parent\n\t\t# console.log 'can replace now?',rel,parent,#end,#end..parentNode\n\t\tlet res = rel.#insertInto(parent,#end)\n\t\t#removeFrom(parent)\n\t\treturn res\n\t\t\n\tdef #insertInto parent, before\n\t\t# log 'insertInto',parent,before\n\t\t#parent = parent\n\t\tlet prev = parentNode\n\t\tif parent != prev\n\t\t\tparentNode = parent\n\t\t\t# #start.#insertInto(parent,before) if #start\n\t\t\tfor item,i in self.array\n\t\t\t\titem.#insertInto(parent,before)\n\t\t\t\n\t\t\tif #end\n\t\t\t\t#end.#insertInto(parent,before)\n\t\t\t# attachNodes!\n\t\tself\n\t\n\tdef #removeFrom parent\n\t\t# log '#removeFrom!',parent\n\n\t\tfor item in self.array\n\t\t\tparent.#removeChild(item)\n\t\tparent.#removeChild(#end) if #end\n\t\t# parent.#removeChild(#start) if #start\n\t\tparentNode = null\n\n\tdef #afterVisit index\n\t\tunless #domFlags & $TAG_INITED$\n\t\t\t#domFlags |= $TAG_INITED$\n\t\t\t# what if parent was not even set yet?\n\t\t\treturn\n\n\t\tif self.dirty\n\t\t\t# console.log 'was dirty!',array,self.changes\n\n\t\t\tself.changes.forEach do(pos,item)\n\t\t\t\tif pos == -1\n\t\t\t\t\tself.removeChild(item)\n\t\t\tself.changes.clear()\n\t\t\tself.dirty = no\n\n\t\t# there are some items we should remove now\n\t\tif self.array.length > index\n\t\t\t\n\t\t\t# remove the children below\n\t\t\twhile self.array.length > index\n\t\t\t\tlet item = self.array.pop()\n\t\t\t\tself.removeChild(item)\n\t\treturn\n\nexport def createKeyedList bitflags, parent\n\treturn new KeyedTagFragment(bitflags,parent)\n\t"], "mappings": ";wfAGA,eAAyB,EAAQ,YAHjC,iCAKK,YAAY,EAAG,EAAM,CACxB,MAAA,GAAA,mBACY,UACF,EACV,KAAA,QAAc,GAAA,KACd,KAAA,MAAQ,GACR,KAAA,MAAQ,KAAA,WACR,KAAK,EAAI,GAMJ,EAAI,cACD,EAAc,QAInB,GACF,EAAM,GAAc,MAAK,KAAA,KAAA,GAAA,KAAA,IAAA,KAAA,SAGV,EAAI,CACpB,GAAG,KAAA,WACF,MAAA,MAAA,WAAU,GAAc,EAAI,KAAA,IAE1B,eAAa,CACH,MAAG,MAAA,WAAW,QAAU,EAGlC,KAAK,EAAM,EAAG,CAEjB,GAAM,CAAA,MAAA,GAAa,GAAY,CAE9B,KAAK,MAAM,KAAK,GAChB,KAAI,GAAc,GAClB,OAEG,GAAA,GAAY,KAAK,MAAM,GAE3B,GAAG,IAAc,EAEb,CACH,KAAK,MAAQ,GAET,GAAA,GAAY,KAAK,MAAM,QAAQ,GAC/B,EAAU,KAAK,QAAQ,IAAI,GAE/B,AAAG,IAAc,GAEhB,MAAK,MAAM,OAAO,EAAI,EAAE,GACxB,KAAK,YAAY,EAAK,EAAI,IAE3B,AAAK,IAAc,EAAM,EACrB,IACF,KAAK,QAAQ,IAAI,EAAU,IAC5B,KAAK,MAAM,OAAO,EAAI,IAGY,IAAa,GAA/C,KAAK,MAAM,OAAO,EAAU,GAC5B,KAAK,MAAM,OAAO,EAAI,EAAE,GACxB,KAAK,UAAU,EAAK,EAAI,IAEtB,GAAW,IACb,KAAK,QAAQ,OAAO,IAGnB,YAAY,EAAM,EAAO,EAAS,CACjC,GAAA,GAAM,KAAA,WACH,GAAO,EAAA,EAId,GAAG,EAAQ,EAAC,CACP,GAAA,GAAQ,KAAK,MAAM,EAAQ,GAE/B,EAAG,GAAc,EAAK,EAAM,iBAE5B,GAAG,GAAc,EAAK,KAAA,WAAW,EAAQ,IAAK,KAAA,IAG5C,UAAU,EAAM,EAAO,EAAS,OACnC,MAAA,YAAY,EAAK,EAAO,GAErB,YAAY,EAAM,EAAK,CAG1B,AAAG,EAAK,YAEP,EAAI,GAAa,EAAK,gBAKP,EAAK,EAAO,MAMZ,EAAK,EAAM,CAEvB,GAAA,GAAM,EAAG,GAAa,EAAM,KAAA,mBACpB,GACL,MAEQ,EAAQ,EAAM,SAEnB,EACN,GAAA,GAAO,KAAA,WACX,GAAG,GAAU,EAAI,CAChB,KAAA,WAAa,EAEb,OAAG,GAAA,EAAA,EAAA,EAAW,KAAK,OAAK,EAAA,EAAA,OAAA,EAAA,EAAA,IACvB,AADO,EAAA,GACH,GAAa,EAAO,GAEzB,AAAE,KAAA,YACG,GAAa,EAAO,GAE1B,MAAA,UAEe,EAAM,CAGrB,OAAG,GAAA,EAAA,EAAA,EAAS,KAAK,OAAK,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,IAAlB,GAAI,EAAA,GACP,EAAM,GAAc,GACK,MAAE,MAAA,IAA5B,EAAM,GAAa,KAAA,IAEnB,KAAA,WAAa,SAEE,EAAK,YACpB,GAAM,CAAA,MAAA,GAAa,GAAY,UACjB,EAEb,OAYD,GAVG,KAAK,OAGP,GAAK,QAAQ,QAAQ,SAAG,EAAI,EAAK,CAChC,GAAG,GAAO,GACT,MAAA,GAAK,YAAY,KACnB,EAAK,QAAQ,QACb,EAAK,MAAQ,IAGX,EAAK,MAAM,OAAS,OAGhB,EAAK,MAAM,OAAS,GAAK,CAC1B,GAAA,GAAO,EAAK,MAAM,MACtB,EAAK,YAAY,MAzJf,EAAgB,KA4Jf,WAAoB,EAAU,EAAM,CAC1C,MAAW,IAAA,GAAiB,EAAS", "names": [] }