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 / icon-list / frontend.js

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

157 lines 7.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 wp.domReady(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-icon-list-app').forEach(function (app) {
19 var opts = {};
20 try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) {}
21
22 var bgColor = opts.bgColor || '#ffffff';
23 var itemBg = opts.itemBg || '#f9fafb';
24 var borderColor = opts.borderColor || '#e5e7eb';
25 var headingColor = opts.headingColor || '#111827';
26 var subtextColor = opts.subtextColor || '#6b7280';
27 var titleColor = opts.titleColor || '#111827';
28 var descColor = opts.descColor || '#6b7280';
29 var iconColor = opts.iconColor || '#7c3aed';
30 var badgeBg = opts.badgeBg || '#ede9fe';
31 var badgeColor = opts.badgeColor || '#7c3aed';
32 var dividerColor = opts.dividerColor || '#e5e7eb';
33 var layout = opts.layout || 'list';
34 var columns = opts.columns || 2;
35 var itemStyle = opts.itemStyle || 'boxed';
36 var showBadge = opts.showBadge !== false;
37 var showDesc = opts.showDesc !== false;
38 var showDivider = opts.showDivider === true;
39 var gap = opts.gap !== undefined ? opts.gap : 16;
40 var radius = (opts.borderRadius !== undefined ? opts.borderRadius : 10) + 'px';
41 var items = Array.isArray(opts.items) ? opts.items : [];
42
43 var wrap = document.createElement('div');
44 wrap.className = 'bkbg-il-wrap';
45 wrap.style.background = bgColor;
46 wrap.style.paddingTop = (opts.paddingTop || 64) + 'px';
47 wrap.style.paddingBottom = (opts.paddingBottom || 64) + 'px';
48 wrap.style.setProperty('--bkbg-il-heading-sz', (opts.headingSize || 32) + 'px');
49 wrap.style.setProperty('--bkbg-il-title-sz', (opts.titleSize || 17) + 'px');
50 wrap.style.setProperty('--bkbg-il-desc-sz', (opts.descSize || 14) + 'px');
51 typoCssVarsForEl(opts.headingTypo, '--bkbg-il-hd-', wrap);
52 typoCssVarsForEl(opts.titleTypo, '--bkbg-il-tt-', wrap);
53 typoCssVarsForEl(opts.descTypo, '--bkbg-il-ds-', wrap);
54
55 var inner = document.createElement('div');
56 inner.className = 'bkbg-il-inner';
57 inner.style.maxWidth = (opts.maxWidth || 900) + 'px';
58
59 if (opts.showHeading && opts.heading) {
60 var h = document.createElement('h2');
61 h.className = 'bkbg-il-heading';
62 h.style.color = headingColor;
63 h.innerHTML = opts.heading;
64 inner.appendChild(h);
65 }
66
67 if (opts.showSubtext && opts.subtext) {
68 var sub = document.createElement('p');
69 sub.className = 'bkbg-il-subtext';
70 sub.style.fontSize = '16px';
71 sub.style.color = subtextColor;
72 sub.innerHTML = opts.subtext;
73 inner.appendChild(sub);
74 }
75
76 var list = document.createElement('div');
77 list.className = layout === 'grid' ? 'bkbg-il-grid' : 'bkbg-il-list';
78 list.style.gap = gap + 'px';
79 if (layout === 'grid') {
80 list.style.gridTemplateColumns = 'repeat(' + columns + ', 1fr)';
81 }
82
83 items.forEach(function (item, i) {
84 var div = document.createElement('div');
85 div.className = 'bkbg-il-item bkbg-il-item--' + itemStyle;
86 div.style.gap = '14px';
87
88 if (itemStyle === 'boxed') {
89 div.style.padding = '16px 20px';
90 div.style.background = itemBg;
91 div.style.border = '1px solid ' + borderColor;
92 div.style.borderRadius = radius;
93 } else if (itemStyle === 'bordered') {
94 div.style.padding = '16px 20px';
95 div.style.border = '1px solid ' + borderColor;
96 div.style.borderRadius = radius;
97 } else {
98 div.style.padding = '8px 0';
99 if (showDivider && layout !== 'grid' && i < items.length - 1) {
100 div.style.borderBottom = '1px solid ' + dividerColor;
101 div.style.paddingBottom = '16px';
102 }
103 }
104
105 var iconEl = document.createElement('span');
106 iconEl.className = 'bkbg-il-icon';
107 iconEl.style.fontSize = (opts.iconSize || 28) + 'px';
108 iconEl.style.color = item.iconColor || iconColor;
109 var _IP = window.bkbgIconPicker;
110 var _iType = item.iconType || 'custom-char';
111 if (_IP && _iType !== 'custom-char') {
112 var _in = _IP.buildFrontendIcon(_iType, item.icon, item.iconDashicon, item.iconImageUrl, item.iconDashiconColor);
113 if (_in) iconEl.appendChild(_in); else iconEl.textContent = item.icon || '';
114 } else { iconEl.textContent = item.icon || ''; }
115 div.appendChild(iconEl);
116
117 var body = document.createElement('div');
118 body.className = 'bkbg-il-body';
119
120 var top = document.createElement('div');
121 top.className = 'bkbg-il-top';
122
123 var title = document.createElement('span');
124 title.className = 'bkbg-il-title';
125 title.style.color = titleColor;
126 title.innerHTML = item.title || '';
127 top.appendChild(title);
128
129 if (showBadge && item.badge) {
130 var badge = document.createElement('span');
131 badge.className = 'bkbg-il-badge';
132 badge.style.background = badgeBg;
133 badge.style.color = badgeColor;
134 badge.textContent = item.badge;
135 top.appendChild(badge);
136 }
137
138 body.appendChild(top);
139
140 if (showDesc && item.description) {
141 var desc = document.createElement('p');
142 desc.className = 'bkbg-il-desc';
143 desc.style.color = descColor;
144 desc.innerHTML = item.description;
145 body.appendChild(desc);
146 }
147
148 div.appendChild(body);
149 list.appendChild(div);
150 });
151
152 inner.appendChild(list);
153 wrap.appendChild(inner);
154 app.parentNode.replaceChild(wrap, app);
155 });
156 });
157