Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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