diff --git a/firefox/extension/lib/settings.js b/firefox/extension/lib/settings.js index e8db5cd4..ef1807cf 100644 --- a/firefox/extension/lib/settings.js +++ b/firefox/extension/lib/settings.js @@ -2,39 +2,53 @@ window.config = {} window.settings = { controls: { // displays top-to-bottom in toolbar menu - infinityMode: { type: 'toggle', - label: chrome.i18n.getMessage('menuLabel_infinityMode') }, - autoStart: { type: 'toggle', - label: chrome.i18n.getMessage('menuLabel_autoStart'), - helptip: chrome.i18n.getMessage('helptip_autoStart') }, - toggleHidden: { type: 'toggle', - label: chrome.i18n.getMessage('menuLabel_toggleVis'), - helptip: chrome.i18n.getMessage('helptip_toggleVis') }, - autoScrollDisabled: { type: 'toggle', - label: chrome.i18n.getMessage('menuLabel_autoScroll'), - helptip: chrome.i18n.getMessage('helptip_autoScroll') }, - replyLanguage: { type: 'prompt', symbol: '🌐', - label: chrome.i18n.getMessage('menuLabel_replyLang'), - helptip: chrome.i18n.getMessage('prompt_updateReplyLang') }, - replyTopic: { type: 'prompt', symbol: '🧠', - label: chrome.i18n.getMessage('menuLabel_replyTopic'), - helptip: chrome.i18n.getMessage('prompt_updateReplyTopic') }, - replyInterval: { type: 'prompt', symbol: '⌚', - label: chrome.i18n.getMessage('menuLabel_replyInt'), - helptip: chrome.i18n.getMessage('prompt_updateReplyInt') } + get infinityMode() { return { type: 'toggle', + label: window.settings.getMsg('menuLabel_infinityMode') }}, + get autoStart() { return { type: 'toggle', + label: window.settings.getMsg('menuLabel_autoStart'), + helptip: window.settings.getMsg('helptip_autoStart') }}, + get toggleHidden() { return { type: 'toggle', + label: window.settings.getMsg('menuLabel_toggleVis'), + helptip: window.settings.getMsg('helptip_toggleVis') }}, + get autoScrollDisabled() { return { type: 'toggle', + label: window.settings.getMsg('menuLabel_autoScroll'), + helptip: window.settings.getMsg('helptip_autoScroll') }}, + get replyLanguage() { return { type: 'prompt', symbol: '🌐', + label: window.settings.getMsg('menuLabel_replyLang'), + helptip: window.settings.getMsg('prompt_updateReplyLang'), + status: window.config.replyLanguage }}, + get replyTopic() { return { type: 'prompt', symbol: '🧠', + label: window.settings.getMsg('menuLabel_replyTopic'), + helptip: window.settings.getMsg('prompt_updateReplyTopic'), + status: window.config.replyTopic }}, + get replyInterval() { return { type: 'prompt', symbol: '⌚', + label: window.settings.getMsg('menuLabel_replyInt'), + helptip: window.settings.getMsg('prompt_updateReplyInt'), + status: window.config.replyInterval }} + }, + + getMsg(key) { + return typeof chrome != 'undefined' && chrome.runtime ? chrome.i18n.getMessage(key) + : this.appProps.msgs[key] // assigned from app.msgs in userscript }, load() { const keys = ( // original array if array, else new array from multiple args Array.isArray(arguments[0]) ? arguments[0] : Array.from(arguments)) - return Promise.all(keys.map(key => // resolve promise when all keys load - new Promise(resolve => // resolve promise when single key value loads - chrome.storage.sync.get(key, result => { // load from browser extension storage - window.config[key] = result[key] || false ; resolve() - }))))}, + if (typeof chrome != 'undefined' && chrome.runtime) // asynchronously load from browser extension storage + return Promise.all(keys.map(key => // resolve promise when all keys load + new Promise(resolve => // resolve promise when single key value loads + chrome.storage.sync.get(key, result => { + window.config[key] = result[key] || false ; resolve() + })))) ; else // synchronously load from userscript manager storage + keys.forEach(key => window.config[key] = GM_getValue(this.appProps.configKeyPrefix + '_' + key, false)) + }, save(key, val) { - chrome.storage.sync.set({ [key]: val }) // save to browser extension storage + if (typeof chrome != 'undefined' && chrome.runtime) // save to browser extension storage + chrome.storage.sync.set({ [key]: val }) + else // save to userscript manager storage + GM_setValue(this.appProps.configKeyPrefix + '_' + key, val) window.config[key] = val // save to memory } }; diff --git a/firefox/extension/popup/controller.js b/firefox/extension/popup/controller.js index faf512ea..f61df4a1 100644 --- a/firefox/extension/popup/controller.js +++ b/firefox/extension/popup/controller.js @@ -77,13 +77,7 @@ // Create CHILD menu entries on chatgpt.com if (site == 'chatgpt') { await settings.load(Object.keys(settings.controls)) - - // Init prompt setting status labels const re_all = new RegExp(`^(${chrome.i18n.getMessage('menuLabel_all')}|all|any|every)$`, 'i') - settings.controls.replyLanguage.status = config.replyLanguage - settings.controls.replyTopic.status = re_all.test(config.replyTopic) ? - chrome.i18n.getMessage('menuLabel_all') : toTitleCase(config.replyTopic) - settings.controls.replyInterval.status = `${config.replyInterval}s` // Create/insert child section const togglesDiv = dom.create.elem('div', { class: 'menu' }) @@ -150,7 +144,7 @@ const replyTopic = await (await prompt(chrome.i18n.getMessage('prompt_updateReplyTopic') + ' (' + chrome.i18n.getMessage('prompt_orEnter') + ' \'ALL\'):', config.replyTopic)).input if (replyTopic != null) { // user didn't cancel - const str_replyTopic = replyTopic.toString() + const str_replyTopic = toTitleCase(replyTopic.toString()) settings.save('replyTopic', !replyTopic || re_all.test(str_replyTopic) ? chrome.i18n.getMessage('menuLabel_all') : str_replyTopic)