<!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:mdv/mdv.dart' as mdv;
      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(query('#test'))
            ..bindingDelegate = new PolymerExpressions(globals: globals)
            ..model = null;
      }
    </script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>
