<!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/unittest/test_controller.js"></script>
    <!--
    Test ported from:
    https://github.com/Polymer/polymer/blob/7936ff8/test/html/event-path.html

    This test actually doesn't test the polymer's event layer. It just ensures
    that tests are propagated in the right order when using Shadow DOM.
    -->
  </head>
  <body>

  <polymer-element name="x-selector">
    <template>
      <div id="selectorDiv">
        <content id="selectorContent"></content>
      </div>
    </template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';
      @CustomTag("x-selector")
      class XSelector extends PolymerElement {
        XSelector.created() : super.created();
      }
    </script>
  </polymer-element>

  <polymer-element name="x-overlay">
    <template>
      <content id="overlayContent"></content>
    </template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';
      @CustomTag("x-overlay")
      class XOverlay extends PolymerElement {
        XOverlay.created() : super.created();
      }
    </script>
  </polymer-element>

  <polymer-element name="x-menu" extends="x-selector">
    <template>
      <div id="menuDiv">
        <shadow id="menuShadow"></shadow>
      </div>
    </template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';
      @CustomTag("x-menu")
      class XMenu extends PolymerElement {
        XMenu.created() : super.created();
      }
    </script>
  </polymer-element>

  <polymer-element name="x-menu-button">
    <template>
      <div>
        <x-overlay id="overlay">
          <div id="menuButtonDiv">
            <x-menu id="menu">
              <content id="menuButtonContent"></content>
            </x-menu>
          </div>
        </x-overlay>
      </div>
    </template>
    <script type="application/dart">
      import 'package:polymer/polymer.dart';
      @CustomTag("x-menu-button")
      class XMenuButton extends PolymerElement {
        XMenuButton.created() : super.created();
      }
    </script>
  </polymer-element>

  <x-menu-button id="menuButton">
    <div id="item1"><div id="source"></div>Item1</div>
    <div id="item2">Item2</div>
  </x-menu-button>


  <script type="application/dart" src="event_path_test.dart"></script>
  <script type="application/dart" src="packages/polymer/init.dart"></script>
  </body>
</html>
