Merge pull request #14 from ndarilek/accessible-routing

Initial work on making routing more accessible
This commit is contained in:
Chris McCord 2021-12-13 13:21:04 -05:00 committed by GitHub
commit 57c193e490
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 1 deletions

View file

@ -177,11 +177,30 @@ let liveSocket = new LiveSocket("/live", Socket, {
params: {_csrf_token: csrfToken} params: {_csrf_token: csrfToken}
}) })
let routeUpdated = () => {
let target = document.querySelector("main h1") || document.querySelector("main")
if (target) {
let origTabIndex = target.getAttribute("tabindex")
target.setAttribute("tabindex", "-1")
target.focus()
window.setTimeout(() => {
if (origTabIndex) {
target.setAttribute("tabindex", origTabIndex)
} else {
target.removeAttribute("tabindex")
}
}, 1000)
}
}
// Show progress bar on live navigation and form submits // Show progress bar on live navigation and form submits
topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"}) topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"})
window.addEventListener("phx:page-loading-start", info => topbar.show()) window.addEventListener("phx:page-loading-start", info => topbar.show())
window.addEventListener("phx:page-loading-stop", info => topbar.hide()) window.addEventListener("phx:page-loading-stop", info => topbar.hide())
// Accessible routing
window.addEventListener("phx:page-loading-stop", () => window.requestAnimationFrame(routeUpdated))
window.addEventListener("js:exec", e => e.target[e.detail.call](...e.detail.args)) window.addEventListener("js:exec", e => e.target[e.detail.call](...e.detail.args))
// connect if there are any LiveViews on the page // connect if there are any LiveViews on the page

View file

@ -37,7 +37,7 @@ defmodule LiveBeatsWeb.LiveHelpers do
</svg> </svg>
</div> </div>
<div class="ml-3"> <div class="ml-3">
<p class="text-sm font-medium text-red-800"> <p class="text-sm font-medium text-red-800" role="alert">
<%= render_slot(@inner_block) %> <%= render_slot(@inner_block) %>
</p> </p>
</div> </div>

View file

@ -36,6 +36,7 @@ defmodule LiveBeatsWeb.LayoutView do
<.link <.link
navigate={profile_path(@current_user)} navigate={profile_path(@current_user)}
class={"text-gray-700 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md #{if @active_tab == :profile, do: "bg-gray-200", else: "hover:bg-gray-50"}"} class={"text-gray-700 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md #{if @active_tab == :profile, do: "bg-gray-200", else: "hover:bg-gray-50"}"}
aria-current={if @active_tab == :profile, do: "true", else: "false"}
> >
<.icon name={:music_note} outlined class="text-gray-400 group-hover:text-gray-500 mr-3 flex-shrink-0 h-6 w-6"/> <.icon name={:music_note} outlined class="text-gray-400 group-hover:text-gray-500 mr-3 flex-shrink-0 h-6 w-6"/>
My Songs My Songs
@ -44,6 +45,7 @@ defmodule LiveBeatsWeb.LayoutView do
<.link <.link
navigate={Routes.settings_path(Endpoint, :edit)} navigate={Routes.settings_path(Endpoint, :edit)}
class={"text-gray-700 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md #{if @active_tab == :settings, do: "bg-gray-200", else: "hover:bg-gray-50"}"} class={"text-gray-700 hover:text-gray-900 group flex items-center px-2 py-2 text-sm font-medium rounded-md #{if @active_tab == :settings, do: "bg-gray-200", else: "hover:bg-gray-50"}"}
aria-current={if @active_tab == :settings, do: "true", else: "false"}
> >
<.icon name={:adjustments} outlined class="text-gray-400 group-hover:text-gray-500 mr-3 flex-shrink-0 h-6 w-6"/> <.icon name={:adjustments} outlined class="text-gray-400 group-hover:text-gray-500 mr-3 flex-shrink-0 h-6 w-6"/>
Settings Settings