Przeglądaj źródła

Added support for sticky pseudo-elements; version to 1.2.9

master
achmizs 6 lat temu
rodzic
commit
b9efe86d0b

+ 59
- 3
src/contentScript.js Wyświetl plik

@@ -17,6 +17,7 @@
zero exclusion matters match the URL of the current page)
*/
function checkForShouldKillSticky(result) {
console.log("checkForShouldKillSticky");
var shouldKillSticky = false;

/* If whitelist mode is active, then the matching patterns list is treated
@@ -58,6 +59,7 @@ function checkForShouldKillSticky(result) {
‘sticky’ or ‘fixed’, and removes those elements.
*/
function killSticky(root) {
console.log("killSticky");
root = root || document.querySelector("body");
if (killStickyIfNeeded(root) == false) {
root.querySelectorAll('*').forEach(element => {
@@ -68,8 +70,10 @@ function killSticky(root) {
// Compensate for full-screen paywalls.
restoreScrollability();
}

function killStickyIfNeeded(element) {
let position = getComputedStyle(element).position;
console.log("killStickyIfNeeded");
var position = getComputedStyle(element).position;
if (position === 'fixed' || position === 'sticky') {
// uBlock exception.
if (element.tagName == "IFRAME" &&
@@ -81,20 +85,69 @@ function killStickyIfNeeded(element) {
element.remove();

// Increment the stickies killed count, and update icon badge.
AKS.stickiesKilled++;
chrome.runtime.sendMessage({ newBadgeText: "" + AKS.stickiesKilled });
incrementKilledStickiesCount();
return true;
} else {
var didKillSticky = false;

// The ::before pseudo-element might be sticky on its own.
position = getComputedStyle(element, "::before").position;
if (position === 'fixed' || position === 'sticky') {
// Kill the sticky.
console.log("Killing sticky!");
killStickyPseudoElement(element, true);

// Increment the stickies killed count, and update icon badge.
incrementKilledStickiesCount();

didKillSticky = true;
}

// The ::after pseudo-element, too, might be sticky on its own.
position = getComputedStyle(element, "::after").position;
if (position === 'fixed' || position === 'sticky') {
// Kill the sticky.
console.log("Killing sticky!");
killStickyPseudoElement(element, false);

// Increment the stickies killed count, and update icon badge.
incrementKilledStickiesCount();

didKillSticky = true;
}

return false;
}
}

function killStickyPseudoElement(element, before) {
console.log("killStickyPseudoElement");
if (!AKS.pseudoElementKillingStyleBlock) {
document.querySelector("head").insertAdjacentHTML("beforeend", "<style id='always-kill-sticky'></style>");
AKS.pseudoElementKillingStyleBlock = document.querySelector("style#always-kill-sticky");
}
var id = element.id;
if (id == "")
element.id = "always-kill-sticky-killed-element-" + (++AKS.stickyElementIDs);
let selector = `${element.tagName}#${element.id}::${(before ? 'before' : 'after')}`;
AKS.pseudoElementKillingStyleBlock.innerHTML = AKS.pseudoElementKillingStyleBlock.innerHTML + `${selector} { content: none; }\n`;
}

function incrementKilledStickiesCount() {
console.log("incrementKilledStickiesCount");
AKS.stickiesKilled++;
chrome.runtime.sendMessage({ newBadgeText: "" + AKS.stickiesKilled });
}

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* Full-screen paywalls not only bring up sticky elements, they also make
the page un-scrollable. This ensures that the page remains scrollable.
*/
function restoreScrollability() {
console.log("restoreScrollability");
document.querySelectorAll("html, body").forEach(container => {
container.style.setProperty("overflow-y", "auto", "important");
});
@@ -107,6 +160,7 @@ function restoreScrollability() {
necessary, killing any newly-formed stickies.
*/
function startConstantVigilance() {
console.log("startConstantVigilance");
var observer = new MutationObserver((mutationsList, observer) => {
window.requestIdleCallback(() => {
for (var mutation of mutationsList) {
@@ -127,6 +181,7 @@ function startConstantVigilance() {
/* Immediately kill all stickies, then commence constant vigilance.
*/
function beginKillingStickies() {
console.log("beginKillingStickies");
if (!window.AKS) window.AKS = { stickiesKilled: 0 };

window.requestIdleCallback(() => {
@@ -140,6 +195,7 @@ function beginKillingStickies() {
/******************/

function initialize() {
console.log("initialize");
chrome.storage.local.get([ "matchingPatterns", "exclusionPatterns", "mode" ], (result) => {
let shouldKillSticky = checkForShouldKillSticky(result);
updateIcon(shouldKillSticky);

+ 1
- 1
src/platform/chrome/manifest.json Wyświetl plik

@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "AlwaysKillSticky",
"version": "1.2.8",
"version": "1.2.9",
"description": "Get rid of sticky elements on websites - permanently!",
"author": "Said Achmiz",
"homepage_url": "https://git.sr.ht/~achmizs/AlwaysKillSticky.git",

+ 1
- 1
src/platform/firefox/manifest.json Wyświetl plik

@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "AlwaysKillSticky",
"version": "1.2.8",
"version": "1.2.9",
"description": "Get rid of sticky elements on websites - permanently!",
"author": "Said Achmiz",
"browser_specific_settings": {

Ładowanie…
Anuluj
Zapisz