diff options
| author | Misko Hevery | 2012-03-23 14:03:24 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2012-03-28 11:16:35 -0700 | 
| commit | 2430f52bb97fa9d682e5f028c977c5bf94c5ec38 (patch) | |
| tree | e7529b741d70199f36d52090b430510bad07f233 /src/ng/log.js | |
| parent | 944098a4e0f753f06b40c73ca3e79991cec6c2e2 (diff) | |
| download | angular.js-2430f52bb97fa9d682e5f028c977c5bf94c5ec38.tar.bz2 | |
chore(module): move files around in preparation for more modules
Diffstat (limited to 'src/ng/log.js')
| -rw-r--r-- | src/ng/log.js | 116 | 
1 files changed, 116 insertions, 0 deletions
| diff --git a/src/ng/log.js b/src/ng/log.js new file mode 100644 index 00000000..d9d8994d --- /dev/null +++ b/src/ng/log.js @@ -0,0 +1,116 @@ +'use strict'; + +/** + * @ngdoc object + * @name angular.module.ng.$log + * @requires $window + * + * @description + * Simple service for logging. Default implementation writes the message + * into the browser's console (if present). + * + * The main purpose of this service is to simplify debugging and troubleshooting. + * + * @example +    <doc:example> +      <doc:source> +         <script> +           function LogCtrl($log) { +             this.$log = $log; +             this.message = 'Hello World!'; +           } +         </script> +         <div ng-controller="LogCtrl"> +           <p>Reload this page with open console, enter text and hit the log button...</p> +           Message: +           <input type="text" ng-model="message"/> +           <button ng-click="$log.log(message)">log</button> +           <button ng-click="$log.warn(message)">warn</button> +           <button ng-click="$log.info(message)">info</button> +           <button ng-click="$log.error(message)">error</button> +         </div> +      </doc:source> +      <doc:scenario> +      </doc:scenario> +    </doc:example> + */ + +function $LogProvider(){ +  this.$get = ['$window', function($window){ +    return { +      /** +       * @ngdoc method +       * @name angular.module.ng.$log#log +       * @methodOf angular.module.ng.$log +       * +       * @description +       * Write a log message +       */ +      log: consoleLog('log'), + +      /** +       * @ngdoc method +       * @name angular.module.ng.$log#warn +       * @methodOf angular.module.ng.$log +       * +       * @description +       * Write a warning message +       */ +      warn: consoleLog('warn'), + +      /** +       * @ngdoc method +       * @name angular.module.ng.$log#info +       * @methodOf angular.module.ng.$log +       * +       * @description +       * Write an information message +       */ +      info: consoleLog('info'), + +      /** +       * @ngdoc method +       * @name angular.module.ng.$log#error +       * @methodOf angular.module.ng.$log +       * +       * @description +       * Write an error message +       */ +      error: consoleLog('error') +    }; + +    function formatError(arg) { +      if (arg instanceof Error) { +        if (arg.stack) { +          arg = (arg.message && arg.stack.indexOf(arg.message) === -1) +              ? 'Error: ' + arg.message + '\n' + arg.stack +              : arg.stack; +        } else if (arg.sourceURL) { +          arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; +        } +      } +      return arg; +    } + +    function consoleLog(type) { +      var console = $window.console || {}, +          logFn = console[type] || console.log || noop; + +      if (logFn.apply) { +        return function() { +          var args = []; +          forEach(arguments, function(arg) { +            args.push(formatError(arg)); +          }); +          return logFn.apply(console, args); +        }; +      } + +      // we are IE which either doesn't have window.console => this is noop and we do nothing, +      // or we are IE where console.log doesn't have apply so we log at least first 2 args +      return function(arg1, arg2) { +        logFn(arg1, arg2); +      } +    } +  }]; +} | 
