| Index: ui/webui/resources/cr_elements/cr_events/cr-events.js
|
| diff --git a/ui/webui/resources/cr_elements/cr_events/cr-events.js b/ui/webui/resources/cr_elements/cr_events/cr-events.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6f5883e18a15881070e25adab77995674c50f105
|
| --- /dev/null
|
| +++ b/ui/webui/resources/cr_elements/cr_events/cr-events.js
|
| @@ -0,0 +1,51 @@
|
| +/* Copyright 2015 The Chromium Authors. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file. */
|
| +
|
| +/**
|
| + * @fileoverview
|
| + * `cr-events` provides helpers for handling events in Chrome Polymer elements.
|
| + *
|
| + * Example:
|
| + *
|
| + * <cr-events id="events"></cr-events>
|
| + *
|
| + * Usage:
|
| + *
|
| + * this.$.events.forward(this.$.element, ['change']);
|
| + *
|
| + * @element cr-events
|
| + */
|
| +Polymer({
|
| + /**
|
| + * Sets up an element to forward events across the shadow boundary, for events
|
| + * which normally stop at the root node (see http://goo.gl/WGMO9x).
|
| + * @param {!HTMLElement} element The element to forward events from.
|
| + * @param {!Array.<string>} events The events to forward.
|
| + */
|
| + forward: function(element, events) {
|
| + for (var i = 0; i < events.length; i++)
|
| + element.addEventListener(events[i], this.forwardEvent_);
|
| + },
|
| +
|
| +
|
| + /**
|
| + * Forwards events that don't automatically cross the shadow boundary
|
| + * if the event should bubble.
|
| + * @param {!Event} e The event to forward.
|
| + * @param {*} detail Data passed when initializing the event.
|
| + * @param {Node=} opt_sender Node that declared the handler.
|
| + * @private
|
| + */
|
| + forwardEvent_: function(e, detail, opt_sender) {
|
| + if (!e.bubbles)
|
| + return;
|
| +
|
| + var node = e.path[e.path.length - 1];
|
| + if (node instanceof ShadowRoot) {
|
| + // Forward the event to the shadow host.
|
| + e.stopPropagation();
|
| + node.host.fire(e.type, detail, node.host, true, e.cancelable);
|
| + }
|
| + },
|
| +});
|
|
|