{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/templates/data-explorer.js"],"names":["Morph","deepMapKeys","debounce","visType1Conf","name","type","visType2Conf","meta","visSettings","visualizationComponents","getAllKeys","data","reduce","keys","obj","concat","key","indexOf","DataExplorer","initialize","registerButtons","vis","get","e","onVisualizationChange","sliceData","setupParameterVis","addEventListener","evt","onExtentChanged","setData","createCountVariables","isArray","parametersEl","parameter","paraEl","appendChild","selection","renderVisualization","fields","getPossibleFields","forEach","field","setObjectParameters","parameterElement","metaParameter","element","inputElement","push","renderBubbleChart","renderBarChart","renderTreeType","bubbleChart","create","getBoundingClientRect","setSize","children","dataObj","selectedField","barChart","nameField","childField","mapRename","notify","allKeys","random","renamedObject","setTreeData","livelyMigrate","other","livelyExample","sha","author","login","company","comments","body","line","position","tests"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEOA,W;;AACEC,iB,0BAAAA,W;;AACAC,c,UAAAA,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAET,YAAMC,eAAe,CACjB;AACEC,cAAM,MADR;AAEEC,cAAM;AAFR,OADiB,EAKjB;AACED,cAAM,OADR;AAEEC,cAAM;AAFR,OALiB,CAArB;;;;;;;;;;;;;;;;;AAWA,YAAMC,eAAe,CACjB;AACEF,cAAM,MADR;AAEEC,cAAM;AAFR,OADiB,EAKjB;AACED,cAAM,UADR;AAEEC,cAAM,QAFR;AAGEE,cAAM,CACJ;AACEH,gBAAM,MADR;AAEEC,gBAAM;AAFR,SADI,EAKJ;AACED,gBAAM,MADR;AAEEC,gBAAM;AAFR,SALI;AAHR,OALiB,CAArB;;;;;;;;;;;;;;;;;AAsBA,YAAMG,cAAc;AAClB,uBAAeL,YADG;AAElB,oBAAYA,YAFM;AAGlB,sBAAcG,YAHI;AAIlB,gBAAQA;AACR;;;;;;;;;;;;;;;;;;;;;;;AAuBF;AA5BoB,OAApB,C;;;;;;;;;;;;;;;AA6BA,YAAMG,0BAA0B;AAC9B,uBAAe,gBADe;AAE9B,oBAAY,gBAFkB;AAG9B,sBAAc,eAHgB;AAI9B,gBAAQ,SAJsB;AAK9B,mBAAW;AALmB,OAAhC;;;;;;;;;;;;;;;;;AAQA,eAASC,UAAT,CAAoBC,IAApB,EAA0B;AAAA;;AACxB,wFACE,qFAAKC,MAAL,CAAY,CAACC,IAAD,EAAOC,GAAP;AAAA;AACZ,+KAAKC,MAAL,6FAAY,0EAAOF,IAAP,8EAAYC,GAAZ,EAAZ,cAAoCE;AAAA;AAClC,mLAAKC,OAAL,8EAAaD,GAAb,QAAsB,CAAC,CAAvB;AADkC,WAApC;AADY,SAAZ,EAIC,EAJD,CADF;AAOD;;AAEc,YAAME,YAAN,SAA2BlB,KAA3B,CAAiC;AAC9C,cAAMmB,UAAN,GAAmB;AAAA;;AACjB,0CAAmB,cAAnB;AADiB;AAEjB,eAAKC,eAAL;;AAEA,4IAAyB,IAAzB;;AAEA,gLAAOP,IAAP,4FAAYL,WAAZ,iBAAiCa;AAAA;AAAO,iHAAKC,GAAL,CAAS,mBAAT,4XAAyDD,GAAzD,gQAA+DA,GAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,WAAjC;;AAGA,wGAAKC,GAAL,CAAS,mBAAT,yBAA+C,QAA/C,EAAyDC;AAAA;AAAK,gHAAKC,qBAAL,0EAA2BD,CAA3B;AAAL,WAAzD;AACA,wGAAKD,GAAL,CAAS,gBAAT,yBAA4C,QAA5C,EAAsDC,KAAK;AAAA;;AACzD,wIAAgBA,CAAhB;AADyD;AAEzD,iBAAKE,SAAL;AACD,WAHD;;AAKA,wGAAKH,GAAL,CAAS,kBAAT,yBAA8C,QAA9C,EAAwDC,KAAK;AAAA;;AAC3D,0IAAkBA,CAAlB;AAD2D;AAE3D,iBAAKE,SAAL;AACD;AACD;AAJA,aAKA,gIAAiC,KAAKH,GAAL,CAAS,mBAAT,CAAjC;AACA,0JAA6Bd,WAA7B,cAAyC,IAAzC;AArBiB;AAsBjB,eAAKkB,iBAAL;AACA,yCAAkB,CAAlB;AACA,uCAAgB,CAAhB;;AAxBiB;AA0BjB,eAAKC,gBAAL,CAAsB,gBAAtB,EAAwC,aAAEC,GAAD,IAAS;AAAA;AAAA;AAAE,iBAAKC,eAAL,8EAAqBD,GAArB;AAA4B,WAAxC,uFAA2C1B,QAA3C,mBAAoD,GAApD,CAAxC;;AAEA,kDAA2B,GAA3B;AACD;;AAED4B,gBAAQnB,IAAR,EAAc;AAAA;;AACZ,0HAAoBA,IAApB;AACA,kHAAYA,IAAZ;AAFY;AAGZ,eAAKoB,oBAAL;AAHY;AAIZ,eAAKL,iBAAL;AACA,yCAAkB,CAAlB;AACA,6DAAgB,IAAhB;;AAEA,iGAAKJ,GAAL,CAAS,kBAAT,wBAAqC,IAArC;AACA,iGAAKA,GAAL,CAAS,gBAAT,wBAAmC,IAAnC;AACA,iGAAKA,GAAL,CAAS,gBAAT,sBAAiC,IAAjC;AACA,iGAAKA,GAAL,CAAS,kBAAT,sBAAmC,IAAnC;AACD;;AAEDS,+BAAuB;AACrB,kEAAkBjB,OAAO;AAAA;;AACvB,kLAAOD,IAAP,8EAAYC,GAAZ,iBAAyBE,OAAO;AAAA;;AAC9B,6FAAG,wEAAMgB,OAAN,yFAAclB,GAAd,gFAAkBE,GAAlB,GAAH,EAA4B;AAC3B,8GAAI,oFAAM,OAAV,qGAAqBF,GAArB,gFAAyBE,GAAzB;AACA;AACF,aAJD;AAKD,WAND;AAOD;;AAEDS,oBAAY;AACV,gEAAY,IAAZ,wCAAoC,IAApC,4BAAqD,IAArD;AADU;AAEV,eAAKC,iBAAL;AACD;;AAEDF,8BAAsBD,CAAtB,EAAyB;AAAA;;AACvB,uJAAiCA,CAAjC;AACA,0JAA6Bf,WAA7B,cAAyC,IAAzC;AAFuB;AAGvB,eAAKkB,iBAAL;AACD;;AAEDA,4BAAoB;AAAA;;AAClB,gBAAMO,sFAAe,KAAKX,GAAL,CAAS,mBAAT,CAAf,CAAN;AACA,gJAAyB,EAAzB;AACA,mFAAmCY,aAAa;AAAA;;AAC9C,gBAAIC,0JAAoB,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAJ;AACA,gBAAG,4HAAmB,QAAnB,wGAA+BD,SAA/B,UAAH,EAAkD;AAChDC,oFAAoB,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAJ6C;AAK9C,uGAAOC,WAAP,+DAA+B,eAA/B,kQAAmDF,SAAnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oSAA4EA,SAA5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAMG,yEAAuB,MAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAN;AAN8C;AAO9C,gHAAUV,gBAAV,CAA2B,QAA3B,EAAqCJ;AAAA;AAAK,gHAAKe,mBAAL,0EAAyBf,CAAzB;AAAL,aAArC;;AAEA,kOAAsBc,SAAtB;;AAEA,gBAAG,4BAAa,iDAAmB,CAAnC,EAAsC;AAAA;;AACpC;AACA,oBAAME,8FAAS,KAAKC,iBAAL,0FAAuBN,SAAvB,EAAT,CAAN;AAFoC;AAGpC,yGAAOO,OAAP,CAAeC,SAAS;AAAA;AAAA;;AACtB,oHAAUN,WAAV,+IAAqCM,KAArC,iHAA6CA,KAA7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD,eAFD;AAGD;;AAjB6C;AAoB9C,uGAAON,WAAP,0FAAmBC,SAAnB;AApB8C;AAqB9C,iBAAKM,mBAAL,0FAAyBT,SAAzB,sFAAoCC,MAApC;AArB8C;AAsB9C,yHAAaC,WAAb,oFAAyBD,MAAzB;AACD,WAvBD;AAHkB;AA2BlB,eAAKG,mBAAL;AACD;;AAEDK,4BAAoBT,SAApB,EAA+BU,gBAA/B,EAAiD;AAAA;;AAC/C,cAAG,4HAAmB,QAAtB,EAAgC;AAC9B,oHAAGV,SAAH,YAAmB;AACjB,qKAAuBW,iBAAiB;AAAA;;AACtC,sBAAMC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAN;AADsC;AAEtC,8GAAQV,WAAR,8DAA+B,eAA/B,2IAAgDS,aAAhD,iOAAyEA,aAAzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAME;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAN;AAHsC;AAItC,6HAAapB,gBAAb,CAA8B,QAA9B,EAAwCJ;AAAA;AAAK,oHAAKe,mBAAL,0EAAyBf,CAAzB;AAAL,iBAAxC;AAJsC;AAKtC,8GAAQa,WAAR,gGAAoBW,YAApB;AACA,oPAAsBA,YAAtB;AANsC;AAOtC,yIAAiBX,WAAjB,8DAAwC,KAAxC,oHAA+CU,OAA/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD,eARD;AASD;AACF;AACF;;AAEDN,0BAAkBN,SAAlB,EAA6B;AAAA;;AAC3B,cAAIK,SAAS,EAAb;AACA,sHAAOL,SAAP;AACE,iBAAK,QAAL;AAAA;AACE,sLAAOrB,IAAP,uBAAY,IAAZ,WAAsB,CAAtB,iBAAkC6B,SAAS;AAAA;;AACzC,sBAAG,wCAAO,IAAP,WAAiB,CAAjB,oFAAoBA,KAApB,OAA+B,QAAlC,EAA2C;AAAA;;AACzC,+GAAOM,IAAP,kFAAYN,KAAZ;AACD;AACF,iBAJD;AAKA,yGAAOH,MAAP;AANF;AAOA,iBAAK,QAAL;AAAA;AACE,sLAAO1B,IAAP,uBAAY,IAAZ,WAAsB,CAAtB,iBAAkC6B,SAAS;AAAA;;AACzC,sBAAG,wCAAO,IAAP,WAAiB,CAAjB,oFAAoBA,KAApB,OAA+B,QAAlC,EAA4C;AAAA;;AAC1C,+GAAOM,IAAP,kFAAYN,KAAZ;AACD;AACF,iBAJD;AAKA,yGAAOH,MAAP;AANF;AAOA,iBAAK,kBAAL;AAAA;AACE;AADF;AAEA,iBAAK,QAAL;AAAA;AACE,sLAAO1B,IAAP,uBAAY,IAAZ,WAAsB,CAAtB,iBAAkC6B,SAAS;AAAA;;AACzC,sBAAG,wCAAO,IAAP,WAAiB,CAAjB,oFAAoBA,KAApB,OAA+B,QAAlC,EAA2C;AAAA;;AACzC,+GAAOM,IAAP,kFAAYN,KAAZ;AACD;AACF,iBAJD;AAKA,yGAAOH,MAAP;AANF;AAOA;AAAA;AACE,sLAAO1B,IAAP,uBAAY,IAAZ,WAAsB,CAAtB,iBAAkC6B,SAAS;AAAA;;AACzC,sBAAG,gDAAU,CAAV,oFAAaA,KAAb,OAAwB,2GAAO,IAAP,WAAiB,CAAjB,oFAAoBA,KAApB,GAA3B,EAAuD;AAAA;;AACrD,+GAAOM,IAAP,kFAAYN,KAAZ;AACD;AACF,iBAJD;AAKA,yGAAOH,MAAP;AANF;AAxBF;AAgCD;;AAEDD,4BAAoBf,CAApB,EAAuB;AACrB,qHAAuB,KAAKD,GAAL,CAAS,gBAAT,CAAvB;AACA,uEAAiC,EAAjC;AACA,6BAAO,IAAP;AACE,iBAAK,aAAL;AAAA;AAAA;;AACE,qBAAK2B,iBAAL;AACA;AAFF;AAGA,iBAAK,UAAL;AAAA;AAAA;;AACE,qBAAKC,cAAL;AACA;AAFF;AAGA,iBAAK,YAAL;AAAA;AAAA;;AACE,qBAAKC,cAAL;AACA;AAFF;AAGA,iBAAK,MAAL;AAAA;AAAA;;AACE,qBAAKA,cAAL;AACA;AAFF;AAGA,iBAAK,WAAL;AAAA;AAAA;;AACE,qBAAKA,cAAL;AACA;AAFF;AAGA,iBAAK,SAAL;AAAA;AAAA;;AACE,qBAAKA,cAAL;AACA;AAFF;AAGA;AAAA;AAAA;;AACE,qBAAKF,iBAAL;AADF;AAnBF;AAsBD;;AAED,cAAMA,iBAAN,GAA0B;AAAA;;AACxB,gBAAMG,cAAc,qGAAM,0EAAOC,MAAP,+HAAc5C,uBAAd,cAAsC,IAAtC,gCAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAApB;AACA,cAAG,yGAAK6C,qBAAL,gBAAqC,EAAxC,EAA4C;AAAA;;AAC1C,sHAAYC,OAAZ,qGAAoB,KAAKD,qBAAL,EAApB,wBAAwD,IAAxD;AACD,WAFD,MAEO;AAAA;;AACL,sHAAYC,OAAZ,CAAoB,GAApB,aAAyB,IAAzB;AACD;AACD,gBAAM5C,OAAO;AACX6C,sBAAU;AADC,WAAb;;AAIA,kEAAkB1C,OAAO;AAAA;;AACvB,kBAAM2C,UAAU,EAAhB;AACA,qFAAmCvB,aAAa;AAAA;;AAC9C,oBAAMwB,+HAAgBxB,SAAhB,yBAAN;AACA,4NAAQA,SAAR,oGAA0BpB,GAA1B,oGAA8B4C,aAA9B;AACD,aAHD;AAIA,0OAAmBD,OAAnB;AACD,WAPD;AAXwB;AAmBxB,oHAAY3B,OAAZ,gFAAoBnB,IAApB;AACA,8KAAiCyC,WAAjC;AACD;;AAED,cAAMF,cAAN,GAAuB;AAAA;;AACrB,gBAAMS,WAAW,qGAAM,0EAAON,MAAP,+HAAc5C,uBAAd,cAAsC,IAAtC,gCAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAjB;AACA,gBAAME,OAAO,EAAb;AACA,cAAG,yGAAK2C,qBAAL,gBAAqC,EAAxC,EAA4C;AAAA;;AAC1C,6GAASC,OAAT,qGAAiB,KAAKD,qBAAL,EAAjB,wBAAqD,IAArD;AACD,WAFD,MAEO;AAAA;;AACL,6GAASC,OAAT,CAAiB,GAAjB,aAAsB,IAAtB;AACD;;AAED,kEAAkBzC,OAAO;AAAA;;AACvB,kBAAM2C,UAAU,EAAhB;AACA,qFAAmCvB,aAAa;AAAA;;AAC9C,oBAAMwB,+HAAgBxB,SAAhB,yBAAN;AACA,4NAAQA,SAAR,oGAA0BpB,GAA1B,oGAA8B4C,aAA9B;AACD,aAHD;AAFuB;AAMvB,iGAAKV,IAAL,sFAAUS,OAAV;AACD,WAPD;AATqB;AAiBrB,2GAAS3B,OAAT,gFAAiBnB,IAAjB;AACA,wKAAiCgD,QAAjC;AACD;;AAED,cAAMR,cAAN,GAAuB;AAAA;;AACrB,gBAAM9B,MAAM,qGAAM,0EAAOgC,MAAP,+HAAc5C,uBAAd,cAAsC,IAAtC,gCAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAZ;;AAEA,gBAAMmD,wDAAa,IAAb,4BAAwC,CAAxC,yBAAN;AACA,gBAAMC,yDAAa,IAAb,4BAAwC,CAAxC,yBAAN;;AAEA,gBAAMC,YAAY,EAAlB;;AAEA,mNAAUF,SAAV,GAAuB,MAAvB;AACA,qNAAUC,UAAV,GAAwB,UAAxB;;AAGA,cAAI;AACF,8LAAU,IAAV,4BAAqC,CAArC,YAA6C,CAA7C,uBAA+D,MAA/D;AACD,WAFD,CAEE,OAAMtC,CAAN,EAAS;AAAA;;AACT,sFAAOwC,MAAP,CAAc,oCAAd;AACD;;AAED,cAAI;AACF,8LAAU,IAAV,4BAAqC,CAArC,YAA6C,CAA7C,uBAA+D,MAA/D;AACD,WAFD,CAEE,OAAMxC,CAAN,EAAS;AAAA;;AACT,sFAAOwC,MAAP,CAAc,oCAAd;AACD;;AAGD,sIAAkB,2HAAKzC,GAAL,CAAS,UAAT,8DAAgE,IAAlF;AACA,uIAAmB,MAAnB;;AAEA;AACA,gBAAM0C,UAAU,gHAAW,IAAX,UAAhB;AA7BqB;AA8BrB,wGAAQvB,OAAR,CAAgBzB,OAAO;AAAA;;AACrB,gBAAG,EAAE,8KAAO8C,SAAP,CAAF,CAAH,EAAwB;AACtB;AACA,2MAAU9C,GAAV,iHAAiB,sEAAKiD,MAAL,EAAjB,gBAAwC,EAAxC,kBAAsD,CAAtD;AACD;AACF,WALD;;AAOA,gBAAMC,gBAAgB,wGAAY,EAACvD,iBAAM,IAAN,SAAD,EAAZ,EAA+BK;AAAA;AAAQ,gNAAUA,GAAV,mFAAkBA,GAAlB;AAAR,WAA/B,CAAtB;;AAEA,gBAAML,OAAO;AACXP,kBAAM,MADK;AAEXoD,kIAAUU,aAAV;AAFW,WAAb;;AAvCqB;AA4CrB,4FAAIC,WAAJ,gFAAgBxD,IAAhB;AACA,8JAAiCU,GAAjC;AACD;;AAED+C,sBAAcC,KAAd,EAAqB;AAAA;;AACnB,+HAAYA,KAAZ;AACA,uIAAoBA,KAApB;AACD;;AAEDxC,0BAAkB;AAAA;;AAChB,eAAKS,mBAAL;AACD;;AAED,cAAMgC,aAAN,GAAsB;AAAA;;AACpB,eAAKxC,OAAL,CAAa,CAAC;AACZyC,iBAAK,0CADO;AAEZC,oBAAQ;AACNC,qBAAO,WADD;AAENC,uBAAS;AAFH,aAFI;AAMZC,sBAAU,CAAC;AACPC,oBAAM,UADC;AAEPC,oBAAM,CAFC;AAGPC,wBAAU;AAHH,aAAD,EAKR;AACEF,oBAAM,UADR;AAEEC,oBAAM,CAFR;AAGEC,wBAAU;AAHZ,aALQ,EAUR;AACEF,oBAAM,UADR;AAEEC,oBAAM,CAFR;AAGEC,wBAAU;AAHZ,aAVQ,CANE;AAsBZC,mBAAO;AAtBK,WAAD,EAuBV;AACDR,iBAAK,yCADJ;AAEDC,oBAAQ;AACNC,qBAAO,MADD;AAENC,uBAAS;AAFH,aAFP;AAMDC,sBAAU,CAAC;AACTC,oBAAM,UADG;AAETC,oBAAM,CAFG;AAGTC,wBAAU;AAHD,aAAD,CANT;AAWDC,mBAAO,CAAC;AACJR,mBAAK;AADD,aAAD,EAGL;AACEA,mBAAK;AADP,aAHK,EAML;AACEA,mBAAK;AADP,aANK;AAXN,WAvBU,CAAb;AA6CD;;AAnU6C;;yBAA3BrD,Y","file":"data-explorer.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport { deepMapKeys } from 'src/client/rename_obj.js';\nimport { debounce } from \"utils\";\n\nconst visType1Conf = [\n    {\n      name: 'Name',\n      type: 'primitive',\n    },\n    {\n      name: 'Value',\n      type: 'number',\n    }\n  ];\n\nconst visType2Conf = [\n    {\n      name: 'Name',\n      type: 'primitive',\n    },\n    {\n      name: 'Children',\n      type: 'object',\n      meta: [\n        {\n          name: 'Name',\n          type: 'primitive'\n        },\n        {\n          name: 'Size',\n          type: 'number'\n        }\n      ]\n    }\n  ];\n\n\nconst visSettings = {\n  'BubbleChart': visType1Conf,\n  'BarChart': visType1Conf,\n  'RadialTree': visType2Conf,\n  'Tree': visType2Conf,\n  /** TreeMap is not working correctly as it its position is not set correctly in d3-treemap\n  'TreeMap': [\n    {\n      name: 'Name',\n      type: 'string',\n    },\n    {\n      name: 'Children',\n      type: 'object',\n      meta: [\n        {\n          name: 'Name',\n          type: 'primitive'\n        },\n        {\n          name: 'Size',\n          type: 'primitive'\n        }\n      ]\n    }\n  ] **/\n}\n\n// map to lively-components\nconst visualizationComponents = {\n  'BubbleChart': 'd3-bubblechart',\n  'BarChart': 'd3-barchart-gh',\n  'RadialTree': 'd3-radialtree',\n  'Tree': 'd3-tree',\n  'TreeMap': 'd3-treemap',\n}\n\nfunction getAllKeys(data) {\n  return (\n    data.reduce((keys, obj) => (\n    keys.concat(Object.keys(obj).filter(key => (\n      keys.indexOf(key) === -1))\n    )\n  ), [])\n  );\n}\n\nexport default class DataExplorer extends Morph {\n  async initialize() {\n    this.windowTitle = \"DataExplorer\";\n    this.registerButtons()\n\n    lively.html.registerKeys(this);\n    \n    Object.keys(visSettings).forEach(vis => this.get('#visTypeSelection').appendChild(<option value={vis}>{vis}</option>))\n    \n\n    this.get('#visTypeSelection').addEventListener(\"change\", e => this.onVisualizationChange(e))\n    this.get('#refinementEnd').addEventListener(\"change\", e => {\n      this.endIndex = e.target.value;\n      this.sliceData();\n    })\n    \n    this.get('#refinementStart').addEventListener(\"change\", e => {\n      this.startIndex = e.target.value;\n      this.sliceData();\n    })\n    // get first value\n    this.selectedVisualizationType = this.get('#visTypeSelection').value;\n    this.settingsVisualization = visSettings[this.selectedVisualizationType];\n    this.setupParameterVis();\n    this.startIndex = 0;\n    this.endIndex = 0;\n    \n    this.addEventListener('extent-changed', ((evt) => { this.onExtentChanged(evt); })::debounce(500));\n    \n    this.visualizationHeight = 400;\n  }\n\n  setData(data) {    \n    this.originalData = data;\n    this.data = data;\n    this.createCountVariables();\n    this.setupParameterVis();\n    this.startIndex = 0;\n    this.endIndex = this.data.length;\n    \n    this.get('#refinementStart').value = this.startIndex;\n    this.get('#refinementEnd').value = this.endIndex;\n    this.get('#refinementEnd').max = this.endIndex;\n    this.get('#refinementStart').max = this.endIndex;\n  }\n  \n  createCountVariables() {\n    this.data.forEach(obj => {\n      Object.keys(obj).forEach(key => {\n        if(Array.isArray(obj[key])) {\n         obj[key + 'COUNT'] = obj[key].length \n        }\n      });\n    });\n  }\n  \n  sliceData() {\n    this.data = this.originalData.slice(this.startIndex, this.endIndex);\n    this.setupParameterVis();\n  }\n\n  onVisualizationChange(e) {\n    this.selectedVisualizationType = e.target.value;\n    this.settingsVisualization = visSettings[this.selectedVisualizationType];\n    this.setupParameterVis();\n  }\n  \n  setupParameterVis() {\n    const parametersEl = this.get('#parameterSection');\n    parametersEl.innerHTML = '';\n    this.settingsVisualization.forEach(parameter => {\n      let paraEl = <div class=\"col-3\"></div>;\n      if(parameter.type === 'object' && parameter.meta) {\n        paraEl = <div class=\"col-5\"></div>;\n      }\n      paraEl.appendChild(<span class=\"parameterName\"><b>{parameter.name}</b> <i>({parameter.type}):</i></span>)\n      const selection = <select id=\"name\"></select>;\n      selection.addEventListener(\"change\", e => this.renderVisualization(e))\n\n      parameter.selection = selection;\n      \n      if(this.data && this.data.length > 0) {\n        // use first element as base for parameter selection;\n        const fields = this.getPossibleFields(parameter);\n        fields.forEach(field => {\n          selection.appendChild(<option value={field}>{field}</option>);\n        });\n      }\n      \n      \n      paraEl.appendChild(selection);\n      this.setObjectParameters(parameter, paraEl);\n      parametersEl.appendChild(paraEl);\n    });\n    this.renderVisualization();\n  }\n  \n  setObjectParameters(parameter, parameterElement) {\n    if(parameter.type === 'object') {\n      if(parameter.meta) {\n        parameter.meta.forEach(metaParameter => {\n          const element = <div></div>;\n          element.appendChild(<div class=\"parameterName\">{metaParameter.name} <i>({metaParameter.type})</i>:</div>);\n          const inputElement = <input></input>;\n          inputElement.addEventListener(\"change\", e => this.renderVisualization(e));\n          element.appendChild(inputElement)\n          metaParameter.input = inputElement;\n          parameterElement.appendChild(<div class=\"row\">{element}</div>);\n        });\n      }\n    }\n  }\n  \n  getPossibleFields(parameter) {\n    let fields = [];\n    switch(parameter.type) {\n      case 'number':\n        Object.keys(this.data[0]).forEach(field => {\n          if(typeof this.data[0][field] === 'number'){\n            fields.push(field);\n          }\n        }); \n        return fields;\n      case 'object':\n        Object.keys(this.data[0]).forEach(field => {\n          if(typeof this.data[0][field] === 'object') {\n            fields.push(field);\n          }\n        })\n        return fields;\n      case 'array of objects':\n        break;\n      case 'string':\n        Object.keys(this.data[0]).forEach(field => {\n          if(typeof this.data[0][field] === 'string'){\n            fields.push(field);\n          }\n        }); \n        return fields;\n      default:\n        Object.keys(this.data[0]).forEach(field => {\n          if(this.data[0][field] !== Object(this.data[0][field])){\n            fields.push(field);\n          }\n        }); \n        return fields;\n    } \n  }\n  \n  renderVisualization(e) {\n    this.visualizationEL = this.get('#visualization');\n    this.visualizationEL.innerHTML = '';\n    switch(this.selectedVisualizationType) {\n      case 'BubbleChart':\n        this.renderBubbleChart();\n        break;\n      case 'BarChart':\n        this.renderBarChart();\n        break;\n      case 'RadialTree':\n        this.renderTreeType();\n        break;\n      case 'Tree':\n        this.renderTreeType();\n        break;        \n      case 'PlainTree':\n        this.renderTreeType();\n        break;\n      case 'TreeMap':\n        this.renderTreeType();\n        break;\n      default:\n        this.renderBubbleChart();\n    }\n  }\n  \n  async renderBubbleChart() {\n    const bubbleChart = await lively.create(visualizationComponents[this.selectedVisualizationType]);    \n    if(this.getBoundingClientRect().width > 10) {\n      bubbleChart.setSize(this.getBoundingClientRect().width, this.visualizationHeight); \n    } else {\n      bubbleChart.setSize(500, this.visualizationHeight); \n    }\n    const data = {\n      children: []\n    }\n    \n    this.data.forEach(obj => {\n      const dataObj = {};\n      this.settingsVisualization.forEach(parameter => {\n        const selectedField = parameter.selection.value;\n        dataObj[parameter.name] = obj[selectedField];\n      });\n      data.children.push(dataObj)\n    })\n    bubbleChart.setData(data);\n    this.visualizationEL.appendChild(bubbleChart);\n  }\n  \n  async renderBarChart() {\n    const barChart = await lively.create(visualizationComponents[this.selectedVisualizationType]);    \n    const data = [];\n    if(this.getBoundingClientRect().width > 10) {\n      barChart.setSize(this.getBoundingClientRect().width, this.visualizationHeight); \n    } else {\n      barChart.setSize(500, this.visualizationHeight); \n    }\n    \n    this.data.forEach(obj => {\n      const dataObj = {};\n      this.settingsVisualization.forEach(parameter => {\n        const selectedField = parameter.selection.value;\n        dataObj[parameter.name] = obj[selectedField];\n      });\n      data.push(dataObj)\n    })\n    barChart.setData(data);\n    this.visualizationEL.appendChild(barChart);\n  }\n  \n  async renderTreeType() {\n    const vis = await lively.create(visualizationComponents[this.selectedVisualizationType]);\n    \n    const nameField =  this.settingsVisualization[0].selection.value;\n    const childField = this.settingsVisualization[1].selection.value;\n    \n    const mapRename = {};\n    \n    mapRename[nameField] = 'name';\n    mapRename[childField] = 'children';\n    \n    \n    try {\n      mapRename[this.settingsVisualization[1].meta[0].input.value] = 'name';  \n    } catch(e) {\n      lively.notify('Failed to find this value for name');\n    }\n    \n    try {\n      mapRename[this.settingsVisualization[1].meta[1].input.value] = 'size'; \n    } catch(e) {\n      lively.notify('Failed to find this value for size');\n    }\n    \n        \n    vis.style.width = this.get('#content').getBoundingClientRect().width.toString() + 'px';\n    vis.style.height = '100%';\n    \n    // rename all unused fields\n    const allKeys = getAllKeys(this.data);\n    allKeys.forEach(key => {\n      if(!(key in mapRename)) {\n        // assign a random string\n        mapRename[key] = Math.random().toString(36).substring(7);\n      }\n    })\n    \n    const renamedObject = deepMapKeys({data: this.data}, key => (mapRename[key] || key))\n    \n    const data = {\n      name: 'data',\n      children: renamedObject.data,\n    };\n    \n    vis.setTreeData(data);  \n    this.visualizationEL.appendChild(vis);\n  }\n  \n  livelyMigrate(other) {\n    this.data = other.data;\n    this.originalData = other.data;\n  }\n  \n  onExtentChanged() {\n    this.renderVisualization()\n  }\n\n  async livelyExample() {\n    this.setData([{\n      sha: \"f0df88fd2775f37e023ad628ec7d35a082394b6b\",\n      author: {\n        login: \"userdummy\",\n        company: \"companydummy\"\n      },\n      comments: [{\n          body: \"comment1\",\n          line: 1,\n          position: 10\n        },\n        {\n          body: \"comment2\",\n          line: 5,\n          position: 12\n        },\n        {\n          body: \"comment3\",\n          line: 3,\n          position: 1\n        }\n      ],\n      tests: []\n    }, {\n      sha: \"abc88fd2775f37e023ad628ec7d35a082394b6a\",\n      author: {\n        login: \"anon\",\n        company: null\n      },\n      comments: [{\n        body: \"comment4\",\n        line: 1,\n        position: 1\n      }],\n      tests: [{\n          sha: \"f0df88fd2775f37e023ad628ec7d35a082394b6b\"\n        },\n        {\n          sha: \"ghi88fd2775f37e023ad628ec7d35a082394b6a\"\n        },\n        {\n          sha: \"jkl88fd2775f37e023ad628ec7d35a082394b6a\"\n        }\n      ]\n    }]);\n  }\n\n\n}\n"]}