<!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>
  <head>
    <title>event path</title>
    <script src="packages/polymer/boot.js"></script>
    <script src="packages/unittest/test_controller.js"></script>
    <!--
    Test ported from:
    https://github.com/Polymer/polymer/blob/7936ff8/test/js/events.js

    TODO(sigmund): when we have support for mutation observers, render all of
    the test in Dart (like events.js does in JS)
    -->
  </head>
  <body>

  <polymer-element name="test-a" on-click="clickHandler">
    <template></template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';

      @CustomTag("test-a")
      class TestA extends PolymerElement {
        TestA.created() : super.created();

        List clicks = [];
        void clickHandler() {
          clicks.add('host click on: $localName (id $id)');
        }
      }
    </script>
  </polymer-element>

  <polymer-element name="test-b">
    <template>
      <div>
        <span id="b-1">1</span>
        <span id="b-2" on-click="clickHandler">2</span>
      </div>
    </template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';

      @CustomTag("test-b")
      class TestB extends PolymerElement {
        TestB.created() : super.created();

        List clicks = [];
        void clickHandler(event, detail, target) {
          clicks.add('local click under $localName (id $id) on ${target.id}');
        }
      }
    </script>
  </polymer-element>

  <test-a id="a"></test-a>
  <test-b id="b"></test-b>

  <script type="application/dart" src="events_test.dart"></script>
  </body>
</html>
