diff options
| author | Misko Hevery | 2011-01-13 10:35:26 -0800 | 
|---|---|---|
| committer | Misko Hevery | 2011-01-14 10:30:00 -0800 | 
| commit | 347be5ae9aa6829427e1e8e1b1e58afdf2a36c0a (patch) | |
| tree | 3b350a12378c1ec63f60cce0fe674186d204726e /src/parser.js | |
| parent | 934f44f69e94a77a3ea6c19dc5c6f82ade2cc669 (diff) | |
| download | angular.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.js | 31 | 
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 = [];  | 
