forked from Botanical/BotanJS
Initial commit
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
(function(){
|
||||
// Logger
|
||||
// log things.
|
||||
var ns = __namespace( "Components" );
|
||||
|
||||
/** @type {System.utils.Perf} */
|
||||
var Perf = __import( "System.utils.Perf" );
|
||||
/** @type {System.Cycle} */
|
||||
var Cycle = __import( "System.Cycle" );
|
||||
/** @type {System.Cycle.Tick} */
|
||||
var sTick = __import( "System.Cycle.TICK" );
|
||||
/** @type {System.Global} */
|
||||
var _global = __import( "System.Global" );
|
||||
/** @type {System.Log} */
|
||||
var Log = __import( "System.Log" );
|
||||
/** @type {System.Debug} */
|
||||
var debug = __import( "System.Debug" );
|
||||
/** @type {Dandelion} */
|
||||
var Dand = __import( "Dandelion" );
|
||||
/** @type {Dandelion.IDOMElement} */
|
||||
var IDOMElement = __import( "Dandelion.IDOMElement" );
|
||||
/** @type {Components.DockPanel} */
|
||||
var DockPanel = __import( "Components.DockPanel" );
|
||||
|
||||
var objTreeView = function( obj, level, prepend )
|
||||
{
|
||||
var c = "";
|
||||
for (var p in obj)
|
||||
{
|
||||
if(typeof(obj[p]) == "object")
|
||||
{
|
||||
c +=
|
||||
prepend + Array( level + 1 ).join(" ")
|
||||
+ p + ":\n"
|
||||
+ objTreeView(
|
||||
obj[p]
|
||||
, level + 2
|
||||
, 0 < level ? prepend : Array( prepend.length ).join(" ")
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
c += prepend + Array(level + 1).join(" ") + p + ": " + obj[p] + "\n";
|
||||
}
|
||||
}
|
||||
return c;
|
||||
};
|
||||
|
||||
var Console = function ()
|
||||
{
|
||||
var stage = null
|
||||
, response_txt = null
|
||||
, lastMsg = null
|
||||
, time_txt = null
|
||||
, otop = ""
|
||||
, cycle = 0
|
||||
, sampling = 500
|
||||
, led = null
|
||||
|
||||
, ticking = function () {
|
||||
if( debugEnv )
|
||||
{
|
||||
time_txt.innerHTML = ( sTick.count - cycle ) + " cps, Sampling " + sampling + "ms";
|
||||
cycle = sTick.count;
|
||||
if(led) led.style.color = "yellowgreen";
|
||||
}
|
||||
}
|
||||
|
||||
, writeLine = function ( dat, type )
|
||||
{
|
||||
var res_txt = response_txt;
|
||||
|
||||
res_txt.value += "\n" + ( dat = ( dat != undefined ? dat.toString() : "undefined" ) );
|
||||
|
||||
lastMsg.textContent = lastMsg.innerText = dat;
|
||||
|
||||
// disabling color will make led blink since ticking is frequently setting the color to default
|
||||
led.style.color = "";
|
||||
if( otop ) stage.style.top = otop;
|
||||
res_txt.scrollTop = res_txt.scrollHeight;
|
||||
}
|
||||
|
||||
, writeError = function (dat)
|
||||
{
|
||||
writeLine( dat );
|
||||
led.setAttribute( "error", 1 );
|
||||
stage.setAttribute( "expanded", 1 );
|
||||
}
|
||||
, LogHandle = function( mesg, type )
|
||||
{
|
||||
if( type == Log.ERROR ) writeError( mesg );
|
||||
else writeLine( mesg );
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
response_txt = Dand.wrap('textarea', null, 'response');
|
||||
// Time stamp on the bottom right corner
|
||||
time_txt = Dand.wrap('span', 'time_stmp');
|
||||
|
||||
// append child
|
||||
document.body.appendChild(time_txt);
|
||||
|
||||
response_txt.readOnly = true;
|
||||
|
||||
stage = new DockPanel(
|
||||
"debugCons"
|
||||
, Dand.wrapc(
|
||||
'dbg_statusbar'
|
||||
, [
|
||||
Dand.wrapc('dbg_title', "Debug Console(Press F9)")
|
||||
, lastMsg = Dand.wrapc('dbg_lastMsg')
|
||||
, led = Dand.wrap('div', 'dbg_led', 'dbg_led', '\u25CF')
|
||||
]
|
||||
)
|
||||
, Dand.wrap( null, 'debugWrap', null, response_txt )
|
||||
, "dtop"
|
||||
);
|
||||
|
||||
var istage = IDOMElement( stage );
|
||||
|
||||
Cycle.next(
|
||||
function ()
|
||||
{
|
||||
// get otop
|
||||
otop = this.getDAttribute("top");
|
||||
}.bind( istage )
|
||||
);
|
||||
|
||||
var autoHide = function () { this.style.top = ""; }.bind(stage);
|
||||
Cycle.perma('gTicker' + Perf.uuid, ticking, sampling);
|
||||
Cycle.perma('gTicker' + Perf.uuid, autoHide, 3000);
|
||||
debugEnv = true;
|
||||
|
||||
ticking();
|
||||
|
||||
var f9Binding = function ( e )
|
||||
{
|
||||
e = e || window.event;
|
||||
if ( e.keyCode ) code = e.keyCode;
|
||||
else if ( e.which ) code = e.which;
|
||||
|
||||
if ( code == 120 )
|
||||
{
|
||||
if( this.hasAttribute( "expanded" ) )
|
||||
{
|
||||
this.removeAttribute( "expanded" );
|
||||
led.hasAttribute( "error" ) && led.removeAttribute( "error" );
|
||||
this.style.top = otop;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setAttribute( "expanded", "1" );
|
||||
}
|
||||
}
|
||||
}.bind( stage );
|
||||
|
||||
//Attach the var with the event = function
|
||||
if(document.addEventListener) document.addEventListener('keydown', f9Binding, false);
|
||||
else if(document.attachEvent) document.attachEvent('onkeydown', f9Binding);
|
||||
else document.onkeydown = f9Binding;
|
||||
|
||||
this.log = writeLine;
|
||||
this.logError = writeError;
|
||||
|
||||
Log.registerHandler( LogHandle );
|
||||
// This will output the debug info
|
||||
if( window["debug_info"] )
|
||||
{
|
||||
debug.Info( objTreeView( debug_info, 0, "[Server] " ) );
|
||||
}
|
||||
};
|
||||
|
||||
__static_method( Console, "objTreeView", objTreeView );
|
||||
|
||||
ns[ NS_EXPORT ]( EX_CLASS, "Console", Console );
|
||||
})();
|
||||
Reference in New Issue
Block a user