diff options
-rw-r--r-- | ext/bg/data/options-schema.json | 7 | ||||
-rw-r--r-- | ext/bg/js/backend.js | 15 | ||||
-rw-r--r-- | ext/bg/js/context-main.js | 4 | ||||
-rw-r--r-- | ext/bg/js/options.js | 2 | ||||
-rw-r--r-- | ext/bg/settings.html | 10 | ||||
-rw-r--r-- | ext/bg/settings2.html | 22 | ||||
-rw-r--r-- | test/test-options-util.js | 3 |
7 files changed, 59 insertions, 4 deletions
diff --git a/ext/bg/data/options-schema.json b/ext/bg/data/options-schema.json index 2da48041..4a953243 100644 --- a/ext/bg/data/options-schema.json +++ b/ext/bg/data/options-schema.json @@ -797,7 +797,8 @@ "type": "object", "required": [ "database", - "showPopupPreview" + "showPopupPreview", + "useSettingsV2" ], "properties": { "database": { @@ -815,6 +816,10 @@ "showPopupPreview": { "type": "boolean", "default": false + }, + "useSettingsV2": { + "type": "boolean", + "default": false } } } diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index f9c308e5..012036dc 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -790,12 +790,25 @@ class Backend { } _onCommandOptions(params) { + const {useSettingsV2} = this._options.global; const {mode='existingOrNewTab'} = params || {}; if (mode === 'existingOrNewTab') { + if (useSettingsV2) { + (async () => { + const url = chrome.runtime.getURL('/bg/settings2.html'); + const tab = await this._findTab(1000, (url2) => url2.startsWith(url)); + if (tab !== null) { + await this._focusTab(tab); + } else { + chrome.tabs.create({url}); + } + })(); + return; + } chrome.runtime.openOptionsPage(); } else if (mode === 'newTab') { const manifest = chrome.runtime.getManifest(); - const url = chrome.runtime.getURL(manifest.options_ui.page); + const url = chrome.runtime.getURL(useSettingsV2 ? '/bg/settings2.html' : manifest.options_ui.page); chrome.tabs.create({url}); } } diff --git a/ext/bg/js/context-main.js b/ext/bg/js/context-main.js index 93eebe72..b6736fd8 100644 --- a/ext/bg/js/context-main.js +++ b/ext/bg/js/context-main.js @@ -30,12 +30,14 @@ class DisplayController { this._showExtensionInfo(manifest); this._setupEnvironment(); this._setupButtonEvents('.action-open-search', 'search', chrome.runtime.getURL('/bg/search.html')); - this._setupButtonEvents('.action-open-options', 'options', chrome.runtime.getURL(manifest.options_ui.page)); this._setupButtonEvents('.action-open-help', 'help', 'https://foosoft.net/projects/yomichan/'); const optionsFull = await api.optionsGetFull(); this._optionsFull = optionsFull; + const optionsPageUrl = optionsFull.global.useSettingsV2 ? '/bg/settings2.html' : manifest.options_ui.page; + this._setupButtonEvents('.action-open-options', 'options', chrome.runtime.getURL(optionsPageUrl)); + const {profiles, profileCurrent} = optionsFull; const primaryProfile = (profileCurrent >= 0 && profileCurrent < profiles.length) ? profiles[profileCurrent] : null; if (primaryProfile !== null) { diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index dcc8471a..5fb10516 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -613,10 +613,12 @@ class OptionsUtil { // Version 6 changes: // Updated handlebars templates to include "conjugation" definition. // Added global option showPopupPreview. + // Added global option useSettingsV2. // Added anki.checkForDuplicates. // Added general.glossaryLayoutMode; removed general.compactGlossaries. await this._addFieldTemplatesToOptions(options, '/bg/data/anki-field-templates-upgrade-v6.handlebars'); options.global.showPopupPreview = false; + options.global.useSettingsV2 = false; for (const profile of options.profiles) { profile.options.anki.checkForDuplicates = true; profile.options.general.glossaryLayoutMode = (profile.options.general.compactGlossaries ? 'compact' : 'default'); diff --git a/ext/bg/settings.html b/ext/bg/settings.html index c168d7d8..acb07a60 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -21,6 +21,12 @@ <h1>Yomichan Options</h1> </div> + <div class="alert alert-info"> + <a style="text-decoration: underline;" href="/bg/settings2.html"> + An updated version of the settings page is available for testing and feedback. + </a> + </div> + <div class="profile-form ignore-form-changes"> <h3>Profiles</h3> @@ -192,6 +198,10 @@ <label><input type="checkbox" id="show-debug-info" data-setting="general.debugInfo" data-transform-pre="setDocumentAttribute" data-transform-post="setDocumentAttribute" data-document-attribute="data-options-general-debug-info"> Show debug information</label> </div> + <div class="checkbox options-advanced"> + <label><input type="checkbox" data-setting="global.useSettingsV2" data-scope="global"> Use the <a href="/bg/settings2.html">v2 settings page</a> by default</label> + </div> + <div class="form-group"> <label for="result-output-mode">Result grouping</label> <select class="form-control" id="result-output-mode" data-setting="general.resultOutputMode" data-transform-pre="setDocumentAttribute" data-transform-post="setDocumentAttribute" data-document-attribute="data-options-general-result-output-mode"> diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index dcf99bbb..fbcbfbc9 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -50,6 +50,28 @@ <h1>Yomichan Settings</h1> + <h2></h2> + <div class="settings-group" style="border: 1px solid var(--accent-color);"> + <div class="settings-item"><div class="settings-item-inner"> + <div class="settings-item-left"> + <div class="settings-item-label"> + <strong>Notice:</strong> + This new settings page is currently in beta. Questions, comments, and other feedback + is welcome and can be shared + <a href="https://github.com/FooSoft/yomichan/issues/1000" target="_blank" rel="noopener noreferrer">on Github</a>. + </div> + </div> + </div></div> + <div class="settings-item"><div class="settings-item-inner"> + <div class="settings-item-left"> + <div class="settings-item-label">Use the v2 settings page by default</div> + </div> + <div class="settings-item-right"> + <label class="toggle"><input type="checkbox" data-setting="global.useSettingsV2" data-scope="global"><span class="toggle-body"><span class="toggle-track"></span><span class="toggle-knob"></span></span></label> + </div> + </div></div> + </div> + <h2 id="profile">Profile</h2> <div class="settings-group"> <div class="settings-item"><div class="settings-item-inner settings-item-inner-wrappable"> diff --git a/test/test-options-util.js b/test/test-options-util.js index 2e59c7ea..cfb1c87d 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -503,7 +503,8 @@ function createOptionsUpdatedTestData1() { database: { prefixWildcardsSupported: false }, - showPopupPreview: false + showPopupPreview: false, + useSettingsV2: false } }; } |