Skip to content

feat: auto モードを data-theme 属性追従に変更#8

Merged
hirano00o merged 5 commits intomainfrom
feat/data-theme-auto-mode
Mar 13, 2026
Merged

feat: auto モードを data-theme 属性追従に変更#8
hirano00o merged 5 commits intomainfrom
feat/data-theme-auto-mode

Conversation

@hirano00o
Copy link
Owner

@hirano00o hirano00o commented Mar 13, 2026

Summary

  • auto ビルド(git-code-embed.min.js)のテーマ判定を @media (prefers-color-scheme: dark) から data-theme 属性への追従に変更
  • withDataTheme() ヘルパーを追加し、:roothtml/body[data-theme="..."].gce-container にセレクタプレフィックスを付与して CSS 特異性を確保
  • README の「ダークモード」セクションを新設計に合わせて更新

背景

ライト固定デザインのブログで OS がダーク設定の場合、コードビューだけがダークになりブログの色彩が統一されない問題があった。
用途を以下のように整理した:

ファイル 推奨用途
git-code-embed.min.js data-theme 属性でテーマ切り替えするブログ
git-code-embed-light.min.js ライト固定デザインのブログ
git-code-embed-dark.min.js ダーク固定デザインのブログ

Test plan

  • npm test — 全 104 テストがパスすること
  • npm run build:all — 全バリアントのビルドが通ること
  • test-page.html を開き <html data-theme="dark"> でダークテーマになること
  • data-theme 未設定時はライトテーマになること

OS の prefers-color-scheme への追従をやめ、html/body 要素の
data-theme 属性の値に基づいてテーマを切り替えるよう auto モードを再設計した。

これにより、ライト固定デザインのブログで OS がダーク設定でも
コードビューだけダークになる問題を解消できる。
テーマ切り替えなしのブログには -light/-dark バリアントを、
テーマ切り替えありのブログには auto (デフォルト) を使う形に
責務を整理した。
scopeToSelector 内部関数に変換ロジックを集約して htmlVersion/bodyVersion の
重複を排除した。また、body[data-theme="light"] の存在確認、
data-theme 未設定時のデフォルト動作、hljs セレクタ変換の正確性を
テストに追加した。
auto モードの挙動変更(@media → data-theme 追従)は既存ユーザーへの
破壊的変更であるため、SemVer に従い 0.3.0 に更新した。

また、css.slice(idx) の検索範囲が広すぎて実装の順序変更時に
偽陽性になるリスクを排除するため、各ブロックの終端位置でスライスを
絞るよう修正した。:root の残存チェックと body[data-theme="dark"]
ブロック内の変数検証テストも追加した。
dark/light の対称性を完結させるため、body[data-theme="light"] 側の
CSS 変数値(ライト色の包含とダーク色の非混入)を検証するテストを追加した。
@hirano00o hirano00o merged commit 4cea0a5 into main Mar 13, 2026
1 check passed
@hirano00o hirano00o deleted the feat/data-theme-auto-mode branch March 13, 2026 03:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant