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 / speaker-lineup / frontend.js

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

210 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 var _typoKeys = [['family','font-family'],['weight','font-weight'],['style','font-style'],['decoration','text-decoration'],['transform','text-transform'],['sizeDesktop','font-size-d'],['sizeTablet','font-size-t'],['sizeMobile','font-size-m'],['sizeUnit','*unit'],['lineHeightDesktop','line-height-d'],['lineHeightTablet','line-height-t'],['lineHeightMobile','line-height-m'],['letterSpacingDesktop','letter-spacing-d'],['letterSpacingTablet','letter-spacing-t'],['letterSpacingMobile','letter-spacing-m'],['wordSpacingDesktop','word-spacing-d'],['wordSpacingTablet','word-spacing-t'],['wordSpacingMobile','word-spacing-m']];
3 function typoCssVarsForEl(el, obj, prefix) {
4 if (!obj || typeof obj !== 'object') return;
5 var unit = obj.sizeUnit || 'px';
6 for (var i = 0; i < _typoKeys.length; i++) {
7 var k = _typoKeys[i][0], p = _typoKeys[i][1];
8 if (p === '*unit' || obj[k] == null || obj[k] === '') continue;
9 var v = obj[k];
10 if (p === 'font-size-d' || p === 'font-size-t' || p === 'font-size-m') v = v + unit;
11 el.style.setProperty(prefix + p, '' + v);
12 }
13 }
14 function init() {
15 document.querySelectorAll('.bkbg-spk-app').forEach(function (el) {
16 if (el.dataset.rendered) return;
17 el.dataset.rendered = '1';
18
19 var opts;
20 try { opts = JSON.parse(el.dataset.opts || '{}'); } catch (e) { opts = {}; }
21
22 var o = Object.assign({
23 eyebrow: 'Expert Speakers',
24 heading: 'Learn From the Best',
25 subtext: 'World-class speakers sharing their expertise and actionable strategies.',
26 speakers: [
27 { name: 'Sarah Johnson', title: 'CEO', company: 'TechVentures', topic: 'Future of AI in Business', bio: 'Sarah has 15 years of experience leading high-growth tech startups.', avatarUrl: '', twitterUrl: '', linkedinUrl: '' }
28 ],
29 layout: 'grid',
30 columns: 3,
31 cardStyle: 'card',
32 showBio: true,
33 showTopic: true,
34 showSocials: true,
35 bgColor: '#ffffff',
36 headingColor: '#111827',
37 subColor: '#6b7280',
38 eyebrowColor: '#6366f1',
39 cardBg: '#f8fafc',
40 cardBorder: '#e2e8f0',
41 nameColor: '#111827',
42 titleColor: '#6b7280',
43 topicBg: '#ede9fe',
44 topicColor: '#5b21b6',
45 bioColor: '#4b5563',
46 socialColor: '#6366f1',
47 accentColor: '#6366f1',
48 maxWidth: 1200,
49 paddingTop: 80,
50 paddingBottom: 80
51 }, opts);
52
53 el.parentElement && (el.parentElement.style.background = o.bgColor);
54
55 var wrap = document.createElement('div');
56 wrap.className = 'bkbg-spk-inner';
57 wrap.style.cssText = 'max-width:' + o.maxWidth + 'px;margin:0 auto;padding:' + o.paddingTop + 'px 24px ' + o.paddingBottom + 'px;';
58 typoCssVarsForEl(wrap, o.eyebrowTypo, '--bkspk-ey-');
59 typoCssVarsForEl(wrap, o.headingTypo, '--bkspk-hd-');
60 typoCssVarsForEl(wrap, o.subtextTypo, '--bkspk-st-');
61 typoCssVarsForEl(wrap, o.nameTypo, '--bkspk-nm-');
62 typoCssVarsForEl(wrap, o.descTypo, '--bkspk-ds-');
63
64 /* Header */
65 var header = document.createElement('div');
66 header.className = 'bkbg-spk-header';
67
68 var eyebrow = document.createElement('p');
69 eyebrow.className = 'bkbg-spk-eyebrow';
70 eyebrow.style.color = o.eyebrowColor;
71 eyebrow.innerHTML = o.eyebrow;
72
73 var heading = document.createElement('h2');
74 heading.className = 'bkbg-spk-heading';
75 heading.style.cssText = 'color:' + o.headingColor;
76 heading.innerHTML = o.heading;
77
78 var sub = document.createElement('p');
79 sub.className = 'bkbg-spk-sub';
80 sub.style.color = o.subColor;
81 sub.innerHTML = o.subtext;
82
83 header.appendChild(eyebrow);
84 header.appendChild(heading);
85 header.appendChild(sub);
86 wrap.appendChild(header);
87
88 /* Grid */
89 var isList = o.layout === 'list';
90 var isFeatured = o.layout === 'featured';
91
92 var grid = document.createElement('div');
93 grid.className = 'bkbg-spk-grid' + (isList ? ' bkbg-spk-list' : '') + (isFeatured ? ' bkbg-spk-featured' : '');
94 if (!isList) {
95 grid.style.gridTemplateColumns = 'repeat(' + o.columns + ',1fr)';
96 }
97
98 (o.speakers || []).forEach(function (s) {
99 var card = document.createElement('div');
100 card.className = 'bkbg-spk-card style-' + o.cardStyle;
101 if (o.cardStyle === 'card') {
102 card.style.cssText = 'background:' + o.cardBg + ';box-shadow:0 2px 12px rgba(0,0,0,0.06);text-align:center;';
103 } else if (o.cardStyle === 'bordered') {
104 card.style.cssText = 'border-color:' + o.cardBorder + ';text-align:center;';
105 } else {
106 card.style.cssText = 'text-align:center;';
107 }
108
109 /* Inner container for list layout */
110 var cardInner = document.createElement('div');
111 cardInner.className = 'bkbg-spk-card-inner';
112
113 /* Avatar */
114 var avatarWrap = document.createElement('div');
115 avatarWrap.className = 'bkbg-spk-avatar-wrap';
116 avatarWrap.style.background = o.accentColor;
117
118 if (s.avatarUrl) {
119 var img = document.createElement('img');
120 img.src = s.avatarUrl;
121 img.alt = s.name;
122 avatarWrap.appendChild(img);
123 } else {
124 avatarWrap.textContent = (s.name || 'S').charAt(0).toUpperCase();
125 avatarWrap.style.cssText += ';color:#fff;font-weight:700;font-size:32px;justify-content:center;';
126 }
127
128 /* Info block for list layout */
129 var infoDiv = document.createElement('div');
130 infoDiv.className = 'bkbg-spk-info';
131
132 var name = document.createElement('div');
133 name.className = 'bkbg-spk-name';
134 name.style.color = o.nameColor;
135 name.textContent = s.name;
136
137 var titleCo = document.createElement('div');
138 titleCo.className = 'bkbg-spk-title-co';
139 titleCo.style.color = o.titleColor;
140 titleCo.textContent = s.title + (s.company ? ' · ' + s.company : '');
141
142 infoDiv.appendChild(name);
143 infoDiv.appendChild(titleCo);
144
145 if (o.showTopic && s.topic) {
146 var badge = document.createElement('div');
147 badge.className = 'bkbg-spk-topic-badge';
148 badge.style.cssText = 'background:' + o.topicBg + ';color:' + o.topicColor;
149 badge.textContent = s.topic;
150 infoDiv.appendChild(badge);
151 }
152
153 if (o.showBio && s.bio) {
154 var bio = document.createElement('p');
155 bio.className = 'bkbg-spk-bio';
156 bio.style.color = o.bioColor;
157 bio.textContent = s.bio;
158 infoDiv.appendChild(bio);
159 }
160
161 if (o.showSocials && (s.twitterUrl || s.linkedinUrl)) {
162 var socials = document.createElement('div');
163 socials.className = 'bkbg-spk-socials';
164
165 if (s.twitterUrl) {
166 var tw = document.createElement('a');
167 tw.className = 'bkbg-spk-social-link';
168 tw.href = s.twitterUrl;
169 tw.target = '_blank';
170 tw.rel = 'noopener noreferrer';
171 tw.style.color = o.socialColor;
172 tw.textContent = '𝕏';
173 tw.title = 'Twitter/X';
174 socials.appendChild(tw);
175 }
176 if (s.linkedinUrl) {
177 var li = document.createElement('a');
178 li.className = 'bkbg-spk-social-link';
179 li.href = s.linkedinUrl;
180 li.target = '_blank';
181 li.rel = 'noopener noreferrer';
182 li.style.color = o.socialColor;
183 li.textContent = 'in';
184 li.title = 'LinkedIn';
185 socials.appendChild(li);
186 }
187 infoDiv.appendChild(socials);
188 }
189
190 if (isList) {
191 cardInner.appendChild(avatarWrap);
192 cardInner.appendChild(infoDiv);
193 card.appendChild(cardInner);
194 } else {
195 card.appendChild(avatarWrap);
196 card.appendChild(infoDiv);
197 }
198
199 grid.appendChild(card);
200 });
201
202 wrap.appendChild(grid);
203 el.appendChild(wrap);
204 });
205 }
206
207 if (document.readyState !== 'loading') { init(); }
208 else { document.addEventListener('DOMContentLoaded', init); }
209 })();
210