diff options
| author | Misko Hevery | 2010-04-08 13:43:40 -0700 |
|---|---|---|
| committer | Misko Hevery | 2010-04-08 13:43:40 -0700 |
| commit | c4ef1f2fdd73bdaeda879e596d3d96e4e68cb6fd (patch) | |
| tree | 3fc1943a4599a764aef9a41d995246bb0e48f463 /src | |
| parent | e0ad7dfcd47196d0aa9271e84b2c4ac26cfda3f4 (diff) | |
| download | angular.js-c4ef1f2fdd73bdaeda879e596d3d96e4e68cb6fd.tar.bz2 | |
tests failing jstd to show cory
Diffstat (limited to 'src')
| -rw-r--r-- | src/Angular.js | 8 | ||||
| -rw-r--r-- | src/filters.js | 4 | ||||
| -rw-r--r-- | src/jqLite.js | 5 | ||||
| -rw-r--r-- | src/widgets.js | 12 |
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); |
