tweb/public/836.c6892c261234c713a6ec.chunk.js.map
Eduard Kuzmenko 5625eda42b Build
2022-08-20 13:32:46 +02:00

1 line
17 KiB
Plaintext

{"version":3,"file":"836.c6892c261234c713a6ec.chunk.js","mappings":"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","sources":["webpack://tweb/./src/components/monkeys/password.ts","webpack://tweb/./src/components/passwordInputField.ts","webpack://tweb/./src/helpers/dom/htmlToSpan.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 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\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\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\nconst 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 const 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 const 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":["PasswordMonkey","constructor","passwordInputField","size","needFrame","this","container","document","createElement","classList","add","load","loadPromise","loop","autoplay","width","height","noCache","then","_animation","animation","addEventListener","currentFrame","direction","setSpeed","pause","onVisibilityClickAdditional","passwordVisible","setDirection","curFrame","play","remove","PasswordInputField","options","super","plainText","onVisibilityClick","e","toggleVisible","toggle","input","type","setAttribute","name","autocomplete","stealthy","tabIndex","parentElement","prepend","insertBefore","cloneNode","nextSibling","append","htmlToSpan","html","span","innerHTML","LoginPage","element","body","querySelector","className","imageDiv","title","titleLangKey","subtitle","subtitleLangKey","withInputWrapper","inputWrapper","passwordInput","page","btnNext","btnNextI18n","key","label","getStateInterval","getState","window","setInterval","_state","state","hint","setLabel","onSubmit","value","length","update","preloader","setValueSilently","Math","random","response","_","clearInterval","m","default","mount","monkey","removeAttribute","catch","err","select","Promise","all","focus"],"sourceRoot":""}