Formation PUB030 : Laravel, 2019 Les paquets Laravel

10.2 Paquet andreasindal/laravel-markdown : pour convertir les balises Markdown (wiki) en HTML


Le langage Markdown est intéressant pour faciliter la mise en forme de texte. Il a l'avantage d'être léger donc plus facile à manipuler par des personnes qui ne sont pas familières avec le HTML.

J'aime l'utiliser, par exemple, sur un site pour lequel plusieurs usagers doivent entrer du texte formatté. Si j'utilisais un éditeur wysiwyg pour permettre aux usagers de formatter le texte avec du HTML, j'aurais assurément plusieurs appels pour les aider à parvenir à leurs fins puisque tôt ou tard, il faudra ouvrir le code HTML pour remettre le tout en forme.

Avec Markdown, il y a moins de problèmes potentiels puisque les possibilités sont limitées à ce que l'usager aura à utiliser. 

Utilisation côté serveur

Le paquet andreasindal/laravel-markdown est un enrobage alentour du fameux Showdown, un outil qui permet de convertir les balises Markdown en balises HTML.

Pour l'installer :

Console Vagrant SSH

composer require andreasindal/laravel-markdown

Cette instruction installera le paquet showdownjs/showdown dans le dossier vendor de votre projet, ajoutera la référence nécessaire dans le fichier composer.json puis ajoutera les instructions nécessaires pour qu'une nouvelle directive Blade soit disponible.

Vous aurez désormais accès à une nouvelle directive Blade :

Blade

<div id="instructions">

    @markdown($appareil->instructions)

</div>

Si le champ instructions contient le texte suivant :

Langage Markdown

# Instructions

* Étape 1
* Étape 2
+ Étape 2.1
+ Étape 2.2
* Étape 3

Voici le code HTML qui sera généré :

HTML

<h3>Instructions</h3>

<ul>

<li>Étape 1</li>

<li>Étape 2

    <ul>

        <li>Étape 2.1</li>

        <li>Étape 2.2</li>

    </ul>

</li>

<li>Étape 3</li>

Pour une démonstration des balises Markdown gérées par Showdown : http://demo.showdownjs.com/.

Utilisation côté client

Il est également possible d'utiliser Showdown côté client à l'aide d'une instruction JavaScript.

Vous aurez besoin pour celà d'installer le paquet showdownjs/twitter-extension :

Console Vagrant SSH

npm install showdown-twitter

Puisque les deux installations que vous avez faites (Showdown et Twitter extension for Showdown) ont installé des fichiers dans le dossier node_modules de votre projet (disponible seulement côté serveur), vous devez copier certains fichiers ailleurs pour les rendre disponibles côté client.

Les fichiers à copier sont les suivants :

  • monprojet/node_modules/showdown/dist/showdown.js
  • monprojet/node_modules/showdown-twitter/src/showdown-twitter.js

Ces fichiers seront copiés :

  • Si vous travaillez avec Laravel-Mix, dans le dossier qui contient les fichiers JavaScript utilisés par votre site (ex : monprojet/resources/js)
    ou
  • Si vous ne travaillez pas avec Laravel-Mix, dans le dossier public ou dans un de ses sous-dossiers (ex : monprojet/public/js).

Intégrez ces fichiers à votre projet :

  • avec Laravel-Mix, ajout dans le fichier webpack.mix.js
    ou
  • sans Laravel-Mix, ajout de balises <script> dans les fichiers Blade concernés)

Prenons l'exemple d'un fichier Blade qui affiche une médiagraphie formattée avec du Markdown :

Blade

<div id="instuctions">

    {{ $appareil->instructions }}

</div>

La conversion du Markdown en HTML se fera comme suit :

JavaScript

$(function() {

    var converter = new showdown.Converter({ extensions: ['twitter'] });

    var conversion = converter.makeHtml($('#instructions').html());

    $('#instructions').html(conversion);

});

Il est également possible de traiter d'un coup toutes les balises Markdown.

Pour y arriver, commencez par marquer les balises qui contiennent du code Markdown. Par exemple, entourez-les par une division dont la classe est "markdown".

 Ex :

Blade

<div id="instructions" class="markdown">

    {{ $appareil->instructions }}

</div>

Une petite boucle permettra de tout convertir d'un coup :

JavaScript

$(function() {

    var converter = new showdown.Converter({ extensions: ['twitter'] });

 

    $('.markdown').each(function() {       

        var conversion = converter.makeHtml($(this).html());

        $(this).html(conversion);

    });

});

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre