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, "&#38;").replace(/</g, "&#60;").replace(/>/g, "&#62;");    }    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 + -
显示快捷键?