{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/debug/menu.js"],"names":["DebugOption","Menu","mini","Class","subclass","options","panels","numbers","container","panelMenu","activePanel","debugTime","debugTickAvg","debugRealTime","window","performance","now","initialize","parent","style","$","console","log","attr","lively4url","append","addClass","prepend","get","innerHTML","numberContainer","addNumber","name","width","number","document","createTextNode","showNumber","text","addPanel","panelDef","panel","type","label","i","length","opt","addOption","object","property","hide","that","menuItem","click","ev","togglePanel","inserted","children","cn","textContent","insertBefore","showPanel","toggle","removeClass","active","is","show","ready","p","hasOwnProperty","beforeRun","timeBeforeRun","afterRun","renderer","fluidSystem","frameTime","toFixed","Math","round","drawCount","numberOfParticles","getNumberOfParticles"],"mappings":";;;;;;AAAOA,c;;;;;;;;;;;;;;;;;;;;AAEN,OAAIC,OAAOC,KAAKC,KAAL,CAAWC,QAAX,CAAoB;AAC9BC,aAAS,EADqB;AAE9BC,YAAQ,EAFsB;AAG9BC,aAAQ,EAHsB;AAI9BC,eAAW,IAJmB;AAK9BC,eAAW,IALmB;AAM9BC,iBAAa,IANiB;;AAQ9BC,eAAW,CARmB;AAS9BC,kBAAc,KATgB;AAU9BC,mBAAeC,OAAOC,WAAP,CAAmBC,GAAnB,EAVe;;AAY9BC,gBAAY,UAASC,MAAT,EAAiB;AAC5B;AACA,SAAIC,QAAQC,EAAE,UAAF,CAAZ;AACAC,aAAQC,GAAR,CAAYH,KAAZ;AACAA,WAAMI,IAAN,CAAW,KAAX,EAAkB,YAAlB;AACAJ,WAAMI,IAAN,CAAW,MAAX,EAAmB,UAAnB;AACAJ,WAAMI,IAAN,CAAW,MAAX,EAAmBC,aAAa,uCAAhC;AACAJ,OAAE,MAAF,EAAUK,MAAV,CAAiBN,KAAjB;;AAEA;AACA,UAAKX,SAAL,GAAiBY,EAAE,SAAF,CAAjB;AACA,UAAKZ,SAAL,CAAekB,QAAf,CAAwB,UAAxB;AACAR,YAAOS,OAAP,CAAgB,KAAKnB,SAAL,CAAeoB,GAAf,CAAoB,CAApB,CAAhB;;AAEA;AACA,UAAKnB,SAAL,GAAiBW,EAAE,SAAF,CAAjB;AACA,UAAKX,SAAL,CAAeoB,SAAf,GAA2B,gDAA3B;AACA,UAAKpB,SAAL,CAAeiB,QAAf,CAAwB,qBAAxB;;AAEA,UAAKlB,SAAL,CAAeiB,MAAf,CAAuB,KAAKhB,SAA5B;;AAEA;AACA,UAAKqB,eAAL,GAAuBV,EAAE,SAAF,CAAvB;AACA,UAAKU,eAAL,CAAqBJ,QAArB,CAA8B,gBAA9B;AACA,UAAKjB,SAAL,CAAegB,MAAf,CAAuB,KAAKK,eAA5B;AACA,KArC6B;;AAwC9BC,eAAW,UAAUC,IAAV,EAAgBC,KAAhB,EAAwB;AAClC,SAAIC,SAASd,EAAE,UAAF,CAAb;AACA,UAAKU,eAAL,CAAqBL,MAArB,CAA6BS,MAA7B;AACA,UAAKJ,eAAL,CAAqBL,MAArB,CAA6BU,SAASC,cAAT,CAAwBJ,IAAxB,CAA7B;;AAEA,UAAKzB,OAAL,CAAayB,IAAb,IAAqBE,MAArB;AACA,KA9C6B;;AAiD9BG,gBAAY,UAAUL,IAAV,EAAgBE,MAAhB,EAAwBD,KAAxB,EAAgC;AAC3C,SAAI,CAAC,KAAK1B,OAAL,CAAayB,IAAb,CAAL,EAA0B;AACzB,WAAKD,SAAL,CAAgBC,IAAhB,EAAsBC,KAAtB;AACA;AACD,UAAK1B,OAAL,CAAayB,IAAb,EAAmBM,IAAnB,CAAwBJ,MAAxB;AACA,KAtD6B;;AAyD9BK,cAAU,UAAUC,QAAV,EAAqB;AAC9B;AACA,SAAIC,QAAQ,IAAKD,SAASE,IAAd,CAAqBF,SAASR,IAA9B,EAAoCQ,SAASG,KAA7C,CAAZ;AACA,SAAIH,SAASnC,OAAb,EAAuB;AACtB,WAAK,IAAIuC,IAAI,CAAb,EAAgBA,IAAIJ,SAASnC,OAAT,CAAiBwC,MAArC,EAA6CD,GAA7C,EAAmD;AAClD,WAAIE,MAAMN,SAASnC,OAAT,CAAiBuC,CAAjB,CAAV;AACAH,aAAMM,SAAN,CAAiB,IAAI/C,WAAJ,CAAgB8C,IAAId,IAApB,EAA0Bc,IAAIE,MAA9B,EAAsCF,IAAIG,QAA1C,CAAjB;AACA;AACD;;AAED,UAAK3C,MAAL,CAAamC,MAAMT,IAAnB,IAA4BS,KAA5B;AACAA,WAAMjC,SAAN,CAAgB0C,IAAhB,GAX8B,CAWP;AACvB,UAAK1C,SAAL,CAAeiB,MAAf,CAAuBgB,MAAMjC,SAA7B;;AAEA,SAAI2C,OAAO,IAAX;AACA;AACA,SAAIC,WAAWhC,EAAE,SAAF,CAAf;AACAgC,cAAS1B,QAAT,CAAkB,oBAAlB;AACA0B,cAASd,IAAT,CAAcG,MAAME,KAApB;AACAS,cAASC,KAAT,CAAe,UAASC,EAAT,EAAa;AAC3BH,WAAKI,WAAL,CAAiBd,KAAjB;AACA,MAFD;AAGAA,WAAMW,QAAN,GAAiBA,QAAjB;;AAEA;AACA,SAAII,WAAW,KAAf;AACA,UAAK,IAAIZ,IAAI,CAAb,EAAgBA,IAAI,KAAKnC,SAAL,CAAegD,QAAf,GAA0BZ,MAA9C,EAAsDD,GAAtD,EAA4D;AAC3D,UAAIc,KAAK,KAAKjD,SAAL,CAAegD,QAAf,GAA0Bb,CAA1B,CAAT;AACA,UAAIc,GAAGC,WAAH,GAAiBlB,MAAME,KAA3B,EAAmC;AAClCS,gBAASQ,YAAT,CAAuBF,EAAvB;AACAF,kBAAW,IAAX;AACA;AACA;AACD;AACD,SAAI,CAACA,QAAL,EAAgB;AACf;AACA,WAAK/C,SAAL,CAAegB,MAAf,CAAuB2B,QAAvB;AACA;AACD,KA/F6B;;AAkG9BS,eAAW,UAAU7B,IAAV,EAAiB;AAC3B,UAAKuB,WAAL,CAAkB,KAAKjD,MAAL,CAAY0B,IAAZ,CAAlB;AACA,KApG6B;;AAuG9BuB,iBAAa,UAAUd,KAAV,EAAkB;AAC9B,SAAIA,SAAS,KAAK/B,WAAd,IAA6B,KAAKA,WAAtC,EAAoD;AACnD,WAAKA,WAAL,CAAiBoD,MAAjB,CAAyB,KAAzB;AACA,WAAKpD,WAAL,CAAiB0C,QAAjB,CAA0B1B,QAA1B,CAAmC,oBAAnC;AACA,WAAKhB,WAAL,CAAiB0C,QAAjB,CAA0BW,WAA1B,CAAsC,QAAtC;AACA,WAAKrD,WAAL,GAAmB,IAAnB;AACA;;AAED,SAAIsD,SAAS,CAAEvB,MAAMjC,SAAN,CAAgByD,EAAhB,CAAmB,UAAnB,CAAf;AACAxB,WAAMqB,MAAN,CAAcE,MAAd;AACAvB,WAAMW,QAAN,CAAe1B,QAAf,CAAwB,oBAAxB;AACA,SAAGsC,MAAH,EAAW;AACVvB,YAAMjC,SAAN,CAAgB0D,IAAhB;AACAzB,YAAMW,QAAN,CAAe1B,QAAf,CAAwB,QAAxB;AACA,MAHD,MAGO;AACNe,YAAMjC,SAAN,CAAgB0C,IAAhB;AACAT,YAAMW,QAAN,CAAeW,WAAf,CAA2B,QAA3B;AACA;;AAED,SAAIC,MAAJ,EAAa;AACZ,WAAKtD,WAAL,GAAmB+B,KAAnB;AACA;AACD,KA7H6B;;AAgI9B0B,WAAO,YAAW;AACjB,UAAK,IAAIC,CAAT,IAAc,KAAK9D,MAAnB,EAA4B;AAC3B,UAAG,CAAC,KAAKA,MAAL,CAAY+D,cAAZ,CAA2BD,CAA3B,CAAJ,EAAmC;;AAEnC,WAAK9D,MAAL,CAAY8D,CAAZ,EAAeD,KAAf;AACA;AACD,KAtI6B;;AAyI9BG,eAAW,YAAW;AACrB,SAAIC,gBAAgBzD,OAAOC,WAAP,CAAmBC,GAAnB,EAApB;AACA,UAAKJ,YAAL,GAAoB,KAAKA,YAAL,GAAoB,GAApB,GAA0B,CAAC2D,gBAAgB,KAAK1D,aAAtB,IAAuC,GAArF;AACA,UAAKA,aAAL,GAAqB0D,aAArB;;AAEA,SAAI,KAAK7D,WAAT,EAAuB;AACtB,WAAKA,WAAL,CAAiB4D,SAAjB;AACA;AACD,KAjJ6B;;AAoJ9BE,cAAU,UAASC,QAAT,EAAmBC,WAAnB,EAAgC;AACzC,SAAIC,YAAY7D,OAAOC,WAAP,CAAmBC,GAAnB,KAA2B,KAAKH,aAAhD;;AAEA,UAAKF,SAAL,GAAiB,KAAKA,SAAL,GAAiB,GAAjB,GAAuBgE,YAAY,GAApD;;AAEA,SAAI,KAAKjE,WAAT,EAAuB;AACtB,WAAKA,WAAL,CAAiB8D,QAAjB;AACA;;AAED,UAAKnC,UAAL,CAAiB,IAAjB,EAAwB,KAAK1B,SAAL,CAAeiE,OAAf,CAAuB,CAAvB,CAAxB;AACA,UAAKvC,UAAL,CAAiB,KAAjB,EAAyBwC,KAAKC,KAAL,CAAW,OAAK,KAAKlE,YAArB,CAAzB;AACA,SAAI6D,QAAJ,EAAe;AACd,WAAKpC,UAAL,CAAiB,OAAjB,EAA0BoC,SAASM,SAAnC;AACA;AACD,SAAIL,WAAJ,EAAkB;AACjB;AACA,UAAIM,oBAAoBN,YAAYO,oBAAZ,EAAxB;AACA,WAAK5C,UAAL,CAAiB,WAAjB,EAA8B2C,iBAA9B;AACA;AACD;AAvK6B,IAApB,CAAX;;;;;;;;;;;;;;;;sBA0Ke/E,I","file":"menu.js","sourcesContent":["import DebugOption from \"./option.js\";\n\n\tvar Menu = mini.Class.subclass({\n\t\toptions: {},\n\t\tpanels: {},\n\t\tnumbers:{},\n\t\tcontainer: null,\n\t\tpanelMenu: null,\n\t\tactivePanel: null,\n\t\t\n\t\tdebugTime: 0,\n\t\tdebugTickAvg: 0.016,\n\t\tdebugRealTime: window.performance.now(),\n\t\t\n\t\tinitialize: function(parent) {\n\t\t\t// Inject the Stylesheet\n\t\t\tvar style = $(\"<link />\");\n\t\t\tconsole.log(style);\n\t\t\tstyle.attr(\"rel\", 'stylesheet');\n\t\t\tstyle.attr(\"type\", 'text/css');\n\t\t\tstyle.attr(\"href\", lively4url + '/src/mpm-debugger/src/debug/debug.css');\n\t\t\t$(\"body\").append(style);\n\n\t\t\t// Create the Debug Container\n\t\t\tthis.container = $('<div />');\n\t\t\tthis.container.addClass(\"ig_debug\");\n\t\t\tparent.prepend( this.container.get( 0 ) );\n\t\t\t\n\t\t\t// Create and add the Menu Container\n\t\t\tthis.panelMenu = $('<div />');\n\t\t\tthis.panelMenu.innerHTML = '<div class=\"ig_debug_head\">Impact.Debug:</div>';\n\t\t\tthis.panelMenu.addClass(\"ig_debug_panel_menu\");\n\t\t\t\n\t\t\tthis.container.append( this.panelMenu );\n\t\t\t\n\t\t\t// Create and add the Stats Container\n\t\t\tthis.numberContainer = $('<div />');\n\t\t\tthis.numberContainer.addClass('ig_debug_stats');\n\t\t\tthis.panelMenu.append( this.numberContainer );\n\t\t},\n\t\t\n\t\t\n\t\taddNumber: function( name, width ) {\n\t\t\tvar number = $('<span />');\t\t\n\t\t\tthis.numberContainer.append( number );\n\t\t\tthis.numberContainer.append( document.createTextNode(name) );\n\t\t\t\n\t\t\tthis.numbers[name] = number;\n\t\t},\n\t\t\n\t\t\n\t\tshowNumber: function( name, number, width ) {\n\t\t\tif( !this.numbers[name] ) {\n\t\t\t\tthis.addNumber( name, width );\n\t\t\t}\n\t\t\tthis.numbers[name].text(number);\n\t\t},\n\t\t\n\t\t\n\t\taddPanel: function( panelDef ) {\n\t\t\t// Create the panel and options\n\t\t\tvar panel = new (panelDef.type)( panelDef.name, panelDef.label );\n\t\t\tif( panelDef.options ) {\n\t\t\t\tfor( var i = 0; i < panelDef.options.length; i++ ) {\n\t\t\t\t\tvar opt = panelDef.options[i];\n\t\t\t\t\tpanel.addOption( new DebugOption(opt.name, opt.object, opt.property) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.panels[ panel.name ] = panel;\n\t\t\tpanel.container.hide();//.css(\"display\", 'none');\n\t\t\tthis.container.append( panel.container );\n\t\t\t\n\t\t\tvar that = this;\n\t\t\t// Create the menu item\n\t\t\tvar menuItem = $('<div />');\n\t\t\tmenuItem.addClass('ig_debug_menu_item');\n\t\t\tmenuItem.text(panel.label);\n\t\t\tmenuItem.click(function(ev) {\n\t\t\t\tthat.togglePanel(panel);\n\t\t\t});\n\t\t\tpanel.menuItem = menuItem;\n\t\t\t\n\t\t\t// Insert menu item in alphabetical order into the menu\n\t\t\tvar inserted = false;\n\t\t\tfor( var i = 1; i < this.panelMenu.children().length; i++ ) {\n\t\t\t\tvar cn = this.panelMenu.children()[i];\n\t\t\t\tif( cn.textContent > panel.label ) {\n\t\t\t\t\tmenuItem.insertBefore( cn );\n\t\t\t\t\tinserted = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif( !inserted ) {\n\t\t\t\t// Not inserted? Append at the end!\n\t\t\t\tthis.panelMenu.append( menuItem );\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\tshowPanel: function( name ) {\n\t\t\tthis.togglePanel( this.panels[name] );\n\t\t},\n\t\t\n\t\t\n\t\ttogglePanel: function( panel ) {\n\t\t\tif( panel != this.activePanel && this.activePanel ) {\n\t\t\t\tthis.activePanel.toggle( false );\n\t\t\t\tthis.activePanel.menuItem.addClass('ig_debug_menu_item');\n\t\t\t\tthis.activePanel.menuItem.removeClass('active');\n\t\t\t\tthis.activePanel = null;\n\t\t\t}\n\t\t\t\n\t\t\tvar active = !(panel.container.is(\":visible\"));\n\t\t\tpanel.toggle( active );\n\t\t\tpanel.menuItem.addClass('ig_debug_menu_item');\n\t\t\tif(active) {\n\t\t\t\tpanel.container.show();\n\t\t\t\tpanel.menuItem.addClass('active');\n\t\t\t} else {\n\t\t\t\tpanel.container.hide();\n\t\t\t\tpanel.menuItem.removeClass('active');\n\t\t\t}\n\n\t\t\tif( active ) {\n\t\t\t\tthis.activePanel = panel;\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\tready: function() {\n\t\t\tfor( var p in this.panels ) {\n\t\t\t\tif(!this.panels.hasOwnProperty(p)) continue;\n\n\t\t\t\tthis.panels[p].ready();\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\tbeforeRun: function() {\n\t\t\tvar timeBeforeRun = window.performance.now();\n\t\t\tthis.debugTickAvg = this.debugTickAvg * 0.8 + (timeBeforeRun - this.debugRealTime) * 0.2;\n\t\t\tthis.debugRealTime = timeBeforeRun;\n\t\t\t\n\t\t\tif( this.activePanel ) {\n\t\t\t\tthis.activePanel.beforeRun();\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\tafterRun: function(renderer, fluidSystem) {\n\t\t\tvar frameTime = window.performance.now() - this.debugRealTime;\n\t\t\t\n\t\t\tthis.debugTime = this.debugTime * 0.8 + frameTime * 0.2;\n\t\t\t\n\t\t\tif( this.activePanel ) {\n\t\t\t\tthis.activePanel.afterRun();\n\t\t\t}\n\t\t\t\n\t\t\tthis.showNumber( 'ms',  this.debugTime.toFixed(2) );\n\t\t\tthis.showNumber( 'fps',  Math.round(1000/this.debugTickAvg) );\n\t\t\tif( renderer ) {\n\t\t\t\tthis.showNumber( 'draws', renderer.drawCount );\n\t\t\t}\n\t\t\tif( fluidSystem ) {\n\t\t\t\t// calculate number of particles in all layers\n\t\t\t\tvar numberOfParticles = fluidSystem.getNumberOfParticles();\n\t\t\t\tthis.showNumber( 'particles', numberOfParticles );\n\t\t\t}\n\t\t}\n\t});\n\n\texport default Menu;\n"]}