2012-02-06 22:00:24 +00:00
|
|
|
/*
|
2012-02-02 22:47:23 +00:00
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2011-12-23 02:48:20 +00:00
|
|
|
/**
|
|
|
|
* Logging functions.
|
|
|
|
*
|
2012-02-06 22:00:24 +00:00
|
|
|
* TODO make this a proper object with a singleton instance.
|
|
|
|
*
|
|
|
|
* @author Andy Janata (ajanata@socialgamer.net)
|
2011-12-23 02:48:20 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
cah.log = {};
|
|
|
|
|
2012-12-28 03:33:27 +00:00
|
|
|
/**
|
|
|
|
* "Global Chat" tab's chat log
|
|
|
|
*/
|
|
|
|
cah.log.init = function() {
|
|
|
|
cah.log.log = $('.log', $('#tab-global'));
|
|
|
|
};
|
|
|
|
|
2012-02-06 22:00:24 +00:00
|
|
|
/**
|
2013-02-24 01:19:53 +00:00
|
|
|
* Log a message to the global chat window 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.
|
2012-02-06 22:00:24 +00:00
|
|
|
*
|
|
|
|
* @param {string}
|
|
|
|
* text Text to display for this message. Text is added as a TextNode, so HTML is properly
|
|
|
|
* escaped automatically.
|
2012-07-07 22:05:44 +01:00
|
|
|
* @param {string}
|
2012-02-06 22:00:24 +00:00
|
|
|
* opt_class Optional CSS class to use for this message.
|
|
|
|
*/
|
2012-01-23 07:54:58 +00:00
|
|
|
cah.log.status = function(text, opt_class) {
|
2013-02-24 01:19:53 +00:00
|
|
|
cah.log.status_with_game(null, text, opt_class);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
2013-02-25 02:57:04 +00:00
|
|
|
* Log a message to a single game's chat window, or the global chat window if game_id is null. This
|
2013-02-24 01:19:53 +00:00
|
|
|
* is also used to support chat.
|
2013-02-25 02:57:04 +00:00
|
|
|
*
|
2013-02-24 01:19:53 +00:00
|
|
|
* This displays the current time with the log message, using the user's locale settings to
|
|
|
|
* determine format.
|
2013-02-25 02:57:04 +00:00
|
|
|
*
|
|
|
|
* @param {Number|cah.Game}
|
|
|
|
* game_or_id ID of the game for which this message should be displayed, or the game object
|
|
|
|
* itself, or null for the global chat window.
|
2013-02-24 01:19:53 +00:00
|
|
|
* @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.
|
|
|
|
*/
|
2013-02-25 02:57:04 +00:00
|
|
|
cah.log.status_with_game = function(game_or_id, text, opt_class) {
|
2013-02-24 01:19:53 +00:00
|
|
|
var logElement;
|
2013-02-25 02:57:04 +00:00
|
|
|
if (game_or_id === null) {
|
2013-02-24 01:19:53 +00:00
|
|
|
logElement = cah.log.log;
|
2013-02-25 02:57:04 +00:00
|
|
|
} else {
|
|
|
|
var game;
|
|
|
|
if (game_or_id instanceof cah.Game) {
|
|
|
|
game = game_or_id;
|
|
|
|
} else {
|
|
|
|
game = cah.currentGames[game_or_id];
|
|
|
|
}
|
|
|
|
logElement = $(".log", game.getChatElement());
|
2013-02-24 01:19:53 +00:00
|
|
|
}
|
|
|
|
|
2012-02-06 22:00:24 +00:00
|
|
|
// TODO this doesn't work right on some mobile browsers
|
2013-02-25 02:57:04 +00:00
|
|
|
var scroll = (logElement.prop("scrollHeight") - logElement.height() - logElement
|
|
|
|
.prop("scrollTop")) <= 5;
|
2012-01-23 07:54:58 +00:00
|
|
|
|
|
|
|
var node = $("<span></span><br/>");
|
2012-03-23 06:38:18 +00:00
|
|
|
$(node[0]).text("[" + new Date().toLocaleTimeString() + "] " + text + "\n");
|
2012-01-23 07:54:58 +00:00
|
|
|
if (opt_class) {
|
|
|
|
$(node).addClass(opt_class);
|
|
|
|
}
|
2013-02-24 01:19:53 +00:00
|
|
|
logElement.append(node);
|
2012-01-23 07:54:58 +00:00
|
|
|
|
2011-12-25 03:38:19 +00:00
|
|
|
if (scroll) {
|
2013-02-24 01:19:53 +00:00
|
|
|
logElement.prop("scrollTop", logElement.prop("scrollHeight"));
|
2011-12-25 03:38:19 +00:00
|
|
|
}
|
2011-12-23 02:48:20 +00:00
|
|
|
};
|
|
|
|
|
2012-02-06 22:00:24 +00:00
|
|
|
/**
|
2013-03-27 03:17:49 +00:00
|
|
|
* Log a message for the user to see, always, in every tab, as an error message.
|
2012-02-06 22:00:24 +00:00
|
|
|
*
|
|
|
|
* @param {string}
|
|
|
|
* text Text to display for this message. Text is added as a TextNode, so HTML is properly
|
|
|
|
* escaped automatically.
|
|
|
|
*/
|
2011-12-23 02:48:20 +00:00
|
|
|
cah.log.error = function(text) {
|
2013-03-27 03:17:49 +00:00
|
|
|
cah.log.everyWindow("Error: " + text, "error");
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Log a message for the user to see, always, in every tab.
|
|
|
|
*
|
|
|
|
* @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.everyWindow = function(text, opt_class) {
|
|
|
|
cah.log.status(text, opt_class);
|
2013-02-24 01:19:53 +00:00
|
|
|
|
|
|
|
for (game_id in cah.currentGames) {
|
|
|
|
if (cah.currentGames.hasOwnProperty(game_id)) {
|
2013-03-27 03:17:49 +00:00
|
|
|
cah.log.status_with_game(game_id, text, opt_class);
|
2013-02-24 01:19:53 +00:00
|
|
|
}
|
|
|
|
}
|
2011-12-23 02:48:20 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Log a message if debugging is enabled, optionally dumping the contents of an object.
|
|
|
|
*
|
2012-02-06 22:00:24 +00:00
|
|
|
* If SILENT_DEBUG is on, and IE is in use, it can cause the game to break if the debugger isn't
|
|
|
|
* open...
|
|
|
|
*
|
2011-12-23 02:48:20 +00:00
|
|
|
* @param {string}
|
|
|
|
* text Text to display
|
2012-01-21 03:11:39 +00:00
|
|
|
* @param {object}
|
|
|
|
* opt_obj Optional. Object to dump along with message.
|
2011-12-23 02:48:20 +00:00
|
|
|
*/
|
|
|
|
cah.log.debug = function(text, opt_obj) {
|
2012-01-28 08:49:50 +00:00
|
|
|
if (cah.SILENT_DEBUG && console) {
|
2012-01-30 08:36:21 +00:00
|
|
|
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);
|
|
|
|
}
|
2012-01-28 08:49:50 +00:00
|
|
|
}
|
2011-12-23 02:48:20 +00:00
|
|
|
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 {
|
2012-01-23 07:54:58 +00:00
|
|
|
cah.log.status("DEBUG: " + text, "debug");
|
2011-12-23 02:48:20 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|