v1.0.4: 테마 경고 수정과 기본 다크모드 적용

Made-with: Cursor
This commit is contained in:
2026-04-27 18:09:10 +09:00
parent 319f30d6c5
commit a4cb6e4618
12 changed files with 36 additions and 17 deletions

File diff suppressed because one or more lines are too long

View File

@@ -11,6 +11,8 @@
var savedTheme = localStorage.getItem(storageKey); var savedTheme = localStorage.getItem(storageKey);
if (savedTheme) { if (savedTheme) {
setTheme(savedTheme); setTheme(savedTheme);
} else {
setTheme("dark");
} }
document.querySelectorAll("[data-theme-toggle]").forEach(function (button) { document.querySelectorAll("[data-theme-toggle]").forEach(function (button) {

View File

@@ -1,7 +1,7 @@
# 배포 가이드 # 배포 가이드
## 현재 버전 ## 현재 버전
- `v1.0.1` - `v1.0.4`
## Git 기본 설정 ## Git 기본 설정
- 저장소 작성자 정보는 아래 값으로 통일한다. - 저장소 작성자 정보는 아래 값으로 통일한다.

View File

@@ -1,5 +1,8 @@
# 의사결정 이력 # 의사결정 이력
## 2026-04-27 v1.0.4
이번 변경은 Ghost 테마 경고를 제거하고(helpers 호환성), 우측 사이드바 작성자 아바타를 고정 크기(48x48)로 안정화하며, 초기 테마 기본값을 다크 모드로 통일하는 데 목적이 있다. 특히 `img_url``size="s"` 옵션은 `/size/w300/` 경로를 만들기 때문에 원본 이미지 경로를 요구하는 현재 운영 정책과 맞지 않아 제거했고, 작성자 아바타에는 `h-full` 대신 명시적 `w-12 h-12`를 적용해 텍스트 높이에 따라 이미지가 늘어나는 문제를 방지했다.
## 2026-04-27 v1.0.1 ## 2026-04-27 v1.0.1
작성자 프로필 이미지는 홈과 포스트 상세처럼 현재 URL 깊이가 다른 화면에서 동일하게 보여야 한다. Ghost의 `img_url`이 루트 기준 경로를 만들 수 있지만, 테마가 프록시나 캐시 계층을 거치는 운영 환경에서는 절대 URL이 더 명확하므로 작성자 이미지 렌더링 지점을 `absolute="true"`로 통일했다. 우측 사이드바 작성자 카드는 시각적으로 외부 이동 아이콘을 이미 갖고 있으므로 실제 작성자 URL도 함께 연결했다. 작성자 프로필 이미지는 홈과 포스트 상세처럼 현재 URL 깊이가 다른 화면에서 동일하게 보여야 한다. Ghost의 `img_url`이 루트 기준 경로를 만들 수 있지만, 테마가 프록시나 캐시 계층을 거치는 운영 환경에서는 절대 URL이 더 명확하므로 작성자 이미지 렌더링 지점을 `absolute="true"`로 통일했다. 우측 사이드바 작성자 카드는 시각적으로 외부 이동 아이콘을 이미 갖고 있으므로 실제 작성자 URL도 함께 연결했다.

View File

@@ -1,7 +1,7 @@
# 파일-화면 매핑 가이드 # 파일-화면 매핑 가이드
## 현재 버전 ## 현재 버전
- `v1.0.1` - `v1.0.4`
## 공통 레이아웃 ## 공통 레이아웃
- [default.hbs](../default.hbs): 전체 3열 셸, 1296px 공통 폭 계산, 공통 자산 로드, 전역 공유 모달(`share-modal`) 마크업 포함 - [default.hbs](../default.hbs): 전체 3열 셸, 1296px 공통 폭 계산, 공통 자산 로드, 전역 공유 모달(`share-modal`) 마크업 포함

View File

@@ -1,7 +1,7 @@
# 기술 명세 # 기술 명세
## 현재 버전 ## 현재 버전
- `v1.0.1` - `v1.0.4`
## 테마 개요 ## 테마 개요
- 테마명: `Zenless Column Flow` (slug: `zenless-column-flow`) - 테마명: `Zenless Column Flow` (slug: `zenless-column-flow`)

View File

@@ -1,6 +1,20 @@
# 업데이트 로그 # 업데이트 로그
## v1.0.4 - 2026-04-27
- `package.json` 버전을 `1.0.4`로 증가.
- `assets/built/theme.js`: 로컬 저장 테마가 없을 때 기본 다크 모드를 적용하도록 초기 분기 추가.
- `partials/recommendations.hbs`: Ghost 테마 경고 대응을 위해 `{{#each}}``{{#foreach}}`로 변경.
- `partials/site/topbar.hbs`: 검색 데이터 소스 `{{#get "posts"}}` 조회 제한을 `150`에서 `100`으로 조정.
- `partials/site/sidebar-right.hbs`: 포스트 상세 작성자 아바타 `img_url`에서 `size="s"`를 제거해 원본 경로 이미지가 렌더링되도록 수정.
- `partials/site/sidebar-right.hbs`: 작성자 아바타를 `w-12 h-12` 고정(`48x48`) 및 `shrink-0`로 조정해 텍스트 높이에 따른 이미지 확장을 방지.
- `docs/spec.md`, `docs/map.md`, `docs/deploy.md`, `docs/history.md`, `docs/convention.md` 현재 버전을 `v1.0.4`로 동기화.
## v1.0.1 - 2026-04-27 ## v1.0.1 - 2026-04-27
- `assets/built/theme.js`: 로컬 저장된 테마 값이 없을 때 기본 테마를 다크 모드로 적용하도록 초기 분기 추가.
- `partials/site/sidebar-right.hbs`: 포스트 상세 작성자 아바타를 `w-12 h-12` 고정 크기(`48x48`)와 `shrink-0`로 조정해 본문 높이에 따라 이미지 높이가 늘어나지 않도록 수정.
- `partials/recommendations.hbs`: Ghost 테마 경고 대응을 위해 `{{#each}}``{{#foreach}}`로 변경.
- `partials/site/topbar.hbs`: 검색 데이터 소스 `{{#get "posts"}}` 조회 제한을 `150`에서 `100`으로 조정.
- `partials/site/sidebar-right.hbs`: 포스트 상세 작성자 아바타 `img_url`에서 `size="s"`를 제거해 원본 경로 이미지가 렌더링되도록 수정.
- `package.json` 버전을 `1.0.1`로 증가. - `package.json` 버전을 `1.0.1`로 증가.
- `partials/site/sidebar-right.hbs`: 포스트 상세 우측 작성자 프로필 이미지 URL을 절대 경로로 렌더링하도록 수정하고 작성자 링크를 연결. - `partials/site/sidebar-right.hbs`: 포스트 상세 우측 작성자 프로필 이미지 URL을 절대 경로로 렌더링하도록 수정하고 작성자 링크를 연결.
- `author.hbs`, `partials/site/sidebar-left.hbs`, `partials/site/topbar.hbs`: 작성자 프로필 이미지 URL을 절대 경로 기준으로 통일. - `author.hbs`, `partials/site/sidebar-left.hbs`, `partials/site/topbar.hbs`: 작성자 프로필 이미지 URL을 절대 경로 기준으로 통일.

View File

@@ -1,6 +1,6 @@
{ {
"name": "zenless-column-flow", "name": "zenless-column-flow",
"version": "1.0.1", "version": "1.0.4",
"private": true, "private": true,
"description": "Zenless Column Flow Ghost theme for editorial three-column blogs.", "description": "Zenless Column Flow Ghost theme for editorial three-column blogs.",
"keywords": [ "keywords": [

View File

@@ -1,14 +1,14 @@
{{#if recommendations}} {{#if recommendations}}
<ul class="flex flex-col gap-1 rounded-theme overflow-hidden" data-recommendations=""> <ul class="flex flex-col gap-1 rounded-theme overflow-hidden" data-recommendations="">
{{#each recommendations as |rec|}} {{#foreach recommendations}}
<li> <li>
<a class="py-1 text-[0.8rem] leading-tight flex items-center gap-2 hover:opacity-75" href="{{rec.url}}" data-recommendation="{{rec.id}}" target="_blank" rel="noopener"> <a class="py-1 text-[0.8rem] leading-tight flex items-center gap-2 hover:opacity-75" href="{{url}}" data-recommendation="{{id}}" target="_blank" rel="noopener">
{{#if rec.favicon}} {{#if favicon}}
<img class="w-[18px] h-[18px] rounded-[8px] aspect-square object-cover" src="{{rec.favicon}}" alt="" loading="lazy" onerror="this.style.display='none'"> <img class="w-[18px] h-[18px] rounded-[8px] aspect-square object-cover" src="{{favicon}}" alt="" loading="lazy" onerror="this.style.display='none'">
{{/if}} {{/if}}
<h3 class="font-medium line-clamp-1 text-ellipsis overflow-hidden" title="{{rec.title}}">{{rec.title}}</h3> <h3 class="font-medium line-clamp-1 text-ellipsis overflow-hidden" title="{{title}}">{{title}}</h3>
</a> </a>
</li> </li>
{{/each}} {{/foreach}}
</ul> </ul>
{{/if}} {{/if}}

View File

@@ -83,7 +83,7 @@
</button> </button>
<div class="sidebar-card__content sidebar-card__content--categories" x-cloak x-show="categoriesOpen"> <div class="sidebar-card__content sidebar-card__content--categories" x-cloak x-show="categoriesOpen">
<ul class="category-grid grid sm:grid-cols-2 gap-x-2 gap-0.5 mt-1 text-typ-tone font-medium text-[0.8rem] -mb-1.5" data-category-priority-list <ul class="category-grid grid sm:grid-cols-2 gap-x-2 gap-0.5 mt-1 text-typ-tone font-medium text-[0.8rem] -mb-1.5" data-category-priority-list
data-category-priority-order="tech,business,health,science,design,travel,gaming,music,diy,photography,books" data-category-priority-order="project, dev, tech, note, study, tools, review, lab, play, life"
data-category-priority-limit="10"> data-category-priority-limit="10">
{{#get "tags" limit="100" include="count.posts" order="count.posts desc"}} {{#get "tags" limit="100" include="count.posts" order="count.posts desc"}}
{{#foreach tags}} {{#foreach tags}}

View File

@@ -18,11 +18,11 @@
{{#is "post"}} {{#is "post"}}
{{#post}} {{#post}}
{{#primary_author}} {{#primary_author}}
<section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-1.5 border-b border-brd"> <section class="px-4 sm:px-5 py-4 sm:py-5 xl:pr-1 flex flex-col gap-2.5 border-b border-brd">
<a class="flex gap-2 hover:opacity-80" href="{{url}}">{{#if profile_image}} <a class="flex items-start gap-2 hover:opacity-80" href="{{url}}">{{#if profile_image}}
<img class="object-cover size-10 sm:size-12 aspect-square" src="{{img_url profile_image size="s" absolute="true"}}" alt="{{name}}"> <img class="w-12 h-12 min-h-12 shrink-0 aspect-square rounded-full object-cover" src="{{img_url profile_image absolute="true"}}" alt="{{name}}">
{{else}} {{else}}
<div class="object-cover size-10 sm:size-12 aspect-square avatar--fallback">A</div> <div class="w-12 h-12 min-h-12 shrink-0 aspect-square rounded-full avatar--fallback">A</div>
{{/if}} {{/if}}
<div class="flex-1 flex flex-col gap-1"> <div class="flex-1 flex flex-col gap-1">
<h3 class="text-sm font-medium leading-tight flex items-center justify-between gap-1">{{name}}</h3> <h3 class="text-sm font-medium leading-tight flex items-center justify-between gap-1">{{name}}</h3>

View File

@@ -163,7 +163,7 @@
<span data-search-item data-search-type="tag" data-search-title="{{name}}" data-search-url="{{url}}"></span> <span data-search-item data-search-type="tag" data-search-title="{{name}}" data-search-url="{{url}}"></span>
{{/foreach}} {{/foreach}}
{{/get}} {{/get}}
{{#get "posts" limit="150"}} {{#get "posts" limit="100"}}
{{#foreach posts}} {{#foreach posts}}
<span data-search-item data-search-type="post" data-search-title="{{title}}" data-search-url="{{url}}" data-search-excerpt="{{excerpt words='24'}}"></span> <span data-search-item data-search-type="post" data-search-title="{{title}}" data-search-url="{{url}}" data-search-excerpt="{{excerpt words='24'}}"></span>
{{/foreach}} {{/foreach}}