From 78edb7c9d2e1f371ef535c64c343e81a70e8021d Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 10 Oct 2026 21:00:08 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=EC=A0=95=EC=A0=81=20?= =?UTF-8?q?=EB=B9=88=20=EC=83=81=ED=83=9C=20HTML=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1=20=EC=95=88=ED=8B=B0=ED=8C=A8?= =?UTF-8?q?=ED=84=B4(role=3D"status")=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ’‘ What: `main.kt`의 빈 디렉토리 μƒνƒœ λ Œλ”λ§μ—μ„œ `role="status"` 속성을 μ œκ±°ν•˜κ³  κ΄€λ ¨ ν…ŒμŠ€νŠΈλ₯Ό μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€. 🎯 Why: 초기 νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œ μ •μ μœΌλ‘œ λ Œλ”λ§λ˜λŠ” 빈 디렉토리 λ©”μ‹œμ§€μ— ARIA live region(`role="status"`)을 μ μš©ν•˜λŠ” 것은 슀크린 리더 μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ„ 쀄 수 μžˆλŠ” μ ‘κ·Όμ„± μ•ˆν‹°νŒ¨ν„΄μž…λ‹ˆλ‹€. μ΄λŠ” 동적 μ—…λ°μ΄νŠΈμ— μ‚¬μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. β™Ώ Accessibility: 정적 μ»¨ν…μΈ μ—μ„œ λΆ€μ μ ˆν•œ ARIA 라이브 리전을 μ œκ±°ν•˜μ—¬ 슀크린 리더 κ²½ν—˜μ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. --- .jules/palette.md | 3 +++ src/main/kotlin/html4tree/main.kt | 2 +- src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt | 2 +- src/test/kotlin/html4tree/MainTest.kt | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.jules/palette.md b/.jules/palette.md index 604d7810..4f61ad7b 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -73,3 +73,6 @@ ## 2026-08-17 - λΈŒλΌμš°μ € λ²ˆμ—­κ³Ό ν™”λ©΄ νŒλ…κΈ°μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•œ ν…μŠ€νŠΈ 처리 **Learning:** `aria-label` μ†μ„±μœΌλ‘œ μ§€μ •λœ ν™”λ©΄ νŒλ…κΈ°μš© λŒ€μ²΄ ν…μŠ€νŠΈλŠ” Chrome Translate λ“± λΈŒλΌμš°μ € λ²ˆμ—­ 도ꡬ에 μ˜ν•΄ λ²ˆμ—­λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 이둜 인해 λ¬Έμ„œ μ–Έμ–΄κ°€ λ³€ν™˜λ˜μ–΄λ„ 슀크린 λ¦¬λ”μ—μ„œλŠ” 원본 μ–Έμ–΄(예: μ˜μ–΄)둜 μ½ν˜€ λ‹€κ΅­μ–΄ 접근성이 μ €ν•˜λ©λ‹ˆλ‹€. **Action:** ν™”λ©΄ νŒλ…κΈ°λ₯Ό μœ„ν•œ μˆ¨κ²¨μ§„ μ„€λͺ… ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•  λ•Œ `aria-label` λŒ€μ‹  CSS `.visually-hidden` 클래슀λ₯Ό μ μš©ν•œ `` μš”μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬, λΈŒλΌμš°μ €κ°€ 일반 ν…μŠ€νŠΈλ‘œ μΈμ‹ν•˜κ³  λ²ˆμ—­ν•  수 μžˆλ„λ‘ ν•˜μ—¬ λ‹€κ΅­μ–΄ μ ‘κ·Όμ„± ν˜Έν™˜μ„±μ„ ν™•λ³΄ν•˜μ‹­μ‹œμ˜€. +## 2026-10-10 - 정적 빈 μƒνƒœ HTMLμ—μ„œ ARIA 라이브 리전 μ—­ν•  제거 +**Learning:** 초기 νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œ μ •μ μœΌλ‘œ λ Œλ”λ§λ˜λŠ” 빈 디렉토리 μƒνƒœμ™€ 같은 HTML μ½˜ν…μΈ μ— `role="status"`와 같은 ARIA 라이브 리전을 μ μš©ν•˜λŠ” 것은 μ ‘κ·Όμ„± μ•ˆν‹°νŒ¨ν„΄μž…λ‹ˆλ‹€. μ΄λŠ” 동적인 μ—…λ°μ΄νŠΈμ— μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λ©°, 정적인 컨텐츠에 μ‚¬μš© μ‹œ 슀크린 리더가 이λ₯Ό 잘λͺ» μ•ˆλ‚΄ν•˜κ±°λ‚˜ μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ„ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. +**Action:** μ •μ μœΌλ‘œ μƒμ„±λ˜λŠ” μ½˜ν…μΈ μ—λŠ” `role="status"`λ‚˜ μœ μ‚¬ν•œ 라이브 리전 μ—­ν• (role)을 μ μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. diff --git a/src/main/kotlin/html4tree/main.kt b/src/main/kotlin/html4tree/main.kt index 0972fa2c..7214e7f5 100644 --- a/src/main/kotlin/html4tree/main.kt +++ b/src/main/kotlin/html4tree/main.kt @@ -467,7 +467,7 @@ fun process_dir(curr_dir: File, excludeSet: Set? = null, dirFiles: Array } if(l.isEmpty()){ - l.append("""
  • 이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • """) + l.append("""
  • 이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • """) l.append('\n') } diff --git a/src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt b/src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt index 5897ce6d..b9bb203b 100644 --- a/src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt +++ b/src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt @@ -62,7 +62,7 @@ class GeneratedIndexReadabilityTest { val generatedHtml = generatedHtml() val expectedEmptyRow = - """
  • 이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • """ + """
  • 이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • """ assertTrue(generatedHtml.contains(expectedEmptyRow)) assertTrue(generatedHtml.indexOf(expectedEmptyRow) == generatedHtml.lastIndexOf(expectedEmptyRow)) diff --git a/src/test/kotlin/html4tree/MainTest.kt b/src/test/kotlin/html4tree/MainTest.kt index 5b76cc5d..16b465f6 100644 --- a/src/test/kotlin/html4tree/MainTest.kt +++ b/src/test/kotlin/html4tree/MainTest.kt @@ -115,7 +115,6 @@ class MainTest { assertTrue(htmlContent.contains("")) assertRobotsDirective(htmlContent) assertTrue(htmlContent.contains("이 λ””λ ‰ν† λ¦¬λŠ” λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.")) - assertTrue(htmlContent.contains("role=\"status\"")) assertTrue(htmlContent.contains("role=\"list\"")) assertTrue(htmlContent.contains("📂")) }