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

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

155 lines 6.6 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 document.querySelectorAll('.bkbg-iot-app').forEach(function (app) {
19 var opts = {};
20 try { opts = JSON.parse(app.dataset.opts || '{}'); } catch (e) { }
21
22 var imageUrl = opts.imageUrl || '';
23 var imageAlt = opts.imageAlt || '';
24 var imageRadius = opts.imageRadius !== undefined ? opts.imageRadius : 0;
25 var overlapSide = opts.overlapSide || 'left';
26 var overlapAmount = opts.overlapAmount !== undefined ? opts.overlapAmount : 48;
27 var eyebrow = opts.eyebrow || '';
28 var showEyebrow = opts.showEyebrow !== false;
29 var heading = opts.heading || '';
30 var subtext = opts.subtext || '';
31 var bodyText = opts.bodyText || '';
32 var ctaEnabled = opts.ctaEnabled !== false;
33 var ctaLabel = opts.ctaLabel || 'Learn more →';
34 var ctaUrl = opts.ctaUrl || '#';
35 var ctaIsExternal = opts.ctaIsExternal || false;
36 var decorative = opts.decorative || 'dots';
37 var bgColor = opts.bgColor || '#ffffff';
38 var panelBg = opts.panelBg || '#f9fafb';
39 var eyebrowColor = opts.eyebrowColor || '#7c3aed';
40 var headingColor = opts.headingColor || '#111827';
41 var headingSize = opts.headingSize || 36;
42 var subtextColor = opts.subtextColor || '#6b7280';
43 var subtextSize = opts.subtextSize || 18;
44 var bodyColor = opts.bodyColor || '#374151';
45 var bodySize = opts.bodySize || 16;
46 var ctaBg = opts.ctaBg || '#7c3aed';
47 var ctaColor = opts.ctaColor || '#ffffff';
48 var accentColor = opts.accentColor || '#7c3aed';
49 var dotColor = opts.dotColor || '#e5e7eb';
50 var maxWidth = opts.maxWidth || 1100;
51 var paddingTop = opts.paddingTop !== undefined ? opts.paddingTop : 64;
52 var paddingBottom = opts.paddingBottom !== undefined ? opts.paddingBottom : 64;
53 var isRight = overlapSide === 'right';
54
55 /* outer wrap */
56 var wrap = document.createElement('div');
57 wrap.className = 'bkbg-iot-wrap';
58 wrap.style.cssText = 'background:' + bgColor + ';padding-top:' + paddingTop + 'px;padding-bottom:' + paddingBottom + 'px;';
59 typoCssVarsForEl(opts.eyebrowTypo, '--bkbg-iot-ey-', wrap);
60 typoCssVarsForEl(opts.headingTypo, '--bkbg-iot-h-', wrap);
61 typoCssVarsForEl(opts.subtextTypo, '--bkbg-iot-st-', wrap);
62 typoCssVarsForEl(opts.bodyTypo, '--bkbg-iot-bd-', wrap);
63
64 /* inner */
65 var inner = document.createElement('div');
66 inner.className = 'bkbg-iot-inner' + (isRight ? ' bkbg-iot-inner--right' : '');
67 inner.style.cssText = 'max-width:' + maxWidth + 'px;';
68 wrap.appendChild(inner);
69
70 /* image column */
71 var imgCol = document.createElement('div');
72 imgCol.className = 'bkbg-iot-image-col';
73
74 /* decorative */
75 if (decorative !== 'none') {
76 var decor = document.createElement('div');
77 decor.className = 'bkbg-iot-decor bkbg-iot-decor--' + decorative;
78 decor.style.setProperty('--dot-color', dotColor);
79 decor.style.setProperty('--accent', accentColor);
80 imgCol.appendChild(decor);
81 }
82
83 if (imageUrl) {
84 var img = document.createElement('img');
85 img.className = 'bkbg-iot-img';
86 img.src = imageUrl;
87 img.alt = imageAlt;
88 img.style.borderRadius = imageRadius + 'px';
89 imgCol.appendChild(img);
90 } else {
91 var ph = document.createElement('div');
92 ph.className = 'bkbg-iot-img';
93 ph.style.cssText = 'background:#f3f4f6;display:flex;align-items:center;justify-content:center;font-size:48px;color:#d1d5db;border-radius:' + imageRadius + 'px;';
94 ph.textContent = '🖼️';
95 imgCol.appendChild(ph);
96 }
97 inner.appendChild(imgCol);
98
99 /* text column */
100 var textCol = document.createElement('div');
101 textCol.className = 'bkbg-iot-text-col';
102 textCol.style.cssText = [
103 'background:' + panelBg,
104 isRight
105 ? 'padding:40px ' + overlapAmount + 'px 40px 40px'
106 : 'padding:40px 40px 40px ' + overlapAmount + 'px'
107 ].join(';');
108
109 if (showEyebrow && eyebrow) {
110 var ey = document.createElement('p');
111 ey.className = 'bkbg-iot-eyebrow';
112 ey.style.color = eyebrowColor;
113 ey.textContent = eyebrow;
114 textCol.appendChild(ey);
115 }
116
117 if (heading) {
118 var h = document.createElement('h2');
119 h.className = 'bkbg-iot-heading';
120 h.style.color = headingColor;
121 h.textContent = heading;
122 textCol.appendChild(h);
123 }
124
125 if (subtext) {
126 var sub = document.createElement('p');
127 sub.className = 'bkbg-iot-subtext';
128 sub.style.color = subtextColor;
129 sub.textContent = subtext;
130 textCol.appendChild(sub);
131 }
132
133 if (bodyText) {
134 var bod = document.createElement('p');
135 bod.className = 'bkbg-iot-body';
136 bod.style.color = bodyColor;
137 bod.textContent = bodyText;
138 textCol.appendChild(bod);
139 }
140
141 if (ctaEnabled && ctaLabel) {
142 var cta = document.createElement('a');
143 cta.className = 'bkbg-iot-cta';
144 cta.href = ctaUrl;
145 cta.style.cssText = 'background:' + ctaBg + ';color:' + ctaColor;
146 if (ctaIsExternal) { cta.target = '_blank'; cta.rel = 'noopener noreferrer'; }
147 cta.textContent = ctaLabel;
148 textCol.appendChild(cta);
149 }
150
151 inner.appendChild(textCol);
152 app.replaceWith(wrap);
153 });
154 })();
155