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

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

179 lines 8.1 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
24 document.querySelectorAll('.bkbg-coms-app').forEach(function (app) {
25 var opts = {};
26 try { opts = JSON.parse(app.dataset.opts || '{}'); } catch (e) { }
27
28 var avatars = opts.avatars || [];
29 var memberCount = opts.memberCount || '12,000+';
30 var memberCountLabel = opts.memberCountLabel || 'members';
31 var heading = opts.heading || '';
32 var subtext = opts.subtext || '';
33 var showHeading = opts.showHeading !== false;
34 var ctaEnabled = opts.ctaEnabled !== false;
35 var ctaLabel = opts.ctaLabel || '';
36 var ctaUrl = opts.ctaUrl || '#';
37 var ctaIsExternal = opts.ctaIsExternal || false;
38 var badgeText = opts.badgeText || '';
39 var showBadge = opts.showBadge !== false;
40 var trusts = opts.trusts || [];
41 var showTrusts = opts.showTrusts !== false;
42 var avatarOverlap = opts.avatarOverlap !== undefined ? opts.avatarOverlap : -14;
43 var avatarSize = opts.avatarSize || 48;
44 var layout = opts.layout || 'centered';
45 var bgColor = opts.bgColor || '#ffffff';
46 var headingColor = opts.headingColor || '#111827';
47 var headingSize = opts.headingSize || 30;
48 var textColor = opts.textColor || '#6b7280';
49 var countColor = opts.countColor || '#111827';
50 var ctaBg = opts.ctaBg || '#7c3aed';
51 var ctaColor = opts.ctaColor || '#ffffff';
52 var badgeBg = opts.badgeBg || '#f0fdf4';
53 var badgeColor = opts.badgeColor || '#15803d';
54 var avatarBorderColor = opts.avatarBorderColor || '#ffffff';
55 var trustColor = opts.trustColor || '#9ca3af';
56 var maxWidth = opts.maxWidth || 700;
57 var paddingTop = opts.paddingTop !== undefined ? opts.paddingTop : 80;
58 var paddingBottom = opts.paddingBottom !== undefined ? opts.paddingBottom : 80;
59 var isSplit = layout === 'split';
60
61 var wrap = document.createElement('div');
62 wrap.className = 'bkbg-coms-wrap';
63 wrap.style.cssText = 'background:' + bgColor + ';padding-top:' + paddingTop + 'px;padding-bottom:' + paddingBottom + 'px;';
64 typoCssVarsForEl(wrap, opts.typoHeading, '--bkcoms-heading-');
65 typoCssVarsForEl(wrap, opts.typoBody, '--bkcoms-body-');
66
67 var inner = document.createElement('div');
68 inner.className = 'bkbg-coms-inner bkbg-coms-inner--' + (isSplit ? 'split' : 'centered');
69 inner.style.maxWidth = maxWidth + 'px';
70 wrap.appendChild(inner);
71
72 /* left column (avatars + count) */
73 var leftCol = document.createElement('div');
74 if (isSplit) leftCol.style.flexShrink = '0';
75
76 /* avatar strip */
77 var avRow = document.createElement('div');
78 avRow.className = 'bkbg-coms-avatars';
79 avatars.forEach(function (av, idx) {
80 var aWrap = document.createElement('div');
81 aWrap.className = 'bkbg-coms-avatar-wrap';
82 aWrap.style.cssText = 'margin-left:' + (idx === 0 ? 0 : avatarOverlap) + 'px;z-index:' + (avatars.length - idx) + ';position:relative;';
83
84 if (av.imageUrl) {
85 var img = document.createElement('img');
86 img.className = 'bkbg-coms-avatar';
87 img.src = av.imageUrl;
88 img.alt = av.alt || av.name || '';
89 img.style.cssText = 'width:' + avatarSize + 'px;height:' + avatarSize + 'px;border-color:' + avatarBorderColor;
90 aWrap.appendChild(img);
91 } else {
92 var ph = document.createElement('div');
93 ph.className = 'bkbg-coms-avatar-placeholder';
94 ph.style.cssText = 'width:' + avatarSize + 'px;height:' + avatarSize + 'px;border-color:' + avatarBorderColor;
95 ph.textContent = '👤';
96 aWrap.appendChild(ph);
97 }
98 avRow.appendChild(aWrap);
99 });
100 leftCol.appendChild(avRow);
101
102 /* count */
103 var countRow = document.createElement('div');
104 countRow.className = 'bkbg-coms-count-row';
105 var countEl = document.createElement('span');
106 countEl.className = 'bkbg-coms-count';
107 countEl.style.color = countColor;
108 countEl.textContent = memberCount;
109 countRow.appendChild(countEl);
110 var countLbl = document.createElement('span');
111 countLbl.className = 'bkbg-coms-count-label';
112 countLbl.style.color = textColor;
113 countLbl.textContent = memberCountLabel;
114 countRow.appendChild(countLbl);
115 leftCol.appendChild(countRow);
116
117 inner.appendChild(leftCol);
118
119 /* right column (heading + CTA + trusts) */
120 var rightCol = document.createElement('div');
121 rightCol.style.flex = '1';
122
123 if (showHeading) {
124 if (heading) {
125 var h = document.createElement('h2');
126 h.className = 'bkbg-coms-heading';
127 h.style.color = headingColor;
128 h.textContent = heading;
129 rightCol.appendChild(h);
130 }
131 if (subtext) {
132 var sub = document.createElement('p');
133 sub.className = 'bkbg-coms-sub';
134 sub.style.color = textColor;
135 sub.textContent = subtext;
136 rightCol.appendChild(sub);
137 }
138 }
139
140 if (ctaEnabled || showBadge) {
141 var ctaRow = document.createElement('div');
142 ctaRow.className = 'bkbg-coms-cta-row';
143 if (ctaEnabled && ctaLabel) {
144 var cta = document.createElement('a');
145 cta.className = 'bkbg-coms-cta';
146 cta.href = ctaUrl;
147 cta.style.cssText = 'background:' + ctaBg + ';color:' + ctaColor;
148 if (ctaIsExternal) { cta.target = '_blank'; cta.rel = 'noopener noreferrer'; }
149 cta.textContent = ctaLabel;
150 ctaRow.appendChild(cta);
151 }
152 if (showBadge && badgeText) {
153 var badge = document.createElement('span');
154 badge.className = 'bkbg-coms-badge';
155 badge.style.cssText = 'background:' + badgeBg + ';color:' + badgeColor;
156 badge.textContent = badgeText;
157 ctaRow.appendChild(badge);
158 }
159 rightCol.appendChild(ctaRow);
160 }
161
162 if (showTrusts && trusts.length) {
163 var trustRow = document.createElement('div');
164 trustRow.className = 'bkbg-coms-trusts';
165 trusts.forEach(function (t) {
166 var ts = document.createElement('span');
167 ts.className = 'bkbg-coms-trust';
168 ts.style.color = trustColor;
169 ts.textContent = '' + t.text;
170 trustRow.appendChild(ts);
171 });
172 rightCol.appendChild(trustRow);
173 }
174
175 inner.appendChild(rightCol);
176 app.replaceWith(wrap);
177 });
178 })();
179