/**
* 检测是否为移动端(触摸屏或小屏幕)
* @returns {boolean}
*/
export function isMobile() {
return window.matchMedia('(max-width: 768px), (pointer: coarse)').matches;
}
/**
* 返回当前系统配色对应的 Monaco 主题名
* @returns {'vs-dark'|'vs'}
*/
export function monacoTheme() {
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'vs-dark' : 'vs';
}
/**
* Update all time tags within a container
* @param {HTMLElement} container - The container to search for time tags (default: document)
*/
export function updateTimeTags(container = document) {
const timeTags = container.querySelectorAll('time');
for (const time of timeTags) {
const datetime = time.getAttribute('datetime');
if (datetime && !time.dataset.processed) {
const date = new Date(datetime);
const now = new Date();
const diff = (now - date) / 1000; // seconds
let timeString = '';
if (diff < 60) {
timeString = '刚刚';
} else if (diff < 3600) {
timeString = `${Math.floor(diff / 60)}分钟前`;
} else if (diff < 86400) {
timeString = `${Math.floor(diff / 3600)}小时前`;
} else if (diff < 2592000) { // 30 days
timeString = `${Math.floor(diff / 86400)}天前`;
} else if (diff < 31536000) { // 365 days
timeString = `${Math.floor(diff / 2592000)}个月前`;
} else {
timeString = `${Math.floor(diff / 31536000)}年前`;
}
time.textContent = timeString;
// Set title attribute if not present, so global tooltip handler can pick it up for hover events
if (!time.hasAttribute('title') && !time.hasAttribute('data-original-title')) {
time.setAttribute('title', datetime);
}
time.dataset.processed = "true";
}
}
}
评论加载中...