<!DOCTYPE html>
<!--
Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.
-->

<html>
  <body>
    <template id="test" repeat="{{ keyPress | collect }}">
      <div>key: {{ }}</div>
    </template>
    <script type="application/dart">
      import 'dart:async';
      import 'dart:html';
      import 'package:polymer_expressions/polymer_expressions.dart';
      import 'package:polymer_expressions/async.dart';
      import 'package:template_binding/template_binding.dart';
      import 'package:observe/observe.dart';

      Iterable collect(StreamBinding s) {
        var list = new ObservableList();
        s.stream.listen((e) { list.add(e); });
        return list;
      }

      main() {
        var globals = {
          'keyPress': document.onKeyPress
              .map((e) => new String.fromCharCode(e.charCode)),
          'collect': collect,
        };

        templateBind(querySelector('#test'))
            ..bindingDelegate = new PolymerExpressions(globals: globals)
            ..model = null;
      }
    </script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>
