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 / expert-roundup / frontend.js

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

138 lines 8.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 function typoCssVarsForEl(typo, prefix, el) {
3 if (!typo || typeof typo !== 'object') return;
4 var m = { family:'font-family', weight:'font-weight', style:'font-style',
5 transform:'text-transform', decoration:'text-decoration',
6 sizeDesktop:'font-size-d', sizeTablet:'font-size-t', sizeMobile:'font-size-m', sizeUnit:'font-size-unit',
7 lineHeightDesktop:'line-height-d', lineHeightTablet:'line-height-t', lineHeightMobile:'line-height-m', lineHeightUnit:'line-height-unit',
8 letterSpacingDesktop:'letter-spacing-d', letterSpacingTablet:'letter-spacing-t', letterSpacingMobile:'letter-spacing-m', letterSpacingUnit:'letter-spacing-unit',
9 wordSpacingDesktop:'word-spacing-d', wordSpacingTablet:'word-spacing-t', wordSpacingMobile:'word-spacing-m', wordSpacingUnit:'word-spacing-unit' };
10 var su = typo.sizeUnit || 'px', lu = typo.lineHeightUnit || '', lsu = typo.letterSpacingUnit || 'px', wu = typo.wordSpacingUnit || 'px';
11 for (var k in m) {
12 if (typo[k] !== undefined && typo[k] !== '') {
13 var v = typo[k], css = m[k];
14 if (css === 'font-size-d' || css === 'font-size-t' || css === 'font-size-m') v = v + su;
15 else if ((css === 'line-height-d' || css === 'line-height-t' || css === 'line-height-m') && lu) v = v + lu;
16 else if (css === 'letter-spacing-d' || css === 'letter-spacing-t' || css === 'letter-spacing-m') v = v + lsu;
17 else if (css === 'word-spacing-d' || css === 'word-spacing-t' || css === 'word-spacing-m') v = v + wu;
18 el.style.setProperty(prefix + css, '' + v);
19 }
20 }
21 }
22
23 function init() {
24 document.querySelectorAll('.bkbg-erp-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: 'Expert Roundup', heading: 'Experts Share Their Insights',
33 subtext: '', experts: [], layout: 'cards', columns: 2,
34 showCompany: true, showNumber: true, quoteStyle: 'block',
35 maxWidth: 1100, paddingTop: 80, paddingBottom: 80,
36 bgColor: '#f8fafc', eyebrowColor: '#6366f1', headingColor: '#111827', subColor: '#6b7280',
37 cardBg: '#ffffff', cardBorder: '#e2e8f0', nameColor: '#111827',
38 titleColor: '#6b7280', companyColor: '#6366f1', quoteColor: '#374151',
39 numberBg: '#6366f1', numberColor: '#ffffff', avatarBg: '#ede9fe',
40 avatarColor: '#6366f1', accentColor: '#6366f1', borderRadius: 12
41 }, opts);
42
43 el.parentElement && (el.parentElement.style.background = o.bgColor);
44
45 el.classList.add('bkbg-erp-wrap');
46 typoCssVarsForEl(o.typoEyebrow || {}, '--bkbg-erp-ey-', el);
47 typoCssVarsForEl(o.typoHeading || {}, '--bkbg-erp-hd-', el);
48 typoCssVarsForEl(o.typoSubtext || {}, '--bkbg-erp-st-', el);
49 typoCssVarsForEl(o.typoQuote || {}, '--bkbg-erp-qt-', el);
50
51 var inner = document.createElement('div');
52 inner.className = 'bkbg-erp-inner';
53 inner.style.cssText = 'max-width:' + o.maxWidth + 'px;margin:0 auto;padding:' + o.paddingTop + 'px 24px ' + o.paddingBottom + 'px;';
54
55 /* Header */
56 var header = document.createElement('div'); header.className = 'bkbg-erp-header';
57 var ey = document.createElement('span'); ey.className = 'bkbg-erp-eyebrow'; ey.style.color = o.eyebrowColor; ey.textContent = o.eyebrow;
58 var h2 = document.createElement('h2'); h2.className = 'bkbg-erp-heading'; h2.style.color = o.headingColor; h2.innerHTML = o.heading;
59 var sub = document.createElement('p'); sub.className = 'bkbg-erp-sub'; sub.style.color = o.subColor; sub.innerHTML = o.subtext;
60 header.appendChild(ey); header.appendChild(h2);
61 if (o.subtext) header.appendChild(sub);
62 inner.appendChild(header);
63
64 /* Grid / list */
65 var grid = document.createElement('div');
66 grid.className = o.layout === 'cards' ? 'bkbg-erp-grid' : 'bkbg-erp-list';
67 if (o.layout === 'cards') grid.style.gridTemplateColumns = 'repeat(' + o.columns + ',1fr)';
68
69 (o.experts || []).forEach(function (expert, idx) {
70 var card = document.createElement('div'); card.className = 'bkbg-erp-card';
71 card.style.cssText = 'background:' + o.cardBg + ';border-color:' + o.cardBorder + ';border-radius:' + o.borderRadius + 'px;padding:24px;';
72
73 /* Number badge */
74 if (o.showNumber) {
75 var num = document.createElement('div'); num.className = 'bkbg-erp-number';
76 num.style.cssText = 'background:' + o.numberBg + ';color:' + o.numberColor;
77 num.textContent = idx + 1;
78 card.appendChild(num);
79 }
80
81 /* Expert header */
82 var expertHeader = document.createElement('div'); expertHeader.className = 'bkbg-erp-expert-header';
83 var avatarEl;
84 var initials = (expert.name || 'E').split(' ').map(function (w) { return w[0]; }).slice(0, 2).join('').toUpperCase();
85 if (expert.avatarUrl) {
86 avatarEl = document.createElement('img'); avatarEl.className = 'bkbg-erp-avatar';
87 avatarEl.src = expert.avatarUrl; avatarEl.alt = expert.name;
88 } else {
89 avatarEl = document.createElement('div'); avatarEl.className = 'bkbg-erp-avatar-initials';
90 avatarEl.style.cssText = 'background:' + o.avatarBg + ';color:' + o.avatarColor;
91 avatarEl.textContent = initials;
92 }
93 expertHeader.appendChild(avatarEl);
94
95 var info = document.createElement('div');
96 var nameEl = document.createElement('p'); nameEl.className = 'bkbg-erp-name'; nameEl.style.color = o.nameColor; nameEl.textContent = expert.name;
97 var titleEl = document.createElement('p'); titleEl.className = 'bkbg-erp-title'; titleEl.style.color = o.titleColor; titleEl.textContent = expert.title;
98 info.appendChild(nameEl); info.appendChild(titleEl);
99 if (o.showCompany && expert.company) {
100 var compEl = document.createElement('p'); compEl.className = 'bkbg-erp-company'; compEl.style.color = o.companyColor; compEl.textContent = expert.company;
101 info.appendChild(compEl);
102 }
103 expertHeader.appendChild(info);
104
105 var content = document.createElement('div'); content.className = 'bkbg-erp-content';
106 content.appendChild(expertHeader);
107
108 /* Quote */
109 var quote = document.createElement('p');
110 if (o.quoteStyle === 'block') {
111 quote.className = 'bkbg-erp-quote-block';
112 quote.style.cssText = 'border-left-color:' + o.accentColor + ';color:' + o.quoteColor;
113 } else if (o.quoteStyle === 'bubble') {
114 quote.className = 'bkbg-erp-quote-bubble';
115 quote.style.cssText = 'background:' + o.cardBorder + ';color:' + o.quoteColor;
116 expert.contribution = '\u201C' + expert.contribution + '\u201D';
117 } else {
118 quote.className = 'bkbg-erp-quote-plain';
119 quote.style.color = o.quoteColor;
120 }
121 quote.textContent = expert.contribution;
122 content.appendChild(quote);
123
124 if (o.layout === 'list') { card.appendChild(expertHeader); card.appendChild(content); }
125 else { card.appendChild(content); }
126
127 grid.appendChild(card);
128 });
129
130 inner.appendChild(grid);
131 el.appendChild(inner);
132 });
133 }
134
135 if (document.readyState !== 'loading') { init(); }
136 else { document.addEventListener('DOMContentLoaded', init); }
137 })();
138