2021-02-28 10:32:38 +00:00
|
|
|
var ext_api = (typeof browser === 'object') ? browser : chrome;
|
2023-01-20 14:53:19 +00:00
|
|
|
var manifestData = ext_api.runtime.getManifest();
|
|
|
|
var navigator_ua = navigator.userAgent;
|
|
|
|
var navigator_ua_mobile = navigator_ua.toLowerCase().includes('mobile');
|
|
|
|
var custom_switch = manifestData.optional_permissions && manifestData.optional_permissions.length && !navigator_ua_mobile;
|
2020-11-05 21:21:41 +00:00
|
|
|
|
2021-02-17 18:11:27 +00:00
|
|
|
function popup_show_toggle(domain, enabled) {
|
2021-12-30 19:36:01 +00:00
|
|
|
if (domain) {
|
|
|
|
var site_switch_span = document.getElementById('site_switch_span');
|
|
|
|
let labelEl = document.createElement('label');
|
|
|
|
labelEl.setAttribute('class', 'switch');
|
|
|
|
let inputEl = document.createElement('input');
|
|
|
|
inputEl.setAttribute('id', 'site_switch');
|
|
|
|
inputEl.setAttribute('type', 'checkbox');
|
|
|
|
if (enabled)
|
|
|
|
inputEl.setAttribute('checked', true);
|
|
|
|
labelEl.appendChild(inputEl);
|
|
|
|
let spanEl = document.createElement('span');
|
|
|
|
spanEl.setAttribute('class', 'slider round');
|
2022-12-03 17:13:37 +00:00
|
|
|
spanEl.setAttribute('title', 'en/disable current site/group in BPC');
|
2021-12-30 19:36:01 +00:00
|
|
|
labelEl.appendChild(spanEl);
|
|
|
|
site_switch_span.appendChild(labelEl);
|
|
|
|
document.getElementById("site_switch").addEventListener('click', function () {
|
|
|
|
ext_api.runtime.sendMessage({
|
|
|
|
request: 'site_switch'
|
|
|
|
});
|
|
|
|
//open(location).close();
|
|
|
|
});
|
|
|
|
}
|
2020-11-05 21:21:41 +00:00
|
|
|
};
|
2021-02-17 18:11:27 +00:00
|
|
|
|
2021-12-30 19:36:01 +00:00
|
|
|
ext_api.runtime.sendMessage({
|
|
|
|
request: 'popup_show_toggle'
|
|
|
|
});
|
2021-02-17 18:11:27 +00:00
|
|
|
ext_api.runtime.onMessage.addListener(function (message, sender) {
|
2021-12-30 19:36:01 +00:00
|
|
|
if (message.msg === 'popup_show_toggle' && message.data) {
|
|
|
|
popup_show_toggle(message.data.domain, message.data.enabled)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
var cookie_domain;
|
|
|
|
ext_api.tabs.query({
|
|
|
|
active: true,
|
|
|
|
currentWindow: true
|
|
|
|
}, function (tabs) {
|
2023-01-20 14:53:19 +00:00
|
|
|
if (tabs && tabs[0] && /^http/.test(tabs[0].url)) {
|
2021-12-30 19:36:01 +00:00
|
|
|
let hostname = new URL(tabs[0].url).hostname;
|
2022-01-13 16:22:38 +00:00
|
|
|
cookie_domain = getCookiePermDomain(hostname);
|
2021-12-30 19:36:01 +00:00
|
|
|
}
|
2021-02-17 18:11:27 +00:00
|
|
|
});
|
2020-11-05 21:21:41 +00:00
|
|
|
|
|
|
|
document.getElementById("clear_cookies").addEventListener('click', function () {
|
2023-01-20 14:53:19 +00:00
|
|
|
if (custom_switch)
|
2021-12-30 19:36:01 +00:00
|
|
|
ext_api.permissions.request({
|
|
|
|
origins: ["*://*." + cookie_domain + "/*"]
|
|
|
|
}, function (granted) {
|
|
|
|
if (granted) {
|
|
|
|
ext_api.runtime.sendMessage({
|
|
|
|
request: 'clear_cookies'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
2023-01-20 14:53:19 +00:00
|
|
|
else
|
|
|
|
ext_api.permissions.contains({
|
|
|
|
origins: ["*://*." + cookie_domain + "/*"]
|
|
|
|
}, function (result) {
|
|
|
|
if (result) {
|
|
|
|
ext_api.runtime.sendMessage({
|
|
|
|
request: 'clear_cookies'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
2020-11-24 16:12:47 +00:00
|
|
|
});
|
2021-02-16 16:49:29 +00:00
|
|
|
|
2022-07-15 16:15:41 +00:00
|
|
|
function showArchiveLinks() {
|
|
|
|
ext_api.tabs.query({
|
|
|
|
active: true,
|
|
|
|
currentWindow: true
|
|
|
|
}, function (tabs) {
|
2023-01-19 07:31:41 +00:00
|
|
|
if (tabs && tabs[0] && /^http/.test(tabs[0].url)) {
|
|
|
|
let url = tabs[0].url.split('?')[0];
|
|
|
|
let url_enc = encodeURIComponent(url);
|
|
|
|
let hostname = urlHost(url);
|
2022-07-15 16:15:41 +00:00
|
|
|
let archive_array = {
|
2023-01-19 07:31:41 +00:00
|
|
|
'Archive.today': 'https://archive.today?run=1&url=' + url_enc,
|
|
|
|
'Google webcache': 'https://webcache.googleusercontent.com/search?q=cache:' + url_enc,
|
|
|
|
'Google Search Tool\n(use online html-viewer - no fix)': 'https://search.google.com/test/rich-results?url=' + url_enc
|
2022-07-15 16:15:41 +00:00
|
|
|
};
|
|
|
|
let archive_id = document.querySelector('span#archive');
|
|
|
|
if (archive_id) {
|
|
|
|
archive_id.appendChild(document.createTextNode('Open tab in:'));
|
|
|
|
for (let key in archive_array) {
|
|
|
|
let elem_div = document.createElement('div');
|
|
|
|
let elem = document.createElement('a');
|
|
|
|
elem.innerText = key;
|
2023-01-19 07:31:41 +00:00
|
|
|
if (!(matchDomain(['google.com', 'googleusercontent.com'], hostname) || hostname.match(/^archive\.\w{2}$/))) {
|
|
|
|
elem.href = archive_array[key];
|
|
|
|
elem.target = '_blank';
|
|
|
|
elem_div.appendChild(elem);
|
|
|
|
archive_id.appendChild(elem_div);
|
|
|
|
}
|
2022-07-15 16:15:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
showArchiveLinks();
|
|
|
|
|
2023-01-19 07:31:41 +00:00
|
|
|
function matchDomain(domains, hostname = window.location.hostname) {
|
|
|
|
let matched_domain = false;
|
|
|
|
if (typeof domains === 'string')
|
|
|
|
domains = [domains];
|
|
|
|
domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain));
|
|
|
|
return matched_domain;
|
|
|
|
}
|
|
|
|
|
|
|
|
function urlHost(url) {
|
|
|
|
if (/^http/.test(url)) {
|
|
|
|
try {
|
|
|
|
return new URL(url).hostname;
|
|
|
|
} catch (e) {
|
|
|
|
console.log(`url not valid: ${url} error: ${e}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return url;
|
|
|
|
}
|
|
|
|
|
2021-02-16 16:49:29 +00:00
|
|
|
function closeButton() {
|
|
|
|
window.close();
|
|
|
|
}
|
|
|
|
|
2022-01-13 16:22:38 +00:00
|
|
|
function getCookiePermDomain(hostname) {
|
|
|
|
let domain = hostname.replace(/^(www|amp(html)?|m|wap)(\d)?\./, '');
|
|
|
|
let domain_split = domain.split('.');
|
|
|
|
let num = 2;
|
|
|
|
if (domain_split.length > 2 && domain.match(/(\w){2,4}\.(\w){2}$/))
|
|
|
|
num = 3;
|
|
|
|
domain = domain_split.slice(-num).join('.');
|
|
|
|
return domain;
|
|
|
|
}
|
|
|
|
|
2021-02-16 16:49:29 +00:00
|
|
|
document.getElementById("button-close").addEventListener('click', closeButton);
|