Add any-delay to timeout/interval boosters · gorhill/uBlock@001f5a6 (original) (raw)
`@@ -468,40 +468,40 @@
`
468
468
`// to match all.
`
469
469
`// delayMatcher
`
470
470
`// The delay matcher, an integer, defaults to 1000.
`
``
471
`` +
// Use * to match any delay.
``
471
472
`// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by
`
472
473
`// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up
`
473
474
`// 20 times. Speed up and down both cap at 50 times.
`
474
475
`/// nano-setInterval-booster.js
`
475
476
`/// alias nano-sib.js
`
476
477
`(function() {
`
477
``
`-
let needle = '{{1}}';
`
478
``
`-
let delay = parseInt('{{2}}', 10);
`
479
``
`-
let boost = parseFloat('{{3}}');
`
480
``
`-
if ( needle === '' || needle === '{{1}}' ) {
`
481
``
`-
needle = '.?';
`
482
``
`-
} else if ( needle.charAt(0) === '/' && needle.slice(-1) === '/' ) {
`
483
``
`-
needle = needle.slice(1, -1);
`
``
478
`+
let needleArg = '{{1}}';
`
``
479
`+
if ( needleArg === '{{1}}' ) { needleArg = ''; }
`
``
480
`+
let delayArg = '{{2}}';
`
``
481
`+
if ( delayArg === '{{2}}' ) { delayArg = ''; }
`
``
482
`+
let boostArg = '{{3}}';
`
``
483
`+
if ( boostArg === '{{3}}' ) { boostArg = ''; }
`
``
484
`+
if ( needleArg === '' ) {
`
``
485
`+
needleArg = '.?';
`
``
486
`+
} else if ( needleArg.charAt(0) === '/' && needleArg.slice(-1) === '/' ) {
`
``
487
`+
needleArg = needleArg.slice(1, -1);
`
484
488
`} else {
`
485
``
`-
needle = needle.replace(/[.*+?^${}()|[]\]/g, '\$&');
`
486
``
`-
}
`
487
``
`-
needle = new RegExp(needle);
`
488
``
`-
if ( isNaN(delay) || !isFinite(delay) ) {
`
489
``
`-
delay = 1000;
`
490
``
`-
}
`
491
``
`-
if ( isNaN(boost) || !isFinite(boost) ) {
`
492
``
`-
boost = 0.05;
`
``
489
`+
needleArg = needleArg.replace(/[.*+?^${}()|[]\]/g, '\$&');
`
493
490
`}
`
494
``
`-
if ( boost < 0.02 ) {
`
495
``
`-
boost = 0.02;
`
496
``
`-
}
`
497
``
`-
if ( boost > 50 ) {
`
498
``
`-
boost = 50;
`
499
``
`-
}
`
500
``
`-
window.setInterval = new Proxy(window.setInterval, {
`
``
491
`+
const reNeedle = new RegExp(needleArg);
`
``
492
`+
let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1;
`
``
493
`+
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
`
``
494
`+
let boost = parseFloat(boostArg);
`
``
495
`+
boost = isNaN(boost) === false && isFinite(boost)
`
``
496
`+
? Math.min(Math.max(boost, 0.02), 50)
`
``
497
`+
: 0.05;
`
``
498
`+
self.setInterval = new Proxy(self.setInterval, {
`
501
499
`apply: function(target, thisArg, args) {
`
502
``
`-
const a = args[0];
`
503
``
`-
const b = args[1];
`
504
``
`-
if ( b === delay && needle.test(a.toString()) ) {
`
``
500
`+
const [ a, b ] = args;
`
``
501
`+
if (
`
``
502
`+
(delay === -1 || b === delay) &&
`
``
503
`+
reNeedle.test(a.toString())
`
``
504
`+
) {
`
505
505
`args[1] = b * boost;
`
506
506
`}
`
507
507
`return target.apply(thisArg, args);
`
`@@ -519,40 +519,40 @@
`
519
519
`// to match all.
`
520
520
`// delayMatcher
`
521
521
`// The delay matcher, an integer, defaults to 1000.
`
``
522
`` +
// Use * to match any delay.
``
522
523
`// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by
`
523
524
`// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up
`
524
525
`// 20 times. Speed up and down both cap at 50 times.
`
525
526
`/// nano-setTimeout-booster.js
`
526
527
`/// alias nano-stb.js
`
527
528
`(function() {
`
528
``
`-
let needle = '{{1}}';
`
529
``
`-
let delay = parseInt('{{2}}', 10);
`
530
``
`-
let boost = parseFloat('{{3}}');
`
531
``
`-
if ( needle === '' || needle === '{{1}}' ) {
`
532
``
`-
needle = '.?';
`
533
``
`-
} else if ( needle.startsWith('/') && needle.endsWith('/') ) {
`
534
``
`-
needle = needle.slice(1, -1);
`
``
529
`+
let needleArg = '{{1}}';
`
``
530
`+
if ( needleArg === '{{1}}' ) { needleArg = ''; }
`
``
531
`+
let delayArg = '{{2}}';
`
``
532
`+
if ( delayArg === '{{2}}' ) { delayArg = ''; }
`
``
533
`+
let boostArg = '{{3}}';
`
``
534
`+
if ( boostArg === '{{3}}' ) { boostArg = ''; }
`
``
535
`+
if ( needleArg === '' ) {
`
``
536
`+
needleArg = '.?';
`
``
537
`+
} else if ( needleArg.charAt(0) === '/' && needleArg.slice(-1) === '/' ) {
`
``
538
`+
needleArg = needleArg.slice(1, -1);
`
535
539
`} else {
`
536
``
`-
needle = needle.replace(/[.*+?^${}()|[]\]/g, '\$&');
`
537
``
`-
}
`
538
``
`-
needle = new RegExp(needle);
`
539
``
`-
if ( isNaN(delay) || !isFinite(delay) ) {
`
540
``
`-
delay = 1000;
`
541
``
`-
}
`
542
``
`-
if ( isNaN(boost) || !isFinite(boost) ) {
`
543
``
`-
boost = 0.05;
`
``
540
`+
needleArg = needleArg.replace(/[.*+?^${}()|[]\]/g, '\$&');
`
544
541
`}
`
545
``
`-
if ( boost < 0.02 ) {
`
546
``
`-
boost = 0.02;
`
547
``
`-
}
`
548
``
`-
if ( boost > 50 ) {
`
549
``
`-
boost = 50;
`
550
``
`-
}
`
551
``
`-
window.setTimeout = new Proxy(window.setTimeout, {
`
``
542
`+
const reNeedle = new RegExp(needleArg);
`
``
543
`+
let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1;
`
``
544
`+
if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
`
``
545
`+
let boost = parseFloat(boostArg);
`
``
546
`+
boost = isNaN(boost) === false && isFinite(boost)
`
``
547
`+
? Math.min(Math.max(boost, 0.02), 50)
`
``
548
`+
: 0.05;
`
``
549
`+
self.setTimeout = new Proxy(self.setTimeout, {
`
552
550
`apply: function(target, thisArg, args) {
`
553
``
`-
const a = args[0];
`
554
``
`-
const b = args[1];
`
555
``
`-
if ( b === delay && needle.test(a.toString()) ) {
`
``
551
`+
const [ a, b ] = args;
`
``
552
`+
if (
`
``
553
`+
(delay === -1 || b === delay) &&
`
``
554
`+
reNeedle.test(a.toString())
`
``
555
`+
) {
`
556
556
`args[1] = b * boost;
`
557
557
`}
`
558
558
`return target.apply(thisArg, args);
`