From a39d1eb4921a2e23e500b1e371ab19a18029abf5 Mon Sep 17 00:00:00 2001 From: Daniel Stolt Date: Sat, 19 Jul 2014 23:32:51 +0200 Subject: [PATCH] #191 Fixed handling of added nodes in diffgram analysis. --- .../Providers/Content/DiffGramAnalyzer.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/DiffGramAnalyzer.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/DiffGramAnalyzer.cs index 5eb08b657..bd22deaa9 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/DiffGramAnalyzer.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/DiffGramAnalyzer.cs @@ -61,6 +61,7 @@ namespace Orchard.AuditTrail.Providers.Content { }; } else { + var elementName = currentElement.Name.ToString(); var originalContent = currentElement.Value; var currentContent = reader.ReadElementContentAsString(); @@ -69,16 +70,26 @@ namespace Orchard.AuditTrail.Providers.Content { yield return new DiffNode { Type = DiffType.Change, - Context = currentElement.Name.ToString(), + Context = BuildContextName(stack, elementName), Previous = originalContent, Current = currentContent }; } break; case "add": + string nodeName = reader.GetAttribute("name"); + string addedContent = null; reader.Read(); - var addedElementContent = reader.ReadElementContentAsString(); - yield return new DiffNode { Type = DiffType.Addition, Context = reader.Name, Current = addedElementContent }; + if (reader.NodeType != XmlNodeType.EndElement) { + nodeName = reader.Name; + addedContent = reader.ReadElementContentAsString(); + } + yield return + new DiffNode { + Type = DiffType.Addition, + Context = BuildContextName(stack, nodeName), + Current = addedContent + }; break; } } @@ -93,8 +104,8 @@ namespace Orchard.AuditTrail.Providers.Content { } } - private string BuildContextName(IEnumerable stack, string attributeName) { - return String.Join("/", stack.Reverse().Skip(1).Select(x => x.Name)) + "/" + attributeName; + private string BuildContextName(IEnumerable stack, string nodeName) { + return String.Format("{0}/{1}", String.Join("/", stack.Reverse().Skip(1).Select(x => x.Name)), nodeName); } } } \ No newline at end of file