forked from Botanical/BotanJS
		
	Initial commit
This commit is contained in:
		
							
								
								
									
										75
									
								
								botanjs/src/System/Cycle/Trigger.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								botanjs/src/System/Cycle/Trigger.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Cycle.Trigger" );
 | 
			
		||||
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle = __import( "System.Cycle" );
 | 
			
		||||
 | 
			
		||||
	// trigger list
 | 
			
		||||
	var tList = [];
 | 
			
		||||
	var stepperId = -1;
 | 
			
		||||
 | 
			
		||||
	var stepper = function( args )
 | 
			
		||||
	{
 | 
			
		||||
		var thisTime = new Date().getTime();
 | 
			
		||||
		for ( var i in tList )
 | 
			
		||||
		{
 | 
			
		||||
			var f = tList[i];
 | 
			
		||||
			if( f && thisTime > f[2] )
 | 
			
		||||
			{
 | 
			
		||||
				try
 | 
			
		||||
				{
 | 
			
		||||
					if( f[0]() )
 | 
			
		||||
					{
 | 
			
		||||
						f[1]();
 | 
			
		||||
						delete tList[i];
 | 
			
		||||
					}
 | 
			
		||||
					else f[2] = thisTime + f[3];
 | 
			
		||||
				}
 | 
			
		||||
				catch(e)
 | 
			
		||||
				{
 | 
			
		||||
					debug.Error(e);
 | 
			
		||||
					delete tList[i];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var registerTrigger = function ( trigger, handler, peekInt )
 | 
			
		||||
	{
 | 
			
		||||
		tList[ tList.length ] = [ trigger, handler, new Date().getTime() + peekInt, peekInt ]
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var heightTrigger = function ( __element, value, handler )
 | 
			
		||||
	{
 | 
			
		||||
		var k = function () {
 | 
			
		||||
			return ( this.a.clientHeight == this.b );
 | 
			
		||||
		}.bind({ a: __element, b: value });
 | 
			
		||||
 | 
			
		||||
		registerTrigger( k, handler, 50 );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var transitionTrigger = function (__style, value, handler)
 | 
			
		||||
	{
 | 
			
		||||
		var k = function ()
 | 
			
		||||
		{
 | 
			
		||||
			return ( this.a.transition == this.b );
 | 
			
		||||
		}.bind({a: __style, b: value });
 | 
			
		||||
		registerTrigger( k, handler, 50 );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var regTick = function( e )
 | 
			
		||||
	{
 | 
			
		||||
		if( stepperId < 0 )
 | 
			
		||||
		{
 | 
			
		||||
			stepperId = Cycle.TICK.putStepper( stepper );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns.addEventListener( "NS_IMPORT", regTick );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "register", registerTrigger );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "transition", transitionTrigger );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "height", heightTrigger );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_TRIGGER ]( TGR_IMPORT, regTick );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										108
									
								
								botanjs/src/System/Cycle/_this.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								botanjs/src/System/Cycle/_this.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Cycle" );
 | 
			
		||||
 | 
			
		||||
	/** @type {System.Tick} */
 | 
			
		||||
	var utils                   = __import( "System.utils" );
 | 
			
		||||
	/** @type {System.Tick} */
 | 
			
		||||
	var Tick                    = __import( "System.Tick" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                   = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var tList = [];
 | 
			
		||||
 | 
			
		||||
	var stepper = function()
 | 
			
		||||
	{
 | 
			
		||||
		var thisTime = new Date().getTime();
 | 
			
		||||
		// 0: Callback
 | 
			
		||||
		// 1: scheduled run time
 | 
			
		||||
		// 2: Permanent
 | 
			
		||||
		// ( 3: id )
 | 
			
		||||
		// 4: interval
 | 
			
		||||
		for ( var i in tList )
 | 
			
		||||
		{
 | 
			
		||||
			var f = tList[i];
 | 
			
		||||
			if( f && thisTime > f[1] )
 | 
			
		||||
			{
 | 
			
		||||
				try
 | 
			
		||||
				{
 | 
			
		||||
					f[0]();
 | 
			
		||||
				}
 | 
			
		||||
				catch(e)
 | 
			
		||||
				{
 | 
			
		||||
					debug.Error(e);
 | 
			
		||||
					delete tList[i];
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if( f[2] )
 | 
			
		||||
				{
 | 
			
		||||
					delete tList[i];
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					f[1] = thisTime + f[4];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// Should bind "func" before register
 | 
			
		||||
	var registerDelay = function (func, milliSec)
 | 
			
		||||
	{
 | 
			
		||||
		tList[ tList.length ] = [ func, new Date().getTime() + milliSec, true ];
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var registerPermanentTicker = function ( id, func, interval )
 | 
			
		||||
	{
 | 
			
		||||
		for ( var i in tList )
 | 
			
		||||
		{
 | 
			
		||||
			if( tList[i][3] == id )
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		tList[ tList.length ] = [ func, new Date().getTime() + interval, false, id, interval ];
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var deletePermanentTicker = function ( id )
 | 
			
		||||
	{
 | 
			
		||||
		// 3: id
 | 
			
		||||
		for ( var i in tList )
 | 
			
		||||
		{
 | 
			
		||||
			if( tList[i][3] == id )
 | 
			
		||||
				delete tList[i];
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var next = function( func )
 | 
			
		||||
	{
 | 
			
		||||
		tList[ tList.length ] = [ func, 0, true ];
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var ourTick = new Tick();
 | 
			
		||||
	ourTick.putStepper( stepper );
 | 
			
		||||
 | 
			
		||||
	var gTickStart = function( e )
 | 
			
		||||
	{
 | 
			
		||||
		e.target.removeEventListener( "NS_IMPORT", gTickStart );
 | 
			
		||||
 | 
			
		||||
		var TICK = __import( "System.Cycle.TICK", true );
 | 
			
		||||
 | 
			
		||||
		if( TICK != ourTick && TICK.started )
 | 
			
		||||
		{
 | 
			
		||||
			debug.Info( "[System.Cycle] Global Tick exists" );
 | 
			
		||||
			ourTick = null;
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		debug.Info( "[System.Cycle] Creating global Tick" );
 | 
			
		||||
		ourTick.start();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns.addEventListener( "NS_IMPORT", gTickStart );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "next", next );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "delay", registerDelay );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "perma", registerPermanentTicker );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "permaRemove", deletePermanentTicker );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_READONLY_GETTER, "TICK", function(){ return ourTick; } );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										46
									
								
								botanjs/src/System/Debug.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								botanjs/src/System/Debug.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Debug" );
 | 
			
		||||
	/** @type {System.Log} */
 | 
			
		||||
	var Log = __import( "System.Log" );
 | 
			
		||||
	/** @type {System.Global} */
 | 
			
		||||
	var _global = __import( "System.Global" );
 | 
			
		||||
 | 
			
		||||
	var st_info = _global.debug;
 | 
			
		||||
	var st_error = true;
 | 
			
		||||
 | 
			
		||||
	var Error = function( e )
 | 
			
		||||
	{
 | 
			
		||||
		if( st_error )
 | 
			
		||||
		Log.writeLine( e.name + "\n\t" + e.message + "\n\t" + e.stack, Log.ERROR );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var Info = function(e)
 | 
			
		||||
	{
 | 
			
		||||
		if( st_info )
 | 
			
		||||
		Log.writeLine( e, Log.INFO );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var turnOff = function( what )
 | 
			
		||||
	{
 | 
			
		||||
		if( what == "info" ) st_info = false;
 | 
			
		||||
		else if( what == "error" ) st_error = false;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var turnOn = function( what )
 | 
			
		||||
	{
 | 
			
		||||
		if( what == "info" ) st_info = true;
 | 
			
		||||
		else if( what == "error" ) st_error = true;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/* {{{ Root log override */
 | 
			
		||||
	BotanJS.log.write = Info;
 | 
			
		||||
 | 
			
		||||
	while( !BotanJS.log.end() )
 | 
			
		||||
		Info( BotanJS.log.read() );
 | 
			
		||||
	/* End Root log override }}}*/
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "Error", Error );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "Info", Info );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "turnOff", turnOff );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "turnOn", turnOn );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										16
									
								
								botanjs/src/System/Global.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								botanjs/src/System/Global.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Global" );
 | 
			
		||||
 | 
			
		||||
	var debug = function()
 | 
			
		||||
	{
 | 
			
		||||
		return window[ "debugEnv" ] && window[ "debugEnv" ];
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// for IE < 10
 | 
			
		||||
	var IE = Boolean( document[ "all" ] );
 | 
			
		||||
	var ALLOWED_ORIGINS = window[ "allowed_origins" ] || [];
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_READONLY_GETTER, "debug", debug );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CONST, "IE", IE );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CONST, "ALLOWED_ORIGINS", ALLOWED_ORIGINS );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										46
									
								
								botanjs/src/System/Log.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								botanjs/src/System/Log.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Log" );
 | 
			
		||||
	var handler = [];
 | 
			
		||||
 | 
			
		||||
	var SYSTEM = 1;
 | 
			
		||||
	var INFO = 16;
 | 
			
		||||
	var ERROR = 32;
 | 
			
		||||
 | 
			
		||||
	var writeLine = function ( mesg, type )
 | 
			
		||||
	{
 | 
			
		||||
		type = ( type === undefined ) ? INFO : type;
 | 
			
		||||
 | 
			
		||||
		var handled = false;
 | 
			
		||||
		for( var i in handler )
 | 
			
		||||
		{
 | 
			
		||||
			handler[i]( mesg, type );
 | 
			
		||||
			handled = true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( !handled
 | 
			
		||||
			&& window[ "console" ]
 | 
			
		||||
			&& console.log
 | 
			
		||||
		) console.log( mesg );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var registerHandler = function( func )
 | 
			
		||||
	{
 | 
			
		||||
		var index = -1;
 | 
			
		||||
		handler[ index = handler.length ] = func;
 | 
			
		||||
 | 
			
		||||
		return index;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var removeHandler = function( index )
 | 
			
		||||
	{
 | 
			
		||||
		delete handler[ index ];
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "writeLine", writeLine );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "registerHandler", registerHandler );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "removeHandler", removeHandler );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CONST, "INFO", INFO );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CONST, "ERROR", ERROR );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CONST, "SYSTEM", SYSTEM );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										75
									
								
								botanjs/src/System/Net/ClassLoader.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								botanjs/src/System/Net/ClassLoader.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Net" );
 | 
			
		||||
	var className = "ClassLoader";
 | 
			
		||||
 | 
			
		||||
	/** @type {System.utils} */
 | 
			
		||||
	var utils                        = __import( "System.utils" );
 | 
			
		||||
	/** @type {System.utils.IKey} */
 | 
			
		||||
	var IKey                         = __import( "System.utils.IKey" );
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                         = __import( "Dandelion" );
 | 
			
		||||
 | 
			
		||||
	var loadFile = function ( sapi, request, mode )
 | 
			
		||||
	{
 | 
			
		||||
		var head = Dand.tag( "head" )[0];
 | 
			
		||||
 | 
			
		||||
		// Add css
 | 
			
		||||
		head.appendChild(
 | 
			
		||||
			Dand.wrapna(
 | 
			
		||||
				"link"
 | 
			
		||||
				, IKey.quickDef(
 | 
			
		||||
					"rel", "stylesheet"
 | 
			
		||||
					, "type", "text/css"
 | 
			
		||||
					, "href", sapi + mode + "css/" + request
 | 
			
		||||
				)
 | 
			
		||||
			)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		// Add js
 | 
			
		||||
		head.appendChild(
 | 
			
		||||
			Dand.wrapna(
 | 
			
		||||
				"script"
 | 
			
		||||
				, IKey.quickDef(
 | 
			
		||||
					"type", "text/javascript"
 | 
			
		||||
					, "src",  sapi + mode + "js/" + request
 | 
			
		||||
				)
 | 
			
		||||
			)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var Loader = function( sapi, mode )
 | 
			
		||||
	{
 | 
			
		||||
		mode = ( mode === undefined ) ? "o" : mode;
 | 
			
		||||
 | 
			
		||||
		this.load = function( classes, handler )
 | 
			
		||||
		{
 | 
			
		||||
			if( !classes.join ) classes = [ classes ];
 | 
			
		||||
 | 
			
		||||
			var excludes = BotanJS.getDef();
 | 
			
		||||
			// Excludes
 | 
			
		||||
			utils.objMap( excludes , function( v ) { return "-" + v; } );
 | 
			
		||||
 | 
			
		||||
			var loadc = null;
 | 
			
		||||
			var onLoad = function( e )
 | 
			
		||||
			{
 | 
			
		||||
				if( classes.indexOf( e.data.name ) < 0 ) return;
 | 
			
		||||
				handler( e.data.name );
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			var sp = mode ? { 'o': '/', 'r': '/' }[ mode ] : ',';
 | 
			
		||||
 | 
			
		||||
			loadFile(
 | 
			
		||||
				sapi
 | 
			
		||||
				, classes.join( sp ) + sp + excludes.join( sp )
 | 
			
		||||
				, mode
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
			BotanJS.addEventListener( "NS_INIT", onLoad );
 | 
			
		||||
			BotanJS.addEventListener( "NS_EXPORT", onLoad );
 | 
			
		||||
		};
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CLASS, "ClassLoader", Loader );
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										141
									
								
								botanjs/src/System/Net/_this.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								botanjs/src/System/Net/_this.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns                              = __namespace( "System.Net" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                           = __import( "System.Debug" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                      = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
 | 
			
		||||
	// Handles all http transfers
 | 
			
		||||
	var getData = function (uri, handler, failedHandler)
 | 
			
		||||
	{
 | 
			
		||||
		var request = new XMLHttpRequest();
 | 
			
		||||
		debug.Info("[Net] GET: " + uri);
 | 
			
		||||
		request.onreadystatechange = function()
 | 
			
		||||
		{
 | 
			
		||||
			/*
 | 
			
		||||
				0: request not initialized 
 | 
			
		||||
				1: server connection established
 | 
			
		||||
				2: request received 
 | 
			
		||||
				3: processing request 
 | 
			
		||||
				4: request finished and response is ready
 | 
			
		||||
			*/
 | 
			
		||||
			if(request.readyState == 2)
 | 
			
		||||
			{
 | 
			
		||||
				debug.Info("[Net] GET R2:" + uri);
 | 
			
		||||
			}
 | 
			
		||||
			else if (request.readyState == 4)
 | 
			
		||||
			{
 | 
			
		||||
				debug.Info("[Net] GET R4:" + uri);
 | 
			
		||||
				if (request.status == 200)
 | 
			
		||||
				{
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						handler(request.responseText);
 | 
			
		||||
					}
 | 
			
		||||
					catch(e)
 | 
			
		||||
					{
 | 
			
		||||
						debug.Error(e);
 | 
			
		||||
						failedHandler(null);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					debug.Info("[Net] Status: " + request.status.toString());
 | 
			
		||||
					debug.Info(request.responseText);
 | 
			
		||||
					failedHandler && failedHandler(null);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		request.open("GET", uri, true);
 | 
			
		||||
		request.send();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var postFile = function (uri, data, handlers)
 | 
			
		||||
	{
 | 
			
		||||
		var request = new XMLHttpRequest()
 | 
			
		||||
			, generalExchange = new IDOMObject( request )
 | 
			
		||||
			, uploadExchange = new IDOMObject( request.upload )
 | 
			
		||||
		;
 | 
			
		||||
 | 
			
		||||
		if ( uploadExchange ) {
 | 
			
		||||
			handlers.progress && uploadExchange.addEventListener("Progress", handlers.progress);
 | 
			
		||||
			handlers.failed && uploadExchange.addEventListener("Error", handlers.failed);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		generalExchange.addEventListener("ReadyStateChange", function(e) {
 | 
			
		||||
			if ( 4 == this.readyState ) {
 | 
			
		||||
				handlers.complete && handlers.complete(request.responseText);
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		request.open("POST", uri, true);
 | 
			
		||||
		// request.setRequestHeader("Content-Type", "multipart/form-data");
 | 
			
		||||
		request.send(data);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var postData = function (uri, data, handler, failedHandler)
 | 
			
		||||
	{
 | 
			
		||||
		var request = new XMLHttpRequest();
 | 
			
		||||
		// compile post string
 | 
			
		||||
		data = compilePostData(data);
 | 
			
		||||
		debug.Info("[Net] PostString: " + data);
 | 
			
		||||
		request.onreadystatechange = function()
 | 
			
		||||
		{
 | 
			
		||||
			/*
 | 
			
		||||
				0: request not initialized 
 | 
			
		||||
				1: server connection established
 | 
			
		||||
				2: request received 
 | 
			
		||||
				3: processing request 
 | 
			
		||||
				4: request finished and response is ready
 | 
			
		||||
			*/
 | 
			
		||||
			if(request.readyState == 2)
 | 
			
		||||
			{
 | 
			
		||||
				debug.Info("[Net] POST R2:" + uri);
 | 
			
		||||
			}
 | 
			
		||||
			else if (request.readyState == 4)
 | 
			
		||||
			{
 | 
			
		||||
				debug.Info("[Net] POST R4:" + uri);
 | 
			
		||||
				if (request.status == 200)
 | 
			
		||||
				{
 | 
			
		||||
					try
 | 
			
		||||
					{
 | 
			
		||||
						var obj = JSON.parse(request.responseText);
 | 
			
		||||
						obj.status ? handler(obj): failedHandler(obj);
 | 
			
		||||
					}
 | 
			
		||||
					catch(e)
 | 
			
		||||
					{
 | 
			
		||||
						debug.Error(e);
 | 
			
		||||
						failedHandler(null);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					debug.Info("[Net] Status: " + request.status.toString());
 | 
			
		||||
					debug.Info(request.responseText);
 | 
			
		||||
					failedHandler(null);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		request.open( "POST", uri );
 | 
			
		||||
		request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
 | 
			
		||||
		request.send( data );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var compilePostData = function (obj)
 | 
			
		||||
	{
 | 
			
		||||
		var postdata = "timestamp=" + new Date().getTime();
 | 
			
		||||
		for(var name in obj)
 | 
			
		||||
		{
 | 
			
		||||
			postdata += "&" + name + "=" + encodeURIComponent(obj[name]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return postdata;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "getData", getData );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "postData", postData );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "postFile", postFile );
 | 
			
		||||
	// ns[ NS_EXPORT ]( EX_FUNC, "compilePostData", compilePostData );
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								botanjs/src/System/Policy/_this.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								botanjs/src/System/Policy/_this.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.Policy" );
 | 
			
		||||
 | 
			
		||||
	/** @type {System.Global} */
 | 
			
		||||
	var Global = __import( "System.Global" );
 | 
			
		||||
 | 
			
		||||
	var isOriginAllowed = function( origin )
 | 
			
		||||
	{
 | 
			
		||||
		return -1 < Global.ALLOWED_ORIGINS.indexOf( origin );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "isOriginAllowed", isOriginAllowed );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										50
									
								
								botanjs/src/System/Tick.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								botanjs/src/System/Tick.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System" );
 | 
			
		||||
 | 
			
		||||
	var Tick = function()
 | 
			
		||||
	{
 | 
			
		||||
		// cycle counter
 | 
			
		||||
		var nc = 0;
 | 
			
		||||
		this.__started = false;
 | 
			
		||||
 | 
			
		||||
		this.loop = function()
 | 
			
		||||
		{
 | 
			
		||||
			for( var i in this.steppers )
 | 
			
		||||
				this.steppers[i]();
 | 
			
		||||
			nc ++;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		__readOnly( this, "count", function() { return nc; } );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Tick.prototype.putStepper = function( stepperCallback )
 | 
			
		||||
	{
 | 
			
		||||
		var l = this.steppers.length;
 | 
			
		||||
		this.steppers[l] = stepperCallback;
 | 
			
		||||
		return l;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Tick.prototype.start = function()
 | 
			
		||||
	{
 | 
			
		||||
		if( !this.__started )
 | 
			
		||||
		{
 | 
			
		||||
			this.id = setInterval( this.loop.bind( this ), 0 );
 | 
			
		||||
			this.__started = true;
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Tick.prototype.stop = function()
 | 
			
		||||
	{
 | 
			
		||||
		if( this.__started )
 | 
			
		||||
		{
 | 
			
		||||
			this.__started = false;
 | 
			
		||||
			clearInterval( this.id );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Tick.prototype.steppers = [];
 | 
			
		||||
 | 
			
		||||
	__readOnly( Tick.prototype, "started", function() { return this.__started; } );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CLASS, "Tick", Tick );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										3
									
								
								botanjs/src/System/_this.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								botanjs/src/System/_this.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System" )
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										17
									
								
								botanjs/src/System/utils/DataKey.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								botanjs/src/System/utils/DataKey.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.utils" );
 | 
			
		||||
	var IKey = ns[ NS_INVOKE ]( "IKey" );
 | 
			
		||||
	// Data key
 | 
			
		||||
	var DataKey = function ( name, value )
 | 
			
		||||
	{
 | 
			
		||||
		IKey.call(
 | 
			
		||||
			this
 | 
			
		||||
			, "data-" + name
 | 
			
		||||
			, value ? encodeURIComponent( String( value ) ) : ""
 | 
			
		||||
		);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	__extends( DataKey, IKey );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CLASS, "DataKey", DataKey );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										19
									
								
								botanjs/src/System/utils/EventKey.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								botanjs/src/System/utils/EventKey.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.utils" );
 | 
			
		||||
	var IKey = ns[ NS_INVOKE ]( "IKey" );
 | 
			
		||||
	// Event key
 | 
			
		||||
	var EventKey = function ( eventType, eventHandler )
 | 
			
		||||
	{
 | 
			
		||||
		IKey.call( this, eventType, eventHandler );
 | 
			
		||||
 | 
			
		||||
		this.type = eventType.toLowerCase();
 | 
			
		||||
		this.handler = eventHandler;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	__extends( EventKey, IKey );
 | 
			
		||||
 | 
			
		||||
	EventKey.prototype.type = "";
 | 
			
		||||
	EventKey.prototype.handler = null;
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CLASS, "EventKey", EventKey );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										49
									
								
								botanjs/src/System/utils/IKey.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								botanjs/src/System/utils/IKey.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.utils" );
 | 
			
		||||
	var ClassName = "IKey";
 | 
			
		||||
 | 
			
		||||
	////// Class IKey
 | 
			
		||||
	var IKey = function (name, value)
 | 
			
		||||
	{
 | 
			
		||||
		if ( name && ( typeof name != "string" ) ) return;
 | 
			
		||||
		this.keyName = name;
 | 
			
		||||
 | 
			
		||||
		if( value instanceof IKey )
 | 
			
		||||
		{
 | 
			
		||||
			this.keyValue = value;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			this.keyValue = (value != undefined) ? String(value) : "";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		this["keyName"] = this.keyName;
 | 
			
		||||
		this["keyValue"] = this.keyValue;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	IKey.prototype.keyName = "";
 | 
			
		||||
	IKey.prototype.keyValue = "";
 | 
			
		||||
 | 
			
		||||
	var quickDef = function()
 | 
			
		||||
	{
 | 
			
		||||
		var l = arguments.length;
 | 
			
		||||
 | 
			
		||||
		if( l % 2 != 0 )
 | 
			
		||||
		{
 | 
			
		||||
			ns[ NS_THROW ]( "Invalid Definition Count", ClassName );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var keys = [];
 | 
			
		||||
		for( var i = 0; i < l; i += 2 )
 | 
			
		||||
		{
 | 
			
		||||
			keys[ keys.length ] = new IKey( arguments[i], arguments[ i + 1 ] );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return keys;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	__static_method( IKey, "quickDef", quickDef );
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_CLASS, "IKey", IKey );
 | 
			
		||||
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										49
									
								
								botanjs/src/System/utils/Perf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								botanjs/src/System/utils/Perf.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	// Performance Functions
 | 
			
		||||
	var ns = __namespace( "System.utils.Perf" );
 | 
			
		||||
 | 
			
		||||
	/** {{{ Fast UUID generator, RFC4122 version 4 compliant.
 | 
			
		||||
	 * author: Jeff Ward (jcward.com).
 | 
			
		||||
	 * license: MIT license
 | 
			
		||||
	 * link: http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
 | 
			
		||||
	 **/
 | 
			
		||||
	var lut = [];
 | 
			
		||||
	for ( var i=0; i < 256; i++ )
 | 
			
		||||
	{
 | 
			
		||||
		lut[i] = ( i < 16 ? '0' : '' ) + ( i ).toString(16);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var UUID = function()
 | 
			
		||||
	{
 | 
			
		||||
		var d0 = Math.random()*0xffffffff|0;
 | 
			
		||||
		var d1 = Math.random()*0xffffffff|0;
 | 
			
		||||
		var d2 = Math.random()*0xffffffff|0;
 | 
			
		||||
		var d3 = Math.random()*0xffffffff|0;
 | 
			
		||||
		return lut[d0&0xff]+lut[d0>>8&0xff]+lut[d0>>16&0xff]+lut[d0>>24&0xff]+'-'+
 | 
			
		||||
			lut[d1&0xff]+lut[d1>>8&0xff]+'-'+lut[d1>>16&0x0f|0x40]+lut[d1>>24&0xff]+'-'+
 | 
			
		||||
			lut[d2&0x3f|0x80]+lut[d2>>8&0xff]+'-'+lut[d2>>16&0xff]+lut[d2>>24&0xff]+
 | 
			
		||||
			lut[d3&0xff]+lut[d3>>8&0xff]+lut[d3>>16&0xff]+lut[d3>>24&0xff];
 | 
			
		||||
	};
 | 
			
		||||
	/* }}}*/
 | 
			
		||||
 | 
			
		||||
	// Reverse an array using XOR swap
 | 
			
		||||
	var Array_Reverse = function( array )
 | 
			
		||||
	{
 | 
			
		||||
		var i = null;
 | 
			
		||||
		var l = array.length;
 | 
			
		||||
		var r = null;
 | 
			
		||||
		for (i = 0, r = l - 1; i < r; i += 1, r -= 1)
 | 
			
		||||
		{
 | 
			
		||||
			var left = array[i];
 | 
			
		||||
			var right = array[r];
 | 
			
		||||
			left ^= right;
 | 
			
		||||
			right ^= left;
 | 
			
		||||
			left ^= right;
 | 
			
		||||
			array[i] = left;
 | 
			
		||||
			array[r] = right;
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_READONLY_GETTER, "uuid", UUID );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "ArrayReverse", Array_Reverse );
 | 
			
		||||
})();
 | 
			
		||||
							
								
								
									
										41
									
								
								botanjs/src/System/utils/_this.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								botanjs/src/System/utils/_this.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "System.utils" );
 | 
			
		||||
 | 
			
		||||
	// Get prop from obj if obj.<prop> is <type>
 | 
			
		||||
	var objGetProp = function ( obj, prop, type )
 | 
			
		||||
	{
 | 
			
		||||
		if(obj && obj[prop])
 | 
			
		||||
		{
 | 
			
		||||
			var t = obj[prop].constructor.toString().match(/function ([^\(]+)/);
 | 
			
		||||
			if(t && t.length == 2 && t[1].toUpperCase() == type.toUpperCase())
 | 
			
		||||
			{
 | 
			
		||||
				return obj[prop];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var objSearch = function ( obj, cond, prop )
 | 
			
		||||
	{
 | 
			
		||||
		for( var i in obj )
 | 
			
		||||
		{
 | 
			
		||||
			if( cond( obj[i] ) )
 | 
			
		||||
			{
 | 
			
		||||
				return obj[i][prop] || obj[i];
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return null;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var objMap = function( obj, callback )
 | 
			
		||||
	{
 | 
			
		||||
		for( var i in obj )
 | 
			
		||||
		{
 | 
			
		||||
			obj[i] = callback( obj[i] );
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "objGetProp", objGetProp );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "objSearch", objSearch );
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "objMap", objMap );
 | 
			
		||||
})();
 | 
			
		||||
		Reference in New Issue
	
	Block a user