夜间模式

This commit is contained in:
2026-06-18 18:38:38 +08:00 Unverified
parent aa87051c15
commit b066a94ce3
8 changed files with 896 additions and 80 deletions
+45 -5
View File
@@ -109,6 +109,38 @@ function renderTalks() {
waterfall('#talk');
};
const withImageParams = (url) => {
if (!url) return '';
try {
const parsedUrl = new URL(url, window.location.origin);
if (!parsedUrl.searchParams.has('fmt')) parsedUrl.searchParams.set('fmt', 'webp');
if (!parsedUrl.searchParams.has('q')) parsedUrl.searchParams.set('q', '75');
return parsedUrl.toString();
} catch {
return url;
}
};
const getImageUrl = (image) => {
if (!image) return '';
if (typeof image === 'string') return image;
return image.image_url || image.url || image.src || image.file?.url || '';
};
const getTalkImages = (item) => {
if (Array.isArray(item.images) && item.images.length > 0) {
return item.images.map(getImageUrl).filter(Boolean);
}
if (Array.isArray(item.echo_files) && item.echo_files.length > 0) {
return item.echo_files
.map((echoFile) => getImageUrl(echoFile.file || echoFile))
.filter(Boolean);
}
return [];
};
const formatTalk = (item) => {
const date = formatTime(item.created_at);
let content = item.content || '';
@@ -119,16 +151,20 @@ function renderTalks() {
content = `<div class="talk_content_text">${content}</div>`;
// 图片
if (Array.isArray(item.images) && item.images.length > 0) {
const images = getTalkImages(item);
if (images.length > 0) {
const imgDiv = document.createElement('div');
imgDiv.className = 'zone_imgbox';
item.images.forEach(img => {
images.forEach(url => {
const imageUrl = withImageParams(url);
const link = document.createElement('a');
link.href = img.image_url + "?fmt=webp&q=75";
link.href = imageUrl;
link.setAttribute('data-fancybox', 'gallery');
link.className = 'fancybox';
const imgTag = document.createElement('img');
imgTag.src = img.image_url + "?fmt=webp&q=75";
imgTag.src = imageUrl;
imgTag.loading = 'lazy';
imgTag.alt = '';
link.appendChild(imgTag);
imgDiv.appendChild(link);
});
@@ -302,8 +338,12 @@ function renderTalks() {
};
const formatTime = (time) => {
const d = new Date(time);
const timestamp = Number(time);
const d = Number.isFinite(timestamp)
? new Date(timestamp < 100000000000 ? timestamp * 1000 : timestamp)
: new Date(time);
const pad = (n) => n.toString().padStart(2, '0');
if (Number.isNaN(d.getTime())) return '';
return `${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
};