penguin/AstroJS

Javascript framework for my blog

botanjs/src/System/Log.js

raw ยท 1255 bytes

(function(){
	var ns = __namespace( "System.Log" );

	/** @type {!Array<function(*, number): void>} */
	var handler = [];

	/** @const {number} */
	var SYSTEM = 1;

	/** @const {number} */
	var INFO = 16;

	/** @const {number} */
	var ERROR = 32;

	/**
	 * @param {*} mesg
	 * @param {number=} type
	 * @return {void}
	 */
	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);
		}
	};

	/**
	 * @param {function(*, number): void} func
	 * @return {number}
	 */
	var registerHandler = function(func)
	{
		var index = -1;
		handler[index = handler.length] = func;

		return index;
	};

	/**
	 * @param {number} index
	 * @return {void}
	 */
	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 );
})();