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 / newsletter-section / frontend.js

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

156 lines 8.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 var _typoKeys = {
3 family:'font-family', weight:'font-weight', style:'font-style',
4 transform:'text-transform', decoration:'text-decoration',
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 letterSpacingDesktop:'letter-spacing-d', letterSpacingTablet:'letter-spacing-t', letterSpacingMobile:'letter-spacing-m',
8 wordSpacingDesktop:'word-spacing-d', wordSpacingTablet:'word-spacing-t', wordSpacingMobile:'word-spacing-m'
9 };
10 var _typoUnits = { size:'sizeUnit', lineHeight:'lineHeightUnit', letterSpacing:'letterSpacingUnit', wordSpacing:'wordSpacingUnit' };
11 var _typoUnitDefaults = { size:'px', lineHeight:'', letterSpacing:'px', wordSpacing:'px' };
12 function typoCssVarsForEl(el, obj, prefix) {
13 if (!obj || typeof obj !== 'object') return;
14 Object.keys(_typoKeys).forEach(function (k) {
15 var v = obj[k]; if (v === undefined || v === '') return;
16 var prop = _typoKeys[k];
17 var base = k.replace(/Desktop|Tablet|Mobile/, '');
18 var uKey = _typoUnits[base];
19 if (uKey && typeof v === 'number') v = v + (obj[uKey] || _typoUnitDefaults[base] || '');
20 el.style.setProperty(prefix + prop, v);
21 });
22 }
23 function init() {
24 document.querySelectorAll('.bkbg-nls-app').forEach(function (el) {
25 if (el.dataset.rendered) return;
26 el.dataset.rendered = '1';
27
28 var opts;
29 try { opts = JSON.parse(el.dataset.opts || '{}'); } catch (e) { opts = {}; }
30
31 var o = Object.assign({
32 eyebrow: 'Weekly Newsletter', heading: 'Join 12,000+ Marketers Getting Smarter Every Week',
33 subtext: 'No fluff. Just actionable strategies, tools, and case studies every Tuesday.',
34 subscriberCount: '12,000+ subscribers', showSubscriberBadge: true,
35 formPlaceholder: 'Your email address', formSubmitLabel: 'Subscribe Free',
36 formAction: '#', successMessage: '🎉 You\'re in! Check your inbox for a confirmation.',
37 privacyNote: 'No spam. Unsubscribe anytime.',
38 benefits: ['Proven marketing strategies that actually work', 'Tool reviews and comparisons (unbiased)', 'Real-world case studies with numbers', 'Exclusive subscriber-only resources'],
39 showBenefits: true, sampleIssues: [], showSamples: true,
40 maxWidth: 1100, paddingTop: 100, paddingBottom: 100,
41 bgColor: '#0f172a', eyebrowColor: '#818cf8', headingColor: '#f8fafc',
42 subColor: '#94a3b8', benefitColor: '#cbd5e1', checkColor: '#22d3ee',
43 inputBg: '#1e293b', inputBorder: '#334155', inputColor: '#f1f5f9',
44 submitBg: '#6366f1', submitColor: '#ffffff', privacyColor: '#64748b',
45 issueBg: '#1e293b', issueBorder: '#334155', issueTitleColor: '#f1f5f9',
46 issueDateColor: '#818cf8', issueExcerptColor: '#94a3b8',
47 subscriberBadgeBg: '#1e293b', subscriberBadgeColor: '#94a3b8', accentColor: '#6366f1'
48 }, opts);
49
50 el.parentElement && (el.parentElement.style.background = o.bgColor);
51
52 var inner = document.createElement('div');
53 inner.className = 'bkbg-nls-inner';
54 inner.style.cssText = 'max-width:' + o.maxWidth + 'px;margin:0 auto;padding:' + o.paddingTop + 'px 24px ' + o.paddingBottom + 'px;';
55
56 /* Header */
57 var header = document.createElement('div');
58 header.className = 'bkbg-nls-header';
59
60 var ey = document.createElement('span'); ey.className = 'bkbg-nls-eyebrow'; ey.style.color = o.eyebrowColor; ey.textContent = o.eyebrow;
61 header.appendChild(ey);
62
63 if (o.showSubscriberBadge) {
64 var badge = document.createElement('div'); badge.className = 'bkbg-nls-subscriber-badge';
65 badge.style.cssText = 'background:' + o.subscriberBadgeBg + ';color:' + o.subscriberBadgeColor;
66 badge.innerHTML = '👥 ' + o.subscriberCount;
67 header.appendChild(badge);
68 }
69
70 var h2 = document.createElement('h2'); h2.className = 'bkbg-nls-heading'; h2.style.color = o.headingColor; h2.innerHTML = o.heading;
71 var sub = document.createElement('p'); sub.className = 'bkbg-nls-sub'; sub.style.color = o.subColor; sub.innerHTML = o.subtext;
72 header.appendChild(h2); header.appendChild(sub);
73 inner.appendChild(header);
74
75 /* Grid */
76 var grid = document.createElement('div'); grid.className = 'bkbg-nls-grid';
77
78 /* Left column */
79 var left = document.createElement('div');
80
81 if (o.showBenefits && o.benefits && o.benefits.length) {
82 var ul = document.createElement('ul'); ul.className = 'bkbg-nls-benefits';
83 o.benefits.forEach(function (b) {
84 var li = document.createElement('li'); li.className = 'bkbg-nls-benefit'; li.style.color = o.benefitColor;
85 var check = document.createElement('span'); check.className = 'bkbg-nls-check'; check.style.color = o.checkColor; check.textContent = '';
86 li.appendChild(check); li.appendChild(document.createTextNode(b));
87 ul.appendChild(li);
88 });
89 left.appendChild(ul);
90 }
91
92 var form = document.createElement('form');
93 form.className = 'bkbg-nls-form'; form.action = o.formAction; form.method = 'post';
94
95 var input = document.createElement('input');
96 input.type = 'email'; input.name = 'email'; input.required = true;
97 input.className = 'bkbg-nls-input'; input.placeholder = o.formPlaceholder;
98 input.style.cssText = 'background:' + o.inputBg + ';border-color:' + o.inputBorder + ';color:' + o.inputColor;
99
100 var submit = document.createElement('button');
101 submit.type = 'submit'; submit.className = 'bkbg-nls-submit';
102 submit.style.cssText = 'background:' + o.submitBg + ';color:' + o.submitColor;
103 submit.textContent = o.formSubmitLabel;
104
105 form.appendChild(input); form.appendChild(submit);
106 left.appendChild(form);
107
108 var privacy = document.createElement('p'); privacy.className = 'bkbg-nls-privacy'; privacy.style.color = o.privacyColor; privacy.textContent = o.privacyNote;
109 left.appendChild(privacy);
110
111 var success = document.createElement('p'); success.className = 'bkbg-nls-success';
112 success.style.cssText = 'background:' + o.accentColor + '22;color:' + o.headingColor;
113 success.textContent = o.successMessage;
114 left.appendChild(success);
115
116 form.addEventListener('submit', function (e) {
117 if (o.formAction === '#' || o.formAction === '') {
118 e.preventDefault(); form.style.display = 'none'; success.classList.add('visible');
119 }
120 });
121
122 grid.appendChild(left);
123
124 /* Right column — issues */
125 if (o.showSamples && o.sampleIssues && o.sampleIssues.length) {
126 var right = document.createElement('div');
127 var issuesLabel = document.createElement('span'); issuesLabel.className = 'bkbg-nls-issues-label'; issuesLabel.style.color = o.eyebrowColor; issuesLabel.textContent = 'Recent Issues';
128 right.appendChild(issuesLabel);
129
130 o.sampleIssues.forEach(function (issue) {
131 var card = document.createElement('div'); card.className = 'bkbg-nls-issue';
132 card.style.cssText = 'background:' + o.issueBg + ';border-color:' + o.issueBorder;
133 var date = document.createElement('p'); date.className = 'bkbg-nls-issue-date'; date.style.color = o.issueDateColor; date.textContent = issue.date;
134 var title = document.createElement('p'); title.className = 'bkbg-nls-issue-title'; title.style.color = o.issueTitleColor; title.textContent = issue.title;
135 var excerpt = document.createElement('p'); excerpt.className = 'bkbg-nls-issue-excerpt'; excerpt.style.color = o.issueExcerptColor; excerpt.textContent = issue.excerpt;
136 card.appendChild(date); card.appendChild(title); card.appendChild(excerpt);
137 right.appendChild(card);
138 });
139
140 grid.appendChild(right);
141 }
142
143 inner.appendChild(grid);
144 el.appendChild(inner);
145
146 if (el.parentElement) {
147 typoCssVarsForEl(el.parentElement, o.headingTypo, '--bkbg-nls-ht-');
148 typoCssVarsForEl(el.parentElement, o.subtextTypo, '--bkbg-nls-st-');
149 }
150 });
151 }
152
153 if (document.readyState !== 'loading') { init(); }
154 else { document.addEventListener('DOMContentLoaded', init); }
155 })();
156