nodebb-plugin-ezoic-infinite 1.5.97 → 1.5.98

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/public/client.js +36 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-ezoic-infinite",
3
- "version": "1.5.97",
3
+ "version": "1.5.98",
4
4
  "description": "Production-ready Ezoic infinite ads integration for NodeBB 4.x",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
package/public/client.js CHANGED
@@ -1344,15 +1344,34 @@ function buildOrdinalMap(items) {
1344
1344
 
1345
1345
 
1346
1346
 
1347
- // ===== V7 up-scroll purge for ezoic-ad-between =====
1347
+
1348
+
1349
+
1350
+ // ===== V7.1 soft up-scroll purge for ezoic-ad-between =====
1348
1351
  (function () {
1349
1352
  var lastY = window.pageYOffset || document.documentElement.scrollTop || 0;
1350
1353
  var ticking = false;
1354
+ var lastPurgeTs = 0;
1355
+ var PURGE_COOLDOWN_MS = 350;
1356
+
1357
+ function softPurgeBetweenWraps() {
1358
+ var now = Date.now();
1359
+ if (now - lastPurgeTs < PURGE_COOLDOWN_MS) return;
1360
+ lastPurgeTs = now;
1361
+
1362
+ var viewportTop = window.pageYOffset || document.documentElement.scrollTop || 0;
1363
+ var keepBuffer = 240; // garde les pubs proches du viewport pour éviter le "clignotement"
1351
1364
 
1352
- function purgeBetweenWraps() {
1353
1365
  try {
1354
1366
  document.querySelectorAll('.nodebb-ezoic-wrap.ezoic-ad-between').forEach(function (w) {
1355
- try { w.remove(); } catch (e) {}
1367
+ try {
1368
+ var r = w.getBoundingClientRect();
1369
+ var absBottom = viewportTop + r.bottom;
1370
+ // SOFT: supprimer uniquement les wraps largement au-dessus du viewport
1371
+ if (absBottom < (viewportTop - keepBuffer)) {
1372
+ w.remove();
1373
+ }
1374
+ } catch (e) {}
1356
1375
  });
1357
1376
  } catch (e) {}
1358
1377
  }
@@ -1363,9 +1382,12 @@ function buildOrdinalMap(items) {
1363
1382
  requestAnimationFrame(function () {
1364
1383
  var y = window.pageYOffset || document.documentElement.scrollTop || 0;
1365
1384
  var dy = y - lastY;
1366
- if (dy < -10) {
1367
- purgeBetweenWraps();
1385
+
1386
+ // uniquement quand on remonte franchement
1387
+ if (dy < -12) {
1388
+ softPurgeBetweenWraps();
1368
1389
  }
1390
+
1369
1391
  lastY = y;
1370
1392
  ticking = false;
1371
1393
  });
@@ -1373,21 +1395,19 @@ function buildOrdinalMap(items) {
1373
1395
 
1374
1396
  window.addEventListener('scroll', onScroll, { passive: true });
1375
1397
 
1376
- function purgeNearTop() {
1377
- try {
1378
- var y = window.pageYOffset || document.documentElement.scrollTop || 0;
1379
- if (y < 500) purgeBetweenWraps();
1380
- } catch (e) {}
1398
+ // nettoyage doux après chargement infini / navigation ajax
1399
+ function postLoadSoftPurge() {
1400
+ setTimeout(softPurgeBetweenWraps, 0);
1401
+ setTimeout(softPurgeBetweenWraps, 220);
1402
+ setTimeout(softPurgeBetweenWraps, 600);
1381
1403
  }
1382
1404
 
1383
1405
  if (window.jQuery) {
1384
- window.jQuery(window).on('action:ajaxify.end action:infiniteScroll.loaded', function () {
1385
- setTimeout(purgeNearTop, 0);
1386
- setTimeout(purgeNearTop, 250);
1387
- });
1406
+ window.jQuery(window).on('action:ajaxify.end action:infiniteScroll.loaded', postLoadSoftPurge);
1388
1407
  }
1389
1408
 
1390
- setTimeout(purgeNearTop, 0);
1409
+ // premier passage
1410
+ setTimeout(softPurgeBetweenWraps, 0);
1391
1411
  })();
1392
- // ===== /V7 =====
1412
+ // ===== /V7.1 =====
1393
1413