Les Web Components

Les Composants Web, une nouvelle ere dans le développement Web.

De quoi s'agit-il au juste ?

Les composants web (web components) sont des balises personnalisées qui étendent les balises définies par le standard HTML

Pour que les navigateurs reconnaissent ces balises, les navigateurs doivent implémenter un ensemble de spécifications :

CUSTOM ELEMENTS
Cette spécification décrit la méthode pour permettre à l'auteur de définir et d'utiliser de nouveaux types d'éléments DOM dans un document.
HTML IMPORTS
Permet la réutilisation de documents HTML dans d'autres documents.
TEMPLATES
Cette spécification décrit comment créer des fragments DOM et comment les instancier et le réutiliser dans un document.
SHADOW DOM
Décrit la méthode qui permet d'établir et de maintenir des limites fonctionnelles entre le document et les fragments qu'il encapsule.

Peut-on les utiliser dès maintenant ? Oui.

Pour utiliser les Web Components, il faut attacher la librairies polyfill webcomponents.js à la page web. Cette bibliothèque permet de combler les disparités d'implémentations des différents navigateurs.

  1. <!-- Polyfill  pour les anciennes versions des navigateurs -->
  2. <script src="js/webcomponents.min.js"></script>
  3.  
  4. <!-- Importer un élément -->
  5. <link rel="import" href="components/google-map/google-map.html">
  6.  
  7. <!-- Utiliser  l'élément -->
  8. <google-map latitude="37.790" longitude="-122.390"></google-map>

Existe-t-il des librairies des Web components ? Oui.

Il existe trois librairies connues des composants Web :

POLYMER (Google)
Polymer est un nouveau type de bibliothèques pour le web, bâti au-dessus des composants Web, et conçu pour tirer parti de la plate-forme web évoluant sur les navigateurs modernes.
X-TAGS (Mozilla)
X-Tag est une petite bibliothèque JavaScript, créée et soutenue par Mozilla, qui apporte des capacités Web Components (Elements personnalisés) pour tous les navigateurs modernes.
BOSONIC
Bosonic est un ensemble d'outils qui permettent de construire des composants Web que la spécification décrit actuellement, Bosonic prend en charge les vieux navigateurs comme IE9.

Peut-on créer nos propres composants ? Oui.

Cas de PolymerJS

Pour créer un élément avec Polymer, il faut d'abord attacher la bibliothèque polymer.html dans un fichier HTML (sans la structure html) )et ensuite écrire le code du composant. Un composant peut utiliser d'autres composants.

Voici un exemple de composant que j'ai appelé <az-card>. Celui-ci permet d'afficher le nom et la photo d'un utilisateur. L'utilisation de ce composant dans une page HTML se fera de la manière suivante :

<az-card src="aziz.png" name="Daaif"></az-card>

Ci-contre l'affichage de cet élément.

Code du composant web

HTML
  1. <link rel="import" href="../bower_components/polymer/polymer.html">
  2.  
  3. <dom-module id="az-card">
  4.     <link rel="import" type="css" href="az-card.css">
  5.     <template>
  6.         <div class="wrapper">
  7.             <img class="image" src="{{src}}" title="{{name}}" />
  8.             <div class="name">{{name}}</div>
  9.         </div>
  10.     </template>
  11.     <script>
  12.         Polymer({
  13.           is: 'az-card',
  14.           properties: {
  15.               src: String,
  16.               name: String
  17.           }
  18.         });
  19.     </script>
  20. </dom-module>

Dans la partie JavaScript, on passe à la fonction Polymer() le prototype du nouveau élément. L'attribut is contient le nom de l'élément. L'attribut properties définit les propriétés de l'élément.

Le Shadow Dom du composant utilise la feuille de style externe az-card.css

CSS
  1. .wrapper {
  2.     width: 100px;
  3.     border: 3px double #999;
  4.     padding: 10px;
  5.     margin: 4px;
  6.     background: #eee;
  7. }
  8. .wrapper .image, .wrapper .name {
  9.     background: #777;
  10.     border: 1px solid #ccc;
  11.     padding: 6px;
  12.     box-shadow: 1px 1px 6px #666, -1px -1px 6px #666;
  13. }
  14. .wrapper img {
  15.     box-sizing: border-box;
  16.     width: 100%;
  17. }
  18. .wrapper .name {
  19.     margin-top: 2px;
  20.     font-size: 16px;
  21.     font-weight: bold;
  22.     text-align: center;
  23.     text-transform: uppercase;
  24.     color: #fff;
  25. }

Utilisation du composant dans une page HTML

HTML
  1. <!DOCTYPE html>
  2.     <meta charset="UTF-8">
  3.     <title>Test Polymer</title>
  4.     <script src="bower_components/webcomponentsjs/webcomponents.js"></script>
  5.     <link rel="import" href="elements/az-card.html">
  6.     <style>
  7.         az-card {
  8.             float: left;
  9.         }
  10.     </style>
  11. </head>
  12. <az-card src="aziz.png" name="Daaif"></az-card>
  13. <az-card src="aziz.png" name="Daaif"></az-card>
  14. <az-card src="aziz.png" name="Daaif"></az-card>
  15. <az-card src="aziz.png" name="Daaif"></az-card>
  16. </body>
  17. </html>
Résultat

Peut-on manipuler ces éléments avec Javascript ? Oui.

Comme les éléments standard HTML, les Web Components peuvent être manipulés avec du code javascript. Voici un exemple de création dynamique de l'élément.

HTML & JS
  1. <!DOCTYPE html>
  2.     <meta charset="UTF-8">
  3.     <title>Test Polymer</title>
  4.     <script src="bower_components/webcomponentsjs/webcomponents.js"></script>
  5.     <link rel="import" href="elements/az-card.html">
  6. </head>
  7.     // Création de l élément
  8.     var card = document.createElement('az-card');
  9.     // Accès aux propriétés nom et src
  10.     card.name = 'daaif';
  11.     card.src = 'aziz.png';
  12.     // Insertion dans l'arbre DOM
  13.     document.body.appendChild(card);
  14. </body>
  15. </html>

Peut-on continuer à utiliser nos librairies Javascript de la même façon qu'avant ? Oui.

Voici un exemple qui utilise la librairie jQuery pour manipuler notre composant web <az-card>

HTML & JS
  1. <!DOCTYPE html>
  2.     <meta charset="UTF-8">
  3.     <title>Test Polymer</title>
  4.     <script src="bower_components/webcomponentsjs/webcomponents.js"></script>
  5.     <link rel="import" href="elements/az-card.html">
  6.     <style>
  7.         az-card {
  8.             float: left;
  9.         }
  10.     </style>
  11. </head>
  12. <script src="bower_components/jquery/dist/jquery.min.js"></script>
  13.     var i=0,
  14.         count=10,
  15.         url = 'https://randomuser.me/api/?results=' + count;
  16.     $.ajax(url, {dataType: 'json'})
  17.         .done(function(data){
  18.             var users = data.results;
  19.             for(; i<count; i++){ // > hack coloration syntaxique !!
  20.                 // Création de l élément
  21.                 var $card = $('<az-card>');
  22.                 // Accès aux propriétés
  23.                 $card.attr('name',users[i].user.name.last);
  24.                 $card.attr('src', users[i].user.picture.thumbnail);
  25.                 // Insertion dans le DOM
  26.                 $(document.body ).append($card);
  27.             }
  28.         });
  29.  
  30. </body>
  31. </html>
Résultat

Conclusion

Les web composants apportent une nouvelle approche pour le développement web. Cette approche privilégie l'aspect déclaratif, la composition et la réutilsation du code.

L'implémentation des spécifications est en route pour la plupart des navigateurs modernes. En attendant, la bibliothèque polyfill webcomponents.js comble le fossé et permet l'utilsation de ces composants.

Les navigateurs sont obligés de se mettre à niveau, sinon, l'utilisation des polyfill va affecter les performances, et l'utilisateur final acusera le navigateur et non pas les Web Components.

Avec les polyfill, nous sommes déjà demain, et il parait que le train ne va pas s'arrêter.



Commentaires

Portrait de Imani

Merci pour ce très bon tutoriel.

Hi, after reading this remarkable post i am too happy to share my familiarity here with mates.

Look at my site commercial cleaning

Fastidious response in return of this difficulty with firm arguments and telling the whole thing

about that.

my web page ... Black Castor Oil

Right away I am going away to do my breakfast, once having my breakfast coming again to read other news.

Review my blog post Jack

Hi there I am so delighted I found your blog page, I really found you by mistake, while I

was looking on Google for something else, Anyhow I am here now and would just like to say

cheers for a fantastic post and a all round interesting blog (I also love the theme/design),

I don't have time to read it all at the minute but I have book-marked

it and also included your RSS feeds, so when I have time I will be

back to read a lot more, Please do keep up the superb job.

Also visit my website ... Broadridge proxy solicitation Job

Hi there! Do you know if they make any plugins to

assist with SEO? I'm trying to get my blog to rank

for some targeted keywords but I'm not seeing very good success.

If you know of any please share. Kudos!

my page proxy solicitation job description

It is appropriate time to make some plans for the future and it's time to be happy.

I've read this post and if I could I want to suggest you few interesting things or advice.

Maybe you can write next articles referring to this article.

I desire to read even more things about it!

Here is my homepage - Ashlee

Great article! We will be linking to this particularly great post on our website.

Keep up the great writing.

my blog Http://Blogvietkieu.Com/

Hi! Someone in my Myspace group shared this website with us so I

came to check it out. I'm definitely enjoying the information. I'm bookmarking and will be

tweeting this to my followers! Wonderful blog and amazing design and style.

Stop by my web site ... Corporate Proxy Solicitation Services For The Underserved

Thanks in favor of sharing such a good idea,

paragraph is pleasant, thats why i have read it entirely

Feel free to surf to my weblog ... secrecy bull market

I always used to read paragraph in news papers but now as I

am a user of net therefore from now I am using net for posts, thanks

to web.

Feel free to visit my site; 로투스홀짝 -

www.lotus-safe.com,

Greetings! Very useful advice within this article!

It's the little changes that will make the biggest changes.

Many thanks for sharing!

Here is my web blog - Ruben

whoah this blog is magnificent i like reading your posts.

Keep up the good work! You recognize, a lot of persons are hunting round for this

information, you could help them greatly.

My web blog; weekly options trading strategies

It is in point of fact a nice and useful piece of info.

I'm glad that you simply shared this helpful information with us.

Please stay us up to date like this. Thanks for sharing.

Here is my web site: Blogvietkieu.com

Hello to every body, it's my first pay a quick visit of this

website; this web site contains awesome and actually good material designed for readers.

Here is my website Jerry

Good day! Would you mind if I share your blog with my myspace group?

There's a lot of people that I think would really appreciate your content.

Please let me know. Many thanks

Feel free to visit my webpage - Broadridge Proxy Solicitation companies

Thanks for finally talking about > Ajouter un commentaire

| A. Daaïf < Loved it!

Feel free to visit my page: Delores

Très bon tutoriel, comme à votre habitude.
J'ajoute à ceci qu'Angular JS dans sa version 2, et React JS font des composants web le coeur de leurs philosophies. A essayer si vous ne les avez toujours pas essayé !

Templates are simple to locate on the Net.

my weblog; bonus web design template

Why use FonePaw iphone discount dubai Data

Recovery?

CLA revelou maiores resultados em ganhos

musculares.

Μy site Quitoplan como tomar, Beulah,

I like reading an article that can make people think.

Also, thanks for permitting me to comment!

Feel free to surf to my web-site - furnace repair

I every time used to study article in news papers but

now as I am a user of internet therefore from now I am using

net for content, thanks to web.

Here is my page :: 사설토토사이트

It's very effortless to find out any topic on web as compared to books, as I found this article at this web site.

My web-site ... corporate Proxy Solicitation Fraud triangle

I like the helpful information you provide in your articles.

I will bookmark your weblog and check again here regularly.

I am quite sure I will learn many new stuff right here!

Best of luck for the next!

Look at my web blog :: What Do Proxy Solicitation Firms Do

Your mode of telling everything in this piece of writing is

really pleasant, every one can simply understand it, Thanks a lot.

Also visit my blog post: Corporate Proxy Solicitation Services For The Blind

Its such as you read my thoughts! You seem to understand

so much approximately this, such as you wrote the e book

in it or something. I think that you just could do with

some % to pressure the message house a bit, however other

than that, this is magnificent blog. A fantastic read.

I will certainly be back.

My site: Adposta Escorts

Hey there just wanted to give you a quick heads up.

The words in your post seem to be running off the screen in Internet explorer.

I'm not sure if this is a format issue or something to do with internet browser compatibility but I

figured I'd post to let you know. The design look

great though! Hope you get the issue resolved soon. Cheers

Feel free to surf to my homepage: Corporate Proxy Solicitation Job Description

What's up, just wanted to say, I liked this post. It was practical.

Keep on posting!

Here is my web blog; http://www.exploremagazine.com/__media__/js/netsoltrademark.php?d=www.zzjt.net.cn%2fcomment%2fhtml%2f%3f254888.html

You can certainly see your expertise in the article you write.

The sector hopes for more passionate writers like you who

aren't afraid to mention how they believe. At all times go after

your heart.

My blog; Broadridge proxy solicitation timeline

Attractive section of content. I just stumbled upon your web site and in accession capital to assert that I get actually enjoyed account your blog posts.

Any way I'll be subscribing to your feeds and even I achievement you access consistently quickly.

My website market Prep costs