document.addEventListener('DOMContentLoaded', function() { const tooltip = document.getElementById('copyTooltip'); let timeoutId = null; // 确保初始状态下提示框是隐藏的 //tooltip.style.display = 'none'; // 复制函数 function copyToClipboard(text) { navigator.clipboard.writeText(text).then(() => { // 显示提示 tooltip.style.display = 'block'; tooltip.style.opacity = '1'; // 清除之前的定时器(如果存在) if (timeoutId) clearTimeout(timeoutId); // 设置新的定时器 timeoutId = setTimeout(() => { tooltip.style.opacity = '0'; setTimeout(() => { tooltip.style.display = 'none'; }, 300); // 等待淡出动画完成后再隐藏 }, 1500); }).catch(err => { tooltip.textContent = '复制失败,请重试'; tooltip.style.display = 'block'; tooltip.style.opacity = '1'; if (timeoutId) clearTimeout(timeoutId); timeoutId = setTimeout(() => { tooltip.style.opacity = '0'; setTimeout(() => { tooltip.style.display = 'none'; tooltip.textContent = '复制成功!'; // 重置文本 }, 300); }, 1500); console.error('复制失败:', err); }); } // 给所有复制链接添加点击事件 document.querySelectorAll('.text').forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const textToCopy = this.getAttribute('data-copy') || this.textContent; copyToClipboard(textToCopy); }); }); }); document.addEventListener('DOMContentLoaded', (event) => { const targetClassElement = document.querySelector('.post--single__title'); const postContent = document.querySelector('.post--single__content'); if (!postContent) return; let found = false; for (let i = 1; i <= 6 &&!found; i++) { if (postContent.querySelector(`h${i}`)) { found = true; } } if (!found) return; const heads = postContent.querySelectorAll('h1, h2, h3, h4, h5, h6'); const toc = document.createElement('div'); toc.id = 'toc'; toc.innerHTML = '
目录
'; // 插入到指定 class 元素之后 if (targetClassElement) { targetClassElement.parentNode.insertBefore(toc, targetClassElement.nextSibling); } let currentLevel = 0; let currentList = toc.querySelector('ul'); let levelCounts = [0]; heads.forEach((head, index) => { const level = parseInt(head.tagName.substring(1)); if (levelCounts[level] === undefined) { levelCounts[level] = 1; } else { levelCounts[level]++; } // 重置下级标题的计数器 levelCounts = levelCounts.slice(0, level + 1); if (currentLevel === 0) { currentLevel = level; } while (level > currentLevel) { let newList = document.createElement('ul'); if (!currentList.lastElementChild) { currentList.appendChild(newList); } else { currentList.lastElementChild.appendChild(newList); } currentList = newList; currentLevel++; levelCounts[currentLevel] = 1; } while (level < currentLevel) { currentList = currentList.parentElement; if (currentList.tagName.toLowerCase() === 'li') { currentList = currentList.parentElement; } currentLevel--; } const anchor = head.textContent.trim().replace(/\s+/g, '-'); head.id = anchor; const item = document.createElement('li'); const link = document.createElement('a'); link.href = `#${anchor}`; link.textContent = `${head.textContent}`; link.style.textDecoration = 'none'; item.appendChild(link); currentList.appendChild(item); }); }); function fetchWithRetry(url, retries = 3) { return fetch(url) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.text(); // 首先获取文本响应 }) .then(text => { try { return JSON.parse(text); // 尝试解析 JSON } catch (e) { console.error('Invalid JSON:', text); throw new Error('Invalid JSON response'); } }) .catch(error => { if (retries > 0) { console.log(`Retrying... (${retries} attempts left)`); return new Promise(resolve => setTimeout(resolve, 1000)) // 等待1秒 .then(() => fetchWithRetry(url, retries - 1)); } throw error; }); } document.addEventListener('DOMContentLoaded', function() { const doubanLinks = document.querySelectorAll('a[href^="https://movie.douban.com/subject/"]'); doubanLinks.forEach(link => { const url = link.href; const movieId = url.match(/subject\/(\d+)/)[1]; link.innerHTML += ' (加载中...)'; fetchWithRetry(`https://api.loliko.cn/movies/${movieId}`) .then(data => { const movieInfo = createMovieInfoHTML(data, url); const wrapper = document.createElement('div'); wrapper.innerHTML = movieInfo; link.parentNode.replaceChild(wrapper, link); }) .catch(error => { console.error('Error fetching movie data:', error); // 显示错误消息给用户 link.innerHTML = `加载失败 查看豆瓣电影详情`; }) .finally(() => { const loadingSpan = link.querySelector('.loading'); if (loadingSpan) { loadingSpan.remove(); } }); }); }); function createMovieInfoHTML(data, originalUrl) { if (!data || data.error || Object.keys(data).length === 0) { return `查看豆瓣电影详情`; } return `
豆瓣评分 : ${data.rating}
${data.year}年 · ${data.country} · ${data.genre} · 导演: ${data.director} · 演员 : ${data.actor}
`; }