aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.js
diff options
context:
space:
mode:
authorMisko Hevery2011-01-13 10:35:26 -0800
committerMisko Hevery2011-01-14 10:30:00 -0800
commit347be5ae9aa6829427e1e8e1b1e58afdf2a36c0a (patch)
tree3b350a12378c1ec63f60cce0fe674186d204726e /src/parser.js
parent934f44f69e94a77a3ea6c19dc5c6f82ade2cc669 (diff)
downloadangular.js-347be5ae9aa6829427e1e8e1b1e58afdf2a36c0a.tar.bz2
fixed select with ng:format
select (one/multiple) could not chose from a list of objects, since DOM requires string ids. Solved by adding index formatter, which exposed incorrect handling of formatters in select widgets.
Diffstat (limited to 'src/parser.js')
-rw-r--r--src/parser.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/parser.js b/src/parser.js
index 4227a6c8..ac62fb97 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -218,6 +218,7 @@ function parser(text, json){
var ZERO = valueFn(0),
tokens = lex(text, json),
assignment = _assignment,
+ assignable = logicalOR,
functionCall = _functionCall,
fieldAccess = _fieldAccess,
objectIndex = _objectIndex,
@@ -231,6 +232,7 @@ function parser(text, json){
functionCall =
fieldAccess =
objectIndex =
+ assignable =
filterChain =
functionIdent =
pipeFunction =
@@ -238,9 +240,11 @@ function parser(text, json){
}
return {
assertAllConsumed: assertAllConsumed,
+ assignable: assignable,
primary: primary,
statements: statements,
validator: validator,
+ formatter: formatter,
filter: filter,
//TODO: delete me, since having watch in UI is logic in UI. (leftover form getangular)
watch: watch
@@ -353,6 +357,33 @@ function parser(text, json){
return pipeFunction(angularValidator);
}
+ function formatter(){
+ var token = expect();
+ var formatter = angularFormatter[token.text];
+ var argFns = [];
+ var token;
+ if (!formatter) throwError('is not a valid formatter.', token);
+ while(true) {
+ if ((token = expect(':'))) {
+ argFns.push(expression());
+ } else {
+ return valueFn({
+ format:invokeFn(formatter.format),
+ parse:invokeFn(formatter.parse)
+ });
+ }
+ }
+ function invokeFn(fn){
+ return function(self, input){
+ var args = [input];
+ for ( var i = 0; i < argFns.length; i++) {
+ args.push(argFns[i](self));
+ }
+ return fn.apply(self, args);
+ };
+ }
+ }
+
function _pipeFunction(fnScope){
var fn = functionIdent(fnScope);
var argsFn = [];