a11y: aria-hidden on three decorative middle-dot separators
Three places in the renderer use a literal middle-dot character (· / ·) as a visual separator between two label components: - Sidebar streamer-section counter: "12 · 3 live" - Stats top-streamers row sub-label: "streamerName · 5 files" - Stats size-bucket row sub-label: "count · size" Screen readers either announce "middle dot" verbatim or skip it depending on the implementation — neither is useful information. Wrapped each dot in <span aria-hidden="true"> so the assistive-tech read-out becomes "12 3 live" / "streamerName 5 files" / "count size" — the meaningful parts only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1fb33aa6cc
commit
43924fd51f
@ -82,7 +82,7 @@ function renderStatsTopStreamers(top: ArchiveStatsTopStreamer[], totalBytes: num
|
|||||||
return `
|
return `
|
||||||
<div class="stats-top-row">
|
<div class="stats-top-row">
|
||||||
<div class="stats-top-meta">
|
<div class="stats-top-meta">
|
||||||
<span><strong>${escapeStatsHtml(s.streamer)}</strong> <span class="stats-top-meta-sub">· ${s.fileCount} ${escapeStatsHtml(UI_TEXT.static.statsFiles)}</span></span>
|
<span><strong>${escapeStatsHtml(s.streamer)}</strong> <span class="stats-top-meta-sub"><span aria-hidden="true">·</span> ${s.fileCount} ${escapeStatsHtml(UI_TEXT.static.statsFiles)}</span></span>
|
||||||
<span class="stats-top-meta-sub">${formatBytesForStats(s.bytes)} <span class="stats-top-share">(${sharePct}%)</span></span>
|
<span class="stats-top-meta-sub">${formatBytesForStats(s.bytes)} <span class="stats-top-share">(${sharePct}%)</span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stats-top-bar-track">
|
<div class="stats-top-bar-track">
|
||||||
@ -153,7 +153,7 @@ function renderStatsSizeBuckets(buckets: ArchiveStatsBucket[]): void {
|
|||||||
<div class="stats-bucket-row">
|
<div class="stats-bucket-row">
|
||||||
<div class="stats-bucket-meta">
|
<div class="stats-bucket-meta">
|
||||||
<span>${escapeStatsHtml(b.label)}</span>
|
<span>${escapeStatsHtml(b.label)}</span>
|
||||||
<span class="stats-bucket-meta-sub">${b.count} · ${formatBytesForStats(b.bytes)}</span>
|
<span class="stats-bucket-meta-sub">${b.count} <span aria-hidden="true">·</span> ${formatBytesForStats(b.bytes)}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stats-bucket-bar-track">
|
<div class="stats-bucket-bar-track">
|
||||||
<div class="stats-bucket-bar-fill" style="width: ${pct}%;"></div>
|
<div class="stats-bucket-bar-fill" style="width: ${pct}%;"></div>
|
||||||
|
|||||||
@ -448,7 +448,7 @@ function renderStreamers(): void {
|
|||||||
if (all.length === 0) {
|
if (all.length === 0) {
|
||||||
counter.textContent = '';
|
counter.textContent = '';
|
||||||
} else if (liveCount > 0) {
|
} else if (liveCount > 0) {
|
||||||
counter.innerHTML = `${all.length} <span class="streamer-section-counter-divider">·</span> <span class="streamer-section-counter-live">${liveCount} live</span>`;
|
counter.innerHTML = `${all.length} <span class="streamer-section-counter-divider" aria-hidden="true">·</span> <span class="streamer-section-counter-live">${liveCount} live</span>`;
|
||||||
} else {
|
} else {
|
||||||
counter.textContent = String(all.length);
|
counter.textContent = String(all.length);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user