Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
9c8a22c
いいねの Cloudflare Worker を追加する (#1949)
ma91n Sep 11, 2026
4907cd8
リンクのコピーが先に入っているので「サイト初の JS」を直す (#1949)
ma91n Sep 11, 2026
0b9671d
いいねボタンを共有ボタンの隣に置く (#1949)
ma91n Sep 11, 2026
ffe7576
いいねの数をボタンの下に置く (#1949)
ma91n Sep 11, 2026
9d77816
いいねのラベルを外してマークだけのボタンにする (#1949)
ma91n Sep 11, 2026
0a88b2f
いいねを幅と地で共有ボタンから分ける (#1949)
ma91n Sep 11, 2026
975c477
いいねボタンの幅を 72px に広げる (#1949)
ma91n Sep 11, 2026
c2bf8e6
いいねをハートにして押下時に動きを付ける (#1949)
ma91n Sep 11, 2026
dccbd85
いいねの輪のアニメーションを外す (#1949)
ma91n Sep 11, 2026
bfe3f0c
いいねに吹き出しと礼を出し、押下後は数字もクリムゾンにする (#1949)
ma91n Sep 11, 2026
bae8cac
いいねの礼を note の「すき」の形にする (#1949)
ma91n Sep 11, 2026
f65a208
いいねボタンの幅を 56px に戻し、グレーの地を外す (#1949)
ma91n Sep 11, 2026
688567e
いいねを拍手にして連打できるようにする (#1949)
ma91n Sep 11, 2026
7eb8bc2
いいねを3拍手までにして長押しで取り消せるようにする (#1949)
ma91n Sep 11, 2026
63f3eea
いいねの祝いを段階的にして長押しに案内を出す (#1949)
ma91n Sep 11, 2026
0f7ad14
長押しの案内をグレーの地にする (#1949)
ma91n Sep 11, 2026
0eea9b5
長押しの案内と礼を重ねない (#1949)
ma91n Sep 11, 2026
1aede0c
風船を3拍手目だけにして、1つずつ独立に飛ばす (#1949)
ma91n Sep 11, 2026
b3ccbaa
+3 の札を固定し、散るのは装飾の風船にする (#1949)
ma91n Sep 12, 2026
3a7e607
+3 の札をクリムゾンのチップにして風船と分ける (#1949)
ma91n Sep 12, 2026
1fb9b3c
+3 の札をその場でフェードさせ、連打で揺らす (#1949)
ma91n Sep 12, 2026
807c8a2
+3 の揺れを見える大きさにする (#1949)
ma91n Sep 12, 2026
5332814
+3 の揺れを弱める (#1949)
ma91n Sep 12, 2026
721f445
+3 の揺れをさらに弱める (#1949)
ma91n Sep 12, 2026
eb1f74a
下へ飛ぶ点をなくす (#1949)
ma91n Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 160 additions & 1 deletion CLAUDE.md

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions scripts/likes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict';

const fs = require('fs');
const path = require('path');

/**
* いいねの数(#1949)。
*
* 数は Cloudflare Worker + KV が持ち、update-cache.yml が毎日ダンプして
* like_count_cache.json にコミットする。表示はここで焼き込むので、
* 読者のブラウザから数を読みに行くリクエストは発生しない。
*/

// permalink の :year:month:day:postid と同じ形。KV のキーもこの ID で、
// _config.yml の alias で URL を付け替えても数が残る
const POSTID = /^20\d{6}[a-z]?$/;

// scripts/ はホットリロードされないので、プロセスの生存中は読み直さない
let counts = null;

function load() {
if (counts) return counts;
try {
const file = path.join(hexo.base_dir, 'like_count_cache.json');
counts = JSON.parse(fs.readFileSync(file, 'utf8')).likes || {};
} catch (e) {
// バッチが回るまでは存在しない。0本として描く
counts = {};
}
return counts;
}

hexo.extend.helper.register('like_post_id', function (post) {
const matched = /articles\/([^/]+)\//.exec((post && post.path) || '');
return matched && POSTID.test(matched[1]) ? matched[1] : '';
});

hexo.extend.helper.register('like_count', function (postid) {
return load()[postid] || 0;
});
4 changes: 4 additions & 0 deletions themes/future/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ featured_count: 10
# min_count は旧実装(全期間シェア数順)の閾値で、置き換えに伴い廃止した
tag_display_max_count: 10

# いいねの送り先 (#1949)。Cloudflare Worker の URL。
# 空なら押しても何も起きないのでボタンごと出さない
likes_endpoint:

# Integrations(GA4 プロパティ)
google_analytics: G-X1C28R8H0M

Expand Down
8 changes: 8 additions & 0 deletions themes/future/css-src/_variables.styl
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,14 @@ footer-underline-speed = 0.25s
// 間隔の 4px 刻みとは別の系統なので、space-step からは導かない
link-underline-offset = 2px

// いいねを押した瞬間の跳ね(#1949)。時間の段の2つ目の例外で、
// いいねボタンでしか使わない。状態の変化(state-speed)と役が違う——
// あちらは「切り替わったことが分かる程度で待たされない長さ」だが、
// こちらは一度きりの合図なので、跳ねて戻るところまで見えないと意味が無い。
// 0.18s では往復が潰れる。押せるのは1記事につき1回で、
// 読んでいる途中に何度も出るものではない
like-pop-speed = 0.3s

// 状態が変わったことを見せる速さ。反応(hover-speed)とは役が違うので別に持つが、
// **状態の変化の側も1つだけ**。タブの切り替え・ドロップダウンと引き出しの開閉・
// 検索窓の伸縮・折りたたみの開閉が対象で、中身が入れ替わったことが分かる程度で
Expand Down
Loading
Loading