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