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 / pros-cons / frontend.js

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

188 lines 8.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 'use strict';
3
4 var _typoKeys = {
5 family:'font-family', weight:'font-weight', style:'font-style',
6 decoration:'text-decoration', transform:'text-transform',
7 sizeDesktop:'font-size-d', sizeTablet:'font-size-t', sizeMobile:'font-size-m',
8 lineHeightDesktop:'line-height-d', lineHeightTablet:'line-height-t', lineHeightMobile:'line-height-m',
9 letterSpacingDesktop:'letter-spacing-d', letterSpacingTablet:'letter-spacing-t', letterSpacingMobile:'letter-spacing-m',
10 wordSpacingDesktop:'word-spacing-d', wordSpacingTablet:'word-spacing-t', wordSpacingMobile:'word-spacing-m'
11 };
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];
16 if (v === undefined || v === '' || v === null) return;
17 if (k === 'sizeDesktop' || k === 'sizeTablet' || k === 'sizeMobile') v = v + (obj.sizeUnit || 'px');
18 else if (k === 'lineHeightDesktop' || k === 'lineHeightTablet' || k === 'lineHeightMobile') v = v + (obj.lineHeightUnit || '');
19 else if (k === 'letterSpacingDesktop' || k === 'letterSpacingTablet' || k === 'letterSpacingMobile') v = v + (obj.letterSpacingUnit || 'px');
20 else if (k === 'wordSpacingDesktop' || k === 'wordSpacingTablet' || k === 'wordSpacingMobile') v = v + (obj.wordSpacingUnit || 'px');
21 el.style.setProperty(prefix + _typoKeys[k], String(v));
22 });
23 }
24
25 function buildApp(app) {
26 var opts = {};
27 try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) {}
28
29 var heading = opts.heading || '';
30 var showHd = opts.showHeading !== false;
31 var layout = opts.layout || 'two-col';
32 var headClr = opts.headingColor || '#1e1b4b';
33 var headSz = (opts.headingSize || 22) + 'px';
34 var colHeadSz = (opts.colHeadSize || 16) + 'px';
35 var itemSz = (opts.itemSize || 15) + 'px';
36 var itemGap = (opts.itemGap || 12) + 'px';
37 var colRadius = (opts.colRadius || 12) + 'px';
38 var colGap = (opts.columnGap || 16) + 'px';
39 var pV = (opts.paddingV || 0) + 'px';
40 var pH = (opts.paddingH || 0) + 'px';
41 var maxW = (opts.maxWidth || 860) + 'px';
42 var showIcons = opts.showIcons !== false;
43 var cardBg = opts.cardBg || '';
44 var pros = opts.pros || [];
45 var cons = opts.cons || [];
46
47 /* Columns data */
48 var cols = [
49 {
50 heading: opts.prosHeading || 'Pros',
51 headBg: opts.prosHeadBg || '#dcfce7',
52 headColor: opts.prosHeadColor || '#15803d',
53 colBg: opts.prosBg || '#f0fdf4',
54 border: opts.prosBorder || '#bbf7d0',
55 bulletClr: opts.prosBulletColor || '#16a34a',
56 itemColor: opts.prosItemColor || '#166534',
57 icon: opts.prosIcon || '',
58 iconType: opts.prosIconType || 'custom-char',
59 iconDash: opts.prosIconDashicon,
60 iconImg: opts.prosIconImageUrl,
61 iconDashColor: opts.prosIconDashiconColor,
62 items: pros,
63 },
64 {
65 heading: opts.consHeading || 'Cons',
66 headBg: opts.consHeadBg || '#fee2e2',
67 headColor: opts.consHeadColor || '#b91c1c',
68 colBg: opts.consBg || '#fef2f2',
69 border: opts.consBorder || '#fecaca',
70 bulletClr: opts.consBulletColor || '#dc2626',
71 itemColor: opts.consItemColor || '#991b1b',
72 icon: opts.consIcon || '',
73 iconType: opts.consIconType || 'custom-char',
74 iconDash: opts.consIconDashicon,
75 iconImg: opts.consIconImageUrl,
76 iconDashColor: opts.consIconDashiconColor,
77 items: cons,
78 },
79 ];
80
81 /* Wrap */
82 var wrap = document.createElement('div');
83 wrap.className = 'bkbg-pc-wrap';
84 wrap.style.cssText = [
85 'max-width:' + maxW,
86 'margin:0 auto',
87 'padding:' + pV + ' ' + pH,
88 cardBg ? 'background:' + cardBg : '',
89 'box-sizing:border-box',
90 ].filter(Boolean).join(';');
91 app.innerHTML = '';
92 app.appendChild(wrap);
93
94 typoCssVarsForEl(wrap, opts.headingTypo, '--bkpc-h-');
95 typoCssVarsForEl(wrap, opts.colHeadTypo, '--bkpc-ch-');
96 typoCssVarsForEl(wrap, opts.itemTypo, '--bkpc-it-');
97
98 /* Heading */
99 if (showHd && heading) {
100 var h3 = document.createElement('h3');
101 h3.className = 'bkbg-pc-heading';
102 h3.textContent = heading;
103 h3.style.color = headClr;
104 wrap.appendChild(h3);
105 }
106
107 /* Columns container */
108 var colsDiv = document.createElement('div');
109 colsDiv.className = 'bkbg-pc-columns' + (layout === 'stacked' ? ' stacked' : '');
110 colsDiv.style.gap = colGap;
111 wrap.appendChild(colsDiv);
112
113 cols.forEach(function (col) {
114 var colEl = document.createElement('div');
115 colEl.className = 'bkbg-pc-col';
116 colEl.style.cssText = [
117 'background:' + col.colBg,
118 'border:1.5px solid ' + col.border,
119 'border-radius:' + colRadius,
120 ].join(';');
121 colsDiv.appendChild(colEl);
122
123 /* Header */
124 var head = document.createElement('div');
125 head.className = 'bkbg-pc-col-head';
126 head.style.cssText = [
127 'background:' + col.headBg,
128 'color:' + col.headColor,
129 ].join(';');
130
131 if (showIcons) {
132 var iconEl = document.createElement('span');
133 iconEl.className = 'bkbg-pc-col-icon';
134 var _IP = window.bkbgIconPicker;
135 if (_IP && col.iconType && col.iconType !== 'custom-char') {
136 var _icn = _IP.buildFrontendIcon(col.iconType, col.icon, col.iconDash, col.iconImg, col.iconDashColor);
137 if (_icn) iconEl.appendChild(_icn);
138 else iconEl.textContent = col.icon;
139 } else {
140 iconEl.textContent = col.icon;
141 }
142 head.appendChild(iconEl);
143 }
144
145 var headText = document.createElement('span');
146 headText.textContent = col.heading;
147 head.appendChild(headText);
148 colEl.appendChild(head);
149
150 /* Items */
151 var ul = document.createElement('ul');
152 ul.className = 'bkbg-pc-col-body';
153 ul.style.gap = itemGap;
154 colEl.appendChild(ul);
155
156 col.items.forEach(function (item) {
157 if (!item && item !== 0) return;
158 var li = document.createElement('li');
159 li.className = 'bkbg-pc-item';
160
161 if (showIcons) {
162 var blt = document.createElement('span');
163 blt.className = 'bkbg-pc-item-icon';
164 var _IP2 = window.bkbgIconPicker;
165 if (_IP2 && col.iconType && col.iconType !== 'custom-char') {
166 var _bIn = _IP2.buildFrontendIcon(col.iconType, col.icon, col.iconDash, col.iconImg, col.iconDashColor);
167 if (_bIn) blt.appendChild(_bIn);
168 else blt.textContent = col.icon;
169 } else {
170 blt.textContent = col.icon;
171 }
172 blt.style.color = col.bulletClr;
173 li.appendChild(blt);
174 }
175
176 var txt = document.createElement('span');
177 txt.className = 'bkbg-pc-item-text';
178 txt.textContent = item;
179 txt.style.color = col.itemColor;
180 li.appendChild(txt);
181 ul.appendChild(li);
182 });
183 });
184 }
185
186 document.querySelectorAll('.bkbg-pc-app').forEach(buildApp);
187 })();
188