Commence vigilance for stickies immediately on toggle

This commit is contained in:
Said Achmiz 2019-02-04 09:12:31 -05:00
parent cc3fe217bf
commit 4ee4f5f11f
3 changed files with 30 additions and 28 deletions

View File

@ -51,26 +51,6 @@ function checkForShouldKillSticky(result) {
return shouldKillSticky; return shouldKillSticky;
} }
/* Some websites add sticky elements after loading, or make existing elements
sticky (either on a timer, or based on user actions). CONSTANT VIGILANCE
counteracts this behavior, by watching the DOM for mutations, and, if
necessary, killing any newly-formed stickies.
*/
function startConstantVigilance() {
var observer = new MutationObserver((mutationsList, observer) => {
for (var mutation of mutationsList) {
killSticky(mutation.target);
}
});
console.log("Commencing vigilance for stickies!");
observer.observe(document.querySelector("html"), {
attributes: true,
childList: true,
subtree: true
});
}
/******************/ /******************/
/* INITIALIZATION */ /* INITIALIZATION */
/******************/ /******************/
@ -80,10 +60,6 @@ function initialize() {
let shouldKillSticky = checkForShouldKillSticky(result); let shouldKillSticky = checkForShouldKillSticky(result);
updateIcon(shouldKillSticky); updateIcon(shouldKillSticky);
if (shouldKillSticky) { if (shouldKillSticky) {
function beginKillingStickies() {
killSticky();
startConstantVigilance();
}
if (document.readyState == "loading") { if (document.readyState == "loading") {
document.addEventListener("DOMContentLoaded", beginKillingStickies); document.addEventListener("DOMContentLoaded", beginKillingStickies);
} else { } else {

View File

@ -47,13 +47,11 @@ function updateIcon(shouldKillSticky, tabID) {
'sticky' or 'fixed', and removes those elements. 'sticky' or 'fixed', and removes those elements.
*/ */
function killSticky(root) { function killSticky(root) {
var message = root ? "Killing all stickies!" : "Killing more stickies!";
console.log(message);
root = root || document.querySelector("body"); root = root || document.querySelector("body");
root.querySelectorAll('*').forEach(element => { root.querySelectorAll('*').forEach(element => {
if (getComputedStyle(element).position === 'fixed' || if (getComputedStyle(element).position === 'fixed' ||
getComputedStyle(element).position === 'sticky') { getComputedStyle(element).position === 'sticky') {
console.log("Killing sticky!");
element.remove(); element.remove();
} }
}); });
@ -70,3 +68,31 @@ function restoreScrollability() {
container.style.setProperty("overflow-y", "auto", "important"); container.style.setProperty("overflow-y", "auto", "important");
}); });
} }
/* Some websites add sticky elements after loading, or make existing elements
sticky (either on a timer, or based on user actions). CONSTANT VIGILANCE
counteracts this behavior, by watching the DOM for mutations, and, if
necessary, killing any newly-formed stickies.
*/
function startConstantVigilance() {
var observer = new MutationObserver((mutationsList, observer) => {
for (var mutation of mutationsList) {
killSticky(mutation.target);
}
});
console.log("Commencing vigilance for stickies!");
observer.observe(document.querySelector("html"), {
attributes: true,
childList: true,
subtree: true
});
}
/* Immediately kill all stickies, then commence constant vigilance.
*/
function beginKillingStickies() {
killSticky();
startConstantVigilance();
}

View File

@ -249,7 +249,7 @@ function initialize() {
Otherwise, show the reload button. */ Otherwise, show the reload button. */
let shouldKillSticky = AKS.pageMatched && !AKS.pageExcluded; let shouldKillSticky = AKS.pageMatched && !AKS.pageExcluded;
if (AKS.pageMatched && !AKS.pageExcluded) { if (AKS.pageMatched && !AKS.pageExcluded) {
chrome.tabs.executeScript(null, { code: 'killSticky()' }); chrome.tabs.executeScript(null, { code: 'beginKillingStickies()' });
reloadButton.classList.toggle("active", false); reloadButton.classList.toggle("active", false);
} else { } else {
reloadButton.classList.toggle("active", true); reloadButton.classList.toggle("active", true);