diff options
| -rw-r--r-- | src/Angular.js | 1 | ||||
| -rw-r--r-- | src/jqLite.js | 7 | ||||
| -rw-r--r-- | src/widgets2.js | 27 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 32 |
4 files changed, 49 insertions, 18 deletions
diff --git a/src/Angular.js b/src/Angular.js index b76926b9..dc530921 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -44,7 +44,6 @@ function extensionList(angular, name) { } var consoleNode, msie, - VALUE = 'value', NOOP = 'noop', jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy slice = Array.prototype.slice, diff --git a/src/jqLite.js b/src/jqLite.js index 2ac3f6c9..2132bfc1 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -179,6 +179,13 @@ JQLite.prototype = { return this[0].textContent; }, + val: function(value) { + if (isDefined(value)) { + this[0].value = value; + } + return this[0].value; + }, + html: function(value) { if (isDefined(value)) { this[0].innerHTML = value; diff --git a/src/widgets2.js b/src/widgets2.js index cee0e49e..5425b5a4 100644 --- a/src/widgets2.js +++ b/src/widgets2.js @@ -36,23 +36,22 @@ function domAccessor(element) { return value; } return { - get: function(){ - return validate(element.attr(VALUE)); - }, - set: function(value){ - element.attr(VALUE, validate(value)); - } + get: function(){ return validate(element.val()); }, + set: function(value){ element.val(validate(value)); } }; } var NG_ERROR = 'ng-error', NG_VALIDATION_ERROR = 'ng-validation-error', + TEXT_META = ['', 'keyup change'], INPUT_META = { - 'text': ["", 'keyup change'] -}; + 'text': TEXT_META, + 'textarea': TEXT_META, + 'hidden': TEXT_META, + 'password': TEXT_META + }; -angularWidget('INPUT', function input(element){ - var meta = INPUT_META[lowercase(element.attr('type'))]; +function inputWidget(meta) { return meta ? function(element) { var scope = scopeAccessor(this, element), dom = domAccessor(element); @@ -62,6 +61,14 @@ angularWidget('INPUT', function input(element){ }); this.$watch(scope.get, dom.set); } : 0; +} + +angularWidget('INPUT', function input(element){ + return inputWidget(INPUT_META[lowercase(element[0].type)]); +}); + +angularWidget('TEXTAREA', function(){ + return inputWidget(INPUT_META['text']); }); diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index da9d5f9b..aeb7a613 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -25,13 +25,13 @@ describe("input widget", function(){ scope.set('name', 'Adam'); scope.updateView(); - expect(element.attr('value')).toEqual("Adam"); + expect(element.val()).toEqual("Adam"); - element.attr('value', 'Shyam'); + element.val('Shyam'); element.trigger('keyup'); expect(scope.get('name')).toEqual('Shyam'); - element.attr('value', 'Kai'); + element.val('Kai'); element.trigger('change'); expect(scope.get('name')).toEqual('Kai'); }); @@ -42,9 +42,9 @@ describe("input widget", function(){ scope.set('list', ['x', 'y', 'z']); scope.updateView(); - expect(element.attr('value')).toEqual("x, y, z"); + expect(element.val()).toEqual("x, y, z"); - element.attr('value', '1, 2, 3'); + element.val('1, 2, 3'); element.trigger('keyup'); expect(scope.get('list')).toEqual(['1', '2', '3']); }); @@ -59,7 +59,7 @@ describe("input widget", function(){ expect(element.hasClass('ng-validation-error')).toBeFalsy(); expect(element.attr('ng-error')).toBeFalsy(); - element.attr('value', 'x'); + element.val('x'); element.trigger('keyup'); expect(element.hasClass('ng-validation-error')).toBeTruthy(); expect(element.attr('ng-error')).toEqual('Not a number'); @@ -75,10 +75,28 @@ describe("input widget", function(){ expect(element.hasClass('ng-validation-error')).toBeFalsy(); expect(element.attr('ng-error')).toBeFalsy(); - element.attr('value', ''); + element.val(''); element.trigger('keyup'); expect(element.hasClass('ng-validation-error')).toBeTruthy(); expect(element.attr('ng-error')).toEqual('Required'); }); + it("should process ng-required", function() { + compile('<textarea name="name">Misko</textarea>'); + expect(scope.get('name')).toEqual("Misko"); + + scope.set('name', 'Adam'); + scope.updateView(); + expect(element.val()).toEqual("Adam"); + + element.val('Shyam'); + element.trigger('keyup'); + expect(scope.get('name')).toEqual('Shyam'); + + element.val('Kai'); + element.trigger('change'); + expect(scope.get('name')).toEqual('Kai'); + }); + + }); |
