diff --git a/manifests/base.json.mjs b/manifests/base.json.mjs index 4dae8d2..1b68edb 100644 --- a/manifests/base.json.mjs +++ b/manifests/base.json.mjs @@ -32,9 +32,9 @@ export const render = ({ version, edition }) => { "action": { "default_title": `__MSG_PacUpdated__ | __MSG_Version__: ${version + localizedSuffix}`, - "default_popup": "/src/pages/options/index.html" }, "options_ui": { + "open_in_tab": true, "page": "/src/pages/options/index.html" }, "commands": { diff --git a/src/bg/05-data-init-and-migrations.mjs b/src/bg/05-data-init-and-migrations.mjs index 5f80932..a2308c1 100644 --- a/src/bg/05-data-init-and-migrations.mjs +++ b/src/bg/05-data-init-and-migrations.mjs @@ -1,54 +1 @@ -import { versions, storage } from '../lib/index.mjs'; - -globalThis.migrationPromise = new Promise(async (resolve) => { - console.log('Checking for migrations...'); - const dflts = { - // TODO: Define defaults. - options: {}, - }; - const ifEmpty = await storage.isEmptyAsync(); - if (ifEmpty) { - // Initialisation. First install. - await storage.setAsync({ - ...dflts, - version: versions.current, - }); - return resolve(); - } - // Migration (may be already migrated). - console.log(`Current extension version is ${versions.current}.`); - const oldVersion = await storage.getAsync('version'); - const ifNoNeedToMigrate = oldVersion === versions.current; - if (ifNoNeedToMigrate) { - console.log('No need for migration.'); - return resolve(); - } - console.log(`Migrating to ${versions.current} from ${oldVersion || 'a very old version'}.`); - switch(true) { - case !oldVersion: { - // Update from version <= 0.0.1. - const ifSentence = await storage.getAsync('SOME_KEY'); - if (ifSentence !== undefined) { - console.log('Migrating to 0.0.1.'); - await storage.setAsync({ - ifToEncodeUrlTerminators: ifSentence, - }); - } - }; // Fallthrough. - case versions.isLeq(oldVersion, '0.0.18'): { - console.log('Migrating to >= 0.0.19.'); - const oldState = await storage.getAsync(); - // `oldState` looks like `{ 'ifToEncodeSentenceTerminators': true, 'ifFoobar': false }`. - const migratedOpts = dflts.options.reduce((acc, [ dfltKey, dfltValue ]) => { - const oldValue = oldState[dfltKey]; - acc.push([ dfltKey, typeof(oldValue) === 'boolean' ? oldValue : dfltValue ]); - return acc; - }, []); - await storage.clearAsync(); - await storage.setAsync({ ...dflts, options: migratedOpts }); - }; // Fallthrough. - default: - await storage.setAsync({ version: versions.current }); - } - return resolve(); -}); +console.log('Data migration checks...'); \ No newline at end of file diff --git a/src/bg/10-main.mjs b/src/bg/10-main.mjs index dd4ff5a..f9d4527 100644 --- a/src/bg/10-main.mjs +++ b/src/bg/10-main.mjs @@ -1,116 +1 @@ -import { storage } from '../lib/index.mjs'; - -console.log('Main script starts...'); - -(async () => { - const theState = await storage.getAsync(); - console.log('The state is:', theState); -})(); - -/* -const ID_TO_MENU_HANDLER = {}; - -const createMenuEntry = (id, type, title, handler, contexts, rest) => { - ID_TO_MENU_HANDLER[id] = handler; - console.log('Registered handler for', id); - - chrome.contextMenus.create({ - id, - type, - title, - contexts, - ...rest, - }, () => { - if (chrome.runtime.lastError) { - // Suppress menus recreation. - } - }); -}; - -const copyUrlInstalledPromise = (async () => { - console.log('Main waits for migrations...'); - await globalThis.migrationPromise; - console.log('Migration is finished.'); - - const options = await storage.getAsync('options'); - - // CheckBoxes - const capitalizeFirstLetter = (str) => str - .replace( - /^./g, - (firstLetter) => firstLetter.toUpperCase(), - ); - - options.forEach(([ key, value ], i) => - createMenuEntry(key, 'checkbox', - chrome.i18n.getMessage(capitalizeFirstLetter(key)), - (info) => { - options[i] = [ key, info.checked ]; // Ordered. - storage.setAsync({ options }); - }, - ['action'], - { - checked: value === true, - }, - ), - ); - // /CheckBoxes - - createMenuEntry('copyUrlFromTheAddressBar', 'normal', - chrome.i18n.getMessage('CopyUrlFromTheAddressBar'), - ({ pageUrl }) => copyUrl(pageUrl), - ['page'], - ); - - createMenuEntry('donate', 'normal', - chrome.i18n.getMessage('Donate'), - async (info) => { - chrome.tabs.create({ url: await storage.getAsync('donateUrl') }); - }, - ['action'], - ); - - createMenuEntry('copyUrl', 'normal', - chrome.i18n.getMessage('CopyUnicodeUrl'), - (info) => copyUrl( - info.linkUrl || - info.srcUrl || - info.frameUrl || - info.selectionText || - info.pageUrl // Needed? - ), - ['link', 'image', 'video', 'audio', 'frame', 'selection'], - ); - - createMenuEntry( - 'copyHighlightLink', 'normal', - chrome.i18n.getMessage('CopyUnicodeLinkToHighlight'), - (info) => { - copyUrl(`${info.pageUrl.replace(/#.*\/g, '')}#:~:text=${info.selectionText}`); - }, - ['selection'], - ); - - return Promise.resolve(); - -})(); - -chrome.contextMenus.onClicked.addListener(async (info, tab) => { - const result = await copyUrlInstalledPromise; - console.log('Promise resolved to:', result); - const id = info.menuItemId; - console.log('ALL THE LISTENERS:', Object.keys(ID_TO_MENU_HANDLER)); - const handler = ID_TO_MENU_HANDLER[id]; - console.log(`Here is the handler for ${id} w/ 'info':`, handler, info); - if (handler) { - handler(info); - } -}); - -chrome.action.onClicked.addListener(async ({ url: urlToBeCopied }) => { - console.log('Main waits for listeners to be installed...'); - const copyUrl = await copyUrlInstalledPromise; - console.log('Action clicked with url:', urlToBeCopied); - //copyUrl(urlToBeCopied); -}); -*/ \ No newline at end of file +browser.action.onClicked.addListener(handleClick); \ No newline at end of file diff --git a/src/bg/index.mjs b/src/bg/index.mjs index c819307..0bce35d 100644 --- a/src/bg/index.mjs +++ b/src/bg/index.mjs @@ -1,5 +1,4 @@ -import './00-start.mjs'; -import './05-data-init-and-migrations.mjs'; -import './10-main.mjs'; - -console.log('Background script finished loading.'); +console.log('Extension started.') +chrome.action.onClicked.addListener( + () => chrome.runtime.openOptionsPage(), +); \ No newline at end of file diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 966c2a1..1c7e721 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -2,41 +2,73 @@
- +