1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 * `cr-events` provides helpers for handling events in Chrome Polymer elements.
11 * <cr-events id="events"></cr-events>
15 * this.$.events.forward(this.$.element, ['change']);
21 * Sets up an element to forward events across the shadow boundary, for events
22 * which normally stop at the root node (see http://goo.gl/WGMO9x).
23 * @param {!HTMLElement} element The element to forward events from.
24 * @param {!Array.<string>} events The events to forward.
26 forward: function(element, events) {
27 for (var i = 0; i < events.length; i++)
28 element.addEventListener(events[i], this.forwardEvent_);
32 * Forwards events that don't automatically cross the shadow boundary
33 * if the event should bubble.
34 * @param {!Event} e The event to forward.
35 * @param {*} detail Data passed when initializing the event.
36 * @param {Node=} opt_sender Node that declared the handler.
39 forwardEvent_: function(e, detail, opt_sender) {
43 var node = e.path[e.path.length - 1];
44 if (node instanceof ShadowRoot) {
45 // Forward the event to the shadow host.
47 node.host.fire(e.type, detail, node.host, true, e.cancelable);