Closed FelixCCWork closed 5 months ago
@using DotNetElements.Core.StringDiff @if (Diff?.OldText.HasDifferences is true || Diff?.NewText.HasDifferences is true) { <table cellpadding="0" cellspacing="0"> @foreach ((DiffPiece oldPiece, DiffPiece newPiece) in Diff.OldText.Lines.Zip(Diff.NewText.Lines)) { <tr style="@(oldPiece.Type is ChangeType.Unchanged ? "" : "background-color: #FDF2D0;")"> <td> @(oldPiece.Position?.ToString() ?? newPiece.Position?.ToString() ?? ""); </td> <td style="padding-left: 16px;"> @if (oldPiece.Type is ChangeType.Unchanged) { <span style="@GetDiffStyle(oldPiece)"> @oldPiece.Text </span> } else { @if (oldPiece.SubPieces.Count > 0) { @foreach (DiffPiece oldSubPiece in oldPiece.SubPieces) { <span style="@GetDiffStyle(oldSubPiece)"> @oldSubPiece.Text </span> } } else { <span style="@GetDiffStyle(oldPiece)"> @oldPiece.Text </span> } } </td> </tr> @if (newPiece.Type is not ChangeType.Unchanged) { <tr style="background-color: #DDEEDD"> <td> @(newPiece.Position?.ToString() ?? ""); </td> <td style="padding-left: 16px;"> @if (newPiece.SubPieces.Count > 0) { @foreach (DiffPiece newSubPiece in newPiece.SubPieces) { <span style="@GetDiffStyle(newSubPiece)"> @newSubPiece.Text </span> } } else { <span style="@GetDiffStyle(newPiece)"> @newPiece.Text </span> } </td> </tr> } } </table> } else { <span>No differences found</span> } @code { [Parameter, EditorRequired] public SideBySideDiffModel Diff { get; set; } = default!; // todo tmp private string GetDiffStyle(DiffPiece diffLine) { return diffLine.Type switch { ChangeType.Unchanged => "", ChangeType.Deleted => "background-color: #FFB6BA; border-radius: 10%; line-height: 1.5rem; padding: 1px 2px;", ChangeType.Inserted => "background-color: #97F295; border-radius: 10%; line-height: 1.5rem; padding: 1px 2px;", ChangeType.Imaginary => "background-color: #F8FAFD; border-radius: 10%; line-height: 1.5rem; padding: 1px 2px;", ChangeType.Modified => "background-color: #FFB6BA; border-radius: 10%; line-height: 1.5rem; padding: 1px 2px;", _ => throw new NotImplementedException(nameof(diffLine.Type)), }; } }
Implemented