/* global i18n: false */ /* global Whisper: false */ /* eslint-disable no-new */ // eslint-disable-next-line func-names (function() { 'use strict'; window.Whisper = window.Whisper || {}; const MIN_LOGIN_TRIES = 3; Whisper.PasswordView = Whisper.View.extend({ className: 'password full-screen-flow standalone-fullscreen', templateName: 'password', events: { keyup: 'onKeyup', 'click #unlock-button': 'onLogin', 'click #reset-button': 'onReset', }, initialize() { this.errorCount = 0; this.render(); }, render_attributes() { return { title: i18n('passwordViewTitle'), buttonText: i18n('unlock'), resetText: i18n('resetDatabase'), showReset: this.errorCount >= MIN_LOGIN_TRIES, }; }, onKeyup(event) { switch (event.key) { case 'Enter': this.onLogin(); break; default: return; } event.preventDefault(); }, async onLogin() { const passPhrase = this.$('#passPhrase').val(); const trimmed = passPhrase ? passPhrase.trim() : passPhrase; this.setError(''); try { await window.onLogin(trimmed); } catch (e) { // Increment the error counter and show the button if necessary this.errorCount += 1; if (this.errorCount >= MIN_LOGIN_TRIES) { this.render(); } this.setError(`Error: ${e}`); } }, setError(string) { this.$('.error').text(string); }, onReset() { const clearDataView = new window.Whisper.ClearDataView(() => { window.resetDatabase(); }); clearDataView.render(); this.$el.append(clearDataView.el); }, }); })();