Rev 915 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*** This is the web browser implementation of `debug()`.** Expose `debug()` as the module.*/exports = module.exports = require('./debug');exports.log = log;exports.formatArgs = formatArgs;exports.save = save;exports.load = load;exports.useColors = useColors;exports.storage = 'undefined' != typeof chrome&& 'undefined' != typeof chrome.storage? chrome.storage.local: localstorage();/*** Colors.*/exports.colors = ['lightseagreen','forestgreen','goldenrod','dodgerblue','darkorchid','crimson'];/*** Currently only WebKit-based Web Inspectors, Firefox >= v31,* and the Firebug extension (any Firefox version) are known* to support "%c" CSS customizations.** TODO: add a `localStorage` variable to explicitly enable/disable colors*/function useColors() {// is webkit? http://stackoverflow.com/a/16459606/376773return ('WebkitAppearance' in document.documentElement.style) ||// is firebug? http://stackoverflow.com/a/398120/376773(window.console && (console.firebug || (console.exception && console.table))) ||// is firefox >= v31?// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages(navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31);}/*** Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.*/exports.formatters.j = function(v) {return JSON.stringify(v);};/*** Colorize log arguments if enabled.** @api public*/function formatArgs() {var args = arguments;var useColors = this.useColors;args[0] = (useColors ? '%c' : '')+ this.namespace+ (useColors ? ' %c' : ' ')+ args[0]+ (useColors ? '%c ' : ' ')+ '+' + exports.humanize(this.diff);if (!useColors) return args;var c = 'color: ' + this.color;args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));// the final "%c" is somewhat tricky, because there could be other// arguments passed either before or after the %c, so we need to// figure out the correct index to insert the CSS intovar index = 0;var lastC = 0;args[0].replace(/%[a-z%]/g, function(match) {if ('%%' === match) return;index++;if ('%c' === match) {// we only are interested in the *last* %c// (the user may have provided their own)lastC = index;}});args.splice(lastC, 0, c);return args;}/*** Invokes `console.log()` when available.* No-op when `console.log` is not a "function".** @api public*/function log() {// this hackery is required for IE8/9, where// the `console.log` function doesn't have 'apply'return 'object' === typeof console&& console.log&& Function.prototype.apply.call(console.log, console, arguments);}/*** Save `namespaces`.** @param {String} namespaces* @api private*/function save(namespaces) {try {if (null == namespaces) {exports.storage.removeItem('debug');} else {exports.storage.debug = namespaces;}} catch(e) {}}/*** Load `namespaces`.** @return {String} returns the previously persisted debug modes* @api private*/function load() {var r;try {r = exports.storage.debug;} catch(e) {}return r;}/*** Enable namespaces listed in `localStorage.debug` initially.*/exports.enable(load());/*** Localstorage attempts to return the localstorage.** This is necessary because safari throws* when a user disables cookies/localstorage* and you attempt to access it.** @return {LocalStorage}* @api private*/function localstorage(){try {return window.localStorage;} catch (e) {}}