nodebb-plugin-ezoic-infinite 1.9.2 → 1.9.3

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 +35 -30
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-ezoic-infinite",
3
- "version": "1.9.2",
3
+ "version": "1.9.3",
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * NodeBB Ezoic Infinite Ads — client.js v2.5.4
2
+ * NodeBB Ezoic Infinite Ads — client.js v2.6.0
3
3
  *
4
4
  * Architecture: proven v50 core + targeted improvements.
5
5
  * Ezoic API: showAds() + destroyPlaceholders() per official docs.
@@ -32,13 +32,13 @@
32
32
  BURST_COOLDOWN_MS: 200,
33
33
  BLOCK_DURATION_MS: 1_000,
34
34
  SHOW_TIMEOUT_MS: 4_500,
35
- SHOW_RELEASE_MS: 400,
36
- RECYCLE_DELAY_MS: 150,
35
+ SHOW_RELEASE_MS: 150,
36
+ RECYCLE_DELAY_MS: 50,
37
37
  UNCOLLAPSE_CHECK_MS: [500, 5_000],
38
38
  };
39
39
 
40
40
  const MAX_INSERTS_RUN = 6;
41
- const MAX_INFLIGHT = 4;
41
+ const MAX_INFLIGHT = 6;
42
42
  const MAX_BURST_STEPS = 8;
43
43
  const BURST_WINDOW_MS = 2_000;
44
44
 
@@ -562,28 +562,26 @@
562
562
  };
563
563
  const timer = setTimeout(release, TIMING.SHOW_TIMEOUT_MS);
564
564
 
565
- requestAnimationFrame(() => {
566
- try {
567
- if (isBlocked()) { clearTimeout(timer); return release(); }
568
- const ph = document.getElementById(`${PH_PREFIX}${id}`);
569
- if (!ph?.isConnected || isFilled(ph)) { clearTimeout(timer); return release(); }
570
- const t = now();
571
- if (t - (S.lastShow.get(id) ?? 0) < TIMING.SHOW_THROTTLE_MS) { clearTimeout(timer); return release(); }
572
- S.lastShow.set(id, t);
573
- const wrap = ph.closest(`.${WRAP_CLASS}`);
574
- try { wrap?.setAttribute(ATTR.SHOWN, String(t)); } catch (_) {}
565
+ try {
566
+ if (isBlocked()) { clearTimeout(timer); return release(); }
567
+ const ph = document.getElementById(`${PH_PREFIX}${id}`);
568
+ if (!ph?.isConnected || isFilled(ph)) { clearTimeout(timer); return release(); }
569
+ const t = now();
570
+ if (t - (S.lastShow.get(id) ?? 0) < TIMING.SHOW_THROTTLE_MS) { clearTimeout(timer); return release(); }
571
+ S.lastShow.set(id, t);
572
+ const wrap = ph.closest(`.${WRAP_CLASS}`);
573
+ try { wrap?.setAttribute(ATTR.SHOWN, String(t)); } catch (_) {}
575
574
 
576
- window.ezstandalone = window.ezstandalone || {};
577
- const ez = window.ezstandalone;
578
- const doShow = () => {
579
- try { ez.showAds(id); } catch (_) {}
580
- if (wrap) scheduleUncollapseChecks(wrap, id);
581
- scheduleEmptyCheck(id, t);
582
- setTimeout(() => { clearTimeout(timer); release(); }, TIMING.SHOW_RELEASE_MS);
583
- };
584
- typeof ez.cmd?.push === 'function' ? ez.cmd.push(doShow) : doShow();
585
- } catch (_) { clearTimeout(timer); release(); }
586
- });
575
+ window.ezstandalone = window.ezstandalone || {};
576
+ const ez = window.ezstandalone;
577
+ const doShow = () => {
578
+ try { ez.showAds(id); } catch (_) {}
579
+ if (wrap) scheduleUncollapseChecks(wrap, id);
580
+ scheduleEmptyCheck(id, t);
581
+ setTimeout(() => { clearTimeout(timer); release(); }, TIMING.SHOW_RELEASE_MS);
582
+ };
583
+ typeof ez.cmd?.push === 'function' ? ez.cmd.push(doShow) : doShow();
584
+ } catch (_) { clearTimeout(timer); release(); }
587
585
  }
588
586
 
589
587
  function scheduleEmptyCheck(id, showTs) {
@@ -854,7 +852,7 @@
854
852
  ensureTcfLocator(); protectAriaHidden();
855
853
  patchShowAds(); getIO(); ensureDomObserver();
856
854
  RETRY.count = 0; RETRY.scriptReloaded = false; RETRY.postReloadShown = false; RETRY.gen++;
857
- setTimeout(() => retryBoot(RETRY.gen), 250);
855
+ setTimeout(() => retryBoot(RETRY.gen), 100);
858
856
  requestBurst();
859
857
  });
860
858
  // action:ajaxify.contentLoaded et action:category.loaded ne passent pas par hooks → jQuery uniquement
@@ -898,6 +896,13 @@
898
896
  // ── Boot ───────────────────────────────────────────────────────────────────
899
897
 
900
898
  S.pageKey = pageKey();
899
+ (function () {
900
+ const _bootCfg = window.__nbbEzoicCfg;
901
+ if (_bootCfg && typeof _bootCfg === 'object' && !_bootCfg.excluded) {
902
+ S.cfg = _bootCfg;
903
+ initPools(_bootCfg);
904
+ }
905
+ }());
901
906
  ensureTcfLocator();
902
907
  protectAriaHidden();
903
908
  patchShowAds();
@@ -907,10 +912,10 @@
907
912
  bindScroll();
908
913
  bindResize();
909
914
  S.blockedUntil = 0;
910
- if (document.readyState === 'complete') {
911
- requestBurst();
915
+ if (document.readyState === 'loading') {
916
+ document.addEventListener('DOMContentLoaded', requestBurst, { once: true });
912
917
  } else {
913
- window.addEventListener('load', requestBurst, { once: true });
918
+ requestBurst();
914
919
  }
915
920
 
916
921
  // Retry boot: sa.min.js async + Cloudflare Rocket Loader + NodeBB SPA
@@ -982,6 +987,6 @@
982
987
  }
983
988
  setTimeout(() => retryBoot(gen), RETRY.count <= 4 ? 300 : 1000);
984
989
  }
985
- setTimeout(() => retryBoot(RETRY.gen), 250);
990
+ setTimeout(() => retryBoot(RETRY.gen), 100);
986
991
 
987
992
  })();