diff --git a/src/public/assets/css/rStats.css b/src/public/assets/css/rStats.css deleted file mode 100644 index 1f38baa..0000000 --- a/src/public/assets/css/rStats.css +++ /dev/null @@ -1,87 +0,0 @@ -.alarm{ - color: #b70000; - text-shadow: 0 0 0 #b70000, - 0 0 1px #fff, - 0 0 1px #fff, - 0 0 2px #fff, - 0 0 2px #fff, - 0 0 3px #fff, - 0 0 3px #fff, - 0 0 4px #fff, - 0 0 4px #fff; -} - -.rs-base{ - position: absolute; - z-index: 10000; - padding: 10px; - background-color: #222; - font-size: 10px; - line-height: 1.2em; - width: 350px; - font-family: 'Roboto Condensed', tahoma, sans-serif; - left: 0; - top: 0; - overflow: hidden; -} - -.rs-base h1{ - margin: 0; - padding: 0; - font-size: 1.4em; - color: #fff; - margin-bottom: 5px; - cursor: pointer; -} - -.rs-base div.rs-group{ - margin-bottom: 10px; -} - -.rs-base div.rs-group.hidden{ - display: none; -} - -.rs-base div.rs-fraction{ - position: relative; - margin-bottom: 5px; -} - -.rs-base div.rs-fraction p{ - width: 120px; - text-align: right; - margin: 0; - padding: 0; -} - -.rs-base div.rs-legend{ - position: absolute; - line-height: 1em; -} - -.rs-base div.rs-counter-base{ - position: relative; - margin: 2px 0; - height: 1em; - color: white; -} - -.rs-base span.rs-counter-id{ - position: absolute; - left: 0; - top: 0; -} - -.rs-base div.rs-counter-value{ - position: absolute; - left: 90px; - width: 30px; - height: 1em; - top: 0; - text-align: right; -} - -.rs-base canvas.rs-canvas{ - position: absolute; - right: 0; -} diff --git a/src/public/assets/css/app.css b/src/public/css/main.css similarity index 99% rename from src/public/assets/css/app.css rename to src/public/css/main.css index d1f2af3..e33d982 100644 --- a/src/public/assets/css/app.css +++ b/src/public/css/main.css @@ -74,3 +74,4 @@ body { position: absolute; top: calc(50% - 8px); left: calc(50% - 35px); } + diff --git a/src/public/index.html b/src/public/index.html index 04cb0be..e00033b 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -3,17 +3,17 @@ Three.js Webpack ES6 Boilerplate - - - +
Loading...
- - - - + + + + + + diff --git a/src/public/assets/js/app.js b/src/public/js/app.js similarity index 99% rename from src/public/assets/js/app.js rename to src/public/js/app.js index 3bd1f89..2fedfe3 100644 --- a/src/public/assets/js/app.js +++ b/src/public/js/app.js @@ -136,7 +136,7 @@ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "assets/js"; +/******/ __webpack_require__.p = "js"; /******/ /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); diff --git a/src/public/js/dat.gui.min.js b/src/public/js/dat.gui.min.js new file mode 100644 index 0000000..25b9846 --- /dev/null +++ b/src/public/js/dat.gui.min.js @@ -0,0 +1,13 @@ +/** + * dat-gui JavaScript Controller Library + * http://code.google.com/p/dat-gui + * + * Copyright 2011 Data Arts Team, Google Creative Lab + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dat={})}(this,function(e){"use strict";function t(e,t){var n=e.__state.conversionName.toString(),o=Math.round(e.r),i=Math.round(e.g),r=Math.round(e.b),s=e.a,a=Math.round(e.h),l=e.s.toFixed(1),d=e.v.toFixed(1);if(t||"THREE_CHAR_HEX"===n||"SIX_CHAR_HEX"===n){for(var c=e.hex.toString(16);c.length<6;)c="0"+c;return"#"+c}return"CSS_RGB"===n?"rgb("+o+","+i+","+r+")":"CSS_RGBA"===n?"rgba("+o+","+i+","+r+","+s+")":"HEX"===n?"0x"+e.hex.toString(16):"RGB_ARRAY"===n?"["+o+","+i+","+r+"]":"RGBA_ARRAY"===n?"["+o+","+i+","+r+","+s+"]":"RGB_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+"}":"RGBA_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+",a:"+s+"}":"HSV_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+"}":"HSVA_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+",a:"+s+"}":"unknown format"}function n(e,t,n){Object.defineProperty(e,t,{get:function(){return"RGB"===this.__state.space?this.__state[t]:(I.recalculateRGB(this,t,n),this.__state[t])},set:function(e){"RGB"!==this.__state.space&&(I.recalculateRGB(this,t,n),this.__state.space="RGB"),this.__state[t]=e}})}function o(e,t){Object.defineProperty(e,t,{get:function(){return"HSV"===this.__state.space?this.__state[t]:(I.recalculateHSV(this),this.__state[t])},set:function(e){"HSV"!==this.__state.space&&(I.recalculateHSV(this),this.__state.space="HSV"),this.__state[t]=e}})}function i(e){if("0"===e||S.isUndefined(e))return 0;var t=e.match(U);return S.isNull(t)?0:parseFloat(t[1])}function r(e){var t=e.toString();return t.indexOf(".")>-1?t.length-t.indexOf(".")-1:0}function s(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function a(e,t,n,o,i){return o+(e-t)/(n-t)*(i-o)}function l(e,t,n,o){e.style.background="",S.each(ee,function(i){e.style.cssText+="background: "+i+"linear-gradient("+t+", "+n+" 0%, "+o+" 100%); "})}function d(e){e.style.background="",e.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",e.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}function c(e,t,n){var o=document.createElement("li");return t&&o.appendChild(t),n?e.__ul.insertBefore(o,n):e.__ul.appendChild(o),e.onResize(),o}function u(e){X.unbind(window,"resize",e.__resizeHandler),e.saveToLocalStorageIfPossible&&X.unbind(window,"unload",e.saveToLocalStorageIfPossible)}function _(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];n.innerHTML=t?n.value+"*":n.value}function h(e,t,n){if(n.__li=t,n.__gui=e,S.extend(n,{options:function(t){if(arguments.length>1){var o=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:o,factoryArgs:[S.toArray(arguments)]})}if(S.isArray(t)||S.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),f(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof q){var o=new Q(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});S.each(["updateDisplay","onChange","onFinishChange","step","min","max"],function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}}),X.addClass(t,"has-slider"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof Q){var i=function(t){if(S.isNumber(n.__min)&&S.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=f(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=S.compose(i,n.min),n.max=S.compose(i,n.max)}else n instanceof K?(X.bind(t,"click",function(){X.fakeEvent(n.__checkbox,"click")}),X.bind(n.__checkbox,"click",function(e){e.stopPropagation()})):n instanceof Z?(X.bind(t,"click",function(){X.fakeEvent(n.__button,"click")}),X.bind(t,"mouseover",function(){X.addClass(n.__button,"hover")}),X.bind(t,"mouseout",function(){X.removeClass(n.__button,"hover")})):n instanceof $&&(X.addClass(t,"color"),n.updateDisplay=S.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=S.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&_(e.getRoot(),!0),t},n.setValue)}function p(e,t){var n=e.getRoot(),o=n.__rememberedObjects.indexOf(t.object);if(-1!==o){var i=n.__rememberedObjectIndecesToControllers[o];if(void 0===i&&(i={},n.__rememberedObjectIndecesToControllers[o]=i),i[t.property]=t,n.load&&n.load.remembered){var r=n.load.remembered,s=void 0;if(r[e.preset])s=r[e.preset];else{if(!r[se])return;s=r[se]}if(s[o]&&void 0!==s[o][t.property]){var a=s[o][t.property];t.initialValue=a,t.setValue(a)}}}}function f(e,t,n,o){if(void 0===t[n])throw new Error('Object "'+t+'" has no property "'+n+'"');var i=void 0;if(o.color)i=new $(t,n);else{var r=[t,n].concat(o.factoryArgs);i=ne.apply(e,r)}o.before instanceof z&&(o.before=o.before.__li),p(e,i),X.addClass(i.domElement,"c");var s=document.createElement("span");X.addClass(s,"property-name"),s.innerHTML=i.property;var a=document.createElement("div");a.appendChild(s),a.appendChild(i.domElement);var l=c(e,a,o.before);return X.addClass(l,he.CLASS_CONTROLLER_ROW),i instanceof $?X.addClass(l,"color"):X.addClass(l,H(i.getValue())),h(e,l,i),e.__controllers.push(i),i}function m(e,t){return document.location.href+"."+t}function g(e,t,n){var o=document.createElement("option");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function b(e,t){t.style.display=e.useLocalStorage?"block":"none"}function v(e){var t=e.__save_row=document.createElement("li");X.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),X.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML=" ",X.addClass(n,"button gears");var o=document.createElement("span");o.innerHTML="Save",X.addClass(o,"button"),X.addClass(o,"save");var i=document.createElement("span");i.innerHTML="New",X.addClass(i,"button"),X.addClass(i,"save-as");var r=document.createElement("span");r.innerHTML="Revert",X.addClass(r,"button"),X.addClass(r,"revert");var s=e.__preset_select=document.createElement("select");if(e.load&&e.load.remembered?S.each(e.load.remembered,function(t,n){g(e,n,n===e.preset)}):g(e,se,!1),X.bind(s,"change",function(){for(var t=0;t=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(A&&e.forEach&&e.forEach===A)e.forEach(t,n);else if(e.length===e.length+0){var o=void 0,i=void 0;for(o=0,i=e.length;o1?S.toArray(arguments):arguments[0];return S.each(O,function(t){if(t.litmus(e))return S.each(t.conversions,function(t,n){if(T=t.read(e),!1===L&&!1!==T)return L=T,T.conversionName=n,T.conversion=t,S.BREAK}),S.BREAK}),L},B=void 0,N={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),s=n*(1-i*t),a=n*(1-(1-i)*t),l=[[n,a,r],[s,n,r],[r,n,a],[r,s,n],[a,r,n],[n,r,s]][o];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,s=void 0,a=void 0;return 0===i?{h:NaN,s:0,v:0}:(a=r/i,s=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,(s/=6)<0&&(s+=1),{h:360*s,s:a,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(B=8*t)|e&~(255<this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,n)}},{key:"min",value:function(e){return this.__min=e,this}},{key:"max",value:function(e){return this.__max=e,this}},{key:"step",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=r(e),this}}]),t}(),Q=function(e){function t(e,n,o){function i(){l.__onFinishChange&&l.__onFinishChange.call(l,l.getValue())}function r(e){var t=d-e.clientY;l.setValue(l.getValue()+t*l.__impliedStep),d=e.clientY}function s(){X.unbind(window,"mousemove",r),X.unbind(window,"mouseup",s),i()}F(this,t);var a=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,o));a.__truncationSuspended=!1;var l=a,d=void 0;return a.__input=document.createElement("input"),a.__input.setAttribute("type","text"),X.bind(a.__input,"change",function(){var e=parseFloat(l.__input.value);S.isNaN(e)||l.setValue(e)}),X.bind(a.__input,"blur",function(){i()}),X.bind(a.__input,"mousedown",function(e){X.bind(window,"mousemove",r),X.bind(window,"mouseup",s),d=e.clientY}),X.bind(a.__input,"keydown",function(e){13===e.keyCode&&(l.__truncationSuspended=!0,this.blur(),l.__truncationSuspended=!1,i())}),a.updateDisplay(),a.domElement.appendChild(a.__input),a}return D(t,W),P(t,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():s(this.getValue(),this.__precision),j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),q=function(e){function t(e,n,o,i,r){function s(e){e.preventDefault();var t=_.__background.getBoundingClientRect();return _.setValue(a(e.clientX,t.left,t.right,_.__min,_.__max)),!1}function l(){X.unbind(window,"mousemove",s),X.unbind(window,"mouseup",l),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}function d(e){var t=e.touches[0].clientX,n=_.__background.getBoundingClientRect();_.setValue(a(t,n.left,n.right,_.__min,_.__max))}function c(){X.unbind(window,"touchmove",d),X.unbind(window,"touchend",c),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}F(this,t);var u=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:o,max:i,step:r})),_=u;return u.__background=document.createElement("div"),u.__foreground=document.createElement("div"),X.bind(u.__background,"mousedown",function(e){document.activeElement.blur(),X.bind(window,"mousemove",s),X.bind(window,"mouseup",l),s(e)}),X.bind(u.__background,"touchstart",function(e){1===e.touches.length&&(X.bind(window,"touchmove",d),X.bind(window,"touchend",c),d(e))}),X.addClass(u.__background,"slider"),X.addClass(u.__foreground,"slider-fg"),u.updateDisplay(),u.__background.appendChild(u.__foreground),u.domElement.appendChild(u.__background),u}return D(t,W),P(t,[{key:"updateDisplay",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+"%",j(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),Z=function(e){function t(e,n,o){F(this,t);var i=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__button=document.createElement("div"),i.__button.innerHTML=void 0===o?"Fire":o,X.bind(i.__button,"click",function(e){return e.preventDefault(),r.fire(),!1}),X.addClass(i.__button,"button"),i.domElement.appendChild(i.__button),i}return D(t,z),P(t,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(),$=function(e){function t(e,n){function o(e){u(e),X.bind(window,"mousemove",u),X.bind(window,"touchmove",u),X.bind(window,"mouseup",r),X.bind(window,"touchend",r)}function i(e){_(e),X.bind(window,"mousemove",_),X.bind(window,"touchmove",_),X.bind(window,"mouseup",s),X.bind(window,"touchend",s)}function r(){X.unbind(window,"mousemove",u),X.unbind(window,"touchmove",u),X.unbind(window,"mouseup",r),X.unbind(window,"touchend",r),c()}function s(){X.unbind(window,"mousemove",_),X.unbind(window,"touchmove",_),X.unbind(window,"mouseup",s),X.unbind(window,"touchend",s),c()}function a(){var e=R(this.value);!1!==e?(p.__color.__state=e,p.setValue(p.__color.toOriginal())):this.value=p.__color.toString()}function c(){p.__onFinishChange&&p.__onFinishChange.call(p,p.__color.toOriginal())}function u(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,o=n.clientX,i=n.clientY,r=(o-t.left)/(t.right-t.left),s=1-(i-t.top)/(t.bottom-t.top);return s>1?s=1:s<0&&(s=0),r>1?r=1:r<0&&(r=0),p.__color.v=s,p.__color.s=r,p.setValue(p.__color.toOriginal()),!1}function _(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),p.__color.h=360*n,p.setValue(p.__color.toOriginal()),!1}F(this,t);var h=V(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));h.__color=new I(h.getValue()),h.__temp=new I(0);var p=h;h.domElement=document.createElement("div"),X.makeSelectable(h.domElement,!1),h.__selector=document.createElement("div"),h.__selector.className="selector",h.__saturation_field=document.createElement("div"),h.__saturation_field.className="saturation-field",h.__field_knob=document.createElement("div"),h.__field_knob.className="field-knob",h.__field_knob_border="2px solid ",h.__hue_knob=document.createElement("div"),h.__hue_knob.className="hue-knob",h.__hue_field=document.createElement("div"),h.__hue_field.className="hue-field",h.__input=document.createElement("input"),h.__input.type="text",h.__input_textShadow="0 1px 1px ",X.bind(h.__input,"keydown",function(e){13===e.keyCode&&a.call(this)}),X.bind(h.__input,"blur",a),X.bind(h.__selector,"mousedown",function(){X.addClass(this,"drag").bind(window,"mouseup",function(){X.removeClass(p.__selector,"drag")})}),X.bind(h.__selector,"touchstart",function(){X.addClass(this,"drag").bind(window,"touchend",function(){X.removeClass(p.__selector,"drag")})});var f=document.createElement("div");return S.extend(h.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),S.extend(h.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:h.__field_knob_border+(h.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),S.extend(h.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),S.extend(h.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),S.extend(f.style,{width:"100%",height:"100%",background:"none"}),l(f,"top","rgba(0,0,0,0)","#000"),S.extend(h.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),d(h.__hue_field),S.extend(h.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:h.__input_textShadow+"rgba(0,0,0,0.7)"}),X.bind(h.__saturation_field,"mousedown",o),X.bind(h.__saturation_field,"touchstart",o),X.bind(h.__field_knob,"mousedown",o),X.bind(h.__field_knob,"touchstart",o),X.bind(h.__hue_field,"mousedown",i),X.bind(h.__hue_field,"touchstart",i),h.__saturation_field.appendChild(f),h.__selector.appendChild(h.__field_knob),h.__selector.appendChild(h.__saturation_field),h.__selector.appendChild(h.__hue_field),h.__hue_field.appendChild(h.__hue_knob),h.domElement.appendChild(h.__input),h.domElement.appendChild(h.__selector),h.updateDisplay(),h}return D(t,z),P(t,[{key:"updateDisplay",value:function(){var e=R(this.getValue());if(!1!==e){var t=!1;S.each(I.COMPONENTS,function(n){if(!S.isUndefined(e[n])&&!S.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&S.extend(this.__color.__state,e)}S.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;S.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+n+","+n+","+n+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,l(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),S.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+n+","+n+","+n+")",textShadow:this.__input_textShadow+"rgba("+o+","+o+","+o+",.7)"})}}]),t}(),ee=["-moz-","-o-","-webkit-","-ms-",""],te={load:function(e,t){var n=t||document,o=n.createElement("link");o.type="text/css",o.rel="stylesheet",o.href=e,n.getElementsByTagName("head")[0].appendChild(o)},inject:function(e,t){var n=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var i=n.getElementsByTagName("head")[0];try{i.appendChild(o)}catch(e){}}},ne=function(e,t){var n=e[t];return S.isArray(arguments[2])||S.isObject(arguments[2])?new Y(e,t,arguments[2]):S.isNumber(n)?S.isNumber(arguments[2])&&S.isNumber(arguments[3])?S.isNumber(arguments[4])?new q(e,t,arguments[2],arguments[3],arguments[4]):new q(e,t,arguments[2],arguments[3]):S.isNumber(arguments[4])?new Q(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new Q(e,t,{min:arguments[2],max:arguments[3]}):S.isString(n)?new J(e,t):S.isFunction(n)?new Z(e,t,""):S.isBoolean(n)?new K(e,t):null},oe=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},ie=function(){function e(){F(this,e),this.backgroundElement=document.createElement("div"),S.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),X.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),S.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;X.bind(this.backgroundElement,"click",function(){t.hide()})}return P(e,[{key:"show",value:function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),S.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var e=this,t=function t(){e.domElement.style.display="none",e.backgroundElement.style.display="none",X.unbind(e.domElement,"webkitTransitionEnd",t),X.unbind(e.domElement,"transitionend",t),X.unbind(e.domElement,"oTransitionEnd",t)};X.bind(this.domElement,"webkitTransitionEnd",t),X.bind(this.domElement,"transitionend",t),X.bind(this.domElement,"oTransitionEnd",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-X.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-X.getHeight(this.domElement)/2+"px"}}]),e}(),re=function(e){if(e&&"undefined"!=typeof window){var t=document.createElement("style");return t.setAttribute("type","text/css"),t.innerHTML=e,document.head.appendChild(t),e}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n");te.inject(re);var se="Default",ae=function(){try{return!!window.localStorage}catch(e){return!1}}(),le=void 0,de=!0,ce=void 0,ue=!1,_e=[],he=function e(t){var n=this,o=t||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),X.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],o=S.defaults(o,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),o=S.defaults(o,{resizable:o.autoPlace,hideable:o.autoPlace}),S.isUndefined(o.load)?o.load={preset:se}:o.preset&&(o.load.preset=o.preset),S.isUndefined(o.parent)&&o.hideable&&_e.push(this),o.resizable=S.isUndefined(o.parent)&&o.resizable,o.autoPlace&&S.isUndefined(o.scrollable)&&(o.scrollable=!0);var i=ae&&"true"===localStorage.getItem(m(this,"isLocal")),r=void 0,s=void 0;if(Object.defineProperties(this,{parent:{get:function(){return o.parent}},scrollable:{get:function(){return o.scrollable}},autoPlace:{get:function(){return o.autoPlace}},closeOnTop:{get:function(){return o.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:o.load.preset},set:function(e){n.parent?n.getRoot().preset=e:o.load.preset=e,E(this),n.revert()}},width:{get:function(){return o.width},set:function(e){o.width=e,w(n,e)}},name:{get:function(){return o.name},set:function(e){o.name=e,s&&(s.innerHTML=o.name)}},closed:{get:function(){return o.closed},set:function(t){o.closed=t,o.closed?X.addClass(n.__ul,e.CLASS_CLOSED):X.removeClass(n.__ul,e.CLASS_CLOSED),this.onResize(),n.__closeButton&&(n.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return o.load}},useLocalStorage:{get:function(){return i},set:function(e){ae&&(i=e,e?X.bind(window,"unload",r):X.unbind(window,"unload",r),localStorage.setItem(m(n,"isLocal"),e))}}}),S.isUndefined(o.parent)){if(this.closed=o.closed||!1,X.addClass(this.domElement,e.CLASS_MAIN),X.makeSelectable(this.domElement,!1),ae&&i){n.useLocalStorage=!0;var a=localStorage.getItem(m(this,"gui"));a&&(o.load=JSON.parse(a))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=e.TEXT_CLOSED,X.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),o.closeOnTop?(X.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(X.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),X.bind(this.__closeButton,"click",function(){n.closed=!n.closed})}else{void 0===o.closed&&(o.closed=!0);var l=document.createTextNode(o.name);X.addClass(l,"controller-name"),s=c(n,l);X.addClass(this.__ul,e.CLASS_CLOSED),X.addClass(s,"title"),X.bind(s,"click",function(e){return e.preventDefault(),n.closed=!n.closed,!1}),o.closed||(this.closed=!1)}o.autoPlace&&(S.isUndefined(o.parent)&&(de&&(ce=document.createElement("div"),X.addClass(ce,"dg"),X.addClass(ce,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(ce),de=!1),ce.appendChild(this.domElement),X.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||w(n,o.width)),this.__resizeHandler=function(){n.onResizeDebounced()},X.bind(window,"resize",this.__resizeHandler),X.bind(this.__ul,"webkitTransitionEnd",this.__resizeHandler),X.bind(this.__ul,"transitionend",this.__resizeHandler),X.bind(this.__ul,"oTransitionEnd",this.__resizeHandler),this.onResize(),o.resizable&&y(this),r=function(){ae&&"true"===localStorage.getItem(m(n,"isLocal"))&&localStorage.setItem(m(n,"gui"),JSON.stringify(n.getSaveObject()))},this.saveToLocalStorageIfPossible=r,o.parent||function(){var e=n.getRoot();e.width+=1,S.defer(function(){e.width-=1})}()};he.toggleHide=function(){ue=!ue,S.each(_e,function(e){e.domElement.style.display=ue?"none":""})},he.CLASS_AUTO_PLACE="a",he.CLASS_AUTO_PLACE_CONTAINER="ac",he.CLASS_MAIN="main",he.CLASS_CONTROLLER_ROW="cr",he.CLASS_TOO_TALL="taller-than-window",he.CLASS_CLOSED="closed",he.CLASS_CLOSE_BUTTON="close-button",he.CLASS_CLOSE_TOP="close-top",he.CLASS_CLOSE_BOTTOM="close-bottom",he.CLASS_DRAG="drag",he.DEFAULT_WIDTH=245,he.TEXT_CLOSED="Close Controls",he.TEXT_OPEN="Open Controls",he._keydownHandler=function(e){"text"===document.activeElement.type||72!==e.which&&72!==e.keyCode||he.toggleHide()},X.bind(window,"keydown",he._keydownHandler,!1),S.extend(he.prototype,{add:function(e,t){return f(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return f(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;S.defer(function(){t.onResize()})},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&ce.removeChild(this.domElement);var e=this;S.each(this.__folders,function(t){e.removeFolder(t)}),X.unbind(window,"keydown",he._keydownHandler,!1),u(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new he(t);this.__folders[e]=n;var o=c(this,n.domElement);return X.addClass(o,"folder"),n},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],u(e);var t=this;S.each(e.__folders,function(t){e.removeFolder(t)}),S.defer(function(){t.onResize()})},open:function(){this.closed=!1},close:function(){this.closed=!0},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=X.getOffset(e.__ul).top,n=0;S.each(e.__ul.childNodes,function(t){e.autoPlace&&t===e.__save_row||(n+=X.getHeight(t))}),window.innerHeight-t-20GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n'),this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;S.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&v(e),-1===e.__rememberedObjects.indexOf(t)&&e.__rememberedObjects.push(t)}),this.autoPlace&&w(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=x(this)),e.folders={},S.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=x(this),_(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[se]=x(this,!0)),this.load.remembered[e]=x(this),this.preset=e,g(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){S.each(this.__controllers,function(t){this.getRoot().load.remembered?p(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),S.each(this.__folders,function(e){e.revert(e)}),e||_(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&C(this.__listening)},updateDisplay:function(){S.each(this.__controllers,function(e){e.updateDisplay()}),S.each(this.__folders,function(e){e.updateDisplay()})}});var pe={Color:I,math:N,interpret:R},fe={Controller:z,BooleanController:K,OptionController:Y,StringController:J,NumberController:W,NumberControllerBox:Q,NumberControllerSlider:q,FunctionController:Z,ColorController:$},me={dom:X},ge={GUI:he},be=he,ve={color:pe,controllers:fe,dom:me,gui:ge,GUI:be};e.color=pe,e.controllers=fe,e.dom=me,e.gui=ge,e.GUI=be,e.default=ve,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/src/public/assets/js/main.app.js b/src/public/js/main.app.js similarity index 97% rename from src/public/assets/js/main.app.js rename to src/public/js/main.app.js index 3079758..336829a 100644 --- a/src/public/assets/js/main.app.js +++ b/src/public/js/main.app.js @@ -1,5 +1,16 @@ (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ +/***/ "./src/css/app.scss": +/*!**************************!*\ + !*** ./src/css/app.scss ***! + \**************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./src/css/app.scss?"); + +/***/ }), + /***/ "./src/js/app.js": /*!***********************!*\ !*** ./src/js/app.js ***! @@ -8,7 +19,7 @@ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _data_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./data/config */ \"./src/js/data/config.js\");\n/* harmony import */ var _utils_detector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/detector */ \"./src/js/utils/detector.js\");\n/* harmony import */ var _app_main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/main */ \"./src/js/app/main.js\");\n\n\n // Check environment and set the Config helper\n\nif (true) {\n console.log('----- RUNNING IN DEV ENVIRONMENT! -----');\n _data_config__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDev = true;\n}\n\nfunction init() {\n // Check for webGL capabilities\n if (!_utils_detector__WEBPACK_IMPORTED_MODULE_1__[\"default\"].webgl) {\n _utils_detector__WEBPACK_IMPORTED_MODULE_1__[\"default\"].addGetWebGLMessage();\n } else {\n var container = document.getElementById('appContainer');\n new _app_main__WEBPACK_IMPORTED_MODULE_2__[\"default\"](container);\n }\n}\n\ninit();\n\n//# sourceURL=webpack:///./src/js/app.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _data_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./data/config */ \"./src/js/data/config.js\");\n/* harmony import */ var _utils_detector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/detector */ \"./src/js/utils/detector.js\");\n/* harmony import */ var _app_main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/main */ \"./src/js/app/main.js\");\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../css/app.scss */ \"./src/css/app.scss\");\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_css_app_scss__WEBPACK_IMPORTED_MODULE_3__);\n\n\n // Styles\n\n // Check environment and set the Config helper\n\nif (true) {\n console.log('----- RUNNING IN DEV ENVIRONMENT! -----');\n _data_config__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDev = true;\n}\n\nfunction init() {\n // Check for webGL capabilities\n if (!_utils_detector__WEBPACK_IMPORTED_MODULE_1__[\"default\"].webgl) {\n _utils_detector__WEBPACK_IMPORTED_MODULE_1__[\"default\"].addGetWebGLMessage();\n } else {\n var container = document.getElementById('appContainer');\n new _app_main__WEBPACK_IMPORTED_MODULE_2__[\"default\"](container);\n }\n}\n\ninit();\n\n//# sourceURL=webpack:///./src/js/app.js?"); /***/ }), @@ -104,7 +115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Stats; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// Local vars for rStats\nvar rS, bS, glS, tS;\n\nvar Stats =\n/*#__PURE__*/\nfunction () {\n function Stats(renderer) {\n _classCallCheck(this, Stats);\n\n this.renderer = renderer;\n }\n\n _createClass(Stats, [{\n key: \"setUp\",\n value: function setUp() {\n bS = new BrowserStats();\n glS = new glStats();\n tS = new threeStats(this.renderer.threeRenderer);\n rS = new rStats({\n CSSPath: './assets/css/',\n userTimingAPI: true,\n values: {\n frame: {\n caption: 'Total frame time (ms)',\n over: 16,\n average: true,\n avgMs: 100\n },\n fps: {\n caption: 'Framerate (FPS)',\n below: 30\n },\n calls: {\n caption: 'Calls (three.js)',\n over: 3000\n },\n raf: {\n caption: 'Time since last rAF (ms)',\n average: true,\n avgMs: 100\n },\n rstats: {\n caption: 'rStats update (ms)',\n average: true,\n avgMs: 100\n },\n texture: {\n caption: 'GenTex',\n average: true,\n avgMs: 100\n }\n },\n groups: [{\n caption: 'Framerate',\n values: ['fps', 'raf']\n }, {\n caption: 'Frame Budget',\n values: ['frame', 'texture', 'setup', 'render']\n }],\n fractions: [{\n base: 'frame',\n steps: ['texture', 'setup', 'render']\n }],\n plugins: [bS, tS, glS]\n });\n }\n }], [{\n key: \"start\",\n value: function start() {\n rS('frame').start();\n glS.start();\n rS('rAF').tick();\n rS('FPS').frame();\n rS('render').start();\n }\n }, {\n key: \"end\",\n value: function end() {\n rS('render').end(); // render finished\n\n rS('frame').end(); // frame finished\n // Local rStats update\n\n rS('rStats').start();\n rS().update();\n rS('rStats').end();\n }\n }]);\n\n return Stats;\n}();\n\n\n\n//# sourceURL=webpack:///./src/js/app/helpers/stats.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Stats; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// Local vars for rStats\nvar rS, bS, glS, tS;\n\nvar Stats =\n/*#__PURE__*/\nfunction () {\n function Stats(renderer) {\n _classCallCheck(this, Stats);\n\n this.renderer = renderer;\n }\n\n _createClass(Stats, [{\n key: \"setUp\",\n value: function setUp() {\n bS = new BrowserStats();\n glS = new glStats();\n tS = new threeStats(this.renderer.threeRenderer);\n rS = new rStats({\n CSSPath: './css/',\n userTimingAPI: true,\n values: {\n frame: {\n caption: 'Total frame time (ms)',\n over: 16,\n average: true,\n avgMs: 100\n },\n fps: {\n caption: 'Framerate (FPS)',\n below: 30\n },\n calls: {\n caption: 'Calls (three.js)',\n over: 3000\n },\n raf: {\n caption: 'Time since last rAF (ms)',\n average: true,\n avgMs: 100\n },\n rstats: {\n caption: 'rStats update (ms)',\n average: true,\n avgMs: 100\n },\n texture: {\n caption: 'GenTex',\n average: true,\n avgMs: 100\n }\n },\n groups: [{\n caption: 'Framerate',\n values: ['fps', 'raf']\n }, {\n caption: 'Frame Budget',\n values: ['frame', 'texture', 'setup', 'render']\n }],\n fractions: [{\n base: 'frame',\n steps: ['texture', 'setup', 'render']\n }],\n plugins: [bS, tS, glS]\n });\n }\n }], [{\n key: \"start\",\n value: function start() {\n rS('frame').start();\n glS.start();\n rS('rAF').tick();\n rS('FPS').frame();\n rS('render').start();\n }\n }, {\n key: \"end\",\n value: function end() {\n rS('render').end(); // render finished\n\n rS('frame').end(); // frame finished\n // Local rStats update\n\n rS('rStats').start();\n rS().update();\n rS('rStats').end();\n }\n }]);\n\n return Stats;\n}();\n\n\n\n//# sourceURL=webpack:///./src/js/app/helpers/stats.js?"); /***/ }), diff --git a/src/public/js/rStats.extras.js b/src/public/js/rStats.extras.js new file mode 100644 index 0000000..2a88f8f --- /dev/null +++ b/src/public/js/rStats.extras.js @@ -0,0 +1,265 @@ +window.glStats = function () { + + var _rS = null; + + var _totalDrawArraysCalls = 0, + _totalDrawElementsCalls = 0, + _totalUseProgramCalls = 0, + _totalFaces = 0, + _totalVertices = 0, + _totalPoints = 0, + _totalBindTexures = 0; + + function _h ( f, c ) { + return function () { + c.apply( this, arguments ); + f.apply( this, arguments ); + }; + } + + WebGLRenderingContext.prototype.drawArrays = _h( WebGLRenderingContext.prototype.drawArrays, function () { + _totalDrawArraysCalls++; + if ( arguments[ 0 ] == this.POINTS ) _totalPoints += arguments[ 2 ]; + else _totalVertices += arguments[ 2 ]; + } ); + + WebGLRenderingContext.prototype.drawElements = _h( WebGLRenderingContext.prototype.drawElements, function () { + _totalDrawElementsCalls++; + _totalFaces += arguments[ 1 ] / 3; + _totalVertices += arguments[ 1 ]; + } ); + + WebGLRenderingContext.prototype.useProgram = _h( WebGLRenderingContext.prototype.useProgram, function () { + _totalUseProgramCalls++; + } ); + + WebGLRenderingContext.prototype.bindTexture = _h( WebGLRenderingContext.prototype.bindTexture, function () { + _totalBindTexures++; + } ); + + var _values = { + allcalls: { + over: 3000, + caption: 'Calls (hook)' + }, + drawelements: { + caption: 'drawElements (hook)' + }, + drawarrays: { + caption: 'drawArrays (hook)' + } + }; + + var _groups = [ { + caption: 'WebGL', + values: [ 'allcalls', 'drawelements', 'drawarrays', 'useprogram', 'bindtexture', 'glfaces', 'glvertices', 'glpoints' ] + } ]; + + var _fractions = [ { + base: 'allcalls', + steps: [ 'drawelements', 'drawarrays' ] + } ]; + + function _update () { + _rS( 'allcalls' ).set( _totalDrawArraysCalls + _totalDrawElementsCalls ); + _rS( 'drawElements' ).set( _totalDrawElementsCalls ); + _rS( 'drawArrays' ).set( _totalDrawArraysCalls ); + _rS( 'bindTexture' ).set( _totalBindTexures ); + _rS( 'useProgram' ).set( _totalUseProgramCalls ); + _rS( 'glfaces' ).set( _totalFaces ); + _rS( 'glvertices' ).set( _totalVertices ); + _rS( 'glpoints' ).set( _totalPoints ); + } + + function _start () { + _totalDrawArraysCalls = 0; + _totalDrawElementsCalls = 0; + _totalUseProgramCalls = 0; + _totalFaces = 0; + _totalVertices = 0; + _totalPoints = 0; + _totalBindTexures = 0; + } + + function _end () {} + + function _attach ( r ) { + _rS = r; + } + + return { + update: _update, + start: _start, + end: _end, + attach: _attach, + values: _values, + groups: _groups, + fractions: _fractions + }; + +}; + +window.threeStats = function ( renderer ) { + + var _rS = null; + + var _values = { + 'renderer.info.memory.geometries': { + caption: 'Geometries' + }, + 'renderer.info.memory.textures': { + caption: 'Textures' + }, + 'renderer.info.programs': { + caption: 'Programs' + }, + 'renderer.info.render.calls': { + caption: 'Calls' + }, + 'renderer.info.render.faces': { + caption: 'Faces', + over: 1000 + }, + 'renderer.info.render.points': { + caption: 'Points' + }, + 'renderer.info.render.vertices': { + caption: 'Vertices' + } + }; + + var _groups = [ { + caption: 'Three.js - Memory', + values: [ 'renderer.info.memory.geometries', 'renderer.info.programs', 'renderer.info.memory.textures' ] + }, { + caption: 'Three.js - Render', + values: [ 'renderer.info.render.calls', 'renderer.info.render.faces', 'renderer.info.render.points', 'renderer.info.render.vertices' ] + } ]; + + var _fractions = []; + + function _update () { + + _rS( 'renderer.info.memory.geometries' ).set( renderer.info.memory.geometries ); + //_rS( 'renderer.info.programs' ).set( renderer.info.programs.length ); + _rS( 'renderer.info.memory.textures' ).set( renderer.info.memory.textures ); + _rS( 'renderer.info.render.calls' ).set( renderer.info.render.calls ); + _rS( 'renderer.info.render.faces' ).set( renderer.info.render.faces ); + _rS( 'renderer.info.render.points' ).set( renderer.info.render.points ); + _rS( 'renderer.info.render.vertices' ).set( renderer.info.render.vertices ); + + } + + function _start () {} + + function _end () {} + + function _attach ( r ) { + _rS = r; + } + + return { + update: _update, + start: _start, + end: _end, + attach: _attach, + values: _values, + groups: _groups, + fractions: _fractions + }; + +}; + +/* + * From https://github.com/paulirish/memory-stats.js + */ + +window.BrowserStats = function () { + + var _rS = null; + + var _usedJSHeapSize = 0, + _totalJSHeapSize = 0; + + var memory = { + usedJSHeapSize: 0, + totalJSHeapSize: 0 + }; + + if ( window.performance && performance.memory ) + memory = performance.memory; + + if ( memory.totalJSHeapSize === 0 ) { + console.warn( 'totalJSHeapSize === 0... performance.memory is only available in Chrome .' ); + } + + var _values = { + memory: { + caption: 'Used Memory', + average: true, + avgMs: 1000, + over: 22 + }, + total: { + caption: 'Total Memory' + } + }; + + var _groups = [ { + caption: 'Browser', + values: [ 'memory', 'total' ] + } ]; + + var _fractions = [ { + base: 'total', + steps: [ 'memory' ] + } ]; + + var log1024 = Math.log( 1024 ); + + function _size ( v ) { + + var precision = 100; //Math.pow(10, 2); + var i = Math.floor( Math.log( v ) / log1024 ); + if( v === 0 ) i = 1; + return Math.round( v * precision / Math.pow( 1024, i ) ) / precision; // + ' ' + sizes[i]; + + } + + function _update () { + _usedJSHeapSize = _size( memory.usedJSHeapSize ); + _totalJSHeapSize = _size( memory.totalJSHeapSize ); + + _rS( 'memory' ).set( _usedJSHeapSize ); + _rS( 'total' ).set( _totalJSHeapSize ); + } + + function _start () { + _usedJSHeapSize = 0; + } + + function _end () {} + + function _attach ( r ) { + _rS = r; + } + + return { + update: _update, + start: _start, + end: _end, + attach: _attach, + values: _values, + groups: _groups, + fractions: _fractions + }; + +}; + +if (typeof module === 'object') { + module.exports = { + glStats: window.glStats, + threeStats: window.threeStats, + BrowserStats: window.BrowserStats + }; +} diff --git a/src/public/js/rStats.js b/src/public/js/rStats.js new file mode 100644 index 0000000..2266937 --- /dev/null +++ b/src/public/js/rStats.js @@ -0,0 +1,478 @@ +// performance.now() polyfill from https://gist.github.com/paulirish/5438650 +'use strict'; + +( function () { + + // prepare base perf object + if ( typeof window.performance === 'undefined' ) { + window.performance = {}; + } + + if ( !window.performance.now ) { + + var nowOffset = Date.now(); + + if ( performance.timing && performance.timing.navigationStart ) { + nowOffset = performance.timing.navigationStart; + } + + window.performance.now = function now () { + return Date.now() - nowOffset; + }; + + } + + if( !window.performance.mark ) { + window.performance.mark = function(){} + } + + if( !window.performance.measure ) { + window.performance.measure = function(){} + } + +} )(); + +/** + * @class rStats + * @param {rStats~Settings} [settings] Settings for the rStats instance. + */ + +/** + * @typedef {Object} rStats~Settings + * @property {Array.} [colours] An array of CSS colour values. + * @property {String} [CSSPath=''] Base URL where rStats.css is located. + * @property {Array.} [css] URLs of CSS or font files to import. + * @property {Object.} [values] Properties to use for each counter. + * @property {Array.} [groups] Define groups of counters. + * @property {Array.} [fractions] Define stacked counters. + * @property {Array.} [plugins] Additional plugins. + */ + +/** + * @typedef {Object} rStats~CounterProperties + * @property {String} [caption] Caption for this counter. + * @property {Boolean} [average=false] Whether the values should be averaged. + * @property {Number} [avgMs=1000] Duration for which the values should be averaged. + * @property {Number} [below] Value below which the graph should be highlighted. + * @property {Number} [over] Value over which the graph should be highlighted. + * @property {Boolean} [interpolate=true] Whether framerate should be interpolated. + */ + +window.rStats = function rStats ( settings ) { + + function iterateKeys ( array, callback ) { + var keys = Object.keys( array ); + for ( var j = 0, l = keys.length; j < l; j++ ) { + callback( keys[ j ] ); + } + } + + function importCSS ( url ) { + + var element = document.createElement( 'link' ); + element.href = url; + element.rel = 'stylesheet'; + element.type = 'text/css'; + document.getElementsByTagName( 'head' )[ 0 ].appendChild( element ); + + } + + var _settings = settings || {}; + var _colours = _settings.colours || [ '#850700', '#c74900', '#fcb300', '#284280', '#4c7c0c' ]; + + var _cssFont = 'https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700,300'; + var _cssRStats = ( _settings.CSSPath ? _settings.CSSPath : '' ) + 'rStats.css'; + + var _css = _settings.css || [ _cssFont, _cssRStats ]; + _css.forEach(function (uri) { + importCSS( uri ); + }); + + if ( !_settings.values ) _settings.values = {}; + + var _base, _div, _elHeight = 10, _elWidth = 200; + var _perfCounters = {}; + + + function Graph ( _dom, _id, _defArg ) { + + var _def = _defArg || {}; + var _canvas = document.createElement( 'canvas' ), + _ctx = _canvas.getContext( '2d' ), + _max = 0, + _current = 0; + + var c = _def.color ? _def.color : '#666666'; + + var _dotCanvas = document.createElement( 'canvas' ), + _dotCtx = _dotCanvas.getContext( '2d' ); + _dotCanvas.width = 1; + _dotCanvas.height = 2 * _elHeight; + _dotCtx.fillStyle = '#444444'; + _dotCtx.fillRect( 0, 0, 1, 2 * _elHeight ); + _dotCtx.fillStyle = c; + _dotCtx.fillRect( 0, _elHeight, 1, _elHeight ); + _dotCtx.fillStyle = '#ffffff'; + _dotCtx.globalAlpha = 0.5; + _dotCtx.fillRect( 0, _elHeight, 1, 1 ); + _dotCtx.globalAlpha = 1; + + var _alarmCanvas = document.createElement( 'canvas' ), + _alarmCtx = _alarmCanvas.getContext( '2d' ); + _alarmCanvas.width = 1; + _alarmCanvas.height = 2 * _elHeight; + _alarmCtx.fillStyle = '#444444'; + _alarmCtx.fillRect( 0, 0, 1, 2 * _elHeight ); + _alarmCtx.fillStyle = '#b70000'; + _alarmCtx.fillRect( 0, _elHeight, 1, _elHeight ); + _alarmCtx.globalAlpha = 0.5; + _alarmCtx.fillStyle = '#ffffff'; + _alarmCtx.fillRect( 0, _elHeight, 1, 1 ); + _alarmCtx.globalAlpha = 1; + + function _init () { + + _canvas.width = _elWidth; + _canvas.height = _elHeight; + _canvas.style.width = _canvas.width + 'px'; + _canvas.style.height = _canvas.height + 'px'; + _canvas.className = 'rs-canvas'; + _dom.appendChild( _canvas ); + + _ctx.fillStyle = '#444444'; + _ctx.fillRect( 0, 0, _canvas.width, _canvas.height ); + + } + + function _draw ( v, alarm ) { + _current += ( v - _current ) * 0.1; + _max *= 0.99; + if ( _current > _max ) _max = _current; + _ctx.drawImage( _canvas, 1, 0, _canvas.width - 1, _canvas.height, 0, 0, _canvas.width - 1, _canvas.height ); + if ( alarm ) { + _ctx.drawImage( _alarmCanvas, _canvas.width - 1, _canvas.height - _current * _canvas.height / _max - _elHeight ); + } else { + _ctx.drawImage( _dotCanvas, _canvas.width - 1, _canvas.height - _current * _canvas.height / _max - _elHeight ); + } + } + + _init(); + + return { + draw: _draw + }; + + } + + function StackGraph ( _dom, _num ) { + + var _canvas = document.createElement( 'canvas' ), + _ctx = _canvas.getContext( '2d' ); + + function _init () { + + _canvas.width = _elWidth; + _canvas.height = _elHeight * _num; + _canvas.style.width = _canvas.width + 'px'; + _canvas.style.height = _canvas.height + 'px'; + _canvas.className = 'rs-canvas'; + _dom.appendChild( _canvas ); + + _ctx.fillStyle = '#444444'; + _ctx.fillRect( 0, 0, _canvas.width, _canvas.height ); + + } + + function _draw ( v ) { + _ctx.drawImage( _canvas, 1, 0, _canvas.width - 1, _canvas.height, 0, 0, _canvas.width - 1, _canvas.height ); + var th = 0; + iterateKeys( v, function ( j ) { + var h = v[ j ] * _canvas.height; + _ctx.fillStyle = _colours[ j ]; + _ctx.fillRect( _canvas.width - 1, th, 1, h ); + th += h; + } ); + } + + _init(); + + return { + draw: _draw + }; + + } + + function PerfCounter ( id, group ) { + + var _id = id, + _time, + _value = 0, + _total = 0, + _averageValue = 0, + _accumValue = 0, + _accumStart = performance.now(), + _accumSamples = 0, + _dom = document.createElement( 'div' ), + _spanId = document.createElement( 'span' ), + _spanValue = document.createElement( 'div' ), + _spanValueText = document.createTextNode( '' ), + _def = _settings ? _settings.values[ _id.toLowerCase() ] : null, + _graph = new Graph( _dom, _id, _def ), + _started = false; + + _spanId.className = 'rs-counter-id'; + _spanId.textContent = ( _def && _def.caption ) ? _def.caption : _id; + + _spanValue.className = 'rs-counter-value'; + _spanValue.appendChild( _spanValueText ); + + _dom.appendChild( _spanId ); + _dom.appendChild( _spanValue ); + if ( group ) group.div.appendChild( _dom ); + else _div.appendChild( _dom ); + + _time = performance.now(); + + function _average ( v ) { + if ( _def && _def.average ) { + _accumValue += v; + _accumSamples++; + var t = performance.now(); + if ( t - _accumStart >= ( _def.avgMs || 1000 ) ) { + _averageValue = _accumValue / _accumSamples; + _accumValue = 0; + _accumStart = t; + _accumSamples = 0; + } + } + } + + function _start () { + _time = performance.now(); + if( _settings.userTimingAPI ) performance.mark( _id + '-start' ); + _started = true; + } + + function _end () { + _value = performance.now() - _time; + if( _settings.userTimingAPI ) { + performance.mark( _id + '-end' ); + if( _started ) { + performance.measure( _id, _id + '-start', _id + '-end' ); + } + } + _average( _value ); + } + + function _tick () { + _end(); + _start(); + } + + function _draw () { + var v = ( _def && _def.average ) ? _averageValue : _value; + _spanValueText.nodeValue = Math.round( v * 100 ) / 100; + var a = ( _def && ( ( _def.below && _value < _def.below ) || ( _def.over && _value > _def.over ) ) ); + _graph.draw( _value, a ); + _dom.className = a ? 'rs-counter-base alarm' : 'rs-counter-base'; + + } + + function _frame () { + var t = performance.now(); + var e = t - _time; + _total++; + if ( e > 1000 ) { + if ( _def && _def.interpolate === false ) { + _value = _total; + } else { + _value = _total * 1000 / e; + } + _total = 0; + _time = t; + _average( _value ); + } + } + + function _set ( v ) { + _value = v; + _average( _value ); + } + + return { + set: _set, + start: _start, + tick: _tick, + end: _end, + frame: _frame, + value: function () { + return _value; + }, + draw: _draw + }; + + } + + function sample () { + + var _value = 0; + + function _set ( v ) { + _value = v; + } + + return { + set: _set, + value: function () { + return _value; + } + }; + + } + + function _perf ( idArg ) { + + var id = idArg.toLowerCase(); + if ( id === undefined ) id = 'default'; + if ( _perfCounters[ id ] ) return _perfCounters[ id ]; + + var group = null; + if ( _settings && _settings.groups ) { + iterateKeys( _settings.groups, function ( j ) { + var g = _settings.groups[ parseInt( j, 10 ) ]; + if ( !group && g.values.indexOf( id.toLowerCase() ) !== -1 ) { + group = g; + } + } ); + } + + var p = new PerfCounter( id, group ); + _perfCounters[ id ] = p; + return p; + + } + + function _init () { + + if ( _settings.plugins ) { + if ( !_settings.values ) _settings.values = {}; + if ( !_settings.groups ) _settings.groups = []; + if ( !_settings.fractions ) _settings.fractions = []; + for ( var j = 0; j < _settings.plugins.length; j++ ) { + _settings.plugins[ j ].attach( _perf ); + iterateKeys( _settings.plugins[ j ].values, function ( k ) { + _settings.values[ k ] = _settings.plugins[ j ].values[ k ]; + } ); + _settings.groups = _settings.groups.concat( _settings.plugins[ j ].groups ); + _settings.fractions = _settings.fractions.concat( _settings.plugins[ j ].fractions ); + } + } else { + _settings.plugins = {}; + } + + _base = document.createElement( 'div' ); + _base.className = 'rs-base'; + _div = document.createElement( 'div' ); + _div.className = 'rs-container'; + _div.style.height = 'auto'; + _base.appendChild( _div ); + document.body.appendChild( _base ); + + if ( !_settings ) return; + + if ( _settings.groups ) { + iterateKeys( _settings.groups, function ( j ) { + var g = _settings.groups[ parseInt( j, 10 ) ]; + var div = document.createElement( 'div' ); + div.className = 'rs-group'; + g.div = div; + var h1 = document.createElement( 'h1' ); + h1.textContent = g.caption; + h1.addEventListener( 'click', function ( e ) { + this.classList.toggle( 'hidden' ); + e.preventDefault(); + }.bind( div ) ); + _div.appendChild( h1 ); + _div.appendChild( div ); + } ); + } + + if ( _settings.fractions ) { + iterateKeys( _settings.fractions, function ( j ) { + var f = _settings.fractions[ parseInt( j, 10 ) ]; + var div = document.createElement( 'div' ); + div.className = 'rs-fraction'; + var legend = document.createElement( 'div' ); + legend.className = 'rs-legend'; + + var h = 0; + iterateKeys( _settings.fractions[ j ].steps, function ( k ) { + var p = document.createElement( 'p' ); + p.textContent = _settings.fractions[ j ].steps[ k ]; + p.style.color = _colours[ h ]; + legend.appendChild( p ); + h++; + } ); + div.appendChild( legend ); + div.style.height = h * _elHeight + 'px'; + f.div = div; + var graph = new StackGraph( div, h ); + f.graph = graph; + _div.appendChild( div ); + } ); + } + + } + + function _update () { + + iterateKeys( _settings.plugins, function ( j ) { + _settings.plugins[ j ].update(); + } ); + + iterateKeys( _perfCounters, function ( j ) { + _perfCounters[ j ].draw(); + } ); + + if ( _settings && _settings.fractions ) { + iterateKeys( _settings.fractions, function ( j ) { + var f = _settings.fractions[ parseInt( j, 10 ) ]; + var v = []; + var base = _perfCounters[ f.base.toLowerCase() ]; + if ( base ) { + base = base.value(); + iterateKeys( _settings.fractions[ j ].steps, function ( k ) { + var s = _settings.fractions[ j ].steps[ parseInt( k, 10 ) ].toLowerCase(); + var val = _perfCounters[ s ]; + if ( val ) { + v.push( val.value() / base ); + } + } ); + } + f.graph.draw( v ); + } ); + } + + /*if( _height != _div.clientHeight ) { + _height = _div.clientHeight; + _base.style.height = _height + 2 * _elHeight + 'px'; + console.log( _base.clientHeight ); + }*/ + + } + + _init(); + + return function ( id ) { + if ( id ) return _perf( id ); + return { + element: _base, + update: _update + }; + }; + +} + +if (typeof module === 'object') { + module.exports = window.rStats; +} diff --git a/src/public/assets/js/vendors.app.js b/src/public/js/vendors.app.js similarity index 100% rename from src/public/assets/js/vendors.app.js rename to src/public/js/vendors.app.js