Error executing template "Designs/PGWSeedsNZ/_parsed/SeedsNZ_SideNav_Child_Page.parsed.cshtml"
System.TypeInitializationException: The type initializer for 'System.Collections.Generic.EqualityComparer`1' threw an exception. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Collections.Generic.EqualityComparer`1.CreateComparer()
   at System.Collections.Generic.EqualityComparer`1..cctor()
   --- End of inner exception stack trace ---
   at System.Collections.Generic.EqualityComparer`1.get_Default()
   at System.Array.IndexOf[T](T[] array, T value, Int32 startIndex, Int32 count)
   at System.Array.IndexOf[T](T[] array, T value)
   at System.SZArrayHelper.Contains[T](T value)
   at System.Linq.Enumerable.Contains[TSource](IEnumerable`1 source, TSource value)
   at Microsoft.CodeAnalysis.CSharp.CSharpDiagnosticFilter.Filter(Diagnostic d, Int32 warningLevelOption, NullableContextOptions nullableOption, ReportDiagnostic generalDiagnosticOption, IDictionary`2 specificDiagnosticOptions)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.FilterDiagnostic(Diagnostic diagnostic)
   at Microsoft.CodeAnalysis.Compilation.FilterAndAppendDiagnostics(DiagnosticBag accumulator, IEnumerable`1 incoming, HashSet`1 exclude)
   at Microsoft.CodeAnalysis.Compilation.FilterAndAppendAndFreeDiagnostics(DiagnosticBag accumulator, DiagnosticBag& incoming)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileMethods(CommonPEModuleBuilder moduleBuilder, Boolean emittingPdb, Boolean emitMetadataOnly, Boolean emitTestCoverageData, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, CancellationToken cancellationToken)
   at RazorEngine.Roslyn.CSharp.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.<>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 Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<PageViewModel> 2 @using Dynamicweb.Frontend; 3 @using Dynamicweb.Rendering; 4 @using System.Configuration; 5 @using System.Web; 6 @using System.Web.Optimization; 7 @using System.Net; 8 @using PgwSeeds.Constants.PGWSeedsNZ; 9 @using PgwSeeds.Extensions.PGWSeedsNZ; 10 11 @{ 12 var tagManagerCode = Model.Area.Item.GetString("Google_TagManager_Code"); 13 var siteVerificationKey = Model.Area.Item.GetString("Google_Site_Verification_Key"); 14 } 15 16 <!DOCTYPE html> 17 <html> 18 <head> 19 @if (tagManagerCode != null) 20 { 21 <!-- Google Tag Manager --> 22 <script> 23 (function (w, d, s, l, i) { 24 w[l] = w[l] || []; w[l].push({ 25 'gtm.start': 26 new Date().getTime(), event: 'gtm.js' 27 }); var f = d.getElementsByTagName(s)[0], 28 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 29 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 30 })(window, document, 'script', 'dataLayer', '@tagManagerCode'); 31 </script> 32 } 33 <script type="text/javascript"> 34 var sdkInstance = "appInsightsSDK"; window[sdkInstance] = "appInsights"; var aiName = window[sdkInstance], aisdk = window[aiName] || function (e) { function n(e) { t[e] = function () { var n = arguments; t.queue.push(function () { t[e].apply(t, n) }) } } var t = { config: e }; t.initialize = !0; var i = document, a = window; setTimeout(function () { var n = i.createElement("script"); n.src = e.url || "https://az416426.vo.msecnd.net/scripts/b/ai.2.min.js", i.getElementsByTagName("script")[0].parentNode.appendChild(n) }); try { t.cookie = i.cookie } catch (e) { } t.queue = [], t.version = 2; for (var r = ["Event", "PageView", "Exception", "Trace", "DependencyData", "Metric", "PageViewPerformance"]; r.length;)n("track" + r.pop()); n("startTrackPage"), n("stopTrackPage"); var s = "Track" + r[0]; if (n("start" + s), n("stop" + s), n("setAuthenticatedUserContext"), n("clearAuthenticatedUserContext"), n("flush"), !(!0 === e.disableExceptionTracking || e.extensionConfig && e.extensionConfig.ApplicationInsightsAnalytics && !0 === e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)) { n("_" + (r = "onerror")); var o = a[r]; a[r] = function (e, n, i, a, s) { var c = o && o(e, n, i, a, s); return !0 !== c && t["_" + r]({ message: e, url: n, lineNumber: i, columnNumber: a, error: s }), c }, e.autoExceptionInstrumented = !0 } return t }( 35 { 36 instrumentationKey: '@ConfigurationManager.AppSettings["aiinstrumentationKey"]', 37 disableCorrelationHeaders: false 38 } 39 ); 40 window.appInsights = aisdk; 41 window.appInsights.queue.push(function () { 42 var serverId = "@HttpContext.Current.GetRequestTelemetry().Context.Operation.Id"; 43 appInsights.properties.context.telemetryTrace.traceID = serverId; 44 45 }); 46 aisdk.trackPageView(); 47 </script> 48 <meta charset="utf-8" /> 49 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 50 <meta name="google-site-verification" content="@siteVerificationKey" /> 51 @Model.MetaTags 52 <title>@Model.Title | PGG Wrightson Seeds</title> 53 54 <link rel="apple-touch-icon" sizes="57x57" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-57x57.png" /> 55 <link rel="apple-touch-icon" sizes="60x60" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-60x60.png" /> 56 <link rel="apple-touch-icon" sizes="72x72" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-72x72.png" /> 57 <link rel="apple-touch-icon" sizes="76x76" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-76x76.png" /> 58 <link rel="apple-touch-icon" sizes="114x114" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-114x114.png" /> 59 <link rel="apple-touch-icon" sizes="120x120" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/apple-touch-icon-120x120.png" /> 60 <link rel="icon" type="image/png" sizes="32x32" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/favicon-32x32.png" /> 61 <link rel="icon" type="image/png" sizes="96x96" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/favicon-96x96.png" /> 62 <link rel="icon" type="image/png" sizes="16x16" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/favicon-16x16.png" /> 63 <link rel="icon" href="/Files/Templates/Designs/SeedsNZ/assets/favicon/favicon.ico" /> 64 <link rel="stylesheet" href="https://use.typekit.net/pgh1pmv.css"> 65 66 <!-- FontAwesome --> 67 <script src="https://kit.fontawesome.com/ae27298cff.js" crossorigin="anonymous"></script> 68 69 <!-- TypeKit --> 70 <script src="https://use.typekit.net/oel8lyn.js"></script> 71 <script>try { Typekit.load({ async: false }); } catch (e) { }</script> 72 73 @Styles.Render("~/Content/custom/pgwseedsnz") 74 75 @RenderSnippet("StyleSheet") 76 @RenderSnippet("JavaScript") 77 </head> 78 79 <body> 80 81 @if (tagManagerCode != null) 82 { 83 <!-- Google Tag Manager (no script) --> 84 <noscript> 85 <iframe src="https://www.googletagmanager.com/ns.html?id=@tagManagerCode" 86 height="0" width="0" style="display:none;visibility:hidden"></iframe> 87 </noscript> 88 } 89 90 <div class="layout__main wrap"> 91 @{ 92 var searchPage = GetPageIdByNavigationTag("Search"); 93 } 94 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 95 @using Dynamicweb.Frontend; 96 @using PgwSeeds.Constants.PGWSeedsNZ; 97 @using PgwSeeds.Extensions.PGWSeedsNZ; 98 99 100 @{ 101 var socialBarIcons = Model.Area.Item.GetItems("Social_Icons") != null ? Model.Area.Item.GetItems("Social_Icons") : new List<ItemViewModel>(); 102 } 103 104 <div id="socials-bar"> 105 <a href="tel:@Pageview.Area.Item["NZPhoneNumber"]" class="socials-text"> 106 @Pageview.Area.Item["NZPhoneNumber"] 107 </a> 108 <a href="mailto:@Pageview.Area.Item["Email"]" class="socials-text"> 109 @Pageview.Area.Item["Email"] 110 </a> 111 <span class="socials-icons"> 112 @if (socialBarIcons != null) 113 { 114 foreach (var icon in socialBarIcons) 115 { 116 <a href="@icon.GetString("Icon_link")" target="_blank"> 117 <span class="fa @icon.GetString("Icon_ClassName")"></span> 118 </a> 119 } 120 } 121 </span> 122 </div> 123 <header class="container-fluid"> 124 <div class="col-no-padding-desktop"> 125 <nav class="navbar" role="navigation"> 126 <div class="navbar-header"> 127 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 128 <span class="icon-bar"></span> 129 <span class="icon-bar"></span> 130 <span class="icon-bar"></span> 131 </button> 132 <a href="Default.aspx?Id=@GetPageIdByNavigationTag(NavigationTags.Home)" id="logo" title="Back to homepage"> 133 <img class="img-responsive" src="/Files/Templates/Designs/PGWSeedsNZ/assets/img/logo.svg" alt="PGG Wrightson Seeds Logo"> 134 </a> 135 </div> 136 137 <div class="navbar-collapse collapse pull-right-md" style="overflow: hidden"> 138 <ul class="nav navbar-nav pull-right-md" id="navbar"> 139 @RenderNavigation(new 140 { 141 Id = "navbar", 142 Template = "navbar.xslt", 143 ExpandMode = "All", 144 EndLevel = 3 145 }) 146 147 </ul> 148 149 <div class="search-btn-wrap visible-xs visible-sm"> 150 <a data-target="#search-wrapper" 151 data-toggle="collapse" 152 aria-expanded="false" 153 aria-controls="search-wrapper" 154 role="button"> 155 <span class="fa fa-search hidden-xs hidden-sm"></span> 156 <span class="search-text hidden-md hidden-lg">Search</span> 157 </a> 158 </div> 159 </div> 160 </nav> 161 </div> 162 <div class="row collapse" id="search-wrapper"> 163 <div class="max-width-wrap"> 164 <div class="form-search-wrap"> 165 <form method="get" action="Default.aspx" name="" novalidate="novalidate"> 166 <input type="hidden" name="ID" value="@searchPage" /> 167 <input type="search" class="search-input" placeholder="Enter Keyword to Search" name="q" autocomplete="off"> 168 <submit class="" role="button"> 169 <span class="rounded-icon icon fa fa-angle-right"></span> 170 </submit> 171 </form> 172 </div> 173 </div> 174 </div> 175 </header> 176 177 @inherits Dynamicweb.Rendering.ViewModelTemplate<PageViewModel> 178 @using Dynamicweb.Content.Items 179 @using Dynamicweb.Frontend 180 181 @Title("Default page template") 182 183 184 @{ 185 const string childPageType = "SeedsNZ_SideNav_Child_Page"; 186 var currentPageId = PageView.Current().ID; 187 var currentPage = Dynamicweb.Services.Pages.GetPage(currentPageId); 188 189 var parentPage = currentPage.Parent.ItemType == childPageType ? currentPage.Parent.Parent : currentPage.Parent; 190 191 var siblingPages = Dynamicweb.Services.Pages.GetPagesByParentID(parentPage.ID).ToList(); 192 193 var ctaListItemId = parentPage.Item["CTA_List"]; 194 195 var ctaList = ctaListItemId != null ? ItemList.GetItemListById((int)ctaListItemId) : new ItemList(); 196 } 197 198 @using Dynamicweb.Content.Items 199 @using Page = Dynamicweb.Content.Page 200 201 @helper RenderGrandChildren(int pageId, int? currentPageId) 202 { 203 var pages = Dynamicweb.Services.Pages.GetPagesByParentID(pageId).ToList(); 204 if (pages.Any()) 205 { 206 <ul> 207 @foreach (var page in pages) 208 { 209 <li> 210 @{ 211 var pageActiveClass = currentPageId.HasValue && currentPageId == page.ID ? "active-child-page" : ""; 212 } 213 <a class="@pageActiveClass" href="@page.GetPageHrefValue()">@page.MenuText</a> 214 </li> 215 216 } 217 </ul> 218 } 219 } 220 221 @helper RenderSideNav(Page parentPage, List<Page> childPages, int? currentChildPageId) 222 { 223 <div class="side-nav-items-container"> 224 <a class="side-nav-parent-page-a hidden-xs hidden-sm " href="@parentPage.GetPageHrefValue()"> 225 <strong>@parentPage.MenuText</strong> 226 </a> 227 228 <ol class="side-nav-ol"> 229 @foreach (var childPage in childPages) 230 { 231 <li> 232 @{ 233 var childPageActiveClass = currentChildPageId.HasValue && currentChildPageId == childPage.ID ? "active-child-page" : ""; 234 } 235 <a class="@childPageActiveClass" href="@childPage.GetPageHrefValue()">@childPage.MenuText</a> 236 @RenderGrandChildren(childPage.ID, currentChildPageId) 237 </li> 238 } 239 </ol> 240 </div> 241 } 242 243 @helper RenderMobileSideNav(Page parentPage, List<Page> childPages, int? currentChildPageId, ItemList ctaList) 244 { 245 <div class="sectionmenu"> 246 <div class="hidden-md hidden-lg navbar"> 247 <div class="navbar-header "> 248 249 <button type="button" class="navbar-toggle navbar" data-toggle="collapse" data-target="#subnavbar-collapse"> 250 <div class="text">Sections</div> 251 <div class="icons"> 252 <span class="icon-bar"></span> 253 <span class="icon-bar"></span> 254 <span class="icon-bar"></span> 255 </div> 256 257 </button> 258 <div class="navbar-text"> @parentPage.MenuText</div> 259 </div> 260 <div id="subnavbar-collapse" class="navbar-collapse collapse" aria-expanded="false"> 261 @RenderSideNav(parentPage, childPages, currentChildPageId) 262 @RenderMobileCtaList(ctaList) @*This function call is part of _CtaList.cshtml partial. This function call works here because the _CtaList.cshtml is included on both SeedsNZ_SideNav Parent/Child pages. *@ 263 </div> 264 </div> 265 </div> 266 } 267 268 @using Dynamicweb.Content.Items 269 270 @helper RenderCtaList(ItemList ctaList) 271 { 272 <div class="side-nav-cta-container"> 273 274 @if (ctaList != null) 275 { 276 foreach (var aItem in ctaList.Relations.Take(3)) 277 { 278 var typeItem = Item.GetItemById("SeedsNZ_SideNav_ParentPage_CTA", aItem.Id); 279 typeItem.TryGetValue("Title", out var title); 280 typeItem.TryGetValue("Image", out var image); 281 typeItem.TryGetValue("ImageAltText", out var imageAltText); 282 typeItem.TryGetValue("CircleImage", out var circleImage); 283 typeItem.TryGetValue("Link", out var link); 284 typeItem.TryGetValue("LinkText", out var linkText); 285 286 var circleImageClass = Convert.ToBoolean(circleImage) ? "img-circle circle-image" : null; 287 288 <div class="side-nav-cta-item"> 289 <h3>@title</h3> 290 <img class="img-responsive @circleImageClass" src="@image" alt="@imageAltText" /> 291 <a class="btn" href="@link">@linkText</a> 292 </div> 293 } 294 } 295 </div> 296 } 297 298 @helper RenderMobileCtaList(ItemList ctaList) 299 { 300 <div class="hidden-md hidden-lg"> 301 @if (ctaList != null) 302 { 303 foreach (var aItem in ctaList.Relations.Take(3)) 304 { 305 var typeItem = Item.GetItemById("SeedsNZ_SideNav_ParentPage_CTA", aItem.Id); 306 typeItem.TryGetValue("LinkTextMobile", out var linkTextMobile); 307 typeItem.TryGetValue("Link", out var link); 308 309 <a href="@link" class="page-cta-btn btn animate-right side-nav-mobile-cta-item" style="display: block;"> 310 <span> @linkTextMobile</span> 311 <i class="rounded-icon icon fa fa-angle-right"></i> 312 </a> 313 } 314 } 315 </div> 316 } 317 @using Page = Dynamicweb.Content.Page 318 319 @helper RenderPreviousNextPage(Page currentPage, Page parentPage) 320 { 321 string previousPageText = null; 322 string previousPageUrl = null; 323 324 string nextPageText; 325 string nextPageUrl; 326 327 var pages = new List<Page> { parentPage }; 328 329 var childPages = Dynamicweb.Services.Pages.GetPagesByParentID(parentPage.ID).ToList(); 330 331 foreach (var childPage in childPages) 332 { 333 pages.Add(childPage); 334 pages.AddRange(Dynamicweb.Services.Pages.GetPagesByParentID(childPage.ID)); 335 } 336 337 if (pages.Count == 1) { return; } 338 339 var currentPageIndex = pages.FindIndex(p => p.ID == currentPage.ID); 340 341 if (currentPage.ID == pages.First().ID) 342 { 343 nextPageText = pages[1].MenuText; 344 nextPageUrl = pages[1].GetPageHrefValue(); 345 } 346 else if (currentPage.ID == pages.Last().ID) 347 { 348 previousPageText = pages[currentPageIndex - 1].MenuText; 349 previousPageUrl = pages[currentPageIndex - 1].GetPageHrefValue(); 350 351 nextPageText = pages[0].MenuText; 352 nextPageUrl = pages[0].GetPageHrefValue(); 353 } 354 else 355 { 356 previousPageText = pages[currentPageIndex - 1].MenuText; 357 previousPageUrl = pages[currentPageIndex - 1].GetPageHrefValue(); 358 359 nextPageText = pages[currentPageIndex + 1].MenuText; 360 nextPageUrl = pages[currentPageIndex + 1].GetPageHrefValue(); 361 } 362 363 @RenderPreviousNextHtml(previousPageText, previousPageUrl, nextPageText, nextPageUrl) 364 } 365 366 @helper RenderPreviousNextHtml(string previousPageText, string previousPageUrl, string nextPageText, string nextPageUrl) 367 { 368 <div class="text-img-component wrap-md-offset-1-leftright"> 369 <div class="side-nav-previous-next-container"> 370 371 @if (!string.IsNullOrWhiteSpace(previousPageText)) 372 { 373 <a href="@previousPageUrl" class="side-nav-previous-next-items side-nav-previous-item"> 374 <div class="side-nav-previous-next-chevron"> 375 <i class="fa fa-chevron-left" aria-hidden="true"></i> 376 </div> 377 <div class="side-nav-previous-section"> 378 <span class="side-nav-previous-next-title">Previous Section</span> 379 <br /> 380 <span>@previousPageText</span> 381 </div> 382 </a> 383 } 384 385 @if (!string.IsNullOrWhiteSpace(nextPageText)) 386 { 387 <a href="@nextPageUrl" class="side-nav-previous-next-items side-nav-next-item"> 388 <div class="side-nav-next-section"> 389 <span class="side-nav-previous-next-title">Next Section</span> 390 <br /> 391 <span>@nextPageText</span> 392 </div> 393 <div class="side-nav-previous-next-chevron"> 394 <i class="fa fa-chevron-right"></i> 395 </div> 396 </a> 397 } 398 </div> 399 </div> 400 } 401 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 402 @using Dynamicweb.Content.Items; 403 @using PgwSeeds.Extensions.PGWSeedsNZ; 404 405 @*Helper blocks cannot be nested within each other.*@ 406 407 @helper LoadSprout(string className = "blue") 408 { 409 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 236.55 65.25"> 410 <defs> 411 <style> 412 </style> 413 </defs> 414 <g id="Layer_2" data-name="Layer 2"> 415 <g id="Layer_1-2" data-name="Layer 1"> 416 <path class="@className" d="M236.55,0H.76C50.88,0,94.64,27.4,115.23,62.92c0,0,3,5.25,6.09,0C141.9,27.4,185.67,0,235.79,0h.76"/> 417 </g> 418 </g> 419 </svg> 420 } 421 422 @using Dynamicweb.Frontend 423 424 @helper RenderBannerItem(ItemViewModel banner, string bannerLink) 425 { 426 var desktopImage = banner.GetFile("DesktopImage")?.Path; 427 var mobilImage = banner.GetFile("HandsetImage")?.Path; 428 var bannerImageAltText = banner.GetString("BannerImageAltText"); 429 var colourScheme = string.IsNullOrWhiteSpace(banner.GetString("ColourScheme")) ? "blue" : banner.GetString("ColourScheme").ToLower(); 430 var entireBannerClickable = banner.GetBoolean("EntireBannerClickable"); 431 var strapLineTop = banner.GetString("StraplineTop"); 432 var target = banner.GetBoolean("OpenLinkInNewTab") ? "_blank" : ""; 433 var clickable = !entireBannerClickable && !string.IsNullOrEmpty(bannerLink); 434 435 <div class="banner overflow-img-wrap"> 436 <img src="/Files/Templates/Designs/SeedsNZ/assets/img/1x1.png" alt="@bannerImageAltText" data-image-desktop="@desktopImage" data-image-handset="@mobilImage" class="img-srcset"> 437 <div class="strapline-wrap"> 438 <div class="max-width-wrap"> 439 <div class="wrap-md-offset-1-leftright @colourScheme"> 440 @if (!string.IsNullOrWhiteSpace(strapLineTop)) 441 { 442 443 if (clickable) 444 { 445 <a href="@bannerLink" target="@target"> 446 @RenderStraplineContent(banner, bannerLink) 447 </a> 448 } 449 else 450 { 451 @RenderStraplineContent(banner, bannerLink) 452 } 453 454 <div class="sprout"> 455 @LoadSprout(colourScheme) @*This function call is part of _LoadSprout.cshtml partial. Included in _BannerAndStrapline.cshtml*@ 456 </div> 457 } 458 </div> 459 </div> 460 </div> 461 </div> 462 } 463 464 @helper RenderStraplineContent(ItemViewModel banner, string bannerLink) 465 { 466 var strapLineTop = banner.GetString("StraplineTop"); 467 var strapLineBottom = banner.GetString("StraplineBottom"); 468 var straplineNotice = banner.GetString("StraplineNotice"); 469 var colourScheme = string.IsNullOrWhiteSpace(banner.GetString("ColourScheme")) ? "blue" : banner.GetString("ColourScheme").ToLower(); 470 471 <div class="strapline-inner-wrap relative" style="padding-bottom: 50px;"> 472 <h1 class="first-line truncate-text" data-lines-xs="1" data-lines-sm="1" data-lines-md="1" data-lines-lg="1">@strapLineTop</h1> 473 <h2 class="second-line truncate-text" data-lines-xs="1" data-lines-sm="1" data-lines-md="1" data-lines-lg="1" style="overflow-wrap: break-word;">@strapLineBottom</h2> 474 @if (!string.IsNullOrWhiteSpace(straplineNotice)) 475 { 476 <h3 class="notice-line truncate-text" data-lines-xs="1" data-lines-sm="1" data-lines-md="1" data-lines-lg="1" style="overflow-wrap: break-word;">@straplineNotice</h3> 477 } 478 @if (!string.IsNullOrEmpty(bannerLink)) 479 { 480 @LinkIcon(colourScheme) 481 } 482 483 </div> 484 } 485 486 @helper LinkIcon(string colourScheme) 487 { 488 <div class="banner-link"> 489 <div class="link-icon-wrap"> 490 <div class="animate-right"> 491 <i class="rounded-icon icon @colourScheme fa fa-angle-right"></i> 492 </div> 493 </div> 494 </div> 495 } 496 497 498 @helper RenderContent(Dynamicweb.Content.Page currentPage, Dynamicweb.Content.Page parentPage, List<Dynamicweb.Content.Page> sideNavPages, ItemList ctaList, int? currentChildPageId) 499 { 500 <div> 501 @inherits Dynamicweb.Rendering.ViewModelTemplate<PageViewModel> 502 @using Dynamicweb.Frontend 503 @{ 504 var desktopImage = Model.Item.GetFile("DesktopImage")?.Path; 505 var handsetImage = Model.Item.GetFile("HandsetImage")?.Path; 506 var bannerImageAltText = Model.Item.GetString("BannerImageAltText"); 507 var strapLineTop = Model.Item.GetString("StraplineTop"); 508 var strapLineBottom = Model.Item.GetString("StraplineBottom"); 509 var straplineNotice = Model.Item.GetString("StraplineNotice"); 510 var colourScheme = string.IsNullOrWhiteSpace(Model.Item.GetString("ColourScheme")) ? "blue" : Model.Item.GetString("ColourScheme").ToLower(); 511 var entireBannerClickable = Model.Item.GetBoolean("EntireBannerClickable"); 512 var bannerAndStraplineLink = Model.Item.GetString("BannerLink"); 513 var target = Model.Item.GetBoolean("OpenLinkInNewTab") ? "_blank" : ""; 514 var haveEntireBannerClickable = !string.IsNullOrEmpty(bannerAndStraplineLink) && entireBannerClickable; 515 var viewModel = Model.Item; 516 } 517 518 @if (!string.IsNullOrWhiteSpace(desktopImage)) 519 { 520 <div class="container-fluid banner-wrap"> 521 <div class="container-fluid banner-wrap item"> 522 @if (haveEntireBannerClickable) 523 { 524 <a href="@bannerAndStraplineLink" target="@target"> 525 @RenderBannerItem(viewModel, bannerAndStraplineLink) 526 </a> 527 } 528 else 529 { 530 @RenderBannerItem(viewModel, bannerAndStraplineLink) 531 } 532 </div> 533 </div> 534 } 535 536 </div> 537 538 var titleIcon = Model.Item.GetFile("TitleIcon")?.Path.IconImage(); 539 var displayBreadCrumbs = Model.Item.GetBoolean("DisplayBreadCrumb"); 540 541 <div class="container"> 542 <div class="col-sm-2 hidden-xs hidden-sm side-nav-container"> 543 @if (displayBreadCrumbs) 544 { 545 @*Please do not delete the div below, it used for spacing*@ 546 <div class="wrap-md-offset-1-leftright"> 547 <div class="row breadcrumbs-wrap clearfix"> 548 <ol class="breadcrumb clearfix"> 549 <li> 550 <a class="active"></a> 551 </li> 552 </ol> 553 </div> 554 </div> 555 } 556 @RenderSideNav(parentPage, sideNavPages, currentChildPageId) @*This function call is part of _SideNav.cshtml partial.*@ 557 @RenderCtaList(ctaList) @*This function call is part of _CtaList.cshtml partial.*@ 558 </div> 559 560 <div class="col-xs-12 col-md-10 side-nav-main-container"> 561 @if (displayBreadCrumbs) 562 { 563 @RenderNavigation(new 564 { 565 id = "breadcrumbs", 566 template = @".\breadcrumb.xslt", 567 expandmode = "Pathonly" 568 }) 569 } 570 @{ 571 var logoutClass = Model.CurrentUser.ID > 0 ? "logout-wrap" : string.Empty; 572 } 573 <div class="wrap-md-offset-1-leftright @logoutClass"> 574 <div class="row"> 575 <div class="col-xs-12 col-sm-9 col-md-9 title-component-wrap"> 576 <div class="va-middle"> 577 <h1 class="title">@Model.Item.GetValue("Title")</h1> 578 @if (!string.IsNullOrWhiteSpace(Model.Item.GetString("Subtitle"))) 579 { 580 <h2 class="subtitle">@Model.Item.GetString("Subtitle")</h2> 581 } 582 </div> 583 </div> 584 <div class="col-xs-12 col-sm-3 col-md-3"> 585 @if (Model.Item.GetBoolean("Display_Logout") && Model.CurrentUser.ID > 0) 586 { 587 <a href="/Admin/Public/ExtranetLogoff.aspx?redirect=@System.Web.HttpUtility.UrlEncode("/Default.aspx?Id=245")" class="border-link danger pull-right">LOGOUT</a> 588 } 589 <div class="product-logo-wrapper text-right-sm"> 590 @if (!string.IsNullOrWhiteSpace(titleIcon)) 591 { 592 <img src="@titleIcon" alt="@Model.Item.GetString("TitleIconAltText")"> 593 } 594 </div> 595 </div> 596 </div> 597 </div> 598 @RenderMobileSideNav(parentPage, sideNavPages, currentChildPageId, ctaList) @*This function call is part of _SideNav.cshtml partial.*@ 599 @Model.Placeholder("main") 600 @RenderPreviousNextPage(currentPage, parentPage) @*This function call is part of _PreviousNextPage.cshtml partial.*@ 601 @RenderMobileCtaList(ctaList) @*This function call is part of _CtaList.cshtml partial.*@ 602 @Model.Placeholder("CTA") 603 </div> 604 </div> 605 } 606 @RenderContent(currentPage, parentPage, siblingPages, ctaList, currentPageId) @*This function call is part of _MainContent partial.*@ 607 608 <!-- Footer --> 609 <footer class="container-fluid contact-sticky-tile"> 610 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 611 @using Dynamicweb.Frontend; 612 @using PgwSeeds.Constants.PGWSeedsNZ; 613 @using PgwSeeds.Extensions.PGWSeedsNZ; 614 615 @{ 616 var footerColumns = Model.Area.Item.GetItems("Columns") != null ? Model.Area.Item.GetItems("Columns").Take(4) : new List<ItemViewModel>(); 617 } 618 619 <div class="max-width-wrap"> 620 <!-- duplication for mobile --> 621 <div class="clearfix"> 622 <div class="clearfix"> 623 <div class="mobile-compact-contact-wrap hidden-md hidden-lg col-xs-12 col-sm-6"> 624 <a class="collapsed" data-target="#contact-footer-tile" role="button" data-toggle="collapse" aria-expanded="false" aria-controls="contact-footer-tile"> 625 <h4> 626 <span class="greeting">HI!</span> NEED TO GET IN TOUCH? 627 </h4> 628 <img src="/Files/Templates/Designs/SeedsNZ/assets/img/Phone.jpg" maxheight="120" 629 class="img-responsive img-circle" alt="General Contact" maxwidth="120"> 630 </a> 631 </div> 632 </div> 633 634 <div class="clearfix"> 635 <div class="col-sm-5 pull-right hidden-sm hidden-xs contact-footer-desktop"> 636 <div class="contact-tile-outer-wrap"> 637 <div class="contact-us-greeting"> 638 <div class="contact-us-greeting-inner"> 639 <a class="collapsed" data-target="#contact-footer-tile" role="button" data-toggle="collapse" aria-expanded="false" aria-controls="contact-footer-tile"> 640 <h4> 641 <span class="greeting">HI!</span> NEED TO GET IN TOUCH? 642 </h4> 643 </a> 644 </div> 645 </div> 646 </div> 647 </div> 648 </div> 649 650 651 <div class="hidden-lg hidden-md collapseable collapse" id="contact-footer-tile"> 652 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 653 @using PgwSeeds.Constants.PGWSeedsNZ; 654 @using PgwSeeds.Extensions.PGWSeedsNZ; 655 <div class="contact-tile-outer-wrap"> 656 <div class="contact-tile-wrap"> 657 <div class="row"> 658 <div class="col-xs-4 col-no-right-padding"> 659 <img src="/Files/Templates/Designs/SeedsNZ/assets/img/Phone.jpg" maxheight="120" class="img-responsive img-circle" alt="General Contact" maxwidth="120"> 660 </div> 661 <div class="col-xs-8"> 662 <h4>Contact Us</h4> 663 <p> 664 Sales &amp; General Enquiries<br> Nationwide 665 </p> 666 </div> 667 </div> 668 <ul class="list-inline text-uppercase"> 669 <li> 670 <span class="glyphicon glyphicon-earphone"></span> 671 <a href="tel:@Pageview.Area.Item["NZPhoneNumber"]"> 672 @Pageview.Area.Item["NZPhoneNumber"] 673 </a> 674 </li> 675 <li> 676 <span class="glyphicon glyphicon-envelope"></span> 677 <a href="mailto:@Pageview.Area.Item["Email"];"> 678 Email Me 679 </a> 680 </li> 681 682 </ul> 683 </div> 684 <a class="animate-right" href="Default.aspx?ID=@GetPageIdByNavigationTag(NavigationTags.ContactUs)"> 685 <span>Contact your local rep</span> 686 <span class="rounded-icon icon fa fa-angle-right"></span> 687 </a> 688 </div> 689 690 691 </div> 692 </div> 693 <!-- duplication for mobile --> 694 <div class="row"> 695 <div class="col-md-6 col-sm-12 link-tiles-wrap"> 696 <div class="row footer-links"> 697 @foreach (var aColumn in footerColumns) 698 { 699 var subLinks = aColumn.GetItems("Sub_Links"); 700 <div class="col-md-3 col-sm-3 col-xs-6"> 701 <strong>@aColumn.GetString("Title")</strong> 702 @if (subLinks.Any()) 703 { 704 <ul class="list-unstyled"> 705 @foreach (var link in subLinks) 706 { 707 var hrefValue = link.GetBoolean("Is_Download_Link") ? link.GetString("Link").GetDownloadPath() : link.GetString("Link"); 708 <li> 709 <a href="@hrefValue">@link.GetString("Name")</a> 710 </li> 711 } 712 </ul> 713 } 714 </div> 715 } 716 </div> 717 <div class="row"> 718 <div class="col-xs-6 col-md-12"> 719 <div class="member-login va-middle hidden-sm hidden-xs"> 720 721 <a href="@Pageview.Area.Item["Retail_Login"]" target="_blank" class="btn btn-default">Retail Login</a> 722 </div> 723 </div> 724 725 <div class="member-login va-middle hidden-md hidden-lg col-xs-6"> 726 727 @if (Model.CurrentUser.ID == 0) 728 { 729 <a href="Default.aspx?ID=@GetPageIdByNavigationTag(NavigationTags.LoginPage)" class="member-login btn btn-default">Retail Login</a> 730 } 731 else 732 { 733 <a href="Default.aspx?ID=@GetPageIdByNavigationTag(NavigationTags.MemberHome)" class="member-login btn btn-default">Retail Home</a> 734 } 735 </div> 736 </div> 737 </div> 738 <div class="col-sm-5 pull-right hidden-sm hidden-xs"> 739 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 740 @using PgwSeeds.Constants.PGWSeedsNZ; 741 @using PgwSeeds.Extensions.PGWSeedsNZ; 742 <div class="contact-tile-outer-wrap"> 743 <div class="contact-tile-wrap"> 744 <div class="row"> 745 <div class="col-xs-4 col-no-right-padding"> 746 <img src="/Files/Templates/Designs/SeedsNZ/assets/img/Phone.jpg" maxheight="120" class="img-responsive img-circle" alt="General Contact" maxwidth="120"> 747 </div> 748 <div class="col-xs-8"> 749 <h4>Contact Us</h4> 750 <p> 751 Sales &amp; General Enquiries<br> Nationwide 752 </p> 753 </div> 754 </div> 755 <ul class="list-inline text-uppercase"> 756 <li> 757 <span class="glyphicon glyphicon-earphone"></span> 758 <a href="tel:@Pageview.Area.Item["NZPhoneNumber"]"> 759 @Pageview.Area.Item["NZPhoneNumber"] 760 </a> 761 </li> 762 <li> 763 <span class="glyphicon glyphicon-envelope"></span> 764 <a href="mailto:@Pageview.Area.Item["Email"];"> 765 Email Me 766 </a> 767 </li> 768 769 </ul> 770 </div> 771 <a class="animate-right" href="Default.aspx?ID=@GetPageIdByNavigationTag(NavigationTags.ContactUs)"> 772 <span>Contact your local rep</span> 773 <span class="rounded-icon icon fa fa-angle-right"></span> 774 </a> 775 </div> 776 777 778 </div> 779 </div> 780 </div> 781 </footer> 782 <div class="visible-lg-block visible-md-block visible-sm-block visible-xs-block go-to-top hidden"> 783 <div class="triangle"></div> 784 TOP 785 </div> 786 </div> 787 788 <script src="https://code.jquery.com/jquery.min.js"></script> 789 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.min.js"></script> 790 <!-- Custom handling of unobtrusive validation css classes --> 791 <script src="Files/Templates/Designs/Common/assets/js/validation.custom.js"></script> 792 793 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"></script> 794 795 @Scripts.Render("~/bundles/custom/pgwseedsnz") 796 @RenderSnippet("JavaScriptBottom") 797 </body> 798 </html>