Sur le Web, un composant est un programme qui permet de fournir une interface intégrable, conçue pour un usage précis, mais personnalisable par chaque développeur.
Par exemple, si je développe et diffuse un composant de galerie d'images, d'autres développeurs pourront intégrer simplement mon composant sur leur site, et y ajouter les images de leur choix.
Les composants permettent donc d'enrichir le contenu, l'esthétique, et/ou les interactions proposés par un site Web, en réutilisant du code qui n'a pas été écrit spécifiquement pour ce site.
Il existe de très nombreux composants publiés sur Internet et utilisables gratuitement. Pour la plupart, ils sont basés sur la bibliothèque « jQuery » (dont nous parlerons plus tard dans ce cours). Mais nombreux ont été conçus en JavaScript/DOM natif (aussi appelé « Vanilla JavaScript »), et peuvent donc fonctionner sans jQuery.
Note : dans le cadre de ce cours, l'usage (direct ou pas) de jQuery ne sera pas accepté.
Voici quelques exemples de composants natifs intégrables librement :
Vous pourrez trouver d'autres composants natifs sur le site Vanilla List.
À ce stade, nous allons apprendre à réaliser un composant simple, dans le sens où celui-ci ne sera pas suffisamment modulaire pour être intégré plusieurs fois sur une même page. Nous verrons plus tard comment faire cela.
XIII-A-1. Généricité et instructions d'intégration▲
Afin que notre composant puisse être intégré de manière personnalisée par chaque développeur, quels que soient le site Web en question et son contenu, il est important de définir quelques règles et abstractions.
D'abord, un composant doit être simple à intégrer, et un utilisateur de composant ne devrait jamais avoir à consulter ni modifier le code source du composant. Il va falloir donc que le composant soit suffisamment générique et configurable depuis le site Web qui l'intégrera.
Par exemple, un composant de galerie d'images doit s'adapter à une liste d'images fournie par un développeur désirant l'intégrer, et l'intégrateur ne devrait en aucun cas avoir à modifier la liste d'images dans le code source du composant.
Pour cela, un composant :
- ne doit pas contenir de valeurs et références littérales ; (ex. : nombre d'images et/ou URL des images stockés « en dur » dans le code du composant) ;
- doit définir et documenter les règles et contraintes éventuelles que devront respecter les intégrateurs du composant.
Exemples d'instructions d'intégration fournies par la documentation d'un composant :
- toutes les images à afficher dans la galerie doivent être des balises <img> portant la classe carousel-img ;
- ou encore : appeler la fonction creerGallerie() (définie par le composant) en passant en paramètres l'identifiant du DIV devant contenir la galerie, et un tableau d'URL d'image.
Prenez le temps d'analyser les instructions d'intégration des composants listés plus haut.
XIII-A-2. Exercice 1 : développer et documenter un composant simple▲
Pour mettre en pratique cette partie du chapitre, développer un des trois composants suivants, et fournir la page de documentation associée.
La page de documentation doit contenir :
- une description concise du composant : à quoi il sert, quelles sont ses fonctionnalités et avantages éventuels ;
- une démonstration du composant, pour le tester depuis la page ;
- les instructions permettant d'intégrer simplement ce composant à son site ;
- la description des fonctions et/ou paramètres éventuellement fournis par le composant ;
- BONUS : la liste des navigateurs (et leur version) sur lesquels le composant fonctionne ;
- BONUS : le composant et sa documentation publiés sur GitHub.
S'inspirer de la documentation des composants fournis plus haut en exemple.
Conseil pratique : pour afficher du code source sur une page HTML sans que celui-ci ne soit interprété par le navigateur, utiliser la balise <xmp>.
XIII-A-2-a. Composant : Carousel▲
Un « carousel » est un composant de galerie d'images permettant à l'utilisateur de passer d'une image à l'autre, et éventuellement d'agrandir une image en plein écran.
Certains carousels passent automatiquement d'une image à l'autre, à l'aide d'un minuteur (setTimeout
(
) ou setInterval
(
)).
Pour développer un carousel, il faut maîtriser :
- les sélecteurs DOM (
getElementById
(
), getElementsByClassName
(
) et/ou getElementsByTagName
(
)) ;
- la manipulation de styles et/ou classes CSS en JavaScript ;
- la capture d'événements onclick ;
- et l'opérateur modulo (%).
Solution : Jsfiddle
<button id
=
"next"
>
next</button>
<div id
=
"carousel"
>
<img class
=
"carousel-img"
src
=
"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTeiCMhoMrQyPFOsY9cX1tUZm39RAVvWGI3KTt5j3MhYAbYtmqm"
>
<img class
=
"carousel-img"
src
=
"data:image/jpeg;base64,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"
>
<img class
=
"carousel-img"
src
=
"data:image/jpeg;base64,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"
>
</div>
var images
=
document
.getElementsByClassName
(
'carousel-img'
);
var imageVisible =
0
;
function changerImage
(
) {
images
[
imageVisible].
classList.remove
(
'visible'
);
imageVisible = (
imageVisible +
1
) %
images
.
length;
images
[
imageVisible].
classList.add
(
'visible'
);
}
document
.getElementById
(
'next'
).
onclick
=
changerImage;
changerImage
(
);
XIII-A-2-b. Composant : Accordéon▲
Un « accordéon » est un composant proposant plusieurs rubriques à l'utilisateur, et lui permettant d'afficher le contenu d'une rubrique à la fois, en cliquant sur son titre.
Pour développer un accordéon, il faut maîtriser :
- les sélecteurs DOM (
getElementById
(
), getElementsByClassName
(
) et/ou getElementsByTagName
(
)) ;
- la manipulation de styles et/ou classes CSS en JavaScript ;
- la capture d'événements onclick ;
- et la gestion du scope.
Solution : Jsfiddle
<section>
<header>Le programme de Donald Trump</header>
<article>La durée de vie d'un décret est par ailleurs limitée: un président donc abroger un décret d'un prédécesseur, comme l'a fait Donald Trump en annulant plusieurs textes signés par Barack Obama, sur les projets d'oléoducs Keystone ou sur le financement ...</article>
</section>
<section>
<header>Donald Trump accuse les juges...</header>
<article>Dire que Donald Trump a peu apprécié le blocage de son décret anti-immigration par un juge fédéral est un euphémisme. Samedi 4 février, il l'a désigné à la vindicte des 23 millions d'abonnés de son compte Twitter, le qualifiant de « soi-disant juge ...</article>
</section>
<section>
<header>Donald Trump rencontrera ses alliés de l'Otan</header>
<article>En mai aura lieu une rencontre entre Donald Trump et ses alliés de l'Otan, a annoncé dimanche la Maison Blanche, après un entretien téléphonique entre le président américain et le secrétaire général de l'Alliance atlantique Jens Stoltenberg. Donald ...</article>
</section>
var headers =
document
.getElementsByTagName
(
'header'
);
var articles =
document
.getElementsByTagName
(
'article'
);
function afficherArticle
(
i) {
articles[
i].
classList.add
(
'visible'
);
}
function cacherArticles
(
) {
for (
var i =
0
;
i <
articles.
length;
i++
) {
articles[
i].
classList.remove
(
'visible'
);
}
}
function pourAfficherArticle
(
i) {
return function(
){
cacherArticles
(
);
afficherArticle
(
i);
};
}
for (
var i =
0
;
i <
headers.
length;
i++
) {
headers[
i].
onclick
=
pourAfficherArticle
(
i);
}
XIII-A-2-c. Composant : Galerie vidéo▲
Une galerie vidéo permet à l'utilisateur de visualiser une vidéo, en cliquant parmi une sélection fournie.
Pour développer une galerie vidéo, il faut maîtriser :
- les sélecteurs DOM (
getElementById
(
), getElementsByClassName
(
) et/ou getElementsByTagName
(
)) ;
- la capture d'événements onclick ;
- l'intégration d'<iframe> (ex. : à l'aide de innerHTML) ;
- et la gestion du scope.
Solution : Jsfiddle
var videos =
[
'https://www.youtube.com/embed/0uaQMxBjd5E'
,
'https://www.youtube.com/embed/c8ZPn6p5khI'
,
'https://www.youtube.com/embed/ikkrEOD1BbQ'
,
];
var video =
document
.getElementById
(
'video'
);
var buttons =
document
.getElementsByTagName
(
'button'
);
function pourAfficherVideo
(
i) {
return function(
) {
video.
innerHTML =
'<iframe width="320" height="200" src="'
+
videos[
i]
+
'?autoplay=1"></iframe>'
};
}
for (
var i =
0
;
i <
buttons.
length;
i++
) {
buttons[
i].
onclick
=
pourAfficherVideo
(
i);
}