diff --git a/bower.json b/bower.json index 0dfff94..503fd30 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "loglevel", - "version": "0.2.1", + "version": "0.3.0", "main": "dist/loglevel.min.js", "dependencies": {}, "ignore": [ diff --git a/dist/loglevel.js b/dist/loglevel.js index 305a10f..31569be 100644 --- a/dist/loglevel.js +++ b/dist/loglevel.js @@ -1,26 +1,23 @@ -/*! loglevel - v0.1.0 - 2013-04-02 -* https://github.com/pimterry/loglevel -* Copyright (c) 2013 Tim Perry; Licensed MIT */ +/*! loglevel - v0.2.0 - 2013-06-19 +* https://github.com/pimterry/loglevel +* Copyright (c) 2013 Tim Perry; Licensed MIT */ (function (name, definition) { if (typeof module !== 'undefined') { module.exports = definition(); } else if (typeof define === 'function' && typeof define.amd === 'object') { define(definition); } else { - this.name = definition(); + this[name] = definition(); } }('log', function () { - var self = {}, - noop = function() { }; - - self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, - "ERROR": 4, "SILENT": 5}; + var self = {}; + var noop = function() {}; function realMethod(methodName) { if (typeof console === "undefined") { return noop; } else if (typeof console[methodName] === "undefined") { - return console.log || noop; + return boundToConsole(console, 'log') || noop; } else { return boundToConsole(console, methodName); } @@ -55,8 +52,57 @@ } } + function cookiesAvailable() { + return (typeof window !== "undefined" && + typeof window.document !== "undefined" && + typeof window.document.cookie !== "undefined"); + } + + function setLevelInCookie(levelNum) { + if (!cookiesAvailable()) { + return; + } + + var levelName; + + for (var key in self.levels) { + if (self.levels.hasOwnProperty(key) && self.levels[key] === levelNum) { + levelName = key; + break; + } + } + + if (levelName !== undefined) { + window.document.cookie = "loglevel=" + levelName + ";"; + } + } + + var cookieRegex = /loglevel=([^;]+)/; + + function loadLevelFromCookie() { + var cookieLevel; + + if (cookiesAvailable()) { + var cookieMatch = cookieRegex.exec(window.document.cookie) || []; + cookieLevel = cookieMatch[1]; + } + + self.setLevel(self.levels[cookieLevel] || self.levels.WARN); + } + + /* + * + * Public API + * + */ + + self.levels = { "TRACE": 0, "DEBUG": 1, "INFO": 2, "WARN": 3, + "ERROR": 4, "SILENT": 5}; + self.setLevel = function (level) { if (typeof level === "number" && level >= 0 && level <= self.levels.SILENT) { + setLevelInCookie(level); + if (level === self.levels.SILENT) { clearMethods(); return; @@ -77,7 +123,7 @@ } else if (typeof level === "string") { self.setLevel(self.levels[level.toUpperCase()]); } else { - throw "log.setLevel called with invalid level: " + level; + throw "log.setLevel() called with invalid level: " + level; } }; @@ -90,9 +136,9 @@ }; try { - self.setLevel(self.levels.WARN); + loadLevelFromCookie(); } catch (e) { self.setLevel(self.levels.SILENT); } return self; -})); \ No newline at end of file +})); diff --git a/dist/loglevel.min.js b/dist/loglevel.min.js index fa0eae1..b694cac 100644 --- a/dist/loglevel.min.js +++ b/dist/loglevel.min.js @@ -1,4 +1,4 @@ -/*! loglevel - v0.1.0 - 2013-04-02 -* https://github.com/pimterry/loglevel -* Copyright (c) 2013 Tim Perry; Licensed MIT */ -(function(e,n){"undefined"!=typeof module?module.exports=n():"function"==typeof define&&"object"==typeof define.amd?define(n):this.name=n()})("log",function(){function e(e){return"undefined"==typeof console?t:console[e]===void 0?console.log||t:n(console,e)}function n(e,n){var o=e[n];return o.bind===void 0?Function.prototype.bind===void 0?function(){o.apply(e,arguments)}:Function.prototype.bind.call(e[n],e):e[n].bind(e)}function o(){for(var e=0;i.length>e;e++)l[i[e]]=t}var l={},t=function(){};l.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5};var i=["trace","debug","info","warn","error"];l.setLevel=function(n){if("number"==typeof n&&n>=0&&l.levels.SILENT>=n){if(n===l.levels.SILENT)return o(),void 0;if("undefined"==typeof console)throw o(),"No console available for logging";for(var r=0;i.length>r;r++){var f=i[r];l[f]=l.levels[f.toUpperCase()]>=n?e(f):t}}else{if("string"!=typeof n)throw"log.setLevel called with invalid level: "+n;l.setLevel(l.levels[n.toUpperCase()])}},l.enableAll=function(){l.setLevel(l.levels.TRACE)},l.disableAll=function(){l.setLevel(l.levels.SILENT)};try{l.setLevel(l.levels.WARN)}catch(r){l.setLevel(l.levels.SILENT)}return l}); \ No newline at end of file +/*! loglevel - v0.2.0 - 2013-06-19 +* https://github.com/pimterry/loglevel +* Copyright (c) 2013 Tim Perry; Licensed MIT */ +(function(e,o){"undefined"!=typeof module?module.exports=o():"function"==typeof define&&"object"==typeof define.amd?define(o):this[e]=o()})("log",function(){function e(e){return"undefined"==typeof console?f:console[e]===void 0?o(console,"log")||f:o(console,e)}function o(e,o){var n=e[o];return n.bind===void 0?Function.prototype.bind===void 0?function(){n.apply(e,arguments)}:Function.prototype.bind.call(e[o],e):e[o].bind(e)}function n(){for(var e=0;v.length>e;e++)r[v[e]]=f}function l(){return"undefined"!=typeof window&&window.document!==void 0&&window.document.cookie!==void 0}function t(e){if(l()){var o;for(var n in r.levels)if(r.levels.hasOwnProperty(n)&&r.levels[n]===e){o=n;break}void 0!==o&&(window.document.cookie="loglevel="+o+";")}}function i(){var e;if(l()){var o=d.exec(window.document.cookie)||[];e=o[1]}r.setLevel(r.levels[e]||r.levels.WARN)}var r={},f=function(){},v=["trace","debug","info","warn","error"],d=/loglevel=([^;]+)/;r.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},r.setLevel=function(o){if("number"==typeof o&&o>=0&&r.levels.SILENT>=o){if(t(o),o===r.levels.SILENT)return n(),void 0;if("undefined"==typeof console)throw n(),"No console available for logging";for(var l=0;v.length>l;l++){var i=v[l];r[i]=r.levels[i.toUpperCase()]>=o?e(i):f}}else{if("string"!=typeof o)throw"log.setLevel() called with invalid level: "+o;r.setLevel(r.levels[o.toUpperCase()])}},r.enableAll=function(){r.setLevel(r.levels.TRACE)},r.disableAll=function(){r.setLevel(r.levels.SILENT)};try{i()}catch(c){r.setLevel(r.levels.SILENT)}return r}); \ No newline at end of file diff --git a/package.json b/package.json index 297f5e5..7764f14 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "loglevel", "description": "Minimal lightweight logging for JavaScript, adding reliable log level methods to any available console.log methods", - "version": "0.2.0", + "version": "0.3.0", "homepage": "https://github.com/pimterry/loglevel", "author": { "name": "Tim Perry",