Files
mengya-nav/cf-nav-frontend/apply-config.js
2026-03-11 20:46:24 +08:00

90 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 根据 config.js 应用站点名称到页面标题、meta、标题元素并动态生成 PWA manifest
* 需在 config.js 之后加载
*/
(function () {
var name = window.SITE_NAME || '萌芽导航';
var shortName = window.SITE_SHORT_NAME || '萌芽';
var desc = window.SITE_DESCRIPTION || (name + ' - 轻量好用的网址导航');
document.title = name;
var metaDesc = document.querySelector('meta[name="description"]');
if (metaDesc) metaDesc.setAttribute('content', desc);
var metaApp = document.querySelector('meta[name="apple-mobile-web-app-title"]');
if (metaApp) metaApp.setAttribute('content', name);
var siteTitle = document.getElementById('site-title');
if (siteTitle) siteTitle.textContent = '\u2728 ' + name;
var adminTitle = document.getElementById('admin-title');
if (adminTitle) adminTitle.textContent = name + '-管理后台';
var offlineTitle = document.getElementById('offline-title');
if (offlineTitle) {
document.title = name + ' - 离线';
offlineTitle.textContent = name + ' - 离线';
}
var offlineLogo = document.getElementById('offline-logo');
if (offlineLogo) offlineLogo.textContent = shortName.charAt(0);
var glassOpacity = window.SITE_GLASS_OPACITY;
if (typeof glassOpacity === 'number' && glassOpacity >= 0 && glassOpacity <= 1) {
document.documentElement.style.setProperty('--site-glass-opacity', String(glassOpacity));
}
var isMobile = window.matchMedia('(max-width: 767px)').matches;
var bgImages = isMobile
? window.SITE_MOBILE_BACKGROUND_IMAGES
: window.SITE_DESKTOP_BACKGROUND_IMAGES;
if (!Array.isArray(bgImages) || bgImages.length === 0) {
bgImages = isMobile ? window.SITE_DESKTOP_BACKGROUND_IMAGES : window.SITE_MOBILE_BACKGROUND_IMAGES;
}
if (Array.isArray(bgImages) && bgImages.length > 0) {
var imgUrl = bgImages[Math.floor(Math.random() * bgImages.length)];
var applyBg = function () {
if (!document.body) return;
var bgEl = document.createElement('div');
bgEl.className = 'site-bg';
bgEl.setAttribute('aria-hidden', 'true');
bgEl.style.backgroundImage = 'url(' + imgUrl + ')';
document.body.insertBefore(bgEl, document.body.firstChild);
};
if (document.body) {
applyBg();
} else {
document.addEventListener('DOMContentLoaded', applyBg);
}
}
var manifest = {
name: name,
short_name: shortName,
description: desc,
lang: 'zh-CN',
dir: 'ltr',
id: '/',
start_url: '/?source=pwa',
scope: '/',
display: 'standalone',
display_override: ['standalone', 'minimal-ui', 'browser'],
orientation: 'portrait-primary',
theme_color: '#10b981',
background_color: '#f8fafc',
categories: ['productivity', 'utilities'],
prefer_related_applications: false,
icons: [
{ src: '/logo.png', type: 'image/png', sizes: '2048x2048', purpose: 'any' },
{ src: '/logo.png', type: 'image/png', sizes: '2048x2048', purpose: 'maskable' },
{ src: '/favicon.ico', type: 'image/x-icon', sizes: '16x16 24x24 32x32 48x48 64x64', purpose: 'any' }
]
};
var blob = new Blob([JSON.stringify(manifest)], { type: 'application/json' });
var url = URL.createObjectURL(blob);
var link = document.querySelector('link[rel="manifest"]');
if (link) link.href = url;
else {
link = document.createElement('link');
link.rel = 'manifest';
link.href = url;
document.head.appendChild(link);
}
})();