{"version":3,"sources":["jsdelivr-header.js","/gh/Yeqingky/Friend-Circle-Lite@master/main/fclite.js"],"names":[],"mappings":"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","file":"/gh/Yeqingky/Friend-Circle-Lite@master/main/fclite.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/Yeqingky/Friend-Circle-Lite@master/main/fclite.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","function initialize_fc_lite() {\n\n    // 用户配置\n    // 设置默认配置\n    UserConfig = {\n        private_api_url: UserConfig?.private_api_url || \"\", \n        page_turning_number: UserConfig?.page_turning_number || 24, // 默认24篇\n        error_img: UserConfig?.error_img || \"https://fastly.jsdelivr.net/gh/willow-god/Friend-Circle-Lite/static/favicon.ico\" // 默认头像\n    };\n\n    const root = document.getElementById('friend-circle-lite-root');\n    \n    if (!root) return; // 确保根元素存在\n\n    // 清除之前的内容\n    root.innerHTML = '';\n\n    const randomArticleContainer = document.createElement('div');\n    randomArticleContainer.id = 'random-article';\n    root.appendChild(randomArticleContainer);\n\n    const container = document.createElement('div');\n    container.className = 'articles-container';\n    container.id = 'articles-container';\n    root.appendChild(container);\n    \n    const loadMoreBtn = document.createElement('button');\n    loadMoreBtn.id = 'load-more-btn';\n    loadMoreBtn.innerText = '再来亿点';\n    root.appendChild(loadMoreBtn);\n\n    // 创建统计信息容器\n    const statsContainer = document.createElement('div');\n    statsContainer.id = 'stats-container';\n    root.appendChild(statsContainer);\n\n    let start = 0; // 记录加载起始位置\n    let allArticles = []; // 存储所有文章\n\n    function loadMoreArticles() {\n        const cacheKey = 'friend-circle-lite-cache';\n        const cacheTimeKey = 'friend-circle-lite-cache-time';\n        const cacheTime = localStorage.getItem(cacheTimeKey);\n        const now = new Date().getTime();\n\n        if (cacheTime && (now - cacheTime < 10 * 60 * 1000)) { // 缓存时间小于10分钟\n            const cachedData = JSON.parse(localStorage.getItem(cacheKey));\n            if (cachedData) {\n                processArticles(cachedData);\n                return;\n            }\n        }\n\n        fetch(`${UserConfig.private_api_url}all.json`)\n            .then(response => response.json())\n            .then(data => {\n                localStorage.setItem(cacheKey, JSON.stringify(data));\n                localStorage.setItem(cacheTimeKey, now.toString());\n                processArticles(data);\n            })\n            .finally(() => {\n                loadMoreBtn.innerText = '再来亿点'; // 恢复按钮文本\n            });\n    }\n\n    function processArticles(data) {\n        allArticles = data.article_data;\n        // 处理统计数据\n        const stats = data.statistical_data;\n        statsContainer.innerHTML = `\n            <div>订阅:${stats.friends_num}   活跃:${stats.active_num}   总文章数:${stats.article_num}<br></div>\n            <div>更新时间:${stats.last_updated_time}</div>\n        `;\n\n        displayRandomArticle(); // 显示随机友链卡片\n\n        const articles = allArticles.slice(start, start + UserConfig.page_turning_number);\n\n        articles.forEach(article => {\n            const card = document.createElement('div');\n            card.className = 'card';\n\n            const title = document.createElement('div');\n            title.className = 'card-title';\n            title.innerText = article.title;\n            card.appendChild(title);\n            title.onclick = () => window.open(article.link, '_blank');\n\n            const author = document.createElement('div');\n            author.className = 'card-author';\n            const authorImg = document.createElement('img');\n            authorImg.className = 'no-lightbox';\n            authorImg.src = article.avatar || UserConfig.error_img; // 使用默认头像\n            authorImg.onerror = () => authorImg.src = UserConfig.error_img; // 头像加载失败时使用默认头像\n            author.appendChild(authorImg);\n            author.appendChild(document.createTextNode(article.author));\n            card.appendChild(author);\n\n            author.onclick = () => {\n                showAuthorArticles(article.author, article.avatar, article.link);\n            };\n\n            const date = document.createElement('div');\n            date.className = 'card-date';\n            date.innerText = \"🗓️\" + article.created.substring(0, 10);\n            card.appendChild(date);\n\n            const bgImg = document.createElement('img');\n            bgImg.className = 'card-bg no-lightbox';\n            bgImg.src = article.avatar || UserConfig.error_img;\n            bgImg.onerror = () => bgImg.src = UserConfig.error_img; // 头像加载失败时使用默认头像\n            card.appendChild(bgImg);\n\n            container.appendChild(card);\n        });\n\n        start += UserConfig.page_turning_number;\n\n        if (start >= allArticles.length) {\n            loadMoreBtn.style.display = 'none'; // 隐藏按钮\n        }\n    }\n\n    // 显示随机文章的逻辑\n    function displayRandomArticle() {\n        const randomArticle = allArticles[Math.floor(Math.random() * allArticles.length)];\n        randomArticleContainer.innerHTML = `\n            <div class=\"random-container\">\n                <div class=\"random-container-title\">随机钓鱼</div>\n                <div class=\"random-title\">${randomArticle.title}</div>\n                <div class=\"random-author\">作者: ${randomArticle.author}</div>\n            </div>\n            <div class=\"random-button-container\">\n                <a href=\"#\" id=\"refresh-random-article\">刷新</a>\n                <button class=\"random-link-button\" onclick=\"window.open('${randomArticle.link}', '_blank')\">过去转转</button>\n            </div>\n        `;\n\n        // 为刷新按钮添加事件监听器\n        const refreshBtn = document.getElementById('refresh-random-article');\n        refreshBtn.addEventListener('click', function (event) {\n            event.preventDefault(); // 阻止默认的跳转行为\n            displayRandomArticle(); // 调用显示随机文章的逻辑\n        });\n    }\n\n    function showAuthorArticles(author, avatar, link) {\n        // 如果不存在，则创建模态框结构\n        if (!document.getElementById('fclite-modal')) {\n            const modal = document.createElement('div');\n            modal.id = 'modal';\n            modal.className = 'modal';\n            modal.innerHTML = `\n            <div class=\"modal-content\">\n                <img id=\"modal-author-avatar\" src=\"\" alt=\"\">\n                <a id=\"modal-author-name-link\"></a>\n                <div id=\"modal-articles-container\"></div>\n                <img id=\"modal-bg\" src=\"\" alt=\"\">\n            </div>\n            `;\n            root.appendChild(modal);\n        }\n\n        const modal = document.getElementById('modal');\n        const modalArticlesContainer = document.getElementById('modal-articles-container');\n        const modalAuthorAvatar = document.getElementById('modal-author-avatar');\n        const modalAuthorNameLink = document.getElementById('modal-author-name-link');\n        const modalBg = document.getElementById('modal-bg');\n\n        modalArticlesContainer.innerHTML = ''; // 清空之前的内容\n        modalAuthorAvatar.src = avatar  || UserConfig.error_img; // 使用默认头像\n        modalAuthorAvatar.onerror = () => modalAuthorAvatar.src = UserConfig.error_img; // 头像加载失败时使用默认头像\n        modalBg.src = avatar || UserConfig.error_img; // 使用默认头像\n        modalBg.onerror = () => modalBg.src = UserConfig.error_img; // 头像加载失败时使用默认头像\n        modalAuthorNameLink.innerText = author;\n        modalAuthorNameLink.href = new URL(link).origin;\n\n        const authorArticles = allArticles.filter(article => article.author === author);\n        // 仅仅取前五个，防止文章过多导致模态框过长，如果不够五个则全部取出\n        authorArticles.slice(0, 4).forEach(article => {\n            const articleDiv = document.createElement('div');\n            articleDiv.className = 'modal-article';\n\n            const title = document.createElement('a');\n            title.className = 'modal-article-title';\n            title.innerText = article.title;\n            title.href = article.link;\n            title.target = '_blank';\n            articleDiv.appendChild(title);\n\n            const date = document.createElement('div');\n            date.className = 'modal-article-date';\n            date.innerText = \"📅\" + article.created.substring(0, 10);\n            articleDiv.appendChild(date);\n\n            modalArticlesContainer.appendChild(articleDiv);\n        });\n\n        // 设置类名以触发显示动画\n        modal.style.display = 'block';\n        setTimeout(() => {\n            modal.classList.add('modal-open');\n        }, 10); // 确保显示动画触发\n    }\n\n    // 隐藏模态框的函数\n    function hideModal() {\n        const modal = document.getElementById('modal');\n        modal.classList.remove('modal-open');\n        modal.addEventListener('transitionend', () => {\n            modal.style.display = 'none';\n            root.removeChild(modal);\n        }, { once: true });\n    }\n\n    // 初始加载\n    loadMoreArticles();\n\n    // 加载更多按钮点击事件\n    loadMoreBtn.addEventListener('click', loadMoreArticles);\n\n    // 点击遮罩层关闭模态框\n    window.onclick = function(event) {\n        const modal = document.getElementById('modal');\n        if (event.target === modal) {\n            hideModal();\n        }\n    };\n};\n\nfunction whenDOMReady() {\n    initialize_fc_lite();\n}\n\nwhenDOMReady();\ndocument.addEventListener(\"pjax:complete\", initialize_fc_lite);"]}