From 8d3b68518becd18b82e8ee3cbf38cdf55a1cd57e Mon Sep 17 00:00:00 2001
From: Benjamin Franzke <bfr@qbus.de>
Date: Tue, 21 Dec 2021 08:41:17 +0100
Subject: [PATCH] [TASK] Add missing grunt copy action for web-animate polyfill

Commands executed:
    yarn add web-animate
    yarn build

Releases: main
Resolves: #96410
Related: #91072
Related: #96323
Change-Id: Id4c06262af9122c638861e798b1f9bfade8ee56f
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72754
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Benjamin Franzke <bfr@qbus.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benjamin Franzke <bfr@qbus.de>
---
 Build/Gruntfile.js                            |   1 +
 Build/package.json                            |   3 +-
 Build/yarn.lock                               |   5 +
 .../Public/JavaScript/Contrib/web-animate.js  | 383 ++----------------
 4 files changed, 53 insertions(+), 339 deletions(-)

diff --git a/Build/Gruntfile.js b/Build/Gruntfile.js
index c63a2d2ad6e2..a1fc69d2c906 100644
--- a/Build/Gruntfile.js
+++ b/Build/Gruntfile.js
@@ -499,6 +499,7 @@ module.exports = function (grunt) {
         files: {
           'JavaScript/Contrib/muuri.js': 'muuri/dist/muuri.min.js',
           'JavaScript/Contrib/chartjs.js': 'chart.js/dist/Chart.min.js',
+          'JavaScript/Contrib/web-animate.js': 'web-animate/dist/web-animate.min.js',
           'Css/Contrib/chart.css': 'chart.js/dist/Chart.min.css'
         }
       },
diff --git a/Build/package.json b/Build/package.json
index 1baa5ac96f63..69733b0dc508 100644
--- a/Build/package.json
+++ b/Build/package.json
@@ -113,6 +113,7 @@
     "source-sans-pro": "^3.6.0",
     "tablesort": "^5.2.1",
     "taboverride": "^4.0.3",
-    "tagsort": "^1.4.0"
+    "tagsort": "^1.4.0",
+    "web-animate": "^0.4.1"
   }
 }
diff --git a/Build/yarn.lock b/Build/yarn.lock
index 458db7240f1c..0f9731d70d83 100644
--- a/Build/yarn.lock
+++ b/Build/yarn.lock
@@ -9437,6 +9437,11 @@ wcwidth@^1.0.0:
   dependencies:
     defaults "^1.0.3"
 
+web-animate@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/web-animate/-/web-animate-0.4.1.tgz#3567c6e5c8152af33dd06ae31d996f6fcc73024c"
+  integrity sha512-19egpU7SyDOp76Uw4CUlH20CEeXFFQC4HRmdERXlwGV37960ywZXvEcljnRgAoyWeXuppbyqOqFjQukCSnO+mw==
+
 websocket-driver@>=0.5.1:
   version "0.7.4"
   resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/Contrib/web-animate.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/Contrib/web-animate.js
index 767e72777c28..8a5edaab7a74 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/Contrib/web-animate.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/Contrib/web-animate.js
@@ -1,338 +1,45 @@
-/**
- * https://github.com/animationatwork/web-animate
- * @license MIT
- */
-var WebAnimate = (function (exports) {
-  'use strict';
-
-  var upperCasePattern = /[A-Z]/g;
-  var propLower = function (m) { return "-" + m.toLowerCase(); };
-  var msPattern = /^ms-/;
-  var _ = undefined;
-  var idle = 'idle';
-  var finished = 'finished';
-  var paused = 'paused';
-  var running = 'running';
-
-  function hyphenate(propertyName) {
-    return (propertyName
-      .replace(upperCasePattern, propLower)
-      .replace(msPattern, '-ms-'));
-  }
-  function propsToString(keyframe) {
-    var rules = [];
-    for (var key in keyframe) {
-      var value = keyframe[key];
-      if (value !== null && value !== _) {
-        rules.push(hyphenate(key.trim()) + ':' + value);
-      }
-    }
-    return rules.sort().join(';');
-  }
-  function waapiToString(keyframes) {
-    var frames = {};
-    for (var i = 0, ilen = keyframes.length; i < ilen; i++) {
-      var keyframe = keyframes[i];
-      var offset = keyframe.offset;
-      var target = frames[offset] || (frames[offset] = {});
-      for (var key in keyframe) {
-        var newKey = key;
-        if (key === 'easing') {
-          newKey = 'animation-timing-function';
-        }
-        if (key !== 'offset') {
-          target[newKey] = keyframe[key];
-        }
-      }
-    }
-    var keys = Object.keys(frames).sort();
-    var jlen = keys.length;
-    var rules = Array(jlen);
-    for (var j = 0; j < jlen; j++) {
-      var key = keys[j];
-      rules[j] = +key * 100 + '%{' + propsToString(frames[key]) + '}';
-    }
-    return rules.join('\n');
-  }
-
-  var sheet;
-  var rulesAdded = {};
-  function stringHash(str) {
-    var value = 5381;
-    var len = str.length;
-    while (len--) {
-      value = (value * 33) ^ str.charCodeAt(len);
-    }
-    return (value >>> 0).toString(36);
-  }
-  function insertKeyframes(rules) {
-    var hash = 'ea_' + stringHash(rules);
-    if (!rulesAdded[hash]) {
-      rulesAdded[hash] = 1;
-      if (!sheet) {
-        var styleElement = document.createElement('style');
-        styleElement.setAttribute('rel', 'stylesheet');
-        document.head.appendChild(styleElement);
-        sheet = styleElement.sheet;
-      }
-      sheet.insertRule("@keyframes " + hash + "{" + rules + "}", sheet.cssRules.length);
-    }
-    return hash;
-  }
-
-  var global = window || global;
-  var lastTime;
-  var taskId;
-  function resetTime() {
-    lastTime = 0;
-    taskId = 0;
-  }
-  function now() {
-    taskId = taskId || nextFrame(resetTime);
-    return (lastTime = lastTime || (global.performance || Date).now());
-  }
-  var nextFrame = function (fn, time) { return setTimeout(fn, time || 0); };
-
-  var ANIMATION_PROPS = [
-    'Name',
-    'Duration',
-    'Delay',
-    'IterationCount',
-    'Direction',
-    'FillMode',
-    'PlayState',
-    'TimingFunction'
-  ];
-  var ANIMATION = 'animation';
-  var WEBKIT = 'webkitAnimation';
-  var MS = 'msAnimation';
-  function enqueueElement(el) {
-    var animations = el._animations;
-    var style = el.style;
-    var lastVisibility = style.visibility;
-    style.visibility = 'hidden';
-    for (var i = 0, ilen = ANIMATION_PROPS.length; i < ilen; i++) {
-      var key = ANIMATION_PROPS[i];
-      style[ANIMATION + key] = style[WEBKIT + key] = style[MS + key] = '';
-    }
-    void el.offsetWidth;
-    for (var i = 0, ilen = ANIMATION_PROPS.length; i < ilen; i++) {
-      var key = ANIMATION_PROPS[i];
-      var value = void 0;
-      for (var name in animations) {
-        var animation = animations[name];
-        if (animation) {
-          value = (value ? ',' : '') + animation[key];
-        }
-      }
-      style[ANIMATION + key] = style[WEBKIT + key] = style[MS + key] = value;
-    }
-    style.visibility = lastVisibility;
-  }
-
-  var epsilon = 0.0001;
-  function Animation(element, keyframes, timingOrDuration) {
-    var timing = typeof timingOrDuration === 'number'
-      ? { duration: timingOrDuration }
-      : timingOrDuration;
-    timing.direction = timing.direction || 'normal';
-    timing.easing = timing.easing || 'linear';
-    timing.iterations = timing.iterations || 1;
-    timing.fill = timing.fill || 'none';
-    timing.delay = timing.delay || 0;
-    timing.endDelay = timing.endDelay || 0;
-    var self = this;
-    self._element = element;
-    self._rate = 1;
-    var fill = timing.fill;
-    var fillBoth = fill === 'both';
-    self._fillB = fillBoth || fill === 'forwards';
-    self._fillF = fillBoth || fill === 'backwards';
-    var rules = waapiToString(keyframes);
-    self.id = insertKeyframes(rules);
-    self._timing = timing;
-    self._totalTime = (timing.delay || 0) + timing.duration * timing.iterations + (timing.endDelay || 0);
-    self._yoyo = timing.direction.indexOf('alternate') !== -1;
-    self._reverse = timing.direction.indexOf('reverse') !== -1;
-    self.finish = self.finish.bind(self);
-    self.play();
-  }
-  Animation.prototype = {
-    get currentTime() {
-      var time = updateTiming(this)._time;
-      return isFinite(time) ? time : null;
-    },
-    set currentTime(val) {
-      var self = this;
-      self._time = val;
-      updateTiming(self);
-      scheduleOnFinish(self);
-      updateElement(self);
-    },
-    get playbackRate() {
-      return updateTiming(this)._rate;
-    },
-    set playbackRate(val) {
-      var self = this;
-      self._rate = val;
-      updateTiming(self);
-      scheduleOnFinish(self);
-      updateElement(self);
-    },
-    get playState() {
-      return updateTiming(this)._state;
-    },
-    cancel: function () {
-      var self = this;
-      updateTiming(self);
-      self._time = self._startTime = _;
-      self._state = idle;
-      clearOnFinish(self);
-      updateElement(self);
-      self.oncancel && self.oncancel();
-    },
-    finish: function () {
-      var self = this;
-      updateTiming(self);
-      var start = 0 + epsilon;
-      var end = self._totalTime - epsilon;
-      self._state = finished;
-      self._time = self._rate >= 0 ? (self._fillB ? end : start) : self._fillF ? start : end;
-      self._startTime = _;
-      self.pending = false;
-      clearOnFinish(self);
-      updateElement(self);
-      self.onfinish && self.onfinish();
-    },
-    play: function () {
-      var self = this;
-      updateTiming(self);
-      var isForwards = self._rate >= 0;
-      var time = self._time === _ ? _ : Math.round(self._time);
-      time = isForwards && (time === _ || time >= self._totalTime) ? 0
-        : !isForwards && (time === _ || time <= 0)
-          ? self._totalTime : time;
-      self._state = running;
-      self._time = time;
-      self._startTime = now();
-      scheduleOnFinish(self);
-      updateElement(self);
-    },
-    pause: function () {
-      var self = this;
-      if (self._state === finished) {
-        return;
-      }
-      updateTiming(self);
-      self._state = paused;
-      self._startTime = _;
-      clearOnFinish(self);
-      updateElement(self);
-    },
-    reverse: function () {
-      this.playbackRate = this._rate * -1;
-    }
-  };
-  function clearOnFinish(self) {
-    self._finishTaskId && clearTimeout(self._finishTaskId);
-  }
-  function updateElement(self) {
-    var el = self._element;
-    var state = self._state;
-    var style = el.style;
-    if (state === idle) {
-      style.animationName = style.animationPlayState = style.animationDelay = '';
-    }
-    else {
-      if (!isFinite(self._time)) {
-        self._time = self._rate >= 0 ? 0 : self._totalTime;
-      }
-      updateAnimation(self);
-    }
-  }
-  function updateAnimation(self) {
-    var s = self._state, t = self._timing;
-    var playState = s === finished || s === paused ? paused : s;
-    var el = self._element;
-    var animations = el._animations || (el._animations = {});
-    var a = animations[self.id] || (animations[self.id] = {});
-    if (s === idle) {
-      for (var key in a) {
-        a[key] = _;
-      }
-    }
-    else {
-      a.Name = self.id;
-      a.Duration = self._totalTime + 'ms';
-      a.Delay = -toLocalTime(self) + 'ms';
-      a.TimingFunction = t.easing;
-      a.IterationCount = isFinite(t.iterations) ? t.iterations + '' : 'infinite';
-      a.Direction = t.direction;
-      a.FillMode = t.fill;
-      a.PlayState = playState;
-    }
-    enqueueElement(el);
-  }
-  function toLocalTime(self) {
-    var timing = self._timing;
-    var timeLessDelay = self._time - (timing.delay + timing.endDelay);
-    var localTime = timeLessDelay % timing.duration;
-    if (self._reverse) {
-      localTime = self._timing.duration - localTime;
-    }
-    if (self._yoyo && !(Math.floor(timeLessDelay / timing.duration) % 2)) {
-      localTime = self._timing.duration - localTime;
-    }
-    return self._totalTime < localTime ? self._totalTime : localTime < 0 ? 0 : localTime;
-  }
-  function updateTiming(self) {
-    var startTime = self._startTime;
-    var state = self._state;
-    if (!self.pending && state === running) {
-      self.pending = true;
-      var next = now();
-      var time = void 0;
-      time = Math.round(self._time + (next - startTime));
-      self._time = time;
-      self._startTime = next;
-      var isForwards = self._rate >= 0;
-      if ((isForwards && time >= self._totalTime) || (!isForwards && time <= 0)) {
-        self.finish();
-      }
-      self.pending = false;
-    }
-    return self;
-  }
-  function scheduleOnFinish(self) {
-    if (self._state !== running) {
-      return;
-    }
-    clearOnFinish(self);
-    var isForwards = self._rate >= 0;
-    var _remaining = isForwards ? self._totalTime - self._time : self._time;
-    self._finishTaskId = nextFrame(self.finish, _remaining);
-  }
-
-  function animateElement(keyframes, timingOrDuration) {
-    return new Animation(this, keyframes, timingOrDuration);
-  }
-  function animate(el, keyframes, timingOrDuration) {
-    return animateElement.call(el, keyframes, timingOrDuration);
-  }
-  function polyfill() {
-    Element.prototype.animate = animateElement;
-  }
-  function isPolyfilled() {
-    return Element.prototype.animate === animateElement;
-  }
-  if (typeof Element.prototype.animate === 'undefined') {
-    polyfill();
-  }
-
-  exports.animate = animate;
-  exports.polyfill = polyfill;
-  exports.isPolyfilled = isPolyfilled;
-
-  return exports;
-
-}({}));
+var WebAnimate=function(t){"use strict"
+var i,e=/[A-Z]/g,n=function(t){return"-"+t.toLowerCase()},a=/^ms-/,r=void 0,o="idle",s="finished",l="paused",m="running"
+function f(t){var i=[]
+for(var o in t){var s=t[o]
+null!==s&&s!==r&&i.push(o.trim().replace(e,n).replace(a,"-ms-")+":"+s)}return i.sort().join(";")}var u,_,c={},d=window||d
+function h(){u=0,_=0}function v(){return _=_||y(h),u=u||(d.performance||Date).now()}var y=function(t,i){return setTimeout(t,i||0)},p=["Name","Duration","Delay","IterationCount","Direction","FillMode","PlayState","TimingFunction"],g="animation",T="webkitAnimation",b="msAnimation",D=1e-4
+function k(t,e,n){var a="number"==typeof n?{duration:n}:n
+a.direction=a.direction||"normal",a.easing=a.easing||"linear",a.iterations=a.iterations||1,a.fill=a.fill||"none",a.delay=a.delay||0,a.endDelay=a.endDelay||0
+var r=this
+r._element=t,r._rate=1
+var o=a.fill,s="both"===o
+r._fillB=s||"forwards"===o,r._fillF=s||"backwards"===o
+var l=function(t){for(var i={},e=0,n=t.length;n>e;e++){var a=t[e],r=a.offset,o=i[r]||(i[r]={})
+for(var s in a){var l=s
+"easing"===s&&(l="animation-timing-function"),"offset"!==s&&(o[l]=a[s])}}for(var m=Object.keys(i).sort(),u=m.length,_=Array(u),c=0;u>c;c++)s=m[c],_[c]=100*+s+"%{"+f(i[s])+"}"
+return _.join("\n")}(e)
+r.id=function(t){var e="ea_"+function(t){for(var i=5381,e=t.length;e--;)i=33*i^t.charCodeAt(e)
+return(i>>>0).toString(36)}(t)
+if(!c[e]){if(c[e]=1,!i){var n=document.createElement("style")
+n.setAttribute("rel","stylesheet"),document.head.appendChild(n),i=n.sheet}i.insertRule("@keyframes "+e+"{"+t+"}",i.cssRules.length)}return e}(l),r._timing=a,r._totalTime=(a.delay||0)+a.duration*a.iterations+(a.endDelay||0),r._yoyo=-1!==a.direction.indexOf("alternate"),r._reverse=-1!==a.direction.indexOf("reverse"),r.finish=r.finish.bind(r),r.play()}function F(t){t._finishTaskId&&clearTimeout(t._finishTaskId)}function w(t){var i=t._element,e=t._state,n=i.style
+e===o?n.animationName=n.animationPlayState=n.animationDelay="":(isFinite(t._time)||(t._time=0>t._rate?t._totalTime:0),function(t){var i,e,n,a,m=t._state,f=t._timing,u=m===s||m===l?l:m,_=t._element,c=_._animations||(_._animations={}),d=c[t.id]||(c[t.id]={})
+if(m===o)for(var h in d)d[h]=r
+else d.Name=t.id,d.Duration=t._totalTime+"ms",d.Delay=(i=t,e=i._timing,n=i._time-(e.delay+e.endDelay),a=n%e.duration,i._reverse&&(a=i._timing.duration-a),!i._yoyo||Math.floor(n/e.duration)%2||(a=i._timing.duration-a),-(i._totalTime<a?i._totalTime:0>a?0:a)+"ms"),d.TimingFunction=f.easing,d.IterationCount=isFinite(f.iterations)?f.iterations+"":"infinite",d.Direction=f.direction,d.FillMode=f.fill,d.PlayState=u
+!function(t){var i=t._animations,e=t.style,n=e.visibility
+e.visibility="hidden"
+for(var a=0,r=p.length;r>a;a++){var o=p[a]
+e[g+o]=e[T+o]=e[b+o]=""}for(t.offsetWidth,a=0,r=p.length;r>a;a++){o=p[a]
+var s=void 0
+for(var l in i){var m=i[l]
+m&&(s=(s?",":"")+m[o])}e[g+o]=e[T+o]=e[b+o]=s}e.visibility=n}(_)}(t))}function A(t){var i=t._startTime,e=t._state
+if(!t.pending&&e===m){t.pending=!0
+var n,a=v()
+n=Math.round(t._time+(a-i)),t._time=n,t._startTime=a
+var r=t._rate>=0;(r&&n>=t._totalTime||!r&&0>=n)&&t.finish(),t.pending=!1}return t}function C(t){if(t._state===m){F(t)
+var i=0>t._rate?t._time:t._totalTime-t._time
+t._finishTaskId=y(t.finish,i)}}function I(t,i){return new k(this,t,i)}function M(){Element.prototype.animate=I}return k.prototype={get currentTime(){var t=A(this)._time
+return isFinite(t)?t:null},set currentTime(t){this._time=t,A(this),C(this),w(this)},get playbackRate(){return A(this)._rate},set playbackRate(t){this._rate=t,A(this),C(this),w(this)},get playState(){return A(this)._state},cancel:function(){var t=this
+A(t),t._time=t._startTime=r,t._state=o,F(t),w(t),t.oncancel&&t.oncancel()},finish:function(){var t=this
+A(t)
+var i=0+D,e=t._totalTime-D
+t._state=s,t._time=0>t._rate?t._fillF?i:e:t._fillB?e:i,t._startTime=r,t.pending=!1,F(t),w(t),t.onfinish&&t.onfinish()},play:function(){var t=this
+A(t)
+var i=t._rate>=0,e=t._time===r?r:Math.round(t._time)
+e=!i||e!==r&&e<t._totalTime?i||e!==r&&e>0?e:t._totalTime:0,t._state=m,t._time=e,t._startTime=v(),C(t),w(t)},pause:function(){var t=this
+t._state!==s&&(A(t),t._state=l,t._startTime=r,F(t),w(t))},reverse:function(){this.playbackRate=-1*this._rate}},"undefined"==typeof Element.prototype.animate&&M(),t.animate=function(t,i,e){return I.call(t,i,e)},t.polyfill=M,t.isPolyfilled=function(){return Element.prototype.animate===I},t}({})
-- 
GitLab