summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorBigCoke233 <hi@guhub.cn>2026-01-21 22:31:48 +0800
committerBigCoke233 <hi@guhub.cn>2026-01-21 22:31:48 +0800
commitf56e35faf5023d1bc8396bcb9b8535f83c308115 (patch)
treeb2989946e06daf85c7986882ff1f483700a70c85 /assets
parent486cbadb717b73fe1a5234448d0f1fb3b2ffa5ca (diff)
chore: update like server API url and format file
Former-commit-id: 81340564b47612611b50c17e6085bc8e0d66efff
Diffstat (limited to 'assets')
-rw-r--r--assets/js/like.js165
1 files changed, 84 insertions, 81 deletions
diff --git a/assets/js/like.js b/assets/js/like.js
index 6fe8d658..6d73eb2d 100644
--- a/assets/js/like.js
+++ b/assets/js/like.js
@@ -4,118 +4,121 @@
// 3. visualize like data (orgam farm)
// 4. update like states
+const LIKE_SERVER_URL = "https://like.eltr.ac/"
+
document.addEventListener('DOMContentLoaded', () => {
const likeBtn = document.getElementById("like-btn");
if (!likeBtn) return;
const pageId = likeBtn.dataset.pageid;
+ console.log("🫀 [like.js] Page ID: " + pageId)
// get required elements
const elements = {
- count: document.getElementById("like-count-" + pageId),
- btn: document.getElementById("like-btn-" + pageId),
- container: document.getElementById("like-container-" + pageId),
- icon: document.getElementById("like-icon-" + pageId)
+ count: document.getElementById("like-count-" + pageId),
+ btn: document.getElementById("like-btn-" + pageId),
+ container: document.getElementById("like-container-" + pageId),
+ icon: document.getElementById("like-icon-" + pageId)
};
// return if no page ID found or not in production or no elements
if (
- !pageId || window.location.host !== 'www.geedea.pro' ||
- !elements.count || !elements.btn || !elements.container
+ !pageId || window.location.host !== 'www.geedea.pro' ||
+ !elements.count || !elements.btn || !elements.container
) return;
function setLikedState() {
- // update classes
- elements.icon?.classList.add('liked-heart');
- elements.icon?.classList.add('animate-heart-beat');
- elements.count?.classList.add('liked-count');
- elements.btn.disabled = true;
- elements.container.classList.add('liked');
- // update tooltip
- elements.btn.setAttribute('title',
- elements.container.classList.contains('liked')
- ? elements.btn.getAttribute('data-liked-title')
- : '为这篇文章献上心脏'
- );
+ // update classes
+ elements.icon?.classList.add('liked-heart');
+ elements.icon?.classList.add('animate-heart-beat');
+ elements.count?.classList.add('liked-count');
+ elements.btn.disabled = true;
+ elements.container.classList.add('liked');
+ // update tooltip
+ elements.btn.setAttribute('title',
+ elements.container.classList.contains('liked')
+ ? elements.btn.getAttribute('data-liked-title')
+ : '为这篇文章献上心脏'
+ );
}
async function fetchLikes() {
- try {
- const response = await fetch("https://like.guhub.cn/like/" + pageId);
- const data = await response.json();
- elements.count.innerText = data.likes ?? 0;
- if (localStorage.getItem("liked_" + pageId)) {
- setLikedState();
- updateOrganFarm(data.likes);
- }
- } catch(e) {
- console.log(e);
- elements.count.innerText = "❌";
- }
+ try {
+ const response = await fetch(LIKE_SERVER_URL + "like/" + pageId);
+ const data = await response.json();
+ elements.count.innerText = data.likes ?? 0;
+ if (localStorage.getItem("liked_" + pageId)) {
+ setLikedState();
+ updateOrganFarm(data.likes);
+ }
+ } catch(e) {
+ console.log(e);
+ elements.count.innerText = "❌";
+ }
}
- window.sendLike = async function(pageId) {
- if (localStorage.getItem("liked_" + pageId)) return;
-
- try {
- const response = await fetch("https://like.guhub.cn/like/" + pageId, { method: "POST" });
- const data = await response.json();
- localStorage.setItem("liked_" + pageId, "1");
- elements.count.innerText = data.likes ?? 1;
- updateOrganFarm(data.likes);
- setLikedState();
- } catch(e) {
- console.log(e);
- alert("点赞失败,请稍后再试");
- }
+ async function sendLike(pageId) {
+ if (localStorage.getItem("liked_" + pageId)) return;
+
+ try {
+ const response = await fetch(LIKE_SERVER_URL + "like/" + pageId, { method: "POST" });
+ const data = await response.json();
+ localStorage.setItem("liked_" + pageId, "1");
+ elements.count.innerText = data.likes ?? 1;
+ updateOrganFarm(data.likes);
+ setLikedState();
+ } catch(e) {
+ console.log(e);
+ alert("点赞失败,请稍后再试");
+ }
};
function updateOrganFarm(count) {
- const organFarm = document.getElementById("organ-farm");
- const organCount = count || parseInt(elements.count.innerText);
- const organImages = [
- "https://r2.eltr.ac/picgo2025/oragn-3.png",
- "https://r2.eltr.ac/picgo2025/organ-1.png",
- "https://r2.eltr.ac/picgo2025/organ-2.png"
- ];
-
- if (!organFarm) return;
- if (organFarm.classList.contains("hidden")) {
- organFarm.classList.remove("hidden");
- organFarm.classList.add("animate-slide-in-down");
- }
-
- organFarm.innerHTML = "";
- for (let i = 0; i < organCount; i++) {
- const img = document.createElement("img");
- img.className = "transition hover:scale-150 dark:invert";
-
- const sizeRange = [6, 10];
- const size = Math.floor(Math.random() * (sizeRange[1] - sizeRange[0] + 1)) + sizeRange[0];
- img.classList.add(`w-${size}`, `h-${size}`);
-
- img.src = organImages[Math.floor(Math.random() * organImages.length)];
- // randomly offset and rotate
- img.classList.add("rotate-" + Math.floor(Math.random() * 5));
- img.classList.add("translate-x-" + Math.floor(Math.random() * 5));
- img.classList.add("translate-y-" + Math.floor(Math.random() * 5));
- img.classList.add("opacity" + (100 - Math.floor(Math.random() * 3)*10));
-
- organFarm.appendChild(img);
- }
+ const organFarm = document.getElementById("organ-farm");
+ const organCount = count || parseInt(elements.count.innerText);
+ const organImages = [
+ "https://r2.eltr.ac/picgo2025/oragn-3.png",
+ "https://r2.eltr.ac/picgo2025/organ-1.png",
+ "https://r2.eltr.ac/picgo2025/organ-2.png"
+ ];
+
+ if (!organFarm) return;
+ if (organFarm.classList.contains("hidden")) {
+ organFarm.classList.remove("hidden");
+ organFarm.classList.add("animate-slide-in-down");
+ }
+
+ organFarm.innerHTML = "";
+ for (let i = 0; i < organCount; i++) {
+ const img = document.createElement("img");
+ img.className = "transition hover:scale-150 dark:invert";
+
+ const sizeRange = [6, 10];
+ const size = Math.floor(Math.random() * (sizeRange[1] - sizeRange[0] + 1)) + sizeRange[0];
+ img.classList.add(`w-${size}`, `h-${size}`);
+
+ img.src = organImages[Math.floor(Math.random() * organImages.length)];
+ // randomly offset and rotate
+ img.classList.add("rotate-" + Math.floor(Math.random() * 5));
+ img.classList.add("translate-x-" + Math.floor(Math.random() * 5));
+ img.classList.add("translate-y-" + Math.floor(Math.random() * 5));
+ img.classList.add("opacity" + (100 - Math.floor(Math.random() * 3)*10));
+
+ organFarm.appendChild(img);
+ }
}
// fetch likes when action menu is visible
const observer = new IntersectionObserver((entries, obs) => {
- if (entries[0].isIntersecting) {
- fetchLikes();
- obs.disconnect();
- }
+ if (entries[0].isIntersecting) {
+ fetchLikes();
+ obs.disconnect();
+ }
});
observer.observe(document.getElementById("action-menu"));
// add click event listener to like button
- likeBtn.addEventListener("click", _ => {
+ likeBtn.addEventListener("click", () => {
sendLike(pageId)
})
});