From 0ff4f26db9030db0df851d4b290a9d6702565ea0 Mon Sep 17 00:00:00 2001 From: Toad06 Date: Thu, 18 May 2023 00:14:48 +0200 Subject: [PATCH] extension: Add a button to reset settings --- .../extension/assets/_locales/en/messages.json | 6 ++++++ web/packages/extension/assets/css/options.css | 4 ++++ web/packages/extension/assets/options.html | 3 +++ web/packages/extension/src/common.ts | 4 ++++ web/packages/extension/src/options.ts | 18 +++++++++++++++--- web/packages/extension/src/utils.ts | 2 ++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/web/packages/extension/assets/_locales/en/messages.json b/web/packages/extension/assets/_locales/en/messages.json index c92850db5..afc46227e 100644 --- a/web/packages/extension/assets/_locales/en/messages.json +++ b/web/packages/extension/assets/_locales/en/messages.json @@ -41,6 +41,12 @@ "settings_advanced_options": { "message": "Advanced Options" }, + "settings_reset": { + "message": "Reset settings" + }, + "settings_reset_confirm": { + "message": "Are you sure you want to restore Ruffle settings to their original defaults?" + }, "status_init": { "message": "Reading current tab…" }, diff --git a/web/packages/extension/assets/css/options.css b/web/packages/extension/assets/css/options.css index f27659a16..e1b3ecd92 100644 --- a/web/packages/extension/assets/css/options.css +++ b/web/packages/extension/assets/css/options.css @@ -12,6 +12,10 @@ details > .options { padding-top: 10px; } +details > .options.special { + padding-top: 30px; +} + details > summary { cursor: pointer; } diff --git a/web/packages/extension/assets/options.html b/web/packages/extension/assets/options.html index 51704f094..e2b5ec38d 100644 --- a/web/packages/extension/assets/options.html +++ b/web/packages/extension/assets/options.html @@ -74,6 +74,9 @@ +
+ +
diff --git a/web/packages/extension/src/common.ts b/web/packages/extension/src/common.ts index c731396ba..ba746618a 100644 --- a/web/packages/extension/src/common.ts +++ b/web/packages/extension/src/common.ts @@ -197,3 +197,7 @@ export async function bindOptions( onChange(options); } } + +export async function resetOptions(): Promise { + utils.storage.sync.clear(); +} diff --git a/web/packages/extension/src/options.ts b/web/packages/extension/src/options.ts index f20f1af61..98c97b62b 100644 --- a/web/packages/extension/src/options.ts +++ b/web/packages/extension/src/options.ts @@ -1,9 +1,21 @@ import * as utils from "./utils"; -import { bindOptions } from "./common"; +import { bindOptions, resetOptions } from "./common"; window.addEventListener("DOMContentLoaded", () => { document.title = utils.i18n.getMessage("settings_page"); - document.getElementById("advanced_options")!.textContent = - utils.i18n.getMessage("settings_advanced_options"); + { + const ao = document.getElementById("advanced_options")!; + ao.textContent = utils.i18n.getMessage("settings_advanced_options"); + } + { + const rs = document.getElementById("reset_settings")!; + rs.textContent = utils.i18n.getMessage("settings_reset"); + rs.addEventListener("click", async () => { + if (confirm(utils.i18n.getMessage("settings_reset_confirm"))) { + await resetOptions(); + window.location.reload(); + } + }); + } bindOptions(); }); diff --git a/web/packages/extension/src/utils.ts b/web/packages/extension/src/utils.ts index 59533b3e8..d48fcda4d 100644 --- a/web/packages/extension/src/utils.ts +++ b/web/packages/extension/src/utils.ts @@ -13,6 +13,7 @@ export let i18n: { }; interface StorageArea { + clear: () => Promise; get: (keys?: string[]) => Promise>; remove: (keys: string[]) => Promise; set: (items: Record) => Promise; @@ -82,6 +83,7 @@ function promisifyStorageArea( storage: chrome.storage.StorageArea ): StorageArea { return { + clear: () => promisify((cb) => storage.clear(cb)), get: (keys?: string[]) => promisify((cb) => storage.get(keys || null, cb)), remove: (keys: string[]) => promisify((cb) => storage.remove(keys, cb)),