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 /** | |
James Hawkins
2015/02/09 22:24:34
nit: Double-blank lines above JSDoc blocks (though
michaelpg
2015/02/09 22:40:04
Hmm I haven't seen that style in other web ui, whe
James Hawkins
2015/02/09 22:46:23
I forgot this isn't in the JS style guide, but the
michaelpg
2015/02/09 23:08:31
Done.
Dan Beam
2015/02/10 00:23:38
fwiw: I'd discourage this for consistency with oth
| |
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=} sender Node that declared the handler. | |
37 * @private | |
38 */ | |
39 forwardEvent_: function(e, detail, 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 |