PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.11
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.11
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 / service-process / frontend.js

frontend.js in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.11, at blocks/service-process/frontend.js

166 lines 9.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 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(el, obj, prefix) {
11 if (!obj || typeof obj !== 'object') return;
12 Object.keys(_typoKeys).forEach(function (k) {
13 var v = obj[k];
14 if (v === undefined || v === '' || v === null) return;
15 if (k === 'sizeDesktop' || k === 'sizeTablet' || k === 'sizeMobile') v = v + (obj.sizeUnit || 'px');
16 else if (k === 'lineHeightDesktop' || k === 'lineHeightTablet' || k === 'lineHeightMobile') v = v + (obj.lineHeightUnit || '');
17 else if (k === 'letterSpacingDesktop' || k === 'letterSpacingTablet' || k === 'letterSpacingMobile') v = v + (obj.letterSpacingUnit || 'px');
18 else if (k === 'wordSpacingDesktop' || k === 'wordSpacingTablet' || k === 'wordSpacingMobile') v = v + (obj.wordSpacingUnit || 'px');
19 el.style.setProperty(prefix + _typoKeys[k], String(v));
20 });
21 }
22
23 function init() {
24 document.querySelectorAll('.bkbg-spr-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: 'Our Process', heading: 'How We Turn Your Vision Into Reality',
33 subtext: 'A proven four-step approach that delivers exceptional results.',
34 phases: [
35 { icon: '🔍', name: 'Discovery', description: 'Deep-dive into your goals and landscape.', deliverables: ['Stakeholder interviews', 'Competitive analysis'] },
36 { icon: '🎨', name: 'Design', description: 'Craft the UX and visual identity.', deliverables: ['Wireframes', 'Brand system'] },
37 { icon: '⚙️', name: 'Build', description: 'Pixel-perfect development with QA.', deliverables: ['Coded components', 'QA reports'] },
38 { icon: '🚀', name: 'Launch', description: 'Go live and grow with data.', deliverables: ['Go-live support', 'Analytics setup'] }
39 ],
40 layout: 'horizontal', connectorStyle: 'line', showDeliverables: true,
41 showNumbers: true, showCta: true, ctaLabel: 'Start Your Project', ctaUrl: '#',
42 maxWidth: 1200, paddingTop: 80, paddingBottom: 80,
43 bgColor: '#ffffff', headingColor: '#111827', subColor: '#6b7280', eyebrowColor: '#6366f1',
44 phaseNumBg: '#6366f1', phaseNumColor: '#ffffff', phaseNameColor: '#111827',
45 phaseDescColor: '#6b7280', deliverableColor: '#374151', connectorColor: '#c7d2fe',
46 cardBg: '#f8fafc', cardBorder: '#e2e8f0', ctaBg: '#6366f1', ctaColor: '#ffffff',
47 accentColor: '#6366f1'
48 }, opts);
49
50 el.parentElement && (el.parentElement.style.background = o.bgColor);
51
52 var inner = document.createElement('div');
53 inner.className = 'bkbg-spr-inner';
54 inner.style.cssText = 'max-width:' + o.maxWidth + 'px;margin:0 auto;padding:' + o.paddingTop + 'px 24px ' + o.paddingBottom + 'px;';
55
56 typoCssVarsForEl(inner, o.headingTypo, '--bkspr-ht-');
57 typoCssVarsForEl(inner, o.phaseNameTypo, '--bkspr-pnt-');
58 typoCssVarsForEl(inner, o.phaseDescTypo, '--bkspr-pdt-');
59
60 /* Header */
61 var header = document.createElement('div');
62 header.className = 'bkbg-spr-header';
63 header.style.cssText = 'text-align:center;margin-bottom:48px;';
64
65 var ey = document.createElement('p'); ey.className = 'bkbg-spr-eyebrow'; ey.style.color = o.eyebrowColor; ey.innerHTML = o.eyebrow;
66 var h2 = document.createElement('h2'); h2.className = 'bkbg-spr-heading'; h2.style.color = o.headingColor; h2.innerHTML = o.heading;
67 var sub = document.createElement('p'); sub.className = 'bkbg-spr-sub'; sub.style.color = o.subColor; sub.innerHTML = o.subtext;
68 header.appendChild(ey); header.appendChild(h2); header.appendChild(sub);
69 inner.appendChild(header);
70
71 /* Phases */
72 var phasesRow = document.createElement('div');
73 phasesRow.className = 'bkbg-spr-phases layout-' + o.layout;
74 inner.appendChild(phasesRow);
75
76 (o.phases || []).forEach(function (phase, idx) {
77 /* Connector (between phases in horizontal) */
78 if (idx > 0 && o.layout === 'horizontal' && o.connectorStyle !== 'none') {
79 var conn = document.createElement('div');
80 conn.className = 'bkbg-spr-connector connector-' + o.connectorStyle;
81 conn.style.background = o.connectorStyle === 'line' ? o.connectorColor : 'transparent';
82 if (o.connectorStyle === 'dashed') conn.style.borderTopColor = o.connectorColor;
83 if (o.connectorStyle === 'dotted') conn.style.borderTopColor = o.connectorColor;
84 phasesRow.appendChild(conn);
85 }
86
87 var phaseEl = document.createElement('div');
88 phaseEl.className = 'bkbg-spr-phase';
89
90 var card = document.createElement('div');
91 card.className = 'bkbg-spr-phase-inner';
92 card.style.cssText = 'background:' + o.cardBg + ';border-color:' + o.cardBorder;
93
94 /* Top row: number + icon */
95 var top = document.createElement('div');
96 top.className = 'bkbg-spr-phase-top';
97
98 if (o.showNumbers) {
99 var numEl = document.createElement('div');
100 numEl.className = 'bkbg-spr-num';
101 numEl.style.cssText = 'background:' + o.phaseNumBg + ';color:' + o.phaseNumColor;
102 numEl.textContent = String(idx + 1).padStart(2, '0');
103 top.appendChild(numEl);
104 }
105
106 var iconEl = document.createElement('div');
107 iconEl.className = 'bkbg-spr-icon';
108 var _IP = window.bkbgIconPicker;
109 var _iType = phase.iconType || 'custom-char';
110 if (_IP && _iType !== 'custom-char') {
111 var _in = _IP.buildFrontendIcon(_iType, phase.icon, phase.iconDashicon, phase.iconImageUrl, phase.iconDashiconColor);
112 if (_in) iconEl.appendChild(_in); else iconEl.textContent = phase.icon || '';
113 } else { iconEl.textContent = phase.icon || ''; }
114 top.appendChild(iconEl);
115 card.appendChild(top);
116
117 var nameEl = document.createElement('div');
118 nameEl.className = 'bkbg-spr-phase-name';
119 nameEl.style.color = o.phaseNameColor;
120 nameEl.textContent = phase.name;
121 card.appendChild(nameEl);
122
123 var descEl = document.createElement('div');
124 descEl.className = 'bkbg-spr-phase-desc';
125 descEl.style.color = o.phaseDescColor;
126 descEl.textContent = phase.description;
127 card.appendChild(descEl);
128
129 if (o.showDeliverables && phase.deliverables && phase.deliverables.length) {
130 var ul = document.createElement('ul');
131 ul.className = 'bkbg-spr-deliverables';
132 phase.deliverables.forEach(function (d) {
133 var li = document.createElement('li');
134 li.className = 'bkbg-spr-deliverable';
135 li.style.color = o.deliverableColor;
136 li.innerHTML = '<span class="bkbg-spr-check" style="color:' + o.accentColor + '">✓</span>' + d;
137 ul.appendChild(li);
138 });
139 card.appendChild(ul);
140 }
141
142 phaseEl.appendChild(card);
143 phasesRow.appendChild(phaseEl);
144 });
145
146 /* CTA */
147 if (o.showCta) {
148 var ctaRow = document.createElement('div');
149 ctaRow.className = 'bkbg-spr-cta-row';
150 var cta = document.createElement('a');
151 cta.className = 'bkbg-spr-cta';
152 cta.href = o.ctaUrl;
153 cta.style.cssText = 'background:' + o.ctaBg + ';color:' + o.ctaColor;
154 cta.textContent = o.ctaLabel;
155 ctaRow.appendChild(cta);
156 inner.appendChild(ctaRow);
157 }
158
159 el.appendChild(inner);
160 });
161 }
162
163 if (document.readyState !== 'loading') { init(); }
164 else { document.addEventListener('DOMContentLoaded', init); }
165 })();
166