228 lines
6.1 KiB
JavaScript
228 lines
6.1 KiB
JavaScript
module.exports = {
|
|
get_i18n_string,
|
|
set_sync_storage,
|
|
get_sync_storage,
|
|
reload_tab,
|
|
dict_equality,
|
|
tab_query,
|
|
tab_sendmessage,
|
|
add_storage_change_listener,
|
|
open_settings_page,
|
|
set_message_listener,
|
|
get_extension_url,
|
|
};
|
|
|
|
// List of defaults for all settings.
|
|
const DEFAULT_SETTINGS = {
|
|
ruffle_enable: true,
|
|
ignore_output: false,
|
|
};
|
|
|
|
function get_i18n_string(key) {
|
|
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);
|
|
}
|
|
}
|
|
|
|
function set_sync_storage(key) {
|
|
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.");
|
|
}
|
|
}
|
|
|
|
function get_sync_storage(key, callback) {
|
|
// Create array of keys so that we can grab the defaults, if necessary.
|
|
let data_type = typeof key;
|
|
let keys;
|
|
if (data_type == "string") {
|
|
keys = [key];
|
|
} else if (Array.isArray(key)) {
|
|
keys = key;
|
|
} else {
|
|
keys = Object.keys(key);
|
|
}
|
|
|
|
// Copy over default settings if they don't exist yet.
|
|
let callback_with_default = (data) => {
|
|
for (const k of keys) {
|
|
if (data[k] === undefined) {
|
|
data[k] = DEFAULT_SETTINGS[k];
|
|
}
|
|
}
|
|
return callback(data);
|
|
};
|
|
|
|
if (
|
|
chrome &&
|
|
chrome.storage &&
|
|
chrome.storage.sync &&
|
|
chrome.storage.sync.get
|
|
) {
|
|
chrome.storage.sync.get(key, callback_with_default);
|
|
} else if (
|
|
browser &&
|
|
browser.storage &&
|
|
browser.storage.sync &&
|
|
browser.storage.sync.get
|
|
) {
|
|
browser.storage.sync.get(key, callback_with_default);
|
|
} else {
|
|
console.error("Couldn't read setting: " + key);
|
|
}
|
|
}
|
|
|
|
function add_storage_change_listener(listener) {
|
|
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");
|
|
}
|
|
}
|
|
|
|
function reload_tab(tab, callback) {
|
|
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.");
|
|
}
|
|
}
|
|
|
|
function dict_equality(dict1, dict2) {
|
|
let is_equal = true;
|
|
|
|
for (var k in dict1) {
|
|
if (Object.prototype.hasOwnProperty.call(dict1, k)) {
|
|
is_equal = is_equal && dict1[k] === dict2[k];
|
|
}
|
|
}
|
|
|
|
for (let k in dict2) {
|
|
if (Object.prototype.hasOwnProperty.call(dict2, k)) {
|
|
is_equal = is_equal && dict1[k] === dict2[k];
|
|
}
|
|
}
|
|
|
|
return is_equal;
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
*/
|
|
function tab_query() {
|
|
let my_args = arguments;
|
|
|
|
if (window.browser && browser.tabs && browser.tabs.query) {
|
|
return browser.tabs.query.apply(this, arguments);
|
|
}
|
|
|
|
return new Promise(function (resolve) {
|
|
let new_arguments = Array.prototype.slice.call(my_args);
|
|
new_arguments.push(resolve);
|
|
chrome.tabs.query.apply(this, new_arguments);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Promise-based version of `chrome.tabs.sendMessage`.
|
|
*/
|
|
function tab_sendmessage() {
|
|
let my_args = arguments;
|
|
|
|
if (window.browser && browser.tabs && browser.tabs.sendMessage) {
|
|
return browser.tabs.sendMessage.apply(this, arguments);
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
let new_arguments = Array.prototype.slice.call(my_args);
|
|
new_arguments.push(function (response) {
|
|
if (chrome.runtime.lastError !== undefined) {
|
|
reject(chrome.runtime.lastError.message);
|
|
}
|
|
|
|
resolve(response);
|
|
});
|
|
chrome.tabs.sendMessage.apply(this, new_arguments);
|
|
});
|
|
}
|
|
|
|
function open_settings_page() {
|
|
if (chrome && chrome.tabs && chrome.tabs.create) {
|
|
chrome.tabs.create({ url: "/settings.htm" });
|
|
/* 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");
|
|
}
|
|
}
|
|
|
|
function set_message_listener(listener) {
|
|
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");
|
|
}
|
|
}
|
|
|
|
function get_extension_url() {
|
|
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");
|
|
}
|
|
}
|