mirror of https://github.com/dessant/buster
feat: migrate to Vuetify
BREAKING CHANGE: browser versions older than Chrome 92, Edge 92, Firefox 91, and Opera 78 are no longer supportedmain
parent
64b4ce7d46
commit
c921f6509e
@ -0,0 +1,14 @@
|
||||
[chrome]
|
||||
Chrome >= 92
|
||||
Edge >= 92
|
||||
Opera >= 78
|
||||
|
||||
[edge]
|
||||
Edge >= 92
|
||||
|
||||
[firefox]
|
||||
Firefox >= 91
|
||||
FirefoxAndroid >= 91
|
||||
|
||||
[opera]
|
||||
Opera >= 78
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 8,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"semi": 2
|
||||
}
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
.assets/
|
||||
secrets.json
|
||||
/.assets/
|
||||
/secrets.json
|
||||
|
||||
node_modules/
|
||||
artifacts/
|
||||
dist/
|
||||
/artifacts/
|
||||
/dist/
|
||||
|
||||
web-ext-config.js
|
||||
/.vscode
|
||||
|
||||
npm-debug.log
|
||||
yarn-debug.log
|
||||
yarn-error.log
|
||||
.yarn-integrity
|
||||
/web-ext-config.js
|
||||
|
||||
report.json
|
||||
/npm-debug.log
|
||||
|
||||
/report.json
|
||||
/report.html
|
||||
|
@ -1,2 +1,2 @@
|
||||
package.json
|
||||
.travis.yml
|
||||
*.md
|
||||
|
@ -0,0 +1,34 @@
|
||||
const path = require('node:path');
|
||||
|
||||
const corejsVersion = require(path.join(
|
||||
path.dirname(require.resolve('core-js')),
|
||||
'package.json'
|
||||
)).version;
|
||||
|
||||
module.exports = function (api) {
|
||||
const presets = [
|
||||
[
|
||||
'@babel/env',
|
||||
{
|
||||
modules: false,
|
||||
bugfixes: true,
|
||||
useBuiltIns: 'usage',
|
||||
corejs: {version: corejsVersion}
|
||||
}
|
||||
]
|
||||
];
|
||||
|
||||
const plugins = [];
|
||||
|
||||
const ignore = [
|
||||
new RegExp(`node_modules\\${path.sep}(?!(vueton|wesa)\\${path.sep}).*`)
|
||||
];
|
||||
|
||||
const parserOpts = {plugins: ['importAssertions']};
|
||||
|
||||
if (api.env('production')) {
|
||||
plugins.push('lodash');
|
||||
}
|
||||
|
||||
return {presets, plugins, ignore, parserOpts};
|
||||
};
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,12 @@
|
||||
module.exports = function(ctx) {
|
||||
return {
|
||||
plugins: {
|
||||
autoprefixer: {},
|
||||
cssnano:
|
||||
ctx.env === 'production' ? {zindex: false, discardUnused: false} : false
|
||||
}
|
||||
};
|
||||
const postcssPresetEnv = require('postcss-preset-env');
|
||||
const cssnano = require('cssnano');
|
||||
|
||||
module.exports = function (api) {
|
||||
const plugins = [postcssPresetEnv()];
|
||||
|
||||
if (api.env === 'production') {
|
||||
plugins.push(cssnano({zindex: false, discardUnused: false}));
|
||||
}
|
||||
|
||||
return {plugins};
|
||||
};
|
||||
|
@ -0,0 +1,23 @@
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('./files/roboto-latin-400-normal.woff2') format('woff2'),
|
||||
local('Roboto'), local('Roboto-Regular');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: url('./files/roboto-latin-500-normal.woff2') format('woff2'),
|
||||
local('Roboto Medium'), local('Roboto-Medium');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url('./files/roboto-latin-700-normal.woff2') format('woff2'),
|
||||
local('Roboto Bold'), local('Roboto-Bold');
|
||||
}
|
Before Width: | Height: | Size: 493 B After Width: | Height: | Size: 493 B |
@ -0,0 +1,91 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extensionName__",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"version": "0.1.0",
|
||||
"author": "Armin Sebastian",
|
||||
"homepage_url": "https://github.com/dessant/buster",
|
||||
"default_locale": "en",
|
||||
|
||||
"minimum_chrome_version": "92.0",
|
||||
|
||||
"permissions": [
|
||||
"storage",
|
||||
"notifications",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"webNavigation",
|
||||
"nativeMessaging",
|
||||
"<all_urls>"
|
||||
],
|
||||
|
||||
"content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src *; object-src 'none'; frame-ancestors http://127.0.0.1:*;",
|
||||
|
||||
"icons": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
},
|
||||
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
}
|
||||
},
|
||||
|
||||
"options_ui": {
|
||||
"page": "src/options/index.html",
|
||||
"chrome_style": false,
|
||||
"open_in_tab": true
|
||||
},
|
||||
|
||||
"background": {
|
||||
"page": "src/background/index.html"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://google.com/recaptcha/api2/bframe*",
|
||||
"https://www.google.com/recaptcha/api2/bframe*",
|
||||
"https://google.com/recaptcha/enterprise/bframe*",
|
||||
"https://www.google.com/recaptcha/enterprise/bframe*",
|
||||
"https://recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://recaptcha.net/recaptcha/enterprise/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/enterprise/bframe*"
|
||||
],
|
||||
"all_frames": true,
|
||||
"run_at": "document_idle",
|
||||
"css": ["src/solve/style.css"],
|
||||
"js": ["src/solve/script.js"]
|
||||
},
|
||||
{
|
||||
"matches": ["http://127.0.0.1/buster/setup?session=*"],
|
||||
"run_at": "document_idle",
|
||||
"js": ["src/scripts/init-setup.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"web_accessible_resources": [
|
||||
"src/setup/index.html",
|
||||
"src/scripts/reset.js",
|
||||
"src/solve/solver-button.css"
|
||||
],
|
||||
|
||||
"incognito": "split"
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extensionName__",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"version": "0.1.0",
|
||||
"author": "Armin Sebastian",
|
||||
"homepage_url": "https://github.com/dessant/buster",
|
||||
"default_locale": "en",
|
||||
|
||||
"minimum_chrome_version": "92.0",
|
||||
|
||||
"permissions": [
|
||||
"storage",
|
||||
"notifications",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"webNavigation",
|
||||
"nativeMessaging",
|
||||
"<all_urls>"
|
||||
],
|
||||
|
||||
"content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src *; object-src 'none'; frame-ancestors http://127.0.0.1:*;",
|
||||
|
||||
"icons": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
},
|
||||
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
}
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://google.com/recaptcha/api2/bframe*",
|
||||
"https://www.google.com/recaptcha/api2/bframe*",
|
||||
"https://google.com/recaptcha/enterprise/bframe*",
|
||||
"https://www.google.com/recaptcha/enterprise/bframe*",
|
||||
"https://recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://recaptcha.net/recaptcha/enterprise/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/enterprise/bframe*"
|
||||
],
|
||||
"all_frames": true,
|
||||
"run_at": "document_idle",
|
||||
"css": ["src/solve/style.css"],
|
||||
"js": ["src/solve/script.js"]
|
||||
},
|
||||
{
|
||||
"matches": ["http://127.0.0.1/buster/setup?session=*"],
|
||||
"run_at": "document_idle",
|
||||
"js": ["src/scripts/init-setup.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"options_ui": {
|
||||
"page": "src/options/index.html",
|
||||
"chrome_style": false,
|
||||
"open_in_tab": true
|
||||
},
|
||||
|
||||
"background": {
|
||||
"page": "src/background/index.html"
|
||||
},
|
||||
|
||||
"web_accessible_resources": [
|
||||
"src/setup/index.html",
|
||||
"src/scripts/reset.js",
|
||||
"src/solve/solver-button.css"
|
||||
],
|
||||
|
||||
"incognito": "split"
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extensionName__",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"version": "0.1.0",
|
||||
"author": "Armin Sebastian",
|
||||
"homepage_url": "https://github.com/dessant/buster",
|
||||
"default_locale": "en",
|
||||
|
||||
"minimum_opera_version": "78.0",
|
||||
|
||||
"permissions": [
|
||||
"storage",
|
||||
"notifications",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"webNavigation",
|
||||
"nativeMessaging",
|
||||
"<all_urls>"
|
||||
],
|
||||
|
||||
"content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src *; object-src 'none'; frame-ancestors http://127.0.0.1:*;",
|
||||
|
||||
"icons": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
},
|
||||
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"16": "src/assets/icons/app/icon-16.png",
|
||||
"19": "src/assets/icons/app/icon-19.png",
|
||||
"24": "src/assets/icons/app/icon-24.png",
|
||||
"32": "src/assets/icons/app/icon-32.png",
|
||||
"38": "src/assets/icons/app/icon-38.png",
|
||||
"48": "src/assets/icons/app/icon-48.png",
|
||||
"64": "src/assets/icons/app/icon-64.png",
|
||||
"96": "src/assets/icons/app/icon-96.png",
|
||||
"128": "src/assets/icons/app/icon-128.png"
|
||||
}
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://google.com/recaptcha/api2/bframe*",
|
||||
"https://www.google.com/recaptcha/api2/bframe*",
|
||||
"https://google.com/recaptcha/enterprise/bframe*",
|
||||
"https://www.google.com/recaptcha/enterprise/bframe*",
|
||||
"https://recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/api2/bframe*",
|
||||
"https://recaptcha.net/recaptcha/enterprise/bframe*",
|
||||
"https://www.recaptcha.net/recaptcha/enterprise/bframe*"
|
||||
],
|
||||
"all_frames": true,
|
||||
"run_at": "document_idle",
|
||||
"css": ["src/solve/style.css"],
|
||||
"js": ["src/solve/script.js"]
|
||||
},
|
||||
{
|
||||
"matches": ["http://127.0.0.1/buster/setup?session=*"],
|
||||
"run_at": "document_idle",
|
||||
"js": ["src/scripts/init-setup.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"options_ui": {
|
||||
"page": "src/options/index.html",
|
||||
"chrome_style": false,
|
||||
"open_in_tab": true
|
||||
},
|
||||
|
||||
"background": {
|
||||
"page": "src/background/index.html"
|
||||
},
|
||||
|
||||
"web_accessible_resources": [
|
||||
"src/setup/index.html",
|
||||
"src/scripts/reset.js",
|
||||
"src/solve/solver-button.css"
|
||||
],
|
||||
|
||||
"incognito": "split"
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"presets": ["@babel/env"],
|
||||
"env": {
|
||||
"production": {
|
||||
"presets": [["minify", {"deadcode": false}]]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
function initReset(challengeUrl) {
|
||||
const script = document.createElement('script');
|
||||
script.onload = function (ev) {
|
||||
ev.target.remove();
|
||||
document.dispatchEvent(
|
||||
new CustomEvent('___resetCaptcha', {detail: challengeUrl})
|
||||
);
|
||||
};
|
||||
script.src = chrome.runtime.getURL('/src/content/reset.js');
|
||||
document.documentElement.appendChild(script);
|
||||
}
|
||||
|
||||
function addListener() {
|
||||
const onMessage = function (request) {
|
||||
if (request.id === 'resetCaptcha') {
|
||||
removeCallbacks();
|
||||
initReset(request.challengeUrl);
|
||||
}
|
||||
};
|
||||
|
||||
const removeCallbacks = function () {
|
||||
window.clearTimeout(timeoutId);
|
||||
chrome.runtime.onMessage.removeListener(onMessage);
|
||||
};
|
||||
const timeoutId = window.setTimeout(removeCallbacks, 10000); // 10 seconds
|
||||
|
||||
chrome.runtime.onMessage.addListener(onMessage);
|
||||
}
|
@ -1,8 +1,16 @@
|
||||
import Vue from 'vue';
|
||||
import {createApp} from 'vue';
|
||||
|
||||
import {configApp} from 'utils/app';
|
||||
import {configVuetify} from 'utils/vuetify';
|
||||
import App from './App';
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
render: h => h(App)
|
||||
});
|
||||
async function init() {
|
||||
const app = createApp(App);
|
||||
|
||||
await configApp(app);
|
||||
await configVuetify(app);
|
||||
|
||||
app.mount('body');
|
||||
}
|
||||
|
||||
init();
|
||||
|
@ -1,23 +0,0 @@
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto'), local('Roboto-Regular'),
|
||||
url('./files/roboto-latin-400-normal.woff2') format('woff2');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'), local('Roboto-Medium'),
|
||||
url('./files/roboto-latin-500-normal.woff2') format('woff2');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'), local('Roboto-Bold'),
|
||||
url('./files/roboto-latin-700-normal.woff2') format('woff2');
|
||||
}
|
@ -1,17 +1,18 @@
|
||||
import Vue from 'vue';
|
||||
import {createApp} from 'vue';
|
||||
|
||||
import {configApp, loadFonts} from 'utils/app';
|
||||
import {configVuetify} from 'utils/vuetify';
|
||||
import App from './App';
|
||||
|
||||
async function init() {
|
||||
try {
|
||||
await document.fonts.load('400 14px Roboto');
|
||||
await document.fonts.load('500 14px Roboto');
|
||||
} catch (err) {}
|
||||
await loadFonts(['400 14px Roboto', '500 14px Roboto']);
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
render: h => h(App)
|
||||
});
|
||||
const app = createApp(App);
|
||||
|
||||
await configApp(app);
|
||||
await configVuetify(app);
|
||||
|
||||
app.mount('body');
|
||||
}
|
||||
|
||||
init();
|
||||
|
@ -1,5 +1,5 @@
|
||||
function setup() {
|
||||
const url = new URL(chrome.runtime.getURL('/src/setup/index.html'));
|
||||
const url = new URL(browser.runtime.getURL('/src/setup/index.html'));
|
||||
url.searchParams.set(
|
||||
'session',
|
||||
new URL(window.location.href).searchParams.get('session')
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"revisions": {
|
||||
"local": [
|
||||
"UoT3kGyBH",
|
||||
"ONiJBs00o",
|
||||
"UidMDYaYA",
|
||||
"nOedd0Txqd",
|
||||
"ZtLMLoh1ag",
|
||||
"t335iRDhZ8",
|
||||
"X3djS8vZC",
|
||||
"DlgF14Chrh",
|
||||
"Lj3MYlSr4L",
|
||||
"20221211221603_add_theme_support"
|
||||
],
|
||||
"sync": []
|
||||
}
|
||||
}
|
@ -1,11 +1,44 @@
|
||||
import {migrate} from 'storage-versions';
|
||||
import {migrate} from 'wesa';
|
||||
|
||||
import {getSupportedArea} from './storage';
|
||||
import {isStorageArea} from './storage';
|
||||
|
||||
async function initStorage({area = 'local'} = {}) {
|
||||
const context = {
|
||||
getAvailableRevisions: async ({area} = {}) =>
|
||||
(
|
||||
await import(/* webpackMode: "eager" */ 'storage/config.json', {
|
||||
assert: {type: 'json'}
|
||||
})
|
||||
).revisions[area],
|
||||
getCurrentRevision: async ({area} = {}) =>
|
||||
(await browser.storage[area].get('storageVersion')).storageVersion,
|
||||
getRevision: async ({area, revision} = {}) =>
|
||||
import(
|
||||
/* webpackMode: "eager" */ `storage/revisions/${area}/${revision}.js`
|
||||
)
|
||||
};
|
||||
|
||||
async function initStorage(area = 'local') {
|
||||
area = await getSupportedArea(area);
|
||||
const context = require.context('storage/versions', true, /\.(?:js|json)$/i);
|
||||
return migrate(context, {area});
|
||||
}
|
||||
|
||||
export {initStorage};
|
||||
async function migrateLegacyStorage() {
|
||||
if (await isStorageArea({area: 'sync'})) {
|
||||
const {storageVersion: syncVersion} = await browser.storage.sync.get(
|
||||
'storageVersion'
|
||||
);
|
||||
if (syncVersion && syncVersion.length < 14) {
|
||||
const {storageVersion: localVersion} = await browser.storage.local.get(
|
||||
'storageVersion'
|
||||
);
|
||||
|
||||
if (!localVersion || localVersion.length < 14) {
|
||||
const syncData = await browser.storage.sync.get(null);
|
||||
await browser.storage.local.clear();
|
||||
await browser.storage.local.set(syncData);
|
||||
await browser.storage.sync.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export {initStorage, migrateLegacyStorage};
|
||||
|
@ -0,0 +1,22 @@
|
||||
import {getDayPrecisionEpoch} from 'utils/common';
|
||||
|
||||
const message = 'Add theme support';
|
||||
|
||||
const revision = '20221211221603_add_theme_support';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
appTheme: 'auto', // auto, light, dark
|
||||
showContribPage: true,
|
||||
contribPageLastOpen: 0,
|
||||
contribPageLastAutoOpen: 0
|
||||
};
|
||||
|
||||
const {installTime} = await browser.storage.local.get('installTime');
|
||||
changes.installTime = getDayPrecisionEpoch(installTime);
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,16 @@
|
||||
const message = 'Revision description';
|
||||
|
||||
const revision = 'DlgF14Chrh';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {};
|
||||
const {speechService} = await browser.storage.local.get('speechService');
|
||||
if (speechService === 'googleSpeechApiDemo') {
|
||||
changes.speechService = 'witSpeechApiDemo';
|
||||
}
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,14 @@
|
||||
const message = 'Add navigateWithKeyboard';
|
||||
|
||||
const revision = 'Lj3MYlSr4L';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
navigateWithKeyboard: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,15 @@
|
||||
const message = 'Add IBM Watson Speech to Text API';
|
||||
|
||||
const revision = 'ONiJBs00o';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
ibmSpeechApiLoc: 'frankfurt', // 'frankfurt', 'dallas', 'washington', 'sydney', 'tokyo'
|
||||
ibmSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,15 @@
|
||||
const message = 'Add Microsoft Azure Speech to Text API';
|
||||
|
||||
const revision = 'UidMDYaYA';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
microsoftSpeechApiLoc: 'eastUs', // 'eastUs', 'eastUs2', 'westUs', 'westUs2', 'eastAsia', 'southeastAsia', 'westEu', 'northEu'
|
||||
microsoftSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,14 @@
|
||||
const message = 'Add autoUpdateClientApp option';
|
||||
|
||||
const revision = 'X3djS8vZC';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
autoUpdateClientApp: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,14 @@
|
||||
const message = 'Add loadEnglishChallenge option';
|
||||
|
||||
const revision = 'ZtLMLoh1ag';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
loadEnglishChallenge: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,15 @@
|
||||
const message = 'Add Wit Speech API and tryEnglishSpeechModel option';
|
||||
|
||||
const revision = 'nOedd0Txqd';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
witSpeechApiKeys: {},
|
||||
tryEnglishSpeechModel: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -0,0 +1,14 @@
|
||||
const message = 'Add simulateUserInput option';
|
||||
|
||||
const revision = 't335iRDhZ8';
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
simulateUserInput: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return browser.storage.local.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade};
|
@ -1,38 +1,73 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
let syncArea;
|
||||
async function getSupportedArea(requestedArea) {
|
||||
if (typeof syncArea === 'undefined') {
|
||||
try {
|
||||
await browser.storage.sync.get('');
|
||||
syncArea = true;
|
||||
} catch (e) {
|
||||
syncArea = false;
|
||||
import {storageRevisions} from 'utils/config';
|
||||
|
||||
async function isStorageArea({area = 'local'} = {}) {
|
||||
try {
|
||||
await browser.storage[area].get('');
|
||||
return true;
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const storageReady = {};
|
||||
async function isStorageReady({area = 'local'} = {}) {
|
||||
if (storageReady[area]) {
|
||||
return true;
|
||||
} else {
|
||||
const {storageVersion} = await browser.storage[area].get('storageVersion');
|
||||
if (storageVersion && storageVersion === storageRevisions[area]) {
|
||||
storageReady[area] = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return syncArea ? requestedArea : 'local';
|
||||
return false;
|
||||
}
|
||||
|
||||
async function ensureStorageReady({area = 'local'} = {}) {
|
||||
if (!storageReady[area]) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let stop;
|
||||
|
||||
const checkStorage = async function () {
|
||||
if (await isStorageReady({area})) {
|
||||
window.clearTimeout(timeoutId);
|
||||
resolve();
|
||||
} else if (stop) {
|
||||
reject(new Error(`Storage (${area}) is not ready`));
|
||||
} else {
|
||||
window.setTimeout(checkStorage, 30);
|
||||
}
|
||||
};
|
||||
|
||||
const timeoutId = window.setTimeout(function () {
|
||||
stop = true;
|
||||
}, 60000); // 1 minute
|
||||
|
||||
checkStorage();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function get(keys = null, area = 'local') {
|
||||
area = await getSupportedArea(area);
|
||||
async function get(keys = null, {area = 'local'} = {}) {
|
||||
await ensureStorageReady({area});
|
||||
return browser.storage[area].get(keys);
|
||||
}
|
||||
|
||||
async function set(obj, area = 'local') {
|
||||
area = await getSupportedArea(area);
|
||||
async function set(obj, {area = 'local'} = {}) {
|
||||
await ensureStorageReady({area});
|
||||
return browser.storage[area].set(obj);
|
||||
}
|
||||
|
||||
async function remove(keys, area = 'local') {
|
||||
area = await getSupportedArea(area);
|
||||
async function remove(keys, {area = 'local'} = {}) {
|
||||
await ensureStorageReady({area});
|
||||
return browser.storage[area].remove(keys);
|
||||
}
|
||||
|
||||
async function clear(area = 'local') {
|
||||
area = await getSupportedArea(area);
|
||||
async function clear({area = 'local'} = {}) {
|
||||
await ensureStorageReady({area});
|
||||
return browser.storage[area].clear();
|
||||
}
|
||||
|
||||
export default {get, set, remove, clear};
|
||||
export {getSupportedArea};
|
||||
export {isStorageArea, isStorageReady, ensureStorageReady};
|
||||
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Revision description';
|
||||
|
||||
const revision = 'DlgF14Chrh';
|
||||
const downRevision = 'X3djS8vZC';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {};
|
||||
const {speechService} = await storage.get('speechService');
|
||||
if (speechService === 'googleSpeechApiDemo') {
|
||||
changes.speechService = 'witSpeechApiDemo';
|
||||
}
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add navigateWithKeyboard';
|
||||
|
||||
const revision = 'Lj3MYlSr4L';
|
||||
const downRevision = 'DlgF14Chrh';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
navigateWithKeyboard: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove('navigateWithKeyboard');
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add IBM Watson Speech to Text API';
|
||||
|
||||
const revision = 'ONiJBs00o';
|
||||
const downRevision = 'UoT3kGyBH';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
ibmSpeechApiLoc: 'frankfurt', // 'frankfurt', 'dallas', 'washington', 'sydney', 'tokyo'
|
||||
ibmSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['ibmSpeechApiLoc', 'ibmSpeechApiKey']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add Microsoft Azure Speech to Text API';
|
||||
|
||||
const revision = 'UidMDYaYA';
|
||||
const downRevision = 'ONiJBs00o';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
microsoftSpeechApiLoc: 'eastUs', // 'eastUs', 'eastUs2', 'westUs', 'westUs2', 'eastAsia', 'southeastAsia', 'westEu', 'northEu'
|
||||
microsoftSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['microsoftSpeechApiLoc', 'microsoftSpeechApiKey']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,26 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Initial version';
|
||||
|
||||
const revision = 'UoT3kGyBH';
|
||||
const downRevision = null;
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
speechService: 'googleSpeechApiDemo', // 'googleSpeechApiDemo', 'witSpeechApiDemo', 'googleSpeechApi', 'witSpeechApi', 'ibmSpeechApi', 'microsoftSpeechApi'
|
||||
googleSpeechApiKey: '',
|
||||
installTime: new Date().getTime(),
|
||||
useCount: 0
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
return storage.clear();
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add autoUpdateClientApp option';
|
||||
|
||||
const revision = 'X3djS8vZC';
|
||||
const downRevision = 't335iRDhZ8';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
autoUpdateClientApp: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['autoUpdateClientApp']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add loadEnglishChallenge option';
|
||||
|
||||
const revision = 'ZtLMLoh1ag';
|
||||
const downRevision = 'nOedd0Txqd';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
loadEnglishChallenge: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['loadEnglishChallenge']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add Wit Speech API and tryEnglishSpeechModel option';
|
||||
|
||||
const revision = 'nOedd0Txqd';
|
||||
const downRevision = 'UidMDYaYA';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
witSpeechApiKeys: {},
|
||||
tryEnglishSpeechModel: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['witSpeechApiKeys', 'tryEnglishSpeechModel']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add simulateUserInput option';
|
||||
|
||||
const revision = 't335iRDhZ8';
|
||||
const downRevision = 'ZtLMLoh1ag';
|
||||
|
||||
const storage = browser.storage.local;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
simulateUserInput: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['simulateUserInput']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"versions": [
|
||||
"UoT3kGyBH",
|
||||
"ONiJBs00o",
|
||||
"UidMDYaYA",
|
||||
"nOedd0Txqd",
|
||||
"ZtLMLoh1ag",
|
||||
"t335iRDhZ8",
|
||||
"X3djS8vZC",
|
||||
"DlgF14Chrh",
|
||||
"Lj3MYlSr4L"
|
||||
]
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Revision description';
|
||||
|
||||
const revision = 'DlgF14Chrh';
|
||||
const downRevision = 'X3djS8vZC';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {};
|
||||
const {speechService} = await storage.get('speechService');
|
||||
if (speechService === 'googleSpeechApiDemo') {
|
||||
changes.speechService = 'witSpeechApiDemo';
|
||||
}
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add navigateWithKeyboard';
|
||||
|
||||
const revision = 'Lj3MYlSr4L';
|
||||
const downRevision = 'DlgF14Chrh';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
navigateWithKeyboard: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove('navigateWithKeyboard');
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add IBM Watson Speech to Text API';
|
||||
|
||||
const revision = 'ONiJBs00o';
|
||||
const downRevision = 'UoT3kGyBH';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
ibmSpeechApiLoc: 'frankfurt', // 'frankfurt', 'dallas', 'washington', 'sydney', 'tokyo'
|
||||
ibmSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['ibmSpeechApiLoc', 'ibmSpeechApiKey']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add Microsoft Azure Speech to Text API';
|
||||
|
||||
const revision = 'UidMDYaYA';
|
||||
const downRevision = 'ONiJBs00o';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
microsoftSpeechApiLoc: 'eastUs', // 'eastUs', 'eastUs2', 'westUs', 'westUs2', 'eastAsia', 'southeastAsia', 'westEu', 'northEu'
|
||||
microsoftSpeechApiKey: ''
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['microsoftSpeechApiLoc', 'microsoftSpeechApiKey']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add autoUpdateClientApp option';
|
||||
|
||||
const revision = 'X3djS8vZC';
|
||||
const downRevision = 't335iRDhZ8';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
autoUpdateClientApp: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['autoUpdateClientApp']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add loadEnglishChallenge option';
|
||||
|
||||
const revision = 'ZtLMLoh1ag';
|
||||
const downRevision = 'nOedd0Txqd';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
loadEnglishChallenge: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['loadEnglishChallenge']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,28 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add Wit Speech API and tryEnglishSpeechModel option';
|
||||
|
||||
const revision = 'nOedd0Txqd';
|
||||
const downRevision = 'UidMDYaYA';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
witSpeechApiKeys: {},
|
||||
tryEnglishSpeechModel: true
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['witSpeechApiKeys', 'tryEnglishSpeechModel']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,27 +0,0 @@
|
||||
import browser from 'webextension-polyfill';
|
||||
|
||||
const message = 'Add simulateUserInput option';
|
||||
|
||||
const revision = 't335iRDhZ8';
|
||||
const downRevision = 'ZtLMLoh1ag';
|
||||
|
||||
const storage = browser.storage.sync;
|
||||
|
||||
async function upgrade() {
|
||||
const changes = {
|
||||
simulateUserInput: false
|
||||
};
|
||||
|
||||
changes.storageVersion = revision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
async function downgrade() {
|
||||
const changes = {};
|
||||
await storage.remove(['simulateUserInput']);
|
||||
|
||||
changes.storageVersion = downRevision;
|
||||
return storage.set(changes);
|
||||
}
|
||||
|
||||
export {message, revision, upgrade, downgrade};
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"versions": [
|
||||
"UoT3kGyBH",
|
||||
"ONiJBs00o",
|
||||
"UidMDYaYA",
|
||||
"nOedd0Txqd",
|
||||
"ZtLMLoh1ag",
|
||||
"t335iRDhZ8",
|
||||
"X3djS8vZC",
|
||||
"DlgF14Chrh",
|
||||
"Lj3MYlSr4L"
|
||||
]
|
||||
}
|
@ -1,5 +1,9 @@
|
||||
const targetEnv = process.env.TARGET_ENV;
|
||||
|
||||
const enableContributions = process.env.ENABLE_CONTRIBUTIONS === 'true';
|
||||
|
||||
const storageRevisions = {local: process.env.STORAGE_REVISION_LOCAL};
|
||||
|
||||
const clientAppVersion = '0.3.0';
|
||||
|
||||
export {targetEnv, clientAppVersion};
|
||||
export {targetEnv, enableContributions, storageRevisions, clientAppVersion};
|
||||
|
@ -0,0 +1,64 @@
|
||||
import {createVuetify} from 'vuetify';
|
||||
|
||||
import storage from 'storage/storage';
|
||||
import {getDarkColorSchemeQuery} from 'utils/common';
|
||||
|
||||
const LightTheme = {
|
||||
dark: false,
|
||||
colors: {
|
||||
background: '#FFFFFF',
|
||||
surface: '#FFFFFF',
|
||||
primary: '#6750A4',
|
||||
secondary: '#625B71'
|
||||
}
|
||||
};
|
||||
|
||||
const DarkTheme = {
|
||||
dark: true,
|
||||
colors: {
|
||||
background: '#1C1B1F',
|
||||
surface: '#1C1B1F',
|
||||
primary: '#D0BCFF',
|
||||
secondary: '#CCC2DC'
|
||||
}
|
||||
};
|
||||
|
||||
async function configTheme(vuetify) {
|
||||
async function setTheme(theme) {
|
||||
if (!theme) {
|
||||
({appTheme: theme} = await storage.get('appTheme'));
|
||||
}
|
||||
|
||||
if (theme === 'auto') {
|
||||
theme = getDarkColorSchemeQuery().matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
vuetify.theme.global.name.value = theme;
|
||||
}
|
||||
|
||||
getDarkColorSchemeQuery().addEventListener('change', function () {
|
||||
setTheme();
|
||||
});
|
||||
|
||||
browser.storage.onChanged.addListener(function (changes, area) {
|
||||
if (area === 'local' && changes.appTheme) {
|
||||
setTheme(changes.appTheme.newValue);
|
||||
}
|
||||
});
|
||||
|
||||
await setTheme();
|
||||
}
|
||||
|
||||
async function configVuetify(app) {
|
||||
const vuetify = createVuetify({
|
||||
theme: {
|
||||
themes: {light: LightTheme, dark: DarkTheme}
|
||||
}
|
||||
});
|
||||
|
||||
await configTheme(vuetify);
|
||||
|
||||
app.use(vuetify);
|
||||
}
|
||||
|
||||
export {configTheme, configVuetify};
|
Loading…
Reference in New Issue