summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBigCoke233 <hi@guhub.cn>2026-01-31 00:12:02 +0800
committerBigCoke233 <hi@guhub.cn>2026-01-31 00:12:02 +0800
commit3f4e02e8f9023a76c2396949e94766a7d8526f19 (patch)
treee539e41e5720b7245c058ad9311b951b2443e2cb
parent96005ad565c7f1b90a04382157ea6aa4c13365b0 (diff)
remove: like button
-rw-r--r--assets/js/like.js150
-rw-r--r--i18n/en.yml2
-rw-r--r--i18n/zh.yml2
-rw-r--r--layouts/_partials/posts/action-menu.html3
-rw-r--r--layouts/_partials/posts/action-menu/like-button.html27
-rw-r--r--layouts/_partials/scripts.html1
6 files changed, 0 insertions, 185 deletions
diff --git a/assets/js/like.js b/assets/js/like.js
deleted file mode 100644
index 94e3ab30..00000000
--- a/assets/js/like.js
+++ /dev/null
@@ -1,150 +0,0 @@
-// implement features of like buttons in action menu
-// 1. fetch likes
-// 2. send like to server
-// 3. visualize like data (orgam farm)
-// 4. update like states
-
-const LIKE_SERVER_URL = "https://like.eltr.ac/"
-
-function initLikeButton() {
- if (window.likeButtonInitialized) {
- return;
- }
-
- const likeBtn = document.getElementById("like-btn");
- if (!likeBtn) {
- return;
- }
-
- const pageId = likeBtn.dataset.pageid;;
-
- // get required elements
- const elements = {
- count: document.getElementById("like-count-" + pageId),
- btn: document.getElementById("like-btn"), // Main button doesn't have page ID suffix
- 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 || !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')
- : '为这篇文章献上心脏'
- );
- }
-
- async function fetchLikes() {
- 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 = "❌";
- }
- }
-
- 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);
- }
- }
-
- // fetch likes when action menu is visible
- const actionMenuEl = document.getElementById("action-menu");
- if (actionMenuEl) {
- const observer = new IntersectionObserver((entries, obs) => {
- if (entries[0].isIntersecting) {
- fetchLikes();
- obs.disconnect();
- }
- });
- observer.observe(actionMenuEl);
- } else {
- fetchLikes();
- }
-
- // add click event listener to like button
- likeBtn.addEventListener("click", () => {
- sendLike(pageId)
- })
-
- window.likeButtonInitialized = true;
-}
-
-// Initialize when DOM is ready
-if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', initLikeButton);
-} else {
- initLikeButton();
-}
-
-// Fallback initialization
-window.addEventListener('load', () => {
- if (!window.likeButtonInitialized) {
- initLikeButton();
- }
-});
diff --git a/i18n/en.yml b/i18n/en.yml
index 8bb3bfc6..aa04e276 100644
--- a/i18n/en.yml
+++ b/i18n/en.yml
@@ -55,8 +55,6 @@ actionMenu:
telegramChannel: Telegram Channel
sponsor: Buy me a coffee
comment: Comment
- like: Offer up your heart
- liked: You've already made your sacrifice
webmention: Webmention
rss_comment_link: "Come and leave a comment"
webmention:
diff --git a/i18n/zh.yml b/i18n/zh.yml
index a4e45517..416f2fb1 100644
--- a/i18n/zh.yml
+++ b/i18n/zh.yml
@@ -54,8 +54,6 @@ actionMenu:
telegramChannel: 'Telegram 频道'
sponsor: 赞助作者
comment: 评论
- like: 为这篇文章献上心脏
- liked: 你已经献上心脏了
webmention: Webmention
rss_comment_link: "读完啦?来坐坐吧"
webmention:
diff --git a/layouts/_partials/posts/action-menu.html b/layouts/_partials/posts/action-menu.html
index 6b824409..ab4c87d5 100644
--- a/layouts/_partials/posts/action-menu.html
+++ b/layouts/_partials/posts/action-menu.html
@@ -4,7 +4,6 @@
<div class="flex gap-2">
{{ partial "posts/action-menu/comment-button" . }}
{{ partial "posts/action-menu/webmention-button" . }}
- {{ partial "posts/action-menu/like-button" . }}
</div>
{{ partial "posts/action-menu/info-links" . }}
</div>
@@ -12,6 +11,4 @@
{{ partial "posts/action-menu/comment-section" . }}
{{ partial "posts/action-menu/webmention-section" . }}
</div>
- <!-- Comment Count Display -->
- <div id="organ-farm" class="flex flex-wrap gap-4 hidden animate-duration-200"></div>
</div>
diff --git a/layouts/_partials/posts/action-menu/like-button.html b/layouts/_partials/posts/action-menu/like-button.html
deleted file mode 100644
index bd5e209e..00000000
--- a/layouts/_partials/posts/action-menu/like-button.html
+++ /dev/null
@@ -1,27 +0,0 @@
-{{ $pageID := .File.UniqueID | urlize }}
-<!-- 点赞按钮 -->
-<div class="relative" id="like-container-{{ $pageID }}">
- <button class="dark:invert flex items-center justify-center gap-1.5 min-w-12 h-12 px-2
- border-none bg-transparent text-gray-600 cursor-pointer relative transition-all duration-200
- hover:bg-black/5 hover:rounded-lg group animate-count-infinite"
- id="like-btn"
- data-pageid="{{ $pageID }}"
- title="{{ T "actionMenu.like" }}"
- data-liked-title="{{ T "actionMenu.liked" }}"
- data-tooltip>
- <img src="/img/heart-organ.svg" width="20" height="20"
- alt="{{ T "actionMenu.like" }}"
- class="brightness-40 flex-shrink-0 transition-all duration-300 dark:brightness-70 dark:contrast-120" id="like-icon-{{ $pageID }}" />
- <span class="text-xs font-bold text-gray-600 min-w-4 text-center bg-white/90 rounded-xl px-1.5 py-0.5 shadow-sm dark:text-gray-400 dark:bg-black/70" id="like-count-{{ $pageID }}">...</span>
- </button>
-</div>
-
-<style>
-.liked-heart {
- filter: brightness(0) saturate(100%) invert(8%) sepia(100%) saturate(7500%) hue-rotate(0deg) brightness(70%) contrast(150%) !important;
-}
-
-.liked-count {
- color: #8B0000 !important;
-}
-</style>
diff --git a/layouts/_partials/scripts.html b/layouts/_partials/scripts.html
index 17906c31..2875f27d 100644
--- a/layouts/_partials/scripts.html
+++ b/layouts/_partials/scripts.html
@@ -12,7 +12,6 @@
(resources.Get "js/toc.js")
(resources.Get "js/inject-footnotes.js")
(resources.Get "js/back2top.js")
- (resources.Get "js/like.js")
}}
{{ $articleBundle := $articleJS | resources.Concat "js/article-bundle.js" | minify | fingerprint }}
<script src="{{ $articleBundle.RelPermalink }}" integrity="{{ $articleBundle.Data.Integrity }}" defer></script>