juanrube/textdiff

Laravel package for text diff highlighting using jfcherng/php-diff

0.21.4 2025-05-28 11:55 UTC

This package is auto-updated.

Last update: 2025-05-28 13:50:29 UTC


README

Una librería Laravel para comparar textos y mostrar diferencias visuales en HTML, basada en jfcherng/php-diff.

Instalación

Requiere PHP 8.1+ y Laravel 10+.

Instalar con Composer:

composer require juanrube/textdiff

Para Laravel menor a 9 utilizar la versión especifica

composer require juanrube/textdiff:"1.x-dev"

Publicar los recursos (configuración, CSS, vistas):

php artisan vendor:publish --tag=text-diff

Esto publica:

  • config/textdiff.php (archivo de configuración)
  • public/vendor/textdiff/textdiff.css (estilos CSS)
  • resources/views/vendor/textdiff/components/diff.blade.php (vistas)

Configuración (opcional)

return [
    // renderer class name:
    'rendererName' => [
        'Combined',
        'Context',
        'Inline',
        'JsonHtml',
        'JsonText',
        'SideBySide',
        'Unified',
    ],

    // the Diff class options
    'differOptions' => [
        // show how many neighbor lines
        // Differ::CONTEXT_ALL can be used to show the whole file
        'context' => 3,
        // ignore case difference
        'ignoreCase' => false,
        // ignore line ending difference
        'ignoreLineEnding' => false,
        // ignore whitespace difference
        'ignoreWhitespace' => false,
        //
        //
    ],
];

Carga automática de estilos CSS El paquete inyecta automáticamente los estilos necesarios mediante un View Composer global. Solo usa {!! $textdiff !!} en cualquier plantilla Blade:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Diff Example</title>
    {!! $textdiff !!}
</head>
<body>
    <x-text-diff :old-text="$oldText" :new-text="$newText" :title="$titulo">
        
        <!-- O incluso puedes usar el slot en lugar de $titulo -->
    
    <x-text-diff :old-text="$oldText" :new-text="$newText"
        <x-slot name="title">Mi título personalizado</x-slot>
    </x-text-diff>
</body>
</html>

Uso del Componente Blade

    <x-text-diff :old-text="$oldText" :new-text="$newText" :title="$titulo">
        
        <!-- O -->
    
    <x-text-diff :old-text="$oldText" :new-text="$newText"
        <x-slot name="title">Mi título personalizado</x-slot>
    </x-text-diff>
  • old-text: Texto original.
  • new-text: Texto modificado.

Uso del Facade

use Juanrube\TextDiff\Facades\TextDiff;

// Generar diff HTML
$html = TextDiff::generateDiff($oldText, $newText);

// Obtener el tag de estilos
$cssLink = TextDiff::styleTag();

Ejemplos renderizado

Hola mundo<ins>!</ins><br>
Esta es una prueba <del></del><ins>editada</ins><br>
Otra línea <ins>nueva</ins>