aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2010-04-08 13:43:40 -0700
committerMisko Hevery2010-04-08 13:43:40 -0700
commitc4ef1f2fdd73bdaeda879e596d3d96e4e68cb6fd (patch)
tree3fc1943a4599a764aef9a41d995246bb0e48f463 /src
parente0ad7dfcd47196d0aa9271e84b2c4ac26cfda3f4 (diff)
downloadangular.js-c4ef1f2fdd73bdaeda879e596d3d96e4e68cb6fd.tar.bz2
tests failing jstd to show cory
Diffstat (limited to 'src')
-rw-r--r--src/Angular.js8
-rw-r--r--src/filters.js4
-rw-r--r--src/jqLite.js5
-rw-r--r--src/widgets.js12
4 files changed, 22 insertions, 7 deletions
diff --git a/src/Angular.js b/src/Angular.js
index d8b03464..7fb59f86 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -83,7 +83,7 @@ function extensionMap(angular, name) {
}
function jqLiteWrap(element) {
- if (typeof element == 'string') {
+ if (isString(element)) {
var div = document.createElement('div');
div.innerHTML = element;
element = div.childNodes[0];
@@ -102,6 +102,12 @@ function lowercase(value){ return isString(value) ? value.toLowerCase() : value;
function uppercase(value){ return isString(value) ? value.toUpperCase() : value; }
function trim(value) { return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; }
function nodeName(element) { return (element[0] || element).nodeName; }
+
+function isVisible(element) {
+ var rect = element[0].getBoundingClientRect();
+ return rect.width !=0 && rect.height !=0;
+}
+
function map(obj, iterator, context) {
var results = [];
foreach(obj, function(value, index, list) {
diff --git a/src/filters.js b/src/filters.js
index dac8d31d..0259f69c 100644
--- a/src/filters.js
+++ b/src/filters.js
@@ -24,7 +24,7 @@ var angularFilterGoogleChartApi;
foreach({
'currency': function(amount){
- jQuery(this.$element).toggleClass('ng-format-negative', amount < 0);
+ this.$element.toggleClass('ng-format-negative', amount < 0);
return '$' + angularFilter['number'].apply(this, [amount, 2]);
},
@@ -60,7 +60,7 @@ foreach({
},
'json': function(object) {
- jQuery(this.$element).addClass("ng-monospace");
+ this.$element.addClass("ng-monospace");
return toJson(object, true);
},
diff --git a/src/jqLite.js b/src/jqLite.js
index e9407987..6fc16e57 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -140,6 +140,11 @@ JQLite.prototype = {
this[0].className = trim((" " + this[0].className + " ").replace(/[\n\t]/g, " ").replace(" " + selector + " ", ""));
},
+ toggleClass: function(selector, condition) {
+ var self = this;
+ (condition ? self.addClass : self.removeClass).call(self, selector);
+ },
+
addClass: function( selector ) {
if (!this.hasClass(selector)) {
this[0].className = trim(this[0].className + ' ' + selector);
diff --git a/src/widgets.js b/src/widgets.js
index e89e8ca4..faa60043 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -22,16 +22,20 @@ function valueAccessor(scope, element) {
var validatorName = element.attr('ng-validate') || NOOP,
validator = compileValidator(validatorName),
required = element.attr('ng-required'),
- lastError,
+ lastError, lastVisible,
invalidWidgets = scope.$invalidWidgets || {markValid:noop, markInvalid:noop};
required = required || required === '';
if (!validator) throw "Validator named '" + validatorName + "' not found.";
function validate(value) {
- var error = required && !trim(value) ? "Required" : validator({state:scope, scope:{get:scope.$get, set:scope.$set}}, value);
- if (error !== lastError) {
+ var error = required && !trim(value) ?
+ "Required" :
+ validator({state:scope, scope:{get:scope.$get, set:scope.$set}}, value),
+ visible = isVisible(element);
+ if (error !== lastError || visible !== lastVisible) {
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
- if (error)
+ lastVisible = visible;
+ if (error && visible)
invalidWidgets.markInvalid(element);
else
invalidWidgets.markValid(element);