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 / interview-block / frontend.js

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

149 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 wp.domReady(function () {
2 /* ── typography CSS-var helper ──────────────────────────── */
3 var _typoKeys = {
4 family:'font-family', weight:'font-weight', style:'font-style',
5 decoration:'text-decoration', transform:'text-transform',
6 sizeDesktop:'font-size-d', sizeTablet:'font-size-t', sizeMobile:'font-size-m',
7 lineHeightDesktop:'line-height-d', lineHeightTablet:'line-height-t', lineHeightMobile:'line-height-m',
8 letterSpacingDesktop:'letter-spacing-d', letterSpacingTablet:'letter-spacing-t', letterSpacingMobile:'letter-spacing-m',
9 wordSpacingDesktop:'word-spacing-d', wordSpacingTablet:'word-spacing-t', wordSpacingMobile:'word-spacing-m'
10 };
11 function typoCssVarsForEl(el, obj, prefix) {
12 if (!obj || typeof obj !== 'object') return;
13 Object.keys(_typoKeys).forEach(function (k) {
14 var v = obj[k];
15 if (v === undefined || v === '' || v === null) return;
16 if (k === 'sizeDesktop' || k === 'sizeTablet' || k === 'sizeMobile') v = v + (obj.sizeUnit || 'px');
17 else if (k === 'lineHeightDesktop' || k === 'lineHeightTablet' || k === 'lineHeightMobile') v = v + (obj.lineHeightUnit || '');
18 else if (k === 'letterSpacingDesktop' || k === 'letterSpacingTablet' || k === 'letterSpacingMobile') v = v + (obj.letterSpacingUnit || 'px');
19 else if (k === 'wordSpacingDesktop' || k === 'wordSpacingTablet' || k === 'wordSpacingMobile') v = v + (obj.wordSpacingUnit || 'px');
20 el.style.setProperty(prefix + _typoKeys[k], String(v));
21 });
22 }
23
24 document.querySelectorAll('.bkbg-ib-app').forEach(function (app) {
25 var opts = {};
26 try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) {}
27
28 var layout = opts.layout || 'classic';
29 var items = opts.items || [];
30 var radius = (opts.borderRadius || 12) + 'px';
31
32 var wrap = document.createElement('div');
33 wrap.className = 'bkbg-ib-wrap bkbg-ib-wrap--' + layout;
34 wrap.style.setProperty('--bkbg-ib-accent', opts.accentColor || '#7c3aed');
35 wrap.style.setProperty('--bkbg-ib-divider', opts.dividerColor || '#f3f4f6');
36 wrap.style.setProperty('--bkbg-ib-radius', radius);
37 wrap.style.setProperty('--bkbg-ib-card-border', opts.cardBorderColor || '#e5e7eb');
38 if (opts.bgColor) wrap.style.background = opts.bgColor;
39 wrap.style.paddingTop = (opts.paddingTop || 48) + 'px';
40 wrap.style.paddingBottom = (opts.paddingBottom || 48) + 'px';
41
42 typoCssVarsForEl(wrap, opts.questionTypo, '--bkbg-ib-q-');
43 typoCssVarsForEl(wrap, opts.answerTypo, '--bkbg-ib-a-');
44
45 var inner = document.createElement('div');
46 inner.className = 'bkbg-ib-inner';
47 inner.style.maxWidth = (opts.maxWidth || 800) + 'px';
48
49 // Speaker header
50 if (opts.showSpeakerHeader !== false) {
51 var header = document.createElement('div');
52 header.className = 'bkbg-ib-header';
53 header.style.background = opts.headerBg || '#f9fafb';
54 header.style.borderRadius = radius;
55
56 if (opts.intervieweeAvatarUrl) {
57 var img = document.createElement('img');
58 img.className = 'bkbg-ib-avatar';
59 img.src = opts.intervieweeAvatarUrl;
60 img.alt = opts.intervieweeName || '';
61 header.appendChild(img);
62 } else {
63 var ph = document.createElement('div');
64 ph.className = 'bkbg-ib-avatar-placeholder';
65 ph.style.background = opts.prefixBg || '#7c3aed';
66 ph.style.color = opts.prefixColor || '#fff';
67 ph.textContent = (opts.intervieweeName || 'I').charAt(0).toUpperCase();
68 header.appendChild(ph);
69 }
70
71 var info = document.createElement('div');
72 if (opts.intervieweeName) {
73 var name = document.createElement('div');
74 name.className = 'bkbg-ib-name';
75 name.style.fontSize = (opts.nameSize || 18) + 'px';
76 name.style.color = opts.nameColor || '#111827';
77 name.textContent = opts.intervieweeName;
78 info.appendChild(name);
79 }
80 if (opts.intervieweeRole) {
81 var role = document.createElement('div');
82 role.className = 'bkbg-ib-role';
83 role.style.color = opts.roleColor || '#6b7280';
84 role.textContent = opts.intervieweeRole;
85 info.appendChild(role);
86 }
87 if (opts.interviewerName) {
88 var iwr = document.createElement('div');
89 iwr.className = 'bkbg-ib-interviewer';
90 iwr.textContent = 'Interviewed by: ' + opts.interviewerName;
91 info.appendChild(iwr);
92 }
93 header.appendChild(info);
94 inner.appendChild(header);
95 }
96
97 // Q&A items
98 items.forEach(function (item, i) {
99 var itemEl = document.createElement('div');
100 itemEl.className = 'bkbg-ib-item';
101 if (layout === 'card') {
102 itemEl.style.background = opts.cardBg || '#ffffff';
103 }
104
105 function buildRow(text, isQ) {
106 var row = document.createElement('div');
107 row.className = 'bkbg-ib-row ' + (isQ ? 'bkbg-ib-q-row' : 'bkbg-ib-a-row');
108
109 if (opts.showPrefixLabel !== false && layout !== 'minimal') {
110 var prefix = document.createElement('span');
111 prefix.className = 'bkbg-ib-prefix ' + (isQ ? 'bkbg-ib-prefix-q' : 'bkbg-ib-prefix-a');
112
113 if (layout === 'magazine') {
114 prefix.style.color = isQ ? (opts.accentColor || '#7c3aed') : (opts.answerColor || '#374151');
115 } else {
116 prefix.style.background = isQ ? (opts.prefixBg || '#7c3aed') : 'transparent';
117 prefix.style.color = isQ ? (opts.prefixColor || '#fff') : (opts.accentColor || '#7c3aed');
118 if (!isQ) prefix.style.border = '2px solid ' + (opts.accentColor || '#7c3aed');
119 prefix.style.fontSize = (opts.prefixSize || 13) + 'px';
120 }
121 prefix.textContent = isQ ? (opts.questionPrefix || 'Q') : (opts.answerPrefix || 'A');
122 row.appendChild(prefix);
123 }
124
125 var p = document.createElement('p');
126 p.className = isQ ? 'bkbg-ib-q-text' : 'bkbg-ib-a-text';
127 p.style.color = isQ ? (opts.questionColor || '#111827') : (opts.answerColor || '#374151');
128 p.innerHTML = text || '';
129 row.appendChild(p);
130 return row;
131 }
132
133 itemEl.appendChild(buildRow(item.question, true));
134 itemEl.appendChild(buildRow(item.answer, false));
135
136 inner.appendChild(itemEl);
137
138 if (opts.showDivider !== false && layout !== 'card' && i < items.length - 1) {
139 var div = document.createElement('hr');
140 div.className = 'bkbg-ib-divider';
141 inner.appendChild(div);
142 }
143 });
144
145 wrap.appendChild(inner);
146 app.parentNode.replaceChild(wrap, app);
147 });
148 });
149