Index: openacs-4/packages/ajaxhelper/www/resources/yui/logger/logger-debug.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ajaxhelper/www/resources/yui/logger/logger-debug.js,v diff -u -r1.3 -r1.4 --- openacs-4/packages/ajaxhelper/www/resources/yui/logger/logger-debug.js 8 Sep 2007 14:22:07 -0000 1.3 +++ openacs-4/packages/ajaxhelper/www/resources/yui/logger/logger-debug.js 9 Apr 2009 23:15:48 -0000 1.4 @@ -1,8 +1,8 @@ /* -Copyright (c) 2007, Yahoo! Inc. All rights reserved. +Copyright (c) 2009, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt -version: 2.3.0 +version: 2.7.0 */ /****************************************************************************/ /****************************************************************************/ @@ -15,63 +15,57 @@ * @constructor * @param oConfigs {Object} Object literal of configuration params. */ - YAHOO.widget.LogMsg = function(oConfigs) { +YAHOO.widget.LogMsg = function(oConfigs) { // Parse configs + /** + * Log message. + * + * @property msg + * @type String + */ + this.msg = + /** + * Log timestamp. + * + * @property time + * @type Date + */ + this.time = + + /** + * Log category. + * + * @property category + * @type String + */ + this.category = + + /** + * Log source. The first word passed in as the source argument. + * + * @property source + * @type String + */ + this.source = + + /** + * Log source detail. The remainder of the string passed in as the source argument, not + * including the first word (if any). + * + * @property sourceDetail + * @type String + */ + this.sourceDetail = null; + if (oConfigs && (oConfigs.constructor == Object)) { for(var param in oConfigs) { - this[param] = oConfigs[param]; + if (oConfigs.hasOwnProperty(param)) { + this[param] = oConfigs[param]; + } } } - }; - -///////////////////////////////////////////////////////////////////////////// -// -// Public member variables -// -///////////////////////////////////////////////////////////////////////////// +}; -/** - * Log message. - * - * @property msg - * @type String - */ -YAHOO.widget.LogMsg.prototype.msg = null; - -/** - * Log timestamp. - * - * @property time - * @type Date - */ -YAHOO.widget.LogMsg.prototype.time = null; - -/** - * Log category. - * - * @property category - * @type String - */ -YAHOO.widget.LogMsg.prototype.category = null; - -/** - * Log source. The first word passed in as the source argument. - * - * @property source - * @type String - */ -YAHOO.widget.LogMsg.prototype.source = null; - -/** - * Log source detail. The remainder of the string passed in as the source argument, not - * including the first word (if any). - * - * @property sourceDetail - * @type String - */ -YAHOO.widget.LogMsg.prototype.sourceDetail = null; - - /****************************************************************************/ /****************************************************************************/ /****************************************************************************/ @@ -127,7 +121,7 @@ * @return {String} The LogWriter source. */ YAHOO.widget.LogWriter.prototype.getSource = function() { - return this._sSource; + return this._source; }; /** @@ -142,7 +136,7 @@ return; } else { - this._sSource = sSource; + this._source = sSource; } }; @@ -189,7 +183,9 @@ // Parse config vars here if (oConfigs && (oConfigs.constructor == Object)) { for(var param in oConfigs) { - this[param] = oConfigs[param]; + if (oConfigs.hasOwnProperty(param)) { + this[param] = oConfigs[param]; + } } } @@ -222,1285 +218,1347 @@ ///////////////////////////////////////////////////////////////////////////// // -// Public member variables +// Static member variables // ///////////////////////////////////////////////////////////////////////////// +YAHOO.lang.augmentObject(YAHOO.widget.LogReader, { + /** + * Internal class member to index multiple LogReader instances. + * + * @property _memberName + * @static + * @type Number + * @default 0 + * @private + */ + _index : 0, -/** - * Whether or not LogReader is enabled to output log messages. - * - * @property logReaderEnabled - * @type Boolean - * @default true - */ -YAHOO.widget.LogReader.prototype.logReaderEnabled = true; + /** + * Node template for the log entries + * @property ENTRY_TEMPLATE + * @static + * @type {HTMLElement} + * @default PRE.yui-log-entry element + */ + ENTRY_TEMPLATE : (function () { + var t = document.createElement('pre'); + YAHOO.util.Dom.addClass(t,'yui-log-entry'); + return t; + })(), -/** - * Public member to access CSS width of the LogReader container. - * - * @property width - * @type String - */ -YAHOO.widget.LogReader.prototype.width = null; + /** + * Template used for innerHTML of verbose entry output. + * @property VERBOSE_TEMPLATE + * @static + * @default "{label}{totalTime}ms (+{elapsedTime}) {localTime}:

{sourceAndDetail}

{message}

" + */ + VERBOSE_TEMPLATE : "

{label} {totalTime}ms (+{elapsedTime}) {localTime}:

{sourceAndDetail}

{message}

", -/** - * Public member to access CSS height of the LogReader container. - * - * @property height - * @type String - */ -YAHOO.widget.LogReader.prototype.height = null; + /** + * Template used for innerHTML of compact entry output. + * @property BASIC_TEMPLATE + * @static + * @default "

{label}{totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}

" + */ + BASIC_TEMPLATE : "

{label} {totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}

" +}); -/** - * Public member to access CSS top position of the LogReader container. - * - * @property top - * @type String - */ -YAHOO.widget.LogReader.prototype.top = null; +///////////////////////////////////////////////////////////////////////////// +// +// Public member variables +// +///////////////////////////////////////////////////////////////////////////// -/** - * Public member to access CSS left position of the LogReader container. - * - * @property left - * @type String - */ -YAHOO.widget.LogReader.prototype.left = null; +YAHOO.widget.LogReader.prototype = { + /** + * Whether or not LogReader is enabled to output log messages. + * + * @property logReaderEnabled + * @type Boolean + * @default true + */ + logReaderEnabled : true, -/** - * Public member to access CSS right position of the LogReader container. - * - * @property right - * @type String - */ -YAHOO.widget.LogReader.prototype.right = null; + /** + * Public member to access CSS width of the LogReader container. + * + * @property width + * @type String + */ + width : null, -/** - * Public member to access CSS bottom position of the LogReader container. - * - * @property bottom - * @type String - */ -YAHOO.widget.LogReader.prototype.bottom = null; + /** + * Public member to access CSS height of the LogReader container. + * + * @property height + * @type String + */ + height : null, -/** - * Public member to access CSS font size of the LogReader container. - * - * @property fontSize - * @type String - */ -YAHOO.widget.LogReader.prototype.fontSize = null; + /** + * Public member to access CSS top position of the LogReader container. + * + * @property top + * @type String + */ + top : null, -/** - * Whether or not the footer UI is enabled for the LogReader. - * - * @property footerEnabled - * @type Boolean - * @default true - */ -YAHOO.widget.LogReader.prototype.footerEnabled = true; + /** + * Public member to access CSS left position of the LogReader container. + * + * @property left + * @type String + */ + left : null, -/** - * Whether or not output is verbose (more readable). Setting to true will make - * output more compact (less readable). - * - * @property verboseOutput - * @type Boolean - * @default true - */ -YAHOO.widget.LogReader.prototype.verboseOutput = true; + /** + * Public member to access CSS right position of the LogReader container. + * + * @property right + * @type String + */ + right : null, -/** - * Whether or not newest message is printed on top. - * - * @property newestOnTop - * @type Boolean - */ -YAHOO.widget.LogReader.prototype.newestOnTop = true; + /** + * Public member to access CSS bottom position of the LogReader container. + * + * @property bottom + * @type String + */ + bottom : null, -/** - * Output timeout buffer in milliseconds. - * - * @property outputBuffer - * @type Number - * @default 100 - */ -YAHOO.widget.LogReader.prototype.outputBuffer = 100; + /** + * Public member to access CSS font size of the LogReader container. + * + * @property fontSize + * @type String + */ + fontSize : null, -/** - * Maximum number of messages a LogReader console will display. - * - * @property thresholdMax - * @type Number - * @default 500 - */ -YAHOO.widget.LogReader.prototype.thresholdMax = 500; + /** + * Whether or not the footer UI is enabled for the LogReader. + * + * @property footerEnabled + * @type Boolean + * @default true + */ + footerEnabled : true, -/** - * When a LogReader console reaches its thresholdMax, it will clear out messages - * and print out the latest thresholdMin number of messages. - * - * @property thresholdMin - * @type Number - * @default 100 - */ -YAHOO.widget.LogReader.prototype.thresholdMin = 100; + /** + * Whether or not output is verbose (more readable). Setting to true will make + * output more compact (less readable). + * + * @property verboseOutput + * @type Boolean + * @default true + */ + verboseOutput : true, -/** - * True when LogReader is in a collapsed state, false otherwise. - * - * @property isCollapsed - * @type Boolean - * @default false - */ -YAHOO.widget.LogReader.prototype.isCollapsed = false; + /** + * Custom output format for log messages. Defaults to null, which falls + * back to verboseOutput param deciding between LogReader.VERBOSE_TEMPLATE + * and LogReader.BASIC_TEMPLATE. Use bracketed place holders to mark where + * message info should go. Available place holder names include: + * + * + * @property entryFormat + * @type String + * @default null + */ + entryFormat : null, -/** - * True when LogReader is in a paused state, false otherwise. - * - * @property isPaused - * @type Boolean - * @default false - */ -YAHOO.widget.LogReader.prototype.isPaused = false; + /** + * Whether or not newest message is printed on top. + * + * @property newestOnTop + * @type Boolean + */ + newestOnTop : true, -/** - * Enables draggable LogReader if DragDrop Utility is present. - * - * @property draggable - * @type Boolean - * @default true - */ -YAHOO.widget.LogReader.prototype.draggable = true; + /** + * Output timeout buffer in milliseconds. + * + * @property outputBuffer + * @type Number + * @default 100 + */ + outputBuffer : 100, -///////////////////////////////////////////////////////////////////////////// -// -// Public methods -// -///////////////////////////////////////////////////////////////////////////// + /** + * Maximum number of messages a LogReader console will display. + * + * @property thresholdMax + * @type Number + * @default 500 + */ + thresholdMax : 500, - /** - * Public accessor to the unique name of the LogReader instance. - * - * @method toString - * @return {String} Unique name of the LogReader instance. - */ -YAHOO.widget.LogReader.prototype.toString = function() { - return "LogReader instance" + this._sName; -}; -/** - * Pauses output of log messages. While paused, log messages are not lost, but - * get saved to a buffer and then output upon resume of LogReader. - * - * @method pause - */ -YAHOO.widget.LogReader.prototype.pause = function() { - this.isPaused = true; - this._btnPause.value = "Resume"; - this._timeout = null; - this.logReaderEnabled = false; -}; + /** + * When a LogReader console reaches its thresholdMax, it will clear out messages + * and print out the latest thresholdMin number of messages. + * + * @property thresholdMin + * @type Number + * @default 100 + */ + thresholdMin : 100, -/** - * Resumes output of log messages, including outputting any log messages that - * have been saved to buffer while paused. - * - * @method resume - */ -YAHOO.widget.LogReader.prototype.resume = function() { - this.isPaused = false; - this._btnPause.value = "Pause"; - this.logReaderEnabled = true; - this._printBuffer(); -}; + /** + * True when LogReader is in a collapsed state, false otherwise. + * + * @property isCollapsed + * @type Boolean + * @default false + */ + isCollapsed : false, -/** - * Hides UI of LogReader. Logging functionality is not disrupted. - * - * @method hide - */ -YAHOO.widget.LogReader.prototype.hide = function() { - this._elContainer.style.display = "none"; -}; + /** + * True when LogReader is in a paused state, false otherwise. + * + * @property isPaused + * @type Boolean + * @default false + */ + isPaused : false, -/** - * Shows UI of LogReader. Logging functionality is not disrupted. - * - * @method show - */ -YAHOO.widget.LogReader.prototype.show = function() { - this._elContainer.style.display = "block"; -}; + /** + * Enables draggable LogReader if DragDrop Utility is present. + * + * @property draggable + * @type Boolean + * @default true + */ + draggable : true, -/** - * Collapses UI of LogReader. Logging functionality is not disrupted. - * - * @method collapse - */ -YAHOO.widget.LogReader.prototype.collapse = function() { - this._elConsole.style.display = "none"; - if(this._elFt) { - this._elFt.style.display = "none"; - } - this._btnCollapse.value = "Expand"; - this.isCollapsed = true; -}; + ///////////////////////////////////////////////////////////////////////////// + // + // Public methods + // + ///////////////////////////////////////////////////////////////////////////// -/** - * Expands UI of LogReader. Logging functionality is not disrupted. - * - * @method expand - */ -YAHOO.widget.LogReader.prototype.expand = function() { - this._elConsole.style.display = "block"; - if(this._elFt) { - this._elFt.style.display = "block"; - } - this._btnCollapse.value = "Collapse"; - this.isCollapsed = false; -}; + /** + * Public accessor to the unique name of the LogReader instance. + * + * @method toString + * @return {String} Unique name of the LogReader instance. + */ + toString : function() { + return "LogReader instance" + this._sName; + }, + /** + * Pauses output of log messages. While paused, log messages are not lost, but + * get saved to a buffer and then output upon resume of LogReader. + * + * @method pause + */ + pause : function() { + this.isPaused = true; + this._timeout = null; + this.logReaderEnabled = false; + if (this._btnPause) { + this._btnPause.value = "Resume"; + } + }, -/** - * Returns related checkbox element for given filter (i.e., category or source). - * - * @method getCheckbox - * @param {String} Category or source name. - * @return {Array} Array of all filter checkboxes. - */ -YAHOO.widget.LogReader.prototype.getCheckbox = function(filter) { - return this._filterCheckboxes[filter]; -}; + /** + * Resumes output of log messages, including outputting any log messages that + * have been saved to buffer while paused. + * + * @method resume + */ + resume : function() { + this.isPaused = false; + this.logReaderEnabled = true; + this._printBuffer(); + if (this._btnPause) { + this._btnPause.value = "Pause"; + } + }, -/** - * Returns array of enabled categories. - * - * @method getCategories - * @return {String[]} Array of enabled categories. - */ -YAHOO.widget.LogReader.prototype.getCategories = function() { - return this._categoryFilters; -}; + /** + * Hides UI of LogReader. Logging functionality is not disrupted. + * + * @method hide + */ + hide : function() { + this._elContainer.style.display = "none"; + }, -/** - * Shows log messages associated with given category. - * - * @method showCategory - * @param {String} Category name. - */ -YAHOO.widget.LogReader.prototype.showCategory = function(sCategory) { - var filtersArray = this._categoryFilters; - // Don't do anything if category is already enabled - // Use Array.indexOf if available... - if(filtersArray.indexOf) { - if(filtersArray.indexOf(sCategory) > -1) { - return; + /** + * Shows UI of LogReader. Logging functionality is not disrupted. + * + * @method show + */ + show : function() { + this._elContainer.style.display = "block"; + }, + + /** + * Collapses UI of LogReader. Logging functionality is not disrupted. + * + * @method collapse + */ + collapse : function() { + this._elConsole.style.display = "none"; + if(this._elFt) { + this._elFt.style.display = "none"; } - } - // ...or do it the old-fashioned way - else { - for(var i=0; i -1) { return; } } - } + // ...or do it the old-fashioned way + else { + for(var i=0; i -1) { - return; - } - } - // ...or do it the old-fashioned way - else { - for(var i=0; i -1) { return; } } - } - filtersArray.push(sSource); - this._filterLogs(); - var elCheckbox = this.getCheckbox(sSource); - if(elCheckbox) { - elCheckbox.checked = true; - } -}; + // ...or do it the old-fashioned way + else { + for(var i=0; i

", label, " ", - totalTime, "ms (+", elapsedTime, ") ", - localTime, ": ", - "

", - sourceAndDetail, - ":

", - msg, - "

"] : + // Calculate the elapsed time to be from the last item that + // passed through the filter, not the absolute previous item + // in the stack + info.elapsedTime = entry.time.getTime() - this.getLastTime(); - ["

", label, " ", - totalTime, "ms (+", elapsedTime, ") ", - localTime, ": ", - sourceAndDetail, ": ", - msg, "

"]; + info.totalTime = entry.time.getTime() - + YAHOO.widget.Logger.getStartTime(); + } - return output.join(""); -}; + var msg = Static.ENTRY_TEMPLATE.cloneNode(true); + if (this.verboseOutput) { + msg.className += ' yui-log-verbose'; + } -/** - * Converts input chars "<", ">", and "&" to HTML entities. - * - * @method html2Text - * @param sHtml {String} String to convert. - * @private - */ -YAHOO.widget.LogReader.prototype.html2Text = function(sHtml) { - if(sHtml) { - sHtml += ""; - return sHtml.replace(/&/g, "&").replace(//g, ">"); - } - return ""; -}; + // Bug 2061169: Workaround for YAHOO.lang.substitute() + msg.innerHTML = entryFormat.replace(/\{(\w+)\}/g, function (x, placeholder) { return (placeholder in info) ? info[placeholder] : ''; }); + return msg; + }, + + /** + * Converts input chars "<", ">", and "&" to HTML entities. + * + * @method html2Text + * @param sHtml {String} String to convert. + * @private + */ + html2Text : function(sHtml) { + if(sHtml) { + sHtml += ""; + return sHtml.replace(/&/g, "&").replace(//g, ">"); + } + return ""; + }, + ///////////////////////////////////////////////////////////////////////////// // // Private member variables // ///////////////////////////////////////////////////////////////////////////// -/** - * Internal class member to index multiple LogReader instances. - * - * @property _memberName - * @static - * @type Number - * @default 0 - * @private - */ -YAHOO.widget.LogReader._index = 0; + /** + * Name of LogReader instance. + * + * @property _sName + * @type String + * @private + */ + _sName : null, -/** - * Name of LogReader instance. - * - * @property _sName - * @type String - * @private - */ -YAHOO.widget.LogReader.prototype._sName = null; + //TODO: remove + /** + * A class member shared by all LogReaders if a container needs to be + * created during instantiation. Will be null if a container element never needs to + * be created on the fly, such as when the implementer passes in their own element. + * + * @property _elDefaultContainer + * @type HTMLElement + * @private + */ + //YAHOO.widget.LogReader._elDefaultContainer = null; -//TODO: remove -/** - * A class member shared by all LogReaders if a container needs to be - * created during instantiation. Will be null if a container element never needs to - * be created on the fly, such as when the implementer passes in their own element. - * - * @property _elDefaultContainer - * @type HTMLElement - * @private - */ -//YAHOO.widget.LogReader._elDefaultContainer = null; + /** + * Buffer of log message objects for batch output. + * + * @property _buffer + * @type Object[] + * @private + */ + _buffer : null, -/** - * Buffer of log message objects for batch output. - * - * @property _buffer - * @type Object[] - * @private - */ -YAHOO.widget.LogReader.prototype._buffer = null; + /** + * Number of log messages output to console. + * + * @property _consoleMsgCount + * @type Number + * @default 0 + * @private + */ + _consoleMsgCount : 0, -/** - * Number of log messages output to console. - * - * @property _consoleMsgCount - * @type Number - * @default 0 - * @private - */ -YAHOO.widget.LogReader.prototype._consoleMsgCount = 0; + /** + * Date of last output log message. + * + * @property _lastTime + * @type Date + * @private + */ + _lastTime : null, -/** - * Date of last output log message. - * - * @property _lastTime - * @type Date - * @private - */ -YAHOO.widget.LogReader.prototype._lastTime = null; + /** + * Batched output timeout ID. + * + * @property _timeout + * @type Number + * @private + */ + _timeout : null, -/** - * Batched output timeout ID. - * - * @property _timeout - * @type Number - * @private - */ -YAHOO.widget.LogReader.prototype._timeout = null; + /** + * Hash of filters and their related checkbox elements. + * + * @property _filterCheckboxes + * @type Object + * @private + */ + _filterCheckboxes : null, -/** - * Hash of filters and their related checkbox elements. - * - * @property _filterCheckboxes - * @type Object - * @private - */ -YAHOO.widget.LogReader.prototype._filterCheckboxes = null; + /** + * Array of filters for log message categories. + * + * @property _categoryFilters + * @type String[] + * @private + */ + _categoryFilters : null, -/** - * Array of filters for log message categories. - * - * @property _categoryFilters - * @type String[] - * @private - */ -YAHOO.widget.LogReader.prototype._categoryFilters = null; + /** + * Array of filters for log message sources. + * + * @property _sourceFilters + * @type String[] + * @private + */ + _sourceFilters : null, -/** - * Array of filters for log message sources. - * - * @property _sourceFilters - * @type String[] - * @private - */ -YAHOO.widget.LogReader.prototype._sourceFilters = null; + /** + * LogReader container element. + * + * @property _elContainer + * @type HTMLElement + * @private + */ + _elContainer : null, -/** - * LogReader container element. - * - * @property _elContainer - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elContainer = null; + /** + * LogReader header element. + * + * @property _elHd + * @type HTMLElement + * @private + */ + _elHd : null, -/** - * LogReader header element. - * - * @property _elHd - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elHd = null; + /** + * LogReader collapse element. + * + * @property _elCollapse + * @type HTMLElement + * @private + */ + _elCollapse : null, -/** - * LogReader collapse element. - * - * @property _elCollapse - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elCollapse = null; + /** + * LogReader collapse button element. + * + * @property _btnCollapse + * @type HTMLElement + * @private + */ + _btnCollapse : null, -/** - * LogReader collapse button element. - * - * @property _btnCollapse - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._btnCollapse = null; + /** + * LogReader title header element. + * + * @property _title + * @type HTMLElement + * @private + */ + _title : null, -/** - * LogReader title header element. - * - * @property _title - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._title = null; + /** + * LogReader console element. + * + * @property _elConsole + * @type HTMLElement + * @private + */ + _elConsole : null, -/** - * LogReader console element. - * - * @property _elConsole - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elConsole = null; + /** + * LogReader footer element. + * + * @property _elFt + * @type HTMLElement + * @private + */ + _elFt : null, -/** - * LogReader footer element. - * - * @property _elFt - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elFt = null; + /** + * LogReader buttons container element. + * + * @property _elBtns + * @type HTMLElement + * @private + */ + _elBtns : null, -/** - * LogReader buttons container element. - * - * @property _elBtns - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elBtns = null; + /** + * Container element for LogReader category filter checkboxes. + * + * @property _elCategoryFilters + * @type HTMLElement + * @private + */ + _elCategoryFilters : null, -/** - * Container element for LogReader category filter checkboxes. - * - * @property _elCategoryFilters - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elCategoryFilters = null; + /** + * Container element for LogReader source filter checkboxes. + * + * @property _elSourceFilters + * @type HTMLElement + * @private + */ + _elSourceFilters : null, -/** - * Container element for LogReader source filter checkboxes. - * - * @property _elSourceFilters - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._elSourceFilters = null; + /** + * LogReader pause button element. + * + * @property _btnPause + * @type HTMLElement + * @private + */ + _btnPause : null, -/** - * LogReader pause button element. - * - * @property _btnPause - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._btnPause = null; + /** + * Clear button element. + * + * @property _btnClear + * @type HTMLElement + * @private + */ + _btnClear : null, -/** - * Clear button element. - * - * @property _btnClear - * @type HTMLElement - * @private - */ -YAHOO.widget.LogReader.prototype._btnClear = null; + ///////////////////////////////////////////////////////////////////////////// + // + // Private methods + // + ///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// -// -// Private methods -// -///////////////////////////////////////////////////////////////////////////// + /** + * Initializes the primary container element. + * + * @method _initContainerEl + * @param elContainer {HTMLElement} Container element by reference or string ID. + * @private + */ + _initContainerEl : function(elContainer) { + // Validate container + elContainer = YAHOO.util.Dom.get(elContainer); + // Attach to existing container... + if(elContainer && elContainer.tagName && (elContainer.tagName.toLowerCase() == "div")) { + this._elContainer = elContainer; + YAHOO.util.Dom.addClass(this._elContainer,"yui-log"); + } + // ...or create container from scratch + else { + this._elContainer = document.body.appendChild(document.createElement("div")); + //this._elContainer.id = "yui-log" + this._sName; + YAHOO.util.Dom.addClass(this._elContainer,"yui-log"); + YAHOO.util.Dom.addClass(this._elContainer,"yui-log-container"); -/** - * Initializes the primary container element. - * - * @method _initContainerEl - * @param elContainer {HTMLElement} Container element by reference or string ID. - * @private - */ -YAHOO.widget.LogReader.prototype._initContainerEl = function(elContainer) { - // Validate container - elContainer = YAHOO.util.Dom.get(elContainer); - // Attach to existing container... - if(elContainer && elContainer.tagName && (elContainer.tagName.toLowerCase() == "div")) { - this._elContainer = elContainer; - YAHOO.util.Dom.addClass(this._elContainer,"yui-log"); - } - // ...or create container from scratch - else { - this._elContainer = document.body.appendChild(document.createElement("div")); - //this._elContainer.id = "yui-log" + this._sName; - YAHOO.util.Dom.addClass(this._elContainer,"yui-log"); - YAHOO.util.Dom.addClass(this._elContainer,"yui-log-container"); + //YAHOO.widget.LogReader._elDefaultContainer = this._elContainer; - //YAHOO.widget.LogReader._elDefaultContainer = this._elContainer; - - // If implementer has provided container values, trust and set those - var containerStyle = this._elContainer.style; - if(this.width) { - containerStyle.width = this.width; + // If implementer has provided container values, trust and set those + var containerStyle = this._elContainer.style; + if(this.width) { + containerStyle.width = this.width; + } + if(this.right) { + containerStyle.right = this.right; + } + if(this.top) { + containerStyle.top = this.top; + } + if(this.left) { + containerStyle.left = this.left; + containerStyle.right = "auto"; + } + if(this.bottom) { + containerStyle.bottom = this.bottom; + containerStyle.top = "auto"; + } + if(this.fontSize) { + containerStyle.fontSize = this.fontSize; + } + // For Opera + if(navigator.userAgent.toLowerCase().indexOf("opera") != -1) { + document.body.style += ''; + } } - if(this.right) { - containerStyle.right = this.right; - } - if(this.top) { - containerStyle.top = this.top; - } - if(this.left) { - containerStyle.left = this.left; - containerStyle.right = "auto"; - } - if(this.bottom) { - containerStyle.bottom = this.bottom; - containerStyle.top = "auto"; - } - if(this.fontSize) { - containerStyle.fontSize = this.fontSize; - } - // For Opera - if(navigator.userAgent.toLowerCase().indexOf("opera") != -1) { - document.body.style += ''; - } - } -}; + }, -/** - * Initializes the header element. - * - * @method _initHeaderEl - * @private - */ -YAHOO.widget.LogReader.prototype._initHeaderEl = function() { - var oSelf = this; + /** + * Initializes the header element. + * + * @method _initHeaderEl + * @private + */ + _initHeaderEl : function() { + var oSelf = this; - // Destroy header - if(this._elHd) { - // Unhook DOM events - YAHOO.util.Event.purgeElement(this._elHd, true); + // Destroy header + if(this._elHd) { + // Unhook DOM events + YAHOO.util.Event.purgeElement(this._elHd, true); - // Remove DOM elements - this._elHd.innerHTML = ""; - } - - // Create header - this._elHd = this._elContainer.appendChild(document.createElement("div")); - this._elHd.id = "yui-log-hd" + this._sName; - this._elHd.className = "yui-log-hd"; + // Remove DOM elements + this._elHd.innerHTML = ""; + } + + // Create header + this._elHd = this._elContainer.appendChild(document.createElement("div")); + this._elHd.id = "yui-log-hd" + this._sName; + this._elHd.className = "yui-log-hd"; - this._elCollapse = this._elHd.appendChild(document.createElement("div")); - this._elCollapse.className = "yui-log-btns"; + this._elCollapse = this._elHd.appendChild(document.createElement("div")); + this._elCollapse.className = "yui-log-btns"; - this._btnCollapse = document.createElement("input"); - this._btnCollapse.type = "button"; - //this._btnCollapse.style.fontSize = - // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); - this._btnCollapse.className = "yui-log-button"; - this._btnCollapse.value = "Collapse"; - this._btnCollapse = this._elCollapse.appendChild(this._btnCollapse); - YAHOO.util.Event.addListener( - oSelf._btnCollapse,'click',oSelf._onClickCollapseBtn,oSelf); + this._btnCollapse = document.createElement("input"); + this._btnCollapse.type = "button"; + //this._btnCollapse.style.fontSize = + // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); + this._btnCollapse.className = "yui-log-button"; + this._btnCollapse.value = "Collapse"; + this._btnCollapse = this._elCollapse.appendChild(this._btnCollapse); + YAHOO.util.Event.addListener( + oSelf._btnCollapse,'click',oSelf._onClickCollapseBtn,oSelf); - this._title = this._elHd.appendChild(document.createElement("h4")); - this._title.innerHTML = "Logger Console"; -}; + this._title = this._elHd.appendChild(document.createElement("h4")); + this._title.innerHTML = "Logger Console"; + }, -/** - * Initializes the console element. - * - * @method _initConsoleEl - * @private - */ -YAHOO.widget.LogReader.prototype._initConsoleEl = function() { - // Destroy console - if(this._elConsole) { - // Unhook DOM events - YAHOO.util.Event.purgeElement(this._elConsole, true); + /** + * Initializes the console element. + * + * @method _initConsoleEl + * @private + */ + _initConsoleEl : function() { + // Destroy console + if(this._elConsole) { + // Unhook DOM events + YAHOO.util.Event.purgeElement(this._elConsole, true); - // Remove DOM elements - this._elConsole.innerHTML = ""; - } + // Remove DOM elements + this._elConsole.innerHTML = ""; + } - // Ceate console - this._elConsole = this._elContainer.appendChild(document.createElement("div")); - this._elConsole.className = "yui-log-bd"; + // Ceate console + this._elConsole = this._elContainer.appendChild(document.createElement("div")); + this._elConsole.className = "yui-log-bd"; - // If implementer has provided console, trust and set those - if(this.height) { - this._elConsole.style.height = this.height; - } -}; + // If implementer has provided console, trust and set those + if(this.height) { + this._elConsole.style.height = this.height; + } + }, -/** - * Initializes the footer element. - * - * @method _initFooterEl - * @private - */ -YAHOO.widget.LogReader.prototype._initFooterEl = function() { - var oSelf = this; + /** + * Initializes the footer element. + * + * @method _initFooterEl + * @private + */ + _initFooterEl : function() { + var oSelf = this; - // Don't create footer elements if footer is disabled - if(this.footerEnabled) { - // Destroy console - if(this._elFt) { - // Unhook DOM events - YAHOO.util.Event.purgeElement(this._elFt, true); + // Don't create footer elements if footer is disabled + if(this.footerEnabled) { + // Destroy console + if(this._elFt) { + // Unhook DOM events + YAHOO.util.Event.purgeElement(this._elFt, true); - // Remove DOM elements - this._elFt.innerHTML = ""; - } + // Remove DOM elements + this._elFt.innerHTML = ""; + } - this._elFt = this._elContainer.appendChild(document.createElement("div")); - this._elFt.className = "yui-log-ft"; + this._elFt = this._elContainer.appendChild(document.createElement("div")); + this._elFt.className = "yui-log-ft"; - this._elBtns = this._elFt.appendChild(document.createElement("div")); - this._elBtns.className = "yui-log-btns"; + this._elBtns = this._elFt.appendChild(document.createElement("div")); + this._elBtns.className = "yui-log-btns"; - this._btnPause = document.createElement("input"); - this._btnPause.type = "button"; - //this._btnPause.style.fontSize = - // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); - this._btnPause.className = "yui-log-button"; - this._btnPause.value = "Pause"; - this._btnPause = this._elBtns.appendChild(this._btnPause); - YAHOO.util.Event.addListener( - oSelf._btnPause,'click',oSelf._onClickPauseBtn,oSelf); + this._btnPause = document.createElement("input"); + this._btnPause.type = "button"; + //this._btnPause.style.fontSize = + // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); + this._btnPause.className = "yui-log-button"; + this._btnPause.value = "Pause"; + this._btnPause = this._elBtns.appendChild(this._btnPause); + YAHOO.util.Event.addListener( + oSelf._btnPause,'click',oSelf._onClickPauseBtn,oSelf); - this._btnClear = document.createElement("input"); - this._btnClear.type = "button"; - //this._btnClear.style.fontSize = - // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); - this._btnClear.className = "yui-log-button"; - this._btnClear.value = "Clear"; - this._btnClear = this._elBtns.appendChild(this._btnClear); - YAHOO.util.Event.addListener( - oSelf._btnClear,'click',oSelf._onClickClearBtn,oSelf); + this._btnClear = document.createElement("input"); + this._btnClear.type = "button"; + //this._btnClear.style.fontSize = + // YAHOO.util.Dom.getStyle(this._elContainer,"fontSize"); + this._btnClear.className = "yui-log-button"; + this._btnClear.value = "Clear"; + this._btnClear = this._elBtns.appendChild(this._btnClear); + YAHOO.util.Event.addListener( + oSelf._btnClear,'click',oSelf._onClickClearBtn,oSelf); - this._elCategoryFilters = this._elFt.appendChild(document.createElement("div")); - this._elCategoryFilters.className = "yui-log-categoryfilters"; - this._elSourceFilters = this._elFt.appendChild(document.createElement("div")); - this._elSourceFilters.className = "yui-log-sourcefilters"; - } -}; + this._elCategoryFilters = this._elFt.appendChild(document.createElement("div")); + this._elCategoryFilters.className = "yui-log-categoryfilters"; + this._elSourceFilters = this._elFt.appendChild(document.createElement("div")); + this._elSourceFilters.className = "yui-log-sourcefilters"; + } + }, -/** - * Initializes Drag and Drop on the header element. - * - * @method _initDragDrop - * @private - */ -YAHOO.widget.LogReader.prototype._initDragDrop = function() { - // If Drag and Drop utility is available... - // ...and draggable is true... - // ...then make the header draggable - if(YAHOO.util.DD && this.draggable && this._elHd) { - var ylog_dd = new YAHOO.util.DD(this._elContainer); - ylog_dd.setHandleElId(this._elHd.id); - //TODO: use class name - this._elHd.style.cursor = "move"; - } -}; + /** + * Initializes Drag and Drop on the header element. + * + * @method _initDragDrop + * @private + */ + _initDragDrop : function() { + // If Drag and Drop utility is available... + // ...and draggable is true... + // ...then make the header draggable + if(YAHOO.util.DD && this.draggable && this._elHd) { + var ylog_dd = new YAHOO.util.DD(this._elContainer); + ylog_dd.setHandleElId(this._elHd.id); + //TODO: use class name + this._elHd.style.cursor = "move"; + } + }, -/** - * Initializes category filters. - * - * @method _initCategories - * @private - */ -YAHOO.widget.LogReader.prototype._initCategories = function() { - // Initialize category filters - this._categoryFilters = []; - var aInitialCategories = YAHOO.widget.Logger.categories; + /** + * Initializes category filters. + * + * @method _initCategories + * @private + */ + _initCategories : function() { + // Initialize category filters + this._categoryFilters = []; + var aInitialCategories = YAHOO.widget.Logger.categories; - for(var j=0; j < aInitialCategories.length; j++) { - var sCategory = aInitialCategories[j]; + for(var j=0; j < aInitialCategories.length; j++) { + var sCategory = aInitialCategories[j]; - // Add category to the internal array of filters - this._categoryFilters.push(sCategory); + // Add category to the internal array of filters + this._categoryFilters.push(sCategory); - // Add checkbox element if UI is enabled - if(this._elCategoryFilters) { - this._createCategoryCheckbox(sCategory); + // Add checkbox element if UI is enabled + if(this._elCategoryFilters) { + this._createCategoryCheckbox(sCategory); + } } - } -}; + }, -/** - * Initializes source filters. - * - * @method _initSources - * @private - */ -YAHOO.widget.LogReader.prototype._initSources = function() { - // Initialize source filters - this._sourceFilters = []; - var aInitialSources = YAHOO.widget.Logger.sources; + /** + * Initializes source filters. + * + * @method _initSources + * @private + */ + _initSources : function() { + // Initialize source filters + this._sourceFilters = []; + var aInitialSources = YAHOO.widget.Logger.sources; - for(var j=0; j < aInitialSources.length; j++) { - var sSource = aInitialSources[j]; + for(var j=0; j < aInitialSources.length; j++) { + var sSource = aInitialSources[j]; - // Add source to the internal array of filters - this._sourceFilters.push(sSource); + // Add source to the internal array of filters + this._sourceFilters.push(sSource); - // Add checkbox element if UI is enabled - if(this._elSourceFilters) { - this._createSourceCheckbox(sSource); + // Add checkbox element if UI is enabled + if(this._elSourceFilters) { + this._createSourceCheckbox(sSource); + } } - }} -; + }, -/** - * Creates the UI for a category filter in the LogReader footer element. - * - * @method _createCategoryCheckbox - * @param sCategory {String} Category name. - * @private - */ -YAHOO.widget.LogReader.prototype._createCategoryCheckbox = function(sCategory) { - var oSelf = this; + /** + * Creates the UI for a category filter in the LogReader footer element. + * + * @method _createCategoryCheckbox + * @param sCategory {String} Category name. + * @private + */ + _createCategoryCheckbox : function(sCategory) { + var oSelf = this; - if(this._elFt) { - var elParent = this._elCategoryFilters; - var elFilter = elParent.appendChild(document.createElement("span")); - elFilter.className = "yui-log-filtergrp"; - - // Append el at the end so IE 5.5 can set "type" attribute - // and THEN set checked property - var chkCategory = document.createElement("input"); - chkCategory.id = "yui-log-filter-" + sCategory + this._sName; - chkCategory.className = "yui-log-filter-" + sCategory; - chkCategory.type = "checkbox"; - chkCategory.category = sCategory; - chkCategory = elFilter.appendChild(chkCategory); - chkCategory.checked = true; + if(this._elFt) { + var elParent = this._elCategoryFilters; + var elFilter = elParent.appendChild(document.createElement("span")); + elFilter.className = "yui-log-filtergrp"; + + // Append el at the end so IE 5.5 can set "type" attribute + // and THEN set checked property + var chkCategory = document.createElement("input"); + chkCategory.id = "yui-log-filter-" + sCategory + this._sName; + chkCategory.className = "yui-log-filter-" + sCategory; + chkCategory.type = "checkbox"; + chkCategory.category = sCategory; + chkCategory = elFilter.appendChild(chkCategory); + chkCategory.checked = true; - // Subscribe to the click event - YAHOO.util.Event.addListener(chkCategory,'click',oSelf._onCheckCategory,oSelf); + // Subscribe to the click event + YAHOO.util.Event.addListener(chkCategory,'click',oSelf._onCheckCategory,oSelf); - // Create and class the text label - var lblCategory = elFilter.appendChild(document.createElement("label")); - lblCategory.htmlFor = chkCategory.id; - lblCategory.className = sCategory; - lblCategory.innerHTML = sCategory; - - this._filterCheckboxes[sCategory] = chkCategory; - } -}; + // Create and class the text label + var lblCategory = elFilter.appendChild(document.createElement("label")); + lblCategory.htmlFor = chkCategory.id; + lblCategory.className = sCategory; + lblCategory.innerHTML = sCategory; + + this._filterCheckboxes[sCategory] = chkCategory; + } + }, -/** - * Creates a checkbox in the LogReader footer element to filter by source. - * - * @method _createSourceCheckbox - * @param sSource {String} Source name. - * @private - */ -YAHOO.widget.LogReader.prototype._createSourceCheckbox = function(sSource) { - var oSelf = this; + /** + * Creates a checkbox in the LogReader footer element to filter by source. + * + * @method _createSourceCheckbox + * @param sSource {String} Source name. + * @private + */ + _createSourceCheckbox : function(sSource) { + var oSelf = this; - if(this._elFt) { - var elParent = this._elSourceFilters; - var elFilter = elParent.appendChild(document.createElement("span")); - elFilter.className = "yui-log-filtergrp"; + if(this._elFt) { + var elParent = this._elSourceFilters; + var elFilter = elParent.appendChild(document.createElement("span")); + elFilter.className = "yui-log-filtergrp"; - // Append el at the end so IE 5.5 can set "type" attribute - // and THEN set checked property - var chkSource = document.createElement("input"); - chkSource.id = "yui-log-filter" + sSource + this._sName; - chkSource.className = "yui-log-filter" + sSource; - chkSource.type = "checkbox"; - chkSource.source = sSource; - chkSource = elFilter.appendChild(chkSource); - chkSource.checked = true; + // Append el at the end so IE 5.5 can set "type" attribute + // and THEN set checked property + var chkSource = document.createElement("input"); + chkSource.id = "yui-log-filter" + sSource + this._sName; + chkSource.className = "yui-log-filter" + sSource; + chkSource.type = "checkbox"; + chkSource.source = sSource; + chkSource = elFilter.appendChild(chkSource); + chkSource.checked = true; - // Subscribe to the click event - YAHOO.util.Event.addListener(chkSource,'click',oSelf._onCheckSource,oSelf); + // Subscribe to the click event + YAHOO.util.Event.addListener(chkSource,'click',oSelf._onCheckSource,oSelf); - // Create and class the text label - var lblSource = elFilter.appendChild(document.createElement("label")); - lblSource.htmlFor = chkSource.id; - lblSource.className = sSource; - lblSource.innerHTML = sSource; - - this._filterCheckboxes[sSource] = chkSource; - } -}; + // Create and class the text label + var lblSource = elFilter.appendChild(document.createElement("label")); + lblSource.htmlFor = chkSource.id; + lblSource.className = sSource; + lblSource.innerHTML = sSource; + + this._filterCheckboxes[sSource] = chkSource; + } + }, -/** - * Reprints all log messages in the stack through filters. - * - * @method _filterLogs - * @private - */ -YAHOO.widget.LogReader.prototype._filterLogs = function() { - // Reprint stack with new filters - if (this._elConsole !== null) { - this.clearConsole(); - this._printToConsole(YAHOO.widget.Logger.getStack()); - } -}; + /** + * Reprints all log messages in the stack through filters. + * + * @method _filterLogs + * @private + */ + _filterLogs : function() { + // Reprint stack with new filters + if (this._elConsole !== null) { + this.clearConsole(); + this._printToConsole(YAHOO.widget.Logger.getStack()); + } + }, -/** - * Sends buffer of log messages to output and clears buffer. - * - * @method _printBuffer - * @private - */ -YAHOO.widget.LogReader.prototype._printBuffer = function() { - this._timeout = null; + /** + * Sends buffer of log messages to output and clears buffer. + * + * @method _printBuffer + * @private + */ + _printBuffer : function() { + this._timeout = null; - if(this._elConsole !== null) { - var thresholdMax = this.thresholdMax; - thresholdMax = (thresholdMax && !isNaN(thresholdMax)) ? thresholdMax : 500; - if(this._consoleMsgCount < thresholdMax) { - var entries = []; - for (var i=0; i this.thresholdMax)) { + thresholdMin = 0; } + entriesStartIndex = (entriesLen > thresholdMin) ? (entriesLen - thresholdMin) : 0; - if(!this.newestOnTop) { - this._elConsole.scrollTop = this._elConsole.scrollHeight; - } - } -}; + // Iterate through all log entries + for(i=entriesStartIndex; i this.thresholdMax)) { - thresholdMin = 0; - } - var entriesStartIndex = (entriesLen > thresholdMin) ? (entriesLen - thresholdMin) : 0; - - // Iterate through all log entries - var sourceFiltersLen = this._sourceFilters.length; - var categoryFiltersLen = this._categoryFilters.length; - for(var i=entriesStartIndex; i