Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.3 KiB
179 lines
5.3 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import { SettingSection } from "../.."; |
|
import { AccountPassword } from "../../../../layer"; |
|
import appStickersManager from "../../../../lib/appManagers/appStickersManager"; |
|
import Button from "../../../button"; |
|
import { SliderSuperTab } from "../../../slider"; |
|
import { wrapSticker } from "../../../wrappers"; |
|
import InputField from "../../../inputField"; |
|
import { attachClickEvent, cancelEvent, canFocus } from "../../../../helpers/dom"; |
|
import { putPreloader } from "../../../misc"; |
|
import passwordManager from "../../../../lib/mtproto/passwordManager"; |
|
import AppTwoStepVerificationSetTab from "./passwordSet"; |
|
import AppTwoStepVerificationEmailConfirmationTab from "./emailConfirmation"; |
|
import RichTextProcessor from "../../../../lib/richtextprocessor"; |
|
import PopupPeer from "../../../popups/peer"; |
|
|
|
export default class AppTwoStepVerificationEmailTab extends SliderSuperTab { |
|
public inputField: InputField; |
|
public state: AccountPassword; |
|
public plainPassword: string; |
|
public newPassword: string; |
|
public hint: string; |
|
public isFirst = false; |
|
|
|
protected init() { |
|
this.container.classList.add('two-step-verification', 'two-step-verification-email'); |
|
this.setTitle('RecoveryEmailTitle'); |
|
|
|
const section = new SettingSection({ |
|
caption: true, |
|
noDelimiter: true |
|
}); |
|
|
|
const emoji = '💌'; |
|
const doc = appStickersManager.getAnimatedEmojiSticker(emoji); |
|
const stickerContainer = document.createElement('div'); |
|
|
|
if(doc) { |
|
wrapSticker({ |
|
doc, |
|
div: stickerContainer, |
|
loop: false, |
|
play: true, |
|
width: 160, |
|
height: 160, |
|
emoji |
|
}).then(() => { |
|
// this.animation = player; |
|
}); |
|
} else { |
|
stickerContainer.classList.add('media-sticker-wrapper'); |
|
} |
|
|
|
section.content.append(stickerContainer); |
|
|
|
const inputContent = section.generateContentElement(); |
|
|
|
const inputWrapper = document.createElement('div'); |
|
inputWrapper.classList.add('input-wrapper'); |
|
|
|
const inputField = this.inputField = new InputField({ |
|
name: 'recovery-email', |
|
label: 'RecoveryEmail', |
|
plainText: true |
|
}); |
|
|
|
inputField.input.addEventListener('keypress', (e) => { |
|
if(e.key === 'Enter') { |
|
cancelEvent(e); |
|
return onContinueClick(); |
|
} |
|
}); |
|
|
|
inputField.input.addEventListener('input', (e) => { |
|
inputField.input.classList.remove('error'); |
|
}); |
|
|
|
const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'}); |
|
const btnSkip = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'YourEmailSkip'}); |
|
|
|
const goNext = () => { |
|
new AppTwoStepVerificationSetTab(this.slider).open(); |
|
}; |
|
|
|
const onContinueClick = () => { |
|
const email = inputField.value.trim(); |
|
const match = RichTextProcessor.matchEmail(email); |
|
if(!match || match[0].length !== email.length) { |
|
inputField.input.classList.add('error'); |
|
return; |
|
} |
|
|
|
toggleButtons(true); |
|
const d = putPreloader(btnContinue); |
|
|
|
passwordManager.updateSettings({ |
|
hint: this.hint, |
|
currentPassword: this.plainPassword, |
|
newPassword: this.newPassword, |
|
email |
|
}).then((value) => { |
|
goNext(); |
|
}, (err) => { |
|
if(err.type.includes('EMAIL_UNCONFIRMED')) { |
|
const symbols = +err.type.match(/^EMAIL_UNCONFIRMED_(\d+)/)[1]; |
|
|
|
const tab = new AppTwoStepVerificationEmailConfirmationTab(this.slider); |
|
tab.state = this.state; |
|
tab.email = email; |
|
tab.length = symbols; |
|
tab.open(); |
|
} else { |
|
console.log('password set error', err); |
|
} |
|
|
|
toggleButtons(false); |
|
d.remove(); |
|
}); |
|
}; |
|
attachClickEvent(btnContinue, onContinueClick); |
|
|
|
const toggleButtons = (freeze: boolean) => { |
|
if(freeze) { |
|
btnContinue.setAttribute('disabled', 'true'); |
|
btnSkip.setAttribute('disabled', 'true'); |
|
} else { |
|
btnContinue.removeAttribute('disabled'); |
|
btnSkip.removeAttribute('disabled'); |
|
} |
|
}; |
|
|
|
attachClickEvent(btnSkip, (e) => { |
|
const popup = new PopupPeer('popup-skip-email', { |
|
buttons: [{ |
|
langKey: 'Cancel', |
|
isCancel: true |
|
}, { |
|
langKey: 'YourEmailSkip', |
|
callback: () => { |
|
//inputContent.classList.add('sidebar-left-section-disabled'); |
|
toggleButtons(true); |
|
putPreloader(btnSkip); |
|
passwordManager.updateSettings({ |
|
hint: this.hint, |
|
currentPassword: this.plainPassword, |
|
newPassword: this.newPassword, |
|
email: '' |
|
}).then(() => { |
|
goNext(); |
|
}, (err) => { |
|
toggleButtons(false); |
|
}); |
|
}, |
|
isDanger: true, |
|
}], |
|
titleLangKey: 'YourEmailSkipWarning', |
|
descriptionLangKey: 'YourEmailSkipWarningText' |
|
}); |
|
|
|
popup.show(); |
|
}); |
|
|
|
inputWrapper.append(inputField.container, btnContinue, btnSkip); |
|
|
|
inputContent.append(inputWrapper); |
|
|
|
this.scrollable.container.append(section.container); |
|
} |
|
|
|
onOpenAfterTimeout() { |
|
if(!canFocus(this.isFirst)) return; |
|
this.inputField.input.focus(); |
|
} |
|
}
|
|
|