Error executing template "Designs/Swift/Paragraph/Swift_ArticleHeader.cshtml" System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted. at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity() at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value) at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value) at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations) at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument() at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source) at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document) at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument) at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document) at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context) at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context) at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context) at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType) at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 3 @{ 4 var pageItem = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page).Item; 5 var parms = new Dictionary<string, object>(); 6 parms.Add("cssClass", "h-100 w-100"); 7 parms.Add("columns", Model.GridRowColumnCount); 8 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 9 string layout = Model.Item.GetRawValueString("Layout", "CardCenterBottom"); 10 bool hideCoverImage = Model.Item?.GetBoolean("HideCoverImage") ?? false; 11 bool hideTitle = Model.Item?.GetBoolean("HideTitle") ?? false; 12 bool hideSummary = Model.Item?.GetBoolean("HideSummary") ?? false; 13 bool hidePublishedDate = Model.Item?.GetBoolean("HidePublishedDate") ?? false; 14 bool hideAuthor = Model.Item?.GetBoolean("HideAuthor") ?? false; 15 var pageTitle = !string.IsNullOrEmpty(pageItem.GetString("Title")) && !hideTitle ? pageItem.GetString("Title") : string.Empty; 16 var pageSummary = !string.IsNullOrEmpty(pageItem.GetString("Summary")) && !hideSummary ? pageItem.GetString("Summary") : string.Empty; 17 var pageCoverImage = pageItem.GetFile("CoverImage") is object && !hideCoverImage ? pageItem.GetFile("CoverImage") : null; 18 var pageAuthor = pageItem?.GetUsers("Author")?.FirstOrDefault() ?? null; 19 var pagePublishedDate = !string.IsNullOrEmpty(pageItem.GetString("PublishedDate")) && !hidePublishedDate ? pageItem.GetDateTime("PublishedDate").ToShortDateString() : string.Empty; 20 var pagePublishedDateDatetime = !string.IsNullOrEmpty(pagePublishedDate) ? pageItem.GetDateTime("PublishedDate").ToString("yyyy-MM-dd") : string.Empty; 21 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h3"); 22 string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); 23 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 24 string authorImagePath = pageAuthor is object && pageAuthor?.Image is object ? $"/Admin/Public/GetImage.ashx?image={pageAuthor?.Image}&width=48&height=48&Crop=0&format=webp" : string.Empty; 25 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 26 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} m-0\" itemprop=\"headline\">"; 27 string headingLevelStop = $"</{headingLevel}>"; 28 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 29 string order = layout == "InfoTopAlignedLeftImageBottom" || layout == "InfoTopAlignedCenterImageBottom" ? " order-first" : string.Empty; 30 string textAlignment = layout == "InfoTopAlignedCenterImageBottom" ? " text-center" : string.Empty; 31 string wrapperAlignment = layout == "InfoTopAlignedCenterImageBottom" || layout == "InfoCardAboveImageAlignedBottom" ? " justify-content-center" : string.Empty; 32 string infoCardBackground = string.IsNullOrEmpty(theme) ? "background-color:var(--swift-background-color); " : string.Empty; 33 34 switch (contentPadding){ 35 case "none": 36 contentPadding = string.Empty; 37 break; 38 case "small": 39 contentPadding = " p-3"; 40 break; 41 case "large": 42 contentPadding = " p-5"; 43 break; 44 } 45 } 46 47 @switch(layout){ 48 case "InfoAboveImageAlignedCenter": 49 if ((pageCoverImage != null || !string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary)) || (pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate))) 50 { 51 <div class="item_@(Model.Item.SystemName.ToLower())"> 52 @{ 53 if (pageCoverImage != null || !string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary)){ 54 <div class="position-relative@(theme)" style="aspect-ratio: 32/9"> 55 @if (pageCoverImage != null){ 56 <div style="aspect-ratio: 32/9"> 57 @RenderPartial("Components/Image.cshtml", pageCoverImage ?? new Dynamicweb.Frontend.FileViewModel(), parms) 58 </div> 59 } 60 @if (!string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary)) 61 { 62 <div class="container-xl d-flex flex-column gap-3 align-items-center justify-content-center text-center position-absolute top-0 bottom-0 end-0 start-0@(contentPadding)"> 63 @if (!string.IsNullOrEmpty(pageTitle)) 64 { 65 @headingLevelStart 66 @pageTitle 67 @headingLevelStop 68 } 69 @if (!string.IsNullOrEmpty(pageSummary)) 70 { 71 <h5 class="@subtitleFontSize m-0">@pageSummary</h5> 72 } 73 </div> 74 } 75 </div> 76 } 77 if (pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)){ 78 <div class="d-flex align-items-center justify-content-center gap-3@(theme)@(contentPadding)"> 79 @if (pageAuthor != null && !hideAuthor) 80 { 81 <div class="d-flex align-items-center gap-3"> 82 @if (pageAuthor != null && !hideAuthor) 83 { 84 <div class="d-flex align-items-center gap-2"> 85 @if (!string.IsNullOrEmpty(pageAuthor.Image)) 86 { 87 <img class="img-fluid rounded-circle" src="@authorImagePath" loading="lazy" width="32" height="32"> 88 } 89 else 90 { 91 <div class="rounded-circle icon-1 p-2" style="background-color: var(--swift-foreground-color);color:var(--swift-background-color)"> 92 @ReadFile(iconPath + "user.svg") 93 </div> 94 } 95 @if (!string.IsNullOrEmpty(pageAuthor.Name)) 96 { 97 <div class="fs-7 opacity-85" itemprop="author">@pageAuthor.Name</div> 98 } 99 </div> 100 } 101 @if (!string.IsNullOrEmpty(pagePublishedDate)) 102 { 103 <time class="fs-7 opacity-85" datetime="@pagePublishedDateDatetime" itemprop="datePublished">@pagePublishedDate</time> 104 } 105 </div> 106 } 107 </div> 108 } 109 } 110 </div> 111 } 112 break; 113 case "InfoCardAboveImageAlignedBottom": 114 if (pageCoverImage != null || (!string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary) || pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate))) 115 { 116 <div class="item_@(Model.Item.SystemName.ToLower())"> 117 @{ 118 if (pageCoverImage != null) 119 { 120 <div class="mb-n5" style="aspect-ratio: 32/9"> 121 @{ @RenderPartial("Components/Image.cshtml", pageCoverImage ?? new Dynamicweb.Frontend.FileViewModel(), parms) } 122 </div> 123 } 124 if (!string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary) || pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)){ 125 <div class="position-relative d-flex flex-column align-items-center mx-3"> 126 <div class="d-flex flex-column gap-3 shadow text-center w-100@(theme)" style="@(infoCardBackground)max-width:40rem;"> 127 @if (!string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary) || pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)) 128 { 129 <div class="grid grid-1@(textAlignment)@(contentPadding)"> 130 @if (!string.IsNullOrEmpty(pageTitle)) 131 { 132 @headingLevelStart 133 @pageTitle 134 @headingLevelStop 135 } 136 @if (!string.IsNullOrEmpty(pageSummary)) 137 { 138 <h5 class="@subtitleFontSize m-0">@pageSummary</h5> 139 } 140 @if (pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)) 141 { 142 <div class="d-flex align-items-center gap-3@(wrapperAlignment)"> 143 @if (pageAuthor != null && !hideAuthor) 144 { 145 <div class="d-flex align-items-center gap-2"> 146 @if (!string.IsNullOrEmpty(pageAuthor.Image)) 147 { 148 <img class="img-fluid rounded-circle" src="@authorImagePath" loading="lazy" width="32" height="32"> 149 } 150 else 151 { 152 <div class="rounded-circle icon-1 p-2" style="background-color: var(--swift-foreground-color);color:var(--swift-background-color)"> 153 @ReadFile(iconPath + "user.svg") 154 </div> 155 } 156 @if (!string.IsNullOrEmpty(pageAuthor.Name)) 157 { 158 <div class="fs-7 opacity-85" itemprop="author">@pageAuthor.Name</div> 159 } 160 </div> 161 } 162 @if (!string.IsNullOrEmpty(pagePublishedDate)) 163 { 164 <time class="fs-7 opacity-85" datetime="@pagePublishedDateDatetime" itemprop="datePublished">@pagePublishedDate</time> 165 } 166 </div> 167 } 168 </div> 169 } 170 </div> 171 </div> 172 } 173 } 174 </div> 175 } 176 break; 177 case "InfoBottomAlignedLeftImageTop": 178 case "InfoTopAlignedLeftImageBottom": 179 case "InfoTopAlignedCenterImageBottom": 180 if (pageCoverImage != null && !hideCoverImage || !string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary) || pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)){ 181 <div class="grid grid-1 gap-0@(theme) item_@(Model.Item.SystemName.ToLower())"> 182 @if (pageCoverImage != null) 183 { 184 <div style="aspect-ratio: 32/9"> 185 @{ @RenderPartial("Components/Image.cshtml", pageCoverImage ?? new Dynamicweb.Frontend.FileViewModel(), parms) } 186 </div> 187 } 188 @if (!string.IsNullOrEmpty(pageTitle) || !string.IsNullOrEmpty(pageSummary) || pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)) 189 { 190 <div class="grid grid-1@(order)@(textAlignment)@(contentPadding)"> 191 @if (!string.IsNullOrEmpty(pageTitle)) 192 { 193 @headingLevelStart 194 @pageTitle 195 @headingLevelStop 196 } 197 @if (!string.IsNullOrEmpty(pageSummary)) 198 { 199 <h5 class="@subtitleFontSize m-0">@pageSummary</h5> 200 } 201 @if (pageAuthor != null && !hideAuthor || !string.IsNullOrEmpty(pagePublishedDate)) 202 { 203 <div class="d-flex align-items-center gap-3@(wrapperAlignment)"> 204 @if (pageAuthor != null && !hideAuthor) 205 { 206 <div class="d-flex align-items-center gap-2"> 207 @if (!string.IsNullOrEmpty(pageAuthor.Image)) 208 { 209 <img class="img-fluid rounded-circle" src="@authorImagePath" loading="lazy" width="32" height="32"> 210 } 211 else 212 { 213 <div class="rounded-circle icon-1 p-2" style="background-color: var(--swift-foreground-color);color:var(--swift-background-color)"> 214 @ReadFile(iconPath + "user.svg") 215 </div> 216 } 217 @if (!string.IsNullOrEmpty(pageAuthor.Name)) 218 { 219 <div class="fs-7 opacity-85" itemprop="author">@pageAuthor.Name</div> 220 } 221 </div> 222 } 223 @if (!string.IsNullOrEmpty(pagePublishedDate)) 224 { 225 <time class="fs-7 opacity-85" datetime="@pagePublishedDateDatetime" itemprop="datePublished">@pagePublishedDate</time> 226 } 227 </div> 228 } 229 </div> 230 } 231 </div> 232 } 233 break; 234 } 235 236 237 @if (Pageview.IsVisualEditorMode && hideCoverImage && hideTitle && hideSummary && hideAuthor && hidePublishedDate) { 238 <div class="alert alert-info mt-3" role="alert"> 239 <span>@Translate("Article header: Edit this column to configure")</span> 240 </div> 241 } 242
Error executing template "Designs/Swift/Paragraph/Swift_Text.cshtml" System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted. at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity() at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value) at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value) at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations) at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument() at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source) at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document) at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument) at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document) at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context) at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context) at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context) at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType) at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @functions 4 { 5 private string RenderCustomCSS(IEnumerable<string> decorations) 6 { 7 var cssClasses = new List<string>(); 8 9 foreach (var itemId in decorations) 10 { 11 var item = Dynamicweb.Content.Services.Items.GetItem("Swift_Css", itemId); 12 item.TryGetValue("Class", out object classes); 13 14 if (classes is null) 15 { 16 continue; 17 } 18 19 var cssString = (string)classes; 20 21 if (cssString.StartsWith("[")) 22 { 23 var cssArray = Dynamicweb.Core.Converter.Deserialize<string[]>(cssString); 24 cssClasses.AddRange(cssArray); 25 } 26 else 27 { 28 cssClasses.Add(cssString.Replace(",", " ")); 29 } 30 } 31 32 return string.Join(" ", cssClasses).Trim(); 33 } 34 } 35 36 @{ 37 string layout = Model.Item.GetRawValueString("Layout", "text-start"); 38 layout = layout == "alignLeft" ? "align-items-start text-start" : layout; 39 layout = layout == "alignCenter" ? "align-items-center text-center" : layout; 40 layout = layout == "alignRight" ? "align-items-end text-end" : layout; 41 layout = layout == "alignLeftMiddle" ? "align-items-start text-start justify-content-center" : layout; 42 43 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 44 contentPadding = contentPadding == "none" ? "p-0" : contentPadding; 45 contentPadding = contentPadding == "small" ? "p-3 p-md-3" : contentPadding; 46 contentPadding = contentPadding == "large" ? "p-5 p-md-5" : contentPadding; 47 48 //Backward compatibility (Vertical align) 49 string verticalAlign = string.Empty; 50 if (!string.IsNullOrEmpty(Model.Item.GetString("verticalAlign"))) 51 { 52 verticalAlign = verticalAlign == "vertical-align-top" ? "justify-content-start" : verticalAlign; 53 verticalAlign = verticalAlign == "vertical-align-center" ? "justify-content-center" : verticalAlign; 54 verticalAlign = verticalAlign == "vertical-align-bottom" ? "justify-content-end" : verticalAlign; 55 } 56 57 string maxWidth = Model.Item.GetRawValueString("TextReadability", "max-width-on"); 58 maxWidth = maxWidth == "max-width-on" ? " mw-75ch" : maxWidth; 59 maxWidth = maxWidth == "max-width-off" ? string.Empty : maxWidth; 60 61 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 62 var decorations = Model.Item?.GetList("CssDecorations")?.GetRawValue().OfType<string>() ?? Enumerable.Empty<string>(); 63 string css = RenderCustomCSS(decorations); 64 65 Dynamicweb.Frontend.LinkViewModel link1 = new Dynamicweb.Frontend.LinkViewModel(); 66 Dynamicweb.Frontend.LinkViewModel link2 = new Dynamicweb.Frontend.LinkViewModel(); 67 68 string linkType1 = Model.Item.GetRawValueString("LinkType", "page"); 69 string linkType2 = Model.Item.GetRawValueString("LinkType2", "page2"); 70 71 if (linkType1 == "page" && Model.Item.GetLink("ButtonLink") != null) 72 { 73 link1 = Model.Item.GetLink("ButtonLink"); 74 } 75 76 if (linkType2 == "page2" && Model.Item.GetLink("ButtonLink2") != null) 77 { 78 link2 = Model.Item.GetLink("ButtonLink2"); 79 } 80 81 if (linkType1 == "product-group") 82 { 83 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink"); 84 IList<string> groupIds = new List<string> { }; 85 86 if (selectedGroups != null) 87 { 88 foreach (var fromGroup in selectedGroups) 89 { 90 groupIds.Add(fromGroup.Id); 91 } 92 } 93 94 link1 = new Dynamicweb.Frontend.LinkViewModel() 95 { 96 Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&GroupID=" + string.Join(",", groupIds) 97 }; 98 } 99 100 if (linkType2 == "product-group2") 101 { 102 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink2"); 103 IList<string> groupIds = new List<string> { }; 104 105 if (selectedGroups != null) 106 { 107 foreach (var fromGroup in selectedGroups) 108 { 109 groupIds.Add(fromGroup.Id); 110 } 111 } 112 113 link2 = new Dynamicweb.Frontend.LinkViewModel() 114 { 115 Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&GroupID=" + string.Join(",", groupIds).Trim(), 116 IsExternal = false 117 }; 118 } 119 120 if (linkType1 == "product") 121 { 122 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink"); 123 IList<string> productIds = new List<string> { }; 124 125 if (products != null && products.Products.Any()) 126 { 127 foreach (var product in products.Products) 128 { 129 productIds.Add(product.Id); 130 } 131 132 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 133 string productLink = products.Products?.FirstOrDefault()?.GetProductLink(GetPageIdByNavigationTag("Shop"), false); 134 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 135 136 link1 = new Dynamicweb.Frontend.LinkViewModel() 137 { 138 Url = productLink 139 }; 140 } 141 } 142 143 if (linkType2 == "product2") 144 { 145 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink2"); 146 IList<string> productIds = new List<string> { }; 147 148 if (products != null && products.Products.Any()) 149 { 150 foreach (var product in products.Products) 151 { 152 productIds.Add(product.Id); 153 } 154 155 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 156 string productLink = products.Products?.FirstOrDefault()?.GetProductLink(GetPageIdByNavigationTag("Shop"), false); 157 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 158 159 link2 = new Dynamicweb.Frontend.LinkViewModel() 160 { 161 Url = productLink, 162 IsExternal = false 163 }; 164 } 165 } 166 } 167 168 <div class="h-100 position-relative d-flex flex-column mb-0-last-child @contentPadding @verticalAlign @(layout)@(theme) @(css) item_@Model.Item.SystemName.ToLower()"> 169 <div id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></div> 170 171 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 172 { 173 string titleColor = Model.Item.GetString("TitleColor", "text-inherit"); 174 string titleOpacity = Model.Item.GetString("TitleOpacity", "opacity-100"); 175 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h3"); 176 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 177 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} {titleColor} {titleOpacity}{maxWidth} mb-3\">"; 178 string headingLevelStop = $"</{headingLevel}>"; 179 180 @headingLevelStart 181 @Model.Item.GetString("Title") 182 @headingLevelStop 183 } 184 185 @if (!string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 186 { 187 string subtitleColor = Model.Item.GetString("SubtitleColor", "text-inherit"); 188 string subtitleOpacity = Model.Item.GetString("SubtitleOpacity", "opacity-100"); 189 string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); 190 191 <p class="@subtitleFontSize @subtitleColor @subtitleOpacity lead mb-3@(maxWidth)"> 192 @Model.Item.GetString("Lead") 193 </p> 194 } 195 196 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 197 { 198 string textColor = Model.Item.GetString("TextColor", "text-inherit"); 199 string textOpacity = Model.Item.GetString("TextOpacity", "opacity-100"); 200 201 <div class="mb-0-last-child @textColor @(textOpacity)@(maxWidth)"> 202 @Model.Item.GetString("Text") 203 </div> 204 } 205 206 @if (link1 is object && !string.IsNullOrEmpty(link1.Url) || link2 is object && !string.IsNullOrEmpty(link2.Url)) 207 { 208 string target1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "target=\"_blank\"" : string.Empty; 209 string target2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "target=\"_blank\"" : string.Empty; 210 string rel1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "rel=\"noopener\"" : string.Empty; 211 string rel2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "rel=\"noopener\"" : string.Empty; 212 string buttonLabel1 = Model.Item.GetString("ButtonLabel", string.Empty); 213 string buttonLabel2 = Model.Item.GetString("ButtonLabel2", string.Empty); 214 string buttonStyle1 = Model.Item.GetRawValueString("ButtonStyle", string.Empty); 215 buttonStyle1 = buttonStyle1 == "primary" ? "btn-primary " : buttonStyle1; 216 buttonStyle1 = buttonStyle1 == "secondary" ? "btn-secondary " : buttonStyle1; 217 buttonStyle1 = buttonStyle1 == "link" ? "btn-link" : buttonStyle1; 218 string buttonStyle2 = Model.Item.GetRawValueString("ButtonStyle2", string.Empty); 219 buttonStyle2 = buttonStyle2 == "primary" ? "btn-primary " : buttonStyle2; 220 buttonStyle2 = buttonStyle2 == "secondary" ? "btn-secondary " : buttonStyle2; 221 buttonStyle2 = buttonStyle2 == "link" ? "btn-link" : buttonStyle2; 222 string stretchedLink1 = Model.Item.GetRawValueString("StretchedLink", "column-not-clickable"); 223 string stretchedLink2 = Model.Item.GetRawValueString("StretchedLink2", "column-not-clickable"); 224 string stretchedLinkClass = stretchedLink1 == "column-clickable" && string.IsNullOrEmpty(link2.Url) && string.IsNullOrEmpty(buttonLabel2) ? "stretched-link" : string.Empty; 225 string stretchedLinkClass2 = stretchedLink2 == "column-clickable" && string.IsNullOrEmpty(link1.Url) && string.IsNullOrEmpty(buttonLabel1) ? "stretched-link" : string.Empty; 226 string alignmentClass = string.Empty; 227 228 if (Model.Item.GetString("Layout") == "alignCenter") 229 { 230 alignmentClass = " justify-content-center"; 231 } 232 233 <div class="d-flex flex-wrap gap-3 mt-3@(alignmentClass)"> 234 @if (link1 != null && !string.IsNullOrEmpty(link1.Url)) 235 { 236 if (!string.IsNullOrEmpty(buttonLabel1)) 237 { 238 <a href="@link1.Url" @target1 @rel1 class="text-nowrap btn @(buttonStyle1)@(stretchedLinkClass)">@buttonLabel1</a> 239 } 240 else 241 { 242 <a href="@link1.Url" @target1 @rel1 class="@(stretchedLinkClass)"> 243 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 244 </a> 245 } 246 } 247 248 @if (link2 != null && !string.IsNullOrEmpty(link2.Url)) 249 { 250 if (!string.IsNullOrEmpty(buttonLabel2)) 251 { 252 <a href="@link2.Url" @target2 @rel2 class="text-nowrap btn @(buttonStyle2)@(stretchedLinkClass2)">@buttonLabel2</a> 253 } 254 else 255 { 256 <a href="@link2.Url" @target2 @rel2 class="@(stretchedLinkClass2)"> 257 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 258 </a> 259 } 260 } 261 </div> 262 } 263 </div> 264 265
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/3Columns.cshtml" System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted. at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity() at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value) at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value) at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations) at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument() at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source) at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document) at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument) at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document) at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context) at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context) at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context) at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType) at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.GridRowViewModel> 2 @using Dynamicweb.Content.Items 3 4 @{ 5 string sectionClass = "py-3"; 6 string spaceBetweenRows = Model.Item.GetRawValueString("SpaceBetweenRows", "spacing"); 7 string spaceBetweenRowsMobile = Model.Item.GetRawValueString("SpaceBetweenRowsMobile", "auto"); 8 9 //Row spacing mobile auto 10 if (spaceBetweenRowsMobile == "auto") { 11 spaceBetweenRowsMobile = spaceBetweenRows; 12 } 13 14 //Row spacing mobile 15 switch (spaceBetweenRowsMobile) { 16 case "none": //No spacing 17 sectionClass = "py-0"; 18 break; 19 case "spacing": //Small spacing top and bottom 20 sectionClass = "py-3"; 21 break; 22 case "spacing-small-top": //Small spacing top 23 sectionClass = "pt-3"; 24 break; 25 case "spacing-small-bottom": //Small spacing bottom 26 sectionClass = "pb-3"; 27 break; 28 case "spacing-medium": //Medium spacing top and bottom 29 sectionClass = "py-4"; 30 break; 31 case "spacing-medium-top": //Medium spacing top 32 sectionClass = "pt-4"; 33 break; 34 case "spacing-medium-bottom": //Medium spacing bottom 35 sectionClass = "pb-4"; 36 break; 37 case "spacing-large": //Large spacing top and bottom 38 sectionClass = "py-5"; 39 break; 40 case "spacing-top": //Large spacing top 41 sectionClass = "pt-5"; 42 break; 43 case "spacing-bottom": //Large spacing bottom 44 sectionClass = "pb-5"; 45 break; 46 } 47 48 //Row spacing dekstop 49 switch (spaceBetweenRows) { 50 case "none": //No spacing 51 sectionClass += " py-lg-0"; 52 break; 53 case "spacing": //Small spacing top and bottom 54 sectionClass += " py-lg-3"; 55 break; 56 case "spacing-small-top": //Small spacing top 57 sectionClass += " pt-lg-3 pb-lg-0"; 58 break; 59 case "spacing-small-bottom": //Small spacing bottom 60 sectionClass += " pb-lg-3 pt-lg-0"; 61 break; 62 case "spacing-medium": //Medium spacing top and bottom 63 sectionClass += " py-lg-5"; 64 break; 65 case "spacing-medium-top": //Medium spacing top 66 sectionClass += " pt-lg-5 pb-lg-0"; 67 break; 68 case "spacing-medium-bottom": //Medium spacing bottom 69 sectionClass += " pb-lg-5 pt-lg-0"; 70 break; 71 case "spacing-large": //Large spacing top and bottom 72 sectionClass += " py-lg-6"; 73 break; 74 case "spacing-top": //Large spacing top 75 sectionClass += " pt-lg-6 pb-lg-0"; 76 break; 77 case "spacing-bottom": //Large spacing bottom 78 sectionClass += " pb-lg-6 pt-lg-0"; 79 break; 80 } 81 82 string width = Model.Item.GetRawValueString("Width", "").ToLower(); 83 string containerClass = "container-xl"; 84 if (width == "stretch") 85 { 86 containerClass = "container-fluid"; 87 } 88 if (width == "none") 89 { 90 containerClass = "container-fluid px-0"; 91 } 92 if (width == "compressed") 93 { 94 containerClass = " container-compressed"; 95 } 96 97 string rowClass = string.Empty; 98 string spaceBetweenColumns = Model.Item.GetRawValueString("SpaceBetweenColumns", string.Empty).ToLower(); 99 string spaceBetweenColumnsMobile = Model.Item.GetRawValueString("SpaceBetweenColumnsMobile", string.Empty).ToLower(); 100 //Mobile 101 if (spaceBetweenColumnsMobile == "auto") 102 { 103 spaceBetweenColumnsMobile = spaceBetweenColumns; 104 } 105 if (spaceBetweenColumnsMobile == "stick") { 106 rowClass = " gap-0"; 107 } 108 if (spaceBetweenColumnsMobile == "spacing-medium") 109 { 110 rowClass = " gap-4"; 111 } 112 if (spaceBetweenColumnsMobile == "spacing-large") { 113 rowClass = " gap-5"; 114 } 115 //Desktop 116 if (spaceBetweenColumns == "stick") { 117 rowClass += " gap-lg-0"; 118 } 119 if (spaceBetweenColumns == "spacing-medium") 120 { 121 rowClass += " gap-lg-4"; 122 } 123 if (spaceBetweenColumns == "spacing-large") { 124 rowClass += " gap-lg-5"; 125 } 126 127 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 128 129 string animationOnScrollCol1 = Model.Item.GetRawValueString("AnimationOnScrollCol1", "no-animation"); 130 animationOnScrollCol1 = animationOnScrollCol1 != "no-animation" ? "data-aos=" + "'" + animationOnScrollCol1 + "'" : ""; 131 string animationOnScrollCol2 = Model.Item.GetRawValueString("AnimationOnScrollCol2", "no-animation"); 132 animationOnScrollCol2 = animationOnScrollCol2 != "no-animation" ? "data-aos=" + "'" + animationOnScrollCol2 + "'" : ""; 133 string animationOnScrollCol3 = Model.Item.GetRawValueString("AnimationOnScrollCol3", "no-animation"); 134 animationOnScrollCol3 = animationOnScrollCol3 != "no-animation" ? "data-aos=" + "'" + animationOnScrollCol3 + "'" : ""; 135 136 string hideOverflow = " overflow-hidden"; 137 hideOverflow = 138 animationOnScrollCol1 != "" || 139 animationOnScrollCol2 != "" || 140 animationOnScrollCol3 != "" 141 ? hideOverflow : ""; 142 143 Dynamicweb.Frontend.FileViewModel backgroundImage = Model.Item.GetFile("BackgroundImage"); 144 string backgroundImagePath = backgroundImage?.Path ?? string.Empty; 145 backgroundImagePath = !string.IsNullOrEmpty(backgroundImagePath) ? $"/Admin/Public/GetImage.ashx?image={backgroundImagePath}&width=2600&format=webp&compression=75" : string.Empty; 146 backgroundImagePath = Dynamicweb.Core.Encoders.HtmlEncoder.UrlPathEncode(backgroundImagePath); 147 string backgroundRepeat = Model.Item.GetRawValueString("BackgroundImageRepeat", "no-repeat"); 148 string backgroundImageSize = Model.Item.GetRawValueString("BackgroundImageSize", "initial"); 149 int xPos = backgroundImage?.FocalPositionFromLeft ?? 50; 150 int yPos = backgroundImage?.FocalPositionFromTop ?? 50; 151 string cssPosition = $"{xPos}% {yPos}%"; 152 string gradient = Model.Item.GetRawValueString("Gradient", string.Empty); 153 string gradientOpacity = Model.Item.GetRawValueString("GradientOpacity", "0.00"); 154 string gradientString = "linear-gradient(" + gradient + "deg," + "rgba(var(--swift-foreground-color-rgb)," + gradientOpacity + "), rgba(var(--swift-background-color-rgb)," + gradientOpacity + "))"; 155 string backgroundImageString = "url(" + backgroundImagePath + ")"; 156 string backgroundImagePositionString = "background-position:" + cssPosition + ";"; 157 string backgroundRepeatString = "background-repeat:" + backgroundRepeat + ";"; 158 string backgroundImageSizeString = "background-size:" + backgroundImageSize + ";"; 159 string styleString = string.Empty; 160 161 var decorations = Model.Item?.GetList("CssDecorations")?.GetRawValue().OfType<string>() ?? Enumerable.Empty<string>(); 162 var css = string.Empty; 163 var cssClasses = new List<string> { }; 164 165 foreach (var itemId in decorations) 166 { 167 var item = Dynamicweb.Content.Services.Items.GetItem("Swift_Css", itemId); 168 item.TryGetValue("Class", out object classes); 169 if (classes is null) 170 { 171 continue; 172 } 173 174 var cssString = (string)classes; 175 if (cssString.StartsWith("[")) 176 { 177 var cssArray = Dynamicweb.Core.Converter.Deserialize<string[]>(cssString); 178 cssClasses.AddRange(cssArray); 179 } 180 else 181 { 182 cssClasses.Add(cssString.Replace(",", " ")); 183 } 184 } 185 css = string.Join(" ", cssClasses).Trim(); 186 187 @* Only gradient *@ 188 189 if (!string.IsNullOrEmpty(gradient) && string.IsNullOrEmpty(backgroundImagePath) && gradientOpacity != ("0.00")) 190 { 191 styleString += "style=\"background-image:" + gradientString + ";\""; 192 } 193 194 @* Only background image *@ 195 196 else if (string.IsNullOrEmpty(gradient) && !string.IsNullOrEmpty(backgroundImagePath)) 197 { 198 styleString += "style=\"background-image:" + backgroundImageString + "; " + backgroundImagePositionString + backgroundRepeatString + backgroundImageSizeString + "\""; 199 } 200 201 @* Gradient and background image *@ 202 203 else if (!string.IsNullOrEmpty(gradient) && !string.IsNullOrEmpty(backgroundImagePath)) 204 { 205 styleString += "style=\"background-image:" + gradientString + "," + backgroundImageString + ";" + backgroundImagePositionString + backgroundRepeatString + backgroundImageSizeString + "\""; 206 } 207 208 int mobileColumnSize = Dynamicweb.Core.Converter.ToInt32(Model.Item.GetRawValueString("MobileColumnBehaviour", "1")); 209 int mobileOrderFirst = Dynamicweb.Core.Converter.ToInt32(Model.Item.GetRawValueString("MobileOrderFirst", "1")); 210 211 if (Pageview.IsVisualEditorMode || !string.IsNullOrWhiteSpace(Model.Column(1).Output()) || !string.IsNullOrWhiteSpace(Model.Column(2).Output()) || !string.IsNullOrWhiteSpace(Model.Column(3).Output())) 212 { 213 <div class="@(sectionClass)@(theme) @(css) item_@Model.Item.SystemName.ToLower()" @styleString data-swift-gridrow> 214 <div class="@containerClass@(hideOverflow)"> 215 <div class="grid grid-@(mobileColumnSize) grid-lg-@Model.Columns.Count()@(rowClass)"> 216 <div class="g-col @(Model.Column(1).ColumnNumber == mobileOrderFirst ? "order-first order-lg-0" : string.Empty)" data-col-size="4" @animationOnScrollCol1 style="--bs-columns:12"> 217 @Model.Column(1).Output() 218 </div> 219 <div class="g-col @(Model.Column(2).ColumnNumber == mobileOrderFirst ? "order-first order-lg-0" : string.Empty)" data-col-size="4" @animationOnScrollCol2 style="--bs-columns:12"> 220 @Model.Column(2).Output() 221 </div> 222 <div class="g-col @(Model.Column(3).ColumnNumber == mobileOrderFirst ? "order-first order-lg-0" : string.Empty)" data-col-size="4" @animationOnScrollCol3 style="--bs-columns:12"> 223 @Model.Column(3).Output() 224 </div> 225 </div> 226 </div> 227 </div> 228 } 229 } 230
Error executing template "Designs/Swift/Paragraph/Swift_Text.cshtml" System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted. at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity() at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value) at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value) at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations) at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder) at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument() at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source) at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document) at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument) at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document) at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context) at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context) at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context) at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType) at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @functions 4 { 5 private string RenderCustomCSS(IEnumerable<string> decorations) 6 { 7 var cssClasses = new List<string>(); 8 9 foreach (var itemId in decorations) 10 { 11 var item = Dynamicweb.Content.Services.Items.GetItem("Swift_Css", itemId); 12 item.TryGetValue("Class", out object classes); 13 14 if (classes is null) 15 { 16 continue; 17 } 18 19 var cssString = (string)classes; 20 21 if (cssString.StartsWith("[")) 22 { 23 var cssArray = Dynamicweb.Core.Converter.Deserialize<string[]>(cssString); 24 cssClasses.AddRange(cssArray); 25 } 26 else 27 { 28 cssClasses.Add(cssString.Replace(",", " ")); 29 } 30 } 31 32 return string.Join(" ", cssClasses).Trim(); 33 } 34 } 35 36 @{ 37 string layout = Model.Item.GetRawValueString("Layout", "text-start"); 38 layout = layout == "alignLeft" ? "align-items-start text-start" : layout; 39 layout = layout == "alignCenter" ? "align-items-center text-center" : layout; 40 layout = layout == "alignRight" ? "align-items-end text-end" : layout; 41 layout = layout == "alignLeftMiddle" ? "align-items-start text-start justify-content-center" : layout; 42 43 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 44 contentPadding = contentPadding == "none" ? "p-0" : contentPadding; 45 contentPadding = contentPadding == "small" ? "p-3 p-md-3" : contentPadding; 46 contentPadding = contentPadding == "large" ? "p-5 p-md-5" : contentPadding; 47 48 //Backward compatibility (Vertical align) 49 string verticalAlign = string.Empty; 50 if (!string.IsNullOrEmpty(Model.Item.GetString("verticalAlign"))) 51 { 52 verticalAlign = verticalAlign == "vertical-align-top" ? "justify-content-start" : verticalAlign; 53 verticalAlign = verticalAlign == "vertical-align-center" ? "justify-content-center" : verticalAlign; 54 verticalAlign = verticalAlign == "vertical-align-bottom" ? "justify-content-end" : verticalAlign; 55 } 56 57 string maxWidth = Model.Item.GetRawValueString("TextReadability", "max-width-on"); 58 maxWidth = maxWidth == "max-width-on" ? " mw-75ch" : maxWidth; 59 maxWidth = maxWidth == "max-width-off" ? string.Empty : maxWidth; 60 61 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 62 var decorations = Model.Item?.GetList("CssDecorations")?.GetRawValue().OfType<string>() ?? Enumerable.Empty<string>(); 63 string css = RenderCustomCSS(decorations); 64 65 Dynamicweb.Frontend.LinkViewModel link1 = new Dynamicweb.Frontend.LinkViewModel(); 66 Dynamicweb.Frontend.LinkViewModel link2 = new Dynamicweb.Frontend.LinkViewModel(); 67 68 string linkType1 = Model.Item.GetRawValueString("LinkType", "page"); 69 string linkType2 = Model.Item.GetRawValueString("LinkType2", "page2"); 70 71 if (linkType1 == "page" && Model.Item.GetLink("ButtonLink") != null) 72 { 73 link1 = Model.Item.GetLink("ButtonLink"); 74 } 75 76 if (linkType2 == "page2" && Model.Item.GetLink("ButtonLink2") != null) 77 { 78 link2 = Model.Item.GetLink("ButtonLink2"); 79 } 80 81 if (linkType1 == "product-group") 82 { 83 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink"); 84 IList<string> groupIds = new List<string> { }; 85 86 if (selectedGroups != null) 87 { 88 foreach (var fromGroup in selectedGroups) 89 { 90 groupIds.Add(fromGroup.Id); 91 } 92 } 93 94 link1 = new Dynamicweb.Frontend.LinkViewModel() 95 { 96 Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&GroupID=" + string.Join(",", groupIds) 97 }; 98 } 99 100 if (linkType2 == "product-group2") 101 { 102 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink2"); 103 IList<string> groupIds = new List<string> { }; 104 105 if (selectedGroups != null) 106 { 107 foreach (var fromGroup in selectedGroups) 108 { 109 groupIds.Add(fromGroup.Id); 110 } 111 } 112 113 link2 = new Dynamicweb.Frontend.LinkViewModel() 114 { 115 Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&GroupID=" + string.Join(",", groupIds).Trim(), 116 IsExternal = false 117 }; 118 } 119 120 if (linkType1 == "product") 121 { 122 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink"); 123 IList<string> productIds = new List<string> { }; 124 125 if (products != null && products.Products.Any()) 126 { 127 foreach (var product in products.Products) 128 { 129 productIds.Add(product.Id); 130 } 131 132 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 133 string productLink = products.Products?.FirstOrDefault()?.GetProductLink(GetPageIdByNavigationTag("Shop"), false); 134 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 135 136 link1 = new Dynamicweb.Frontend.LinkViewModel() 137 { 138 Url = productLink 139 }; 140 } 141 } 142 143 if (linkType2 == "product2") 144 { 145 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink2"); 146 IList<string> productIds = new List<string> { }; 147 148 if (products != null && products.Products.Any()) 149 { 150 foreach (var product in products.Products) 151 { 152 productIds.Add(product.Id); 153 } 154 155 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 156 string productLink = products.Products?.FirstOrDefault()?.GetProductLink(GetPageIdByNavigationTag("Shop"), false); 157 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 158 159 link2 = new Dynamicweb.Frontend.LinkViewModel() 160 { 161 Url = productLink, 162 IsExternal = false 163 }; 164 } 165 } 166 } 167 168 <div class="h-100 position-relative d-flex flex-column mb-0-last-child @contentPadding @verticalAlign @(layout)@(theme) @(css) item_@Model.Item.SystemName.ToLower()"> 169 <div id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></div> 170 171 @if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) && !Model.Item.GetBoolean("HideTitle")) 172 { 173 string titleColor = Model.Item.GetString("TitleColor", "text-inherit"); 174 string titleOpacity = Model.Item.GetString("TitleOpacity", "opacity-100"); 175 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "h3"); 176 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 177 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} {titleColor} {titleOpacity}{maxWidth} mb-3\">"; 178 string headingLevelStop = $"</{headingLevel}>"; 179 180 @headingLevelStart 181 @Model.Item.GetString("Title") 182 @headingLevelStop 183 } 184 185 @if (!string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 186 { 187 string subtitleColor = Model.Item.GetString("SubtitleColor", "text-inherit"); 188 string subtitleOpacity = Model.Item.GetString("SubtitleOpacity", "opacity-100"); 189 string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); 190 191 <p class="@subtitleFontSize @subtitleColor @subtitleOpacity lead mb-3@(maxWidth)"> 192 @Model.Item.GetString("Lead") 193 </p> 194 } 195 196 @if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 197 { 198 string textColor = Model.Item.GetString("TextColor", "text-inherit"); 199 string textOpacity = Model.Item.GetString("TextOpacity", "opacity-100"); 200 201 <div class="mb-0-last-child @textColor @(textOpacity)@(maxWidth)"> 202 @Model.Item.GetString("Text") 203 </div> 204 } 205 206 @if (link1 is object && !string.IsNullOrEmpty(link1.Url) || link2 is object && !string.IsNullOrEmpty(link2.Url)) 207 { 208 string target1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "target=\"_blank\"" : string.Empty; 209 string target2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "target=\"_blank\"" : string.Empty; 210 string rel1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "rel=\"noopener\"" : string.Empty; 211 string rel2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "rel=\"noopener\"" : string.Empty; 212 string buttonLabel1 = Model.Item.GetString("ButtonLabel", string.Empty); 213 string buttonLabel2 = Model.Item.GetString("ButtonLabel2", string.Empty); 214 string buttonStyle1 = Model.Item.GetRawValueString("ButtonStyle", string.Empty); 215 buttonStyle1 = buttonStyle1 == "primary" ? "btn-primary " : buttonStyle1; 216 buttonStyle1 = buttonStyle1 == "secondary" ? "btn-secondary " : buttonStyle1; 217 buttonStyle1 = buttonStyle1 == "link" ? "btn-link" : buttonStyle1; 218 string buttonStyle2 = Model.Item.GetRawValueString("ButtonStyle2", string.Empty); 219 buttonStyle2 = buttonStyle2 == "primary" ? "btn-primary " : buttonStyle2; 220 buttonStyle2 = buttonStyle2 == "secondary" ? "btn-secondary " : buttonStyle2; 221 buttonStyle2 = buttonStyle2 == "link" ? "btn-link" : buttonStyle2; 222 string stretchedLink1 = Model.Item.GetRawValueString("StretchedLink", "column-not-clickable"); 223 string stretchedLink2 = Model.Item.GetRawValueString("StretchedLink2", "column-not-clickable"); 224 string stretchedLinkClass = stretchedLink1 == "column-clickable" && string.IsNullOrEmpty(link2.Url) && string.IsNullOrEmpty(buttonLabel2) ? "stretched-link" : string.Empty; 225 string stretchedLinkClass2 = stretchedLink2 == "column-clickable" && string.IsNullOrEmpty(link1.Url) && string.IsNullOrEmpty(buttonLabel1) ? "stretched-link" : string.Empty; 226 string alignmentClass = string.Empty; 227 228 if (Model.Item.GetString("Layout") == "alignCenter") 229 { 230 alignmentClass = " justify-content-center"; 231 } 232 233 <div class="d-flex flex-wrap gap-3 mt-3@(alignmentClass)"> 234 @if (link1 != null && !string.IsNullOrEmpty(link1.Url)) 235 { 236 if (!string.IsNullOrEmpty(buttonLabel1)) 237 { 238 <a href="@link1.Url" @target1 @rel1 class="text-nowrap btn @(buttonStyle1)@(stretchedLinkClass)">@buttonLabel1</a> 239 } 240 else 241 { 242 <a href="@link1.Url" @target1 @rel1 class="@(stretchedLinkClass)"> 243 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 244 </a> 245 } 246 } 247 248 @if (link2 != null && !string.IsNullOrEmpty(link2.Url)) 249 { 250 if (!string.IsNullOrEmpty(buttonLabel2)) 251 { 252 <a href="@link2.Url" @target2 @rel2 class="text-nowrap btn @(buttonStyle2)@(stretchedLinkClass2)">@buttonLabel2</a> 253 } 254 else 255 { 256 <a href="@link2.Url" @target2 @rel2 class="@(stretchedLinkClass2)"> 257 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 258 </a> 259 } 260 } 261 </div> 262 } 263 </div> 264 265
New 15km bike park in the heart of Pines forrest
This is a legitimate expert-level trail, but much of the difficulty can be mitigated by slowing down and picking your line carefully.
New trails in Callie and Dwelling High Mountains
The end of the jump line trail there is a fairly steep climb to get to the next section.
Rock’n and Ride’n at Richhampton Bikers Trail
If you keep your momentum you can charge up pretty much all the climbs and the descents are steep and tricky.
Forrest gets a facelift with a new singletrack and all-weather trails
There was enough rain to saturate the dust. Two wheel drifting is likely if you have speed