PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.11
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.11
2.0.13 2.0.12 2.0.11 2.0.10 2.0.9 trunk 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8
blockenberg / blocks / value-proposition / frontend.js

frontend.js in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.11, at blocks/value-proposition/frontend.js

216 lines 10.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 'use strict';
3
4 function mk(tag, cls, styles) {
5 var d = document.createElement(tag);
6 if (cls) d.className = cls;
7 if (styles) Object.keys(styles).forEach(function (k) { d.style[k] = styles[k]; });
8 return d;
9 }
10 function mkText(tag, cls, text, styles) {
11 var d = mk(tag, cls, styles);
12 d.textContent = text;
13 return d;
14 }
15 function mkA(cls, href, styles) {
16 var a = mk('a', cls, styles);
17 a.href = href || '#';
18 return a;
19 }
20
21 function init() {
22 document.querySelectorAll('.bkbg-value-proposition-app').forEach(function (appEl) {
23 if (appEl.dataset.rendered) return;
24 appEl.dataset.rendered = '1';
25
26 var opts; try { opts = JSON.parse(appEl.dataset.opts || '{}'); } catch (e) { opts = {}; }
27
28 var o = {
29 eyebrow: opts.eyebrow || '',
30 showEyebrow: opts.showEyebrow !== false,
31 headline: opts.headline || '',
32 subheadline: opts.subheadline || '',
33 showSubheadline: opts.showSubheadline !== false,
34 benefits: opts.benefits || [],
35 badges: opts.badges || [],
36 showBadges: opts.showBadges !== false,
37 ctaText: opts.ctaText || 'Get Started',
38 ctaUrl: opts.ctaUrl || '#',
39 ctaSecondaryText: opts.ctaSecondaryText || '',
40 ctaSecondaryUrl: opts.ctaSecondaryUrl || '#',
41 showCta: opts.showCta !== false,
42 showSecondaryCta: opts.showSecondaryCta !== false,
43 layout: opts.layout || 'center',
44 benefitColumns: opts.benefitColumns || 2,
45 style: opts.style || 'clean',
46 borderRadius: opts.borderRadius !== undefined ? opts.borderRadius : 12,
47 gap: opts.gap !== undefined ? opts.gap : 20,
48 paddingV: opts.paddingV !== undefined ? opts.paddingV : 64,
49 paddingH: opts.paddingH !== undefined ? opts.paddingH : 32,
50 headlineFontSize: opts.headlineFontSize !== undefined ? opts.headlineFontSize : 40,
51 subFontSize: opts.subFontSize !== undefined ? opts.subFontSize : 18,
52 benefitTitleSize: opts.benefitTitleSize !== undefined ? opts.benefitTitleSize : 16,
53 benefitTextSize: opts.benefitTextSize !== undefined ? opts.benefitTextSize : 14,
54 bgColor: opts.bgColor || '#f8fafc',
55 accentColor: opts.accentColor || '#6366f1',
56 headlineColor: opts.headlineColor || '#0f172a',
57 subColor: opts.subColor || '#475569',
58 eyebrowColor: opts.eyebrowColor || '#6366f1',
59 benefitBg: opts.benefitBg || '#ffffff',
60 benefitBorderColor:opts.benefitBorderColor || '#e2e8f0',
61 benefitTitleColor:opts.benefitTitleColor || '#1e293b',
62 benefitTextColor: opts.benefitTextColor || '#64748b',
63 iconBg: opts.iconBg || '#ede9fe',
64 badgeBg: opts.badgeBg || '#ffffff',
65 badgeColor: opts.badgeColor || '#475569',
66 ctaBg: opts.ctaBg || '#6366f1',
67 ctaColor: opts.ctaColor || '#ffffff',
68 ctaSecondaryColor:opts.ctaSecondaryColor || '#6366f1'
69 };
70
71 var textAlign = o.layout === 'center' ? 'center' : 'left';
72 var justifyContent = o.layout === 'center' ? 'center' : 'flex-start';
73 var marginAuto = o.layout === 'center' ? 'auto' : '0';
74 var colTemplate = o.benefitColumns === 1 ? '1fr'
75 : o.benefitColumns === 3 ? '1fr 1fr 1fr'
76 : '1fr 1fr';
77
78 /* ── Outer block ─────────────────────────────────── */
79 var block = mk('div', 'bkbg-vp-block', {
80 background: o.bgColor,
81 padding: o.paddingV + 'px ' + o.paddingH + 'px',
82 textAlign: textAlign,
83 boxSizing: 'border-box'
84 });
85
86 /* ── Eyebrow ─────────────────────────────────────── */
87 if (o.showEyebrow && o.eyebrow) {
88 var eyebrow = mkText('div', 'bkbg-vp-eyebrow', o.eyebrow, {
89 background: o.accentColor + '18',
90 color: o.eyebrowColor
91 });
92 block.appendChild(eyebrow);
93 }
94
95 /* ── Headline ────────────────────────────────────── */
96 if (o.headline) {
97 var headline = mkText('h2', 'bkbg-vp-headline', o.headline, {
98 color: o.headlineColor,
99 maxWidth: '760px',
100 marginLeft: marginAuto,
101 marginRight: marginAuto
102 });
103 block.appendChild(headline);
104 }
105
106 /* ── Subheadline ─────────────────────────────────── */
107 if (o.showSubheadline && o.subheadline) {
108 var sub = mkText('p', 'bkbg-vp-sub', o.subheadline, {
109 color: o.subColor,
110 maxWidth: '620px',
111 marginLeft: marginAuto,
112 marginRight: marginAuto
113 });
114 block.appendChild(sub);
115 }
116
117 /* ── CTA buttons ─────────────────────────────────── */
118 if (o.showCta || o.showSecondaryCta) {
119 var ctas = mk('div', 'bkbg-vp-ctas', { justifyContent: justifyContent });
120
121 if (o.showCta && o.ctaText) {
122 var ctaA = mkA('bkbg-vp-cta-primary', o.ctaUrl, {
123 background: o.ctaBg,
124 color: o.ctaColor,
125 borderRadius: o.borderRadius + 'px'
126 });
127 ctaA.textContent = o.ctaText;
128 ctas.appendChild(ctaA);
129 }
130
131 if (o.showSecondaryCta && o.ctaSecondaryText) {
132 var ctaB = mkA('bkbg-vp-cta-secondary', o.ctaSecondaryUrl, { color: o.ctaSecondaryColor });
133 ctaB.textContent = o.ctaSecondaryText;
134 ctas.appendChild(ctaB);
135 }
136
137 block.appendChild(ctas);
138 }
139
140 /* ── Benefits grid ───────────────────────────────── */
141 if (o.benefits.length) {
142 var grid = mk('div', 'bkbg-vp-benefits', {
143 gridTemplateColumns: colTemplate,
144 gap: o.gap + 'px'
145 });
146
147 o.benefits.forEach(function (ben) {
148 var card = mk('div', 'bkbg-vp-benefit', {
149 background: o.benefitBg,
150 borderRadius: o.borderRadius + 'px'
151 });
152
153 if (o.style === 'card') {
154 card.style.boxShadow = '0 2px 12px rgba(0,0,0,0.07)';
155 card.style.border = '1px solid ' + o.benefitBorderColor;
156 } else if (o.style === 'bordered') {
157 card.style.border = '1px solid ' + o.benefitBorderColor;
158 }
159
160 if (ben.icon) {
161 var iconWrap = mkText('div', 'bkbg-vp-benefit-icon', ben.icon, { background: o.iconBg });
162 card.appendChild(iconWrap);
163 }
164
165 var title = mkText('div', 'bkbg-vp-benefit-title', ben.title || '', {
166 color: o.benefitTitleColor
167 });
168 card.appendChild(title);
169
170 if (ben.description) {
171 var desc = mkText('div', 'bkbg-vp-benefit-text', ben.description, {
172 color: o.benefitTextColor
173 });
174 card.appendChild(desc);
175 }
176
177 grid.appendChild(card);
178 });
179
180 block.appendChild(grid);
181 }
182
183 /* ── Badges ──────────────────────────────────────── */
184 if (o.showBadges && o.badges.length) {
185 var badgesRow = mk('div', 'bkbg-vp-badges', { justifyContent: justifyContent });
186
187 o.badges.forEach(function (badge) {
188 var b = mk('div', 'bkbg-vp-badge', {
189 background: o.badgeBg,
190 color: o.badgeColor,
191 borderColor: o.benefitBorderColor
192 });
193 if (badge.icon) {
194 var bIcon = document.createElement('span');
195 bIcon.textContent = badge.icon;
196 b.appendChild(bIcon);
197 }
198 var bText = document.createElement('span');
199 bText.textContent = badge.text || '';
200 b.appendChild(bText);
201 badgesRow.appendChild(b);
202 });
203
204 block.appendChild(badgesRow);
205 }
206
207 /* ── Insert ──────────────────────────────────────── */
208 appEl.parentNode.insertBefore(block, appEl);
209 appEl.style.display = 'none';
210 });
211 }
212
213 if (document.readyState !== 'loading') { init(); }
214 else { document.addEventListener('DOMContentLoaded', init); }
215 })();
216