/*
* Copyright (c) 2012, Andy Janata
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
* provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions
* and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Logging functions.
*
* TODO make this a proper object with a singleton instance.
*
* @author Andy Janata (ajanata@socialgamer.net)
*/
cah.log = {};
/**
* Log a message for the user the see, always, as a status message. This is also used for chat. The
* current time is displayed with the log message, using the user's locale settings to determine
* format.
*
* @param {string}
* text Text to display for this message. Text is added as a TextNode, so HTML is properly
* escaped automatically.
* @param {?string}
* opt_class Optional CSS class to use for this message.
*/
cah.log.status = function(text, opt_class) {
// TODO this doesn't work right on some mobile browsers
var scroll = $("#log").prop("scrollHeight") - $("#log").height() - $("#log").prop("scrollTop") <= 5;
var node = $("
");
$(node).text("[" + new Date().toLocaleTimeString() + "] " + text + "\n");
if (opt_class) {
$(node).addClass(opt_class);
}
$("#log").append(node);
if (scroll) {
$("#log").prop("scrollTop", $("#log").prop("scrollHeight"));
}
};
/**
* Log a message for the user to see, always, as an error message.
*
* @param {string}
* text Text to display for this message. Text is added as a TextNode, so HTML is properly
* escaped automatically.
*/
cah.log.error = function(text) {
cah.log.status("Error: " + text, "error");
};
/**
* Log a message if debugging is enabled, optionally dumping the contents of an object.
*
* If SILENT_DEBUG is on, and IE is in use, it can cause the game to break if the debugger isn't
* open...
*
* @param {string}
* text Text to display
* @param {object}
* opt_obj Optional. Object to dump along with message.
*/
cah.log.debug = function(text, opt_obj) {
if (cah.SILENT_DEBUG && console) {
if (console.debug) {
console.debug("[" + new Date().toLocaleTimeString() + "]", text, opt_obj);
} else if (console.log) {
console.log("[" + new Date().toLocaleTimeString() + "] " + text);
if (opt_obj) {
if (console.dir) {
console.dir(opt_obj);
} else if (JSON && JSON.stringify) {
console.log(JSON.stringify(opt_obj));
} else {
console.log("TODO: SILENT_DEBUG without console.debug, with console.log, "
+ "without console.dir, without JSON.stringify");
}
}
} else if (console.log) {
console.log("[" + new Date().toLocaleTimeString() + "]", text, opt_obj);
}
}
if (cah.DEBUG) {
if (opt_obj) {
if (JSON && JSON.stringify) {
cah.log.debug(text + ": " + JSON.stringify(opt_obj));
} else {
cah.log.debug(text + ": TODO: debug log without JSON.stringify()");
}
} else {
cah.log.status("DEBUG: " + text, "debug");
}
}
};