aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Angular.js8
-rw-r--r--src/Scope.js15
-rw-r--r--src/Validators.js2
-rw-r--r--src/Widgets.js6
-rw-r--r--test/BinderTest.js9
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(){