mirror of https://github.com/keeweb/keeweb.git
fix #1460: auto-type on double-clicking field labels
This commit is contained in:
parent
448e173f7e
commit
a2194435e6
|
@ -36,6 +36,7 @@ const DefaultAppSettings = {
|
||||||
useGroupIconForEntries: false, // automatically use group icon when creating new entries
|
useGroupIconForEntries: false, // automatically use group icon when creating new entries
|
||||||
enableUsb: true, // enable interaction with USB devices
|
enableUsb: true, // enable interaction with USB devices
|
||||||
nativeArgon2: true, // use native argon2 module
|
nativeArgon2: true, // use native argon2 module
|
||||||
|
fieldLabelDblClickAutoType: false, // trigger auto-type by doubleclicking field label
|
||||||
|
|
||||||
yubiKeyShowIcon: true, // show an icon to open OTP codes from YubiKey
|
yubiKeyShowIcon: true, // show an icon to open OTP codes from YubiKey
|
||||||
yubiKeyAutoOpen: false, // auto-load one-time codes when there are open files
|
yubiKeyAutoOpen: false, // auto-load one-time codes when there are open files
|
||||||
|
|
|
@ -13,7 +13,8 @@ const Timeouts = {
|
||||||
LinkDownloadRevoke: 10 * 1000 * 60,
|
LinkDownloadRevoke: 10 * 1000 * 60,
|
||||||
DefaultHttpRequest: 60000,
|
DefaultHttpRequest: 60000,
|
||||||
ExternalDeviceReconnect: 3000,
|
ExternalDeviceReconnect: 3000,
|
||||||
ExternalDeviceAfterReconnect: 1000
|
ExternalDeviceAfterReconnect: 1000,
|
||||||
|
FieldLabelDoubleClick: 300
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Timeouts };
|
export { Timeouts };
|
||||||
|
|
|
@ -458,6 +458,7 @@
|
||||||
"setGenTryBetaWarningBody": "Please save all files and click this button again",
|
"setGenTryBetaWarningBody": "Please save all files and click this button again",
|
||||||
"setGenShowAppLogs": "Show app logs",
|
"setGenShowAppLogs": "Show app logs",
|
||||||
"setGenReloadApp": "Reload the app",
|
"setGenReloadApp": "Reload the app",
|
||||||
|
"setGenFieldLabelDblClickAutoType": "Auto-type on double-clicking field labels",
|
||||||
|
|
||||||
"setFilePath": "File path",
|
"setFilePath": "File path",
|
||||||
"setFileStorage": "This file is loaded from {}.",
|
"setFileStorage": "This file is loaded from {}.",
|
||||||
|
|
|
@ -9,6 +9,8 @@ import { Locale } from 'util/locale';
|
||||||
import { AutoType } from 'auto-type';
|
import { AutoType } from 'auto-type';
|
||||||
import { PasswordPresenter } from 'util/formatting/password-presenter';
|
import { PasswordPresenter } from 'util/formatting/password-presenter';
|
||||||
import { DropdownView } from 'views/dropdown-view';
|
import { DropdownView } from 'views/dropdown-view';
|
||||||
|
import { AppSettingsModel } from 'models/app-settings-model';
|
||||||
|
import { Timeouts } from 'const/timeouts';
|
||||||
import template from 'templates/details/fields/field.hbs';
|
import template from 'templates/details/fields/field.hbs';
|
||||||
|
|
||||||
class FieldView extends View {
|
class FieldView extends View {
|
||||||
|
@ -16,6 +18,7 @@ class FieldView extends View {
|
||||||
|
|
||||||
events = {
|
events = {
|
||||||
'click .details__field-label': 'fieldLabelClick',
|
'click .details__field-label': 'fieldLabelClick',
|
||||||
|
'dblclick .details__field-label': 'fieldLabelDblClick',
|
||||||
'click .details__field-value': 'fieldValueClick',
|
'click .details__field-value': 'fieldValueClick',
|
||||||
'dragstart .details__field-label': 'fieldLabelDrag',
|
'dragstart .details__field-label': 'fieldLabelDrag',
|
||||||
'click .details__field-options': 'fieldOptionsClick'
|
'click .details__field-options': 'fieldOptionsClick'
|
||||||
|
@ -75,7 +78,20 @@ class FieldView extends View {
|
||||||
if (this.preventCopy) {
|
if (this.preventCopy) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.copyValue();
|
if (AutoType.enabled && AppSettingsModel.fieldLabelDblClickAutoType) {
|
||||||
|
if (this.fieldLabelClickTimer) {
|
||||||
|
clearTimeout(this.fieldLabelClickTimer);
|
||||||
|
this.fieldLabelClickTimer = null;
|
||||||
|
this.emit('autotype', { source: this });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.fieldLabelClickTimer = setTimeout(() => {
|
||||||
|
this.copyValue();
|
||||||
|
this.fieldLabelClickTimer = null;
|
||||||
|
}, Timeouts.FieldLabelDoubleClick);
|
||||||
|
} else {
|
||||||
|
this.copyValue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
copyValue() {
|
copyValue() {
|
||||||
|
|
|
@ -43,6 +43,8 @@ class SettingsGeneralView extends View {
|
||||||
'change .settings__general-use-markdown': 'changeUseMarkdown',
|
'change .settings__general-use-markdown': 'changeUseMarkdown',
|
||||||
'change .settings__general-use-group-icon-for-entries': 'changeUseGroupIconForEntries',
|
'change .settings__general-use-group-icon-for-entries': 'changeUseGroupIconForEntries',
|
||||||
'change .settings__general-direct-autotype': 'changeDirectAutotype',
|
'change .settings__general-direct-autotype': 'changeDirectAutotype',
|
||||||
|
'change .settings__general-field-label-dblclick-autotype':
|
||||||
|
'changeFieldLabelDblClickAutoType',
|
||||||
'change .settings__general-titlebar-style': 'changeTitlebarStyle',
|
'change .settings__general-titlebar-style': 'changeTitlebarStyle',
|
||||||
'click .settings__general-update-btn': 'checkUpdate',
|
'click .settings__general-update-btn': 'checkUpdate',
|
||||||
'click .settings__general-restart-btn': 'restartApp',
|
'click .settings__general-restart-btn': 'restartApp',
|
||||||
|
@ -110,6 +112,7 @@ class SettingsGeneralView extends View {
|
||||||
useMarkdown: AppSettingsModel.useMarkdown,
|
useMarkdown: AppSettingsModel.useMarkdown,
|
||||||
useGroupIconForEntries: AppSettingsModel.useGroupIconForEntries,
|
useGroupIconForEntries: AppSettingsModel.useGroupIconForEntries,
|
||||||
directAutotype: AppSettingsModel.directAutotype,
|
directAutotype: AppSettingsModel.directAutotype,
|
||||||
|
fieldLabelDblClickAutoType: AppSettingsModel.fieldLabelDblClickAutoType,
|
||||||
supportsTitleBarStyles: Launcher && Features.supportsTitleBarStyles(),
|
supportsTitleBarStyles: Launcher && Features.supportsTitleBarStyles(),
|
||||||
titlebarStyle: AppSettingsModel.titlebarStyle,
|
titlebarStyle: AppSettingsModel.titlebarStyle,
|
||||||
storageProviders,
|
storageProviders,
|
||||||
|
@ -321,6 +324,12 @@ class SettingsGeneralView extends View {
|
||||||
Events.emit('refresh');
|
Events.emit('refresh');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
changeFieldLabelDblClickAutoType(e) {
|
||||||
|
const fieldLabelDblClickAutoType = e.target.checked || false;
|
||||||
|
AppSettingsModel.fieldLabelDblClickAutoType = fieldLabelDblClickAutoType;
|
||||||
|
Events.emit('refresh');
|
||||||
|
}
|
||||||
|
|
||||||
restartApp() {
|
restartApp() {
|
||||||
if (Launcher) {
|
if (Launcher) {
|
||||||
Launcher.requestRestart();
|
Launcher.requestRestart();
|
||||||
|
|
|
@ -147,6 +147,11 @@
|
||||||
id="settings__general-direct-autotype" {{#if directAutotype}}checked{{/if}} />
|
id="settings__general-direct-autotype" {{#if directAutotype}}checked{{/if}} />
|
||||||
<label for="settings__general-direct-autotype">{{res 'setGenDirectAutotype'}}</label>
|
<label for="settings__general-direct-autotype">{{res 'setGenDirectAutotype'}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" class="settings__input input-base settings__general-field-label-dblclick-autotype"
|
||||||
|
id="settings__general-field-label-dblclick-autotype" {{#if fieldLabelDblClickAutoType}}checked{{/if}} />
|
||||||
|
<label for="settings__general-field-label-dblclick-autotype">{{res 'setGenFieldLabelDblClickAutoType'}}</label>
|
||||||
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div>
|
<div>
|
||||||
<input type="checkbox" class="settings__input input-base settings__general-use-markdown" id="settings__general-use-markdown" {{#if useMarkdown}}checked{{/if}} />
|
<input type="checkbox" class="settings__input input-base settings__general-use-markdown" id="settings__general-use-markdown" {{#if useMarkdown}}checked{{/if}} />
|
||||||
|
|
|
@ -3,6 +3,7 @@ Release notes
|
||||||
##### v1.15.0 (WIP)
|
##### v1.15.0 (WIP)
|
||||||
`+` YubiKey integration in two modes: OATH and Challenge-Response
|
`+` YubiKey integration in two modes: OATH and Challenge-Response
|
||||||
`+` configs are now encrypted with a key stored in keychain
|
`+` configs are now encrypted with a key stored in keychain
|
||||||
|
`+` #1460: auto-type on double-clicking field labels
|
||||||
`+` #557: Argon2 speed improvements in desktop apps
|
`+` #557: Argon2 speed improvements in desktop apps
|
||||||
`+` #1503: ARM64 Windows support
|
`+` #1503: ARM64 Windows support
|
||||||
`+` #1480: option to create a portable installation
|
`+` #1480: option to create a portable installation
|
||||||
|
|
Loading…
Reference in New Issue