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

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

177 lines 8.8 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 function statusEl(v, c) {
25 var span = document.createElement('span');
26 if (v === 'yes') { span.className = 'bkbg-cmp-yes'; span.textContent = ''; }
27 else if (v === 'no') { span.className = 'bkbg-cmp-no'; span.textContent = ''; }
28 else { span.className = 'bkbg-cmp-partial'; span.textContent = ''; }
29 return span;
30 }
31
32 document.querySelectorAll('.bkbg-comparison-section-app').forEach(function (root) {
33 var opts = {};
34 try { opts = JSON.parse(root.dataset.opts || '{}'); } catch (e) {}
35
36 var wrap = document.createElement('div');
37 wrap.className = 'bkbg-comparison-section-wrap';
38 wrap.style.cssText = 'background:' + (opts.bgColor || '#fff') + ';padding:' + (opts.paddingTop || 80) + 'px 40px ' + (opts.paddingBottom || 80) + 'px;';
39 wrap.style.setProperty('--bkbg-cmp-max', (opts.maxWidth || 1200) + 'px');
40 wrap.style.setProperty('--bkbg-cmp-table-width', (opts.tableWidth || '720') + 'px');
41 wrap.style.setProperty('--bkbg-cmp-border', opts.borderColor || '#e5e7eb');
42 wrap.style.setProperty('--bkbg-cmp-hl-bg', opts.highlightBg || '#7c3aed');
43 wrap.style.setProperty('--bkbg-cmp-hl-color', opts.highlightColor || '#fff');
44 wrap.style.setProperty('--bkbg-cmp-yes', opts.yesColor || '#16a34a');
45 wrap.style.setProperty('--bkbg-cmp-no', opts.noColor || '#dc2626');
46 wrap.style.setProperty('--bkbg-cmp-partial', opts.partialColor || '#d97706');
47
48 /* ── Typography CSS vars ── */
49 typoCssVarsForEl(wrap, opts.typoHeading, '--bkcs-heading-');
50 typoCssVarsForEl(wrap, opts.typoBody, '--bkcs-body-');
51
52 var inner = document.createElement('div');
53 inner.className = 'bkbg-cmp-inner';
54
55 if (opts.showHeading !== false) {
56 var h2 = document.createElement('h2');
57 h2.className = 'bkbg-cmp-heading';
58 h2.style.color = opts.headingColor || '#111827';
59 h2.innerHTML = opts.heading || '';
60 inner.appendChild(h2);
61
62 var p = document.createElement('p');
63 p.className = 'bkbg-cmp-subtext';
64 p.style.color = opts.textColor || '#6b7280';
65 p.innerHTML = opts.subtext || '';
66 inner.appendChild(p);
67 }
68
69 var tableWrap = document.createElement('div');
70 tableWrap.className = 'bkbg-cmp-table-wrap';
71
72 var table = document.createElement('table');
73 table.className = 'bkbg-cmp-table';
74
75 // thead
76 var thead = document.createElement('thead');
77 var headTr = document.createElement('tr');
78 var thFeat = document.createElement('th');
79 thFeat.className = 'bkbg-cmp-th-feature';
80 thFeat.style.cssText = 'background:' + (opts.tableHeaderBg || '#f8fafc') + ';color:' + (opts.featureColor || '#374151') + ';font-size:' + (opts.textSize || 16) + 'px;';
81
82 var hl1 = opts.highlightCol === 'col1';
83 var hl2 = opts.highlightCol === 'col2';
84
85 var th1 = document.createElement('th');
86 th1.className = 'bkbg-cmp-th-col' + (hl1 ? ' bkbg-cmp-hl-col' : '');
87 th1.style.cssText = hl1 ? 'font-size:' + ((opts.textSize || 16) + 2) + 'px;font-weight:700;' : 'background:' + (opts.tableHeaderBg || '#f8fafc') + ';color:' + (opts.featureColor || '#374151') + ';font-size:' + ((opts.textSize || 16) + 2) + 'px;font-weight:700;';
88 if (opts.showColIcons !== false && opts.col1Icon) {
89 var iconSpan1 = document.createElement('span');
90 iconSpan1.className = 'bkbg-cmp-col-icon';
91 iconSpan1.style.marginRight = '6px';
92 var col1Type = opts.col1IconType || 'custom-char';
93 var IPf = window.bkbgIconPicker;
94 if (IPf && col1Type !== 'custom-char') {
95 var ic1 = IPf.buildFrontendIcon(col1Type, opts.col1Icon, opts.col1IconDashicon, opts.col1IconImageUrl, opts.col1IconDashiconColor);
96 if (ic1) iconSpan1.appendChild(ic1);
97 else iconSpan1.textContent = opts.col1Icon;
98 } else {
99 iconSpan1.textContent = opts.col1Icon;
100 }
101 th1.appendChild(iconSpan1);
102 }
103 th1.appendChild(document.createTextNode(opts.col1Label || 'Us'));
104
105 var th2 = document.createElement('th');
106 th2.className = 'bkbg-cmp-th-col' + (hl2 ? ' bkbg-cmp-hl-col' : '');
107 th2.style.cssText = hl2 ? 'font-size:' + ((opts.textSize || 16) + 2) + 'px;font-weight:700;' : 'background:' + (opts.tableHeaderBg || '#f8fafc') + ';color:' + (opts.featureColor || '#374151') + ';font-size:' + ((opts.textSize || 16) + 2) + 'px;font-weight:700;';
108 if (opts.showColIcons !== false && opts.col2Icon) {
109 var iconSpan2 = document.createElement('span');
110 iconSpan2.className = 'bkbg-cmp-col-icon';
111 iconSpan2.style.marginRight = '6px';
112 var col2Type = opts.col2IconType || 'custom-char';
113 var IPf2 = window.bkbgIconPicker;
114 if (IPf2 && col2Type !== 'custom-char') {
115 var ic2 = IPf2.buildFrontendIcon(col2Type, opts.col2Icon, opts.col2IconDashicon, opts.col2IconImageUrl, opts.col2IconDashiconColor);
116 if (ic2) iconSpan2.appendChild(ic2);
117 else iconSpan2.textContent = opts.col2Icon;
118 } else {
119 iconSpan2.textContent = opts.col2Icon;
120 }
121 th2.appendChild(iconSpan2);
122 }
123 th2.appendChild(document.createTextNode(opts.col2Label || 'Others'));
124
125 headTr.appendChild(thFeat);
126 headTr.appendChild(th1);
127 headTr.appendChild(th2);
128 thead.appendChild(headTr);
129 table.appendChild(thead);
130
131 var tbody = document.createElement('tbody');
132 (opts.rows || []).forEach(function (r, i) {
133 var tr = document.createElement('tr');
134 var rowBg = i % 2 === 0 ? '#ffffff' : '#fafafa';
135
136 var tdFeat = document.createElement('td');
137 tdFeat.className = 'bkbg-cmp-td-feature';
138 tdFeat.style.cssText = 'font-size:' + (opts.textSize || 16) + 'px;color:' + (opts.featureColor || '#374151') + ';background:' + rowBg + ';';
139 tdFeat.textContent = r.feature;
140
141 var td1 = document.createElement('td');
142 td1.className = 'bkbg-cmp-td-val' + (hl1 ? ' bkbg-cmp-hl-td' : '');
143 if (!hl1) td1.style.background = rowBg;
144 td1.appendChild(statusEl(r.col1));
145
146 var td2 = document.createElement('td');
147 td2.className = 'bkbg-cmp-td-val' + (hl2 ? ' bkbg-cmp-hl-td' : '');
148 if (!hl2) td2.style.background = rowBg;
149 td2.appendChild(statusEl(r.col2));
150
151 tr.appendChild(tdFeat);
152 tr.appendChild(td1);
153 tr.appendChild(td2);
154 tbody.appendChild(tr);
155 });
156 table.appendChild(tbody);
157
158 tableWrap.appendChild(table);
159 inner.appendChild(tableWrap);
160
161 if (opts.showCta && opts.ctaLabel) {
162 var ctaWrap = document.createElement('div');
163 ctaWrap.className = 'bkbg-cmp-cta-wrap';
164 var a = document.createElement('a');
165 a.className = 'bkbg-cmp-cta-btn';
166 a.href = opts.ctaUrl || '#';
167 a.style.cssText = 'background:' + (opts.ctaBg || '#7c3aed') + ';color:' + (opts.ctaColor || '#fff') + ';font-size:' + (opts.textSize || 16) + 'px;';
168 a.textContent = opts.ctaLabel + '';
169 ctaWrap.appendChild(a);
170 inner.appendChild(ctaWrap);
171 }
172
173 wrap.appendChild(inner);
174 root.parentNode.replaceChild(wrap, root);
175 });
176 })();
177