penguin/AstroJS

Javascript framework for my blog

botanjs/src/System/Cycle/Trigger.js

raw ยท 1520 bytes

(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 );
})();