diff --git a/.eslintrc.yml b/.eslintrc.yml
deleted file mode 100644
index 5a32b19..0000000
--- a/.eslintrc.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-env:
- browser: true
- greasemonkey: true
- es2021: true
-extends:
- - airbnb-base
-parserOptions:
- ecmaVersion: 12
-rules:
- no-console: off
- no-multi-str: off
diff --git a/package.json b/package.json
index e51a286..e8ddf48 100644
--- a/package.json
+++ b/package.json
@@ -18,5 +18,10 @@
"homepage": "https://eskander.tn/ultra-popup-blocker/",
"devDependencies": {
"standard": "^17.1.2"
+ },
+ "standard": {
+ "env": [
+ "greasemonkey"
+ ]
}
-}
+}
\ No newline at end of file
diff --git a/src/ultra-popup-blocker.user.js b/src/ultra-popup-blocker.user.js
index cd11ff7..e4e5657 100644
--- a/src/ultra-popup-blocker.user.js
+++ b/src/ultra-popup-blocker.user.js
@@ -20,154 +20,154 @@
/* ---------------------------------------------------------------- */
-const PERMISSION_DIALOG_ID = 'ultra_popup_blocker'; // HTML ID in the page
-const CONTROL_PANEL = 'https://eskander.tn/ultra-popup-blocker/settings.html';
+const PERMISSION_DIALOG_ID = 'ultra_popup_blocker' // HTML ID in the page
+const CONTROL_PANEL = 'https://eskander.tn/ultra-popup-blocker/settings.html'
// Reference to page's "window" through GreaseMonkey
-const global = unsafeWindow;
-global.upb_counter = 0;
+const global = unsafeWindow
+global.upb_counter = 0
// Storing a reference to real "window.open" method in case we wanted it
-const realWindowOpen = global.open;
+const realWindowOpen = global.open
// We need to return the fake window to not encounter JS runtime error when the popup originator
// page wants to call focus() or blur().
const FakeWindow = {
- blur() {
- return false;
+ blur () {
+ return false
},
- focus() {
- return false;
- },
-};
+ focus () {
+ return false
+ }
+}
// Timeout before confirmation dialog closes automatically
-let timeleft = 15;
+let timeleft = 15
/* ---------------------------------------------------------------- */
// Add @domain to local storage
-function addDomainToLocalStorage(domain) {
- GM_setValue(`trusted_${domain}`, true);
+function addDomainToLocalStorage (domain) {
+ GM_setValue(`trusted_${domain}`, true)
}
// Remove @domain from local storage
-function removeDomainFromLocalStorage(domain) {
- GM_deleteValue(`trusted_${domain}`);
- GM_deleteValue(`${domain}`);
+function removeDomainFromLocalStorage (domain) {
+ GM_deleteValue(`trusted_${domain}`)
+ GM_deleteValue(`${domain}`)
}
// Return true if @domain is trusted
-function isDomainTrusted(domain) {
- return GM_getValue(`trusted_${domain}`);
+function isDomainTrusted (domain) {
+ return GM_getValue(`trusted_${domain}`)
}
// Return an Array of trusted domains
-function getTrustedDomains() {
- return GM_listValues();
+function getTrustedDomains () {
+ return GM_listValues()
}
// Open permission manager in new tab
-function openControlPanel() {
- GM_openInTab(CONTROL_PANEL, false);
+function openControlPanel () {
+ GM_openInTab(CONTROL_PANEL, false)
}
// Add a link to permission manager in extensions' popup menu
-function attachToExtensionMenu(name, callback) {
- GM_registerMenuCommand(name, callback);
+function attachToExtensionMenu (name, callback) {
+ GM_registerMenuCommand(name, callback)
}
// Permission bar; Return permission dialog, or create it if needed.
-function getLogDiv() {
- let logDiv = document.getElementById(PERMISSION_DIALOG_ID);
+function getLogDiv () {
+ let logDiv = document.getElementById(PERMISSION_DIALOG_ID)
if (!logDiv) {
- logDiv = document.createElement('div');
- logDiv.setAttribute('id', PERMISSION_DIALOG_ID);
- logDiv.style.cssText = 'position: fixed;\
- bottom: 0;\
- left: 0;\
- z-index: 99999;\
- width: 100%;\
- padding: 5px 5px 5px 5px;\
- font: status-bar;\
- background-color: black;\
- color: white;\
- cursor: help';
- document.body.appendChild(logDiv);
+ logDiv = document.createElement('div')
+ logDiv.setAttribute('id', PERMISSION_DIALOG_ID)
+ logDiv.style.cssText = `position: fixed;
+ bottom: 0;
+ left: 0;
+ z-index: 99999;
+ width: 100%;
+ padding: 5px 5px 5px 5px;
+ font: status-bar;
+ background-color: black;
+ color: white;
+ cursor: help`
+ document.body.appendChild(logDiv)
}
- return logDiv;
+ return logDiv
}
// Permission bar; Hide dialog
-function closeLogDiv(logDiv) {
- const currentLogDiv = logDiv;
- currentLogDiv.style.display = 'none';
+function closeLogDiv (logDiv) {
+ const currentLogDiv = logDiv
+ currentLogDiv.style.display = 'none'
}
// Return current top domain. eg: github.com
-function getCurrentTopDomain() {
- const hostnameArray = document.location.hostname.split('.');
- const topLevelDomain = hostnameArray[hostnameArray.length - 1];
- const domainName = hostnameArray[hostnameArray.length - 2];
- const currentDomain = `${domainName}.${topLevelDomain}`;
- return currentDomain;
+function getCurrentTopDomain () {
+ const hostnameArray = document.location.hostname.split('.')
+ const topLevelDomain = hostnameArray[hostnameArray.length - 1]
+ const domainName = hostnameArray[hostnameArray.length - 2]
+ const currentDomain = `${domainName}.${topLevelDomain}`
+ return currentDomain
}
// Return true if current domain has been trusted by the user
-function isCurrentDomainTrusted() {
- const domain = getCurrentTopDomain();
- return isDomainTrusted(domain);
+function isCurrentDomainTrusted () {
+ const domain = getCurrentTopDomain()
+ return isDomainTrusted(domain)
}
// Permission manager; Create a button to remove domain from permissions list
-function removeDomainFromPermissionList() {
- const div = this.parentElement;
- console.log(div);
- const domain = div.innerText.replace('\n\u00D7', '');
- removeDomainFromLocalStorage(domain);
- div.style.display = 'none';
- console.log(`[UPB] Domain removed from trust: ${domain}`);
+function removeDomainFromPermissionList () {
+ const div = this.parentElement
+ console.log(div)
+ const domain = div.innerText.replace('\n\u00D7', '')
+ removeDomainFromLocalStorage(domain)
+ div.style.display = 'none'
+ console.log(`[UPB] Domain removed from trust: ${domain}`)
}
// Permission manager; Add a new domain to permissions list
-function addDomainToPermissionList(domain) {
- const domainName = domain.replace('trusted_', '');
- const li = document.createElement('li');
- const t = document.createTextNode(domainName);
- li.appendChild(t);
- document.getElementById('List').appendChild(li);
+function addDomainToPermissionList (domain) {
+ const domainName = domain.replace('trusted_', '')
+ const li = document.createElement('li')
+ const t = document.createTextNode(domainName)
+ li.appendChild(t)
+ document.getElementById('List').appendChild(li)
// Add a remove button to li
- const span = document.createElement('SPAN');
- const txt = document.createTextNode('\u00D7');
- span.className = 'close';
- span.appendChild(txt);
- span.onclick = removeDomainFromPermissionList;
- li.appendChild(span);
+ const span = document.createElement('SPAN')
+ const txt = document.createTextNode('\u00D7')
+ span.className = 'close'
+ span.appendChild(txt)
+ span.onclick = removeDomainFromPermissionList
+ li.appendChild(span)
// Add domain to localStorage
- addDomainToLocalStorage(domainName);
- console.log(`[UPB] Domain added to trust: ${domainName}`);
+ addDomainToLocalStorage(domainName)
+ console.log(`[UPB] Domain added to trust: ${domainName}`)
}
// Permission manager; Button to add a new domain to permissions list
-function addNewDomainButton() {
+function addNewDomainButton () {
document.getElementsByClassName('addBtn')[0].addEventListener(
'click',
() => {
- const DOMAIN = document.getElementById('Input').value;
+ const DOMAIN = document.getElementById('Input').value
if (DOMAIN !== '') {
- addDomainToPermissionList(DOMAIN);
+ addDomainToPermissionList(DOMAIN)
}
- document.getElementById('Input').value = '';
- },
- );
+ document.getElementById('Input').value = ''
+ }
+ )
}
// Permission bar; Create a button with inner text @text executing onclick
// @clickCallback, appended as a child of @logDiv, with style @inlineStyle.
-function createButton(logDiv, text, id, clickCallback, inlineStyle) {
- const button = document.createElement('button');
- button.innerHTML = text;
- button.id = id;
+function createButton (logDiv, text, id, clickCallback, inlineStyle) {
+ const button = document.createElement('button')
+ button.innerHTML = text
+ button.id = id
button.style.cssText = `text-decoration: none;\
color: black;\
cursor: pointer;\
@@ -177,165 +177,165 @@ function createButton(logDiv, text, id, clickCallback, inlineStyle) {
border-width: 0px;\
border-radius: 5px;\
color: black;\
- ${inlineStyle}`;
- logDiv.appendChild(button);
- button.addEventListener('click', clickCallback);
+ ${inlineStyle}`
+ logDiv.appendChild(button)
+ button.addEventListener('click', clickCallback)
}
// Permission bar; Create a button (child of @logDiv) which onclick trusts @domain
-function createTrustButton(logDiv, domain, a, b, c) {
+function createTrustButton (logDiv, domain, a, b, c) {
createButton(
logDiv,
'Always Allow 🗸',
'upb_trust',
() => {
- addDomainToLocalStorage(domain);
- realWindowOpen(a, b, c);
- closeLogDiv(logDiv);
- global.open = realWindowOpen;
+ addDomainToLocalStorage(domain)
+ realWindowOpen(a, b, c)
+ closeLogDiv(logDiv)
+ global.open = realWindowOpen
},
- '',
- );
+ ''
+ )
}
// Permission bar; Create a button (child of @logDiv) which onclick opens @domain
-function createOpenPopupButton(logDiv, a, b, c) {
+function createOpenPopupButton (logDiv, a, b, c) {
createButton(
logDiv,
'Allow ↗',
'upb_open',
() => {
- realWindowOpen(a, b, c);
- closeLogDiv(logDiv);
+ realWindowOpen(a, b, c)
+ closeLogDiv(logDiv)
},
- '',
- );
+ ''
+ )
}
// Permission bar; Create a button (child of @logDiv) which onclick hides @logDiv
-function createCloseButton(logDiv) {
+function createCloseButton (logDiv) {
createButton(
logDiv,
`Deny (${timeleft})`,
'upb_close',
() => {
- closeLogDiv(logDiv);
+ closeLogDiv(logDiv)
},
- ' background-color: #a00;\
- color: white;',
- );
+ `background-color: #a00;
+ color: white;`
+ )
}
// Permission bar; Create a button (child of @logDiv) which onclick opens @controlPanel
-function createConfigButton(logDiv) {
+function createConfigButton (logDiv) {
createButton(
logDiv,
'Config ⚙',
'upb_config',
() => {
- openControlPanel();
+ openControlPanel()
},
- ' float: right;\
- margin: 0 10px 0 0;',
- );
+ `float: right;
+ margin: 0 10px 0 0;`
+ )
}
// Permission bar; Display a permission prompt when a new popup is detected
-function createDialogMessage(logDiv, url) {
- const currentLogDiv = logDiv;
- const domain = getCurrentTopDomain();
- let msg;
- let popupUrl;
+function createDialogMessage (logDiv, url) {
+ const currentLogDiv = logDiv
+ const domain = getCurrentTopDomain()
+ let msg
+ let popupUrl
- global.upb_counter += 1;
+ global.upb_counter += 1
if (global.upb_counter === 1) {
- msg = `[UPB] Allow ${domain} to open a popup ?`;
+ msg = `[UPB] Allow ${domain} to open a popup ?`
} else {
- msg = `[UPB] Allow ${domain} to open a popup ? (${global.upb_counter})`;
+ msg = `[UPB] Allow ${domain} to open a popup ? (${global.upb_counter})`
}
if (url[0] === '/') {
- popupUrl = document.domain + url;
+ popupUrl = document.domain + url
} else {
- popupUrl = url;
+ popupUrl = url
}
- currentLogDiv.innerHTML = msg;
- currentLogDiv.title = popupUrl;
- console.log(msg);
- currentLogDiv.style.display = 'block';
+ currentLogDiv.innerHTML = msg
+ currentLogDiv.title = popupUrl
+ console.log(msg)
+ currentLogDiv.style.display = 'block'
}
-function createTimer(logDiv) {
- console.log(timeleft);
+function createTimer (logDiv) {
+ console.log(timeleft)
if (timeleft === 15) {
const Timer = setInterval(() => {
- document.getElementById('upb_close').innerHTML = `Deny (${timeleft})`;
- timeleft -= 1;
+ document.getElementById('upb_close').innerHTML = `Deny (${timeleft})`
+ timeleft -= 1
if (timeleft < 0) {
- clearInterval(Timer);
- closeLogDiv(logDiv);
- timeleft = 15;
+ clearInterval(Timer)
+ closeLogDiv(logDiv)
+ timeleft = 15
}
- console.log(timeleft);
- }, 1000);
+ console.log(timeleft)
+ }, 1000)
}
}
// This function will be called each time a script wants to open a new window
-function fakeWindowOpen(a, b, c) {
- const domain = getCurrentTopDomain();
- const popupURL = a;
- const logDiv = getLogDiv();
- console.log(a, b, c);
- createDialogMessage(logDiv, popupURL);
- createOpenPopupButton(logDiv, a, b, c);
- createTrustButton(logDiv, domain, a, b, c);
- createCloseButton(logDiv);
- createConfigButton(logDiv);
- createTimer(logDiv);
- return FakeWindow;
+function fakeWindowOpen (a, b, c) {
+ const domain = getCurrentTopDomain()
+ const popupURL = a
+ const logDiv = getLogDiv()
+ console.log(a, b, c)
+ createDialogMessage(logDiv, popupURL)
+ createOpenPopupButton(logDiv, a, b, c)
+ createTrustButton(logDiv, domain, a, b, c)
+ createCloseButton(logDiv)
+ createConfigButton(logDiv)
+ createTimer(logDiv)
+ return FakeWindow
}
// Override browser's "window.open" with our own implementation.
-function activateBlocker() {
- const TRUSTED = isCurrentDomainTrusted();
+function activateBlocker () {
+ const TRUSTED = isCurrentDomainTrusted()
if (!TRUSTED) {
- global.open = fakeWindowOpen;
- console.log('[UPB] Current domain Not trusted.');
+ global.open = fakeWindowOpen
+ console.log('[UPB] Current domain Not trusted.')
} else {
- console.log('[UPB] Current domain Trusted. UPB disabled.');
+ console.log('[UPB] Current domain Trusted. UPB disabled.')
}
}
-function activateControlPanel() {
+function activateControlPanel () {
if (window.location.href === CONTROL_PANEL) {
// Add listener to the add button
- addNewDomainButton();
+ addNewDomainButton()
// Show already stored elements in the list
- const storedTrust = getTrustedDomains();
- storedTrust.forEach(addDomainToPermissionList);
- console.log(storedTrust);
+ const storedTrust = getTrustedDomains()
+ storedTrust.forEach(addDomainToPermissionList)
+ console.log(storedTrust)
}
}
-function activateExtensionMenu() {
+function activateExtensionMenu () {
attachToExtensionMenu(
'Configure popup permissions',
() => {
- openControlPanel();
- },
- );
+ openControlPanel()
+ }
+ )
}
/* ---------------------------------------------------------------- */
// Add configure link to Tampermonkey's menu
-activateExtensionMenu();
+activateExtensionMenu()
// Initiate Control Panel logic
-activateControlPanel();
+activateControlPanel()
// Start Popup Blocker
-activateBlocker();
+activateBlocker()