2020-06-18 11:29:55 +00:00
|
|
|
module.exports = {
|
2021-01-03 13:38:11 +00:00
|
|
|
getI18nString,
|
|
|
|
setSyncStorage,
|
|
|
|
getSyncStorage,
|
|
|
|
reloadTab,
|
|
|
|
dictEquality,
|
|
|
|
tabQuery,
|
|
|
|
tabSendmessage,
|
|
|
|
addStorageChangeListener,
|
|
|
|
openSettingsPage,
|
|
|
|
setMessageListener,
|
|
|
|
getExtensionUrl,
|
|
|
|
camelize,
|
2020-06-18 11:29:55 +00:00
|
|
|
};
|
|
|
|
|
2020-07-02 01:41:20 +00:00
|
|
|
// List of defaults for all settings.
|
|
|
|
const DEFAULT_SETTINGS = {
|
2021-01-03 13:38:11 +00:00
|
|
|
ruffleEnable: true,
|
|
|
|
ignoreOptout: false,
|
2020-07-02 01:41:20 +00:00
|
|
|
};
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function getI18nString(key) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (chrome && chrome.i18n && chrome.i18n.getMessage) {
|
|
|
|
return chrome.i18n.getMessage(key);
|
|
|
|
} else if (browser && browser.i18n && browser.i18n.getMessage) {
|
|
|
|
return browser.i18n.getMessage(key);
|
|
|
|
} else {
|
|
|
|
console.error("Can't get i18n message: " + key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function setSyncStorage(key) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (
|
|
|
|
chrome &&
|
|
|
|
chrome.storage &&
|
|
|
|
chrome.storage.sync &&
|
|
|
|
chrome.storage.sync.set
|
|
|
|
) {
|
|
|
|
chrome.storage.sync.set(key);
|
|
|
|
} else if (
|
|
|
|
browser &&
|
|
|
|
browser.storage &&
|
|
|
|
browser.storage.sync &&
|
|
|
|
browser.storage.sync.set
|
|
|
|
) {
|
|
|
|
browser.storage.sync.set(key);
|
|
|
|
} else {
|
|
|
|
console.error("Can't set settings.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function getSyncStorage(key, callback) {
|
2020-07-02 01:41:20 +00:00
|
|
|
// Create array of keys so that we can grab the defaults, if necessary.
|
2021-01-03 13:38:11 +00:00
|
|
|
let dataType = typeof key;
|
2020-07-02 01:41:20 +00:00
|
|
|
let keys;
|
2021-01-03 13:38:11 +00:00
|
|
|
if (dataType == "string") {
|
2020-07-02 01:41:20 +00:00
|
|
|
keys = [key];
|
|
|
|
} else if (Array.isArray(key)) {
|
|
|
|
keys = key;
|
|
|
|
} else {
|
|
|
|
keys = Object.keys(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy over default settings if they don't exist yet.
|
2021-01-03 13:38:11 +00:00
|
|
|
let callbackWithDefault = (data) => {
|
2020-07-02 01:41:20 +00:00
|
|
|
for (const k of keys) {
|
|
|
|
if (data[k] === undefined) {
|
|
|
|
data[k] = DEFAULT_SETTINGS[k];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return callback(data);
|
|
|
|
};
|
|
|
|
|
2020-06-18 11:29:55 +00:00
|
|
|
if (
|
|
|
|
chrome &&
|
|
|
|
chrome.storage &&
|
|
|
|
chrome.storage.sync &&
|
|
|
|
chrome.storage.sync.get
|
|
|
|
) {
|
2021-01-03 13:38:11 +00:00
|
|
|
chrome.storage.sync.get(key, callbackWithDefault);
|
2020-06-18 11:29:55 +00:00
|
|
|
} else if (
|
|
|
|
browser &&
|
|
|
|
browser.storage &&
|
|
|
|
browser.storage.sync &&
|
|
|
|
browser.storage.sync.get
|
|
|
|
) {
|
2021-01-03 13:38:11 +00:00
|
|
|
browser.storage.sync.get(key, callbackWithDefault);
|
2020-06-18 11:29:55 +00:00
|
|
|
} else {
|
|
|
|
console.error("Couldn't read setting: " + key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function addStorageChangeListener(listener) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (
|
|
|
|
chrome &&
|
|
|
|
chrome.storage &&
|
|
|
|
chrome.storage.onChanged &&
|
|
|
|
chrome.storage.onChanged.addListener
|
|
|
|
) {
|
|
|
|
chrome.storage.onChanged.addListener(listener);
|
|
|
|
} else if (
|
|
|
|
browser &&
|
|
|
|
browser.storage &&
|
|
|
|
browser.storage.onChanged &&
|
|
|
|
browser.storage.onChanged.addListener
|
|
|
|
) {
|
|
|
|
browser.storage.onChanged.addListener(listener);
|
|
|
|
} else {
|
|
|
|
console.error("Couldn't add setting change listener");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function reloadTab(tab, callback) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (chrome && chrome.tabs && chrome.tabs.reload) {
|
|
|
|
chrome.tabs.reload(tab, callback);
|
|
|
|
} else if (browser && browser.tabs && browser.tabs.reload) {
|
|
|
|
browser.tabs.reload(tab, callback);
|
|
|
|
} else {
|
|
|
|
console.error("Couldn't reload tab.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function dictEquality(dict1, dict2) {
|
|
|
|
let isEqual = true;
|
2020-06-18 11:29:55 +00:00
|
|
|
|
|
|
|
for (var k in dict1) {
|
|
|
|
if (Object.prototype.hasOwnProperty.call(dict1, k)) {
|
2021-01-03 13:38:11 +00:00
|
|
|
isEqual = isEqual && dict1[k] === dict2[k];
|
2020-06-18 11:29:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (let k in dict2) {
|
|
|
|
if (Object.prototype.hasOwnProperty.call(dict2, k)) {
|
2021-01-03 13:38:11 +00:00
|
|
|
isEqual = isEqual && dict1[k] === dict2[k];
|
2020-06-18 11:29:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
return isEqual;
|
2020-06-18 11:29:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Promise-based version of `chrome.tabs.query`.
|
|
|
|
*
|
|
|
|
* Mozilla does this by default in `browser.tabs` but Chrome is behind on this
|
|
|
|
* sort of thing. Chrome won't even let us check if we're running in
|
|
|
|
*/
|
2021-01-03 13:38:11 +00:00
|
|
|
function tabQuery() {
|
|
|
|
let myArgs = arguments;
|
2020-06-18 11:29:55 +00:00
|
|
|
|
|
|
|
if (window.browser && browser.tabs && browser.tabs.query) {
|
|
|
|
return browser.tabs.query.apply(this, arguments);
|
|
|
|
}
|
|
|
|
|
|
|
|
return new Promise(function (resolve) {
|
2021-01-03 13:38:11 +00:00
|
|
|
let newArguments = Array.prototype.slice.call(myArgs);
|
|
|
|
newArguments.push(resolve);
|
|
|
|
chrome.tabs.query.apply(this, newArguments);
|
2020-06-18 11:29:55 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Promise-based version of `chrome.tabs.sendMessage`.
|
|
|
|
*/
|
2021-01-03 13:38:11 +00:00
|
|
|
function tabSendmessage() {
|
|
|
|
let myArgs = arguments;
|
2020-06-18 11:29:55 +00:00
|
|
|
|
|
|
|
if (window.browser && browser.tabs && browser.tabs.sendMessage) {
|
|
|
|
return browser.tabs.sendMessage.apply(this, arguments);
|
|
|
|
}
|
|
|
|
|
|
|
|
return new Promise(function (resolve, reject) {
|
2021-01-03 13:38:11 +00:00
|
|
|
let newArguments = Array.prototype.slice.call(myArgs);
|
|
|
|
newArguments.push(function (response) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (chrome.runtime.lastError !== undefined) {
|
|
|
|
reject(chrome.runtime.lastError.message);
|
|
|
|
}
|
|
|
|
|
|
|
|
resolve(response);
|
|
|
|
});
|
2021-01-03 13:38:11 +00:00
|
|
|
chrome.tabs.sendMessage.apply(this, newArguments);
|
2020-06-18 11:29:55 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function openSettingsPage() {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (chrome && chrome.tabs && chrome.tabs.create) {
|
2021-01-03 13:51:15 +00:00
|
|
|
chrome.tabs.create({ url: "/settings.html" });
|
2020-06-18 11:29:55 +00:00
|
|
|
/* Open the settings page manually */
|
|
|
|
} else if (browser && browser.runtime && browser.runtime.openOptionsPage) {
|
|
|
|
browser.runtime.openOptionsPage();
|
|
|
|
/* Have the browser open the settings page for us */
|
|
|
|
} else {
|
|
|
|
console.error("Can't open settings page");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function setMessageListener(listener) {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (
|
|
|
|
chrome &&
|
|
|
|
chrome.runtime &&
|
|
|
|
chrome.runtime.onMessage &&
|
|
|
|
chrome.runtime.onMessage.addListener
|
|
|
|
) {
|
|
|
|
chrome.runtime.onMessage.addListener(listener);
|
|
|
|
} else if (
|
|
|
|
browser &&
|
|
|
|
browser.runtime &&
|
|
|
|
browser.runtime.onMessage &&
|
|
|
|
browser.runtime.onMessage.addListener
|
|
|
|
) {
|
|
|
|
browser.runtime.onMessage.addListener(listener);
|
|
|
|
} else {
|
|
|
|
console.error("Couldn't add message listener");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-03 13:38:11 +00:00
|
|
|
function getExtensionUrl() {
|
2020-06-18 11:29:55 +00:00
|
|
|
if (chrome && chrome.extension && chrome.extension.getURL) {
|
|
|
|
return chrome.extension
|
|
|
|
.getURL("dist/ruffle.js")
|
|
|
|
.replace("dist/ruffle.js", "");
|
|
|
|
} else if (browser && browser.runtime && browser.runtime.getURL) {
|
|
|
|
return browser.runtime
|
|
|
|
.getURL("dist/ruffle.js")
|
|
|
|
.replace("dist/ruffle.js", "");
|
|
|
|
} else {
|
|
|
|
console.error("Couldn't get extension URL");
|
|
|
|
}
|
|
|
|
}
|
2021-01-03 13:38:11 +00:00
|
|
|
|
|
|
|
function camelize(str) {
|
|
|
|
return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => {
|
|
|
|
return chr.toUpperCase();
|
|
|
|
});
|
|
|
|
}
|