diff options
Diffstat (limited to 'src/Angular.js')
| -rw-r--r-- | src/Angular.js | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/src/Angular.js b/src/Angular.js index 9b3634be..1549e7a7 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -18,18 +18,32 @@ if (typeof Node == 'undefined') { } function noop() {} +function identity($) {return $;} if (!window['console']) window['console']={'log':noop, 'error':noop}; +function extension(angular, name) { + var extPoint; + return angular[name] || (extPoint = angular[name] = function (name, fn, prop){ + if (isDefined(fn)) { + extPoint[name] = extend(fn, prop || {}); + } + return extPoint[name]; + }); +} + var consoleNode, msie, jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy foreach = _.each, extend = _.extend, - identity = _.identity, + slice = Array.prototype.slice, angular = window['angular'] || (window['angular'] = {}), - angularValidator = angular['validator'] || (angular['validator'] = {}), - angularFilter = angular['filter'] || (angular['filter'] = {}), - angularFormatter = angular['formatter'] || (angular['formatter'] = {}), - angularCallbacks = angular['callbacks'] || (angular['callbacks'] = {}), + angularDirective = extension(angular, 'directive'), + angularMarkup = extension(angular, 'markup'), + angularWidget = extension(angular, 'widget'), + angularValidator = extension(angular, 'validator'), + angularFilter = extension(angular, 'filter'), + angularFormatter = extension(angular, 'formatter'), + angularCallbacks = extension(angular, 'callbacks'), angularAlert = angular['alert'] || (angular['alert'] = function(){ log(arguments); window.alert.apply(window, arguments); }); @@ -37,6 +51,18 @@ angular['copy'] = copy; var isVisible = isVisible || function (element) { return jQuery(element).is(":visible"); +}; + +function isDefined(value){ + return typeof value != 'undefined'; +} + +function isObject(value){ + return typeof value == 'object'; +} + +function isFunction(value){ + return typeof value == 'function'; } function log(a, b, c){ @@ -154,12 +180,30 @@ function escapeAttr(html) { } function bind(_this, _function) { - if (!_this) - throw "Missing this"; - if (!_.isFunction(_function)) - throw "Missing function"; + var curryArgs = slice.call(arguments, 2, arguments.length); + return function() { + return _function.apply(_this, curryArgs.concat(slice.call(arguments, 0, arguments.length))); + }; +} + +function bindTry(_this, _function) { + var args = arguments, + last = args.length - 1, + curryArgs = slice.call(args, 2, last), + exceptionHandler = args[last]; return function() { - return _function.apply(_this, arguments); + try { + return _function.apply(_this, curryArgs.concat(slice.call(arguments, 0, arguments.length))); + } catch (e) { + if (e = exceptionHandler(e)) throw e; + } + }; +} + +function errorHandlerFor(element) { + return function(error){ + element.attr('ng-error', angular.toJson(error)); + element.addClass('ng-exception'); }; } |
