diff --git a/Sdl.Web.DXAResolver/Resolver.cs b/Sdl.Web.DXAResolver/Resolver.cs index cc0fc4d..f601d10 100644 --- a/Sdl.Web.DXAResolver/Resolver.cs +++ b/Sdl.Web.DXAResolver/Resolver.cs @@ -169,7 +169,14 @@ private List ResolveItem(IdentifiableObject item, if (!ContinueRecursion(depth + 1)) break; if (toProcess.Contains(linkedComponent)) continue; components.Add(linkedComponent); - depths.Add(linkedComponent, depth + 1); + if (depths.ContainsKey(linkedComponent)) + { + depths[linkedComponent] = depth + 1; + } + else + { + depths.Add(linkedComponent, depth + 1); + } } } toResolve.AddRange(toProcess.Select( diff --git a/Sdl.Web.Tridion.Templates.R2/Data/DataModelBuilder.cs b/Sdl.Web.Tridion.Templates.R2/Data/DataModelBuilder.cs index cfc373f..932faae 100644 --- a/Sdl.Web.Tridion.Templates.R2/Data/DataModelBuilder.cs +++ b/Sdl.Web.Tridion.Templates.R2/Data/DataModelBuilder.cs @@ -154,17 +154,38 @@ private static object GetTypedFieldValue(List fieldValues) return GetTypedArrayOfValues(fieldValues); } - + private static object GetTypedArrayOfValues(List fieldValues) { - Array typedArray = Array.CreateInstance(fieldValues[0].GetType(), fieldValues.Count); - int i = 0; - foreach (T fieldValue in fieldValues) + List strings = fieldValues.OfType().Select(v => v).ToList(); + List richTextDatas = fieldValues.OfType().Select(v => v).ToList(); + if (richTextDatas.Count == fieldValues.Count) return richTextDatas; + if (richTextDatas.Count + strings.Count == fieldValues.Count) + { + RichTextData[] richTextData = new RichTextData[fieldValues.Count]; + for (int i = 0; i < fieldValues.Count; i++) + { + if (fieldValues[i] is RichTextData) + { + richTextData.SetValue(fieldValues[i], i); + } + else if (fieldValues[i] is string) + { + richTextData.SetValue(new RichTextData { Fragments = new List { fieldValues[i] } }, i); + } + } + return richTextData; + } + else { - typedArray.SetValue(fieldValue, i++); + Array typedArray = Array.CreateInstance(fieldValues[0].GetType(), fieldValues.Count); + int i = 0; + foreach (T fieldValue in fieldValues) + { + typedArray.SetValue(fieldValue, i++); + } + return typedArray; } - - return typedArray; } private object GetFieldValue(XmlElement xmlElement, int expandLinkDepth) diff --git a/Sdl.Web.Tridion.Templates.R2/Data/DefaultModelBuilder.cs b/Sdl.Web.Tridion.Templates.R2/Data/DefaultModelBuilder.cs index 1bb2bf5..acbcb3a 100644 --- a/Sdl.Web.Tridion.Templates.R2/Data/DefaultModelBuilder.cs +++ b/Sdl.Web.Tridion.Templates.R2/Data/DefaultModelBuilder.cs @@ -92,6 +92,7 @@ public void BuildPageModel(ref PageModelData pageModelData, Page page) Regions = regionModels.Values.ToList(), Metadata = pageModelMetadata, MvcData = GetPageMvcData(pt), + HtmlClasses = GetHtmlClasses(pt), XpmMetadata = GetXpmMetadata(page) }; } @@ -232,13 +233,12 @@ public void BuildKeywordModel(ref KeywordModelData keywordModelData, Keyword key }; } - private static string GetHtmlClasses(ComponentTemplate ct) + private static string GetHtmlClasses(Template t) { - IEnumerable htmlClasses = ct?.Metadata?.GetTextFieldValues("htmlClasses"); + IEnumerable htmlClasses = t?.Metadata?.GetTextFieldValues("htmlClasses"); return (htmlClasses == null) ? null : string.Join(" ", htmlClasses); } - private void AddPredefinedRegions(IDictionary regionModels, PageTemplate pageTemplate) { IEnumerable regionsMetadata = pageTemplate.Metadata.GetEmbeddedFieldValues("regions");