tweb/public/437.3a0fbb3b8364085ec2f3.chunk.js.map
Eduard Kuzmenko 019a7aa1e3 Build
2022-06-24 21:23:25 +04:00

1 line
37 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"437.3a0fbb3b8364085ec2f3.chunk.js","mappings":"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","sources":["webpack://tweb/./src/components/button.ts","webpack://tweb/./src/components/monkeys/password.ts","webpack://tweb/./src/components/passwordInputField.ts","webpack://tweb/./src/components/putPreloader.ts","webpack://tweb/./src/components/ripple.ts","webpack://tweb/./src/helpers/dom/clickEvent.ts","webpack://tweb/./src/helpers/dom/htmlToSpan.ts","webpack://tweb/./src/helpers/dom/toggleDisability.ts","webpack://tweb/./src/helpers/sequentialDom.ts","webpack://tweb/./src/pages/loginPage.ts","webpack://tweb/./src/pages/pagePassword.ts"],"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 { i18n, LangPackKey } from \"../lib/langPack\";\r\nimport ripple from \"./ripple\";\r\n\r\nexport type ButtonOptions = Partial<{\r\n noRipple: true, \r\n onlyMobile: true, \r\n icon: string, \r\n rippleSquare: true, \r\n text: LangPackKey, \r\n disabled: boolean,\r\n asDiv: boolean\r\n}>;\r\n\r\nconst Button = (className: string, options: ButtonOptions = {}) => {\r\n const button: HTMLButtonElement = document.createElement(options.asDiv ? 'div' : 'button') as any;\r\n button.className = className + (options.icon ? ' tgico-' + options.icon : '');\r\n\r\n if(!options.noRipple) {\r\n if(options.rippleSquare) {\r\n button.classList.add('rp-square');\r\n }\r\n\r\n ripple(button);\r\n }\r\n\r\n if(options.onlyMobile) {\r\n button.classList.add('only-handhelds');\r\n }\r\n\r\n if(options.disabled) {\r\n button.setAttribute('disabled', 'true');\r\n }\r\n\r\n if(options.text) {\r\n button.append(i18n(options.text));\r\n }\r\n\r\n return button;\r\n};\r\n\r\nexport default Button;\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 lottieLoader, { LottieLoader } from \"../../lib/rlottie/lottieLoader\";\r\nimport RLottiePlayer from \"../../lib/rlottie/rlottiePlayer\";\r\nimport PasswordInputField from \"../passwordInputField\";\r\n\r\nexport default class PasswordMonkey {\r\n public container: HTMLElement;\r\n public animation: RLottiePlayer;\r\n public needFrame = 0;\r\n protected loadPromise: ReturnType<LottieLoader['waitForFirstFrame']>;\r\n\r\n constructor(protected passwordInputField: PasswordInputField, protected size: number) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n public load() {\r\n if(this.loadPromise) return this.loadPromise;\r\n return this.loadPromise = lottieLoader.loadAnimationAsAsset({\r\n container: this.container,\r\n loop: false,\r\n autoplay: false,\r\n width: this.size,\r\n height: this.size,\r\n noCache: true\r\n //}, 'assets/img/TwoFactorSetupMonkeyClose.tgs').then((_animation) => {\r\n }, 'TwoFactorSetupMonkeyPeek').then((_animation) => {\r\n //return;\r\n this.animation = _animation;\r\n this.animation.addEventListener('enterFrame', currentFrame => {\r\n //console.log('enterFrame', currentFrame, this.needFrame);\r\n\r\n if((this.animation.direction === 1 && currentFrame >= this.needFrame) ||\r\n (this.animation.direction === -1 && currentFrame <= this.needFrame)) {\r\n this.animation.setSpeed(1);\r\n this.animation.pause();\r\n } \r\n });\r\n\r\n this.passwordInputField.onVisibilityClickAdditional = () => {\r\n if(this.passwordInputField.passwordVisible) {\r\n this.animation.setDirection(1);\r\n this.animation.curFrame = 0;\r\n this.needFrame = 16;\r\n this.animation.play();\r\n } else {\r\n this.animation.setDirection(-1);\r\n this.animation.curFrame = 16;\r\n this.needFrame = 0;\r\n this.animation.play();\r\n }\r\n };\r\n\r\n return lottieLoader.waitForFirstFrame(_animation);\r\n });\r\n }\r\n\r\n public remove() {\r\n if(this.animation) {\r\n this.animation.remove();\r\n }\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\r\n// import { IS_MOBILE_SAFARI, IS_SAFARI } from \"../environment/userAgent\";\r\nimport cancelEvent from \"../helpers/dom/cancelEvent\";\r\nimport InputField, { InputFieldOptions } from \"./inputField\";\r\n\r\nexport default class PasswordInputField extends InputField {\r\n public passwordVisible = false;\r\n public toggleVisible: HTMLElement;\r\n public onVisibilityClickAdditional: () => void;\r\n\r\n constructor(options: InputFieldOptions = {}) {\r\n super({\r\n plainText: true,\r\n ...options\r\n });\r\n\r\n const input = this.input as HTMLInputElement;\r\n input.type = 'password';\r\n input.setAttribute('required', '');\r\n input.name = 'notsearch_password';\r\n input.autocomplete = 'off';\r\n\r\n /* if(IS_SAFARI && !IS_MOBILE_SAFARI) {\r\n input.setAttribute('readonly', '');\r\n input.addEventListener('focus', () => {\r\n input.removeAttribute('readonly');\r\n }, {once: true});\r\n } */\r\n\r\n // * https://stackoverflow.com/a/35949954/6758968\r\n const stealthy = document.createElement('input');\r\n stealthy.classList.add('stealthy');\r\n stealthy.tabIndex = -1;\r\n stealthy.type = 'password';\r\n input.parentElement.prepend(stealthy);\r\n input.parentElement.insertBefore(stealthy.cloneNode(), input.nextSibling);\r\n\r\n const toggleVisible = this.toggleVisible = document.createElement('span');\r\n toggleVisible.classList.add('toggle-visible', 'tgico');\r\n\r\n this.container.classList.add('input-field-password');\r\n this.container.append(toggleVisible);\r\n\r\n toggleVisible.addEventListener('click', this.onVisibilityClick);\r\n toggleVisible.addEventListener('touchend', this.onVisibilityClick);\r\n }\r\n\r\n public onVisibilityClick = (e: Event) => {\r\n cancelEvent(e);\r\n this.passwordVisible = !this.passwordVisible;\r\n\r\n this.toggleVisible.classList.toggle('eye-hidden', this.passwordVisible);\r\n (this.input as HTMLInputElement).type = this.passwordVisible ? 'text' : 'password';\r\n this.onVisibilityClickAdditional && this.onVisibilityClickAdditional();\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\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\nexport function putPreloader(elem: Element, returnDiv = false): HTMLElement {\r\n const html = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"preloader-circular\" viewBox=\"25 25 50 50\">\r\n <circle class=\"preloader-path\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke-miterlimit=\"10\"/>\r\n </svg>`;\r\n\r\n if(returnDiv) {\r\n const div = document.createElement('div');\r\n div.classList.add('preloader');\r\n div.innerHTML = html;\r\n\r\n if(elem) {\r\n elem.appendChild(div);\r\n }\r\n\r\n return div;\r\n }\r\n \r\n elem.insertAdjacentHTML('beforeend', html);\r\n return elem.lastElementChild as HTMLElement;\r\n}\r\n\r\nMOUNT_CLASS_TO.putPreloader = putPreloader;\r\n\r\nexport function setButtonLoader(elem: HTMLButtonElement, icon = 'check') {\r\n elem.classList.remove('tgico-' + icon);\r\n elem.disabled = true;\r\n putPreloader(elem);\r\n\r\n return () => {\r\n elem.innerHTML = '';\r\n elem.classList.add('tgico-' + icon);\r\n elem.removeAttribute('disabled');\r\n };\r\n}\r\n\r\n/* export function parseMenuButtonsTo(to: {[name: string]: HTMLElement}, elements: HTMLCollection | NodeListOf<HTMLElement>) {\r\n Array.from(elements).forEach((el) => {\r\n const match = el.className.match(/(?:^|\\s)menu-(.+?)(?:$|\\s)/);\r\n if(!match) return;\r\n to[match[1]] = el as HTMLElement;\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\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport sequentialDom from \"../helpers/sequentialDom\";\r\nimport IS_TOUCH_SUPPORTED from \"../environment/touchSupport\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport findUpAsChild from \"../helpers/dom/findUpAsChild\";\r\n\r\nlet rippleClickId = 0;\r\nexport default function ripple(\r\n elem: HTMLElement, \r\n callback: (id: number) => Promise<boolean | void> = () => Promise.resolve(), \r\n onEnd: (id: number) => void = null, \r\n prepend = false,\r\n attachListenerTo = elem\r\n) {\r\n //return;\r\n if(elem.querySelector('.c-ripple')) return;\r\n elem.classList.add('rp');\r\n \r\n let r = document.createElement('div');\r\n r.classList.add('c-ripple');\r\n\r\n const isSquare = elem.classList.contains('rp-square');\r\n if(isSquare) {\r\n r.classList.add('is-square');\r\n }\r\n\r\n elem[prepend ? 'prepend' : 'append'](r);\r\n\r\n let handler: () => void;\r\n //let animationEndPromise: Promise<number>;\r\n const drawRipple = (clientX: number, clientY: number) => {\r\n const startTime = Date.now();\r\n const elem = document.createElement('div');\r\n\r\n const clickId = rippleClickId++;\r\n \r\n //console.log('ripple drawRipple');\r\n \r\n const duration = +window.getComputedStyle(r).getPropertyValue('--ripple-duration').replace('s', '') * 1000;\r\n //console.log('ripple duration', duration);\r\n\r\n handler = () => {\r\n //handler = () => animationEndPromise.then((duration) => {\r\n //console.log('ripple animation was:', duration);\r\n\r\n //const duration = isSquare || mediaSizes.isMobile ? 200 : 700;\r\n //return;\r\n let elapsedTime = Date.now() - startTime;\r\n const cb = () => {\r\n //console.log('ripple elapsedTime total pre-remove:', Date.now() - startTime);\r\n sequentialDom.mutate(() => {\r\n elem.remove();\r\n });\r\n \r\n if(onEnd) onEnd(clickId);\r\n };\r\n if(elapsedTime < duration) {\r\n let delay = Math.max(duration - elapsedTime, duration / 2);\r\n setTimeout(() => elem.classList.add('hiding'), Math.max(delay - duration / 2, 0));\r\n\r\n setTimeout(cb, delay);\r\n } else {\r\n elem.classList.add('hiding');\r\n setTimeout(cb, duration / 2);\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.removeEventListener('contextmenu', handler);\r\n }\r\n\r\n handler = null;\r\n touchStartFired = false;\r\n };\r\n //});\r\n\r\n callback && callback(clickId);\r\n\r\n /* callback().then((bad) => {\r\n if(bad) {\r\n span.remove();\r\n return;\r\n } */\r\n \r\n //console.log('ripple after promise', Date.now() - startTime);\r\n //console.log('ripple tooSlow:', tooSlow);\r\n /* if(tooSlow) {\r\n span.remove();\r\n return;\r\n } */\r\n\r\n window.requestAnimationFrame(() => {\r\n const rect = r.getBoundingClientRect();\r\n elem.classList.add('c-ripple__circle');\r\n\r\n const clickX = clientX - rect.left;\r\n const clickY = clientY - rect.top;\r\n\r\n const radius = Math.sqrt((Math.abs(clickY - rect.height / 2) + rect.height / 2) ** 2 + (Math.abs(clickX - rect.width / 2) + rect.width / 2) ** 2);\r\n const size = radius;\r\n\r\n // center of circle\r\n const x = clickX - size / 2;\r\n const y = clickY - size / 2;\r\n\r\n //console.log('ripple click', offsetFromCenter, size, clickX, clickY);\r\n\r\n elem.style.width = elem.style.height = size + 'px';\r\n elem.style.left = x + 'px';\r\n elem.style.top = y + 'px';\r\n\r\n // нижний код выполняется с задержкой\r\n /* animationEndPromise = new Promise((resolve) => {\r\n span.addEventListener('animationend', () => {\r\n // 713 -> 700\r\n resolve(((Date.now() - startTime) / 100 | 0) * 100);\r\n }, {once: true});\r\n }); */\r\n \r\n // нижний код не всегда включает анимацию ПРИ КЛИКЕ НА ТАЧПАД БЕЗ ТАПТИК ЭНЖИНА\r\n /* span.style.display = 'none';\r\n r.append(span);\r\n duration = +window.getComputedStyle(span).getPropertyValue('animation-duration').replace('s', '') * 1000;\r\n span.style.display = ''; */\r\n\r\n r.append(elem);\r\n\r\n //r.classList.add('active');\r\n //handler();\r\n });\r\n //});\r\n };\r\n\r\n const isRippleUnneeded = (e: Event) => e.target !== elem && (\r\n ['BUTTON', 'A'].includes((e.target as HTMLElement).tagName) \r\n || findUpClassName(e.target as HTMLElement, 'c-ripple') !== r\r\n ) && (\r\n attachListenerTo === elem \r\n || !findUpAsChild(e.target, attachListenerTo)\r\n );\r\n\r\n // TODO: rename this variable\r\n let touchStartFired = false;\r\n if(IS_TOUCH_SUPPORTED) {\r\n let touchEnd = () => {\r\n handler && handler();\r\n };\r\n \r\n attachListenerTo.addEventListener('touchstart', (e) => {\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n\r\n //console.log('ripple touchstart', e);\r\n if(e.touches.length > 1 || touchStartFired || isRippleUnneeded(e)) {\r\n return;\r\n }\r\n \r\n //console.log('touchstart', e);\r\n touchStartFired = true;\r\n \r\n let {clientX, clientY} = e.touches[0];\r\n drawRipple(clientX, clientY);\r\n attachListenerTo.addEventListener('touchend', touchEnd, {once: true});\r\n \r\n window.addEventListener('touchmove', (e) => {\r\n e.cancelBubble = true;\r\n e.stopPropagation();\r\n touchEnd();\r\n attachListenerTo.removeEventListener('touchend', touchEnd);\r\n }, {once: true});\r\n }, {passive: true});\r\n } else {\r\n attachListenerTo.addEventListener('mousedown', (e) => {\r\n if(![0, 2].includes(e.button)) { // only left and right buttons\r\n return;\r\n }\r\n\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n //console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') === r);\r\n\r\n if(attachListenerTo.dataset.ripple === '0' || isRippleUnneeded(e)) {\r\n return;\r\n } else if(touchStartFired) {\r\n touchStartFired = false;\r\n return;\r\n }\r\n \r\n let {clientX, clientY} = e;\r\n drawRipple(clientX, clientY);\r\n window.addEventListener('mouseup', handler, {once: true, passive: true});\r\n window.addEventListener('contextmenu', handler, {once: true, passive: true});\r\n }, {passive: true});\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\r\nimport type ListenerSetter from \"../listenerSetter\";\r\nimport IS_TOUCH_SUPPORTED from \"../../environment/touchSupport\";\r\nimport simulateEvent from \"./dispatchEvent\";\r\n\r\nexport const CLICK_EVENT_NAME: 'mousedown' /* | 'touchend' */ | 'click' = (IS_TOUCH_SUPPORTED ? 'mousedown' : 'click') as any;\r\nexport type AttachClickOptions = AddEventListenerOptions & Partial<{listenerSetter: ListenerSetter, touchMouseDown: true}>;\r\nexport function attachClickEvent(elem: HTMLElement | Window, callback: (e: /* TouchEvent | */MouseEvent) => void, options: AttachClickOptions = {}) {\r\n const add = options.listenerSetter ? options.listenerSetter.add(elem) : elem.addEventListener.bind(elem);\r\n // const remove = options.listenerSetter ? options.listenerSetter.removeManual.bind(options.listenerSetter, elem) : elem.removeEventListener.bind(elem);\r\n\r\n options.touchMouseDown = true;\r\n /* if(options.touchMouseDown && CLICK_EVENT_NAME === 'touchend') {\r\n add('mousedown', callback, options);\r\n } else if(CLICK_EVENT_NAME === 'touchend') {\r\n const o = {...options, once: true};\r\n\r\n const onTouchStart = (e: TouchEvent) => {\r\n const onTouchMove = (e: TouchEvent) => {\r\n remove('touchmove', onTouchMove, o);\r\n remove('touchend', onTouchEnd, o);\r\n };\r\n \r\n const onTouchEnd = (e: TouchEvent) => {\r\n remove('touchmove', onTouchMove, o);\r\n callback(e);\r\n if(options.once) {\r\n remove('touchstart', onTouchStart);\r\n }\r\n };\r\n \r\n add('touchend', onTouchEnd, o);\r\n add('touchmove', onTouchMove, o);\r\n };\r\n\r\n add('touchstart', onTouchStart);\r\n } else {\r\n add(CLICK_EVENT_NAME, callback, options);\r\n } */\r\n add(CLICK_EVENT_NAME, callback, options);\r\n}\r\n\r\nexport function detachClickEvent(elem: HTMLElement, callback: (e: /* TouchEvent | */MouseEvent) => void, options?: AddEventListenerOptions) {\r\n // if(CLICK_EVENT_NAME === 'touchend') {\r\n // elem.removeEventListener('touchstart', callback, options);\r\n // } else {\r\n elem.removeEventListener(CLICK_EVENT_NAME, callback, options);\r\n // }\r\n}\r\n\r\nexport function simulateClickEvent(elem: HTMLElement) {\r\n simulateEvent(elem, CLICK_EVENT_NAME);\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\r\nexport default function htmlToSpan(html: string | DocumentFragment) {\r\n const span = document.createElement('span');\r\n if(typeof(html) === 'string') span.innerHTML = html;\r\n else span.append(html);\r\n return span;\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\r\nexport default function toggleDisability(elements: HTMLElement[], disable: boolean): () => void {\r\n if(disable) {\r\n elements.forEach((el) => el.setAttribute('disabled', 'true'));\r\n } else {\r\n elements.forEach((el) => el.removeAttribute('disabled'));\r\n }\r\n\r\n return () => toggleDisability(elements, !disable);\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\r\nimport { fastRaf } from \"./schedulers\";\r\nimport deferredPromise, { CancellablePromise } from \"./cancellablePromise\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport isInDOM from \"./dom/isInDOM\";\r\n\r\nclass SequentialDom {\r\n private promises: Partial<{\r\n read: CancellablePromise<void>,\r\n write: CancellablePromise<void>\r\n }> = {};\r\n private raf = fastRaf.bind(null);\r\n private scheduled = false;\r\n\r\n private do(kind: keyof SequentialDom['promises'], callback?: VoidFunction) {\r\n let promise = this.promises[kind];\r\n if(!promise) {\r\n this.scheduleFlush();\r\n promise = this.promises[kind] = deferredPromise<void>();\r\n }\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n \r\n return promise;\r\n }\r\n\r\n public measure(callback?: VoidFunction) {\r\n return this.do('read', callback);\r\n }\r\n\r\n public mutate(callback?: VoidFunction) {\r\n return this.do('write', callback);\r\n }\r\n\r\n /**\r\n * Will fire instantly if element is not connected\r\n * @param element \r\n * @param callback \r\n */\r\n public mutateElement(element: HTMLElement, callback?: VoidFunction) {\r\n const isConnected = isInDOM(element);\r\n const promise = isConnected ? this.mutate() : Promise.resolve();\r\n\r\n if(callback !== undefined) {\r\n if(isConnected) {\r\n callback();\r\n } else {\r\n promise.then(() => callback());\r\n }\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n private scheduleFlush() {\r\n if(!this.scheduled) {\r\n this.scheduled = true;\r\n\r\n this.raf(() => {\r\n this.promises.read && this.promises.read.resolve();\r\n this.promises.write && this.promises.write.resolve();\r\n\r\n this.scheduled = false;\r\n this.promises = {};\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst sequentialDom = new SequentialDom();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.sequentialDom = sequentialDom);\r\nexport default sequentialDom;\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 { LangPackKey, i18n } from \"../lib/langPack\";\r\n\r\nexport default class LoginPage {\r\n public element: HTMLElement;\r\n public container: HTMLElement;\r\n public imageDiv: HTMLElement;\r\n public inputWrapper: HTMLElement;\r\n public title: HTMLElement;\r\n public subtitle: HTMLParagraphElement;\r\n\r\n constructor(options: {\r\n className: string,\r\n withInputWrapper?: boolean,\r\n titleLangKey?: LangPackKey,\r\n subtitleLangKey?: LangPackKey,\r\n }) {\r\n this.element = document.body.querySelector('.' + options.className) as HTMLDivElement;\r\n //this.element = document.createElement('div');\r\n //this.element.className = 'page-' + options.className;\r\n\r\n this.container = document.createElement('div');\r\n this.container.className = 'container center-align';\r\n\r\n this.imageDiv = document.createElement('div');\r\n this.imageDiv.className = 'auth-image';\r\n\r\n this.title = document.createElement('h4');\r\n if(options.titleLangKey) {\r\n this.title.append(i18n(options.titleLangKey));\r\n }\r\n\r\n this.subtitle = document.createElement('p');\r\n this.subtitle.className = 'subtitle';\r\n if(options.subtitleLangKey) {\r\n this.subtitle.append(i18n(options.subtitleLangKey));\r\n }\r\n \r\n this.container.append(this.imageDiv, this.title, this.subtitle);\r\n\r\n if(options.withInputWrapper) {\r\n this.inputWrapper = document.createElement('div');\r\n this.inputWrapper.className = 'input-wrapper';\r\n this.container.append(this.inputWrapper);\r\n }\r\n\r\n this.element.append(this.container);\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\r\nimport { putPreloader } from '../components/putPreloader';\r\nimport mediaSizes from '../helpers/mediaSizes';\r\nimport { AccountPassword } from '../layer';\r\nimport Page from './page';\r\nimport Button from '../components/button';\r\nimport PasswordInputField from '../components/passwordInputField';\r\nimport PasswordMonkey from '../components/monkeys/password';\r\nimport I18n from '../lib/langPack';\r\nimport LoginPage from './loginPage';\r\nimport cancelEvent from '../helpers/dom/cancelEvent';\r\nimport { attachClickEvent } from '../helpers/dom/clickEvent';\r\nimport htmlToSpan from '../helpers/dom/htmlToSpan';\r\nimport replaceContent from '../helpers/dom/replaceContent';\r\nimport toggleDisability from '../helpers/dom/toggleDisability';\r\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\r\nimport rootScope from '../lib/rootScope';\r\n\r\nconst TEST = false;\r\nlet passwordInput: HTMLInputElement;\r\n\r\nlet onFirstMount = (): Promise<any> => {\r\n const page = new LoginPage({\r\n className: 'page-password',\r\n withInputWrapper: true,\r\n titleLangKey: 'Login.Password.Title',\r\n subtitleLangKey: 'Login.Password.Subtitle'\r\n });\r\n\r\n const btnNext = Button('btn-primary btn-color-primary');\r\n const btnNextI18n = new I18n.IntlElement({key: 'Login.Next'});\r\n\r\n btnNext.append(btnNextI18n.element);\r\n\r\n const passwordInputField = new PasswordInputField({\r\n label: 'LoginPassword',\r\n name: 'password'\r\n });\r\n\r\n passwordInput = passwordInputField.input as HTMLInputElement;\r\n\r\n page.inputWrapper.append(passwordInputField.container, btnNext);\r\n\r\n let getStateInterval: number;\r\n\r\n let getState = () => {\r\n // * just to check session relevance\r\n if(!getStateInterval) {\r\n getStateInterval = window.setInterval(getState, 10e3);\r\n }\r\n\r\n return !TEST && rootScope.managers.passwordManager.getState().then((_state) => {\r\n state = _state;\r\n\r\n if(state.hint) {\r\n replaceContent(passwordInputField.label, htmlToSpan(wrapEmojiText(state.hint)));\r\n } else {\r\n passwordInputField.setLabel();\r\n }\r\n });\r\n };\r\n\r\n let state: AccountPassword;\r\n \r\n const onSubmit = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n if(!passwordInput.value.length) {\r\n passwordInput.classList.add('error');\r\n return;\r\n }\r\n\r\n const toggle = toggleDisability([passwordInput, btnNext], true);\r\n let value = passwordInput.value;\r\n\r\n btnNextI18n.update({key: 'PleaseWait'});\r\n const preloader = putPreloader(btnNext);\r\n\r\n passwordInputField.setValueSilently('' + Math.random()); // prevent saving suggestion\r\n passwordInputField.setValueSilently(value); // prevent saving suggestion\r\n\r\n rootScope.managers.passwordManager.check(value, state).then((response) => {\r\n //console.log('passwordManager response:', response);\r\n \r\n switch(response._) {\r\n case 'auth.authorization':\r\n clearInterval(getStateInterval);\r\n import('./pageIm').then((m) => {\r\n m.default.mount();\r\n });\r\n if(monkey) monkey.remove();\r\n break;\r\n default:\r\n btnNext.removeAttribute('disabled');\r\n btnNextI18n.update({key: response._ as any});\r\n preloader.remove();\r\n break;\r\n }\r\n }).catch((err: any) => {\r\n toggle();\r\n passwordInputField.input.classList.add('error');\r\n \r\n switch(err.type) {\r\n default:\r\n //btnNext.innerText = err.type;\r\n btnNextI18n.update({key: 'PASSWORD_HASH_INVALID'});\r\n passwordInput.select();\r\n break;\r\n }\r\n\r\n preloader.remove();\r\n \r\n getState();\r\n });\r\n };\r\n \r\n attachClickEvent(btnNext, onSubmit);\r\n\r\n passwordInput.addEventListener('keypress', function(this, e) {\r\n this.classList.remove('error');\r\n btnNextI18n.update({key: 'Login.Next'});\r\n\r\n if(e.key === 'Enter') {\r\n return onSubmit();\r\n }\r\n });\r\n\r\n const size = mediaSizes.isMobile ? 100 : 166;\r\n const monkey = new PasswordMonkey(passwordInputField, size);\r\n page.imageDiv.append(monkey.container);\r\n return Promise.all([\r\n monkey.load(),\r\n getState()\r\n ]);\r\n};\r\n\r\nconst page = new Page('page-password', true, onFirstMount, null, () => {\r\n //if(!isAppleMobile) {\r\n passwordInput.focus();\r\n //}\r\n\r\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStatePassword'});\r\n});\r\n\r\nexport default page;\r\n"],"names":["className","options","button","document","createElement","asDiv","icon","noRipple","rippleSquare","classList","add","onlyMobile","disabled","setAttribute","text","append","PasswordMonkey","constructor","passwordInputField","size","needFrame","this","container","load","loadPromise","loop","autoplay","width","height","noCache","then","_animation","animation","addEventListener","currentFrame","direction","setSpeed","pause","onVisibilityClickAdditional","passwordVisible","setDirection","curFrame","play","remove","PasswordInputField","super","plainText","onVisibilityClick","e","toggleVisible","toggle","input","type","name","autocomplete","stealthy","tabIndex","parentElement","prepend","insertBefore","cloneNode","nextSibling","putPreloader","elem","returnDiv","html","div","innerHTML","appendChild","insertAdjacentHTML","lastElementChild","setButtonLoader","removeAttribute","rippleClickId","ripple","callback","Promise","resolve","onEnd","attachListenerTo","querySelector","handler","r","contains","drawRipple","clientX","clientY","startTime","Date","now","clickId","duration","window","getComputedStyle","getPropertyValue","replace","elapsedTime","cb","delay","Math","max","setTimeout","removeEventListener","touchStartFired","requestAnimationFrame","rect","getBoundingClientRect","clickX","left","clickY","top","sqrt","abs","x","y","style","isRippleUnneeded","target","includes","tagName","touchEnd","touches","length","once","cancelBubble","stopPropagation","passive","dataset","CLICK_EVENT_NAME","attachClickEvent","listenerSetter","bind","touchMouseDown","detachClickEvent","simulateClickEvent","htmlToSpan","span","toggleDisability","elements","disable","forEach","el","sequentialDom","promises","raf","scheduled","do","kind","promise","scheduleFlush","undefined","measure","mutate","mutateElement","element","isConnected","read","write","LoginPage","body","imageDiv","title","titleLangKey","subtitle","subtitleLangKey","withInputWrapper","inputWrapper","passwordInput","page","btnNext","btnNextI18n","key","label","getStateInterval","state","getState","setInterval","_state","hint","setLabel","onSubmit","value","update","preloader","setValueSilently","random","response","_","clearInterval","m","default","mount","monkey","catch","err","select","all","focus"],"sourceRoot":""}