From 8019c81600dda93777de01853d04d4ff4f1617b7 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Fri, 16 Apr 2021 08:11:52 +0400 Subject: [PATCH] Try to disable remembering password --- src/components/inputField.ts | 6 ++++++ src/components/passwordInputField.ts | 12 ++++++++++-- .../sidebarLeft/tabs/2fa/enterPassword.ts | 1 + src/pages/pageAuthCode.ts | 6 ++++++ src/pages/pagePassword.ts | 1 + src/pages/pageSignIn.ts | 4 +--- src/scss/style.scss | 14 ++++++++++++++ 7 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/components/inputField.ts b/src/components/inputField.ts index 7e367de3..bd5696aa 100644 --- a/src/components/inputField.ts +++ b/src/components/inputField.ts @@ -196,6 +196,12 @@ class InputField { this.input = input; } + public select() { + if((this.input as HTMLInputElement).value) { // * avoid selecting whole empty field on iOS devices + (this.input as HTMLInputElement).select(); // * select text + } + } + public setLabel() { this.label.textContent = ''; if(this.options.labelText) { diff --git a/src/components/passwordInputField.ts b/src/components/passwordInputField.ts index 40f28cd0..1f0e1465 100644 --- a/src/components/passwordInputField.ts +++ b/src/components/passwordInputField.ts @@ -22,11 +22,19 @@ export default class PasswordInputField extends InputField { input.type = 'password'; input.setAttribute('required', ''); input.autocomplete = 'off'; - input.readOnly = true; + /* input.readOnly = true; input.addEventListener('focus', () => { input.removeAttribute('readonly'); - }, {once: true}); + }, {once: true}); */ + + // * https://stackoverflow.com/a/35949954/6758968 + const stealthy = document.createElement('input'); + stealthy.classList.add('stealthy'); + stealthy.tabIndex = -1; + stealthy.type = 'password'; + input.parentElement.prepend(stealthy); + input.parentElement.insertBefore(stealthy.cloneNode(), input.nextSibling); const toggleVisible = this.toggleVisible = document.createElement('span'); toggleVisible.classList.add('toggle-visible', 'tgico'); diff --git a/src/components/sidebarLeft/tabs/2fa/enterPassword.ts b/src/components/sidebarLeft/tabs/2fa/enterPassword.ts index 121f668d..0bb22341 100644 --- a/src/components/sidebarLeft/tabs/2fa/enterPassword.ts +++ b/src/components/sidebarLeft/tabs/2fa/enterPassword.ts @@ -130,6 +130,7 @@ export default class AppTwoStepVerificationEnterPasswordTab extends SliderSuperT textEl.key = 'TwoStepAuth.InvalidPassword'; textEl.update(); preloader.remove(); + passwordInputField.select(); break; } diff --git a/src/pages/pageAuthCode.ts b/src/pages/pageAuthCode.ts index 2a4c4713..5d130550 100644 --- a/src/pages/pageAuthCode.ts +++ b/src/pages/pageAuthCode.ts @@ -89,9 +89,11 @@ let onFirstMount = (): Promise => { break; */ } }).catch(async(err) => { + let good = false; switch(err.type) { case 'SESSION_PASSWORD_NEEDED': //console.warn('pageAuthCode: SESSION_PASSWORD_NEEDED'); + good = true; err.handled = true; await pagePassword.mount(); break; @@ -109,6 +111,10 @@ let onFirstMount = (): Promise => { break; } + if(!good) { + codeInputField.select(); + } + codeInput.removeAttribute('disabled'); }); }; diff --git a/src/pages/pagePassword.ts b/src/pages/pagePassword.ts index 942f84b5..103661fe 100644 --- a/src/pages/pagePassword.ts +++ b/src/pages/pagePassword.ts @@ -100,6 +100,7 @@ let onFirstMount = (): Promise => { default: //btnNext.innerText = err.type; btnNextI18n.update({key: 'PASSWORD_HASH_INVALID'}); + passwordInput.select(); break; } diff --git a/src/pages/pageSignIn.ts b/src/pages/pageSignIn.ts index da93291e..d138a5ed 100644 --- a/src/pages/pageSignIn.ts +++ b/src/pages/pageSignIn.ts @@ -157,9 +157,7 @@ let onFirstMount = () => { void selectWrapper.offsetWidth; // reflow selectWrapper.classList.add('active'); - if(countryInput.value) { // * avoid selecting whole empty field on iOS devices - countryInput.select(); // * select text - } + countryInputField.select(); fastSmoothScroll(page.pageEl.parentElement.parentElement, countryInput, 'start', 4); diff --git a/src/scss/style.scss b/src/scss/style.scss index 9e232919..3c3373e1 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -1149,3 +1149,17 @@ middle-ellipsis-element { font-size: 20px !important; padding: 0 2px; } + +.stealthy { + left: 0; + margin: 0; + max-height: 1px; + max-width: 1px; + opacity: 0; + outline: none; + overflow: hidden; + pointer-events: none; + position: absolute; + top: 0; + z-index: -1; +}