79 lines
2.8 KiB
PHP
79 lines
2.8 KiB
PHP
<?php
|
||
ob_start();
|
||
$revMeta = $revisions[$revIndex] ?? [];
|
||
?>
|
||
|
||
<div class="d-flex align-items-center gap-3 mb-3 flex-wrap">
|
||
<a href="/edit/<?= htmlspecialchars($article['uuid']) ?>" class="btn btn-secondary btn-sm">← Retour</a>
|
||
<div>
|
||
<strong><?= htmlspecialchars($article['title']) ?></strong>
|
||
— révision #<?= (int)($revMeta['n'] ?? $revIndex + 1) ?>
|
||
<span class="text-muted small">
|
||
du <?= htmlspecialchars(date('d/m/Y H:i', strtotime((string)($revMeta['date'] ?? '')))) ?>
|
||
<?= !empty($revMeta['comment']) ? '— ' . htmlspecialchars($revMeta['comment']) : '' ?>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="d-flex gap-4 mb-2 small">
|
||
<span class="diff-del px-2 py-1 rounded">− Supprimé</span>
|
||
<span class="diff-ins px-2 py-1 rounded">+ Ajouté</span>
|
||
<span class="diff-eq px-2 py-1 rounded text-muted">= Inchangé</span>
|
||
</div>
|
||
|
||
<?php if ($diffLines === []): ?>
|
||
<div class="alert alert-success">Aucune différence — le contenu est identique.</div>
|
||
<?php else: ?>
|
||
|
||
<?php
|
||
// Groupe les lignes : affiche contexte de 3 lignes autour des changements
|
||
$CONTEXT = 3;
|
||
$total = count($diffLines);
|
||
$show = [];
|
||
for ($i = 0; $i < $total; $i++) {
|
||
if ($diffLines[$i][0] !== '=') {
|
||
for ($c = max(0, $i - $CONTEXT); $c <= min($total - 1, $i + $CONTEXT); $c++) {
|
||
$show[$c] = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
$inEllipsis = false;
|
||
?>
|
||
<div class="diff-view font-monospace small">
|
||
<?php for ($i = 0; $i < $total; $i++): ?>
|
||
<?php [$op, $line] = $diffLines[$i]; ?>
|
||
<?php if (!isset($show[$i])): ?>
|
||
<?php if (!$inEllipsis): $inEllipsis = true; ?>
|
||
<div class="diff-ellipsis text-muted px-2">⋯</div>
|
||
<?php endif;
|
||
continue; ?>
|
||
<?php else: $inEllipsis = false; endif; ?>
|
||
<?php if ($op === '!'): ?>
|
||
<div class="diff-warning text-warning px-2"><?= htmlspecialchars($line) ?></div>
|
||
<?php elseif ($op === '-'): ?>
|
||
<div class="diff-del px-2">− <?= htmlspecialchars($line) ?></div>
|
||
<?php elseif ($op === '+'): ?>
|
||
<div class="diff-ins px-2">+ <?= htmlspecialchars($line) ?></div>
|
||
<?php else: ?>
|
||
<div class="diff-eq px-2 text-muted"> <?= htmlspecialchars($line) ?></div>
|
||
<?php endif; ?>
|
||
<?php endfor; ?>
|
||
</div>
|
||
|
||
<?php endif; ?>
|
||
|
||
<style>
|
||
.diff-view { border: 1px solid var(--bs-border-color, #dee2e6); border-radius: 6px; overflow-x: auto; }
|
||
.diff-view > div { padding: 1px 8px; white-space: pre; line-height: 1.5; }
|
||
.diff-del { background: #ffeef0; color: #b91c1c; }
|
||
.diff-ins { background: #e6ffec; color: #15803d; }
|
||
.diff-eq { }
|
||
.diff-ellipsis { background: #f8f9fa; padding: 2px 8px; user-select: none; }
|
||
</style>
|
||
|
||
<?php
|
||
$content = ob_get_clean();
|
||
$title = 'Diff — ' . htmlspecialchars($article['title']);
|
||
include __DIR__ . '/layout.php';
|