| OLD | NEW |
| (Empty) |
| 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. | |
| 4 | |
| 5 /** | |
| 6 * @fileoverview | |
| 7 * `cr-events` provides helpers for handling events in Chrome Polymer elements. | |
| 8 * | |
| 9 * Example: | |
| 10 * | |
| 11 * <cr-events id="events"></cr-events> | |
| 12 * | |
| 13 * Usage: | |
| 14 * | |
| 15 * this.$.events.forward(this.$.element, ['change']); | |
| 16 * | |
| 17 * @element cr-events | |
| 18 */ | |
| 19 Polymer({ | |
| 20 /** | |
| 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. | |
| 25 */ | |
| 26 forward: function(element, events) { | |
| 27 for (var i = 0; i < events.length; i++) | |
| 28 element.addEventListener(events[i], this.forwardEvent_); | |
| 29 }, | |
| 30 | |
| 31 /** | |
| 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. | |
| 37 * @private | |
| 38 */ | |
| 39 forwardEvent_: function(e, detail, opt_sender) { | |
| 40 if (!e.bubbles) | |
| 41 return; | |
| 42 | |
| 43 var node = e.path[e.path.length - 1]; | |
| 44 if (node instanceof ShadowRoot) { | |
| 45 // Forward the event to the shadow host. | |
| 46 e.stopPropagation(); | |
| 47 node.host.fire(e.type, detail, node.host, true, e.cancelable); | |
| 48 } | |
| 49 }, | |
| 50 }); | |
| OLD | NEW |