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/
|
/.assets/
|
||||||
secrets.json
|
/secrets.json
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
artifacts/
|
/artifacts/
|
||||||
dist/
|
/dist/
|
||||||
|
|
||||||
web-ext-config.js
|
/.vscode
|
||||||
|
|
||||||
npm-debug.log
|
/web-ext-config.js
|
||||||
yarn-debug.log
|
|
||||||
yarn-error.log
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
report.json
|
/npm-debug.log
|
||||||
|
|
||||||
|
/report.json
|
||||||
|
/report.html
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
package.json
|
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) {
|
const postcssPresetEnv = require('postcss-preset-env');
|
||||||
return {
|
const cssnano = require('cssnano');
|
||||||
plugins: {
|
|
||||||
autoprefixer: {},
|
module.exports = function (api) {
|
||||||
cssnano:
|
const plugins = [postcssPresetEnv()];
|
||||||
ctx.env === 'production' ? {zindex: false, discardUnused: false} : false
|
|
||||||
|
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';
|
import App from './App';
|
||||||
|
|
||||||
new Vue({
|
async function init() {
|
||||||
el: '#app',
|
const app = createApp(App);
|
||||||
render: h => h(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';
|
import App from './App';
|
||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
try {
|
await loadFonts(['400 14px Roboto', '500 14px Roboto']);
|
||||||
await document.fonts.load('400 14px Roboto');
|
|
||||||
await document.fonts.load('500 14px Roboto');
|
|
||||||
} catch (err) {}
|
|
||||||
|
|
||||||
new Vue({
|
const app = createApp(App);
|
||||||
el: '#app',
|
|
||||||
render: h => h(App)
|
await configApp(app);
|
||||||
});
|
await configVuetify(app);
|
||||||
|
|
||||||
|
app.mount('body');
|
||||||
}
|
}
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
function setup() {
|
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(
|
url.searchParams.set(
|
||||||
'session',
|
'session',
|
||||||
new URL(window.location.href).searchParams.get('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});
|
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';
|
import {storageRevisions} from 'utils/config';
|
||||||
|
|
||||||
let syncArea;
|
async function isStorageArea({area = 'local'} = {}) {
|
||||||
async function getSupportedArea(requestedArea) {
|
|
||||||
if (typeof syncArea === 'undefined') {
|
|
||||||
try {
|
try {
|
||||||
await browser.storage.sync.get('');
|
await browser.storage[area].get('');
|
||||||
syncArea = true;
|
return true;
|
||||||
} catch (e) {
|
} catch (err) {
|
||||||
syncArea = false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return syncArea ? requestedArea : 'local';
|
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 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') {
|
async function get(keys = null, {area = 'local'} = {}) {
|
||||||
area = await getSupportedArea(area);
|
await ensureStorageReady({area});
|
||||||
return browser.storage[area].get(keys);
|
return browser.storage[area].get(keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function set(obj, area = 'local') {
|
async function set(obj, {area = 'local'} = {}) {
|
||||||
area = await getSupportedArea(area);
|
await ensureStorageReady({area});
|
||||||
return browser.storage[area].set(obj);
|
return browser.storage[area].set(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function remove(keys, area = 'local') {
|
async function remove(keys, {area = 'local'} = {}) {
|
||||||
area = await getSupportedArea(area);
|
await ensureStorageReady({area});
|
||||||
return browser.storage[area].remove(keys);
|
return browser.storage[area].remove(keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function clear(area = 'local') {
|
async function clear({area = 'local'} = {}) {
|
||||||
area = await getSupportedArea(area);
|
await ensureStorageReady({area});
|
||||||
return browser.storage[area].clear();
|
return browser.storage[area].clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {get, set, remove, 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 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';
|
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