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; } );
|
||||
})();
|
Reference in New Issue
Block a user