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 / coming-soon / frontend.js

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

176 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function () {
2 var _typoKeys = {
3 family:'font-family', weight:'font-weight', style:'font-style',
4 transform:'text-transform', decoration:'text-decoration',
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 var _typoUnits = { size:'sizeUnit', lineHeight:'lineHeightUnit', letterSpacing:'letterSpacingUnit', wordSpacing:'wordSpacingUnit' };
11 var _typoUnitDefaults = { size:'px', lineHeight:'', letterSpacing:'px', wordSpacing:'px' };
12 function typoCssVarsForEl(el, obj, prefix) {
13 if (!obj || typeof obj !== 'object') return;
14 Object.keys(_typoKeys).forEach(function (k) {
15 var v = obj[k]; if (v === undefined || v === '') return;
16 var prop = _typoKeys[k];
17 var base = k.replace(/Desktop|Tablet|Mobile/, '');
18 var uKey = _typoUnits[base];
19 if (uKey && typeof v === 'number') v = v + (obj[uKey] || _typoUnitDefaults[base] || '');
20 el.style.setProperty(prefix + prop, v);
21 });
22 }
23
24 function pad(n) { return String(n).padStart(2, '0'); }
25
26 document.querySelectorAll('.bkbg-coming-soon-app').forEach(function (root) {
27 var opts = {};
28 try { opts = JSON.parse(root.dataset.opts || '{}'); } catch (e) {}
29
30 var bg = opts.bgGradient || opts.bgColor || '#0f172a';
31 var wrap = document.createElement('div');
32 wrap.className = 'bkbg-coming-soon-wrap';
33 wrap.style.cssText = 'background:' + bg + ';padding:' + (opts.paddingTop || 120) + 'px 40px ' + (opts.paddingBottom || 120) + 'px;';
34 wrap.style.setProperty('--bkbg-csn-max', (opts.maxWidth || 700) + 'px');
35
36 typoCssVarsForEl(wrap, opts.typoHeading, '--bkbg-csn-hd-');
37 typoCssVarsForEl(wrap, opts.typoBody, '--bkbg-csn-bd-');
38 typoCssVarsForEl(wrap, opts.typoEyebrow, '--bkbg-csn-ey-');
39
40 var inner = document.createElement('div');
41 inner.className = 'bkbg-csn-inner';
42
43 if (opts.showLogo && opts.logoUrl) {
44 var logoDiv = document.createElement('div');
45 logoDiv.className = 'bkbg-csn-logo';
46 var logoImg = document.createElement('img');
47 logoImg.src = opts.logoUrl;
48 logoImg.alt = opts.logoAlt || '';
49 logoImg.style.width = (opts.logoWidth || 160) + 'px';
50 logoDiv.appendChild(logoImg);
51 inner.appendChild(logoDiv);
52 }
53
54 if (opts.showEyebrow !== false && opts.eyebrow) {
55 var ey = document.createElement('span');
56 ey.className = 'bkbg-csn-eyebrow';
57 ey.style.background = opts.eyebrowBg || 'rgba(255,255,255,.08)';
58 ey.style.color = opts.eyebrowColor || '#c4b5fd';
59 ey.textContent = opts.eyebrow;
60 inner.appendChild(ey);
61 }
62
63 var h1 = document.createElement('h1');
64 h1.className = 'bkbg-csn-heading';
65 h1.style.color = opts.headingColor || '#fff';
66 h1.innerHTML = opts.heading || '';
67 inner.appendChild(h1);
68
69 var p = document.createElement('p');
70 p.className = 'bkbg-csn-body';
71 p.style.color = opts.textColor || '#94a3b8';
72 p.innerHTML = opts.subtext || '';
73 inner.appendChild(p);
74
75 // Countdown
76 if (opts.showCountdown) {
77 var ctdWrap = document.createElement('div');
78 ctdWrap.className = 'bkbg-csn-countdown';
79
80 var units = [{ key: 'days', label: 'Days' }, { key: 'hours', label: 'Hours' }, { key: 'mins', label: 'Mins' }, { key: 'secs', label: 'Secs' }];
81 var numEls = {};
82 units.forEach(function (u) {
83 var box = document.createElement('div');
84 box.className = 'bkbg-csn-unit';
85 box.style.background = opts.timerBg || 'rgba(255,255,255,.07)';
86 var num = document.createElement('div');
87 num.className = 'bkbg-csn-unit-num';
88 num.style.color = opts.timerColor || '#fff';
89 num.textContent = '00';
90 var lbl = document.createElement('div');
91 lbl.className = 'bkbg-csn-unit-label';
92 lbl.style.color = opts.textColor || '#94a3b8';
93 lbl.textContent = u.label;
94 box.appendChild(num);
95 box.appendChild(lbl);
96 ctdWrap.appendChild(box);
97 numEls[u.key] = num;
98 });
99 inner.appendChild(ctdWrap);
100
101 var target = opts.launchDate ? new Date(opts.launchDate).getTime() : 0;
102 if (target && !isNaN(target)) {
103 function tick() {
104 var diff = target - Date.now();
105 if (diff < 0) diff = 0;
106 var d = Math.floor(diff / 864e5);
107 var h = Math.floor((diff % 864e5) / 36e5);
108 var m = Math.floor((diff % 36e5) / 6e4);
109 var s = Math.floor((diff % 6e4) / 1e3);
110 numEls.days.textContent = pad(d);
111 numEls.hours.textContent = pad(h);
112 numEls.mins.textContent = pad(m);
113 numEls.secs.textContent = pad(s);
114 }
115 tick();
116 setInterval(tick, 1000);
117 }
118 }
119
120 // Email form
121 if (opts.showEmail) {
122 var form = document.createElement('form');
123 form.className = 'bkbg-csn-form';
124 form.action = opts.emailAction || '#';
125 form.method = 'post';
126
127 var input = document.createElement('input');
128 input.className = 'bkbg-csn-input';
129 input.type = 'email';
130 input.name = 'email';
131 input.placeholder = opts.emailPlaceholder || 'Enter your email';
132 input.required = true;
133 input.style.cssText = 'border:1px solid rgba(255,255,255,.15);background:' + (opts.inputBg || 'rgba(255,255,255,.08)') + ';color:' + (opts.inputColor || '#fff') + ';';
134
135 var btn = document.createElement('button');
136 btn.className = 'bkbg-csn-btn';
137 btn.type = 'submit';
138 btn.style.cssText = 'background:' + (opts.btnBg || '#7c3aed') + ';color:' + (opts.btnColor || '#fff') + ';';
139 btn.textContent = opts.emailBtnLabel || 'Notify Me';
140
141 form.appendChild(input);
142 form.appendChild(btn);
143 inner.appendChild(form);
144 }
145
146 // Socials
147 if (opts.showSocials && opts.socialLinks && opts.socialLinks.length) {
148 var socialsRow = document.createElement('div');
149 socialsRow.className = 'bkbg-csn-socials';
150 var _IP = window.bkbgIconPicker;
151 opts.socialLinks.forEach(function (s) {
152 var a = document.createElement('a');
153 a.className = 'bkbg-csn-social-link';
154 a.href = s.url || '#';
155 a.title = s.platform || '';
156 a.style.cssText = 'background:rgba(255,255,255,.1);color:' + (opts.textColor || '#94a3b8') + ';';
157 var _iType = s.iconType || 'custom-char';
158 if (_IP && _iType !== 'custom-char') {
159 var _in = _IP.buildFrontendIcon(_iType, s.icon, s.iconDashicon, s.iconImageUrl, s.iconDashiconColor);
160 if (_in) a.appendChild(_in);
161 else a.textContent = s.icon || '';
162 } else {
163 a.textContent = s.icon || '';
164 }
165 a.target = '_blank';
166 a.rel = 'noopener';
167 socialsRow.appendChild(a);
168 });
169 inner.appendChild(socialsRow);
170 }
171
172 wrap.appendChild(inner);
173 root.parentNode.replaceChild(wrap, root);
174 });
175 })();
176