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 / resource-links / frontend.js

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

160 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 _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(typo, prefix, el) {
11 if (!typo || typeof typo !== 'object') return;
12 Object.keys(_typoKeys).forEach(function(k) {
13 if (typo[k] !== undefined && typo[k] !== '') {
14 var v = typo[k];
15 if (['sizeDesktop','sizeTablet','sizeMobile'].indexOf(k) !== -1) v = v + (typo.sizeUnit || 'px');
16 else if (['lineHeightDesktop','lineHeightTablet','lineHeightMobile'].indexOf(k) !== -1) v = v + (typo.lineHeightUnit || '');
17 else if (['letterSpacingDesktop','letterSpacingTablet','letterSpacingMobile'].indexOf(k) !== -1) v = v + (typo.letterSpacingUnit || 'px');
18 else if (['wordSpacingDesktop','wordSpacingTablet','wordSpacingMobile'].indexOf(k) !== -1) v = v + (typo.wordSpacingUnit || 'px');
19 el.style.setProperty(prefix + _typoKeys[k], String(v));
20 }
21 });
22 }
23
24 document.querySelectorAll('.bkbg-resource-links-app').forEach(function (app) {
25 var opts = {};
26 try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) {}
27
28 var bgColor = opts.bgColor || '#ffffff';
29 var cardBg = opts.cardBg || '#f9fafb';
30 var cardBorder = opts.cardBorder || '#e5e7eb';
31 var headingColor = opts.headingColor || '#111827';
32 var subtextColor = opts.subtextColor || '#6b7280';
33 var titleColor = opts.titleColor || '#111827';
34 var descColor = opts.descColor || '#6b7280';
35 var tagBg = opts.tagBg || '#ede9fe';
36 var tagColor = opts.tagColor || '#7c3aed';
37 var arrowColor = opts.arrowColor || '#9ca3af';
38 var hoverBg = opts.hoverBg || '#f3f0ff';
39 var radius = (opts.borderRadius !== undefined ? opts.borderRadius : 10) + 'px';
40 var layout = opts.layout || 'list';
41 var columns = opts.columns || 2;
42 var openNewTab = opts.openNewTab !== false;
43 var showArrow = opts.showArrow !== false;
44 var items = Array.isArray(opts.items) ? opts.items : [];
45
46 var wrap = document.createElement('div');
47 wrap.className = 'bkbg-resource-links-wrap';
48 wrap.style.background = bgColor;
49 wrap.style.paddingTop = (opts.paddingTop || 64) + 'px';
50 wrap.style.paddingBottom = (opts.paddingBottom || 64) + 'px';
51 wrap.style.setProperty('--bkbg-rl-cols', columns);
52 wrap.style.setProperty('--bkbg-rl-radius', radius);
53
54 typoCssVarsForEl(opts.headingTypo, '--bkrl-ht-', wrap);
55 typoCssVarsForEl(opts.titleTypo, '--bkrl-tt-', wrap);
56 typoCssVarsForEl(opts.bodyTypo, '--bkrl-bt-', wrap);
57
58 var inner = document.createElement('div');
59 inner.className = 'bkbg-rl-inner';
60 inner.style.maxWidth = (opts.maxWidth || 900) + 'px';
61
62 if (opts.showHeading && opts.heading) {
63 var h = document.createElement('h2');
64 h.className = 'bkbg-rl-heading';
65 h.style.color = headingColor;
66 h.innerHTML = opts.heading;
67 inner.appendChild(h);
68 }
69
70 if (opts.showSubtext && opts.subtext) {
71 var sub = document.createElement('p');
72 sub.className = 'bkbg-rl-subtext';
73 sub.style.fontSize = '16px';
74 sub.style.color = subtextColor;
75 sub.innerHTML = opts.subtext;
76 inner.appendChild(sub);
77 }
78
79 var list = document.createElement('div');
80 list.className = layout === 'grid' ? 'bkbg-rl-grid' : 'bkbg-rl-list';
81
82 items.forEach(function (item) {
83 var card = document.createElement('a');
84 card.className = 'bkbg-rl-card';
85 card.href = item.url || '#';
86 if (openNewTab) {
87 card.target = '_blank';
88 card.rel = 'noopener noreferrer';
89 }
90 card.style.background = cardBg;
91 card.style.borderColor = cardBorder;
92 card.style.setProperty('--bkbg-rl-hover', hoverBg);
93
94 card.addEventListener('mouseenter', function () { card.style.background = hoverBg; });
95 card.addEventListener('mouseleave', function () { card.style.background = cardBg; });
96
97 if (item.icon || item.iconDashicon || item.iconImageUrl) {
98 var icon = document.createElement('span');
99 icon.className = 'bkbg-rl-icon';
100 icon.style.fontSize = (opts.iconSize || 28) + 'px';
101 var _IP = window.bkbgIconPicker;
102 var _iType = item.iconType || 'custom-char';
103 if (_IP && _iType !== 'custom-char') {
104 var _in = _IP.buildFrontendIcon(_iType, item.icon, item.iconDashicon, item.iconImageUrl, item.iconDashiconColor);
105 if (_in) icon.appendChild(_in); else icon.textContent = item.icon || '';
106 } else { icon.textContent = item.icon || ''; }
107 card.appendChild(icon);
108 }
109
110 var body = document.createElement('div');
111 body.className = 'bkbg-rl-body';
112
113 var top = document.createElement('div');
114 top.className = 'bkbg-rl-top';
115
116 var title = document.createElement('span');
117 title.className = 'bkbg-rl-title';
118 title.style.color = titleColor;
119 title.innerHTML = item.title || '';
120 top.appendChild(title);
121
122 if (item.tag) {
123 var tag = document.createElement('span');
124 tag.className = 'bkbg-rl-tag';
125 tag.style.background = tagBg;
126 tag.style.color = tagColor;
127 tag.textContent = item.tag;
128 top.appendChild(tag);
129 }
130
131 body.appendChild(top);
132
133 if (item.description) {
134 var desc = document.createElement('p');
135 desc.className = 'bkbg-rl-desc';
136 desc.style.color = descColor;
137 desc.innerHTML = item.description;
138 body.appendChild(desc);
139 }
140
141 card.appendChild(body);
142
143 if (showArrow) {
144 var arrow = document.createElement('span');
145 arrow.className = 'bkbg-rl-arrow';
146 arrow.style.color = arrowColor;
147 arrow.style.fontSize = '20px';
148 arrow.textContent = '';
149 card.appendChild(arrow);
150 }
151
152 list.appendChild(card);
153 });
154
155 inner.appendChild(list);
156 wrap.appendChild(inner);
157 app.parentNode.replaceChild(wrap, app);
158 });
159 });
160