FlashPage · 倒计时落地页生成器

__MSG_APP_SUBTITLE__

__MSG_TEMPLATE_SELECT_LABEL__
__MSG_BASIC_INFO_LABEL__
__MSG_PRODUCT_NAME_LABEL__
__MSG_DESC_LABEL__
__MSG_LAUNCH_DATE_LABEL__ __MSG_LAUNCH_DATE_HINT__
__MSG_COLOR_THEME_LABEL__
__MSG_EMAIL_COLLECT_LABEL__
__MSG_COLLECTED_PREFIX__ 0
__MSG_SOCIAL_LINKS_LABEL__
Nova
即将到来,敬请期待
00
__MSG_DAY__
00
00
__MSG_MINUTE__
00
__MSG_SECOND__
(function(){ 'use strict'; // i18n framework window.__i18n = { lang: 'zh', translations: { zh: { '__MSG_APP_TITLE__': 'FlashPage · 倒计时落地页生成器', '__MSG_APP_SUBTITLE__': '选择模板、填写信息、即时预览 — 快速生成 Coming Soon 页面', '__MSG_TEMPLATE_SELECT_LABEL__': '模板选择', '__MSG_TEMPLATE_MINIMAL__': '简约', '__MSG_TEMPLATE_TECH__': '科技', '__MSG_TEMPLATE_NEON__': '霓虹', '__MSG_TEMPLATE_SIMPLE__': '极简', '__MSG_BASIC_INFO_LABEL__': '基本信息', '__MSG_PRODUCT_NAME_LABEL__': '产品名', '__MSG_DESC_LABEL__': '描述文字', '__MSG_LAUNCH_DATE_LABEL__': '上线日期', '__MSG_LAUNCH_DATE_HINT__': '(选填,可精确到时分)', '__MSG_COLOR_THEME_LABEL__': '颜色主题', '__MSG_EMAIL_COLLECT_LABEL__': '邮箱收集', '__MSG_COLLECTED_PREFIX__': '已收集', '__MSG_COLLECTED_SUFFIX__': '个', '__MSG_ADD_BUTTON__': '添加', '__MSG_SOCIAL_LINKS_LABEL__': '社交链接', '__MSG_TWITTER__': 'Twitter', '__MSG_PRODUCTHUNT__': 'ProductHunt', '__MSG_GITHUB__': 'GitHub', '__MSG_ADD_CUSTOM_SOCIAL__': '+ 添加自定义社交', '__MSG_COPY_CONFIG__': '复制配置 JSON', '__MSG_EXPORT_CSV__': '导出订阅 CSV', '__MSG_CLEAR__': '清空', '__MSG_FULLSCREEN__': '预览全屏', '__MSG_EMAIL_PLACEHOLDER__': '输入邮箱获取最新动态', '__MSG_PRODUCT_NAME_PLACEHOLDER__': '输入产品名称', '__MSG_DESC_PLACEHOLDER__': '输入描述文字', '__MSG_EMAIL_ADDRESS_PLACEHOLDER__': '输入邮箱地址', '__MSG_PREVIEW_DESC_DEFAULT__': '即将到来,敬请期待', '__MSG_PRODUCT_NAME_DEFAULT__': 'Nova', '__MSG_DAY__': '天', '__MSG_HOUR__': '时', '__MSG_MINUTE__': '分', '__MSG_SECOND__': '秒', '__MSG_SUBSCRIBE__': '订阅' } }, t: function(key) { var langData = this.translations[this.lang] || this.translations.zh; return langData[key] || key; }, apply: function() { var self = this; document.querySelectorAll('*').forEach(function(el) { if (el.children.length === 0 && el.textContent.trim().startsWith('__MSG_')) { el.textContent = self.t(el.textContent.trim()); } if (el.placeholder && el.placeholder.startsWith('__MSG_')) { el.placeholder = self.t(el.placeholder); } }); // specific elements with text in attributes var targets = ['cdDays','cdHours','cdMinutes','cdSeconds']; targets.forEach(function(id) { var el = document.getElementById(id); if (el && el.textContent.trim().startsWith('__MSG_')) { el.textContent = self.t(el.textContent.trim()); } }); } }; window.__i18n.apply(); // escHtml (if not already defined) if (typeof window.escHtml !== 'function') { window.escHtml = function(str) { if (!str) return ''; var div = document.createElement('div'); div.appendChild(document.createTextNode(str)); return div.innerHTML; }; } // Global error capture window.onerror = function(msg, url, line, col, error) { console.error('[FlashPage Global Error]', msg, error); return true; }; // Nav-bar integration if (window.NavBar && typeof NavBar.init === 'function') { try { NavBar.init({ user: null }); } catch(e) { console.warn('[NavBar] init failed', e); } } // Safe listener wrapper (if not defined) if (typeof window.safeListener !== 'function') { window.safeListener = function(fn) { return function(e) { try { fn.call(this, e); } catch(err) { console.error('[Event Error]', err); } }; }; } // Patch addEmailBtn if missing click handler (due to code truncation) var addBtn = document.getElementById('addEmailBtn'); if (addBtn && !addBtn._patched) { addBtn._patched = true; addBtn.addEventListener('click', safeListener(function() { var input = document.getElementById('emailInput'); if (!input) return; var email = input.value.trim(); if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { var toast = document.getElementById('toast'); if (toast) { toast.textContent = '请输入有效邮箱地址'; toast.classList.add('show'); } return; } var subs = JSON.parse(localStorage.getItem('flashpage_subscribers') || '[]'); if (subs.includes(email)) { var toast = document.getElementById('toast'); if (toast) { toast.textContent = '该邮箱已订阅'; toast.classList.add('show'); } return; } subs.push(email); localStorage.setItem('flashpage_subscribers', JSON.stringify(subs)); // trigger subscriber re-render if (window.renderSubscribers) window.renderSubscribers(); input.value = ''; var toast = document.getElementById('toast'); if (toast) { toast.textContent = '订阅成功!'; toast.classList.add('show'); } })); } })();