2020-03-25 19:31:28 +01:00
|
|
|
var ext_api = chrome || browser;
|
2020-02-28 16:23:17 +01:00
|
|
|
|
2021-06-22 21:54:00 +02:00
|
|
|
var useragent_options = ['', 'googlebot', 'bingbot'];
|
2021-02-06 21:37:52 +01:00
|
|
|
var referer_options = ['', 'facebook', 'google', 'twitter'];
|
2021-12-21 17:36:48 +01:00
|
|
|
var random_ip_options = ['', 'all', 'eu'];
|
2021-02-06 21:37:52 +01:00
|
|
|
|
2020-04-11 19:40:12 +02:00
|
|
|
function capitalize(str) {
|
2021-10-17 10:01:21 +02:00
|
|
|
return (typeof str === 'string') ? str.charAt(0).toUpperCase() + str.slice(1) : '';
|
2020-04-11 19:40:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function sortJson(json) {
|
2021-10-17 10:01:21 +02:00
|
|
|
return Object.keys(json)
|
|
|
|
.sort().reduce(function (Obj, key) {
|
|
|
|
Obj[key] = json[key];
|
|
|
|
return Obj;
|
|
|
|
}, {});
|
2020-04-11 19:40:12 +02:00
|
|
|
}
|
|
|
|
|
2020-03-25 19:31:28 +01:00
|
|
|
// Saves options to ext_api.storage
|
2020-02-28 16:23:17 +01:00
|
|
|
function save_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var textareaEl = document.querySelector('#bypass_sites textarea');
|
|
|
|
var sites_custom = {};
|
|
|
|
if (textareaEl.value !== '')
|
|
|
|
var sites_custom = JSON.parse(textareaEl.value);
|
|
|
|
ext_api.storage.local.set({
|
|
|
|
sites_custom: sites_custom
|
|
|
|
}, function () {
|
|
|
|
// Update status to let user know custom sites were saved.
|
|
|
|
var status = document.getElementById('status');
|
|
|
|
status.textContent = 'Custom sites saved.';
|
|
|
|
setTimeout(function () {
|
|
|
|
status.textContent = '';
|
|
|
|
location.href = 'options.html';
|
|
|
|
//window.close();
|
|
|
|
}, 800);
|
|
|
|
});
|
2020-02-28 16:23:17 +01:00
|
|
|
}
|
|
|
|
|
2020-04-11 19:40:12 +02:00
|
|
|
// Sort json by key in textarea
|
|
|
|
function sort_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var textareaEl = document.querySelector('#bypass_sites textarea');
|
|
|
|
var sites_custom = {};
|
|
|
|
if (textareaEl.value !== '') {
|
|
|
|
var sites_custom = JSON.parse(textareaEl.value);
|
|
|
|
var sites_custom_sorted = sortJson(sites_custom);
|
|
|
|
textareaEl.value = JSON.stringify(sites_custom_sorted);
|
|
|
|
}
|
|
|
|
|
2020-04-11 19:40:12 +02:00
|
|
|
}
|
|
|
|
|
2020-03-08 19:45:19 +01:00
|
|
|
// Export custom sites to file
|
|
|
|
function export_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
ext_api.storage.local.get({
|
|
|
|
sites_custom: {}
|
|
|
|
}, function (items) {
|
|
|
|
var result = JSON.stringify(items.sites_custom);
|
|
|
|
var a = document.createElement("a");
|
|
|
|
var file = new Blob([result], {type: "text/plain"});
|
|
|
|
a.href = window.URL.createObjectURL(file);
|
|
|
|
let date = new Date();
|
|
|
|
let dateStr = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().split("T")[0];
|
|
|
|
a.download = 'bypass_paywalls_clean_custom_' + dateStr + '.txt';
|
|
|
|
a.click();
|
|
|
|
});
|
2020-03-08 19:45:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Import custom sites from file
|
|
|
|
function import_options(e) {
|
|
|
|
var files = e.target.files;
|
|
|
|
var reader = new FileReader();
|
|
|
|
reader.onload = _imp;
|
|
|
|
reader.readAsText(files[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
function _imp() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var result = this.result;
|
|
|
|
ext_api.storage.local.get({
|
|
|
|
sites_custom: {}
|
|
|
|
}, function (items) {
|
|
|
|
var sites_custom = items.sites_custom;
|
|
|
|
var sites_custom_new = JSON.parse(result);
|
|
|
|
for (let site in sites_custom_new)
|
|
|
|
sites_custom[site] = sites_custom_new[site];
|
2020-10-31 20:06:38 +01:00
|
|
|
ext_api.storage.local.set({
|
2021-10-17 10:01:21 +02:00
|
|
|
sites_custom: sites_custom
|
2020-03-08 19:45:19 +01:00
|
|
|
}, function () {
|
2021-10-17 10:01:21 +02:00
|
|
|
// Update status to let user know custom sites were imported.
|
|
|
|
var status = document.getElementById('status');
|
|
|
|
status.textContent = 'Custom sites imported.';
|
|
|
|
setTimeout(function () {
|
|
|
|
//status.textContent = '';
|
|
|
|
importInput.value = '';
|
|
|
|
renderOptions();
|
|
|
|
}, 800);
|
2020-03-08 19:45:19 +01:00
|
|
|
});
|
2021-10-17 10:01:21 +02:00
|
|
|
});
|
2020-03-08 19:45:19 +01:00
|
|
|
}
|
|
|
|
|
2020-03-25 19:31:28 +01:00
|
|
|
// Add custom site to ext_api.storage
|
2020-02-28 16:23:17 +01:00
|
|
|
function add_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var inputEls = document.querySelectorAll('#add_site input, #add_site select');
|
|
|
|
var sites_custom = {};
|
|
|
|
|
|
|
|
for (let elem of inputEls) {
|
|
|
|
if (elem.dataset.key === 'title') {
|
|
|
|
var title = capitalize(elem.value);
|
|
|
|
if (title === '')
|
|
|
|
break;
|
|
|
|
sites_custom[title] = {};
|
|
|
|
} else {
|
|
|
|
if (elem.dataset.value) {
|
|
|
|
if (elem.checked)
|
2021-10-30 10:29:59 +02:00
|
|
|
sites_custom[title][elem.dataset.key] = parseInt(elem.dataset.value);
|
2021-10-17 10:01:21 +02:00
|
|
|
} else if (elem.value)
|
|
|
|
sites_custom[title][elem.dataset.key] = elem.value;
|
2020-08-22 13:52:43 +02:00
|
|
|
}
|
2021-10-17 10:01:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (title && sites_custom[title]['domain']) {
|
|
|
|
sites_custom[title]['domain'] = sites_custom[title]['domain'].replace(/(http(s)?:\/\/(www\.)?|^www\.|\/$)/g, '').toLowerCase();
|
|
|
|
|
|
|
|
// add new site to local storage
|
|
|
|
ext_api.storage.local.get({
|
|
|
|
sites_custom: {}
|
|
|
|
}, function (items) {
|
|
|
|
var sites_custom_old = items.sites_custom;
|
|
|
|
|
|
|
|
for (var key in sites_custom) {
|
|
|
|
sites_custom_old[key] = sites_custom[key];
|
|
|
|
}
|
|
|
|
|
|
|
|
ext_api.storage.local.set({
|
|
|
|
sites_custom: sites_custom_old
|
|
|
|
}, function () {
|
|
|
|
// Update status to let user know new custom site was added.
|
|
|
|
var status_add = document.getElementById('status_add');
|
|
|
|
status_add.textContent = 'Site added.';
|
|
|
|
setTimeout(function () {
|
|
|
|
//status.textContent = '';
|
|
|
|
renderOptions();
|
|
|
|
}, 800);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2020-02-28 16:23:17 +01:00
|
|
|
}
|
|
|
|
|
2020-03-25 19:31:28 +01:00
|
|
|
// Delete custom site from ext_api.storage
|
2020-03-02 18:36:11 +01:00
|
|
|
function delete_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var selectEl = document.querySelector('#custom_sites select');
|
|
|
|
var sites_custom = {};
|
|
|
|
var remove_key = selectEl.value;
|
|
|
|
|
|
|
|
// delete site from local storage
|
|
|
|
ext_api.storage.local.get({
|
|
|
|
sites_custom: {}
|
|
|
|
}, function (items) {
|
|
|
|
var sites_custom_old = items.sites_custom;
|
|
|
|
delete sites_custom_old[remove_key];
|
|
|
|
|
|
|
|
ext_api.storage.local.set({
|
|
|
|
sites_custom: sites_custom_old
|
|
|
|
}, function () {
|
|
|
|
// Update status to let user know custom site was deleted.
|
|
|
|
var status_delete = document.getElementById('status_delete');
|
|
|
|
status_delete.textContent = 'Site deleted.';
|
|
|
|
setTimeout(function () {
|
|
|
|
//status.textContent = '';
|
|
|
|
renderOptions();
|
|
|
|
}, 800);
|
2020-03-02 18:36:11 +01:00
|
|
|
});
|
2021-10-17 10:01:21 +02:00
|
|
|
});
|
2020-03-02 18:36:11 +01:00
|
|
|
}
|
|
|
|
|
2020-08-18 20:19:15 +02:00
|
|
|
// Edit custom site (copy to add)
|
|
|
|
function edit_options() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var selectEl = document.querySelector('#custom_sites select');
|
|
|
|
var sites_custom = {};
|
|
|
|
var title = selectEl.value;
|
|
|
|
|
|
|
|
// copy site to add-fields
|
|
|
|
ext_api.storage.local.get({
|
|
|
|
sites_custom: {}
|
|
|
|
}, function (items) {
|
|
|
|
sites_custom = items.sites_custom;
|
|
|
|
var edit_site = sites_custom[title];
|
|
|
|
document.querySelector('input[data-key="title"]').value = title;
|
|
|
|
document.querySelector('input[data-key="domain"]').value = edit_site.domain;
|
|
|
|
document.querySelector('select[data-key="useragent"]').selectedIndex = (edit_site.googlebot > 0) ? 1 : useragent_options.indexOf(edit_site.useragent);
|
|
|
|
document.querySelector('input[data-key="allow_cookies"]').checked = (edit_site.allow_cookies > 0);
|
|
|
|
document.querySelector('input[data-key="block_javascript"]').checked = (edit_site.block_javascript > 0);
|
|
|
|
document.querySelector('input[data-key="block_javascript_ext"]').checked = (edit_site.block_javascript_ext > 0);
|
|
|
|
document.querySelector('input[data-key="block_regex"]').value = edit_site.block_regex ? edit_site.block_regex : '';
|
2021-10-17 21:15:00 +02:00
|
|
|
document.querySelector('input[data-key="amp_unhide"]').checked = (edit_site.amp_unhide > 0);
|
2021-10-17 10:01:21 +02:00
|
|
|
document.querySelector('select[data-key="referer"]').selectedIndex = referer_options.indexOf(edit_site.referer);
|
2021-12-21 17:36:48 +01:00
|
|
|
document.querySelector('select[data-key="random_ip"]').selectedIndex = random_ip_options.indexOf(edit_site.random_ip);
|
2021-10-17 10:01:21 +02:00
|
|
|
});
|
2020-08-18 20:19:15 +02:00
|
|
|
}
|
|
|
|
|
2021-04-29 19:35:59 +02:00
|
|
|
// request permissions for custom sites (in list only)
|
|
|
|
function request_permissions() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var perm_custom = document.getElementById('perm-custom');
|
|
|
|
ext_api.permissions.request({
|
|
|
|
origins: perm_origins
|
|
|
|
}, function (granted) {
|
|
|
|
if (granted) {
|
|
|
|
perm_custom.innerText = 'YES';
|
|
|
|
} else {
|
|
|
|
perm_custom.innerText = 'NO';
|
|
|
|
}
|
|
|
|
});
|
2021-04-29 19:35:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// remove permissions for custom sites
|
|
|
|
function remove_permissions() {
|
2021-10-17 10:01:21 +02:00
|
|
|
var perm_custom = document.getElementById('perm-custom');
|
|
|
|
ext_api.permissions.remove({
|
|
|
|
origins: perm_origins
|
|
|
|
}, function (removed) {
|
|
|
|
if (removed) {
|
|
|
|
perm_custom.innerText = 'NO';
|
|
|
|
}
|
|
|
|
});
|
2021-04-29 19:35:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var perm_origins;
|
2020-03-25 19:31:28 +01:00
|
|
|
// Restores checkbox input states using the preferences stored in ext_api.storage.
|
2020-02-28 16:23:17 +01:00
|
|
|
function renderOptions() {
|
2021-10-17 10:01:21 +02:00
|
|
|
ext_api.storage.local.get({
|
2021-11-13 11:43:09 +01:00
|
|
|
sites_custom: {},
|
|
|
|
sites_updated: {}
|
2021-10-17 10:01:21 +02:00
|
|
|
}, function (items) {
|
|
|
|
var sites_custom = items.sites_custom;
|
2021-11-13 11:43:09 +01:00
|
|
|
var sites_updated = items.sites_updated;
|
2021-11-15 18:13:46 +01:00
|
|
|
var sites_updated_domains_new = Object.values(sites_updated).filter(x => (x.domain && !defaultSites_domains.includes(x.domain) || x.group)).map(x => x.group ? x.group.filter(y => !defaultSites_domains.includes(y)) : x.domain).flat();
|
2021-10-17 10:01:21 +02:00
|
|
|
var sitesEl = document.getElementById('bypass_sites');
|
|
|
|
sitesEl.innerHTML = '';
|
|
|
|
var labelEl = document.createElement('label');
|
|
|
|
var textareaEl = document.createElement('textarea');
|
|
|
|
textareaEl.value = JSON.stringify(sites_custom);
|
|
|
|
textareaEl.rows = 12;
|
|
|
|
textareaEl.cols = 40;
|
|
|
|
labelEl.appendChild(textareaEl);
|
|
|
|
sitesEl.appendChild(labelEl);
|
|
|
|
|
|
|
|
// add site
|
|
|
|
var add_sitesEl = document.getElementById('add_site');
|
|
|
|
add_sitesEl.innerHTML = '';
|
|
|
|
var inputEl;
|
|
|
|
var add_checkboxes = {
|
|
|
|
'title': 0,
|
|
|
|
'domain': 0,
|
|
|
|
'allow_cookies': 1,
|
|
|
|
'block_javascript': 1,
|
|
|
|
'block_javascript_ext': 1,
|
2021-10-17 21:15:00 +02:00
|
|
|
'block_regex': 0,
|
|
|
|
'amp_unhide': 1
|
2021-10-17 10:01:21 +02:00
|
|
|
};
|
|
|
|
for (var key in add_checkboxes) {
|
|
|
|
labelEl = document.createElement('label');
|
|
|
|
inputEl = document.createElement('input');
|
|
|
|
inputEl.dataset.key = key;
|
|
|
|
labelEl.appendChild(inputEl);
|
|
|
|
if (add_checkboxes[key]) {
|
|
|
|
inputEl.type = 'checkbox';
|
|
|
|
inputEl.dataset.value = 1;
|
|
|
|
} else if (key === 'title') {
|
|
|
|
inputEl.placeholder = 'Example';
|
|
|
|
} else if (key === 'domain')
|
|
|
|
inputEl.placeholder = 'example.com';
|
|
|
|
labelEl.appendChild(document.createTextNode(' ' + key));
|
|
|
|
add_sitesEl.appendChild(labelEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
var add_options = {
|
|
|
|
useragent: useragent_options,
|
2021-12-21 17:36:48 +01:00
|
|
|
referer: referer_options,
|
|
|
|
random_ip: random_ip_options
|
2021-10-17 10:01:21 +02:00
|
|
|
};
|
|
|
|
for (let key in add_options) {
|
|
|
|
labelEl = document.createElement('label');
|
|
|
|
labelEl.appendChild(document.createTextNode(key + ' '));
|
|
|
|
inputEl = document.createElement('select');
|
|
|
|
inputEl.dataset.key = key;
|
|
|
|
labelEl.appendChild(inputEl);
|
|
|
|
|
|
|
|
for (let elem of add_options[key]) {
|
|
|
|
let option = document.createElement("option");
|
|
|
|
option.value = elem;
|
|
|
|
option.text = elem;
|
|
|
|
inputEl.appendChild(option);
|
|
|
|
}
|
|
|
|
add_sitesEl.appendChild(labelEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
// list of custom sites
|
|
|
|
var custom_sitesEl = document.getElementById('custom_sites');
|
|
|
|
custom_sitesEl.innerHTML = '';
|
|
|
|
labelEl = document.createElement('label');
|
|
|
|
var selectEl = document.createElement('select');
|
|
|
|
selectEl.id = 'sites';
|
|
|
|
selectEl.size = 6;
|
|
|
|
var optionEl;
|
|
|
|
perm_origins = [];
|
|
|
|
for (let key in sites_custom) {
|
|
|
|
optionEl = document.createElement('option');
|
|
|
|
let domain = sites_custom[key]['domain'];
|
2021-11-15 18:13:46 +01:00
|
|
|
perm_origins.push(domain);
|
2021-10-17 10:01:21 +02:00
|
|
|
let isDefaultSite = defaultSites_domains.includes(domain);
|
|
|
|
optionEl.text = isDefaultSite ? '*' : '';
|
|
|
|
optionEl.text += key + ': ' + domain +
|
|
|
|
(sites_custom[key]['googlebot'] > 0 ? ' | googlebot' : '') +
|
|
|
|
(sites_custom[key]['allow_cookies'] > 0 ? ' | allow_cookies' : '') +
|
|
|
|
(sites_custom[key]['block_javascript'] > 0 ? ' | block javascript' : '') +
|
|
|
|
(sites_custom[key]['block_javascript_ext'] > 0 ? ' | block javascript ext' : '') +
|
|
|
|
(sites_custom[key]['block_regex'] ? ' | block regex' : '') +
|
|
|
|
(sites_custom[key]['useragent'] ? ' | useragent: ' + sites_custom[key]['useragent'] : '') +
|
2021-10-17 21:15:00 +02:00
|
|
|
(sites_custom[key]['referer'] ? ' | referer: ' + sites_custom[key]['referer'] : '') +
|
2021-12-21 17:36:48 +01:00
|
|
|
(sites_custom[key]['random_ip'] ? ' | random_ip: ' + sites_custom[key]['random_ip'] : '') +
|
2021-10-17 21:15:00 +02:00
|
|
|
(sites_custom[key]['amp_unhide'] > 0 ? ' | amp_unhide' : '');
|
2021-10-17 10:01:21 +02:00
|
|
|
optionEl.value = key;
|
|
|
|
selectEl.add(optionEl);
|
|
|
|
}
|
|
|
|
labelEl.appendChild(selectEl);
|
|
|
|
custom_sitesEl.appendChild(labelEl);
|
2021-11-15 18:13:46 +01:00
|
|
|
|
|
|
|
if (sites_updated_domains_new.length > 0) {
|
|
|
|
labelEl = document.createElement('p');
|
|
|
|
labelEl.appendChild(document.createElement('label'));
|
|
|
|
labelEl.appendChild(document.createTextNode('Updated sites: ' + sites_updated_domains_new.join()));
|
|
|
|
custom_sitesEl.appendChild(labelEl);
|
2021-11-13 11:43:09 +01:00
|
|
|
}
|
2021-10-17 10:01:21 +02:00
|
|
|
|
2021-11-17 17:45:33 +01:00
|
|
|
perm_origins = perm_origins.concat(sites_updated_domains_new).map(x => '*://*.' + x + '/*');
|
2021-10-17 10:01:21 +02:00
|
|
|
var perm_custom = document.getElementById('perm-custom');
|
2020-10-13 17:11:35 +02:00
|
|
|
ext_api.permissions.contains({
|
2021-10-17 10:01:21 +02:00
|
|
|
origins: perm_origins
|
2020-10-13 17:11:35 +02:00
|
|
|
}, function (result) {
|
2021-10-17 10:01:21 +02:00
|
|
|
if (result) {
|
|
|
|
perm_custom.innerText = 'YES';
|
|
|
|
} else {
|
|
|
|
perm_custom.innerText = 'NO';
|
|
|
|
}
|
2020-02-28 16:23:17 +01:00
|
|
|
});
|
2021-11-17 17:45:33 +01:00
|
|
|
});
|
2021-10-17 10:01:21 +02:00
|
|
|
|
|
|
|
var custom_enabled = document.getElementById('custom-enabled');
|
|
|
|
ext_api.permissions.contains({
|
2021-12-03 17:21:08 +01:00
|
|
|
origins: ["*://*/*"]
|
2021-10-17 10:01:21 +02:00
|
|
|
}, function (result) {
|
|
|
|
if (result) {
|
|
|
|
custom_enabled.innerText = 'YES';
|
|
|
|
} else {
|
|
|
|
custom_enabled.innerText = 'NO';
|
|
|
|
}
|
|
|
|
});
|
2021-02-17 19:11:27 +01:00
|
|
|
}
|
2020-02-28 16:23:17 +01:00
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', renderOptions);
|
|
|
|
document.getElementById('save').addEventListener('click', save_options);
|
2020-04-11 19:40:12 +02:00
|
|
|
document.getElementById('sort').addEventListener('click', sort_options);
|
2020-03-08 19:45:19 +01:00
|
|
|
document.getElementById('export').addEventListener('click', export_options);
|
|
|
|
document.getElementById('import').onclick = function () {importInput.click()}
|
|
|
|
document.getElementById('importInput').addEventListener("change", import_options, false);
|
2020-03-02 18:36:11 +01:00
|
|
|
document.getElementById('add').addEventListener('click', add_options);
|
2020-08-18 20:19:15 +02:00
|
|
|
document.getElementById('delete').addEventListener('click', delete_options);
|
2021-04-29 19:35:59 +02:00
|
|
|
document.getElementById('edit').addEventListener('click', edit_options);
|
|
|
|
document.getElementById('perm_request').addEventListener('click', request_permissions);
|
2021-10-17 10:01:21 +02:00
|
|
|
document.getElementById('perm_remove').addEventListener('click', remove_permissions);
|