/// <reference path="./DomHelper.ts" /> var econda; (function (econda) { var util; (function (util) { /** * Single log message, helper class for LogViewer * @private * @class econda.util.LogItem */ var LogItem = (function () { function LogItem(timestamp, type, message, data) { this.timestamp = null; this.type = "info"; this.message = null; this.data = null; this.timestamp = timestamp; this.type = type; this.message = message; this.data = data; } LogItem.TYPE_INFO = "info"; LogItem.TYPE_WARNING = "warning"; LogItem.TYPE_ERROR = "error"; return LogItem; }()); /** * Display econda debug output inside of a div container. * See {@link econda.debug} on how to log debug output. * @class econda.util.LogViewer */ var LogViewer = (function () { function LogViewer() { /** * Id of div container where we should write the debug output. * @cfg {string} [container=null] */ this.container = null; /** * Scroll container on new log items * @cfg {boolean} [autoScroll=true] */ this.autoScroll = true; /** * When div element is not rendered, we'll queue all log messages here and write them lager * @property {Array} queue * @private */ this.queue = []; /** * If no container element is available, set timeout and try again later * @private */ this.timeout = null; } /** * Write a info message to log container * @param {String} message * @param {Array} data */ LogViewer.prototype.log = function (message, data) { var item = new LogItem(new Date(), LogItem.TYPE_INFO, message, data); this.queue.push(item); this.writeQueue(); }; /** * Write a warning to log container * @param {String} message * @param {Array} data */ LogViewer.prototype.warn = function (message, data) { var item = new LogItem(new Date(), LogItem.TYPE_WARNING, message, data); this.queue.push(item); this.writeQueue(); }; /** * Write an error to log container * @param {String} message * @param {Array} data */ LogViewer.prototype.error = function (message, data) { var item = new LogItem(new Date(), LogItem.TYPE_ERROR, message, data); this.queue.push(item); this.writeQueue(); }; /** * Write all items from queue to div container * @private */ LogViewer.prototype.writeQueue = function () { var container = econda.util.DomHelper.element(this.container); if (container != null) { var item = null; while (item = this.queue.shift()) { this.writeItemToContainer(item, container); } } else if (this.timeout == null) { var cmp = this; setTimeout(function () { cmp.writeQueue(); }, 250); } }; /** * Format an write single log item to div container * @private */ LogViewer.prototype.writeItemToContainer = function (item, container) { var minutes = item.timestamp.getMinutes(); var mStr = (minutes < 10) ? '0' + minutes.toString() : minutes.toString(); var html = [ item.timestamp.getHours().toString(), ':', mStr, '.', item.timestamp.getSeconds().toString(), ' - ', item.message ]; var domItem = document.createElement('p'); domItem.innerHTML = html.join(''); domItem.style.margin = "0"; domItem.style.padding = "2px"; domItem.style.fontFamily = "Fixed, monospace"; domItem.style.fontSize = "12px"; switch (item.type) { case LogItem.TYPE_ERROR: domItem.style.backgroundColor = "#FF9999"; break; case LogItem.TYPE_WARNING: domItem.style.backgroundColor = "#FFFF99"; break; } container.appendChild(domItem); if (this.autoScroll) { container.scrollTop = container.scrollHeight; } }; /** * Get container element * @returns {HTMLElement} */ LogViewer.prototype.getContainerElement = function () { var container = null; if (this.container instanceof HTMLElement) { container = this.container; } else { container = document.getElementById(this.container); } return container; }; return LogViewer; }()); util.LogViewer = LogViewer; })(util = econda.util || (econda.util = {})); })(econda || (econda = {}));