diff --git a/.eslintrc b/.eslintrc
index cd1da2b6..57cedd6d 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -10,7 +10,7 @@
"standard"
],
"globals": {
- "chrome": false,
+ "browser": false,
},
"rules": {
"block-scoped-var": "error",
diff --git a/src/background/background.js b/src/background/background.js
index 654f71e8..624b5c85 100644
--- a/src/background/background.js
+++ b/src/background/background.js
@@ -118,9 +118,9 @@ function main() {
// NOTE: "This event is not triggered for temporarily installed add-ons."
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onInstalled#Compatibility_notes
- if (chrome.runtime.onInstalled) {
+ if (browser.runtime.onInstalled) {
// NOTE: the onInstalled listener can't be added asynchronously
- chrome.runtime.onInstalled.addListener(onExtensionInstalledHandler);
+ browser.runtime.onInstalled.addListener(onExtensionInstalledHandler);
} else {
onExtensionInstalledHandler();
}
@@ -152,27 +152,27 @@ function main() {
}());
(function addChromeListeners() {
- chrome.tabs.onRemoved.addListener(() => talkieBackground.onTabRemovedHandler());
- chrome.tabs.onUpdated.addListener(() => talkieBackground.onTabUpdatedHandler());
+ browser.tabs.onRemoved.addListener(() => talkieBackground.onTabRemovedHandler());
+ browser.tabs.onUpdated.addListener(() => talkieBackground.onTabUpdatedHandler());
// NOTE: not supported in Firefox (2017-03-15).
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onSuspend#Browser_compatibility
- if (chrome.runtime.onSuspend) {
- chrome.runtime.onSuspend.addListener(() => talkieBackground.onExtensionSuspendHandler());
+ if (browser.runtime.onSuspend) {
+ browser.runtime.onSuspend.addListener(() => talkieBackground.onExtensionSuspendHandler());
}
// NOTE: used when the popup has been disabled.
- chrome.browserAction.onClicked.addListener(() => talkieBackground.startStopSpeakSelectionOnPage());
+ browser.browserAction.onClicked.addListener(() => talkieBackground.startStopSpeakSelectionOnPage());
- chrome.contextMenus.onClicked.addListener((info) => contextMenuManager.contextMenuClickAction(info));
+ browser.contextMenus.onClicked.addListener((info) => contextMenuManager.contextMenuClickAction(info));
// NOTE: might throw an unexpected error in Firefox due to command configuration in manifest.json.
// Does not seem to happen in Chrome.
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/commands/onCommand
try {
- chrome.commands.onCommand.addListener((command) => shortcutKeyManager.handler(command));
+ browser.commands.onCommand.addListener((command) => shortcutKeyManager.handler(command));
} catch (error) {
- logError("chrome.commands.onCommand.addListener(...)", error);
+ logError("browser.commands.onCommand.addListener(...)", error);
}
}());
diff --git a/src/background/button-popup-manager.js b/src/background/button-popup-manager.js
index cf414085..8b522e54 100644
--- a/src/background/button-popup-manager.js
+++ b/src/background/button-popup-manager.js
@@ -20,8 +20,8 @@ along with Talkie. If not, see .
export default class ButtonPopupManager {
constructor() {
- this.buttonDefaultTitle = chrome.i18n.getMessage("buttonDefaultTitle");
- this.buttonStopTitle = chrome.i18n.getMessage("buttonStopTitle");
+ this.buttonDefaultTitle = browser.i18n.getMessage("buttonDefaultTitle");
+ this.buttonStopTitle = browser.i18n.getMessage("buttonStopTitle");
}
disablePopup() {
@@ -29,13 +29,13 @@ export default class ButtonPopupManager {
popup: "",
};
- chrome.browserAction.setPopup(disablePopupOptions);
+ browser.browserAction.setPopup(disablePopupOptions);
const disableIconTitleOptions = {
title: this.buttonStopTitle,
};
- chrome.browserAction.setTitle(disableIconTitleOptions);
+ browser.browserAction.setTitle(disableIconTitleOptions);
};
enablePopup() {
@@ -43,12 +43,12 @@ export default class ButtonPopupManager {
popup: "src/popup/popup.html",
};
- chrome.browserAction.setPopup(enablePopupOptions);
+ browser.browserAction.setPopup(enablePopupOptions);
const enableIconTitleOptions = {
title: this.buttonDefaultTitle,
};
- chrome.browserAction.setTitle(enableIconTitleOptions);
+ browser.browserAction.setTitle(enableIconTitleOptions);
};
}
diff --git a/src/background/context-menu-manager.js b/src/background/context-menu-manager.js
index 8cbe1e1e..f5e35b5c 100644
--- a/src/background/context-menu-manager.js
+++ b/src/background/context-menu-manager.js
@@ -33,35 +33,35 @@ export default class ContextMenuManager {
this.contextMenuOptionsCollection = {
selectionContextMenuStartStop: {
id: "talkie-context-menu-start-stop",
- title: chrome.i18n.getMessage("contextMenuStartStopText"),
+ title: browser.i18n.getMessage("contextMenuStartStopText"),
contexts: [
"selection",
],
},
buttonContextMenuStartStopDescription: {
id: "start-stop",
- title: chrome.i18n.getMessage("commandStartStopDescription"),
+ title: browser.i18n.getMessage("commandStartStopDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteMainDescription: {
id: "open-website-main",
- title: chrome.i18n.getMessage("commandOpenWebsiteMainDescription"),
+ title: browser.i18n.getMessage("commandOpenWebsiteMainDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteChromeWebStoreDescription: {
id: "open-website-chromewebstore",
- title: chrome.i18n.getMessage("commandOpenWebsiteChromeWebStoreDescription"),
+ title: browser.i18n.getMessage("commandOpenWebsiteChromeWebStoreDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteDonateDescription: {
id: "open-website-donate",
- title: chrome.i18n.getMessage("commandOpenWebsiteDonateDescription"),
+ title: browser.i18n.getMessage("commandOpenWebsiteDonateDescription"),
contexts: [
"browser_action",
],
@@ -75,11 +75,11 @@ export default class ContextMenuManager {
try {
log("Start", "Creating context menu", contextMenuOptions);
- chrome.contextMenus.create(
+ browser.contextMenus.create(
contextMenuOptions,
() => {
- if (chrome.runtime.lastError) {
- return reject(chrome.runtime.lastError);
+ if (browser.runtime.lastError) {
+ return reject(browser.runtime.lastError);
}
log("Done", "Creating context menu", contextMenuOptions);
diff --git a/src/background/icon-manager.js b/src/background/icon-manager.js
index 35378ba0..f4e4daac 100644
--- a/src/background/icon-manager.js
+++ b/src/background/icon-manager.js
@@ -52,11 +52,11 @@ export default class IconManager {
path: paths,
};
- chrome.browserAction.setIcon(
+ browser.browserAction.setIcon(
details,
() => {
- if (chrome.runtime.lastError) {
- return reject(chrome.runtime.lastError);
+ if (browser.runtime.lastError) {
+ return reject(browser.runtime.lastError);
}
log("Done", "Changing icon to", name);
diff --git a/src/background/language.js b/src/background/language.js
index c6a84f61..c0e94589 100644
--- a/src/background/language.js
+++ b/src/background/language.js
@@ -41,26 +41,26 @@ import {
} from "../shared/configuration";
const noTextSelectedMessage = {
- text: chrome.i18n.getMessage("noTextSelectedMessage"),
+ text: browser.i18n.getMessage("noTextSelectedMessage"),
effectiveLanguage: messagesLocale,
};
const noVoiceForLanguageDetectedMessage = {
- text: chrome.i18n.getMessage("noVoiceForLanguageDetectedMessage"),
- effectiveLanguage: chrome.i18n.getMessage("noVoiceForLanguageDetectedMessageLanguage"),
+ text: browser.i18n.getMessage("noVoiceForLanguageDetectedMessage"),
+ effectiveLanguage: browser.i18n.getMessage("noVoiceForLanguageDetectedMessageLanguage"),
};
export const detectPageLanguage = () => new Promise(
(resolve, reject) => {
try {
- chrome.tabs.detectLanguage((language) => {
- // https://developer.chrome.com/extensions/tabs#method-detectLanguage
- if (chrome.runtime.lastError) {
+ browser.tabs.detectLanguage((language) => {
+ // https://developer.browser.com/extensions/tabs#method-detectLanguage
+ if (browser.runtime.lastError) {
// https://github.com/joelpurra/talkie/issues/3
// NOTE: It seems the Vivaldi browser doesn't (yet/always) support detectLanguage.
// As this is not critical, just log the error and resolve with null.
- // return reject(chrome.runtime.lastError);
- logError("detectPageLanguage", chrome.runtime.lastError);
+ // return reject(browser.runtime.lastError);
+ logError("detectPageLanguage", browser.runtime.lastError);
return resolve(null);
}
@@ -83,17 +83,17 @@ export const detectPageLanguage = () => new Promise(
const detectTextLanguage = (text) => new Promise(
(resolve, reject) => {
try {
- if (!("detectLanguage" in chrome.i18n)) {
+ if (!("detectLanguage" in browser.i18n)) {
// NOTE: text-based language detection is only used as a fallback.
log("detectTextLanguage", "Browser does not support detecting text language");
return resolve(null);
}
- chrome.i18n.detectLanguage(text, (result) => {
- // https://developer.chrome.com/extensions/i18n#method-detectLanguage
- if (chrome.runtime.lastError) {
- return reject(chrome.runtime.lastError);
+ browser.i18n.detectLanguage(text, (result) => {
+ // https://developer.browser.com/extensions/i18n#method-detectLanguage
+ if (browser.runtime.lastError) {
+ return reject(browser.runtime.lastError);
}
// The language fallback value is "und", so treat it as no language.
diff --git a/src/background/suspension-manager.js b/src/background/suspension-manager.js
index ff6d488c..28f4728c 100644
--- a/src/background/suspension-manager.js
+++ b/src/background/suspension-manager.js
@@ -42,7 +42,7 @@ export default class SuspensionManager {
name: this.preventSuspensionPortName,
};
- this.executeConnectFromContentCode = `var talkiePreventSuspensionPort = chrome.runtime.connect(${JSON.stringify(this.preventSuspensionConnectOptions)}); var preventExtensionSuspendConnectFromContentResult = { name: talkiePreventSuspensionPort.name }; preventExtensionSuspendConnectFromContentResult`;
+ this.executeConnectFromContentCode = `var talkiePreventSuspensionPort = browser.runtime.connect(${JSON.stringify(this.preventSuspensionConnectOptions)}); var preventExtensionSuspendConnectFromContentResult = { name: talkiePreventSuspensionPort.name }; preventExtensionSuspendConnectFromContentResult`;
}
executeConnectFromContent() {
@@ -74,7 +74,7 @@ export default class SuspensionManager {
return;
}
- // NOTE: the chrome.runtime.onConnect event is triggered once per frame on the page.
+ // NOTE: the browser.runtime.onConnect event is triggered once per frame on the page.
// Save the first port, ignore the rest.
if (this.preventSuspensionProducingPort !== null) {
return;
@@ -87,7 +87,7 @@ export default class SuspensionManager {
this.preventSuspensionIntervalId = setInterval(messageProducer, 1000);
};
- chrome.runtime.onConnect.addListener(onConnectProducingHandler);
+ browser.runtime.onConnect.addListener(onConnectProducingHandler);
log("Done", "preventExtensionSuspend");
@@ -103,7 +103,7 @@ export default class SuspensionManager {
if (this.preventSuspensionProducingPort !== null) {
try {
- // https://developer.chrome.com/extensions/runtime#type-Port
+ // https://developer.browser.com/extensions/runtime#type-Port
// NOTE: should work irregardless if the port was connected or not.
this.preventSuspensionProducingPort.disconnect();
} catch (error) {
diff --git a/src/background/talkie-background.js b/src/background/talkie-background.js
index 5c6edbe7..d9df759b 100644
--- a/src/background/talkie-background.js
+++ b/src/background/talkie-background.js
@@ -46,7 +46,7 @@ export default class TalkieBackground {
this.speakingStatus = speakingStatus;
this.notAbleToSpeakTextFromThisSpecialTab = {
- text: chrome.i18n.getMessage("notAbleToSpeakTextFromThisSpecialTab"),
+ text: browser.i18n.getMessage("notAbleToSpeakTextFromThisSpecialTab"),
effectiveLanguage: messagesLocale,
};
}
@@ -155,7 +155,7 @@ export default class TalkieBackground {
return this.speakingStatus.isSpeakingTabId(tabId)
.then((isTabSpeaking) => {
// NOTE: changeInfo only has properties which have changed.
- // https://developer.chrome.com/extensions/tabs#event-onUpdated
+ // https://developer.browser.com/extensions/tabs#event-onUpdated
if (isTabSpeaking && changeInfo.url) {
return this.talkieSpeaker.stopSpeaking()
.then(() => this.speakingStatus.setTabIsDoneSpeaking(tabId));
diff --git a/src/frontend/shared-frontend.js b/src/frontend/shared-frontend.js
index ee115007..96fa794c 100644
--- a/src/frontend/shared-frontend.js
+++ b/src/frontend/shared-frontend.js
@@ -51,7 +51,7 @@ const translateWindow = () => promiseTry(
const translationId = element.getAttribute(translateAttributeName);
if (typeof translationId === "string" && translationId.length > 0) {
- const translated = chrome.i18n.getMessage(translationId);
+ const translated = browser.i18n.getMessage(translationId);
if (typeof translated === "string") {
element.textContent = translated;
@@ -96,14 +96,14 @@ const addLinkClickHandlers = () => promiseTry(
const addOptionsLinkClickHandlers = () => promiseTry(
() => {
- // https://developer.chrome.com/extensions/optionsV2#linking
+ // https://developer.browser.com/extensions/optionsV2#linking
const optionsLinks = Array.from(document.querySelectorAll("[href='" + urls.options + "']"));
optionsLinks.forEach((optionsLink) => {
optionsLink.onclick = (event) => {
event.preventDefault();
- chrome.runtime.openOptionsPage();
+ browser.runtime.openOptionsPage();
return false;
};
diff --git a/src/options/options.html b/src/options/options.html
index a26c3f7e..c912cbd6 100644
--- a/src/options/options.html
+++ b/src/options/options.html
@@ -58,13 +58,13 @@
-
-
+
-
-
+
-
-
+
-
diff --git a/src/options/options.js b/src/options/options.js
index 98dc3045..17ee64cf 100644
--- a/src/options/options.js
+++ b/src/options/options.js
@@ -146,7 +146,7 @@ const loadVoicesAndLanguages = () => promiseTry(
allLanguageOption.talkie.language = null;
allLanguageOption.talkie.voices = allVoices;
- allLanguageOption.textContent = chrome.i18n.getMessage("frontend_voicesShowAllVoices");
+ allLanguageOption.textContent = browser.i18n.getMessage("frontend_voicesShowAllVoices");
allLanguageOption.selected = true;
voicesLanguagesListElement.appendChild(allLanguageOption);
diff --git a/src/popup/popup.html b/src/popup/popup.html
index bc0e4f2a..48654543 100644
--- a/src/popup/popup.html
+++ b/src/popup/popup.html
@@ -39,10 +39,10 @@