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

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

199 lines 9.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 var _typoKeys = {
5 family:'font-family', weight:'font-weight', style:'font-style',
6 decoration:'text-decoration', transform:'text-transform',
7 sizeDesktop:'font-size-d', sizeTablet:'font-size-t', sizeMobile:'font-size-m',
8 lineHeightDesktop:'line-height-d', lineHeightTablet:'line-height-t', lineHeightMobile:'line-height-m',
9 letterSpacingDesktop:'letter-spacing-d', letterSpacingTablet:'letter-spacing-t', letterSpacingMobile:'letter-spacing-m',
10 wordSpacingDesktop:'word-spacing-d', wordSpacingTablet:'word-spacing-t', wordSpacingMobile:'word-spacing-m'
11 };
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];
16 if (v === undefined || v === '' || v === null) return;
17 if (k === 'sizeDesktop' || k === 'sizeTablet' || k === 'sizeMobile') v = v + (obj.sizeUnit || 'px');
18 else if (k === 'lineHeightDesktop' || k === 'lineHeightTablet' || k === 'lineHeightMobile') v = v + (obj.lineHeightUnit || '');
19 else if (k === 'letterSpacingDesktop' || k === 'letterSpacingTablet' || k === 'letterSpacingMobile') v = v + (obj.letterSpacingUnit || 'px');
20 else if (k === 'wordSpacingDesktop' || k === 'wordSpacingTablet' || k === 'wordSpacingMobile') v = v + (obj.wordSpacingUnit || 'px');
21 el.style.setProperty(prefix + _typoKeys[k], String(v));
22 });
23 }
24
25 document.querySelectorAll('.bkbg-rss-app').forEach(function (root) {
26 var a;
27 try { a = JSON.parse(root.dataset.opts || '{}'); } catch (e) { return; }
28
29 var bg = a.bgColor || '#ffffff';
30 var ptop = a.paddingTop !== undefined ? a.paddingTop : 80;
31 var pbot = a.paddingBottom !== undefined ? a.paddingBottom : 80;
32 var maxW = a.maxWidth || 1100;
33 var metrics = a.metrics || [];
34 var metricStyle = a.metricStyle || 'cards';
35
36 root.style.backgroundColor = bg;
37 root.style.paddingTop = ptop + 'px';
38 root.style.paddingBottom = pbot + 'px';
39
40 typoCssVarsForEl(root, a.headingTypo, '--bkrs-ht-');
41 typoCssVarsForEl(root, a.bodyTypo, '--bkrs-bt-');
42
43 var inner = document.createElement('div');
44 inner.className = 'bkbg-rss-inner';
45 inner.style.maxWidth = maxW + 'px';
46
47 // === Header ===
48 var header = document.createElement('div');
49 header.style.textAlign = 'center';
50 header.style.marginBottom = '48px';
51
52 if (a.showEyebrow !== false && a.eyebrow) {
53 var eyebrow = document.createElement('span');
54 eyebrow.style.cssText = 'display:inline-block;background:' + (a.eyebrowBg || '#f3f0ff') + ';color:' + (a.eyebrowColor || '#7c3aed') + ';font-weight:700;font-size:12px;letter-spacing:0.08em;text-transform:uppercase;padding:5px 14px;border-radius:999px;margin-bottom:16px;';
55 eyebrow.textContent = a.eyebrow;
56 header.appendChild(eyebrow);
57 }
58
59 var heading = document.createElement('h2');
60 heading.className = 'bkbg-rss-heading';
61 heading.style.cssText = 'color:' + (a.headingColor || '#111827') + ';margin:0 0 16px;';
62 heading.innerHTML = a.heading || '';
63 header.appendChild(heading);
64
65 if (a.showSubtext !== false && a.subtext) {
66 var subtext = document.createElement('p');
67 subtext.className = 'bkbg-rss-subtext';
68 subtext.style.cssText = 'color:' + (a.subtextColor || '#6b7280') + ';margin:0 auto;max-width:680px;';
69 subtext.innerHTML = a.subtext;
70 header.appendChild(subtext);
71 }
72
73 inner.appendChild(header);
74
75 // === Metrics grid ===
76 var grid = document.createElement('div');
77 grid.className = 'bkbg-rss-metrics';
78 var cols = Math.min(metrics.length, 3);
79 grid.style.cssText = 'grid-template-columns:repeat(' + cols + ',1fr);margin-bottom:' + (a.showCaseStudy ? 40 : 0) + 'px;';
80
81 metrics.forEach(function (m) {
82 var isDarkCard = metricStyle === 'dark';
83 var cardBgVal = isDarkCard ? '#1f2937' : (metricStyle === 'cards' ? (a.metricCardBg || '#f9fafb') : 'transparent');
84 var borderStr = (metricStyle === 'borderless') ? 'none' : ('1px solid ' + (a.metricCardBorder || '#e5e7eb'));
85
86 var card = document.createElement('div');
87 card.className = 'bkbg-rss-metric-card' + (isDarkCard ? ' bkbg-rss-metric-card--dark' : '') + (metricStyle === 'borderless' ? ' bkbg-rss-metric-card--borderless' : '');
88 card.style.cssText = 'background:' + cardBgVal + ';border:' + borderStr + ';';
89
90 // Change badge
91 var isDown = m.direction === 'down';
92 var changeBadge = document.createElement('span');
93 changeBadge.className = 'bkbg-rss-change';
94 changeBadge.style.cssText = 'background:' + (isDown ? (a.changeDownBg || '#fffbeb') : (a.changeUpBg || '#f0fdf4')) + ';color:' + (isDown ? (a.changeDownColor || '#b45309') : (a.changeUpColor || '#15803d')) + ';';
95 changeBadge.textContent = (isDown ? '' : '') + m.change;
96 card.appendChild(changeBadge);
97
98 // Before → After
99 var valRow = document.createElement('div');
100 valRow.className = 'bkbg-rss-values';
101
102 var beforeEl = document.createElement('span');
103 beforeEl.className = 'bkbg-rss-before';
104 beforeEl.style.color = a.metricBeforeColor || '#9ca3af';
105 beforeEl.textContent = m.before;
106 valRow.appendChild(beforeEl);
107
108 var arrow = document.createElement('span');
109 arrow.className = 'bkbg-rss-arrow';
110 arrow.style.color = a.metricBeforeColor || '#9ca3af';
111 arrow.textContent = '';
112 valRow.appendChild(arrow);
113
114 var afterEl = document.createElement('span');
115 afterEl.className = 'bkbg-rss-after';
116 afterEl.style.cssText = 'font-size:' + (a.metricAfterSize || 36) + 'px;color:' + (isDarkCard ? '#ffffff' : (a.metricAfterColor || '#111827')) + ';';
117 afterEl.textContent = m.after;
118 valRow.appendChild(afterEl);
119 card.appendChild(valRow);
120
121 var labelEl = document.createElement('p');
122 labelEl.className = 'bkbg-rss-label';
123 labelEl.style.color = isDarkCard ? '#d1d5db' : (a.metricLabelColor || '#374151');
124 labelEl.textContent = m.label;
125 card.appendChild(labelEl);
126
127 if (m.description) {
128 var descEl = document.createElement('p');
129 descEl.className = 'bkbg-rss-desc';
130 descEl.style.color = isDarkCard ? '#9ca3af' : (a.subtextColor || '#6b7280');
131 descEl.textContent = m.description;
132 card.appendChild(descEl);
133 }
134
135 grid.appendChild(card);
136 });
137
138 inner.appendChild(grid);
139
140 // === Case study ===
141 if (a.showCaseStudy !== false) {
142 var caseCard = document.createElement('div');
143 caseCard.className = 'bkbg-rss-case';
144 caseCard.style.cssText = 'background:' + (a.caseBg || '#f8f5ff') + ';border-left-color:' + (a.accentColor || '#7c3aed') + ';';
145
146 var caseHeader = document.createElement('div');
147 caseHeader.className = 'bkbg-rss-case-header';
148
149 if (a.clientLogoUrl) {
150 var logo = document.createElement('img');
151 logo.className = 'bkbg-rss-case-logo';
152 logo.src = a.clientLogoUrl;
153 logo.alt = a.clientLogoAlt || '';
154 caseHeader.appendChild(logo);
155 }
156
157 var caseName = document.createElement('p');
158 caseName.className = 'bkbg-rss-case-name';
159 caseName.style.color = a.caseNameColor || '#111827';
160 caseName.textContent = a.caseStudyName || '';
161 caseHeader.appendChild(caseName);
162
163 caseCard.appendChild(caseHeader);
164
165 var summary = document.createElement('p');
166 summary.className = 'bkbg-rss-case-summary';
167 summary.style.color = a.caseSummaryColor || '#374151';
168 summary.innerHTML = a.caseStudySummary || '';
169 caseCard.appendChild(summary);
170
171 if (a.clientName) {
172 var attr = document.createElement('span');
173 attr.className = 'bkbg-rss-case-attribution';
174 attr.style.color = a.subtextColor || '#6b7280';
175 attr.textContent = '\u2014 ' + a.clientName;
176 caseCard.appendChild(attr);
177 }
178
179 inner.appendChild(caseCard);
180 }
181
182 // === CTA ===
183 if (a.showCtaRow !== false && a.ctaLabel) {
184 var ctaRow = document.createElement('div');
185 ctaRow.className = 'bkbg-rss-cta-row';
186
187 var ctaLink = document.createElement('a');
188 ctaLink.className = 'bkbg-rss-cta';
189 ctaLink.href = a.ctaUrl || '#';
190 ctaLink.textContent = a.ctaLabel;
191 ctaLink.style.cssText = 'background:' + (a.ctaBg || '#7c3aed') + ';color:' + (a.ctaColor || '#ffffff') + ';';
192 ctaRow.appendChild(ctaLink);
193 inner.appendChild(ctaRow);
194 }
195
196 root.appendChild(inner);
197 });
198 })();
199