From a9370a08517668b3e98cc1d0bd42df407a76c220 Mon Sep 17 00:00:00 2001 From: awy Date: Fri, 15 Aug 2025 03:01:21 +0300 Subject: ubo + private browsing patch --- .../js/scriptlets/load-large-media-interactive.js | 312 +++++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 data/extensions/uBlock0@raymondhill.net/js/scriptlets/load-large-media-interactive.js (limited to 'data/extensions/uBlock0@raymondhill.net/js/scriptlets/load-large-media-interactive.js') diff --git a/data/extensions/uBlock0@raymondhill.net/js/scriptlets/load-large-media-interactive.js b/data/extensions/uBlock0@raymondhill.net/js/scriptlets/load-large-media-interactive.js new file mode 100644 index 0000000..6158124 --- /dev/null +++ b/data/extensions/uBlock0@raymondhill.net/js/scriptlets/load-large-media-interactive.js @@ -0,0 +1,312 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +(( ) => { + +/******************************************************************************/ + +// This can happen +if ( typeof vAPI !== 'object' || vAPI.loadAllLargeMedia instanceof Function ) { + return; +} + +const largeMediaElementAttribute = 'data-' + vAPI.sessionId; +const largeMediaElementSelector = + ':root audio[' + largeMediaElementAttribute + '],\n' + + ':root img[' + largeMediaElementAttribute + '],\n' + + ':root picture[' + largeMediaElementAttribute + '],\n' + + ':root video[' + largeMediaElementAttribute + ']'; + +const isMediaElement = elem => + (/^(?:audio|img|picture|video)$/.test(elem.localName)); + +const isPlayableMediaElement = elem => + (/^(?:audio|video)$/.test(elem.localName)); + +/******************************************************************************/ + +const mediaNotLoaded = function(elem) { + switch ( elem.localName ) { + case 'audio': + case 'video': + return elem.readyState === 0 || elem.error !== null; + case 'img': { + if ( elem.naturalWidth !== 0 || elem.naturalHeight !== 0 ) { + break; + } + const style = window.getComputedStyle(elem); + // For some reason, style can be null with Pale Moon. + return style !== null ? + style.getPropertyValue('display') !== 'none' : + elem.offsetHeight !== 0 && elem.offsetWidth !== 0; + } + default: + break; + } + return false; +}; + +/******************************************************************************/ + +// For all media resources which have failed to load, trigger a reload. + +//