Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
// Copyright (c) 2013 Tim Perry//// Permission is hereby granted, free of charge, to any person// obtaining a copy of this software and associated documentation// files (the "Software"), to deal in the Software without// restriction, including without limitation the rights to use,// copy, modify, merge, publish, distribute, sublicense, and/or sell// copies of the Software, and to permit persons to whom the// Software is furnished to do so, subject to the following// conditions://// The above copyright notice and this permission notice shall be// included in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR// OTHER DEALINGS IN THE SOFTWARE.// Description of import into Moodle:// Download from https://github.com/pimterry/loglevel/tree/master/dist// Copy loglevel.js into lib/amd/src/ in Moodle folder.// Add the license as a comment to the file and these instructions./*! loglevel - v1.8.1 - https://github.com/pimterry/loglevel - (c) 2022 Tim Perry - licensed MIT */(function (root, definition) {"use strict";if (typeof define === 'function' && define.amd) {define(definition);} else if (typeof module === 'object' && module.exports) {module.exports = definition();} else {root.log = definition();}}(this, function () {"use strict";// Slightly dubious tricks to cut down minimized file sizevar noop = function() {};var undefinedType = "undefined";var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (/Trident\/|MSIE /.test(window.navigator.userAgent));var logMethods = ["trace","debug","info","warn","error"];// Cross-browser bind equivalent that works at least back to IE6function bindMethod(obj, methodName) {var method = obj[methodName];if (typeof method.bind === 'function') {return method.bind(obj);} else {try {return Function.prototype.bind.call(method, obj);} catch (e) {// Missing bind shim or IE8 + Modernizr, fallback to wrappingreturn function() {return Function.prototype.apply.apply(method, [obj, arguments]);};}}}// Trace() doesn't print the message in IE, so for that case we need to wrap itfunction traceForIE() {if (console.log) {if (console.log.apply) {console.log.apply(console, arguments);} else {// In old IE, native console methods themselves don't have apply().Function.prototype.apply.apply(console.log, [console, arguments]);}}if (console.trace) console.trace();}// Build the best logging method possible for this env// Wherever possible we want to bind, not wrap, to preserve stack tracesfunction realMethod(methodName) {if (methodName === 'debug') {methodName = 'log';}if (typeof console === undefinedType) {return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives} else if (methodName === 'trace' && isIE) {return traceForIE;} else if (console[methodName] !== undefined) {return bindMethod(console, methodName);} else if (console.log !== undefined) {return bindMethod(console, 'log');} else {return noop;}}// These private functions always need `this` to be set properlyfunction replaceLoggingMethods(level, loggerName) {/*jshint validthis:true */for (var i = 0; i < logMethods.length; i++) {var methodName = logMethods[i];this[methodName] = (i < level) ?noop :this.methodFactory(methodName, level, loggerName);}// Define log.log as an alias for log.debugthis.log = this.debug;}// In old IE versions, the console isn't present until you first open it.// We build realMethod() replacements here that regenerate logging methodsfunction enableLoggingWhenConsoleArrives(methodName, level, loggerName) {return function () {if (typeof console !== undefinedType) {replaceLoggingMethods.call(this, level, loggerName);this[methodName].apply(this, arguments);}};}// By default, we use closely bound real methods wherever possible, and// otherwise we wait for a console to appear, and then try again.function defaultMethodFactory(methodName, level, loggerName) {/*jshint validthis:true */return realMethod(methodName) ||enableLoggingWhenConsoleArrives.apply(this, arguments);}function Logger(name, defaultLevel, factory) {var self = this;var currentLevel;defaultLevel = defaultLevel == null ? "WARN" : defaultLevel;var storageKey = "loglevel";if (typeof name === "string") {storageKey += ":" + name;} else if (typeof name === "symbol") {storageKey = undefined;}function persistLevelIfPossible(levelNum) {var levelName = (logMethods[levelNum] || 'silent').toUpperCase();if (typeof window === undefinedType || !storageKey) return;// Use localStorage if availabletry {window.localStorage[storageKey] = levelName;return;} catch (ignore) {}// Use session cookie as fallbacktry {window.document.cookie =encodeURIComponent(storageKey) + "=" + levelName + ";";} catch (ignore) {}}function getPersistedLevel() {var storedLevel;if (typeof window === undefinedType || !storageKey) return;try {storedLevel = window.localStorage[storageKey];} catch (ignore) {}// Fallback to cookies if local storage gives us nothingif (typeof storedLevel === undefinedType) {try {var cookie = window.document.cookie;var location = cookie.indexOf(encodeURIComponent(storageKey) + "=");if (location !== -1) {storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];}} catch (ignore) {}}// If the stored level is not valid, treat it as if nothing was stored.if (self.levels[storedLevel] === undefined) {storedLevel = undefined;}return storedLevel;}function clearPersistedLevel() {if (typeof window === undefinedType || !storageKey) return;// Use localStorage if availabletry {window.localStorage.removeItem(storageKey);return;} catch (ignore) {}// Use session cookie as fallbacktry {window.document.cookie =encodeURIComponent(storageKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";} catch (ignore) {}}/*** Public logger API - see https://github.com/pimterry/loglevel for details**/self.name = name;self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3,"ERROR": 4, "SILENT": 5};self.methodFactory = factory || defaultMethodFactory;self.getLevel = function () {return currentLevel;};self.setLevel = function (level, persist) {if (typeof level === "string" && self.levels[level.toUpperCase()] !== undefined) {level = self.levels[level.toUpperCase()];}if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) {currentLevel = level;if (persist !== false) { // defaults to truepersistLevelIfPossible(level);}replaceLoggingMethods.call(self, level, name);if (typeof console === undefinedType && level < self.levels.SILENT) {return "No console available for logging";}} else {throw "log.setLevel() called with invalid level: " + level;}};self.setDefaultLevel = function (level) {defaultLevel = level;if (!getPersistedLevel()) {self.setLevel(level, false);}};self.resetLevel = function () {self.setLevel(defaultLevel, false);clearPersistedLevel();};self.enableAll = function(persist) {self.setLevel(self.levels.TRACE, persist);};self.disableAll = function(persist) {self.setLevel(self.levels.SILENT, persist);};// Initialize with the right levelvar initialLevel = getPersistedLevel();if (initialLevel == null) {initialLevel = defaultLevel;}self.setLevel(initialLevel, false);}/*** Top-level API**/var defaultLogger = new Logger();var _loggersByName = {};defaultLogger.getLogger = function getLogger(name) {if ((typeof name !== "symbol" && typeof name !== "string") || name === "") {throw new TypeError("You must supply a name when creating a logger.");}var logger = _loggersByName[name];if (!logger) {logger = _loggersByName[name] = new Logger(name, defaultLogger.getLevel(), defaultLogger.methodFactory);}return logger;};// Grab the current global log variable in case of overwritevar _log = (typeof window !== undefinedType) ? window.log : undefined;defaultLogger.noConflict = function() {if (typeof window !== undefinedType &&window.log === defaultLogger) {window.log = _log;}return defaultLogger;};defaultLogger.getLoggers = function getLoggers() {return _loggersByName;};// ES6 default export, for compatibilitydefaultLogger['default'] = defaultLogger;return defaultLogger;}));