| Index: third_party/polymer/components/web-animations-js/src/web-animations-bonus-cancel-events.js
|
| diff --git a/third_party/polymer/components/web-animations-js/src/web-animations-bonus-cancel-events.js b/third_party/polymer/components/web-animations-js/src/web-animations-bonus-cancel-events.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3905496f480a741f03b76100284cd076dda95e33
|
| --- /dev/null
|
| +++ b/third_party/polymer/components/web-animations-js/src/web-animations-bonus-cancel-events.js
|
| @@ -0,0 +1,83 @@
|
| +// Copyright 2016 Google Inc. All rights reserved.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +(function() {
|
| +
|
| + if (document.createElement('div').animate([]).oncancel !== undefined) {
|
| + return;
|
| + }
|
| +
|
| + if (WEB_ANIMATIONS_TESTING) {
|
| + var now = function() { return webAnimations1.timeline.currentTime; };
|
| + } else if (window.performance && performance.now) {
|
| + var now = function() { return performance.now(); };
|
| + } else {
|
| + var now = function() { return Date.now(); };
|
| + }
|
| +
|
| + var AnimationCancelEvent = function(target, currentTime, timelineTime) {
|
| + this.target = target;
|
| + this.currentTime = currentTime;
|
| + this.timelineTime = timelineTime;
|
| +
|
| + this.type = 'cancel';
|
| + this.bubbles = false;
|
| + this.cancelable = false;
|
| + this.currentTarget = target;
|
| + this.defaultPrevented = false;
|
| + this.eventPhase = Event.AT_TARGET;
|
| + this.timeStamp = Date.now();
|
| + };
|
| +
|
| + var originalElementAnimate = window.Element.prototype.animate;
|
| + window.Element.prototype.animate = function(effectInput, options) {
|
| + var animation = originalElementAnimate.call(this, effectInput, options);
|
| +
|
| + animation._cancelHandlers = [];
|
| + animation.oncancel = null;
|
| +
|
| + var originalCancel = animation.cancel;
|
| + animation.cancel = function() {
|
| + originalCancel.call(this);
|
| + var event = new AnimationCancelEvent(this, null, now());
|
| + var handlers = this._cancelHandlers.concat(this.oncancel ? [this.oncancel] : []);
|
| + setTimeout(function() {
|
| + handlers.forEach(function(handler) {
|
| + handler.call(event.target, event);
|
| + });
|
| + }, 0);
|
| + };
|
| +
|
| + var originalAddEventListener = animation.addEventListener;
|
| + animation.addEventListener = function(type, handler) {
|
| + if (typeof handler == 'function' && type == 'cancel')
|
| + this._cancelHandlers.push(handler);
|
| + else
|
| + originalAddEventListener.call(this, type, handler);
|
| + };
|
| +
|
| + var originalRemoveEventListener = animation.removeEventListener;
|
| + animation.removeEventListener = function(type, handler) {
|
| + if (type == 'cancel') {
|
| + var index = this._cancelHandlers.indexOf(handler);
|
| + if (index >= 0)
|
| + this._cancelHandlers.splice(index, 1);
|
| + } else {
|
| + originalRemoveEventListener.call(this, type, handler);
|
| + }
|
| + };
|
| +
|
| + return animation;
|
| + };
|
| +})();
|
|
|