// 友情链接页面处理脚本 // 此脚本作为全局脚本加载,不受 Swup 页面切换影响 (() => { console.log("[Friends Global] Script loaded"); // 使用全局变量存储状态 if (typeof window.friendsPageState === "undefined") { window.friendsPageState = { initialized: false, eventListeners: [], mutationObserver: null, copySuccessText: "已复制", // 默认值,会被页面覆盖 }; } // 初始化函数 function initFriendsPage() { console.log("[Friends Global] initFriendsPage called"); var searchInput = document.getElementById("friend-search"); var friendsGrid = document.getElementById("friends-grid"); var noResults = document.getElementById("no-results"); // 如果关键元素不存在,直接返回 if (!searchInput || !friendsGrid || !noResults) { return false; } var tagFilters = document.querySelectorAll(".filter-tag"); var friendCards = document.querySelectorAll(".friend-card"); var copyButtons = document.querySelectorAll(".copy-link-btn"); console.log("[Friends Global] Found elements:", { cards: friendCards.length, filters: tagFilters.length, copyButtons: copyButtons.length, }); // 从页面获取复制成功文本 var copySuccessTextElement = document.getElementById( "friends-copy-success-text", ); if (copySuccessTextElement) { window.friendsPageState.copySuccessText = copySuccessTextElement.textContent; } // 清理旧的事件监听器 if (window.friendsPageState.eventListeners.length > 0) { console.log( "[Friends Global] Cleaning", window.friendsPageState.eventListeners.length, "old listeners", ); for (var i = 0; i < window.friendsPageState.eventListeners.length; i++) { var listener = window.friendsPageState.eventListeners[i]; var element = listener[0]; var type = listener[1]; var handler = listener[2]; if (element && element.removeEventListener) { element.removeEventListener(type, handler); } } window.friendsPageState.eventListeners = []; } var currentTag = "all"; var searchTerm = ""; // 过滤函数 function filterFriends() { var visibleCount = 0; for (var i = 0; i < friendCards.length; i++) { var card = friendCards[i]; var title = (card.getAttribute("data-title") || "").toLowerCase(); var desc = (card.getAttribute("data-desc") || "").toLowerCase(); var tags = card.getAttribute("data-tags") || ""; var matchesSearch = !searchTerm || title.indexOf(searchTerm) >= 0 || desc.indexOf(searchTerm) >= 0; var matchesTag = currentTag === "all" || tags.split(",").indexOf(currentTag) >= 0; if (matchesSearch && matchesTag) { card.style.display = ""; visibleCount++; } else { card.style.display = "none"; } } if (visibleCount === 0) { noResults.classList.remove("hidden"); friendsGrid.classList.add("hidden"); } else { noResults.classList.add("hidden"); friendsGrid.classList.remove("hidden"); } } // 搜索功能 var searchHandler = (e) => { searchTerm = e.target.value.toLowerCase(); filterFriends(); }; searchInput.addEventListener("input", searchHandler); window.friendsPageState.eventListeners.push([ searchInput, "input", searchHandler, ]); // 标签筛选 for (var i = 0; i < tagFilters.length; i++) { ((button) => { var clickHandler = () => { // 更新选中状态 for (var j = 0; j < tagFilters.length; j++) { var btn = tagFilters[j]; btn.classList.remove("active"); } button.classList.add("active"); currentTag = button.getAttribute("data-tag") || "all"; filterFriends(); }; button.addEventListener("click", clickHandler); window.friendsPageState.eventListeners.push([ button, "click", clickHandler, ]); })(tagFilters[i]); } // 复制链接功能 for (var i = 0; i < copyButtons.length; i++) { ((button) => { var clickHandler = () => { var url = button.getAttribute("data-url"); if (!url) return; if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard .writeText(url) .then(() => { var originalHTML = button.innerHTML; button.innerHTML = '