From 9faa18956452814915f7048307bc360655d51162 Mon Sep 17 00:00:00 2001 From: ThisTimeNull Date: Thu, 19 Jun 2025 13:38:10 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[fix]=20=EC=A0=84=EC=97=AD=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++- src/styles/style.css | 35 +++++++---------------------------- 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 27e43c7..a48a4d4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ "editor.formatOnSave": false, "editor.codeActionsOnSave": { "source.fixAll.eslint": "always" - } + }, + "css.lint.unknownAtRules": "ignore", } diff --git a/src/styles/style.css b/src/styles/style.css index 193972a..022bea0 100644 --- a/src/styles/style.css +++ b/src/styles/style.css @@ -1,8 +1,11 @@ @import 'tailwindcss'; -@tailwind base; -@tailwind components; -@tailwind utilities; +/* 전역 스타일 */ +@layer base { + body { + @apply text-black; + } +} /* Table 관련 기본 스타일 */ @layer base { @@ -52,28 +55,4 @@ .card-title { @apply text-base font-semibold text-gray-700; } -} - -/* 전역 스타일 */ -body { - font-family: 'Noto Sans KR', Arial, sans-serif; - background: #f8fafc; - color: #222; - margin: 0; - padding: 0; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: 700; - margin-top: 1.5em; - margin-bottom: 0.5em; -} - -p { - margin: 0 0 1em 0; -} +} \ No newline at end of file From 29bb44d54181455d0f99ef87739081da2d295285 Mon Sep 17 00:00:00 2001 From: ThisTimeNull Date: Thu, 19 Jun 2025 13:38:53 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[fix]=20Breadcrumb=20=EA=B0=9C=EC=84=A0?= =?UTF-8?q?=20:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/breadcrumb.json | 192 ++++++++++++++++++++++++++++++-------- src/scripts/breadcrumb.ts | 37 +++++--- 2 files changed, 178 insertions(+), 51 deletions(-) diff --git a/src/data/breadcrumb.json b/src/data/breadcrumb.json index 4ce2821..9a98a1c 100644 --- a/src/data/breadcrumb.json +++ b/src/data/breadcrumb.json @@ -1,42 +1,156 @@ { - "breadcrumb": { - "get-started": "시작하기", - "get-docker": "Docker 설치", - "docker-overview": "Docker 개요", - "introduction": "소개", - "build-and-push-first-image": "첫 번째 이미지 빌드 및 푸시", - "develop-with-containers": "컨테이너로 개발", - "get-docker-desktop": "Docker Desktop 설치", - "whats-next": "다음 단계", - "docker-concepts": "Docker 개념", - "the-basics": "기본 사항", - "what-is-a-container": "컨테이너란?", - "what-is-a-registry": "레지스트리란?", - "what-is-an-image": "이미지란?", - "what-is-docker-compose": "Docker Compose란?", - "building-images": "이미지 빌드", - "understanding-image-layers": "이미지 레이어 이해", - "writing-a-dockerfile": "Dockerfile 작성", - "build-tag-and-publish-an-image": "이미지 빌드, 태그, 게시", - "using-the-build-cache": "빌드 캐시 사용", - "multi-stage-builds": "멀티 스테이지 빌드", - "running-containers": "컨테이너 실행", - "multi-container-applications": "멀티 컨테이너 애플리케이션", - "overriding-container-defaults": "컨테이너 기본값 재정의", - "persisting-container-data": "컨테이너 데이터 유지", - "publishing-ports": "포트 게시", - "sharing-local-files": "로컬 파일 공유", - "docker-workshop": "Docker 워크샵", - "resources": "리소스", - "workshop": "워크샵", - "02_our_app": "애플리케이션 컨테이너화", - "03_updating_app": "애플리케이션 업데이트", - "04_sharing_app": "애플리케이션 공유", - "05_persisting_data": "데이터베이스 유지", - "06_bind_mounts": "바인드 마운트 사용", - "07_multi_container": "멀티 컨테이너 애플리케이션", - "08_using_compose": "Docker Compose 사용", - "09_image_best": "이미지 빌드 모범 사례", - "10_what_next": "Docker 워크숍 이후 단계" + "segments": { + "get-started": { + "name": "시작하기", + "linkable": true + }, + "get-docker": { + "name": "Docker 설치", + "linkable": true + }, + "docker-overview": { + "name": "Docker 개요", + "linkable": true + }, + "introduction": { + "name": "소개", + "linkable": true + }, + "build-and-push-first-image": { + "name": "첫 번째 이미지 빌드 및 푸시", + "linkable": true + }, + "develop-with-containers": { + "name": "컨테이너로 개발", + "linkable": true + }, + "get-docker-desktop": { + "name": "Docker Desktop 설치", + "linkable": true + }, + "whats-next": { + "name": "다음 단계", + "linkable": true + }, + "docker-concepts": { + "name": "Docker 개념", + "linkable": false + }, + "the-basics": { + "name": "기본 사항", + "linkable": false + }, + "what-is-a-container": { + "name": "컨테이너란?", + "linkable": true + }, + "what-is-a-registry": { + "name": "레지스트리란?", + "linkable": true + }, + "what-is-an-image": { + "name": "이미지란?", + "linkable": true + }, + "what-is-docker-compose": { + "name": "Docker Compose란?", + "linkable": true + }, + "building-images": { + "name": "이미지 빌드", + "linkable": false + }, + "understanding-image-layers": { + "name": "이미지 레이어 이해", + "linkable": true + }, + "writing-a-dockerfile": { + "name": "Dockerfile 작성", + "linkable": true + }, + "build-tag-and-publish-an-image": { + "name": "이미지 빌드, 태그, 게시", + "linkable": true + }, + "using-the-build-cache": { + "name": "빌드 캐시 사용", + "linkable": true + }, + "multi-stage-builds": { + "name": "멀티 스테이지 빌드", + "linkable": true + }, + "running-containers": { + "name": "컨테이너 실행", + "linkable": false + }, + "multi-container-applications": { + "name": "멀티 컨테이너 애플리케이션", + "linkable": true + }, + "overriding-container-defaults": { + "name": "컨테이너 기본값 재정의", + "linkable": true + }, + "persisting-container-data": { + "name": "컨테이너 데이터 유지", + "linkable": true + }, + "publishing-ports": { + "name": "포트 게시", + "linkable": true + }, + "sharing-local-files": { + "name": "로컬 파일 공유", + "linkable": true + }, + "docker-workshop": { + "name": "Docker 워크샵", + "linkable": true + }, + "resources": { + "name": "리소스", + "linkable": true + }, + "workshop": { + "name": "워크샵", + "linkable": false + }, + "02_our_app": { + "name": "애플리케이션 컨테이너화", + "linkable": true + }, + "03_updating_app": { + "name": "애플리케이션 업데이트", + "linkable": true + }, + "04_sharing_app": { + "name": "애플리케이션 공유", + "linkable": true + }, + "05_persisting_data": { + "name": "데이터베이스 유지", + "linkable": true + }, + "06_bind_mounts": { + "name": "바인드 마운트 사용", + "linkable": true + }, + "07_multi_container": { + "name": "멀티 컨테이너 애플리케이션", + "linkable": true + }, + "08_using_compose": { + "name": "Docker Compose 사용", + "linkable": true + }, + "09_image_best": { + "name": "이미지 빌드 모범 사례", + "linkable": true + }, + "10_what_next": { + "name": "Docker 워크숍 이후 단계", + "linkable": true + } } } diff --git a/src/scripts/breadcrumb.ts b/src/scripts/breadcrumb.ts index 326464b..7131800 100644 --- a/src/scripts/breadcrumb.ts +++ b/src/scripts/breadcrumb.ts @@ -1,22 +1,29 @@ import translations from '../data/breadcrumb.json'; -interface BreadcrumbItem { +interface SegmentData { name: string; + linkable: boolean; +} + +interface BreadcrumbItem extends SegmentData { path: string; } interface TranslationData { - breadcrumb: Record; + segments: Record; } /** - * 경로 세그먼트를 번역합니다. + * 경로 세그먼트를 번역하고 링크 가능 여부를 확인합니다. * @param segment 번역할 세그먼트 - * @returns 번역된 텍스트 또는 원본 텍스트 + * @returns 세그먼트 데이터 또는 기본값 */ -function translatePathSegment(segment: string): string { +function getSegmentData(segment: string): SegmentData { const translationData = translations as TranslationData; - return translationData.breadcrumb[segment] || segment; + return translationData.segments[segment] || { + name: segment, + linkable: false, + }; } /** @@ -26,23 +33,24 @@ function generateBreadcrumbItems(): BreadcrumbItem[] { const hash = window.location.hash.slice(1); // # 제거 if (!hash || hash === '/') { - return [{ name: '홈', path: '#/' }]; + return [{ name: '홈', path: '#/', linkable: true }]; } const pathSegments = hash.split('/').filter((segment) => segment !== ''); - const breadcrumbItems: BreadcrumbItem[] = [{ name: '홈', path: '#/' }]; + const breadcrumbItems: BreadcrumbItem[] = [{ name: '홈', path: '#/', linkable: true }]; let currentPath = ''; pathSegments.forEach((segment) => { currentPath += `/${segment}`; - // 세그먼트 이름을 한국어로 변환 - const displayName = translatePathSegment(segment); + // 세그먼트 데이터 가져오기 (이름과 링크 가능 여부) + const segmentData = getSegmentData(segment); breadcrumbItems.push({ - name: displayName, + name: segmentData.name, path: `#${currentPath}`, + linkable: segmentData.linkable, }); }); @@ -66,8 +74,13 @@ function createBreadcrumbElement(items: BreadcrumbItem[]): HTMLElement { if (isLast) { // 현재 페이지는 span으로 표시 return `${item.name}`; + } + + if (!item.linkable) { + // linkable이 false인 경우 span으로 표시 (링크 없음) + return `${item.name} / `; } else { - // 이전 페이지들은 링크로 표시 + 구분자 + // 링크 가능한 이전 페이지들은 링크로 표시 + 구분자 return `${item.name} / `; } }) From 88cb50ff176630158af62246cca12e931047fca1 Mon Sep 17 00:00:00 2001 From: ThisTimeNull Date: Thu, 19 Jun 2025 15:03:15 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[ops]=20Task=20139,140=20:=20Font=20Aweso?= =?UTF-8?q?me=20CDN=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/index.html b/index.html index 8fe3aee..b688770 100644 --- a/index.html +++ b/index.html @@ -18,10 +18,6 @@ connectionString: "InstrumentationKey=7bea0293-01dc-409c-9471-3a65567b11ed;IngestionEndpoint=https://koreacentral-0.in.applicationinsights.azure.com/;LiveEndpoint=https://koreacentral.livediagnostics.monitor.azure.com/;ApplicationId=ddbe985c-4d7a-41e4-80a8-a3961068933b" }}); - Date: Thu, 19 Jun 2025 15:46:18 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[ops]=20Task=20143=20:=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EB=A9=94=ED=83=80=20=EC=84=A4=EB=AA=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index b688770..fab1d5f 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,8 @@ Docker Korea - - + Date: Thu, 19 Jun 2025 16:16:47 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[ops]=20Task=20144=20:=20a=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=EB=A5=BC=20button=ED=83=9C=EA=B7=B8=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD.=20href=EC=86=8D=EC=84=B1=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=9D=B8=ED=95=B4=20=ED=81=AC=EB=A1=A4=EB=A7=81=EC=9D=B4=20?= =?UTF-8?q?=EC=95=88=EB=90=9C=EB=8B=A4=EB=8A=94=20=EB=B6=84=EC=84=9D=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scripts/table-contents.ts | 5 ++--- src/styles/style.css | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/scripts/table-contents.ts b/src/scripts/table-contents.ts index b5a385d..5a2f30d 100644 --- a/src/scripts/table-contents.ts +++ b/src/scripts/table-contents.ts @@ -43,10 +43,9 @@ export const initializeTableContents = () => { 'hover:bg-gray-300', 'hover:font-semibold', 'cursor-pointer', - 'truncate' ); - const link = document.createElement('a'); - link.classList.add('flex', 'justify-start', 'items-stretch', 'p-1'); + const link = document.createElement('button'); + link.classList.add('flex', 'justify-start', 'items-stretch', 'p-1', 'cursor-pointer', 'w-full'); const headingText = heading.textContent || ''; link.textContent = diff --git a/src/styles/style.css b/src/styles/style.css index 022bea0..c2b2268 100644 --- a/src/styles/style.css +++ b/src/styles/style.css @@ -3,7 +3,7 @@ /* 전역 스타일 */ @layer base { body { - @apply text-black; + @apply text-black bg-white; } } From 4ac93bda8a6ad90f8e8674f1f725366f0bdabdf8 Mon Sep 17 00:00:00 2001 From: ThisTimeNull Date: Thu, 19 Jun 2025 16:39:36 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[ops]=20Task=20142=20:=20button=EC=9A=94?= =?UTF-8?q?=EC=86=8C=EC=97=90=20aria-label=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/index.html b/index.html index fab1d5f..ebfe794 100644 --- a/index.html +++ b/index.html @@ -78,6 +78,7 @@