Skip to content

Commit a338116

Browse files
authored
Merge pull request #642 from abraccoippon/feature/fix_a11y_skip_link
feat(DsfrSkipLinks): ♿ Le contenu ciblé par le lien d'évitement prend le focus
2 parents 5250c43 + fc842d6 commit a338116

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import DsfrSkipLinks from './DsfrSkipLinks.vue'
2+
import '../../main.css'
3+
4+
const SkipLinksWrapper = {
5+
components: {
6+
DsfrSkipLinks,
7+
},
8+
9+
data () {
10+
return {
11+
links: [
12+
{
13+
id: 'content',
14+
text: 'Accéder au contenu',
15+
},
16+
],
17+
}
18+
},
19+
20+
template: `
21+
<DsfrSkipLinks
22+
:links="links"
23+
/>
24+
<main id="content" tabindex="0">
25+
<h2>Qu'est-ce que le Lorem Ipsum?</h2>
26+
<p>Le <strong>Lorem Ipsum</strong> est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.</p>
27+
</main>
28+
`,
29+
}
30+
31+
describe('DsfrSkipLinks', () => {
32+
it('should mount a skip link and let main element take the focus', () => {
33+
cy.mount(SkipLinksWrapper)
34+
.get('a')
35+
.contains('Accéder au contenu')
36+
.click({ force: true })
37+
38+
cy.get('main#content')
39+
.should('have.focus')
40+
})
41+
})

src/components/DsfrSkipLinks/DsfrSkipLinks.stories.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ export default {
99
argTypes: {
1010
links: {
1111
control: 'object',
12-
description: 'Permet de passer le label du lien et l’id de l’élément html ciblée sous forme de tableau d’objets. Chaque objet aura 2 propriétés : `id` et `text`.',
12+
description: 'Permet de passer le label du lien et l’id de l’élément html ciblée sous forme de tableau d’objets. Chaque objet aura 2 propriétés : `id` et `text`. <br/>' +
13+
' Il est primordial que les éléments ciblés par les liens d’évitements puissent recevoir le focus (si ce n’est pas le cas nativement, ajouter `tabindex="0"`)',
1314
},
1415
},
1516
}
@@ -29,12 +30,17 @@ export const LiensDEvitement = (args) => ({
2930
<DsfrSkipLinks
3031
:links="links"
3132
/>
32-
<h2 id="what">Qu'est-ce que le Lorem Ipsum?</h2>
33+
<section id="what" tabindex="0">
34+
<h2>Qu'est-ce que le Lorem Ipsum?</h2>
3335
<p>Le <strong>Lorem Ipsum</strong> est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.</p>
34-
</div>
35-
<h2 id="why">Pourquoi l'utiliser?</h2>
36-
<p>On sait depuis longtemps que travailler avec du texte lisible et contenant du sens est source de distractions, et empêche de se concentrer sur la mise en page elle-même. L'avantage du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du texte.' est qu'il possède une distribution de lettres plus ou moins normale, et en tout cas comparable avec celle du français standard. De nombreuses suites logicielles de mise en page ou éditeurs de sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une recherche pour 'Lorem Ipsum' vous conduira vers de nombreux sites qui n'en sont encore qu'à leur phase de construction. Plusieurs versions sont apparues avec le temps, parfois par accident, souvent intentionnellement (histoire d'y rajouter de petits clins d'oeil, voire des phrases embarassantes).</p>
37-
</div>
36+
<p>Le <strong>Lorem Ipsum</strong> est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.</p>
37+
<p>Le <a href="#">Lorem Ipsum</a> est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.</p>
38+
</section>
39+
<section id="why" tabindex="0">
40+
<h2>Pourquoi l'utiliser?</h2>
41+
<p>On sait depuis longtemps que travailler avec du texte lisible et contenant du sens est source de distractions, et empêche de se concentrer sur la mise en page elle-même. L'avantage du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du texte.' est qu'il possède une distribution de lettres plus ou moins normale, et en tout cas comparable avec celle du français standard. De nombreuses suites logicielles de mise en page ou éditeurs de sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une recherche pour 'Lorem Ipsum' vous conduira vers de nombreux sites qui n'en sont encore qu'à leur phase de construction. Plusieurs versions sont apparues avec le temps, parfois par accident, souvent intentionnellement (histoire d'y rajouter de petits clins d'oeil, voire des phrases embarassantes).</p>
42+
<p>Le <a href="#">Lorem Ipsum</a> est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.</p>
43+
</section>
3844
`,
3945

4046
})

src/components/DsfrSkipLinks/DsfrSkipLinks.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ defineProps<{
55
66
const scrollMeTo = (elementId: string) => {
77
const element = document.getElementById(elementId)
8-
const top = element?.offsetTop
9-
window.scrollTo(0, top || 0)
8+
element?.focus()
109
}
1110
</script>
1211

0 commit comments

Comments
 (0)