mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
Compare commits
7 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e57cf185b6 | ||
|
|
321aec41a7 | ||
|
|
1552f9dd84 | ||
|
|
c701406fe3 | ||
|
|
5d40669b64 | ||
|
|
f069323c8e | ||
|
|
32d6e863c8 |
4 changed files with 45 additions and 110 deletions
|
|
@ -1365,6 +1365,10 @@ function jsonPruneXhrResponse(
|
||||||
if ( xhrDetails === undefined ) {
|
if ( xhrDetails === undefined ) {
|
||||||
return innerResponse;
|
return innerResponse;
|
||||||
}
|
}
|
||||||
|
if ( xhrDetails.latestResponseLength != innerResponse.length ) {
|
||||||
|
xhrDetails.response = undefined;
|
||||||
|
xhrDetails.latestResponseLength = innerResponse.length;
|
||||||
|
}
|
||||||
if ( xhrDetails.response !== undefined ) {
|
if ( xhrDetails.response !== undefined ) {
|
||||||
return xhrDetails.response;
|
return xhrDetails.response;
|
||||||
}
|
}
|
||||||
|
|
@ -1467,7 +1471,7 @@ function nanoSetIntervalBooster(
|
||||||
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
|
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
|
||||||
let boost = parseFloat(boostArg);
|
let boost = parseFloat(boostArg);
|
||||||
boost = isNaN(boost) === false && isFinite(boost)
|
boost = isNaN(boost) === false && isFinite(boost)
|
||||||
? Math.min(Math.max(boost, 0.02), 50)
|
? Math.min(Math.max(boost, 0.001), 50)
|
||||||
: 0.05;
|
: 0.05;
|
||||||
self.setInterval = new Proxy(self.setInterval, {
|
self.setInterval = new Proxy(self.setInterval, {
|
||||||
apply: function(target, thisArg, args) {
|
apply: function(target, thisArg, args) {
|
||||||
|
|
@ -1520,7 +1524,7 @@ function nanoSetTimeoutBooster(
|
||||||
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
|
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
|
||||||
let boost = parseFloat(boostArg);
|
let boost = parseFloat(boostArg);
|
||||||
boost = isNaN(boost) === false && isFinite(boost)
|
boost = isNaN(boost) === false && isFinite(boost)
|
||||||
? Math.min(Math.max(boost, 0.02), 50)
|
? Math.min(Math.max(boost, 0.001), 50)
|
||||||
: 0.05;
|
: 0.05;
|
||||||
self.setTimeout = new Proxy(self.setTimeout, {
|
self.setTimeout = new Proxy(self.setTimeout, {
|
||||||
apply: function(target, thisArg, args) {
|
apply: function(target, thisArg, args) {
|
||||||
|
|
@ -2477,74 +2481,6 @@ function golemDe() {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
builtinScriptlets.push({
|
|
||||||
name: 'adfly-defuser.js',
|
|
||||||
fn: adflyDefuser,
|
|
||||||
});
|
|
||||||
// https://github.com/reek/anti-adblock-killer/issues/3774#issuecomment-348536138
|
|
||||||
// https://github.com/uBlockOrigin/uAssets/issues/883
|
|
||||||
function adflyDefuser() {
|
|
||||||
// Based on AdsBypasser
|
|
||||||
// License:
|
|
||||||
// https://github.com/adsbypasser/adsbypasser/blob/master/LICENSE
|
|
||||||
var isDigit = /^\d$/;
|
|
||||||
var handler = function(encodedURL) {
|
|
||||||
var var1 = "", var2 = "", i;
|
|
||||||
for (i = 0; i < encodedURL.length; i++) {
|
|
||||||
if (i % 2 === 0) {
|
|
||||||
var1 = var1 + encodedURL.charAt(i);
|
|
||||||
} else {
|
|
||||||
var2 = encodedURL.charAt(i) + var2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var data = (var1 + var2).split("");
|
|
||||||
for (i = 0; i < data.length; i++) {
|
|
||||||
if (isDigit.test(data[i])) {
|
|
||||||
for (var ii = i + 1; ii < data.length; ii++) {
|
|
||||||
if (isDigit.test(data[ii])) {
|
|
||||||
var temp = parseInt(data[i],10) ^ parseInt(data[ii],10);
|
|
||||||
if (temp < 10) {
|
|
||||||
data[i] = temp.toString();
|
|
||||||
}
|
|
||||||
i = ii;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data = data.join("");
|
|
||||||
var decodedURL = window.atob(data).slice(16, -16);
|
|
||||||
window.stop();
|
|
||||||
window.onbeforeunload = null;
|
|
||||||
window.location.href = decodedURL;
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
var val;
|
|
||||||
var flag = true;
|
|
||||||
window.Object.defineProperty(window, "ysmm", {
|
|
||||||
configurable: false,
|
|
||||||
set: function(value) {
|
|
||||||
if (flag) {
|
|
||||||
flag = false;
|
|
||||||
try {
|
|
||||||
if (typeof value === "string") {
|
|
||||||
handler(value);
|
|
||||||
}
|
|
||||||
} catch (err) { }
|
|
||||||
}
|
|
||||||
val = value;
|
|
||||||
},
|
|
||||||
get: function() {
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
window.console.error("Failed to set up Adfly bypasser!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
builtinScriptlets.push({
|
builtinScriptlets.push({
|
||||||
name: 'disable-newtab-links.js',
|
name: 'disable-newtab-links.js',
|
||||||
fn: disableNewtabLinks,
|
fn: disableNewtabLinks,
|
||||||
|
|
@ -3779,7 +3715,11 @@ function trustedReplaceXhrResponse(
|
||||||
return textAfter;
|
return textAfter;
|
||||||
}
|
}
|
||||||
get responseText() {
|
get responseText() {
|
||||||
return this.response;
|
const response = this.response;
|
||||||
|
if ( typeof response !== 'string' ) {
|
||||||
|
return super.responseText;
|
||||||
|
}
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
dist/version
vendored
2
dist/version
vendored
|
|
@ -1 +1 @@
|
||||||
1.52.0
|
1.52.2
|
||||||
|
|
|
||||||
|
|
@ -720,7 +720,7 @@ body:not([data-more*="e"]) [data-more="e"] {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* horizontally-constrained viewport */
|
/* horizontally-constrained viewport */
|
||||||
:root.portrait body {
|
:root.portrait:not(.desktop) body {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3436,35 +3436,6 @@ class ExtSelectorCompiler {
|
||||||
return out.join('');
|
return out.join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
astAppendPart(part, out) {
|
|
||||||
const s = this.astSerializePart(part);
|
|
||||||
if ( s === undefined ) { return false; }
|
|
||||||
const { data } = part;
|
|
||||||
switch ( data.type ) {
|
|
||||||
case 'Combinator':
|
|
||||||
if ( out.length === 0 ) {
|
|
||||||
if ( s !== ' ' ) {
|
|
||||||
out.push(s, ' ');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out.push(' ');
|
|
||||||
if ( s !== ' ' ) {
|
|
||||||
out.push(s, ' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
// csstree parses `.promoted*` as valid
|
|
||||||
case 'TypeSelector':
|
|
||||||
if ( s === '*' && out.length !== 0 ) {
|
|
||||||
const before = out[out.length-1];
|
|
||||||
if ( before.endsWith(' ') === false ) { return false; }
|
|
||||||
}
|
|
||||||
out.push(s);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
astSerialize(parts, plainCSS = true) {
|
astSerialize(parts, plainCSS = true) {
|
||||||
const out = [];
|
const out = [];
|
||||||
for ( const part of parts ) {
|
for ( const part of parts ) {
|
||||||
|
|
@ -3482,10 +3453,23 @@ class ExtSelectorCompiler {
|
||||||
out.push(s);
|
out.push(s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'Combinator':
|
case 'Combinator': {
|
||||||
case 'TypeSelector':
|
const s = this.astSerializePart(part);
|
||||||
if ( this.astAppendPart(part, out) === false ) { return; }
|
if ( s === undefined ) { return; }
|
||||||
|
if ( out.length !== 0 ) { out.push(' '); }
|
||||||
|
if ( s !== ' ' ) { out.push(s, ' '); }
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case 'TypeSelector': {
|
||||||
|
const s = this.astSerializePart(part);
|
||||||
|
if ( s === undefined ) { return; }
|
||||||
|
if ( s === '*' && out.length !== 0 ) {
|
||||||
|
const before = out[out.length-1];
|
||||||
|
if ( before.endsWith(' ') === false ) { return; }
|
||||||
|
}
|
||||||
|
out.push(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'Raw':
|
case 'Raw':
|
||||||
if ( plainCSS ) { return; }
|
if ( plainCSS ) { return; }
|
||||||
out.push(this.astSerializePart(part));
|
out.push(this.astSerializePart(part));
|
||||||
|
|
@ -3509,6 +3493,7 @@ class ExtSelectorCompiler {
|
||||||
const out = { selector: '' };
|
const out = { selector: '' };
|
||||||
const prelude = [];
|
const prelude = [];
|
||||||
const tasks = [];
|
const tasks = [];
|
||||||
|
let startOfSelector = true;
|
||||||
for ( const part of parts ) {
|
for ( const part of parts ) {
|
||||||
if ( out.action !== undefined ) { return; }
|
if ( out.action !== undefined ) { return; }
|
||||||
const { data } = part;
|
const { data } = part;
|
||||||
|
|
@ -3534,13 +3519,20 @@ class ExtSelectorCompiler {
|
||||||
case 'PseudoClassSelector':
|
case 'PseudoClassSelector':
|
||||||
case 'PseudoElementSelector':
|
case 'PseudoElementSelector':
|
||||||
case 'TypeSelector': {
|
case 'TypeSelector': {
|
||||||
const component = this.astSerializePart(part);
|
const s = this.astSerializePart(part);
|
||||||
if ( component === undefined ) { return; }
|
if ( s === undefined ) { return; }
|
||||||
prelude.push(component);
|
prelude.push(s);
|
||||||
|
startOfSelector = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'Combinator': {
|
case 'Combinator': {
|
||||||
if ( this.astAppendPart(part, prelude) === false ) { return; }
|
const s = this.astSerializePart(part);
|
||||||
|
if ( s === undefined ) { return; }
|
||||||
|
if ( startOfSelector === false || prelude.length !== 0 ) {
|
||||||
|
prelude.push(' ');
|
||||||
|
}
|
||||||
|
if ( s !== ' ' ) { prelude.push(s, ' '); }
|
||||||
|
startOfSelector = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'ProceduralSelector': {
|
case 'ProceduralSelector': {
|
||||||
|
|
@ -3557,14 +3549,17 @@ class ExtSelectorCompiler {
|
||||||
const args = this.compileArgumentAst(data.name, part.args);
|
const args = this.compileArgumentAst(data.name, part.args);
|
||||||
if ( args === undefined ) { return; }
|
if ( args === undefined ) { return; }
|
||||||
tasks.push([ data.name, args ]);
|
tasks.push([ data.name, args ]);
|
||||||
|
startOfSelector = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'Selector':
|
case 'Selector':
|
||||||
if ( prelude.length !== 0 ) {
|
if ( prelude.length !== 0 ) {
|
||||||
prelude.push(', ');
|
prelude.push(', ');
|
||||||
}
|
}
|
||||||
|
startOfSelector = true;
|
||||||
break;
|
break;
|
||||||
case 'SelectorList':
|
case 'SelectorList':
|
||||||
|
startOfSelector = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
|
@ -3687,7 +3682,7 @@ class ExtSelectorCompiler {
|
||||||
case 'has': {
|
case 'has': {
|
||||||
let r = this.astCompile(parts, { noaction: true });
|
let r = this.astCompile(parts, { noaction: true });
|
||||||
if ( typeof r === 'string' ) {
|
if ( typeof r === 'string' ) {
|
||||||
r = { selector: r.replace(/^\s*:scope\s*/, ' ') };
|
r = { selector: r.replace(/^\s*:scope\s*/, '') };
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue