From 730e442a7fa9f5568663e9c3dffbcdb9d24d6bd9 Mon Sep 17 00:00:00 2001 From: morethanwords Date: Wed, 23 Sep 2020 23:29:53 +0300 Subject: [PATCH] A lot of changes: Right sidebar animation Fix animations speed with translate3d Folders tabs scroll Fix ripple animation Right sidebar translateZ blink fix Misc --- package.json | 3 +- rlottie_with_printf/rlottie-wasm.js | 1 + rlottie_with_printf/rlottie-wasm.wasm | Bin 0 -> 318560 bytes src/components/appMediaPlaybackController.ts | 4 +- src/components/appSelectPeers.ts | 2 +- src/components/audio.ts | 5 +- src/components/chat/audio.ts | 16 +- src/components/emoticonsDropdown/index.ts | 4 +- .../emoticonsDropdown/tabs/emoji.ts | 2 +- src/components/emoticonsDropdown/tabs/gifs.ts | 2 +- .../emoticonsDropdown/tabs/stickers.ts | 6 +- src/components/gifsMasonry.ts | 2 +- src/components/horizontalMenu.ts | 20 +- src/components/misc.ts | 4 +- src/components/poll.ts | 3 +- src/components/popupCreatePoll.ts | 4 +- src/components/popupStickers.ts | 2 +- src/components/preloader.ts | 2 +- src/components/ripple.ts | 10 +- src/components/scrollable_new.ts | 254 +- src/components/sidebarLeft/editProfile.ts | 2 +- src/components/sidebarRight/gifs.ts | 2 +- src/components/sidebarRight/pollResults.ts | 2 +- src/components/sidebarRight/stickers.ts | 2 +- src/components/wrappers.ts | 13 +- src/helpers/cancellablePromise.ts | 63 + src/helpers/eventListenerBase.ts | 48 + src/helpers/mediaSizes.ts | 105 + src/index.hbs | 61 +- src/lib/appManagers/appDialogsManager.ts | 13 +- src/lib/appManagers/appDownloadManager.ts | 2 +- src/lib/appManagers/appImManager.ts | 29 +- src/lib/appManagers/appMediaViewer.ts | 16 +- src/lib/appManagers/appMessagesManager.ts | 6 +- src/lib/appManagers/appPhotosManager.ts | 2 +- src/lib/appManagers/appSidebarLeft.ts | 8 +- src/lib/appManagers/appSidebarRight.ts | 67 +- src/lib/bin_utils.ts | 2 +- src/lib/config.ts | 73 +- src/lib/crypto/crypto_methods.ts | 2 +- src/lib/crypto/cryptoworker.ts | 13 +- src/lib/idb.ts | 368 - src/lib/lottie.ts | 5 - src/lib/lottieLoader.ts | 66 +- src/lib/mtproto/apiFileManager.ts | 2 +- src/lib/mtproto/mtproto.service.ts | 4 +- src/lib/mtproto/mtproto.worker.ts | 5 +- src/lib/opusDecodeController.ts | 4 +- src/lib/polyfill.ts | 64 - src/lib/webp/webpWorkerController.ts | 2 +- src/pages/pageAuthCode.ts | 2 +- src/pages/pagePassword.ts | 2 +- src/scss/components/_global.scss | 2 +- src/scss/partials/_audio.scss | 82 + src/scss/partials/_avatar.scss | 59 + src/scss/partials/_chat.scss | 258 +- src/scss/partials/_chatBubble.scss | 31 +- src/scss/partials/_chatlist.scss | 24 +- src/scss/partials/_ckin.scss | 12 +- src/scss/partials/_document.scss | 155 + src/scss/partials/_emojiDropdown.scss | 7 +- src/scss/partials/_leftSidebar.scss | 75 +- src/scss/partials/_mediaViewer.scss | 2 +- src/scss/partials/_rightSidebar.scss | 40 +- src/scss/partials/_ripple.scss | 79 + src/scss/partials/_scrollable.scss | 16 +- src/scss/partials/_selector.scss | 11 +- src/scss/partials/_slider.scss | 14 +- src/scss/partials/pages/_chats.scss | 9 +- src/scss/partials/pages/_pages.scss | 5 - src/scss/partials/popups/_popup.scss | 4 +- src/scss/style.scss | 511 +- src/types.d.ts | 4 + src/vendor/smoothscroll.ts | 462 + ...oothscroll.js => smoothscroll_minified.js} | 0 stats.json | 46763 +++++++++++----- whybundled.txt | Bin 0 -> 97110 bytes 77 files changed, 33155 insertions(+), 16871 deletions(-) create mode 100644 rlottie_with_printf/rlottie-wasm.js create mode 100644 rlottie_with_printf/rlottie-wasm.wasm create mode 100644 src/helpers/cancellablePromise.ts create mode 100644 src/helpers/eventListenerBase.ts create mode 100644 src/helpers/mediaSizes.ts delete mode 100644 src/lib/idb.ts delete mode 100644 src/lib/lottie.ts create mode 100644 src/scss/partials/_audio.scss create mode 100644 src/scss/partials/_avatar.scss create mode 100644 src/scss/partials/_document.scss create mode 100644 src/scss/partials/_ripple.scss create mode 100644 src/vendor/smoothscroll.ts rename src/vendor/{smoothscroll.js => smoothscroll_minified.js} (100%) create mode 100644 whybundled.txt diff --git a/package.json b/package.json index f2d88bd0..85326d76 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "build:dev": "webpack --config webpack.dev.js", "test": "jest --config=jest.config.js", "profile": "webpack --profile --json > stats.json --config webpack.prod.js", - "profile:dev": "webpack --profile --json > stats.json --config webpack.dev.js" + "profile:dev": "webpack --profile --json > stats.json --config webpack.dev.js", + "whybundled": "npm run profile; whybundled stats.json" }, "author": "", "license": "ISC", diff --git a/rlottie_with_printf/rlottie-wasm.js b/rlottie_with_printf/rlottie-wasm.js new file mode 100644 index 00000000..e1b36d85 --- /dev/null +++ b/rlottie_with_printf/rlottie-wasm.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=Number(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":524,"maximum":524+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5276688,DYNAMICTOP_PTR=33648;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="rlottie-wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function __ZN7VRegionC1ERK5VRect(){err("missing function: _ZN7VRegionC1ERK5VRect");abort(-1)}function __ZN7VRegionD1Ev(){err("missing function: _ZN7VRegionD1Ev");abort(-1)}function __ZN7VRegionpLERK5VRect(){err("missing function: _ZN7VRegionpLERK5VRect");abort(-1)}function __ZNK7VRegion12boundingRectEv(){err("missing function: _ZNK7VRegion12boundingRectEv");abort(-1)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){abort()}var setjmpId=0;function _saveSetjmp(env,label,table,size){env=env|0;label=label|0;table=table|0;size=size|0;var i=0;setjmpId=setjmpId+1|0;HEAP32[env>>2]=setjmpId;while((i|0)<(size|0)){if((HEAP32[table+(i<<3)>>2]|0)==0){HEAP32[table+(i<<3)>>2]=setjmpId;HEAP32[table+((i<<3)+4)>>2]=label;HEAP32[table+((i<<3)+8)>>2]=0;setTempRet0(size|0);return table|0}i=i+1|0}size=size*2|0;table=_realloc(table|0,8*(size+1|0)|0)|0;table=_saveSetjmp(env|0,label|0,table|0,size|0)|0;setTempRet0(size|0);return table|0}function _testSetjmp(id,table,size){id=id|0;table=table|0;size=size|0;var i=0,curr=0;while((i|0)<(size|0)){curr=HEAP32[table+(i<<3)>>2]|0;if((curr|0)==0)break;if((curr|0)==(id|0)){return HEAP32[table+((i<<3)+4)>>2]|0}i=i+1|0}return 0}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_longjmp(env,value){_longjmp(env,value)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _getTempRet0(){return getTempRet0()|0}function _round(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _setTempRet0($i){setTempRet0($i|0)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"o":__ZN7VRegionC1ERK5VRect,"m":__ZN7VRegionD1Ev,"n":__ZN7VRegionpLERK5VRect,"x":__ZNK7VRegion12boundingRectEv,"a":___assert_fail,"u":___map_file,"h":___sys_fcntl64,"z":___sys_ioctl,"t":___sys_munmap,"A":___sys_open,"d":_abort,"c":_emscripten_longjmp,"q":_emscripten_memcpy_big,"r":_emscripten_resize_heap,"v":_environ_get,"w":_environ_sizes_get,"g":_fd_close,"y":_fd_read,"p":_fd_seek,"f":_fd_write,"b":_getTempRet0,"k":invoke_iii,"B":invoke_vi,"memory":wasmMemory,"i":_round,"l":_saveSetjmp,"j":_setTempRet0,"s":_strftime_l,"table":wasmTable,"e":_testSetjmp};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["C"]).apply(null,arguments)};var _lottie_init=Module["_lottie_init"]=function(){return(_lottie_init=Module["_lottie_init"]=Module["asm"]["D"]).apply(null,arguments)};var _lottie_resize=Module["_lottie_resize"]=function(){return(_lottie_resize=Module["_lottie_resize"]=Module["asm"]["E"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["F"]).apply(null,arguments)};var _lottie_load_from_data=Module["_lottie_load_from_data"]=function(){return(_lottie_load_from_data=Module["_lottie_load_from_data"]=Module["asm"]["G"]).apply(null,arguments)};var _lottie_buffer=Module["_lottie_buffer"]=function(){return(_lottie_buffer=Module["_lottie_buffer"]=Module["asm"]["H"]).apply(null,arguments)};var _lottie_destroy=Module["_lottie_destroy"]=function(){return(_lottie_destroy=Module["_lottie_destroy"]=Module["asm"]["I"]).apply(null,arguments)};var _lottie_render=Module["_lottie_render"]=function(){return(_lottie_render=Module["_lottie_render"]=Module["asm"]["J"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["K"]).apply(null,arguments)};var _realloc=Module["_realloc"]=function(){return(_realloc=Module["_realloc"]=Module["asm"]["L"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["M"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["P"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["Q"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["R"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["T"]).apply(null,arguments)};function invoke_iii(index,a1,a2){var sp=stackSave();try{return dynCall_iii(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{dynCall_vi(index,a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["asm"]=asm;Module["intArrayFromString"]=intArrayFromString;Module["cwrap"]=cwrap;Module["allocate"]=allocate;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); diff --git a/rlottie_with_printf/rlottie-wasm.wasm b/rlottie_with_printf/rlottie-wasm.wasm new file mode 100644 index 0000000000000000000000000000000000000000..62f61913c5bd50860a05c90c1569932313bab5bc GIT binary patch literal 318560 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 T%!cV&p3gWyl7ihS-1ff!+~OaW literal 0 HcmV?d00001 diff --git a/src/components/appMediaPlaybackController.ts b/src/components/appMediaPlaybackController.ts index 088a0edd..5efe51a8 100644 --- a/src/components/appMediaPlaybackController.ts +++ b/src/components/appMediaPlaybackController.ts @@ -1,8 +1,8 @@ import { $rootScope } from "../lib/utils"; import appMessagesManager from "../lib/appManagers/appMessagesManager"; import appDocsManager, {MyDocument} from "../lib/appManagers/appDocsManager"; -import { isSafari } from "../lib/config"; -import { CancellablePromise, deferredPromise } from "../lib/polyfill"; +import { CancellablePromise, deferredPromise } from "../helpers/cancellablePromise"; +import { isSafari } from "../helpers/userAgent"; // TODO: если удалить сообщение, и при этом аудио будет играть - оно не остановится, и можно будет по нему перейти вникуда diff --git a/src/components/appSelectPeers.ts b/src/components/appSelectPeers.ts index 30352e68..5dead86c 100644 --- a/src/components/appSelectPeers.ts +++ b/src/components/appSelectPeers.ts @@ -307,7 +307,7 @@ export class AppSelectPeers { this.selectedContainer.insertBefore(div, this.input); //this.selectedScrollable.scrollTop = this.selectedScrollable.scrollHeight; - this.selectedScrollable.scrollTo(this.selectedScrollable.scrollHeight, true, true); + this.selectedScrollable.scrollTo(this.selectedScrollable.scrollHeight, 'top', true, true); this.onChange && this.onChange(this.selected.size); return div; diff --git a/src/components/audio.ts b/src/components/audio.ts index 22189e99..df409093 100644 --- a/src/components/audio.ts +++ b/src/components/audio.ts @@ -5,8 +5,9 @@ import ProgressivePreloader from "./preloader"; import { MediaProgressLine } from "../lib/mediaPlayer"; import appMediaPlaybackController from "./appMediaPlaybackController"; import { DocumentAttribute } from "../layer"; -import { mediaSizes, isSafari } from "../lib/config"; import { Download } from "../lib/appManagers/appDownloadManager"; +import mediaSizes from "../helpers/mediaSizes"; +import { isSafari } from "../helpers/userAgent"; // https://github.com/LonamiWebs/Telethon/blob/4393ec0b83d511b6a20d8a20334138730f084375/telethon/utils.py#L1285 export function decodeWaveform(waveform: Uint8Array | number[]) { @@ -121,7 +122,7 @@ function wrapVoiceMessage(doc: MyDocument, audioEl: AudioElement) { let start = () => { clearInterval(interval); - interval = setInterval(() => { + interval = window.setInterval(() => { if(lastIndex > svg.childElementCount || isNaN(audio.duration) || audio.paused) { clearInterval(interval); return; diff --git a/src/components/chat/audio.ts b/src/components/chat/audio.ts index a3dff57d..a567eb49 100644 --- a/src/components/chat/audio.ts +++ b/src/components/chat/audio.ts @@ -34,11 +34,16 @@ export class ChatAudio { this.close.addEventListener('click', (e) => { cancelEvent(e); + const scrollTop = appImManager.scrollable.scrollTop; this.container.style.display = 'none'; - this.container.parentElement.classList.remove('is-audio-shown'); + appImManager.topbar.classList.remove('is-audio-shown'); if(this.toggle.classList.contains('flip-icon')) { appMediaPlaybackController.toggle(); } + + if(!appImManager.topbar.classList.contains('is-pinned-shown')) { + appImManager.scrollable.scrollTop = scrollTop - height; + } }); this.toggle.addEventListener('click', (e) => { @@ -46,6 +51,8 @@ export class ChatAudio { appMediaPlaybackController.toggle(); }); + const height = 52; + $rootScope.$on('audio_play', (e) => { const {doc, mid} = e.detail; @@ -68,8 +75,11 @@ export class ChatAudio { if(this.container.style.display) { const scrollTop = appImManager.scrollable.scrollTop; this.container.style.display = ''; - this.container.parentElement.classList.add('is-audio-shown'); - appImManager.scrollable.scrollTop = scrollTop; + appImManager.topbar.classList.add('is-audio-shown'); + + if(!appImManager.topbar.classList.contains('is-pinned-shown')) { + appImManager.scrollable.scrollTop = scrollTop + height; + } } }); diff --git a/src/components/emoticonsDropdown/index.ts b/src/components/emoticonsDropdown/index.ts index 41404183..e1bf65b2 100644 --- a/src/components/emoticonsDropdown/index.ts +++ b/src/components/emoticonsDropdown/index.ts @@ -6,7 +6,7 @@ import { horizontalMenu } from "../horizontalMenu"; import animationIntersector from "../animationIntersector"; import appSidebarRight from "../../lib/appManagers/appSidebarRight"; import appImManager from "../../lib/appManagers/appImManager"; -import Scrollable from "../scrollable_new"; +import Scrollable, { ScrollableX } from "../scrollable_new"; import EmojiTab from "./tabs/emoji"; import StickersTab from "./tabs/stickers"; import StickyIntersector from "../stickyIntersector"; @@ -240,7 +240,7 @@ export class EmoticonsDropdown { //animationIntersector.checkAnimations(false, EMOTICONSSTICKERGROUP); }; - public static menuOnClick = (menu: HTMLUListElement, scroll: Scrollable, menuScroll?: Scrollable) => { + public static menuOnClick = (menu: HTMLUListElement, scroll: Scrollable, menuScroll?: ScrollableX) => { let prevId = 0; let jumpedTo = -1; diff --git a/src/components/emoticonsDropdown/tabs/emoji.ts b/src/components/emoticonsDropdown/tabs/emoji.ts index 9d60c7cd..c52f95b6 100644 --- a/src/components/emoticonsDropdown/tabs/emoji.ts +++ b/src/components/emoticonsDropdown/tabs/emoji.ts @@ -81,7 +81,7 @@ export default class EmojiTab implements EmoticonsTab { //console.timeEnd('emojiParse'); const menu = this.content.previousElementSibling.firstElementChild as HTMLUListElement; - const emojiScroll = this.scroll = new Scrollable(this.content, 'y', 'EMOJI', null); + const emojiScroll = this.scroll = new Scrollable(this.content, 'EMOJI', null); //emojiScroll.setVirtualContainer(emojiScroll.container); diff --git a/src/components/emoticonsDropdown/tabs/gifs.ts b/src/components/emoticonsDropdown/tabs/gifs.ts index fd9b3deb..d8a9d60c 100644 --- a/src/components/emoticonsDropdown/tabs/gifs.ts +++ b/src/components/emoticonsDropdown/tabs/gifs.ts @@ -13,7 +13,7 @@ export default class GifsTab implements EmoticonsTab { const gifsContainer = this.content.firstElementChild as HTMLDivElement; gifsContainer.addEventListener('click', EmoticonsDropdown.onMediaClick); - const scroll = new Scrollable(this.content, 'y', 'GIFS', null); + const scroll = new Scrollable(this.content, 'GIFS', null); const masonry = new GifsMasonry(gifsContainer, EMOTICONSSTICKERGROUP, scroll); const preloader = putPreloader(this.content, true); diff --git a/src/components/emoticonsDropdown/tabs/stickers.ts b/src/components/emoticonsDropdown/tabs/stickers.ts index ac24b625..38aee93f 100644 --- a/src/components/emoticonsDropdown/tabs/stickers.ts +++ b/src/components/emoticonsDropdown/tabs/stickers.ts @@ -1,6 +1,6 @@ import emoticonsDropdown, { EmoticonsTab, EMOTICONSSTICKERGROUP, EmoticonsDropdown } from ".."; import { StickerSet } from "../../../layer"; -import Scrollable from "../../scrollable_new"; +import Scrollable, { ScrollableX } from "../../scrollable_new"; import { wrapSticker } from "../../wrappers"; import appStickersManager from "../../../lib/appManagers/appStickersManager"; import appDownloadManager from "../../../lib/appManagers/appDownloadManager"; @@ -230,7 +230,7 @@ export default class StickersTab implements EmoticonsTab { let menuWrapper = this.content.previousElementSibling as HTMLDivElement; this.menu = menuWrapper.firstElementChild.firstElementChild as HTMLUListElement; - let menuScroll = new Scrollable(menuWrapper, 'x'); + let menuScroll = new ScrollableX(menuWrapper); let stickersDiv = document.createElement('div'); stickersDiv.classList.add('stickers-categories'); @@ -274,7 +274,7 @@ export default class StickersTab implements EmoticonsTab { stickersDiv.addEventListener('click', EmoticonsDropdown.onMediaClick); - this.scroll = new Scrollable(this.content, 'y', 'STICKERS', undefined, undefined, 2); + this.scroll = new Scrollable(this.content, 'STICKERS', undefined, undefined, 2); this.scroll.setVirtualContainer(stickersDiv); this.stickyIntersector = EmoticonsDropdown.menuOnClick(this.menu, this.scroll, menuScroll); diff --git a/src/components/gifsMasonry.ts b/src/components/gifsMasonry.ts index 31ec1acc..427551a6 100644 --- a/src/components/gifsMasonry.ts +++ b/src/components/gifsMasonry.ts @@ -3,9 +3,9 @@ import appDocsManager, {MyDocument} from "../lib/appManagers/appDocsManager"; import { wrapVideo } from "./wrappers"; import { renderImageFromUrl } from "./misc"; import { LazyLoadQueueRepeat2 } from "./lazyLoadQueue"; -import { CancellablePromise, deferredPromise } from "../lib/polyfill"; import animationIntersector from "./animationIntersector"; import Scrollable from "./scrollable_new"; +import { CancellablePromise, deferredPromise } from "../helpers/cancellablePromise"; const width = 400; const maxSingleWidth = width - 100; diff --git a/src/components/horizontalMenu.ts b/src/components/horizontalMenu.ts index d0c72578..8857ea24 100644 --- a/src/components/horizontalMenu.ts +++ b/src/components/horizontalMenu.ts @@ -10,14 +10,15 @@ function slideNavigation(tabContent: HTMLElement, prevTabContent: HTMLElement, t tabContent.style.transform = `translateX(-25%)`; prevTabContent.style.transform = `translateX(20%)`; } */ + const width = prevTabContent.getBoundingClientRect().width; if(toRight) { prevTabContent.style.filter = `brightness(80%)`; - prevTabContent.style.transform = `translateX(-25%)`; - tabContent.style.transform = `translateX(100%)`; + prevTabContent.style.transform = `translate3d(${-width * .25}px, 0, 0)`; + tabContent.style.transform = `translate3d(${width}px, 0, 0)`; } else { tabContent.style.filter = `brightness(80%)`; - tabContent.style.transform = `translateX(-25%)`; - prevTabContent.style.transform = `translateX(100%)`; + tabContent.style.transform = `translate3d(${-width * .25}px, 0, 0)`; + prevTabContent.style.transform = `translate3d(${width}px, 0, 0)`; } tabContent.classList.add('active'); @@ -28,12 +29,13 @@ function slideNavigation(tabContent: HTMLElement, prevTabContent: HTMLElement, t } function slideTabs(tabContent: HTMLElement, prevTabContent: HTMLElement, toRight: boolean) { + const width = prevTabContent.getBoundingClientRect().width; if(toRight) { - tabContent.style.transform = `translateX(100%)`; - prevTabContent.style.transform = `translateX(-100%)`; + tabContent.style.transform = `translate3d(${width}px, 0, 0)`; + prevTabContent.style.transform = `translate3d(${-width}px, 0, 0)`; } else { - tabContent.style.transform = `translateX(-100%)`; - prevTabContent.style.transform = `translateX(100%)`; + tabContent.style.transform = `translate3d(${-width}px, 0, 0)`; + prevTabContent.style.transform = `translate3d(${width}px, 0, 0)`; } tabContent.classList.add('active'); @@ -83,7 +85,7 @@ export function horizontalMenu(tabs: HTMLElement, content: HTMLElement, onClick? const _prevId = prevId; if(hideTimeouts.hasOwnProperty(id)) clearTimeout(hideTimeouts[id]); if(p/* && false */) { - hideTimeouts[_prevId] = setTimeout(() => { + hideTimeouts[_prevId] = window.setTimeout(() => { p.style.transform = ''; p.style.filter = ''; p.classList.remove('active'); diff --git a/src/components/misc.ts b/src/components/misc.ts index 0740312d..56fc029e 100644 --- a/src/components/misc.ts +++ b/src/components/misc.ts @@ -1,4 +1,6 @@ -import Config, { touchSupport, isApple, mediaSizes } from "../lib/config"; +import mediaSizes from "../helpers/mediaSizes"; +import { isApple } from "../helpers/userAgent"; +import Config, { touchSupport } from "../lib/config"; export const loadedURLs: {[url: string]: boolean} = {}; const set = (elem: HTMLElement | HTMLImageElement | SVGImageElement | HTMLVideoElement, url: string) => { diff --git a/src/components/poll.ts b/src/components/poll.ts index 445f7090..33e3f52d 100644 --- a/src/components/poll.ts +++ b/src/components/poll.ts @@ -1,11 +1,12 @@ import appPollsManager, { PollResults, Poll } from "../lib/appManagers/appPollsManager"; import { RichTextProcessor } from "../lib/richtextprocessor"; import { findUpClassName, $rootScope, cancelEvent } from "../lib/utils"; -import { mediaSizes, touchSupport } from "../lib/config"; +import { touchSupport } from "../lib/config"; import appSidebarRight from "../lib/appManagers/appSidebarRight"; import appImManager from "../lib/appManagers/appImManager"; import serverTimeManager from "../lib/mtproto/serverTimeManager"; import { ripple } from "./ripple"; +import mediaSizes from "../helpers/mediaSizes"; let lineTotalLength = 0; const tailLength = 9; diff --git a/src/components/popupCreatePoll.ts b/src/components/popupCreatePoll.ts index 666dc47c..004a6f41 100644 --- a/src/components/popupCreatePoll.ts +++ b/src/components/popupCreatePoll.ts @@ -46,7 +46,7 @@ export default class PopupCreatePoll extends PopupElement { this.confirmBtn.addEventListener('click', this.onSubmitClick); - this.scrollable = new Scrollable(this.body, 'y', undefined); + this.scrollable = new Scrollable(this.body); this.appendMoreField(); } @@ -131,6 +131,6 @@ export default class PopupCreatePoll extends PopupElement { this.questions.append(questionField); - this.scrollable.scrollTo(this.scrollable.scrollHeight, true, true); + this.scrollable.scrollTo(this.scrollable.scrollHeight, 'top', true, true); } } \ No newline at end of file diff --git a/src/components/popupStickers.ts b/src/components/popupStickers.ts index 36a4d812..f6541044 100644 --- a/src/components/popupStickers.ts +++ b/src/components/popupStickers.ts @@ -64,7 +64,7 @@ export default class PopupStickers extends PopupElement { this.stickersFooter.innerText = 'Loading...'; this.body.append(div); - const scrollable = new Scrollable(this.body, 'y', undefined); + const scrollable = new Scrollable(this.body); this.body.append(this.stickersFooter); // const editButton = document.createElement('button'); diff --git a/src/components/preloader.ts b/src/components/preloader.ts index b9a1d42f..3f699db6 100644 --- a/src/components/preloader.ts +++ b/src/components/preloader.ts @@ -1,5 +1,5 @@ import { isInDOM, cancelEvent } from "../lib/utils"; -import { CancellablePromise } from "../lib/polyfill"; +import { CancellablePromise } from "../helpers/cancellablePromise"; export default class ProgressivePreloader { public preloader: HTMLDivElement; diff --git a/src/components/ripple.ts b/src/components/ripple.ts index cd6c0bd4..facc125a 100644 --- a/src/components/ripple.ts +++ b/src/components/ripple.ts @@ -1,4 +1,5 @@ import { touchSupport } from "../lib/config"; +import { findUpClassName } from "../lib/utils"; let rippleClickID = 0; export function ripple(elem: HTMLElement, callback: (id: number) => Promise = () => Promise.resolve(), onEnd: (id: number) => void = null) { @@ -28,6 +29,7 @@ export function ripple(elem: HTMLElement, callback: (id: number) => Promise { + //return; let elapsedTime = Date.now() - startTime; if(elapsedTime < duration) { let delay = Math.max(duration - elapsedTime, duration / 2); @@ -66,8 +68,8 @@ export function ripple(elem: HTMLElement, callback: (id: number) => Promise { - span.classList.add('c-ripple__circle'); let rect = r.getBoundingClientRect(); + span.classList.add('c-ripple__circle'); let clickX = clientX - rect.left; let clickY = clientY - rect.top; @@ -110,7 +112,7 @@ export function ripple(elem: HTMLElement, callback: (id: number) => Promise { //console.log('ripple touchstart', e); - if(e.touches.length > 1 || ((e.target as HTMLElement).tagName == 'BUTTON' && e.target != elem)) { + if(e.touches.length > 1 || ((e.target as HTMLElement).tagName == 'BUTTON' && e.target != elem) || findUpClassName(e.target as HTMLElement, 'c-ripple') != r) { return; } @@ -130,7 +132,9 @@ export function ripple(elem: HTMLElement, callback: (id: number) => Promise { - if(elem.dataset.ripple == '0') { + //console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') == r); + + if(elem.dataset.ripple == '0' || findUpClassName(e.target as HTMLElement, 'c-ripple') != r) { return false; } else if(touchStartFired) { touchStartFired = false; diff --git a/src/components/scrollable_new.ts b/src/components/scrollable_new.ts index d76008db..e1be505e 100644 --- a/src/components/scrollable_new.ts +++ b/src/components/scrollable_new.ts @@ -1,10 +1,10 @@ import { logger, LogLevels } from "../lib/logger"; -import smoothscroll from '../vendor/smoothscroll'; -import { touchSupport, isSafari, mediaSizes } from "../lib/config"; -import { CancellablePromise, deferredPromise } from "../lib/polyfill"; +import smoothscroll, { SCROLL_TIME, SmoothScrollToOptions } from '../vendor/smoothscroll'; +import { touchSupport } from "../lib/config"; +//import { CancellablePromise, deferredPromise } from "../lib/polyfill"; //import { isInDOM } from "../lib/utils"; (window as any).__forceSmoothScrollPolyfill__ = true; -smoothscroll.polyfill(); +smoothscroll(); /* var el = $0; var height = 0; @@ -48,10 +48,88 @@ const scrollsIntersector = new IntersectionObserver(entries => { } }); */ -export default class Scrollable { - //public container: HTMLDivElement; - public overflowContainer: HTMLElement; +export class ScrollableBase { + protected log: ReturnType; + protected onScroll: () => void; + public getScrollValue: () => number; + + public scrollLocked = 0; + + constructor(public el: HTMLElement, logPrefix = '', public appendTo = el, public container: HTMLElement = document.createElement('div')) { + this.container.classList.add('scrollable'); + + if(!appendTo) { + this.appendTo = this.container; + } + + this.log = logger('SCROLL' + (logPrefix ? '-' + logPrefix : ''), LogLevels.error); + + if(el) { + Array.from(el.children).forEach(c => this.container.append(c)); + + el.append(this.container); + } + //this.onScroll(); + } + + protected setListeners() { + window.addEventListener('resize', this.onScroll); + this.container.addEventListener('scroll', this.onScroll, {passive: true, capture: true}); + } + + public prepend(element: HTMLElement) { + this.appendTo.prepend(element); + } + + public append(element: HTMLElement) { + this.appendTo.append(element); + } + + public contains(element: Element) { + return !!element.parentElement; + } + + public removeElement(element: Element) { + element.remove(); + } + + public scrollTo(value: number, side: 'top' | 'left', smooth = true, important = false, scrollTime = SCROLL_TIME) { + if(this.scrollLocked && !important) return; + + const scrollValue = this.getScrollValue(); + if(scrollValue == Math.floor(value)) { + return; + } + + if(this.scrollLocked) clearTimeout(this.scrollLocked); + /* else { + this.scrollLockedPromise = deferredPromise(); + } */ + + this.scrollLocked = window.setTimeout(() => { + this.scrollLocked = 0; + //this.scrollLockedPromise.resolve(); + //this.onScroll(); + this.container.dispatchEvent(new CustomEvent('scroll')); + }, scrollTime); + + const options: SmoothScrollToOptions = { + behavior: smooth ? 'smooth' : 'auto', + scrollTime + }; + + options[side] = value; + + this.container.scrollTo(options as any); + } + + get length() { + return this.appendTo.childElementCount; + } +} + +export default class Scrollable extends ScrollableBase { public splitUp: HTMLElement; public onScrolledTop: () => void = null; @@ -63,8 +141,6 @@ export default class Scrollable { private disableHoverTimeout: number = 0; - private log: ReturnType; - /* private sentinelsObserver: IntersectionObserver; private topSentinel: HTMLDivElement; private bottomSentinel: HTMLDivElement; */ @@ -80,8 +156,7 @@ export default class Scrollable { /* private onScrolledTopFired = false; private onScrolledBottomFired = false; */ - public scrollLocked = 0; - public scrollLockedPromise: CancellablePromise = Promise.resolve(); + //public scrollLockedPromise: CancellablePromise = Promise.resolve(); public isVisible = false; private reorderTimeout: number; @@ -102,8 +177,8 @@ export default class Scrollable { this.visible.delete(element); } - constructor(public el: HTMLElement, axis: 'y' | 'x' = 'y', logPrefix = '', public appendTo = el, public onScrollOffset = 300, public splitCount = 15, public container: HTMLElement = document.createElement('div')) { - this.container.classList.add('scrollable'); + constructor(el: HTMLElement, logPrefix = '', appendTo = el, public onScrollOffset = 300, public splitCount = 15, container: HTMLElement = document.createElement('div')) { + super(el, logPrefix, appendTo, container); this.visible = new Set(); this.observer = new IntersectionObserver(entries => { @@ -173,63 +248,11 @@ export default class Scrollable { } }); - if(!appendTo) { - this.appendTo = this.container; - } - - this.log = logger('SCROLL' + (logPrefix ? '-' + logPrefix : ''), LogLevels.error); - - if(axis == 'x') { - this.container.classList.add('scrollable-x'); - - if(!touchSupport) { - const scrollHorizontally = (e: any) => { - e = window.event || e; - if(e.which == 1) { - // maybe horizontal scroll is natively supports, works on macbook - return; - } - - const delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); - this.container.scrollLeft -= (delta * 20); - e.preventDefault(); - }; - if(this.container.addEventListener) { - // IE9, Chrome, Safari, Opera - this.container.addEventListener("mousewheel", scrollHorizontally, false); - // Firefox - this.container.addEventListener("DOMMouseScroll", scrollHorizontally, false); - } else { - // IE 6/7/8 - // @ts-ignore - this.container.attachEvent("onmousewheel", scrollHorizontally); - } - } - } else if(axis == 'y') { - this.container.classList.add('scrollable-y'); - } else { - throw new Error('no side for scroll'); - } - - window.addEventListener('resize', () => { - this.overflowContainer = mediaSizes.isMobile && false ? document.documentElement : this.container; - this.onScroll(); - }); - this.container.addEventListener('scroll', this.onScroll, {passive: true, capture: true}); - //document.documentElement.addEventListener('scroll', binded, {passive: true, capture: true}); - //window.addEventListener('scroll', binded, {passive: true, capture: true}); - - if(el) { - Array.from(el.children).forEach(c => this.container.append(c)); + this.container.classList.add('scrollable-y'); - el.append(this.container); - } //this.onScroll(); - this.overflowContainer = mediaSizes.isMobile && false ? document.documentElement : this.container; - - /* scrollables.set(this.container, this); - scrollsIntersector.observe(this.container); */ + this.setListeners(); } // public attachSentinels(container = this.container, offset = this.onScrollOffset) { @@ -329,12 +352,12 @@ export default class Scrollable { this.onScrollMeasure = window.requestAnimationFrame(() => { //if(!this.isVisible) return; - this.checkForTriggers(this.overflowContainer); + this.checkForTriggers(); this.onScrollMeasure = 0; if(!this.splitUp) return; - const scrollTop = this.overflowContainer.scrollTop; + const scrollTop = this.scrollTop; if(this.lastScrollTop != scrollTop) { this.lastScrollDirection = this.lastScrollTop < scrollTop ? 1 : -1; this.lastScrollTop = scrollTop; @@ -344,9 +367,10 @@ export default class Scrollable { }); }; - public checkForTriggers(container: HTMLElement) { + public checkForTriggers() { if(this.scrollLocked || (!this.onScrolledTop && !this.onScrolledBottom)) return; + const container = this.container; const scrollHeight = container.scrollHeight; if(!scrollHeight) { // незачем вызывать триггеры если блок пустой или не виден return; @@ -439,11 +463,11 @@ export default class Scrollable { if(element.parentElement && !this.scrollLocked) { const isFirstUnread = element.classList.contains('is-first-unread'); - let offsetTop = element.getBoundingClientRect().top - this.container.getBoundingClientRect().top; - offsetTop = this.container.scrollTop + offsetTop; + let offset = element.getBoundingClientRect().top - this.container.getBoundingClientRect().top; + offset = this.scrollTop + offset; if(!smooth && isFirstUnread) { - this.scrollTo(offsetTop, false); + this.scrollTo(offset, 'top', false); return; } @@ -451,39 +475,20 @@ export default class Scrollable { const height = element.scrollHeight; const d = (clientHeight - height) / 2; - offsetTop -= d; + offset -= d; - this.scrollTo(offsetTop, smooth); - } - } - - public scrollTo(top: number, smooth = true, important = false) { - if(this.scrollLocked && !important) return; - - const scrollTop = this.scrollTop; - if(scrollTop == Math.floor(top)) { - return; - } - - if(this.scrollLocked) clearTimeout(this.scrollLocked); - else { - this.scrollLockedPromise = deferredPromise(); + this.scrollTo(offset, 'top', smooth); } - - this.scrollLocked = window.setTimeout(() => { - this.scrollLocked = 0; - this.scrollLockedPromise.resolve(); - //this.onScroll(); - this.container.dispatchEvent(new CustomEvent('scroll')); - }, 468); - - this.container.scrollTo({behavior: smooth ? 'smooth' : 'auto', top}); } public removeElement(element: Element) { element.remove(); } + public getScrollValue = () => { + return this.scrollTop; + }; + set scrollTop(y: number) { this.container.scrollTop = y; } @@ -496,8 +501,57 @@ export default class Scrollable { get scrollHeight() { return this.container.scrollHeight; } +} - get length() { - return this.appendTo.childElementCount; +export class ScrollableX extends ScrollableBase { + constructor(public el: HTMLElement, logPrefix = '', public appendTo = el, public onScrollOffset = 300, public splitCount = 15, public container: HTMLElement = document.createElement('div')) { + super(el, logPrefix, appendTo, container); + + this.container.classList.add('scrollable-x'); + + if(!touchSupport) { + const scrollHorizontally = (e: any) => { + e = window.event || e; + if(e.which == 1) { + // maybe horizontal scroll is natively supports, works on macbook + return; + } + + const delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); + this.container.scrollLeft -= (delta * 20); + e.preventDefault(); + }; + if(this.container.addEventListener) { + // IE9, Chrome, Safari, Opera + this.container.addEventListener("mousewheel", scrollHorizontally, false); + // Firefox + this.container.addEventListener("DOMMouseScroll", scrollHorizontally, false); + } else { + // IE 6/7/8 + // @ts-ignore + this.container.attachEvent("onmousewheel", scrollHorizontally); + } + } + + this.setListeners(); } + + public scrollIntoView(element: HTMLElement, smooth = true, scrollTime?: number) { + if(element.parentElement && !this.scrollLocked) { + let offset = element.getBoundingClientRect().left - this.container.getBoundingClientRect().left; + offset = this.getScrollValue() + offset; + + const clientWidth = this.container.clientWidth; + const width = element.scrollWidth; + + const d = (clientWidth - width) / 2; + offset -= d; + + this.scrollTo(offset, 'left', smooth, undefined, scrollTime); + } + } + + public getScrollValue = () => { + return this.container.scrollLeft; + }; } diff --git a/src/components/sidebarLeft/editProfile.ts b/src/components/sidebarLeft/editProfile.ts index 173291aa..ef99f061 100644 --- a/src/components/sidebarLeft/editProfile.ts +++ b/src/components/sidebarLeft/editProfile.ts @@ -134,7 +134,7 @@ export default class AppEditProfileTab implements SliderTab { }); }); - let scrollable = new Scrollable(this.scrollWrapper as HTMLElement, 'y'); + let scrollable = new Scrollable(this.scrollWrapper as HTMLElement); } public fillElements() { diff --git a/src/components/sidebarRight/gifs.ts b/src/components/sidebarRight/gifs.ts index 33364428..d2ff5925 100644 --- a/src/components/sidebarRight/gifs.ts +++ b/src/components/sidebarRight/gifs.ts @@ -31,7 +31,7 @@ export default class AppGifsTab implements SliderTab { private searchPromise: ReturnType; constructor() { - this.scrollable = new Scrollable(this.contentDiv, 'y', ANIMATIONGROUP, undefined, undefined, 2); + this.scrollable = new Scrollable(this.contentDiv, ANIMATIONGROUP, undefined, undefined, 2); this.scrollable.setVirtualContainer(this.gifsDiv); this.masonry = new GifsMasonry(this.gifsDiv, ANIMATIONGROUP, this.scrollable); diff --git a/src/components/sidebarRight/pollResults.ts b/src/components/sidebarRight/pollResults.ts index 7d9f3577..0dce1490 100644 --- a/src/components/sidebarRight/pollResults.ts +++ b/src/components/sidebarRight/pollResults.ts @@ -17,7 +17,7 @@ export default class AppPollResultsTab implements SliderTab { private mid: number; constructor() { - this.scrollable = new Scrollable(this.contentDiv, 'y', 'POLL-RESULTS', undefined, undefined, 2); + this.scrollable = new Scrollable(this.contentDiv, 'POLL-RESULTS', undefined, undefined, 2); } public cleanup() { diff --git a/src/components/sidebarRight/stickers.ts b/src/components/sidebarRight/stickers.ts index 097ba438..8d90f2e5 100644 --- a/src/components/sidebarRight/stickers.ts +++ b/src/components/sidebarRight/stickers.ts @@ -23,7 +23,7 @@ export default class AppStickersTab implements SliderTab { private lazyLoadQueue: LazyLoadQueue; constructor() { - this.scrollable = new Scrollable(this.contentDiv, 'y', 'STICKERS-SEARCH', undefined, undefined, 2); + this.scrollable = new Scrollable(this.contentDiv, 'STICKERS-SEARCH', undefined, undefined, 2); this.scrollable.setVirtualContainer(this.setsDiv); this.lazyLoadQueue = new LazyLoadQueue(); diff --git a/src/components/wrappers.ts b/src/components/wrappers.ts index 0ee2d1eb..2647afab 100644 --- a/src/components/wrappers.ts +++ b/src/components/wrappers.ts @@ -10,7 +10,6 @@ import { renderImageFromUrl } from './misc'; import appMessagesManager from '../lib/appManagers/appMessagesManager'; import { Layouter, RectPart } from './groupedLayout'; import PollElement from './poll'; -import { mediaSizes, isSafari } from '../lib/config'; import animationIntersector from './animationIntersector'; import AudioElement from './audio'; import { DownloadBlob } from '../lib/appManagers/appDownloadManager'; @@ -18,7 +17,9 @@ import webpWorkerController from '../lib/webp/webpWorkerController'; import { readBlobAsText } from '../helpers/blob'; import appMediaPlaybackController from './appMediaPlaybackController'; import { PhotoSize } from '../layer'; -import { deferredPromise } from '../lib/polyfill'; +import { deferredPromise } from '../helpers/cancellablePromise'; +import mediaSizes from '../helpers/mediaSizes'; +import { isSafari } from '../helpers/userAgent'; export function wrapVideo({doc, container, message, boxWidth, boxHeight, withTail, isOut, middleware, lazyLoadQueue, noInfo, group}: { doc: MyDocument, @@ -704,6 +705,14 @@ export function wrapReply(title: string, subtitle: string, message?: any, isPinn const replySubtitle = document.createElement('div'); replySubtitle.classList.add(prefix + '-subtitle'); + + if(title.length > 150) { + title = title.substr(0, 140) + '...'; + } + + if(subtitle.length > 150) { + subtitle = subtitle.substr(0, 140) + '...'; + } replyTitle.innerHTML = title ? RichTextProcessor.wrapEmojiText(title) : ''; diff --git a/src/helpers/cancellablePromise.ts b/src/helpers/cancellablePromise.ts new file mode 100644 index 00000000..139f49c5 --- /dev/null +++ b/src/helpers/cancellablePromise.ts @@ -0,0 +1,63 @@ +export interface CancellablePromise extends Promise { + resolve?: (...args: any[]) => void, + reject?: (...args: any[]) => void, + cancel?: () => void, + + notify?: (...args: any[]) => void, + notifyAll?: (...args: any[]) => void, + lastNotify?: any, + listeners?: Array<(...args: any[]) => void>, + addNotifyListener?: (callback: (...args: any[]) => void) => void, + + isFulfilled?: boolean, + isRejected?: boolean +} + +export function deferredPromise() { + let deferredHelper: any = { + isFulfilled: false, + isRejected: false, + + notify: () => {}, + notifyAll: (...args: any[]) => { + deferredHelper.lastNotify = args; + deferredHelper.listeners.forEach((callback: any) => callback(...args)); + }, + + lastNotify: undefined, + listeners: [], + addNotifyListener: (callback: (...args: any[]) => void) => { + if(deferredHelper.lastNotify) { + callback(...deferredHelper.lastNotify); + } + + deferredHelper.listeners.push(callback); + } + }; + + let deferred: CancellablePromise = new Promise((resolve, reject) => { + deferredHelper.resolve = (value: T) => { + if(deferred.isFulfilled) return; + + deferred.isFulfilled = true; + resolve(value); + }; + + deferredHelper.reject = (...args: any[]) => { + if(deferred.isRejected) return; + + deferred.isRejected = true; + reject(...args); + }; + }); + + deferred.finally(() => { + deferred.notify = null; + deferred.listeners.length = 0; + deferred.lastNotify = null; + }); + + Object.assign(deferred, deferredHelper); + + return deferred; +} \ No newline at end of file diff --git a/src/helpers/eventListenerBase.ts b/src/helpers/eventListenerBase.ts new file mode 100644 index 00000000..319938dc --- /dev/null +++ b/src/helpers/eventListenerBase.ts @@ -0,0 +1,48 @@ +import type { ArgumentTypes } from "../types"; + +export default class EventListenerBase { + protected listeners: Partial<{ + [k in keyof Listeners]: Array<{callback: Listeners[k], once?: true}> + }> = {}; + protected listenerResults: Partial<{ + [k in keyof Listeners]: ArgumentTypes + }> = {}; + + constructor(private reuseResults?: true) { + + } + + public addListener(name: keyof Listeners, callback: Listeners[typeof name], once?: true) { + (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, once}); + + if(this.listenerResults.hasOwnProperty(name)) { + callback(this.listenerResults[name]); + + if(once) { + this.removeListener(name, callback); + } + } + } + + public removeListener(name: keyof Listeners, callback: Listeners[typeof name]) { + if(this.listeners[name]) { + this.listeners[name].findAndSplice(l => l.callback == callback); + } + } + + protected setListenerResult(name: keyof Listeners, ...args: ArgumentTypes) { + if(this.reuseResults) { + this.listenerResults[name] = args; + } + + if(this.listeners[name]) { + this.listeners[name].forEach(listener => { + listener.callback(...args); + + if(listener.once) { + this.removeListener(name, listener.callback); + } + }); + } + } +} \ No newline at end of file diff --git a/src/helpers/mediaSizes.ts b/src/helpers/mediaSizes.ts new file mode 100644 index 00000000..1b7a53f7 --- /dev/null +++ b/src/helpers/mediaSizes.ts @@ -0,0 +1,105 @@ +import EventListenerBase from "./eventListenerBase"; + +type Size = {width: number, height: number}; +type Sizes = { + regular: Size, + webpage: Size, + album: Size +}; + +export enum ScreenSize { + mobile, + medium, + large +} + +const MOBILE_SIZE = 896; +const MEDIUM_SIZE = 1275; +const LARGE_SIZE = 1680; + +class MediaSizes extends EventListenerBase<{ + changeScreen: (from: ScreenSize, to: ScreenSize) => void +}> { + private screenSizes: {key: ScreenSize, value: number}[] = [ + {key: ScreenSize.mobile, value: MOBILE_SIZE - 1}, + {key: ScreenSize.medium, value: MEDIUM_SIZE}, + {key: ScreenSize.large, value: LARGE_SIZE} + ]; + + private sizes: {[k in 'desktop' | 'handhelds']: Sizes} = { + handhelds: { + regular: { + width: 293, + height: 293 + }, + webpage: { + width: 293, + height: 213 + }, + album: { + width: 293, + height: 0 + } + }, + desktop: { + regular: { + width: 480, + height: 480 + }, + webpage: { + width: 480, + height: 400 + }, + album: { + width: 451, + height: 0 + } + } + }; + + public isMobile = false; + public active: Sizes; + public activeScreen: ScreenSize; + + constructor() { + super(); + + window.addEventListener('resize', this.handleResize); + this.handleResize(); + } + + private handleResize = () => { + const innerWidth = window.innerWidth; + //this.isMobile = innerWidth <= 720; + + let activeScreen = this.screenSizes[0].key; + for(let i = this.screenSizes.length - 1; i >= 0; --i) { + if(this.screenSizes[i].value < innerWidth) { + activeScreen = (this.screenSizes[i + 1] || this.screenSizes[i]).key; + break; + } + } + + if(this.activeScreen != activeScreen) { + //console.log('changeScreen', this.activeScreen, activeScreen); + this.setListenerResult('changeScreen', this.activeScreen, activeScreen); + } + + this.activeScreen = activeScreen; + + this.isMobile = this.activeScreen == ScreenSize.mobile; + + this.active = this.isMobile ? this.sizes.handhelds : this.sizes.desktop; + + /* if(this.isMobile) { + for(let i in this.active) { + // @ts-ignore + let size = this.active[i]; + size.width = innerWidth + } + } */ + }; +} + +const mediaSizes = new MediaSizes(); +export default mediaSizes; \ No newline at end of file diff --git a/src/index.hbs b/src/index.hbs index 10588436..a333c4f4 100644 --- a/src/index.hbs +++ b/src/index.hbs @@ -22,7 +22,7 @@ {{/ each }} - + @@ -212,7 +212,7 @@