(function (root, factory) {
if (typeof module === 'object' && module.exports) {
module.exports = factory(root);
return;
}
root.MediaDisplay = factory(root);
if (root.document) {
root.document.addEventListener('DOMContentLoaded', function () {
root.MediaDisplay.init(root.document);
});
}
})(typeof globalThis !== 'undefined' ? globalThis : window, function (root) {
'use strict';
function stringValue(value) {
return value === undefined || value === null ? '' : String(value);
}
function escapeHtml(value) {
return stringValue(value)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function normalizeId(value) {
var text;
if (value === undefined || value === null || value === '') return '';
if (typeof value === 'number' && !Number.isSafeInteger(value)) return '';
text = String(value).trim();
return /^[1-9][0-9]*$/.test(text) ? text : '';
}
function normalizeAccessUrl(value) {
var url;
try {
url = new URL(stringValue(value).trim());
} catch (error) {
return '';
}
return url.protocol === 'https:' || url.protocol === 'http:' ? url.href : '';
}
function normalizeFileAccess(value) {
var source = value || {};
var accessUrl = normalizeAccessUrl(source.accessUrl);
var fileId = normalizeId(source.fileId);
var fileSize;
var normalized;
if (!accessUrl) return null;
if (source.fileId !== undefined && source.fileId !== null && source.fileId !== '' && !fileId) return null;
normalized = {
fileId: fileId,
fileName: stringValue(source.fileName).trim(),
mediaType: stringValue(source.mediaType).trim().toLowerCase(),
accessUrl: accessUrl,
expiresAt: stringValue(source.expiresAt).trim()
};
fileSize = Number(source.fileSize);
if (source.fileSize !== undefined && source.fileSize !== null && source.fileSize !== '' &&
Number.isSafeInteger(fileSize) && fileSize >= 0) {
normalized.fileSize = fileSize;
}
if (!normalized.fileId) delete normalized.fileId;
if (!normalized.fileName) delete normalized.fileName;
if (!normalized.mediaType) delete normalized.mediaType;
if (!normalized.expiresAt) delete normalized.expiresAt;
return normalized;
}
function normalizeFileList(values) {
if (!Array.isArray(values)) return [];
return values.map(normalizeFileAccess).filter(Boolean);
}
function classNames(base, value) {
var additions = stringValue(value).split(/\s+/).filter(function (name) {
return /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name);
});
return [base].concat(additions).join(' ');
}
function renderImage(value, options) {
var file = normalizeFileAccess(value);
var settings = options || {};
var alt;
var loading;
var caption;
if (!file) return '';
alt = stringValue(settings.alt || file.fileName || '图片').trim();
loading = settings.eager === true ? 'eager' : 'lazy';
caption = stringValue(settings.caption).trim();
return '' +
'';
}
function renderVideo(value, options) {
var file = normalizeFileAccess(value);
var settings = options || {};
var poster = normalizeFileAccess(settings.posterFile);
var title;
if (!file) return '';
title = stringValue(settings.title || file.fileName || '家族视频').trim();
return '