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 / image-text-rows / frontend.js

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

133 lines 6.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 var typoMap = [
3 ['family','font-family'],['weight','font-weight'],['style','font-style'],
4 ['decoration','text-decoration'],['transform','text-transform'],
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 function typoCssVarsForEl(typo, prefix, el) {
11 if (!typo || typeof typo !== 'object') return;
12 for (var i = 0; i < typoMap.length; i++) {
13 var v = typo[typoMap[i][0]];
14 if (v !== undefined && v !== '' && v !== null) el.style.setProperty(prefix + typoMap[i][1], String(v));
15 }
16 }
17
18 function init() {
19 document.querySelectorAll('.bkbg-itr-app').forEach(function (el) {
20 if (el.dataset.rendered) return;
21 el.dataset.rendered = '1';
22 var opts;
23 try { opts = JSON.parse(el.dataset.opts || '{}'); } catch(e) { opts = {}; }
24 var o = Object.assign({
25 rows: [], imagePosition: 'alternate', imageRatio: '4:3',
26 imageRadius: 12, imageShadow: true, imageWidth: 45,
27 gap: 80, verticalAlign: 'center',
28 showFeatures: true, showBtns: true, showBadges: true,
29 paddingTop: 0, paddingBottom: 0,
30 bgColor: '', badgeBg: '#ede9fe', badgeColor: '#7c3aed',
31 titleColor: '#111827', descColor: '#374151',
32 featureColor: '#374151', featureDot: '#7c3aed',
33 btnBg: '#7c3aed', btnColor: '#ffffff', accentColor: '#7c3aed'
34 }, opts);
35
36 var RATIO_PAD = { '16:9': '56.25%', '4:3': '75%', '1:1': '100%', '3:4': '133.333%' };
37
38 function mk(tag, cls, style, text) {
39 var n = document.createElement(tag);
40 if (cls) n.className = cls;
41 if (style) Object.assign(n.style, style);
42 if (text != null) n.textContent = text;
43 return n;
44 }
45
46 var section = mk('div', 'bkbg-itr-section', {
47 background: o.bgColor || undefined,
48 paddingTop: o.paddingTop + 'px',
49 paddingBottom: o.paddingBottom + 'px'
50 });
51 typoCssVarsForEl(o.headingTypo, '--bkbg-itr-h-', section);
52 typoCssVarsForEl(o.bodyTypo, '--bkbg-itr-bd-', section);
53
54 var rowsWrap = mk('div', 'bkbg-itr-rows', { gap: o.gap + 'px' });
55
56 (o.rows || []).forEach(function (row, idx) {
57 var imgLeft = o.imagePosition === 'left' || (o.imagePosition === 'alternate' && idx % 2 === 0);
58 var rowEl = mk('div', 'bkbg-itr-row' + (imgLeft ? '' : ' bkbg-itr-row-reverse'), {
59 alignItems: o.verticalAlign || 'center'
60 });
61
62 /* image */
63 var imgCol = mk('div', 'bkbg-itr-img-col', {
64 flex: '0 0 ' + o.imageWidth + '%',
65 maxWidth: o.imageWidth + '%'
66 });
67 var imgWrap = mk('div', 'bkbg-itr-img-wrap', {
68 paddingBottom: RATIO_PAD[o.imageRatio] || '75%',
69 borderRadius: o.imageRadius + 'px',
70 boxShadow: o.imageShadow ? '0 8px 30px rgba(0,0,0,0.12)' : 'none'
71 });
72 if (row.imageUrl) {
73 var img = document.createElement('img');
74 img.src = row.imageUrl;
75 img.alt = row.imageAlt || '';
76 imgWrap.appendChild(img);
77 }
78 imgCol.appendChild(imgWrap);
79
80 /* text */
81 var textCol = mk('div', 'bkbg-itr-text-col');
82
83 if (o.showBadges && row.badge) {
84 textCol.appendChild(mk('span', 'bkbg-itr-badge', { background: o.badgeBg, color: o.badgeColor }, row.badge));
85 }
86
87 var title = mk('h2', 'bkbg-itr-title', { color: o.titleColor }, '');
88 title.innerHTML = row.title || '';
89 textCol.appendChild(title);
90
91 if (row.description) {
92 var desc = mk('p', 'bkbg-itr-desc', { color: o.descColor }, '');
93 desc.innerHTML = row.description;
94 textCol.appendChild(desc);
95 }
96
97 if (o.showFeatures && row.features && row.features.some(function (f) { return f && f.trim(); })) {
98 var ul = mk('ul', 'bkbg-itr-features');
99 row.features.forEach(function (f) {
100 if (!f || !f.trim()) return;
101 var li = mk('li', 'bkbg-itr-feature', { color: o.featureColor });
102 li.appendChild(mk('span', 'bkbg-itr-dot', { background: o.featureDot }));
103 li.appendChild(mk('span', '', {}, f));
104 ul.appendChild(li);
105 });
106 textCol.appendChild(ul);
107 }
108
109 if (o.showBtns && row.btnLabel) {
110 var btn = mk('a', 'bkbg-itr-btn', { background: o.btnBg, color: o.btnColor }, row.btnLabel);
111 if (row.btnUrl) { btn.href = row.btnUrl; }
112 textCol.appendChild(btn);
113 }
114
115 if (imgLeft) {
116 rowEl.appendChild(imgCol);
117 rowEl.appendChild(textCol);
118 } else {
119 rowEl.appendChild(textCol);
120 rowEl.appendChild(imgCol);
121 }
122 rowsWrap.appendChild(rowEl);
123 });
124
125 section.appendChild(rowsWrap);
126 el.parentNode.insertBefore(section, el);
127 });
128 }
129
130 if (document.readyState !== 'loading') { init(); }
131 else { document.addEventListener('DOMContentLoaded', init); }
132 })();
133