aboutsummaryrefslogtreecommitdiff
path: root/catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js')
-rw-r--r--catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js b/catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js
new file mode 100644
index 00000000..c1b6ecdc
--- /dev/null
+++ b/catapult/third_party/polymer/components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js
@@ -0,0 +1,63 @@
+// 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(shared) {
+ // If the polyfill is being loaded in a context where Element.animate is
+ // supported but object-form syntax is not, then creating an animation
+ // using the new syntax will either have no effect or will throw an exception.
+ // In either case, we want to proceed to load this part of the polyfill.
+ //
+ // The test animation uses an opacity other than the one the element already
+ // has, and doesn't need to change during the animation for the test to work.
+ // After the test, the element's opacity will be left how we found it:
+ // - If the animation is not created, the test will leave the element's
+ // opacity untouched at originalOpacity.
+ // - If the animation is created, it will be cancelled, and leave the
+ // element's opacity at originalOpacity.
+ // - If the animation is somehow created and runs without being cancelled,
+ // when it finishes after 1ms, it will cease to have any effect (because
+ // fill is not specified), and opacity will again be left at originalOpacity.
+ var element = document.documentElement;
+ var animation = null;
+ var animated = false;
+ try {
+ var originalOpacity = getComputedStyle(element).getPropertyValue('opacity');
+ var testOpacity = originalOpacity == '0' ? '1' : '0';
+ animation = element.animate({'opacity': [testOpacity, testOpacity]},
+ {duration: 1});
+ animation.currentTime = 0;
+ animated = getComputedStyle(element).getPropertyValue('opacity') == testOpacity;
+ } catch (error) {
+ } finally {
+ if (animation)
+ animation.cancel();
+ }
+ if (animated) {
+ return;
+ }
+
+ var originalElementAnimate = window.Element.prototype.animate;
+ window.Element.prototype.animate = function(effectInput, options) {
+ if (window.Symbol && Symbol.iterator && Array.prototype.from && effectInput[Symbol.iterator]) {
+ // Handle custom iterables in most browsers by converting to an array
+ effectInput = Array.from(effectInput);
+ }
+
+ if (!Array.isArray(effectInput) && effectInput !== null) {
+ effectInput = shared.convertToArrayForm(effectInput);
+ }
+
+ return originalElementAnimate.call(this, effectInput, options);
+ };
+})(webAnimationsShared);