1 line
37 KiB
Plaintext
1 line
37 KiB
Plaintext
{"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":""} |