tweb/public/17.86e365efd806c88fac1b.chunk.js.map
Eduard Kuzmenko 6e7128d3d6 Build
2021-04-18 15:56:55 +04:00

1 line
16 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/config/debug.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/config/modes.ts","webpack:///./src/lib/rootScope.ts"],"names":["DEBUG","debug","MOUNT_CLASS_TO","window","self","EventListenerBase","reuseResults","this","_constructor","listeners","listenerResults","name","callback","once","hasOwnProperty","push","findAndSplice","l","args","arr","slice","forEach","listener","findIndex","removeEventListener","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker","RootScope","super","_overlayIsActive","myId","idle","isIDLE","connectionStatus","broadcast","detail","dispatchEvent","on","addEventListener","off","e","status","value","rootScope"],"mappings":"sFAAA,kCAQO,MAAMA,EARb,MAQ8D,EAAMC,MAEvDC,EADuB,oBAAb,OAA2BC,OAASC,KAE5C,O,gCCXf,kCAuDe,MAAMC,EAUnB,YAAYC,GACVC,KAAKC,aAAaF,GAGb,aAAaA,GAAe,GACjCC,KAAKD,aAAeA,EACpBC,KAAKE,UAAY,GACjBF,KAAKG,gBAAkB,GAGlB,iBAAiBC,EAAuBC,EAAkCC,G,MAC5EN,KAAKG,gBAAgBI,eAAeH,KACrCC,KAAYL,KAAKG,gBAAgBC,IAE9BE,KAKgB,QAArB,EAACN,KAAKE,UAAUE,UAAK,QAAKJ,KAAKE,UAAUE,GAAQ,IAAKI,KAAK,CAACH,WAAUC,SAIjE,oBAAoBF,EAAuBC,GAC7CL,KAAKE,UAAUE,IAChBJ,KAAKE,UAAUE,GAAMK,cAAcC,GAAKA,EAAEL,WAAaA,GAMpD,cAAcD,KAA0BO,GAC1CX,KAAKD,eACNC,KAAKG,gBAAgBC,GAAQO,GAG/B,MAAMC,EAAsD,GAKtDV,EAAYF,KAAKE,UAAUE,GACjC,GAAGF,EAAW,CAECA,EAAUW,QAClBC,QAASC,KAEE,IADAb,EAAUc,UAAWN,GAAWA,EAAEL,WAAaU,EAASV,YAKtEO,EAAIJ,KAAKO,EAASV,YAAYM,IAE3BI,EAAST,MACVN,KAAKiB,oBAAoBb,EAAMW,EAASV,aAgB9C,OAAOO,EAGF,UACLZ,KAAKE,UAAY,GACjBF,KAAKG,gBAAkB,M,gCCjI3B,MAAMe,EAAQ,CACZC,KAAMC,SAASC,OAAOC,QAAQ,UAAY,EAC1C5B,MAAO0B,SAASC,OAAOC,QAAQ,WAAa,EAC5CC,MAAM,EACNC,KAAK,EACLC,qBAAqB,EACrBC,iBAAiB,GAOJ,O,+BCxBf,qEAkHO,MAAMC,UAAkB,IAS7B,cACEC,QATM,KAAAC,kBAA4B,EAC7B,KAAAC,KAAO,EACP,KAAAC,KAAO,CACZC,QAAQ,GAEH,KAAAC,iBAA6D,GAyB7D,KAAAC,UAAY,CAAkC9B,EAAS+B,KAO5DnC,KAAKoC,cAAchC,EAAM+B,IAGpB,KAAAE,GAAK,CAAkCjC,EAASC,EAA0CC,KAC/FsB,MAAMU,iBAAiBlC,EAAMC,EAAUC,IAGlC,KAAAgC,iBAAmBtC,KAAKqC,GAExB,KAAAE,IAAM,CAAkCnC,EAASC,KACtDuB,MAAMX,oBAAoBb,EAAMC,IAG3B,KAAAY,oBAAsBjB,KAAKuC,IAvChCvC,KAAKqC,GAAG,YAAcG,IACpBxC,KAAK8B,KAAOU,IAGdxC,KAAKqC,GAAG,2BAA6BG,IACnC,MAAMC,EAASD,EACfxC,KAAKiC,iBAAiBO,EAAEpC,MAAQqC,IAIpC,sBACE,OAAOzC,KAAK6B,iBAGd,oBAAoBa,GAClB1C,KAAK6B,iBAAmBa,EACxB1C,KAAKkC,UAAU,iBAAkBQ,IA0BrC,MAAMC,EAAY,IAAIhB,EACtB,IAAegB,UAAYA,EACZ,YAEfA,EAAUL,iBAAiB,aAAeE,OAI1CG,EAAUL,iBAA+B,aAAeE","file":"17.86e365efd806c88fac1b.chunk.js","sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\nexport default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], once?: boolean}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: keyof Listeners, callback: Listeners[typeof name], once?: boolean) {\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if(once) {\r\n return;\r\n }\r\n }\r\n \r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, once});\r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public removeEventListener(name: keyof Listeners, callback: Listeners[typeof name]) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: keyof Listeners, ...args: ArgumentTypes<Listeners[typeof name]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener: any) => {\r\n const index = listeners.findIndex((l: any) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n//////////////////\r\n/////////////////////////////\r\n//////////\r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings } from \"../layer\";\r\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\r\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\r\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\r\nimport type { MyDialogFilter } from \"./storages/filters\";\r\nimport type { ConnectionStatusChange } from \"../types\";\r\nimport type { UserTyping } from \"./appManagers/appChatsManager\";\r\nimport type Chat from \"../components/chat/chat\";\r\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\r\nimport type { State } from \"./appManagers/appStateManager\";\r\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\r\nimport EventListenerBase from \"../helpers/eventListenerBase\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\nexport type BroadcastEvents = {\r\n 'user_update': number,\r\n 'user_auth': UserAuth,\r\n 'peer_changed': number,\r\n 'peer_changing': Chat,\r\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\r\n 'peer_pinned_hidden': {peerId: number, maxId: number},\r\n 'peer_typings': {peerId: number, typings: UserTyping[]},\r\n 'peer_block': {peerId: number, blocked: boolean},\r\n 'peer_title_edit': number,\r\n 'peer_bio_edit': number,\r\n\r\n 'filter_delete': MyDialogFilter,\r\n 'filter_update': MyDialogFilter,\r\n 'filter_order': number[],\r\n \r\n 'dialog_draft': {peerId: number, draft: MyDraftMessage | undefined, index: number},\r\n 'dialog_unread': {peerId: number},\r\n 'dialog_flush': {peerId: number},\r\n 'dialog_drop': {peerId: number, dialog?: Dialog},\r\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\r\n //'dialog_top': Dialog,\r\n 'dialog_notify_settings': Dialog,\r\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\r\n 'dialogs_archived_unread': {count: number},\r\n \r\n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'history_reply_markup': {peerId: number},\r\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\r\n 'history_delete': {peerId: number, msgs: {[mid: number]: true}},\r\n 'history_forbidden': number,\r\n 'history_reload': number,\r\n 'history_focus': {peerId: number, mid?: number},\r\n //'history_request': void,\r\n \r\n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'message_views': {mid: number, views: number},\r\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number},\r\n 'messages_pending': void,\r\n 'messages_read': void,\r\n 'messages_downloaded': {peerId: number, mids: number[]},\r\n 'messages_media_read': {peerId: number, mids: number[]},\r\n\r\n 'replies_updated': Message.message,\r\n\r\n 'scheduled_new': {peerId: number, mid: number},\r\n 'scheduled_delete': {peerId: number, mids: number[]},\r\n\r\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\r\n\r\n 'stickers_installed': StickerSet.stickerSet,\r\n 'stickers_deleted': StickerSet.stickerSet,\r\n\r\n 'audio_play': {doc: MyDocument, mid: number, peerId: number},\r\n 'audio_pause': void,\r\n \r\n 'state_synchronized': number,\r\n 'state_synchronizing': number,\r\n \r\n 'contacts_update': number,\r\n 'avatar_update': number,\r\n 'chat_full_update': number,\r\n 'poll_update': {poll: Poll, results: PollResults},\r\n 'chat_update': number,\r\n 'channel_settings': {channelId: number},\r\n 'webpage_updated': {id: string, msgs: number[]},\r\n\r\n 'apiUpdate': Update,\r\n 'download_progress': any,\r\n 'connection_status_change': ConnectionStatusChange,\r\n 'settings_updated': {key: string, value: any},\r\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined},\r\n\r\n 'event-heavy-animation-start': void,\r\n 'event-heavy-animation-end': void,\r\n\r\n 'im_mount': void,\r\n 'im_tab_change': number,\r\n\r\n 'idle': boolean,\r\n\r\n 'overlay_toggle': boolean,\r\n\r\n 'background_change': void,\r\n\r\n 'privacy_update': Update.updatePrivacy,\r\n\r\n 'notify_settings': Update.updateNotifySettings,\r\n 'notify_peer_type_settings': {key: Exclude<NotifyPeer['_'], 'notifyPeer'>, settings: PeerNotifySettings},\r\n\r\n 'language_change': void,\r\n};\r\n\r\nexport class RootScope extends EventListenerBase<any> {\r\n private _overlayIsActive: boolean = false;\r\n public myId = 0;\r\n public idle = {\r\n isIDLE: true\r\n };\r\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\r\n public settings: State['settings'];\r\n\r\n constructor() {\r\n super();\r\n\r\n this.on('user_auth', (e) => {\r\n this.myId = e;\r\n });\r\n\r\n this.on('connection_status_change', (e) => {\r\n const status = e;\r\n this.connectionStatus[e.name] = status;\r\n });\r\n }\r\n\r\n get overlayIsActive() {\r\n return this._overlayIsActive;\r\n }\r\n\r\n set overlayIsActive(value: boolean) {\r\n this._overlayIsActive = value;\r\n this.broadcast('overlay_toggle', value);\r\n }\r\n\r\n public broadcast = <T extends keyof BroadcastEvents>(name: T, detail?: BroadcastEvents[T]) => {\r\n /* //if(DEBUG) {\r\n if(name !== 'user_update') {\r\n console.debug('Broadcasting ' + name + ' event, with args:', detail);\r\n }\r\n //} */\r\n\r\n this.dispatchEvent(name, detail);\r\n };\r\n\r\n public on = <T extends keyof BroadcastEvents>(name: T, callback: (e: BroadcastEvents[T]) => any, once?: true) => {\r\n super.addEventListener(name, callback, once);\r\n };\r\n\r\n public addEventListener = this.on;\r\n\r\n public off = <T extends keyof BroadcastEvents>(name: T, callback: (e: BroadcastEvents[T]) => any) => {\r\n super.removeEventListener(name, callback);\r\n };\r\n\r\n public removeEventListener = this.off;\r\n}\r\n\r\nconst rootScope = new RootScope();\r\nMOUNT_CLASS_TO.rootScope = rootScope;\r\nexport default rootScope;\r\n\r\nrootScope.addEventListener('album_edit', (e) => {\r\n \r\n});\r\n\r\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\r\n \r\n});\r\n"],"sourceRoot":""}