PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.7
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.7
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 / lead-magnet / frontend.js

frontend.js in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.7, at blocks/lead-magnet/frontend.js

164 lines 6.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 wp.domReady(function () {
2 var _typoKeys = {
3 family: 'font-family', weight: 'font-weight', style: 'font-style',
4 decoration: 'text-decoration', transform: 'text-transform',
5 sizeDesktop: 'font-size-d', sizeTablet: 'font-size-t', sizeMobile: 'font-size-m',
6 lineHeightDesktop: 'line-height-d', lineHeightTablet: 'line-height-t', lineHeightMobile: 'line-height-m',
7 letterSpacing: 'letter-spacing', wordSpacing: 'word-spacing'
8 };
9 function typoCssVarsForEl(el, typo, prefix) {
10 if (!typo || typeof typo !== 'object') return;
11 Object.keys(typo).forEach(function (k) {
12 var v = typo[k]; if (v === '' || v == null) return;
13 var css = _typoKeys[k]; if (!css) return;
14 if ((k === 'letterSpacing' || k === 'wordSpacing') && typeof v === 'number') v = v + 'px';
15 if ((/^(sizeDesktop|sizeTablet|sizeMobile)$/).test(k) && typeof v === 'number') v = v + 'px';
16 el.style.setProperty(prefix + css, '' + v);
17 });
18 }
19
20 document.querySelectorAll('.bkbg-lgm-app').forEach(function (el) {
21 var a = JSON.parse(el.dataset.opts || '{}');
22 var isCentered = a.layout === 'centered';
23 var isLeft = a.layout === 'image-left';
24
25 var wrap = document.createElement('div');
26 wrap.className = 'bkbg-lgm-wrap';
27 wrap.style.background = a.bgColor || '#f8f5ff';
28 wrap.style.paddingTop = (a.paddingTop || 80) + 'px';
29 wrap.style.paddingBottom = (a.paddingBottom || 80) + 'px';
30
31 var inner = document.createElement('div');
32 inner.className = 'bkbg-lgm-inner bkbg-lgm-inner--' + (isCentered ? 'centered' : isLeft ? 'left' : 'right');
33 inner.style.maxWidth = (a.maxWidth || 1060) + 'px';
34 inner.style.setProperty('--lgm-accent', a.accentColor || '#7c3aed');
35
36 typoCssVarsForEl(inner, a.headingTypo, '--bkbg-lgm-h-');
37 typoCssVarsForEl(inner, a.subtextTypo, '--bkbg-lgm-st-');
38 typoCssVarsForEl(inner, a.buttonTypo, '--bkbg-lgm-bt-');
39
40 /* === Mockup image === */
41 var mockupWrap = document.createElement('div');
42 mockupWrap.className = 'bkbg-lgm-mockup-wrap';
43
44 if (a.imageUrl) {
45 var img = document.createElement('img');
46 img.src = a.imageUrl;
47 img.alt = a.imageAlt || '';
48 img.className = 'bkbg-lgm-mockup-img bkbg-lgm-mockup-img--' + (a.imageStyle || 'floating');
49 mockupWrap.appendChild(img);
50 } else {
51 var ph = document.createElement('div');
52 ph.className = 'bkbg-lgm-mockup-placeholder';
53 ph.textContent = '📥';
54 mockupWrap.appendChild(ph);
55 }
56 inner.appendChild(mockupWrap);
57
58 /* === Text panel === */
59 var textEl = document.createElement('div');
60 textEl.className = 'bkbg-lgm-text';
61 textEl.style.flex = '1';
62
63 if (a.showBadge && a.badge) {
64 var badge = document.createElement('div');
65 var badgePill = document.createElement('span');
66 badgePill.className = 'bkbg-lgm-badge';
67 badgePill.style.background = a.badgeBg || '#dcfce7';
68 badgePill.style.color = a.badgeColor || '#166534';
69 badgePill.innerHTML = a.badge;
70 badge.appendChild(badgePill);
71 textEl.appendChild(badge);
72 }
73
74 var heading = document.createElement('h2');
75 heading.className = 'bkbg-lgm-heading';
76 heading.style.color = a.headingColor || '#111827';
77 heading.innerHTML = a.heading || '';
78 textEl.appendChild(heading);
79
80 if (a.subtext) {
81 var sub = document.createElement('p');
82 sub.className = 'bkbg-lgm-subtext';
83 sub.style.color = a.subtextColor || '#4b5563';
84 sub.innerHTML = a.subtext;
85 textEl.appendChild(sub);
86 }
87
88 if (a.showBenefits && a.benefits && a.benefits.length) {
89 var ul = document.createElement('ul');
90 ul.className = 'bkbg-lgm-benefits';
91 a.benefits.forEach(function (b) {
92 if (!b.text) return;
93 var li = document.createElement('li');
94 li.className = 'bkbg-lgm-benefit';
95 li.style.color = a.benefitColor || '#374151';
96 var chk = document.createElement('span');
97 chk.className = 'bkbg-lgm-check';
98 chk.style.color = a.checkColor || '#7c3aed';
99 chk.textContent = '';
100 var txt = document.createElement('span');
101 txt.innerHTML = b.text;
102 li.appendChild(chk);
103 li.appendChild(txt);
104 ul.appendChild(li);
105 });
106 textEl.appendChild(ul);
107 }
108
109 if (a.formEnabled) {
110 var form = document.createElement('form');
111 form.className = 'bkbg-lgm-form';
112 if (a.formAction) { form.action = a.formAction; form.method = 'post'; }
113 form.addEventListener('submit', function (e) {
114 if (!a.formAction) {
115 e.preventDefault();
116 form.style.display = 'none';
117 successDiv.classList.add('bkbg-lgm-success--visible');
118 }
119 });
120
121 var row = document.createElement('div');
122 row.className = 'bkbg-lgm-form-row';
123
124 var input = document.createElement('input');
125 input.type = 'email';
126 input.name = 'email';
127 input.required = true;
128 input.placeholder = a.formPlaceholder || 'Enter your email address';
129 input.className = 'bkbg-lgm-input';
130
131 var submit = document.createElement('button');
132 submit.type = 'submit';
133 submit.className = 'bkbg-lgm-submit';
134 submit.style.background = a.ctaBg || '#7c3aed';
135 submit.style.color = a.ctaColor || '#ffffff';
136 submit.innerHTML = a.formSubmitLabel || 'Get instant access →';
137
138 row.appendChild(input);
139 row.appendChild(submit);
140 form.appendChild(row);
141
142 if (a.showPrivacy && a.privacyNote) {
143 var privacy = document.createElement('p');
144 privacy.className = 'bkbg-lgm-privacy';
145 privacy.style.color = a.privacyColor || '#9ca3af';
146 privacy.style.textAlign = isCentered ? 'center' : 'left';
147 privacy.innerHTML = a.privacyNote;
148 form.appendChild(privacy);
149 }
150
151 textEl.appendChild(form);
152
153 var successDiv = document.createElement('div');
154 successDiv.className = 'bkbg-lgm-success';
155 successDiv.innerHTML = '🎉 You\'re in! Check your email for the download link.';
156 textEl.appendChild(successDiv);
157 }
158
159 inner.appendChild(textEl);
160 wrap.appendChild(inner);
161 el.replaceWith(wrap);
162 });
163 });
164