nodebb-plugin-ezoic-infinite 1.5.97 → 1.5.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/client.js +68 -26
package/package.json
CHANGED
package/public/client.js
CHANGED
|
@@ -1344,50 +1344,92 @@ function buildOrdinalMap(items) {
|
|
|
1344
1344
|
|
|
1345
1345
|
|
|
1346
1346
|
|
|
1347
|
-
// =====
|
|
1347
|
+
// ===== V8 between-cap-per-window =====
|
|
1348
1348
|
(function () {
|
|
1349
|
-
var lastY = window.pageYOffset || document.documentElement.scrollTop || 0;
|
|
1350
1349
|
var ticking = false;
|
|
1350
|
+
var lastRun = 0;
|
|
1351
|
+
var RUN_COOLDOWN = 220; // ms
|
|
1351
1352
|
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1353
|
+
// Keep at most N between-wraps per vertical band around viewport
|
|
1354
|
+
var BAND_PX = 900;
|
|
1355
|
+
var MAX_PER_BAND = 2;
|
|
1356
|
+
|
|
1357
|
+
function capBetweenWraps() {
|
|
1358
|
+
var now = Date.now();
|
|
1359
|
+
if (now - lastRun < RUN_COOLDOWN) return;
|
|
1360
|
+
lastRun = now;
|
|
1361
|
+
|
|
1362
|
+
var wraps;
|
|
1363
|
+
try { wraps = Array.prototype.slice.call(document.querySelectorAll('.nodebb-ezoic-wrap.ezoic-ad-between')); }
|
|
1364
|
+
catch (e) { return; }
|
|
1365
|
+
|
|
1366
|
+
if (!wraps.length) return;
|
|
1367
|
+
|
|
1368
|
+
var y = window.pageYOffset || document.documentElement.scrollTop || 0;
|
|
1369
|
+
var viewportTop = y;
|
|
1370
|
+
var viewportBottom = y + (window.innerHeight || document.documentElement.clientHeight || 0);
|
|
1371
|
+
|
|
1372
|
+
// Priorité: conserver ce qui est proche/visible, limiter le reste par bande
|
|
1373
|
+
var buckets = Object.create(null);
|
|
1374
|
+
|
|
1375
|
+
wraps.forEach(function (w) {
|
|
1376
|
+
try {
|
|
1377
|
+
var r = w.getBoundingClientRect();
|
|
1378
|
+
var absTop = y + r.top;
|
|
1379
|
+
var absBottom = y + r.bottom;
|
|
1380
|
+
|
|
1381
|
+
var inOrNearViewport = (absBottom >= viewportTop - 200) && (absTop <= viewportBottom + 200);
|
|
1382
|
+
var band = Math.floor(absTop / BAND_PX);
|
|
1383
|
+
var key = String(band);
|
|
1384
|
+
|
|
1385
|
+
if (!buckets[key]) buckets[key] = [];
|
|
1386
|
+
buckets[key].push({
|
|
1387
|
+
node: w,
|
|
1388
|
+
absTop: absTop,
|
|
1389
|
+
absBottom: absBottom,
|
|
1390
|
+
inOrNearViewport: inOrNearViewport
|
|
1391
|
+
});
|
|
1392
|
+
} catch (e) {}
|
|
1393
|
+
});
|
|
1394
|
+
|
|
1395
|
+
Object.keys(buckets).forEach(function (k) {
|
|
1396
|
+
var arr = buckets[k];
|
|
1397
|
+
// garde d'abord proche/visible, puis les plus récents (data-created), puis position
|
|
1398
|
+
arr.sort(function (a, b) {
|
|
1399
|
+
if (a.inOrNearViewport !== b.inOrNearViewport) return a.inOrNearViewport ? -1 : 1;
|
|
1400
|
+
var ac = parseInt((a.node.getAttribute('data-created') || '0'), 10);
|
|
1401
|
+
var bc = parseInt((b.node.getAttribute('data-created') || '0'), 10);
|
|
1402
|
+
if (ac !== bc) return bc - ac; // garder plus récent
|
|
1403
|
+
return a.absTop - b.absTop;
|
|
1356
1404
|
});
|
|
1357
|
-
|
|
1405
|
+
|
|
1406
|
+
for (var i = MAX_PER_BAND; i < arr.length; i++) {
|
|
1407
|
+
try { arr[i].node.remove(); } catch (e) {}
|
|
1408
|
+
}
|
|
1409
|
+
});
|
|
1358
1410
|
}
|
|
1359
1411
|
|
|
1360
|
-
function
|
|
1412
|
+
function scheduleCap() {
|
|
1361
1413
|
if (ticking) return;
|
|
1362
1414
|
ticking = true;
|
|
1363
1415
|
requestAnimationFrame(function () {
|
|
1364
|
-
|
|
1365
|
-
var dy = y - lastY;
|
|
1366
|
-
if (dy < -10) {
|
|
1367
|
-
purgeBetweenWraps();
|
|
1368
|
-
}
|
|
1369
|
-
lastY = y;
|
|
1416
|
+
try { capBetweenWraps(); } catch (e) {}
|
|
1370
1417
|
ticking = false;
|
|
1371
1418
|
});
|
|
1372
1419
|
}
|
|
1373
1420
|
|
|
1374
|
-
window.addEventListener('scroll',
|
|
1375
|
-
|
|
1376
|
-
function purgeNearTop() {
|
|
1377
|
-
try {
|
|
1378
|
-
var y = window.pageYOffset || document.documentElement.scrollTop || 0;
|
|
1379
|
-
if (y < 500) purgeBetweenWraps();
|
|
1380
|
-
} catch (e) {}
|
|
1381
|
-
}
|
|
1421
|
+
window.addEventListener('scroll', scheduleCap, { passive: true });
|
|
1422
|
+
window.addEventListener('resize', scheduleCap, { passive: true });
|
|
1382
1423
|
|
|
1383
1424
|
if (window.jQuery) {
|
|
1384
1425
|
window.jQuery(window).on('action:ajaxify.end action:infiniteScroll.loaded', function () {
|
|
1385
|
-
setTimeout(
|
|
1386
|
-
setTimeout(
|
|
1426
|
+
setTimeout(scheduleCap, 0);
|
|
1427
|
+
setTimeout(scheduleCap, 200);
|
|
1428
|
+
setTimeout(scheduleCap, 700);
|
|
1387
1429
|
});
|
|
1388
1430
|
}
|
|
1389
1431
|
|
|
1390
|
-
setTimeout(
|
|
1432
|
+
setTimeout(scheduleCap, 0);
|
|
1391
1433
|
})();
|
|
1392
|
-
// ===== /
|
|
1434
|
+
// ===== /V8 =====
|
|
1393
1435
|
|