Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions .jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,7 @@
## 2026-08-17 - ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ์—ญ๊ณผ ํ™”๋ฉด ํŒ๋…๊ธฐ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
**Learning:** `aria-label` ์†์„ฑ์œผ๋กœ ์ง€์ •๋œ ํ™”๋ฉด ํŒ๋…๊ธฐ์šฉ ๋Œ€์ฒด ํ…์ŠคํŠธ๋Š” Chrome Translate ๋“ฑ ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ์—ญ ๋„๊ตฌ์— ์˜ํ•ด ๋ฒˆ์—ญ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฌธ์„œ ์–ธ์–ด๊ฐ€ ๋ณ€ํ™˜๋˜์–ด๋„ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”์—์„œ๋Š” ์›๋ณธ ์–ธ์–ด(์˜ˆ: ์˜์–ด)๋กœ ์ฝํ˜€ ๋‹ค๊ตญ์–ด ์ ‘๊ทผ์„ฑ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.
**Action:** ํ™”๋ฉด ํŒ๋…๊ธฐ๋ฅผ ์œ„ํ•œ ์ˆจ๊ฒจ์ง„ ์„ค๋ช… ํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•  ๋•Œ `aria-label` ๋Œ€์‹  CSS `.visually-hidden` ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•œ `<span>` ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•˜๊ณ  ๋ฒˆ์—ญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋‹ค๊ตญ์–ด ์ ‘๊ทผ์„ฑ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•˜์‹ญ์‹œ์˜ค.

## 2026-09-02 - Remove ARIA status role from static empty directory content
**Learning:** Applying an ARIA live region role such as `role="status"` to a static element rendered on initial page load (like an empty directory message) is an accessibility anti-pattern. It can cause screen readers to announce the content redundantly or interrupt the page reading flow.
**Action:** Remove `role="status"` from statically rendered empty state messages to ensure a seamless screen reader experience without redundant announcements.
2 changes: 1 addition & 1 deletion src/main/kotlin/html4tree/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ fun process_dir(curr_dir: File, excludeSet: Set<String>? = null, dirFiles: Array
}

if(l.isEmpty()){
l.append(""" <li><div class="empty-dir" role="status"><span class="icon" aria-hidden="true">&#128194;</span> <span>์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</span></div></li>""")
l.append(""" <li><div class="empty-dir"><span class="icon" aria-hidden="true">&#128194;</span> <span>์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</span></div></li>""")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ” Static-status contract remains stale

The readability contract still requires role="status", while the renamed behavior removes it. The test name also preserves the obsolete contract.

Devin Review

Was this helpful? React with ๐Ÿ‘ or ๐Ÿ‘Ž to provide feedback.

l.append('\n')
}

Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/html4tree/GeneratedIndexReadabilityTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class GeneratedIndexReadabilityTest {

val generatedHtml = generatedHtml()
val expectedEmptyRow =
"""<li><div class="empty-dir" role="status"><span class="icon" aria-hidden="true">&#128194;</span> <span>์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</span></div></li>"""
"""<li><div class="empty-dir"><span class="icon" aria-hidden="true">&#128194;</span> <span>์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</span></div></li>"""

assertTrue(generatedHtml.contains(expectedEmptyRow))
assertTrue(generatedHtml.indexOf(expectedEmptyRow) == generatedHtml.lastIndexOf(expectedEmptyRow))
Expand Down
1 change: 0 additions & 1 deletion src/test/kotlin/html4tree/MainTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ class MainTest {
assertTrue(htmlContent.contains("<html lang=\"ko\">"))
assertRobotsDirective(htmlContent)
assertTrue(htmlContent.contains("์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค."))
assertTrue(htmlContent.contains("role=\"status\""))
assertTrue(htmlContent.contains("role=\"list\""))
assertTrue(htmlContent.contains("&#128194;"))
}
Expand Down
Loading