/* V7.31.8-R32 | Professional bilingual language governance. */ (() => { 'use strict'; const root = document.documentElement; const currentFile = decodeURIComponent(window.location.pathname.split('/').pop() || 'index.html').toLowerCase(); const archiveSummarySelector = '[data-v7318-english-archive-summary]'; const languageLayoutStyleId = 'dbc-v7318-language-layout-r32'; const commonAria = Object.freeze({ '展开导航': 'Expanded navigation', '打开导航': 'Open navigation', '关闭导航': 'Close navigation', '移动端导航': 'Mobile navigation', '主导航': 'Main navigation', 'DBC 世界杯竞猜官网首页': 'DBC homepage', '博碳包装页面路径': 'BIOTEN Packaging breadcrumb', '博碳包装页面层级': 'BIOTEN Packaging page hierarchy', '网站页脚导航': 'Website footer navigation', '当前页面关系路径': 'Current page relationship', '生命健康研究页内导航': 'Life-science research in-page navigation', 'Bioten Plus 项目最小验证矩阵,可横向滚动': 'Bioten Plus minimum project-validation matrix; horizontally scrollable', 'Bioten Plus 项目闭环': 'Bioten Plus project loop', 'Bioten Plus 应用护照': 'Bioten Plus application passport', '水性阻隔涂层工艺结构性能研究矩阵,可横向滚动': 'Waterborne barrier-coating process, structure and performance research matrix; horizontally scrollable', '美妆纸盒计划验证矩阵,可横向滚动': 'Planned beauty-carton validation matrix; horizontally scrollable', '酒店洗漱用品纸基包装袋计划验证矩阵,可横向滚动': 'Planned paper-pouch validation matrix for hotel amenities; horizontally scrollable', '技术闭环路径': 'Technical validation loop', '文章护照': 'Article passport', '发布系统特征': 'Publishing-system features', '新应用发布筛选': 'New-application release filters', '证据阶段': 'Evidence stage', }); const refreshDelays = [0, 100, 420, 1000, 2200]; let scheduleVersion = 0; function language() { return root.dataset.lang === 'en' || root.lang.toLowerCase().startsWith('en') ? 'en' : 'zh'; } function installLanguageLayoutGuard() { if (document.getElementById(languageLayoutStyleId)) return; const style = document.createElement('style'); style.id = languageLayoutStyleId; style.textContent = ` @media (max-width: 860px) { html body.dbc-global-nav-active .site-header.site-header .dbc-nav-trigger > [data-nav-cn] { flex: 0 0 auto !important; min-width: max-content !important; white-space: nowrap !important; word-break: keep-all !important; overflow-wrap: normal !important; } } `; document.head.appendChild(style); } function setDirectText(element, value) { if (!element || typeof value !== 'string') return; if (!element.children.length) { if (element.textContent !== value) element.textContent = value; return; } const textNode = [...element.childNodes].find((node) => node.nodeType === Node.TEXT_NODE && node.nodeValue.trim()); if (textNode && textNode.nodeValue.trim() !== value) textNode.nodeValue = `${value} `; } function syncPairedContent(next) { const key = next === 'en' ? 'navEn' : 'navCn'; document.querySelectorAll('[data-nav-cn][data-nav-en]').forEach((element) => { setDirectText(element, element.dataset[key]); }); document.querySelectorAll('[data-aria-cn][data-aria-en]').forEach((element) => { const value = element.dataset[next === 'en' ? 'ariaEn' : 'ariaCn']; if (typeof value === 'string') element.setAttribute('aria-label', value); }); document.querySelectorAll('[data-alt-cn][data-alt-en], [data-alt-zh][data-alt-en]').forEach((element) => { const value = next === 'en' ? element.dataset.altEn : (element.dataset.altCn || element.dataset.altZh); if (typeof value === 'string') element.setAttribute('alt', value); }); document.querySelectorAll('[data-label-zh][data-label-en]').forEach((element) => { const value = element.dataset[next === 'en' ? 'labelEn' : 'labelZh']; if (typeof value === 'string') element.setAttribute('aria-label', value); }); document.querySelectorAll('[data-v7318-localized-label]').forEach((element) => { element.lang = next === 'en' ? 'en' : 'zh-CN'; }); } function syncPageTitle(next) { const title = document.querySelector('title[data-v7318-title-zh][data-v7318-title-en]'); if (!title) return; const value = title.dataset[next === 'en' ? 'v7318TitleEn' : 'v7318TitleZh']; if (value && document.title !== value) document.title = value; } function installTitleGuard() { const title = document.querySelector('title[data-v7318-title-zh][data-v7318-title-en]'); if (!title || title.dataset.v7318TitleGuard === 'true') return; title.dataset.v7318TitleGuard = 'true'; const observer = new MutationObserver(() => syncPageTitle(language())); observer.observe(title, { childList: true, characterData: true, subtree: true }); } function syncSkipLink(next) { document.querySelectorAll('.skip-link[href^="#"]').forEach((link) => { if (!link.dataset.v7318SkipZh) link.dataset.v7318SkipZh = link.textContent.trim() || '跳至主要内容'; link.textContent = next === 'en' ? 'Skip to main content' : link.dataset.v7318SkipZh; link.setAttribute('aria-label', next === 'en' ? 'Skip to main content' : link.dataset.v7318SkipZh); }); } function syncGeneratedAria(next) { document.querySelectorAll('[aria-label]').forEach((element) => { if (!element.dataset.v7318LanguageAriaZh) { const current = element.getAttribute('aria-label') || ''; if (commonAria[current]) element.dataset.v7318LanguageAriaZh = current; } const source = element.dataset.v7318LanguageAriaZh; if (!source || !commonAria[source]) return; element.setAttribute('aria-label', next === 'en' ? commonAria[source] : source); }); } function archiveEntry() { const catalog = Array.isArray(window.BiotenObserverCatalogV7318) ? window.BiotenObserverCatalogV7318 : []; return catalog.find((entry) => String(entry.file || '').toLowerCase() === currentFile) || null; } function relativeLanguageUrl(next, hash = '') { const url = new URL(window.location.href); url.searchParams.set('lang', next); url.searchParams.delete('audit'); url.searchParams.delete('mode'); url.searchParams.delete('width'); if (hash) url.hash = hash; return `${currentFile}${url.search}${url.hash}`; } function createArchiveSummary() { const article = document.querySelector('[data-observer-article]'); if (article?.hasAttribute('data-v7318-disable-english-archive-summary')) return null; const body = article?.querySelector('.observer-article-body'); const original = body?.querySelector('[data-v750-original-cn]'); if (!article || !body || !original || body.querySelector('[data-v750-article-en]')) return null; const entry = archiveEntry(); if (!entry || !entry.titleEn || !entry.deckEn) return null; original.id ||= 'observer-original-record'; const section = document.createElement('section'); section.className = 'news-body observer-english-archive'; section.dataset.v750ArticleEn = ''; section.dataset.v7318EnglishArchiveSummary = 'true'; section.dataset.v720LanguageManaged = ''; section.lang = 'en'; section.hidden = true; const kicker = document.createElement('p'); kicker.className = 'observer-english-archive__kicker'; kicker.textContent = 'ENGLISH ARCHIVE BRIEF'; const heading = document.createElement('h2'); heading.textContent = 'Publication at a Glance'; const lead = document.createElement('p'); lead.className = 'observer-english-archive__lead'; lead.textContent = entry.deckEn; const meta = document.createElement('dl'); meta.className = 'observer-english-archive__meta'; [ ['Published', entry.dateEn || entry.date || ''], ['Publisher', entry.authorEn || entry.brand || 'DBC'], ['Channel', entry.observerCategoryEn || 'Company News'], ['Record', entry.sourceTypeEn || 'Archived publication'], ].forEach(([term, value]) => { if (!value) return; const group = document.createElement('div'); const dt = document.createElement('dt'); const dd = document.createElement('dd'); dt.textContent = term; dd.textContent = value; group.append(dt, dd); meta.append(group); }); const scope = document.createElement('p'); scope.className = 'observer-english-archive__scope'; scope.textContent = 'Concise English record · Original Chinese publication retained as the source archive.'; const action = document.createElement('a'); action.className = 'observer-english-archive__action'; action.href = relativeLanguageUrl('zh', '#observer-original-record'); action.textContent = 'View Original Chinese Publication'; action.setAttribute('hreflang', 'zh-CN'); section.append(kicker, heading, lead, meta, scope, action); original.insertAdjacentElement('afterend', section); article.dataset.v7318ArchiveLanguage = 'english-brief-available'; return section; } function syncArchiveSummary(next) { const article = document.querySelector('[data-observer-article]'); const body = article?.querySelector('.observer-article-body'); const original = body?.querySelector('[data-v750-original-cn]'); const summary = body?.querySelector(archiveSummarySelector) || createArchiveSummary(); if (!original || !summary) return; const english = next === 'en'; original.hidden = english; original.toggleAttribute('inert', english); summary.hidden = !english; summary.toggleAttribute('inert', !english); article.toggleAttribute('data-v7318-archive-english-active', english); article.querySelectorAll('.v770-article-toc, .v750-article-toc').forEach((toc) => { toc.hidden = english; toc.toggleAttribute('inert', english); }); } function sync(next = language()) { root.dataset.v7318LanguageProfessional = 'bilingual-integrity-r32'; document.body?.setAttribute('data-v7318-language-governance', 'professional-bilingual-r32'); syncPairedContent(next); syncPageTitle(next); syncSkipLink(next); syncGeneratedAria(next); syncArchiveSummary(next); } function schedule(next = language()) { installLanguageLayoutGuard(); installTitleGuard(); const version = ++scheduleVersion; sync(next); refreshDelays.filter((delay) => delay > 0).forEach((delay) => window.setTimeout(() => { if (version !== scheduleVersion) return; sync(next); }, delay)); } document.addEventListener('dbc:languagechange', (event) => { schedule(event.detail?.language === 'en' ? 'en' : 'zh'); }); document.addEventListener('dbc:translations-loaded', () => schedule(language())); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => schedule(language()), { once: true }); } else { schedule(language()); } })();