Dactyloidae/mobile/ios/Client/Assets/NoImageModeHelper.js
2026-06-26 21:04:09 -07:00

94 lines
2.6 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
(function() {
"use strict";
if (!window.__firefox__) {
Object.defineProperty(window, '__firefox__', {
enumerable: false,
configurable: false,
writable: false,
value: {}
});
}
Object.defineProperty(window.__firefox__, 'NoImageMode', {
enumerable: false,
configurable: false,
writable: false,
value: { enabled: false }
});
var className = "__firefox__NoImageMode";
function initializeStyleSheet () {
var noImageCSS = "*{background-image:none !important;}img,iframe{visibility:hidden !important;}";
var newCss = document.getElementById(className);
if (!newCss) {
var cssStyle = document.createElement("style");
cssStyle.type = "text/css";
cssStyle.id = className;
cssStyle.appendChild(document.createTextNode(noImageCSS));
document.documentElement.appendChild(cssStyle);
} else {
newCss.innerHTML = noImageCSS;
}
}
Object.defineProperty(window.__firefox__.NoImageMode, 'setEnabled', {
enumerable: false,
configurable: false,
writable: false,
value: function(enabled) {
if (enabled === window.__firefox__.NoImageMode.enabled) {
return;
}
window.__firefox__.NoImageMode.enabled = enabled;
if (enabled) {
initializeStyleSheet();
return;
}
// Disable no image mode //
// It would be useful to also revert the changes we've made, rather than just to prevent any more images from being loaded
var style = document.getElementById(className);
if (style) {
style.remove();
}
[].slice.apply(document.getElementsByTagName('img')).forEach(function(el) {
var src = el.src;
el.src = '';
el.src = src;
});
[].slice.apply(document.querySelectorAll('[style*="background"]')).forEach(function(el) {
var backgroundImage = el.style.backgroundImage;
el.style.backgroundImage = 'none';
el.style.backgroundImage = backgroundImage;
});
[].slice.apply(document.styleSheets).forEach(function(styleSheet) {
[].slice.apply(styleSheet.rules || []).forEach(function(rules) {
var style = rules.style;
if (!style) {
return;
}
var backgroundImage = style.backgroundImage;
style.backgroundImage = 'none';
style.backgroundImage = backgroundImage;
});
});
}
});
window.addEventListener("DOMContentLoaded", function (event) {
window.__firefox__.NoImageMode.setEnabled(window.__firefox__.NoImageMode.enabled);
});
})();