Supervised user whitelists: Cleanup
[chromium-blink-merge.git] / ui / webui / resources / cr_elements / cr_events / cr_events.js
blobef84609d0be3cbdd1be044c4c781e340a9157020
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.
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   },
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;
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 });