{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?d25b","webpack:///./src/App.vue","webpack:///./src/graph.ts","webpack:///./src/queue.ts","webpack:///./src/huffman.ts","webpack:///./src/App.vue?3acc","webpack:///./src/App.vue?eabf","webpack:///./src/main.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","class","style","enter-from-class","enter-active-class","leave-active-class","leave-to-class","modalShow","needsEncode","updateNeedsDecode","rows","placeholder","needsDecode","updateNeedsEncode","content","computeRealContent","tag","move-class","huffman","frequency","char","num","rawChar","codes","drawGraph","rootNode","root","tableSize","huffmanTable","margin","top","right","bottom","left","width","height","d3","selectChildren","remove","undefined","weight","hierarchyData","leafs","tree","size","svg","append","attr","nodes","links","descendants","forEach","y","depth","gNode","selectAll","nodeEnter","enter","x","circle","transition","delay","children","duration","ease","charText","text","symbol","replace","pathText","path","pathT","insert","target","source","compare","Array","this","sort","justify","encode","join","decode","reversedCodes","Map","set","tmp","getInfoFromText","frequencyArr","getFrequency","getTree","getSymbolCodes","tmpCharArray","concat","freq","sortArr","from","a","b","arr","parent","min1","min2","oq","enqueue","map","elem","dequeue","createNode","node1","node2","node","computed","methods","tempCharList","split","lastIndexOfNewLine","lastIndexOf","pop","getHuffman","render","App","mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,IAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6ECvJT,W,kKCcQyC,MAAM,oFACNC,MAAA,qB,EAEA,eAA8D,MAA1DD,MAAM,wBAAuB,4BAAwB,G,GAoB1DA,MAAM,mB,EACT,eAA2D,MAAvDA,MAAM,+BAA8B,kBAAc,G,GAEjDA,MAAM,0B,GACJA,MAAM,c,EACT,eAAgC,MAA5BA,MAAM,WAAU,WAAO,G,GAepBA,MAAM,qB,EACX,eAMQ,cALN,eAIK,MAJDA,MAAM,8CAA4C,CACpD,eAA2B,MAAvBA,MAAM,IAAG,aACb,eAA2B,MAAvBA,MAAM,IAAG,aACb,eAAsB,MAAlBA,MAAM,IAAG,Y,MAqBhBA,MAAM,c,GACJA,MAAM,S,4EAlFjB,eAgCa,QA/BXE,mBAAiB,YACjBC,qBAAmB,iBACnBC,qBAAmB,iBACnBC,iBAAe,a,yBAEf,iBAyBM,CAxBE,EAAAC,W,iBADR,eAyBM,O,MAvBJN,MAAM,wFACL,QAAK,+CAAO,EAAAM,WAAS,gB,CAEtB,eAmBM,MAnBN,EAmBM,CAfJ,E,eACA,eAMY,Y,qDALD,EAAAC,YAAW,IACnB,QAAK,8BAAE,EAAAC,kBAAA,qBACRC,KAAK,IACLC,YAAY,UACZV,MAAM,mC,mBAJG,EAAAO,e,eAMX,eAMY,Y,qDALD,EAAAI,YAAW,IACnB,QAAK,8BAAE,EAAAC,kBAAA,qBACRH,KAAK,IACLC,YAAY,UACZV,MAAM,mC,mBAJG,EAAAW,oB,gCAWjB,eAoDM,MApDN,EAoDM,CAnDJ,EAEA,eAgDM,MAhDN,EAgDM,CA/CJ,eAyCM,MAzCN,EAyCM,CAxCJ,E,eACA,eAKY,YAJVF,KAAK,IACLT,MAAM,gB,qDACG,EAAAa,QAAO,IACf,QAAK,8BAAE,EAAAC,mBAAA,sB,mBADC,EAAAD,WAIX,eAKS,UAJN,QAAK,+BAAE,EAAAP,WAAS,IACjBN,MAAM,mHACP,mBAID,eAwBQ,QAxBR,EAwBQ,CAvBN,EAOA,eAemB,QAdjBe,IAAI,QACJf,MAAM,uBACNE,mBAAiB,YACjBc,aAAW,4B,yBAGT,iBAAwC,E,mBAD1C,eAQK,2BAPmB,EAAAC,QAAQC,WAAS,YAAtB,0BAATC,EAAS,KAAHC,EAAG,K,wBADnB,eAQK,MANF9B,IAAK6B,EACNnB,MAAM,wD,CAEN,eAA4B,yBAArB,EAAAqB,QAAQF,IAAI,GACnB,eAAkB,yBAAXC,GAAG,GACV,eAAsC,yBAA/B,EAAAH,QAAQK,MAAM1C,IAAIuC,IAAI,Q,oBAKrC,eAIM,MAJN,EAIM,CAHJ,eAEM,MAFN,EAEM,eADF,EAAAI,UAAU,EAAAN,QAAQO,SAAU,EAAAP,QAAQC,UAAUvE,OAAQ,EAAAsE,QAAQK,QAAK,U,oGCjFlE,EAAY,SAACG,EAA4BC,EAAmBC,GAErE,IAAIC,EAAS,CACTC,IAAK,GACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,GAENC,EAAS,GAAKP,EAAaE,EAAOE,MAAQF,EAAOI,KACjDE,EAAU,GAAKR,EAAaE,EAAOC,IAAMD,EAAOG,OAGpD,GADAI,EAAA,KAAU,UAAUC,iBAAiBC,SAChCZ,QAAwBa,IAAhBb,EAAKc,OAAlB,CAIA,IAAIC,EAAgBL,EAAA,KAAaV,GAAM,SAAAnD,GAAC,OAAIA,EAAGmE,SAC3CC,EAAOP,EAAA,OAAUQ,KAAK,CAACT,EAAQD,IAE/BW,EAAMT,EAAA,KAAU,UAAUU,OAAO,OAChCC,KAAK,QAASb,EAAQL,EAAOE,MAAQF,EAAOI,MAAMc,KAAK,SAAUZ,EAASN,EAAOC,IAAMD,EAAOG,QAC9Fc,OAAO,KACPC,KAAK,YAAa,aAAelB,EAAOI,KAAO,IAAMJ,EAAOC,IAAM,KAIjEkB,EAAQL,EAAKF,GACfQ,EAAQD,EAAMC,QAGlBD,EAAME,cAAcC,SAChB,SAAA5E,GACIA,EAAE6E,EAAc,GAAV7E,EAAE8E,SAIhB,IAAIC,EAAQT,EAAIU,UAAU,UACrBnH,KAAK4G,EAAME,eAEZM,EAAYF,EAAMG,QACjBX,OAAO,KACPC,KAAK,QAAS,QACdA,KACG,aAAa,SAAUxE,GACnB,MAAO,aAAeA,EAAEmF,EAAI,IAAMnF,EAAE6E,EAAI,OAIhDO,EAASH,EAAUV,OAAO,UACzBC,KAAK,IAAK,GAEfY,EAAOC,aACFC,OAAM,SAAUtF,EAAG7B,GAChB,OAAW,GAAJA,KAEVqG,KAAK,IAAK,IACV7C,MAAM,QAAQ,SAAU3B,GACrB,OAAOA,EAAEuF,SAAW,OAAS,aAEhCC,SAAS,KACTC,OAIL,IAAIC,EAAWT,EAAUV,OAAO,QAC3BC,KAAK,IAAK,GACVA,KAAK,cAAe,UACpB7C,MAAM,YAAa,IAExB+D,EAASL,aACJC,OAAM,SAAUtF,EAAG7B,GAChB,OAAW,GAAJA,KAEVwH,MAAK,SAAU3F,GACZ,OAAQA,EAAEnC,KAAK+H,QAAU,IAAIC,QAAQ,KAAM,OAAOA,QAAQ,IAAK,OAAOA,QAAQ,KAAM,UAK5F,IAAIC,EAAWb,EAAUV,OAAO,QAC3BC,KAAK,KAAM,IACX7C,MAAM,YAAa,QAExBmE,EAAST,aACJC,OAAM,SAAUtF,EAAG7B,GAChB,OAAW,GAAJA,KAEVwH,MAAK,SAAU3F,GACZ,OAAOqD,EAAa/C,IAAIN,EAAEnC,KAAK+H,QAAU,KAAO,MAKxD,IAAIG,EAAOzB,EAAIU,UAAU,aACpBnH,KAAK6G,GAENsB,EAAQD,EAAKb,QAAQe,OAAO,OAAQ,KACnCzB,KAAK,QAAS,QAGnBwB,EAAMX,aACDC,OAAM,SAAUtF,EAAG7B,GAChB,OAAW,GAAJA,KAEVqG,KAAK,KAAK,SAAUxE,GACjB,MAAO,IAAMA,EAAEkG,OAAOf,EAAI,IAAMnF,EAAEkG,OAAOrB,EACnC,IAAM7E,EAAEkG,OAAOf,EAAI,KAAOnF,EAAEkG,OAAOrB,EAAI7E,EAAEmG,OAAOtB,GAAK,EACrD,IAAM7E,EAAEmG,OAAOhB,EAAI,KAAOnF,EAAEkG,OAAOrB,EAAI7E,EAAEmG,OAAOtB,GAAK,EACrD,IAAM7E,EAAEmG,OAAOhB,EAAI,IAAMnF,EAAEmG,OAAOtB,O,kIChHvC,EAAb,WAIE,WAAYuB,GAAiC,uBAFrC,KAAAvI,KAAiB,IAAIwI,MAG3BC,KAAKF,QAAUA,EALnB,yDASIE,KAAKzI,KAAK0I,KAAKD,KAAKF,WATxB,gCAYoB,OAChB,EAAAE,KAAKzI,MAAKc,KAAV,mBACA2H,KAAKE,YAdT,gCAkBI,OAAOF,KAAKzI,KAAKiB,UAlBrB,6BAsBI,OAAOwH,KAAKzI,KAAKQ,WAtBrB,KCSM,SAAUoI,EAAQd,EAAc3C,GAEpC,IADA,IAAI9D,EAAwB,GACnBf,EAAI,EAAGA,EAAIwH,EAAKtH,OAAQF,IAC/Be,EAAOP,KAAKqE,EAAM1C,IAAIqF,EAAKxH,KAE7B,OAAOe,EAAOwH,KAAK,IAIf,SAAUC,EAAQhB,EAAc3C,GAEpC,IAAI4D,EAAqC,IAAIC,IAC7C7D,EAAM4B,SAAQ,SAAClE,EAAOM,GACpB4F,EAAcE,IAAIpG,EAAOM,MAQ3B,IAJA,IAGI+F,EAHA7H,EAAwB,GACxBf,EAAI,EACNkB,EAAI,EAECA,GAAKsG,EAAKtH,OAAQgB,IACvB0H,EAAMH,EAActG,IAAIqF,EAAKlE,MAAMtD,EAAGkB,SAE1B2E,IAAR+C,IACF7H,EAAOP,KAAKoI,GACZ5I,EAAIkB,GAIR,OAAOH,EAAOwH,KAAK,IAIf,SAAUM,EAAiBrB,GAC/B,IAAMsB,EAAeC,EAAavB,GAE9BvB,EAAO+C,EAAQF,GACfjE,EAA6B,IAAI6D,IAGrC,OAFAO,EAAepE,EAAOoB,GAEf,CAACpB,EAAOiE,EAAc7C,GAI/B,SAASgD,EACPpE,EACAoB,GACgC,IAAhCiD,EAAgC,uDAAF,GAEzBjD,IAA+B,IAAtBA,EAAKD,MAAM9F,QAAiB+F,EAAKwB,UAErB,IAAtBxB,EAAKD,MAAM9F,QAKf+I,EAAepE,EAAOoB,EAAKD,MAAM,GAAIkD,EAAaC,OAAO,MACzDF,EAAepE,EAAOoB,EAAKD,MAAM,GAAIkD,EAAaC,OAAO,OALvDtE,EAAM8D,IAAI1C,EAAKwB,OAASyB,EAAaX,KAAK,MASxC,SAAUQ,EAAcvB,GAC5B,IADwC,EACpC4B,EAA4B,IAAIV,IADI,iBAGvBlB,GAHuB,IAGxC,2BAAuB,KAAd9C,EAAc,aACEmB,IAAnBuD,EAAKjH,IAAIuC,GAAqB0E,EAAKT,IAAIjE,EAAM,GAC5C0E,EAAKT,IAAIjE,EAAM0E,EAAKjH,IAAIuC,GAAS,IALA,8BAQxC,IAAI2E,EAAUnB,MAAMoB,KAAKF,GAEzB,OADAC,EAAQjB,MAAK,SAACmB,EAAGC,GAAJ,OAAUA,EAAE,GAAKD,EAAE,MACzBF,EAIH,SAAUL,EAASS,GACvB,IAAIC,EAgBAC,EAAMC,EAfNC,EAA6B,IAAI,GACnC,SAACN,EAAaC,GACZ,OAAOD,EAAEzD,OAAS0D,EAAE1D,UAGxB+D,EAAGC,QAAH,MAAAD,EAAE,eACGJ,EAAIM,KAAI,SAACC,GACV,MAAO,CACLvC,OAAQuC,EAAK,GACblE,OAAQkE,EAAK,GACbhE,MAAO,SAOb,MAAO6D,EAAG3J,OAAS,EACjByJ,EAAOE,EAAGI,UACVL,EAAOC,EAAGI,UAEVP,EAASQ,EAAWP,EAAMC,GAC1BC,EAAGC,QAAQJ,GAIb,OADAA,EAASQ,EAAWL,EAAGI,UAAWJ,EAAGI,WAC9BP,EAIT,SAASQ,EAAYC,EAAkBC,GACrC,QAAcvE,IAAVsE,EAAJ,CACA,QAActE,IAAVuE,EAAqB,OAAOD,EAEhC,IAAIE,EACAvE,EAAiBqE,EAAMrE,OAASsE,EAAMtE,OACtCE,EAAQ,CAACmE,EAAOC,GAMpB,OALAC,EAAO,CACL5C,YAAQ5B,EACRC,OAAQA,EACRE,MAAOA,GAEFqE,GC5HM,qBAAgB,CAC7BvI,KAAM,MACNpC,KAF6B,WAG3B,MAAO,CACL0E,QAAS,GACTF,YAAa,GACbJ,YAAa,GACbD,WAAW,EACXW,QAAS,CACPC,UAAW,GACXI,MAAO,GACPE,SAAU,MAIhBuF,SAAU,GACVC,QAAS,CACPlG,mBADO,WAIL,IAAMmG,EAA8B,GACpCrC,KAAK/D,QAAQqG,MAAM,IAAIhE,SAAQ,SAAC/B,GAC9B,GAAa,MAATA,EAAc,CAChB,IAAMgG,EAAqBF,EAAaG,YAAY,MAAQ,EAC5DH,EAAapJ,OACXsJ,EACAF,EAAatK,OAASwK,OAEN,MAAThG,EAAc8F,EAAaI,MACjCJ,EAAahK,KAAKkE,MAEzByD,KAAK/D,QAAUoG,EAAajC,KAAK,IAEjCJ,KAAK0C,cAEPA,WAnBO,WAmBG,MAKJhC,EAAgBV,KAAK/D,SALjB,sBAEN+D,KAAK3D,QAAQK,MAFP,KAGNsD,KAAK3D,QAAQC,UAHP,KAIN0D,KAAK3D,QAAQO,SAJP,MAOVH,QA1BO,SA0BCF,GACN,OAAOA,EACJgD,QAAQ,KAAM,OACdA,QAAQ,KAAM,OACdA,QAAQ,IAAK,UAElBvD,kBAhCO,WAiCLgE,KAAKrE,YAAc0E,EAAOL,KAAKjE,YAAaiE,KAAK3D,QAAQK,QAE3Dd,kBAnCO,WAoCLoE,KAAKjE,YAAcoE,EAAOH,KAAKrE,YAAaqE,KAAK3D,QAAQK,QAE3DC,UAAW,K,UCtDf,EAAOgG,OAASA,EAED,Q,UCHf,eAAUC,GAAKC,MAAM","file":"js/app.97fd2c77.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&lang=sass\"","\n \n \n \n \n Bidirectional Conversion\n \n \n \n \n \n\n \n \n Huffman Coding\n\n \n \n Encoder\n \n\n \n ENCODE/DECODE\n \n\n \n \n \n Character\n Frequency\n Code\n \n \n \n \n {{ rawChar(char) }}\n {{ num }}\n {{ huffman.codes.get(char) }}\n \n \n \n \n \n \n {{drawGraph(huffman.rootNode, huffman.frequency.length, huffman.codes)}}\n \n \n \n \n\n\n\n\n\n","import * as d3 from 'd3'\nimport { TreeNode } from './huffman';\n\n\nexport const drawGraph = (root: TreeNode | undefined, tableSize: number, huffmanTable: Map) => {\n // Draw graph \n let margin = {\n top: 25,\n right: 5,\n bottom: 5,\n left: 5\n },\n width = (70 * tableSize) - margin.right - margin.left,\n height = (70 * tableSize) - margin.top - margin.bottom;\n\n d3.select(\".graph\").selectChildren().remove()\n if (!root || root.weight === undefined) return\n\n\n\n let hierarchyData = d3.hierarchy(root, d => d!.leafs)\n let tree = d3.tree().size([height, width]);\n\n let svg = d3.select(\".graph\").append(\"svg\")\n .attr(\"width\", width + margin.right + margin.left).attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n\n\n const nodes = tree(hierarchyData) as d3.HierarchyPointNode,\n links = nodes.links();\n\n\n nodes.descendants().forEach(\n d => {\n d.y = d.depth * 70\n }\n )\n\n let gNode = svg.selectAll(\"g.node\")\n .data(nodes.descendants())\n\n let nodeEnter = gNode.enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\n \"transform\", function (d) {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }\n )\n\n let circle = nodeEnter.append(\"circle\")\n .attr(\"r\", 0);\n\n circle.transition()\n .delay(function (d, i) {\n return i * 80;\n })\n .attr(\"r\", 20)\n .style(\"fill\", function (d) {\n return d.children ? '#ddd' : '#FFE066';\n })\n .duration(1000)\n .ease();\n\n\n //Enter the char \n let charText = nodeEnter.append('text')\n .attr('y', 5)\n .attr(\"text-anchor\", \"middle\")\n .style('font-size', 12);\n\n charText.transition()\n .delay(function (d, i) {\n return i * 90;\n })\n .text(function (d) {\n return (d.data.symbol || \"\").replace('\\n', '\\\\n').replace(' ', \"' '\").replace('\\t', '\\\\t');\n });\n\n\n //Enter the path code 0/1\n let pathText = nodeEnter.append('text')\n .attr(\"y\", -30)\n .style('font-size', '10px');\n\n pathText.transition()\n .delay(function (d, i) {\n return i * 85;\n })\n .text(function (d) {\n return huffmanTable.get(d.data.symbol || \"\") || \"\"\n });\n\n\n //PATH \n let path = svg.selectAll(\"path.link\")\n .data(links);\n\n let pathT = path.enter().insert(\"path\", \"g\")\n .attr(\"class\", \"link\");\n\n\n pathT.transition()\n .delay(function (d, i) {\n return i * 85;\n })\n .attr(\"d\", function (d) { // 贝塞尔曲线\n return \"M\" + d.target.x + \",\" + d.target.y\n + \"C\" + d.target.x + \",\" + (d.target.y + d.source.y) / 2\n + \" \" + d.source.x + \",\" + (d.target.y + d.source.y) / 2\n + \" \" + d.source.x + \",\" + d.source.y;\n });\n}","export class OrderedQueue {\n compare: (a: T, b: T) => number;\n private data: Array = new Array();\n\n constructor(compare: { (a: T, b: T): number }) {\n this.compare = compare;\n }\n\n private justify() {\n this.data.sort(this.compare);\n }\n\n enqueue(...es: T[]) {\n this.data.push(...es);\n this.justify();\n }\n\n dequeue(): T | undefined {\n return this.data.shift();\n }\n\n get length(): number {\n return this.data.length;\n }\n}\n","import { OrderedQueue } from \"./queue\";\n\nexport interface TreeNode {\n symbol?: string;\n weight: number;\n leafs: Array;\n}\n\n/** ENCODE TEXT */\nexport function encode (text: string, codes: Map): string {\n let result: Array = [];\n for (let i = 0; i < text.length; i++) {\n result.push(codes.get(text[i])!);\n }\n return result.join(\"\");\n}\n\n/** DECODE TEXT */\nexport function decode (text: string, codes: Map): string {\n // generate reversed codes\n let reversedCodes: Map = new Map();\n codes.forEach((value, key) => {\n reversedCodes.set(value, key);\n });\n\n // two pointers\n let result: Array = [];\n let i = 0,\n j = 1;\n let tmp: string | undefined;\n for (; j <= text.length; j++) {\n tmp = reversedCodes.get(text.slice(i, j));\n // if tmp exists, return directly, let i jump to j\n if (tmp !== undefined) {\n result.push(tmp);\n i = j;\n }\n }\n\n return result.join(\"\");\n}\n\n/** GET SYMBOLS CODES & FREQUENCY TABLE & HUFFMAN TREE FROM TEXT */\nexport function getInfoFromText (text: string): [Map, [string, number][], TreeNode?] {\n const frequencyArr = getFrequency(text);\n\n let tree = getTree(frequencyArr);\n let codes: Map = new Map();\n getSymbolCodes(codes, tree);\n\n return [codes, frequencyArr, tree];\n}\n\n/** GET CODES FORM TREE */\nfunction getSymbolCodes (\n codes: Map,\n tree?: TreeNode,\n tmpCharArray: Array = []\n) {\n if (!tree || (tree.leafs.length === 0 && !tree.symbol)) return;\n\n if (tree.leafs.length === 0) {\n codes.set(tree.symbol!, tmpCharArray.join(\"\"));\n return;\n }\n\n getSymbolCodes(codes, tree.leafs[0], tmpCharArray.concat(\"0\"));\n getSymbolCodes(codes, tree.leafs[1], tmpCharArray.concat(\"1\"));\n}\n\n/** GET SYMBOLS FREQUENCY FROM TEXT */\nexport function getFrequency (text: string): Array<[string, number]> {\n let freq: Map = new Map();\n\n for (let char of text) {\n if (freq.get(char) === undefined) freq.set(char, 1);\n else freq.set(char, freq.get(char)! + 1);\n }\n\n let sortArr = Array.from(freq); //descending sorting\n sortArr.sort((a, b) => b[1] - a[1]);\n return sortArr;\n}\n\n/** GENERATE HUFFMAN TREE */\nexport function getTree (arr: Array<[string, number]>) {\n let parent: TreeNode | undefined;\n let oq: OrderedQueue = new OrderedQueue(\n (a: TreeNode, b: TreeNode) => {\n return a.weight - b.weight;\n }\n );\n oq.enqueue(\n ...arr.map((elem) => {\n return {\n symbol: elem[0],\n weight: elem[1],\n leafs: [],\n } as TreeNode;\n })\n );\n\n let min1, min2: TreeNode;\n\n while (oq.length > 1) {\n min1 = oq.dequeue()!;\n min2 = oq.dequeue()!;\n\n parent = createNode(min1, min2)!;\n oq.enqueue(parent);\n }\n\n parent = createNode(oq.dequeue(), oq.dequeue());\n return parent;\n}\n\n/** CREATE TREE NODE FROM TWO NODES */\nfunction createNode (node1?: TreeNode, node2?: TreeNode): TreeNode | undefined {\n if (node1 === undefined) return undefined;\n if (node2 === undefined) return node1;\n\n let node: TreeNode;\n let weight: number = node1.weight + node2.weight;\n let leafs = [node1, node2];\n node = {\n symbol: undefined,\n weight: weight,\n leafs: leafs,\n };\n return node;\n}\n","\nimport { defineComponent } from \"vue\";\nimport { drawGraph } from \"./graph\";\nimport { decode, encode, getInfoFromText, TreeNode } from \"./huffman\";\n\nexport default defineComponent({\n name: \"App\",\n data() {\n return {\n content: \"\",\n needsDecode: \"\",\n needsEncode: \"\",\n modalShow: false,\n huffman: {\n frequency: [] as [string, number][],\n codes: {} as Map,\n rootNode: {} as TreeNode | undefined,\n },\n };\n },\n computed: {},\n methods: {\n computeRealContent() {\n // 根据规则计算出真实字符串\n // @ 清除前面(换行符后)的所有内容, #删除上一个字符\n const tempCharList: Array = [];\n this.content.split(\"\").forEach((char) => {\n if (char === \"@\") {\n const lastIndexOfNewLine = tempCharList.lastIndexOf(\"\\n\") + 1;\n tempCharList.splice(\n lastIndexOfNewLine,\n tempCharList.length - lastIndexOfNewLine\n );\n } else if (char === \"#\") tempCharList.pop();\n else tempCharList.push(char);\n });\n this.content = tempCharList.join(\"\");\n\n this.getHuffman();\n },\n getHuffman() {\n [\n this.huffman.codes,\n this.huffman.frequency,\n this.huffman.rootNode,\n ] = getInfoFromText(this.content);\n },\n rawChar(char: string): string {\n return char\n .replace(\"\\n\", \"\\\\n\")\n .replace(\"\\t\", \"\\\\t\")\n .replace(\" \", \"Space\");\n },\n updateNeedsEncode() {\n this.needsEncode = decode(this.needsDecode, this.huffman.codes);\n },\n updateNeedsDecode() {\n this.needsDecode = encode(this.needsEncode, this.huffman.codes);\n },\n drawGraph: drawGraph,\n },\n});\n","import { render } from \"./App.vue?vue&type=template&id=02ca1c12&bindings={}\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&lang=sass\"\nscript.render = render\n\nexport default script","import { createApp } from \"vue\";\nimport App from \"./App.vue\";\nimport \"./assets/style.css\";\n\ncreateApp(App).mount(\"#app\");\n"],"sourceRoot":""}