Skip to content

Commit cd8eb6a

Browse files
authored
[A11y] Make Windows Narrator announce redesign tabs properly (#8799)
Bootstrap 3 tabs do not have `aria-expanded` or `aria-selected` attributes until the user switches the tab. This causes issues with Windows Narrator. This change manually adds the `aria-expanded` and `aria-selected` attributes to ensure Windows Narrator properly announces these tabs. Part of #8790
1 parent 1ede04e commit cd8eb6a

1 file changed

Lines changed: 44 additions & 9 deletions

File tree

src/NuGetGallery/Views/Packages/DisplayPackageV2.cshtml

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -499,16 +499,34 @@
499499

500500
<div class="body-tabs">
501501
<ul class="nav nav-tabs" role="tablist">
502+
@{ string activeBodyTab = null; }
502503
@if (!Model.Deleted)
503504
{
505+
activeBodyTab = activeBodyTab ?? "readme";
504506
<li role="presentation" class="active" id="show-readme-container">
505-
<a href="#readme-tab" aria-controls="readme-tab" role="tab" data-toggle="tab" id="readme-body-tab" class="body-tab">
507+
<a href="#readme-tab"
508+
role="tab"
509+
data-toggle="tab"
510+
id="readme-body-tab"
511+
class="body-tab"
512+
aria-controls="readme-tab"
513+
aria-expanded="@(activeBodyTab == "readme" ? "true" : "false")"
514+
aria-selected="@(activeBodyTab == "readme" ? "true" : "false")">
506515
<i class="ms-Icon ms-Icon--Dictionary" aria-hidden="true"></i>
507516
README
508517
</a>
509518
</li>
519+
520+
activeBodyTab = activeBodyTab ?? "dependencies";
510521
<li role="presentation">
511-
<a href="#dependencies-tab" aria-controls="dependencies-tab" role="tab" data-toggle="tab" id="dependencies-body-tab" class="body-tab">
522+
<a href="#dependencies-tab"
523+
role="tab"
524+
data-toggle="tab"
525+
id="dependencies-body-tab"
526+
class="body-tab"
527+
aria-controls="dependencies-tab"
528+
aria-expanded="@(activeBodyTab == "dependencies" ? "true" : "false")"
529+
aria-selected="@(activeBodyTab == "dependencies" ? "true" : "false")">
512530
<i class="ms-Icon ms-Icon--Packages" aria-hidden="true"></i>
513531
Dependencies
514532
</a>
@@ -517,23 +535,40 @@
517535

518536
@if (!Model.IsDotnetToolPackageType && (Model.IsGitHubUsageEnabled || Model.IsPackageDependentsEnabled))
519537
{
538+
activeBodyTab = activeBodyTab ?? "usedby";
520539
<li role="presentation">
521-
<a href="#usedby-tab" aria-controls="usedby-tab" role="tab" data-toggle="tab" id="usedby-body-tab" class="body-tab">
540+
<a href="#usedby-tab"
541+
role="tab"
542+
data-toggle="tab"
543+
id="usedby-body-tab"
544+
class="body-tab"
545+
aria-controls="usedby-tab"
546+
aria-expanded="@(activeBodyTab == "usedby" ? "true" : "false")"
547+
aria-selected="@(activeBodyTab == "usedby" ? "true" : "false")">
522548
<i class="ms-Icon ms-Icon--BranchFork2" aria-hidden="true"></i>
523549
Used By
524550
</a>
525551
</li>
526552
}
527553

554+
@{ activeBodyTab = activeBodyTab ?? "versions"; }
528555
<li role="presentation">
529-
<a href="#versions-tab" aria-controls="versions-tab" role="tab" data-toggle="tab" id="versions-body-tab" class="body-tab">
556+
<a href="#versions-tab"
557+
role="tab"
558+
data-toggle="tab"
559+
id="versions-body-tab"
560+
class="body-tab"
561+
aria-controls="versions-tab"
562+
aria-expanded="@(activeBodyTab == "versions" ? "true" : "false")"
563+
aria-selected="@(activeBodyTab == "versions" ? "true" : "false")">
530564
<i class="ms-Icon ms-Icon--Stopwatch" aria-hidden="true"></i>
531565
Versions
532566
</a>
533567
</li>
534568

535569
@if (!String.IsNullOrWhiteSpace(Model.ReleaseNotes))
536570
{
571+
activeBodyTab = activeBodyTab ?? "releasenotes";
537572
<li role="presentation">
538573
<a href="#releasenotes-tab" aria-controls="releasenotes-tab" role="tab" data-toggle="tab" id="release-body-tab" class="body-tab">
539574
<i class="ms-Icon ms-Icon--ReadingMode" aria-hidden="true"></i>
@@ -547,7 +582,7 @@
547582
<div class="tab-content body-tab-content">
548583
@if (!Model.Deleted)
549584
{
550-
<div role="tabpanel" class="tab-pane active" id="readme-tab">
585+
<div role="tabpanel" class="tab-pane @(activeBodyTab == "readme" ? "active" : "")" id="readme-tab">
551586
@if ((Model.Validating || Model.FailedValidation) && Model.HasEmbeddedReadmeFile)
552587
{
553588
@ViewHelpers.AlertWarning(
@@ -582,7 +617,7 @@
582617
<p>@Html.PreFormattedText(Model.Description, Config)</p>
583618
}
584619
</div>
585-
<div role="tabpanel" class="tab-pane" id="dependencies-tab">
620+
<div role="tabpanel" class="tab-pane @(activeBodyTab == "dependencies" ? "active" : "")" id="dependencies-tab">
586621
@if (!Model.Deleted)
587622
{
588623
if (Model.Dependencies.DependencySets == null)
@@ -640,7 +675,7 @@
640675
}
641676
</div>
642677
}
643-
<div role="tabpanel" class="tab-pane" id="usedby-tab">
678+
<div role="tabpanel" class="tab-pane @(activeBodyTab == "usedby" ? "active" : "")" id="usedby-tab">
644679
@if (!Model.IsDotnetToolPackageType && (Model.IsGitHubUsageEnabled || Model.IsPackageDependentsEnabled))
645680
{
646681
<div class="used-by" id="used-by">
@@ -750,7 +785,7 @@
750785
</div>
751786
}
752787
</div>
753-
<div role="tabpanel" class="tab-pane" id="versions-tab">
788+
<div role="tabpanel" class="tab-pane @(activeBodyTab == "versions" ? "active" : "")" id="versions-tab">
754789
<div class="version-history" id="version-history">
755790
<table aria-label="Version History of @Model.Id" class="table borderless">
756791
<thead>
@@ -864,7 +899,7 @@
864899
</div>
865900
@if (!String.IsNullOrWhiteSpace(Model.ReleaseNotes))
866901
{
867-
<div role="tabpanel" class="tab-pane" id="releasenotes-tab">
902+
<div role="tabpanel" class="tab-pane @(activeBodyTab == "releasenotes" ? "active" : "")" id="releasenotes-tab">
868903
<p>@Html.PreFormattedText(Model.ReleaseNotes, Config)</p>
869904
</div>
870905
}

0 commit comments

Comments
 (0)