Markdown richtext system steps
Thème :
Junior
1 vues ·3/5 leçons

Étape 3 : Coloration et Labels de Langue

Cette étape est le cœur visuel de l’implémentation. Elle permet de transformer un bloc de code brut en un composant stylisé avec le nom du langage et un bouton de copie.

1. Extension Torchlight

Créez app/Markdown/Extensions/TorchlightExtension.php pour étendre BaseExtension :

namespace App\Markdown\Extensions;

use App\Markdown\BaseExtension;
use League\CommonMark\Environment\EnvironmentBuilderInterface;
use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode;

class TorchlightExtension extends BaseExtension
{
    // C'est ici que nous définissons le rendu HTML personnalisé
    protected function renderCodeBlock($content, $language, $id)
    {
        $label = strtoupper($language ?: 'code');

        return "
        <div class='code-block-wrapper group'>
            <div class='code-block-header'>
                <span class='code-lang'>{$label}</span>
                <button class='copy-button' onclick='copyToClipboard(this)'>
                    <svg>...</svg> <!-- Icône de copie -->
                </button>
            </div>
            <pre><code>{$content}</code></pre>
        </div>";
    }
}

2. Configuration du Thème GitHub Dark

Dans config/torchlight.php, assurez-vous d’activer les fonctionnalités premium :

'theme' => 'github-dark',

// Activation des numéros de ligne (optionnel)
'line_numbers' => true,

3. Le Script de Copie

Ajoutez ce petit script Alpine.js ou Vanilla JS à votre mise en page globale (app.blade.php) pour faire fonctionner le bouton de copie :

function copyToClipboard(button) {
    const wrapper = button.closest('.code-block-wrapper');
    const code = wrapper.querySelector('pre').innerText;

    navigator.clipboard.writeText(code).then(() => {
        // Feedback visuel de copie
        button.classList.add('copied');
        setTimeout(() => button.classList.remove('copied'), 2000);
    });
}

Prochaine Étape

Dans l’étape suivante, nous allons mettre en place l’UI minimaliste pour les likes, les commentaires et le partage social.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur Étape 3 : Coloration et Labels de Langue. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.