TelegramPWA/dist/7941.6bbddbd535d4073d252c.js
Alexander Zinchuk 6ce7c8116a [Build]
2022-11-02 02:46:47 +01:00

2 lines
8.2 KiB
JavaScript

"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[7941],{67941:(t,e,s)=>{s.r(e),s.d(e,{default:()=>f});var i=s(77361),n=s(26926);function r(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}class h{constructor(t){this.worker=t,r(this,"requestStates",new Map),r(this,"requestStatesByCallback",new Map),this.subscribe()}request(t){const{worker:e,requestStates:s,requestStatesByCallback:i}=this,r=(0,n.Z)(s),h={type:"callMethod",messageId:r,...t},a={messageId:r},o=new Promise(((t,e)=>{Object.assign(a,{resolve:t,reject:e})}));if("function"==typeof h.args[h.args.length-1]){h.withCallback=!0;const t=h.args.pop();a.callback=t,i.set(t,a)}return s.set(r,a),o.catch((()=>{})).finally((()=>{s.delete(r),a.callback&&i.delete(a.callback)})),e.postMessage(h),o}cancelCallback(t){t.isCanceled=!0;const{messageId:e}=this.requestStatesByCallback.get(t)||{};e&&this.worker.postMessage({type:"cancelProgress",messageId:e})}subscribe(){const{worker:t,requestStates:e}=this;t.addEventListener("message",(t=>{let{data:s}=t;if("methodResponse"===s.type){const t=e.get(s.messageId);t&&(s.error?t.reject(s.error):t.resolve(s.response))}else if("methodCallback"===s.type){var i;const t=e.get(s.messageId);null==t||null===(i=t.callback)||void 0===i||i.call(t,...s.callbackArgs)}else if("unhandledError"===s.type){var n;throw new Error(null===(n=s.error)||void 0===n?void 0:n.message)}}))}}var a=s(9933),o=s(3570);function d(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}const c=i.wB?.75:1,u=i.wZ?.5:.75,l=i.s$?2:4,m=new Map,g=new Array(4).fill(void 0).map((()=>new h(new Worker(new URL(s.p+s.u(2993),s.b)))));let p=-1;class k{static init(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const[i,n,r]=e;let h=m.get(r);return h?h.addContainer(i,n):(h=new k(...e),m.set(r,h)),h}constructor(t,e,s,i,n={},r,h,a){this.id=s,this.tgsUrl=i,this.params=n,this.customColor=r,this.onEnded=h,this.onLoop=a,d(this,"containers",new Map),d(this,"imgSize",void 0),d(this,"msPerFrame",1e3/60),d(this,"reduceFactor",1),d(this,"cacheModulo",void 0),d(this,"chunkSize",void 0),d(this,"workerIndex",void 0),d(this,"chunks",[]),d(this,"framesCount",void 0),d(this,"chunksCount",void 0),d(this,"isAnimating",!1),d(this,"isWaiting",!0),d(this,"isEnded",!1),d(this,"isDestroyed",!1),d(this,"isRendererInited",!1),d(this,"approxFrameIndex",0),d(this,"prevFrameIndex",-1),d(this,"stopFrameIndex",0),d(this,"speed",1),d(this,"direction",1),d(this,"lastRenderAt",void 0),this.addContainer(t,e),this.initConfig(),this.initRenderer()}removeContainer(t){this.containers.get(t).canvas.remove(),this.containers.delete(t),this.containers.size||this.destroy()}isPlaying(){return this.isAnimating||this.isWaiting}play(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1?arguments[1]:void 0;e&&(this.containers.get(e).isPaused=!1),this.isEnded&&t&&(this.approxFrameIndex=Math.floor(0)),this.stopFrameIndex=void 0,this.direction=1,this.doPlay()}pause(t){if(t&&(this.containers.get(t).isPaused=!0,!Array.from(this.containers.values()).every((t=>{let{isPaused:e}=t;return e}))))return;this.isWaiting?this.stopFrameIndex=this.approxFrameIndex:this.isAnimating=!1;const e=this.getChunkIndex(this.approxFrameIndex);this.chunks=this.chunks.map(((t,s)=>s===e?t:void 0))}playSegment(t){let[e,s]=t;this.approxFrameIndex=Math.floor(e/this.reduceFactor),this.stopFrameIndex=Math.floor(s/this.reduceFactor),this.direction=e<s?1:-1,this.doPlay()}setSpeed(t){this.speed=t}setNoLoop(t){this.params.noLoop=t}addContainer(t,e){if(!(t.parentNode instanceof HTMLElement))throw new Error("[RLottie] Container is not mounted");let{size:s}=this.params;if(!s&&(s=t.offsetWidth||parseInt(t.style.width,10)||t.parentNode.offsetWidth,!s))throw new Error("[RLottie] Failed to detect width from container");const n=document.createElement("canvas");n.dataset.id=this.id;const r=n.getContext("2d");n.style.width=`${s}px`,n.style.height=`${s}px`;const{isLowPriority:h,quality:a=(h?u:c)}=this.params,o=Math.round(s*Math.max(i.cL*a,1));n.width=o,n.height=o,t.appendChild(n),this.imgSize||(this.imgSize=o),this.containers.set(t,{canvas:n,ctx:r,onLoad:e}),this.isRendererInited&&this.doPlay()}destroy(){this.isDestroyed=!0,this.pause(),this.destroyRenderer(),m.delete(this.id)}initConfig(){const{isLowPriority:t}=this.params;this.cacheModulo=t?0:l,this.chunkSize=1}setColor(t){this.customColor=t}initRenderer(){this.workerIndex=(0,o.Z)(4,++p),g[this.workerIndex].request({name:"init",args:[this.id,this.tgsUrl,this.imgSize,this.params.isLowPriority,this.onRendererInit.bind(this)]})}destroyRenderer(){g[this.workerIndex].request({name:"destroy",args:[this.id]})}onRendererInit(t,e,s){this.isRendererInited=!0,this.reduceFactor=t,this.msPerFrame=e,this.framesCount=s,this.chunksCount=Math.ceil(s/this.chunkSize),this.isWaiting&&this.doPlay()}changeData(t){this.pause(),this.tgsUrl=t,this.initConfig(),g[this.workerIndex].request({name:"changeData",args:[this.id,this.tgsUrl,this.params.isLowPriority,this.onChangeData.bind(this)]})}onChangeData(t,e,s){this.reduceFactor=t,this.msPerFrame=e,this.framesCount=s,this.chunksCount=Math.ceil(s/this.chunkSize),this.isWaiting=!1,this.isAnimating=!1,this.doPlay()}doPlay(){this.framesCount&&(this.isDestroyed||this.isAnimating||(this.isWaiting||(this.lastRenderAt=void 0),this.isEnded=!1,this.isAnimating=!0,this.isWaiting=!1,(0,a.jt)((()=>{if(this.isDestroyed)return!1;if(!this.isAnimating)return!1;const t=Math.round(this.approxFrameIndex),e=this.getChunkIndex(t),s=this.chunks[e];if(!s||0===s.length)return this.requestChunk(e),this.isAnimating=!1,this.isWaiting=!0,!1;if(this.cacheModulo&&e%this.cacheModulo==0&&this.cleanupPrevChunk(e),t!==this.prevFrameIndex){const e=this.getFrame(t);if(!e)return this.isAnimating=!1,this.isWaiting=!0,!1;const s=new Uint8ClampedArray(e);if(this.customColor)for(let t=0;t<s.length;t+=4)s[t]=this.customColor[0],s[t+1]=this.customColor[1],s[t+2]=this.customColor[2];const i=new ImageData(s,this.imgSize,this.imgSize);this.containers.forEach((t=>{const{ctx:e,isLoaded:s,isPaused:n,onLoad:r}=t;s&&n||e.putImageData(i,0,0),s||(t.isLoaded=!0,null==r||r())})),this.prevFrameIndex=t}const i=Date.now(),n=this.lastRenderAt?this.msPerFrame/(i-this.lastRenderAt):1,r=Math.min(1,this.direction*this.speed/n),h=Math.round(this.approxFrameIndex+r);if(this.lastRenderAt=i,r>0&&(t===this.framesCount-1||h>this.framesCount-1)){var a,o;if(this.params.noLoop)return this.isAnimating=!1,this.isEnded=!0,null===(o=this.onEnded)||void 0===o||o.call(this),!1;null===(a=this.onLoop)||void 0===a||a.call(this),this.approxFrameIndex=0}else if(r<0&&(0===t||h<0)){var d,c;if(this.params.noLoop)return this.isAnimating=!1,this.isEnded=!0,null===(c=this.onEnded)||void 0===c||c.call(this),!1;null===(d=this.onLoop)||void 0===d||d.call(this),this.approxFrameIndex=this.framesCount-1}else{if(void 0!==this.stopFrameIndex&&(t===this.stopFrameIndex||r>0&&h>this.stopFrameIndex||r<0&&h<this.stopFrameIndex))return this.stopFrameIndex=void 0,this.isAnimating=!1,!1;this.approxFrameIndex+=r}const u=Math.round(this.approxFrameIndex);return!!this.getFrame(u)||(this.requestChunk(this.getChunkIndex(u)),this.isWaiting=!0,this.isAnimating=!1,!1)}))))}getFrame(t){const e=this.getChunkIndex(t),s=this.getFrameIndexInChunk(t),i=this.chunks[e];if(i)return i[s]}getFrameIndexInChunk(t){return t-this.getChunkIndex(t)*this.chunkSize}getChunkIndex(t){return Math.floor(t/this.chunkSize)}requestChunk(t){var e;if(this.chunks[t]&&0!==(null===(e=this.chunks[t])||void 0===e?void 0:e.length))return;this.chunks[t]=[];const s=t*this.chunkSize,i=Math.min(s+this.chunkSize-1,this.framesCount-1);g[this.workerIndex].request({name:"renderFrames",args:[this.id,s,i,this.onFrameLoad.bind(this)]})}cleanupPrevChunk(t){if(this.chunksCount<3)return;const e=(0,o.Z)(this.chunksCount,t-1);this.chunks[e]=void 0}requestNextChunk(t){if(1===this.chunksCount)return;const e=(0,o.Z)(this.chunksCount,t+1);this.chunks[e]||this.requestChunk(e)}onFrameLoad(t,e){const s=this.getChunkIndex(t),i=this.chunks[s];i&&(i[this.getFrameIndexInChunk(t)]=e,this.isWaiting&&this.doPlay())}}const f=k},3570:(t,e,s)=>{function i(t,e){return e-Math.floor(e/t)*t}s.d(e,{Z:()=>i})}}]);
//# sourceMappingURL=7941.6bbddbd535d4073d252c.js.map