Skip to content

feat(GlBreadcrumbItem): implement custom component, add `aria-current="page"` to the last breadcrumb link

What does this MR do?

References #1586 (closed)

The active page link (last item in the breadcrumb) should have aria-current="page" to indicate that it's the current page.

See https://www.w3.org/TR/wai-aria-practices/examples/breadcrumb/index.html for an example. This MR adds aria-current to the last breadcrumb link. There was a previous unsuccessful attempt to fix this.

Quoting the result from it

The problem here is that as we rely on a bootsrap-vue component internally, it has the logic to render span instead of the a item when there is aria-current. It would be fine as there is not much point in navigating again to the link that is already active but it also becomes unfocusable so I guess the whole point of aria-current is lost.

IMO it can be fixed by reimplementing the breadcrumb component from scratch or at least its item component.

As we could not add aria-current relying on BBreadcrumbItem, here we're creating our own simple component that will allow that.

Does this MR meet the acceptance criteria?

Conformity

  • Code review guidelines.
  • GitLab UI's contributing guidlines.
  • If it changes a Pajamas-compliant component's look & feel, the MR has been reviewed by a UX designer.
  • If it changes GitLab UI's documentation guidelines, the MR has been reviewed by a Technical Writer.
  • If the MR changes a component's API, integration MR(s) have been opened in the following projects to ensure that the @gitlab/ui package can be upgraded quickly after the changes are released:
  • Added the ~"component:*" label(s) if applicable.

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • Security reports checked/validated by a reviewer from the AppSec team

Accessibility

If this MR adds or modifies a component, take a few moments to review the following:

  • All actions and functionality can be done with a keyboard.
  • Links, buttons, and controls have a visible focus state.
  • All content is presented in text or with a text equivalent. For example, alt text for SVG, or aria-label for icons that have meaning or perform actions.
  • Changes in a component’s state are announced by a screen reader. For example, changing aria-expanded="false" to aria-expanded="true" when an accordion is expanded.
  • Color combinations have sufficient contrast.

Merge request reports