nodebb-plugin-ezoic-infinite 1.8.31 → 1.8.32

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/style.css +78 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-ezoic-infinite",
3
- "version": "1.8.31",
3
+ "version": "1.8.32",
4
4
  "description": "Production-ready Ezoic infinite ads integration for NodeBB 4.x",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
package/public/style.css CHANGED
@@ -1,7 +1,10 @@
1
1
  /*
2
- * NodeBB Ezoic Infinite Ads — style.css (v20.3)
3
- * Objectif: comportement "v50-like" (pas de rognage des pubs),
4
- * tout en gardant anti-sticky + gestion .is-empty.
2
+ * NodeBB Ezoic Infinite Ads — style.css (v20.5)
3
+ * Objectif:
4
+ * - comportement v50-like (pas de rognage involontaire)
5
+ * - neutraliser les wrappers Ezoic "adaptive/multi" (970px inline) sur mobile
6
+ * - éviter l'affichage multi-annonces (forcer 1 annonce / ligne)
7
+ * - garder anti-sticky + gestion .is-empty
5
8
  */
6
9
 
7
10
  /* ── Wrapper ──────────────────────────────────────────────────────────────── */
@@ -11,10 +14,11 @@
11
14
  margin: 0 !important;
12
15
  padding: 0 !important;
13
16
 
14
- /* IMPORTANT (v50-like): ne pas couper les ads rendues */
17
+ /* Ne pas couper les ads rendues */
15
18
  overflow: visible;
16
19
 
17
- contain: layout style;
20
+ /* On évite les effets de layout imprévus avec certains thèmes */
21
+ contain: none;
18
22
  }
19
23
 
20
24
  /* Placeholder : 1px minimum pour rester visible par l'IntersectionObserver */
@@ -26,9 +30,9 @@
26
30
  max-width: 100%;
27
31
  }
28
32
 
29
- /* ── Ciblage précis des nœuds Ezoic dans nos wraps ───────────────────────── */
33
+ /* ── Ciblage précis des nœuds Ezoic / Google dans nos wraps ──────────────── */
30
34
 
31
- /* Supprime le gap "baseline" sous les iframes (via block + line-height/font-size) */
35
+ /* Supprime le gap "baseline" sous les iframes */
32
36
  .nodebb-ezoic-wrap iframe,
33
37
  .nodebb-ezoic-wrap div[id$="__container__"] iframe {
34
38
  display: block !important;
@@ -36,24 +40,22 @@
36
40
  font-size: 0 !important;
37
41
  }
38
42
 
39
- /* Container Google/Ezoic: surtout NE PAS overflow:hidden (sinon rognage) */
43
+ /* Container Google/Ezoic : surtout PAS overflow hidden (sinon rognage) */
40
44
  .nodebb-ezoic-wrap div[id$="__container__"],
41
45
  .nodebb-ezoic-wrap [id^="google_ads_iframe_"][id$="__container__"] {
42
46
  display: block !important;
43
47
  line-height: 0 !important;
44
48
  font-size: 0 !important;
45
-
46
- /* comportement v50-like */
47
49
  overflow: visible !important;
48
50
 
49
- /* centrage sans casser les inline styles */
50
51
  margin-left: auto !important;
51
52
  margin-right: auto !important;
52
- max-width: 100% !important;
53
+
53
54
  box-sizing: border-box !important;
55
+ max-width: 100% !important;
54
56
  }
55
57
 
56
- /* Le conteneur Ezoic : ne pas écraser la hauteur calculée, centrer, ne pas rogner */
58
+ /* Conteneur Ezoic : ne pas casser la hauteur, centrer */
57
59
  .nodebb-ezoic-wrap .ezoic-ad,
58
60
  .nodebb-ezoic-wrap span.ezoic-ad {
59
61
  display: block !important;
@@ -64,12 +66,11 @@
64
66
  min-height: unset !important;
65
67
  max-height: none !important;
66
68
 
67
- /* On borne visuellement si possible, sans couper */
68
- max-width: 100% !important;
69
69
  box-sizing: border-box !important;
70
+ max-width: 100% !important;
70
71
  }
71
72
 
72
- /* Iframes : centrées, ne pas forcer width:auto (laisse Ezoic/Google décider) */
73
+ /* Iframes : centrées, bornées */
73
74
  .nodebb-ezoic-wrap iframe {
74
75
  margin-left: auto !important;
75
76
  margin-right: auto !important;
@@ -88,10 +89,6 @@
88
89
  }
89
90
 
90
91
  /* ── État vide ────────────────────────────────────────────────────────────── */
91
- /*
92
- Ajouté après le délai d'empty-check si aucun fill détecté.
93
- Collapse à 1px : réserve minimale, reste observable par l'IO.
94
- */
95
92
  .nodebb-ezoic-wrap.is-empty {
96
93
  display: block !important;
97
94
  height: 1px !important;
@@ -99,11 +96,10 @@
99
96
  max-height: 1px !important;
100
97
  margin: 0 !important;
101
98
  padding: 0 !important;
102
- overflow: hidden !important; /* ici OK, car vide */
99
+ overflow: hidden !important;
103
100
  }
104
101
 
105
- /* Anti-faux-empty : si la pub est réellement là, on annule le collapse
106
- (support moderne; si non supporté, le JS enlève .is-empty) */
102
+ /* Anti-faux-empty : si une pub est là, on ne collapse pas */
107
103
  .nodebb-ezoic-wrap.is-empty:has(iframe),
108
104
  .nodebb-ezoic-wrap.is-empty:has([data-google-container-id]),
109
105
  .nodebb-ezoic-wrap.is-empty:has(div[id$="__container__"]) {
@@ -113,6 +109,65 @@
113
109
  overflow: visible !important;
114
110
  }
115
111
 
112
+ /* ── Fix: Ezoic "adaptive/multi" qui force 970px & multi-annonces ────────── */
113
+ /*
114
+ Certains placements "adaptive/multi" gardent des inline styles:
115
+ width/min-width: 970px + display:flex + plusieurs blocs 300x250.
116
+ Ce n'est pas souhaité -> on:
117
+ - neutralise les largeurs forcées
118
+ - empêche l'affichage multi en ne gardant que le 1er slot rendu
119
+ - force une mise en page "1 annonce centrée"
120
+ */
121
+
122
+ /* Neutralise les inline width/min-width (970px) sur ces wrappers */
123
+ .nodebb-ezoic-wrap .ezoic-ad-adaptive,
124
+ .nodebb-ezoic-wrap .adtester-container,
125
+ .nodebb-ezoic-wrap [class*="Content-multi-"] {
126
+ width: auto !important;
127
+ min-width: 0 !important;
128
+ max-width: 100% !important;
129
+ box-sizing: border-box !important;
130
+ }
131
+
132
+ /* Ces wrappers sont souvent en flex -> on les remet en bloc centrable */
133
+ .nodebb-ezoic-wrap .ezoic-ad-adaptive,
134
+ .nodebb-ezoic-wrap .adtester-container {
135
+ display: block !important;
136
+ margin-left: auto !important;
137
+ margin-right: auto !important;
138
+ }
139
+
140
+ /* Si Ezoic met plusieurs "Content-multi-XXX" dans le même placeholder:
141
+ on masque toutes les occurrences sauf la première. */
142
+ .nodebb-ezoic-wrap [class*="Content-multi-"] ~ [class*="Content-multi-"] {
143
+ display: none !important;
144
+ }
145
+
146
+ /* Si plusieurs containers Google sont présents (multi slots), on masque tout sauf le premier */
147
+ .nodebb-ezoic-wrap div[id$="__container__"] ~ div[id$="__container__"] {
148
+ display: none !important;
149
+ }
150
+
151
+ /* ── Mobile: éviter tout débordement horizontal ──────────────────────────── */
152
+ @media (max-width: 767px) {
153
+ /* On s'assure que les wrappers ne gardent pas de min-width forcé */
154
+ .nodebb-ezoic-wrap .ezoic-ad,
155
+ .nodebb-ezoic-wrap span.ezoic-ad,
156
+ .nodebb-ezoic-wrap .ezoic-ad-adaptive,
157
+ .nodebb-ezoic-wrap .adtester-container,
158
+ .nodebb-ezoic-wrap [class*="Content-multi-"] {
159
+ min-width: 0 !important;
160
+ width: auto !important;
161
+ max-width: 100% !important;
162
+ }
163
+
164
+ /* Si un thème parent clippe encore, on préfère un scroll interne au rognage */
165
+ .nodebb-ezoic-wrap > [id^="ezoic-pub-ad-placeholder-"] {
166
+ overflow-x: auto !important;
167
+ -webkit-overflow-scrolling: touch;
168
+ }
169
+ }
170
+
116
171
  /* ── Ezoic global (hors de nos wraps) ────────────────────────────────────── */
117
172
  .ezoic-ad {
118
173
  margin: 0 !important;