logger-debug.js
来自「国外很不错的一个开源OA系统Group-Office」· JavaScript 代码 · 共 1,560 行 · 第 1/3 页
JS
1,560 行
/** * Updates title to given string. * * @method setTitle * @param sTitle {String} New title. */YAHOO.widget.LogReader.prototype.setTitle = function(sTitle) { this._title.innerHTML = this.html2Text(sTitle);};/** * Gets timestamp of the last log. * * @method getLastTime * @return {Date} Timestamp of the last log. */YAHOO.widget.LogReader.prototype.getLastTime = function() { return this._lastTime;};/** * Formats message string to HTML for output to console. * * @method formatMsg * @param oLogMsg {Object} Log message object. * @return {String} HTML-formatted message for output to console. */YAHOO.widget.LogReader.prototype.formatMsg = function(oLogMsg) { var category = oLogMsg.category; // Label for color-coded display var label = category.substring(0,4).toUpperCase(); // Calculate the elapsed time to be from the last item that passed through the filter, // not the absolute previous item in the stack var time = oLogMsg.time; if (time.toLocaleTimeString) { var localTime = time.toLocaleTimeString(); } else { localTime = time.toString(); } var msecs = time.getTime(); var startTime = YAHOO.widget.Logger.getStartTime(); var totalTime = msecs - startTime; var elapsedTime = msecs - this.getLastTime(); var source = oLogMsg.source; var sourceDetail = oLogMsg.sourceDetail; var sourceAndDetail = (sourceDetail) ? source + " " + sourceDetail : source; // Escape HTML entities in the log message itself for output to console var msg = this.html2Text(oLogMsg.msg); // Verbose output includes extra line breaks var output = (this.verboseOutput) ? ["<p><span class='", category, "'>", label, "</span> ", totalTime, "ms (+", elapsedTime, ") ", localTime, ": ", "</p><p>", sourceAndDetail, ": </p><p>", msg, "</p>"] : ["<p><span class='", category, "'>", label, "</span> ", totalTime, "ms (+", elapsedTime, ") ", localTime, ": ", sourceAndDetail, ": ", msg,"</p>"]; return output.join("");};/** * 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, "<").replace(/>/g, ">"); } return "";};///////////////////////////////////////////////////////////////////////////////// Private member variables////////////////////////////////////////////////////////////////////////////////** * Internal class member to index multiple log reader instances. * * @property _memberName * @static * @type Number * @default 0 * @private */YAHOO.widget.LogReader._index = 0;/** * Name of LogReader instance. * * @property _sName * @type String * @private */YAHOO.widget.LogReader.prototype._sName = null;/** * A class member shared by all log readers 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 */YAHOO.widget.LogReader.prototype._buffer = null;/** * 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 */YAHOO.widget.LogReader.prototype._lastTime = null;/** * Batched output timeout ID. * * @property _timeout * @type Number * @private */YAHOO.widget.LogReader.prototype._timeout = 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 */YAHOO.widget.LogReader.prototype._sourceFilters = null;/** * Log reader container element. * * @property _elContainer * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elContainer = null;/** * Log reader header element. * * @property _elHd * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elHd = null;/** * Log reader collapse element. * * @property _elCollapse * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elCollapse = null;/** * Log reader collapse button element. * * @property _btnCollapse * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._btnCollapse = null;/** * Log reader title header element. * * @property _title * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._title = null;/** * Log reader console element. * * @property _elConsole * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elConsole = null;/** * Log reader footer element. * * @property _elFt * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elFt = null;/** * Log reader buttons container element. * * @property _elBtns * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elBtns = null;/** * Container element for log reader category filter checkboxes. * * @property _elCategoryFilters * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elCategoryFilters = null;/** * Container element for log reader source filter checkboxes. * * @property _elSourceFilters * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._elSourceFilters = null;/** * Log reader pause button element. * * @property _btnPause * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._btnPause = null;/** * Clear button element. * * @property _btnClear * @type HTMLElement * @private */YAHOO.widget.LogReader.prototype._btnClear = null;///////////////////////////////////////////////////////////////////////////////// Private methods////////////////////////////////////////////////////////////////////////////////** * Creates the UI for a category filter in the log reader footer element. * * @method _createCategoryCheckbox * @param sCategory {String} Category name. * @private */YAHOO.widget.LogReader.prototype._createCategoryCheckbox = function(sCategory) { var oSelf = this; if(this._elFt) { var elParent = this._elCategoryFilters; var filters = this._categoryFilters; 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; // Add this checked filter to the internal array of filters filters.push(sCategory); // 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; }};/** * Creates a checkbox in the log reader footer element to filter by source. * * @method _createSourceCheckbox * @param sSource {String} Source name. * @private */YAHOO.widget.LogReader.prototype._createSourceCheckbox = function(sSource) { var oSelf = this; if(this._elFt) { var elParent = this._elSourceFilters; var filters = this._sourceFilters; 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; // Add this checked filter to the internal array of filters filters.push(sSource); // 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; }};/** * 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()); }};/** * Clears all outputted log messages from the console and resets the time of the * last output log message. * * @method _clearConsole * @private */YAHOO.widget.LogReader.prototype._clearConsole = function() { // Clear the buffer of any pending messages this._timeout = null; this._buffer = []; this._consoleMsgCount = 0; // Reset the rolling timer this._lastTime = YAHOO.widget.Logger.getStartTime(); var elConsole = this._elConsole; while(elConsole.hasChildNodes()) { elConsole.removeChild(elConsole.firstChild); }};/** * Sends buffer of log messages to output and clears buffer. * * @method _printBuffer * @private */YAHOO.widget.LogReader.prototype._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._buffer.length; i++) { entries[i] = this._buffer[i]; } this._buffer = []; this._printToConsole(entries); } else { this._filterLogs(); } if(!this.newestOnTop) { this._elConsole.scrollTop = this._elConsole.scrollHeight; } }};/** * Cycles through an array of log messages, and outputs each one to the console * if its category has not been filtered out. * * @method _printToConsole * @param aEntries {Object[]} Array of LogMsg objects to output to console. * @private */YAHOO.widget.LogReader.prototype._printToConsole = function(aEntries) { // Manage the number of messages displayed in the console var entriesLen = aEntries.length; var thresholdMin = this.thresholdMin; if(isNaN(thresholdMin) || (thresholdMin > 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<entriesLen; i++) { // Print only the ones that filter through var okToPrint = false; var okToFilterCats = false; // Get log message details var entry = aEntries[i]; var source = entry.source; var category = entry.category; for(var j=0; j<sourceFiltersLen; j++) { if(source == this._sourceFilters[j]) { okToFilterCats = true; break; } } if(okToFilterCats) { for(var k=0; k<categoryFiltersLen; k++) { if(category == this._categoryFilters[k]) { okToPrint = true; break; } } } if(okToPrint) { var output = this.formatMsg(entry); // Verbose output uses <code> tag instead of <pre> tag (for wrapping) var container = (this.verboseOutput) ? "CODE" : "PRE"; var oNewElement = (this.newestOnTop) ? this._elConsole.insertBefore( document.createElement(container),this._elConsole.firstChild): this._elConsole.appendChild(document.createElement(container)); oNewElement.innerHTML = output; this._consoleMsgCount++; this._lastTime = entry.time.getTime(); } }};///////////////////////////////////////////////////////////////////////////////// Private event handlers////////////////////////////////////////////////////////////////////////////////** * Handles Logger's categoryCreateEvent. * * @method _onCategoryCreate * @param sType {String} The event. * @param aArgs {Object[]} Data passed from event firer. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onCategoryCreate = function(sType, aArgs, oSelf) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?