diff --git a/.eslintrc b/.eslintrc index a70cebe..d7db25b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -107,6 +107,7 @@ "createStylesheet": "readonly", "DatabaseState": "readonly", "debugLogMessage": "readonly", + "DEFINED_CUSTOM_FIELDS": "readonly", "elementsOverlap": "readonly", "EXTENSION_NAME": "readonly", "getCurrentTab": "readonly", diff --git a/keepassxc-browser/_locales/en/messages.json b/keepassxc-browser/_locales/en/messages.json index 4b7d52b..b58595d 100644 --- a/keepassxc-browser/_locales/en/messages.json +++ b/keepassxc-browser/_locales/en/messages.json @@ -734,6 +734,10 @@ "message": "Export settings", "description": "Export settings button text." }, + "optionsButtonResetSettings": { + "message": "Reset all settings", + "description": "Reset all settings button text." + }, "optionsLabelDefaultGroup": { "message": "Default group for saving new passwords:", "description": "Default group options text." @@ -1074,6 +1078,10 @@ "message": "Current settings will be overridden. Do you really want to import the settings file?", "description": "Import settings confirmation dialog help text." }, + "optionsResetSettingsDialogText": { + "message": "All settings will be reset to defaults. Are you sure?", + "description": "Reset all settings dialog text." + }, "optionsConnectedDatabasesText": { "message": "Databases connected to KeePassXC-Browser.", "description": "Info text about connected databases." diff --git a/keepassxc-browser/background/event.js b/keepassxc-browser/background/event.js index 83c5923..2ce8376 100755 --- a/keepassxc-browser/background/event.js +++ b/keepassxc-browser/background/event.js @@ -296,6 +296,7 @@ kpxcEvent.messageHandlers = { 'reconnect': kpxcEvent.onReconnect, 'remove_credentials_from_tab_information': kpxcEvent.onRemoveCredentialsFromTabInformation, 'request_autotype': keepass.requestAutotype, + 'reset_all_settings': page.resetAllSettings, 'retrieve_credentials': page.retrieveCredentials, 'show_default_browseraction': browserAction.showDefault, 'update_credentials': keepass.updateCredentials, diff --git a/keepassxc-browser/background/page.js b/keepassxc-browser/background/page.js index 4394c2a..9ce4bb2 100755 --- a/keepassxc-browser/background/page.js +++ b/keepassxc-browser/background/page.js @@ -138,6 +138,16 @@ page.initSitePreferences = async function() { await browser.storage.local.set({ 'settings': page.settings }); }; +page.resetAllSettings = async function() { + for (const [ key, value ] of Object.entries(defaultSettings)) { + page.settings[key] = value; + } + + page.settings[DEFINED_CUSTOM_FIELDS] = {}; + page.settings.sitePreferences = []; + await browser.storage.local.set({ 'settings': page.settings }); +}; + page.switchTab = async function(tab) { // Clears Fill Attribute selection from context menu page.setFillAttributeContextMenuItemVisible(false); diff --git a/keepassxc-browser/common/global.js b/keepassxc-browser/common/global.js index 3a475b0..e5821dd 100755 --- a/keepassxc-browser/common/global.js +++ b/keepassxc-browser/common/global.js @@ -1,6 +1,7 @@ 'use strict'; const EXTENSION_NAME = 'KeePassXC-Browser'; +const DEFINED_CUSTOM_FIELDS = 'defined-custom-fields'; // Site Preferences ignore options const IGNORE_NOTHING = 'ignoreNothing'; diff --git a/keepassxc-browser/content/custom-fields-banner.js b/keepassxc-browser/content/custom-fields-banner.js index 7d04c0d..2531ad7 100644 --- a/keepassxc-browser/content/custom-fields-banner.js +++ b/keepassxc-browser/content/custom-fields-banner.js @@ -8,7 +8,6 @@ const STEP_SELECT_STRING_FIELDS = 4; const CHECKBOX_OVERLAY_SIZE = 20; -const DEFINED_CUSTOM_FIELDS = 'defined-custom-fields'; const FIXED_FIELD_CLASS = 'kpxcDefine-fixed-field'; const DARK_FIXED_FIELD_CLASS = 'kpxcDefine-fixed-field-dark'; const HOVER_FIELD_CLASS = 'kpxcDefine-fixed-hover-field'; diff --git a/keepassxc-browser/options/options.html b/keepassxc-browser/options/options.html index 7f73cc5..4dd97d0 100644 --- a/keepassxc-browser/options/options.html +++ b/keepassxc-browser/options/options.html @@ -559,6 +559,10 @@ + @@ -586,6 +590,30 @@ + + diff --git a/keepassxc-browser/options/options.js b/keepassxc-browser/options/options.js index 722055b..db74610 100644 --- a/keepassxc-browser/options/options.js +++ b/keepassxc-browser/options/options.js @@ -312,6 +312,24 @@ options.initGeneralSettings = async function() { } }); + // Reset all settings modal + const dialogResetSettingsModal = new bootstrap.Modal('#dialogResetSettings', + { keyboard: true, focus: false, backdrop: true }); + + $('#dialogResetSettings').addEventListener('shown.bs.modal', function(modalEvent) { + modalEvent.currentTarget.querySelector('.modal-footer button.yes').focus(); + }); + + $('#resetSettingsButton').addEventListener('click', function() { + dialogResetSettingsModal.show(); + }); + + $('#dialogResetSettings .modal-footer button.yes').addEventListener('click', function(e) { + dialogResetSettingsModal.hide(); + browser.runtime.sendMessage({ action: 'reset_all_settings' }); + location.reload(); + }); + $('#copyVersionToClipboard').addEventListener('click', function () { const copyText = document.getElementById('versionInfo').innerText; navigator.clipboard.writeText(copyText);