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 / error-page / frontend.js

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

114 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 function typoCssVarsForEl(typo, prefix, el) {
3 if (!typo || typeof typo !== 'object') return;
4 var m = {
5 family: 'font-family', weight: 'font-weight', transform: 'text-transform',
6 style: 'font-style', decoration: 'text-decoration',
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 var units = { size: 'sizeUnit', lineHeight: 'lineHeightUnit', letterSpacing: 'letterSpacingUnit', wordSpacing: 'wordSpacingUnit' };
13 Object.keys(m).forEach(function (k) {
14 var v = typo[k]; if (v === undefined || v === '' || v === null) return;
15 var prop = prefix + m[k];
16 var base = k.replace(/Desktop|Tablet|Mobile/, '');
17 if (units[base] && typeof v === 'number') v = v + (typo[units[base]] || 'px');
18 el.style.setProperty(prop, String(v));
19 });
20 }
21
22 document.querySelectorAll('.bkbg-error-page-app').forEach(function (root) {
23 var opts = {};
24 try { opts = JSON.parse(root.dataset.opts || '{}'); } catch (e) {}
25
26 var wrap = document.createElement('div');
27 wrap.className = 'bkbg-error-page-wrap';
28 wrap.style.cssText = 'background:' + (opts.bgColor || '#ffffff') + ';padding:' + (opts.paddingTop || 100) + 'px 40px ' + (opts.paddingBottom || 100) + 'px;';
29 wrap.style.setProperty('--bkbg-ep-max', (opts.maxWidth || 700) + 'px');
30
31 typoCssVarsForEl(opts.typoCode || {}, '--bkbg-ep-cd-', wrap);
32 typoCssVarsForEl(opts.typoHeading || {}, '--bkbg-ep-hd-', wrap);
33 typoCssVarsForEl(opts.typoBody || {}, '--bkbg-ep-bd-', wrap);
34
35 var inner = document.createElement('div');
36 inner.className = 'bkbg-ep-inner';
37
38 if (opts.showImage && opts.imageUrl) {
39 var illus = document.createElement('div');
40 illus.className = 'bkbg-ep-illustration';
41 var img = document.createElement('img');
42 img.src = opts.imageUrl;
43 img.alt = opts.imageAlt || '';
44 img.style.width = (opts.imageWidth || 360) + 'px';
45 illus.appendChild(img);
46 inner.appendChild(illus);
47 }
48
49 if (opts.showError !== false && opts.errorCode) {
50 var code = document.createElement('div');
51 code.className = 'bkbg-ep-code';
52 code.style.color = opts.errorCodeColor || '#f3f0ff';
53 code.textContent = opts.errorCode;
54 inner.appendChild(code);
55 }
56
57 var h1 = document.createElement('h1');
58 h1.className = 'bkbg-ep-heading';
59 h1.style.color = opts.headingColor || '#111827';
60 h1.innerHTML = opts.heading || '';
61 inner.appendChild(h1);
62
63 var p = document.createElement('p');
64 p.className = 'bkbg-ep-body';
65 p.style.color = opts.textColor || '#6b7280';
66 p.innerHTML = opts.subtext || '';
67 inner.appendChild(p);
68
69 if (opts.showSearch) {
70 var searchDiv = document.createElement('div');
71 searchDiv.className = 'bkbg-ep-search';
72 var searchInput = document.createElement('input');
73 searchInput.type = 'search';
74 searchInput.name = 's';
75 searchInput.placeholder = 'Search\u2026';
76 var searchBtn = document.createElement('button');
77 searchBtn.style.cssText = 'background:' + (opts.primaryBg || '#7c3aed') + ';color:' + (opts.primaryColor || '#fff') + ';';
78 searchBtn.textContent = 'Search';
79 searchDiv.appendChild(searchInput);
80 searchDiv.appendChild(searchBtn);
81 var searchForm = document.createElement('form');
82 searchForm.action = '/';
83 searchForm.method = 'get';
84 searchForm.className = 'bkbg-ep-search';
85 searchForm.appendChild(searchInput);
86 searchForm.appendChild(searchBtn);
87 inner.appendChild(searchForm);
88 }
89
90 var actions = document.createElement('div');
91 actions.className = 'bkbg-ep-actions';
92
93 var primary = document.createElement('a');
94 primary.className = 'bkbg-ep-primary';
95 primary.href = opts.primaryUrl || '/';
96 primary.style.cssText = 'background:' + (opts.primaryBg || '#7c3aed') + ';color:' + (opts.primaryColor || '#fff') + ';';
97 primary.textContent = '\u2190 ' + (opts.primaryLabel || 'Go to Homepage');
98 actions.appendChild(primary);
99
100 if (opts.showSecondary && opts.secondaryLabel) {
101 var secondary = document.createElement('a');
102 secondary.className = 'bkbg-ep-secondary';
103 secondary.href = opts.secondaryUrl || '/contact';
104 secondary.style.color = opts.secondaryColor || '#374151';
105 secondary.textContent = opts.secondaryLabel;
106 actions.appendChild(secondary);
107 }
108
109 inner.appendChild(actions);
110 wrap.appendChild(inner);
111 root.parentNode.replaceChild(wrap, root);
112 });
113 })();
114