diff options
| -rw-r--r-- | src/Angular.js | 8 | ||||
| -rw-r--r-- | src/Scope.js | 15 | ||||
| -rw-r--r-- | src/Validators.js | 2 | ||||
| -rw-r--r-- | src/Widgets.js | 6 | ||||
| -rw-r--r-- | test/BinderTest.js | 9 |
5 files changed, 17 insertions, 23 deletions
diff --git a/src/Angular.js b/src/Angular.js index 4443890a..27f463ac 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -5,6 +5,8 @@ if (!window['console']) window['console']={'log':noop, 'error':noop}; var consoleNode, NOOP = 'noop', + NG_ERROR = 'ng-error', + NG_VALIDATION_ERROR = 'ng-validation-error', jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy _ = window['_'], jqLite = jQuery || jqLiteWrap, @@ -226,12 +228,12 @@ function escapeHtml(html) { replace(/>/g, '>'); } -function elementDecorateError(element, error) { +function elementError(element, type, error) { if (error) { - element.addClass(NG_VALIDATION_ERROR); + element.addClass(type); element.attr(NG_ERROR, error); } else { - element.removeClass(NG_VALIDATION_ERROR); + element.removeClass(type); element.removeAttr(NG_ERROR); } } diff --git a/src/Scope.js b/src/Scope.js index dbb6c4aa..42e7d5e5 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -77,14 +77,11 @@ function isRenderableElement(element) { } function rethrow(e) { throw e; } -function errorHandlerFor(element) { +function errorHandlerFor(element, error) { while (!isRenderableElement(element)) { element = element.parent() || jqLite(document.body); } - return function(error) { - element.attr('ng-error', angular.toJson(error)); - element.addClass('ng-exception'); - }; + elementError(element, 'ng-exception', isDefined(error) ? toJson(error) : error); } function createScope(parent, Class) { @@ -125,17 +122,13 @@ function createScope(parent, Class) { $tryEval: function (expression, exceptionHandler) { try { - var value = expressionCompile(expression).apply(instance, slice.call(arguments, 2, arguments.length)); - if (exceptionHandler) { - errorHandlerFor(exceptionHandler)(); - } - return value; + return expressionCompile(expression).apply(instance, slice.call(arguments, 2, arguments.length)); } catch (e) { error(e); if (isFunction(exceptionHandler)) { exceptionHandler(e); } else if (exceptionHandler) { - errorHandlerFor(exceptionHandler)(e); + errorHandlerFor(exceptionHandler, e); } } }, diff --git a/src/Validators.js b/src/Validators.js index ecf21a01..e3da0a81 100644 --- a/src/Validators.js +++ b/src/Validators.js @@ -99,7 +99,7 @@ foreach({ if (cache.state[cache.lastKey] !== null) { element.removeClass('ng-input-indicator-wait'); } - elementDecorateError(element, error); + elementError(element, NG_VALIDATION_ERROR, error); }); } diff --git a/src/Widgets.js b/src/Widgets.js index d9d72535..bc61f570 100644 --- a/src/Widgets.js +++ b/src/Widgets.js @@ -28,7 +28,7 @@ function valueAccessor(scope, element) { function validate(value) { var error = required && !trim(value) ? "Required" : validator({self:scope, scope:{get:scope.$get, set:scope.$set}}, value); if (error !== lastError) { - elementDecorateError(element, error); + elementError(element, NG_VALIDATION_ERROR, error); lastError = error; } return value; @@ -85,9 +85,7 @@ function optionsAccessor(scope, element) { function noopAccessor() { return { get: noop, set: noop }; } -var NG_ERROR = 'ng-error', - NG_VALIDATION_ERROR = 'ng-validation-error', - textWidget = inputWidget('keyup change', modelAccessor, valueAccessor, ''), +var textWidget = inputWidget('keyup change', modelAccessor, valueAccessor, ''), buttonWidget = inputWidget('click', noopAccessor, noopAccessor, undefined), INPUT_TYPE = { 'text': textWidget, diff --git a/test/BinderTest.js b/test/BinderTest.js index e6c8147a..e99f37e2 100644 --- a/test/BinderTest.js +++ b/test/BinderTest.js @@ -552,10 +552,11 @@ BinderTest.prototype.testActionOnAHrefThrowsError = function(){ assertEquals({a:"abc", b:2}, fromJson(input.attr('ng-error'))); assertTrue("should have an error class", input.hasClass('ng-exception')); - c.scope.action = noop; - input.click(); - dump(input.attr('ng-error')); - assertFalse('error class should be cleared', input.hasClass('ng-exception')); + // TODO: I think that exception should never get cleared so this portion of test makes no sense +// c.scope.action = noop; +// input.click(); +// dump(input.attr('ng-error')); +// assertFalse('error class should be cleared', input.hasClass('ng-exception')); }; BinderTest.prototype.testShoulIgnoreVbNonBindable = function(){ |
