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 / link-card / frontend.js

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

123 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 var _typoKeys = { family: 'font-family', weight: 'font-weight', style: 'font-style', decoration: 'text-decoration', transform: 'text-transform', sizeDesktop: 'font-size-d', sizeTablet: 'font-size-t', sizeMobile: 'font-size-m', lineHeightDesktop: 'line-height-d', lineHeightTablet: 'line-height-t', lineHeightMobile: 'line-height-m', letterSpacing: 'letter-spacing', wordSpacing: 'word-spacing' };
3 function typoCssVarsForEl(el, typo, prefix) {
4 if (!typo || typeof typo !== 'object') return;
5 Object.keys(_typoKeys).forEach(function (k) {
6 var v = typo[k];
7 if (v === undefined || v === '' || v === null) return;
8 var needsUnit = /size|height|spacing/i.test(k);
9 var val = needsUnit && typeof v === 'number' ? v + 'px' : '' + v;
10 el.style.setProperty(prefix + _typoKeys[k], val);
11 });
12 }
13
14 document.querySelectorAll('.bkbg-lkc-app').forEach(function (app) {
15 var opts = {};
16 try { opts = JSON.parse(app.dataset.opts || '{}'); } catch (e) { }
17
18 var cards = opts.cards || [];
19 var columns = opts.columns || 2;
20 var gap = opts.gap !== undefined ? opts.gap : 20;
21 var cardStyle = opts.cardStyle || 'bordered';
22 var showArrow = opts.showArrow !== false;
23 var showIcon = opts.showIcon !== false;
24 var hoverEffect = opts.hoverEffect || 'lift';
25 var iconSize = opts.iconSize || 32;
26 var cardRadius = opts.cardRadius !== undefined ? opts.cardRadius : 12;
27 var cardPadding = opts.cardPadding !== undefined ? opts.cardPadding : 24;
28 var bgColor = opts.bgColor || '#ffffff';
29 var cardBg = opts.cardBg || '#ffffff';
30 var accentColor = opts.accentColor || '#7c3aed';
31 var titleColor = opts.titleColor || '#111827';
32 var titleSize = opts.titleSize || 17;
33 var descColor = opts.descColor || '#6b7280';
34 var descSize = opts.descSize || 14;
35 var borderColor = opts.borderColor || '#e5e7eb';
36 var arrowColor = opts.arrowColor || '#7c3aed';
37 var maxWidth = opts.maxWidth || 1000;
38 var paddingTop = opts.paddingTop !== undefined ? opts.paddingTop : 48;
39 var paddingBottom = opts.paddingBottom !== undefined ? opts.paddingBottom : 48;
40
41 var wrap = document.createElement('div');
42 wrap.className = 'bkbg-lkc-wrap';
43 wrap.style.cssText = 'background:' + bgColor + ';padding-top:' + paddingTop + 'px;padding-bottom:' + paddingBottom + 'px;';
44 typoCssVarsForEl(wrap, opts.titleTypo, '--bkbg-lkc-tt-');
45 typoCssVarsForEl(wrap, opts.descTypo, '--bkbg-lkc-d-');
46
47 var grid = document.createElement('div');
48 grid.className = 'bkbg-lkc-grid';
49 grid.dataset.cols = columns;
50 grid.style.cssText = [
51 'max-width:' + maxWidth + 'px',
52 'grid-template-columns:repeat(' + columns + ',1fr)',
53 'gap:' + gap + 'px'
54 ].join(';');
55
56 cards.forEach(function (card) {
57 var a = document.createElement('a');
58 a.className = [
59 'bkbg-lkc-card',
60 'bkbg-lkc-card--' + cardStyle,
61 'bkbg-lkc-card--hover-' + hoverEffect,
62 hoverEffect === 'slide' ? 'bkbg-lkc-card--slide' : ''
63 ].join(' ').trim();
64 a.href = card.url || '#';
65 if (card.isExternal) { a.target = '_blank'; a.rel = 'noopener noreferrer'; }
66 a.style.cssText = [
67 'border-radius:' + cardRadius + 'px',
68 'padding:' + cardPadding + 'px',
69 'color:' + titleColor,
70 '--lkc-accent:' + accentColor,
71 cardStyle === 'bordered' ? 'background:' + cardBg + ';border-color:' + borderColor : '',
72 cardStyle === 'filled' ? 'background:' + cardBg : ''
73 ].filter(Boolean).join(';');
74
75 /* head row */
76 var head = document.createElement('div');
77 head.className = 'bkbg-lkc-card-head';
78
79 if (showIcon && card.icon) {
80 var ico = document.createElement('span');
81 ico.className = 'bkbg-lkc-icon';
82 ico.style.fontSize = iconSize + 'px';
83 var _IP = window.bkbgIconPicker;
84 var _iType = card.iconType || 'custom-char';
85 if (_IP && _iType !== 'custom-char') {
86 var _in = _IP.buildFrontendIcon(_iType, card.icon, card.iconDashicon, card.iconImageUrl, card.iconDashiconColor);
87 if (_in) ico.appendChild(_in); else ico.textContent = card.icon;
88 } else { ico.textContent = card.icon; }
89 head.appendChild(ico);
90 }
91
92 var title = document.createElement('p');
93 title.className = 'bkbg-lkc-title';
94 title.style.cssText = 'color:' + titleColor;
95 title.textContent = card.title || '';
96 head.appendChild(title);
97
98 a.appendChild(head);
99
100 /* description */
101 var desc = document.createElement('p');
102 desc.className = 'bkbg-lkc-desc';
103 desc.style.cssText = 'color:' + descColor;
104 desc.textContent = card.description || '';
105 a.appendChild(desc);
106
107 /* arrow */
108 if (showArrow) {
109 var arr = document.createElement('span');
110 arr.className = 'bkbg-lkc-arrow';
111 arr.style.color = arrowColor;
112 arr.textContent = '';
113 a.appendChild(arr);
114 }
115
116 grid.appendChild(a);
117 });
118
119 wrap.appendChild(grid);
120 app.replaceWith(wrap);
121 });
122 })();
123