aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Angular.js1
-rw-r--r--src/jqLite.js7
-rw-r--r--src/widgets2.js27
-rw-r--r--test/widgetsSpec.js32
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');
+ });
+
+
});