Comment créer un plugin Vorlon.js pour tester votre propre JavaScript à distance

Lors du discours liminaire prononcé lors de la récente conférence // BUILD 2015, notre équipe de Microsoft a publié Vorlon.js, un outil de débogage de votre site Web..

Vorlon.js est principalement composé d’un tableau de bord qui affiche les données provenant de votre site. Pour que cela fonctionne, il vous suffit de référencer un script dans le code de votre site.

Nous (Pierre Lagarde, David Catuhe, David Rousset et moi-même) avons construit ceci principalement pour aider les développeurs web à déboguer leurs sites web appareils mobiles. Bien entendu, des solutions propriétaires existent déjà, telles que les outils de développement Chrome permettant de déboguer Chrome Mobile, l’équivalent de Safari, Visual Studio pour Internet Explorer ou même Weinre; mais aucun de ceux-ci n'est vraiment indépendant de la technologie et des plates-formes.

C’est le vide que nous voulions combler avec Vorlon.js.

Vous pouvez installer Vorlon.js à partir de npm ou en clonant le référentiel GitHub et en utilisant gulp pour le rendre prêt à être utilisé..

Vous trouverez plus d’informations à ce sujet sur notre site Web ou sur le blog écrit par mon ami David.

Pour créer un plugin pour Vorlon, vous pouvez utiliser TypeScript ou le faire directement avec JavaScript..

Je vais vous donner le code JavaScript et le code TypeScript, afin que vous puissiez le lire dans votre langue préférée!

Ce que nous allons créer

Dans cet article, j'ai choisi de créer un plugin qui obtiendra des informations sur le périphérique. Ceci est basé sur le site http://mydevice.io/ créé par Raphaël Goetter. Pour rester simple, je n’obtiendrai que les données du Tailles section de la Mon écran Catégorie.

Lorsque ce plugin est activé, le tableau de bord Vorlon.js affiche les informations de taille provenant du client..

Avant d’entrer dans les détails, regardez cette vidéo rapide qui vous montre ce que nous allons créer..

Dans cette vidéo, je fais une démonstration sur un navigateur de bureau, mais cela fonctionne évidemment aussi sur un téléphone portable ou une tablette..

1. Écrire votre code en dehors de Vorlon.js

Un plugin Vorlon.js n'est rien d'autre que du code HTML, CSS et JavaScript. Votre plugin récupère les données du client et les envoie au serveur pour les afficher sur le tableau de bord..

Cela signifie que vous pouvez d'abord le faire sans Vorlon.js, tout écrire sur un projet Web simple, puis l'inclure dans l'architecture du plugin Vorlon.js..

Notre plugin obtiendra des informations relatives à la taille du client et les affichera dans une liste HTML. Il actualisera également les données lors du redimensionnement du navigateur. Vous pouvez voir l'exemple complet courir ici (ce n'est pas joli, mais fait le travail!).

Le code HTML est assez léger:

        

Mon écran

  • CSS device-width:
  • Hauteur du périphérique CSS:
  • JS screen.width:
  • JS window.innerWidth:
  • JS body.clientWidth:
  • JS screen.availWidth:

Il utilise le fichier control.css suivant:

.deviceinfo-container font-family: "Verdana", "Comic Sans MS";  .deviceinfo-container h2 font-weight: normal;  .deviceinfo-container ul li font-weight: bold;  .deviceinfo-container ul span font-weight: normal; 

Et le code JavaScript récupère les données une fois la page chargée et chaque fois que la fenêtre est redimensionnée et met à jour la liste:

(function () var calcul = function () document.getElementById ('devicewidth'). innerText = document.documentElement.clientWidth + 'px'; document.getElementById ('deviceheight'). innerText = document.documentElement.clientHeight + 'px'; document.getElementById ('screenwidth'). innerText = screen.width + 'px' ;; document.getElementById ('windowinnerwidth'). innerText = window.innerWidth + 'px'; document.getElementById ('windowinnerwidth'). innerText = window.innerWidth + 'px'; document.getElementById ('bodyclientwidth') ) .innerText = document.body.clientWidth + 'px'; document.getElementById ('screenavailwidth'). innerText = screen.availWidth + 'px';; window.onresize = fonction (événement) compute ();; document.addEventListener ("DOMContentLoaded", calcul);) ();

Donc, jusqu’à présent, nous n’écrivons que du code Web simple et classique. Voyons maintenant comment transformer cela en un plugin Vorlon.js!

2. Création du code JavaScript / TypeScript de base pour le plugin

Dans Vorlon.js, un plugin est une classe JavaScript qui hérite de la classe Plugin. Le code minimum contient un constructeur et le getID une fonction.

JavaScript

var __extends = this .__ extend || fonction (d, b) for (var p dans b) if (b.hasOwnProperty (p)) d [p] = b [p]; fonction __ () this.constructor = d;  __. prototype = b.prototype; d.prototype = new __ (); ; var VORLON; (fonction (VORLON) var MyDeviceInfo = (fonction (_super) __extends (MyDeviceInfo, _super); fonction MyDeviceInfo () _super.call (this, "mydeviceinfo", "control.html", "control.cht"); this._ready = true; MyDeviceInfo.prototype.getID = function () return "MYDEVICEINFO";; return MyDeviceInfo;) (Plugin); VORLON.MyDeviceInfo = MyDeviceInfo; // Enregistrez le plugin avec vorlon core Core.RegisterPlugin (new MyDeviceInfo ());) (VORLON || (VORLON = )); 

Manuscrit

module VORLON classe d'exportation MyDeviceInfo étend le plugin constructor () super ("mydeviceinfo", "control.html", "control.css"); this._ready = true;  public getID (): string return "MYDEVICEINFO";  // Enregistrez le plugin avec vorlon core Core.RegisterPlugin (new MyDeviceInfo ()); 

L'ID est simplement une chaîne que vous pouvez choisir. Vous en aurez besoin lorsque vous ajouterez votre plugin au tableau de bord.

Le constructeur appelle le super fonction et lui donne son nom, les fichiers control.html et control.css. C'est une condition préalable pour qu'il connaisse ces fichiers et les charge si nécessaire.

La dernière ligne de code enregistre le plug-in dans la liste gérée par le Core. Le rôle principal est de gérer toutes les communications et tous les échanges de données entre le client et le tableau de bord..

3. Rendu sur le tableau de bord

Chaque fois qu'il charge un plug-in, le tableau de bord crée un nouvel onglet dans le volet de droite. C'est un espace de rendu pour votre plugin.

La partie mise en page d'un plugin Vorlon.js est contenue dans un fichier HTML. Dans l'exemple que nous allons créer, cela s'appelle control.html, qui est une convention dans les plugins Vorlon.js. Il n'est pas affiché par défaut, vous devez donc le gérer dans votre code de plugin. Ceci est fait en utilisant _insertHtmlContentAsync et généralement dans le startDashboardSide une fonction.

startDashboardSide est appelé lorsque le tableau de bord instancie votre plugin côté serveur. Il n'a qu'un paramètre, qui est la div HTML où vous pouvez rendre votre contrôle. Fondamentalement, c'est la div qui est affichée sur l'onglet de votre plugin.

_insertHtmlContentAsync est une aide qui charge de manière asynchrone tous les fichiers que vous avez donnés lors de la construction du plugin. Le premier argument est le rendu div, et le second est une fonction de rappel qui vous donne le div chargé une fois que tout est terminé.

JavaScript

MyDeviceInfo.prototype.startDashboardSide = function (div) if (div === void 0) div = null;  this._insertHtmlContentAsync (div, function (filledDiv) // données de charge); ;

Manuscrit

startDashboardSide public (div: HTMLDivElement = null): void this._insertHtmlContentAsync (div, (filledDiv) => // données de charge)

Dans la partie control.html, il vous suffit de supprimer la référence JavaScript, ce qui entraîne le code suivant:

       

Mon écran

  • CSS device-width:
  • Hauteur du périphérique CSS:
  • JS screen.width:
  • JS window.innerWidth:
  • JS body.clientWidth:
  • JS screen.availWidth:

4. Envoi de données du client au plugin

Ainsi, maintenant que vous rendez le modèle de contrôle dans le tableau de bord, vous devez lui envoyer les données à partir du client. Sur le code initial, cela a été fait sur la même page. Maintenant, vous devez tout emballer et l'envoyer.

Tout le processus de communication est géré pour vous. Vous devez seulement créer un objet contenant des données et appeler la fonction correcte. C'est un assistant disponible en Core.Messenger nommé sendRealTimeMessage.

dans le MyDeviceInfo classe nous ajoutons une fonction personnalisée nommée sendClientData. Il recevra toutes les informations de taille actuelle et l'enverra.

JavaScript

MyDeviceInfo.prototype.sendClientData = function () var data = "devicewidth": document.documentElement.clientWidth, "deviceheight": document.documentElement.clientHeight, "screenwidth": screen.width, "windowinnerwidth": window.innerWidth, "bodyclientwidth": document.body.clientWidth, "screenavailwidth": screen.availWidth; VORLON.Core.Messenger.sendRealtimeMessage (this.getID (), data, 0 / * Client * /); ;

Manuscrit

public sendClientData (): void var data = "devicewidth": document.documentElement.clientWidth, "deviceheight": document.documentElement.clientHeight, "screenwidth": screen.width, "windowinnerwidth": window.innerWidth, "bodyclientwidth" : document.body.clientWidth, "screenavailwidth": screen.availWidth; Core.Messenger.sendRealtimeMessage (this.getID (), data, RuntimeSide.Client); 

SendRealtimeMessage a trois paramètres obligatoires:

  • l'identifiant du plugin (qui est la chaîne que vous retournez sur le getID une fonction)
  • l'objet que vous souhaitez envoyer (contenant ici les informations de tailles)
  • le locataire d'où provient la demande (client ou tableau de bord)

Cette fonction doit être appelée chaque fois que le tableau de bord le demande (lorsque l'utilisateur bascule sur ce client, par exemple) et chaque fois que la taille du navigateur change..

Nous ajoutons le startClientSidefonction qui sera appelée à l’initialisation du client pour s’inscrire à la window.onresize un événement:

JavaScript

MyDeviceInfo.prototype.startClientSide = function () var que = ceci; window.onresize = function (event) that.sendClientData (); ; ;

Manuscrit

public startClientSide (): void var que = ceci; window.onresize = (event) => that.sendClientData (); ; 

Chaque fois que l'utilisateur modifie la taille du navigateur, ce code envoie les nouvelles informations au tableau de bord..

Et enfin, nous devons ajouter le rafraîchir une fonction. Il sera appelé à chaque fois que le tableau de bord a besoin des informations actuelles du client..

JavaScript

MyDeviceInfo.prototype.refresh = function () this.sendClientData (); ;

Manuscrit

public refresh (): void this.sendClientData (); 

Et c'est tout!

5. Affichage des données sur le tableau de bord

Maintenant que les données sont envoyées du client au tableau de bord, vous devez toujours les gérer de l'autre côté..

Pour ce faire, vous pouvez utiliser le onRealtimeMessageReceivedFromClientSide une fonction. Il est appelé chaque fois que le client envoie un message via le Core.Messenger. Il a seulement un paramètre, dans lequel vous obtenez l'objet que vous avez envoyé.

Dans cet exemple, il suffit d'utiliser chaque valeur et de définir le bon élément DOM pour mettre à jour la liste avec les nouvelles valeurs..

JavaScript

MyDeviceInfo.prototype.onRealtimeMessageReceivedFromClientSide = function (receiveObject) document.getElementById ('devicewidth'). InnerText = createdObject.devicewidth + 'px'; document.getElementById ('deviceheight'). innerText = createdObject.deviceheight + 'px'; document.getElementById ('largeur de l'écran'). innerText = createdObject.screenwidth + 'px'; ; document.getElementById ('windowinnerwidth'). innerText = receiveObject.windowinnerwidth + 'px'; document.getElementById ('bodyclientwidth'). innerText = receiveObject.bodyclientwidth + 'px'; document.getElementById ('screenavailwidth'). innerText = createdObject.screenavailwidth + 'px'; ;

Manuscrit

public onRealtimeMessageReceivedFromClientSide (receiveObject: any): void document.getElementById ('devicewidth'). innerText = createdObject.devicewidth + 'px'; document.getElementById ('deviceheight'). innerText = createdObject.deviceheight + 'px'; document.getElementById ('screenwidth'). innerText = createdObject.screenwidth + 'px' ;;; document.getElementById ('windowinnerwidth'). innerText = receiveObject.windowinnerwidth + 'px'; document.getElementById ('bodyclientwidth'). innerText = receiveObject.bodyclientwidth + 'px'; document.getElementById ('screenavailwidth'). innerText = createdObject.screenavailwidth + 'px'; 

6. Testons cela!

Pour pouvoir tester ce plugin, vous devez suivre quelques étapes simples..

Compiler et Minify

Si vous avez choisi TypeScript, vous devrez utiliser un outil tel que le compilateur TypeScript disponible sur npm, ou vous intégrer au processus gulp en modifiant le fichier gulpfile.js disponible dans le / Plugins dossier.

Une fois la compilation de TypeScript vers JavaScript terminée, vous devez minifier votre fichier JS. Il est important que vous utilisiez cette convention:

  • vorlon.yourPluginName.js (pour la version agrandie)
  • vorlon.votrePluginName.min.js (pour la version simplifiée)

Copier tout dans le serveur

La deuxième étape consiste à copier tous vos fichiers dans le répertoire. / Serveur / public / vorlon / plugins dossier. Là vous devez créer un dossier en utilisant votre nom de plugin et tout mettre dessous. Cela inclut vos fichiers HTML, CSS et JavaScript.

Voici comment cela est fait pour le plugin que nous créons dans cet article:

Ajoutez votre plugin au fichier Catalog.json

La prochaine étape consiste à enregistrer votre plugin sur le serveur. Pour ce faire, ajoutez une ligne dans le Server / public / catalog.json fichier:

"IncludeSocketIO": true, "plugins": ["id": "CONSOLE", "name": "Console interactive", "panneau": "en bas", "nomdossier": "interactiveConsole", "id ":" DOM ​​"," nom ":" Explorateur Dom "," panneau ":" haut "," nomdossier ":" domExplorer ", " id ":" MODERNIZR "," nom ":" Modernizr "," panneau ":" bas "," nomdossier ":" modernizrReport ", " id ":" OBJEXPLORER "," nom ":" Obj. Explorer "," panneau ":" haut "," nomdossier ":" objectExplorer " , "id": "MYDEVICEINFO", "nom": "Informations sur mon périphérique", "panneau": "haut", "nom de pliage": "mydeviceinfo"]

Vous pouvez trouver plus d'informations à ce sujet dans la documentation de Vorlon.js.

Démarrer le serveur

Ouvrez une ligne de commande sur le /Serveur dossier et exécutez la commande suivante:

noeud serveur.js

Lancer un client

Enfin, lancez un client référençant votre instance locale Vorlon.js. Vous pouvez utiliser l'exemple fourni dans la / Plugins / samples dossier.

Parcourez le tableau de bord à l'aide de http: // localhost: 1337 / dashboard / default.

Et… rock'n'roll!

Vous pouvez essayer de changer la taille du navigateur dans lequel vous affichez votre code client et vous le verrez changer en direct sur le tableau de bord..

Facile, n'est-ce pas?

Que faire maintenant?

J'espère illustrer à quel point il est facile de créer un plugin. Vous devez vraiment vous en approcher comme écrire du code Web classique et le diviser en deux parties:

  • celui qui collecte des données sur le client
  • celui qui l'affiche sur le tableau de bord

Vorlon.js n'est pas seulement notre projet, il vous appartient également. Je suis à peu près sûr que vous aurez beaucoup d’idées de plugins, et nous serons heureux de les intégrer au projet..

N'hésitez pas à fourcher https://github.com/MicrosoftDX/Vorlonjs et à nous envoyer des demandes de tirage avec vos créations!

Vous pouvez trouver l'échantillon complet sur GitHub.

Si vous avez des questions sur cet article ou sur Vorlon.js, n'hésitez pas à me contacter sur Twitter..

Plus de pratique avec JavaScript

Microsoft propose un grand nombre d’apprentissage gratuit sur de nombreuses rubriques JavaScript open-source et nous avons pour mission de créer beaucoup plus avec Microsoft Edge. En voici quelques unes à consulter:

  • Microsoft Edge Web Summit 2015 (une série complète de ce à quoi s'attendre avec le nouveau navigateur, les nouvelles fonctionnalités de la plate-forme Web et les conférenciers invités de la communauté)
  • Best of // BUILD / et Windows 10 (y compris le nouveau moteur JavaScript pour les sites et les applications)
  • Faire progresser JavaScript sans rompre le Web (discours prononcé récemment par Christian Heilmann)
  • Applications Web hébergées et innovations de plate-forme Web (une analyse approfondie de sujets tels que manifold.JS)
  • Conseils pratiques sur les performances pour rendre votre code HTML / JavaScript plus rapide (une série en sept parties allant de la conception réactive aux jeux occasionnels en passant par l'optimisation des performances)
  • Le démarrage rapide de la plate-forme Web moderne (principes de base de HTML, CSS et JavaScript)

Et quelques outils gratuits pour commencer: Code Visual Studio, Azure Trial et outils de test inter-navigateurs, tous disponibles pour Mac, Linux ou Windows.. 

Cet article fait partie de la série Web de développement Web de Microsoft. Nous sommes ravis de partager Microsoft Edge et le nouveau Moteur de rendu EdgeHTML avec toi. Obtenez des machines virtuelles gratuites ou testez à distance sur votre appareil Mac, iOS, Android ou Windows @ http://dev.modern.ie/.