Uddelinger
Hedeselskabets tidligere uddelinger
Via vores overskud uddeler vi støtte til både store, visionære projekter og mindre, lokalt forankrede initiativer, der drives af passion og engagement. Herunder ser du et udpluk af de mange forskellige projekter vi har støttet gennem vores uddelinger.
Samlet liste med alle uddelinger:
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Featured_Lists.cshtml" System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 70 at Dalgas.Custom.Services.ContentRelationService.GetCaseProjectsByCurrentFunding(Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 367 at CompiledRazorTemplates.Dynamic.RazorEngine_ca50262d2d254e3294ae8aeb89dedafb.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 233 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.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 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 System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Text.RegularExpressions 6 @using Dalgas.Custom.Models.Content 7 @using Dalgas.Custom.Services 8 @using Dalgas.Custom.ViewModels.UI 9 @using Dynamicweb.Content 10 @using Dynamicweb.Core.Encoders 11 @using Dynamicweb.Frontend 12 @using Dynamicweb.Ecommerce.ProductCatalog 13 @using Page = Dynamicweb.Content.Page 14 @using System 15 @using System.Collections.Generic 16 @using System.Linq 17 @using Dalgas.Custom.ViewModels.UI 18 @using Dynamicweb.Content 19 @using Dynamicweb.Ecommerce.ProductCatalog 20 @using Dynamicweb.Frontend 21 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 22 23 @*TODO: Move these functions onto the model *@ 24 25 @functions 26 { 27 28 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 29 { 30 var returnValues = new List<string> 31 { 32 $"item_{model.Item.SystemName.ToLower()}" 33 }; 34 35 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 36 { 37 returnValues.Add("dalgas-section-first-on-page"); 38 } 39 40 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 41 42 if (!string.IsNullOrEmpty(overwriteTheme)) 43 { 44 sectionBackgroundTheme = overwriteTheme; 45 } 46 47 // Add theme class if it exists 48 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 49 { 50 if (sectionBackgroundTheme.Contains("default")) 51 { 52 returnValues.Add("theme theme-light"); 53 } 54 else 55 { 56 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 57 } 58 } 59 60 // Determine if top padding should be removed 61 62 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 63 64 returnValues.Add("pb-6"); 65 if (removeTopPadding != "enable") 66 { 67 returnValues.Add("pt-6"); 68 } 69 70 return string.Join(" ", returnValues); 71 } 72 73 } 74 75 76 @{ 77 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 78 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 79 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 80 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 81 82 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 83 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 84 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 85 bool hasHeading = headings.Any(); 86 bool hasButton = buttons.Any(); 87 88 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 89 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 90 91 var sectionClassList = GetSectionClassList(Model); 92 93 var image = string.Empty; 94 var imageParameters = new Dictionary<string, object>(); 95 96 string layout = string.Empty; 97 Boolean enableFifthElement = false; 98 if (Model?.Item != null) 99 { 100 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 101 102 if (paragraphLayout != null) 103 { 104 layout = paragraphLayout.GetString("Layout"); 105 106 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 107 } 108 } 109 110 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 111 { 112 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 113 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 114 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 115 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 116 string cssPosition = $"{xPos}% {yPos}%"; 117 imageParameters.Add("style", "object-position:" + cssPosition); 118 } 119 120 LinkViewModel imageLink = new LinkViewModel(); 121 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 122 { 123 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 124 } 125 126 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 127 } 128 129 130 @{ 131 ClassList rowWidthClasslist = new ClassList("col-12"); 132 ClassList colClasslist = new ClassList("js-content-container content-container col-12 mb-4 dalgas-list-card"); 133 ClassList cardClasslist = new ClassList("pt-3"); 134 string imageAspectRatio = string.Empty; 135 string newsModolusClasslist = string.Empty; 136 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 137 138 FileViewModel featuredListImage = new FileViewModel(); 139 List<FileViewModel> imageList = new List<FileViewModel>(); // List to hold images for the modal 140 IList<ItemViewModel> featureListItems = Model.Item?.GetItem("Content")?.GetItems("PageSelector") ?? Enumerable.Empty<ItemViewModel>().ToList(); 141 bool hasFeatureListItems = featureListItems.Any(); 142 143 int.TryParse(Dynamicweb.Context.Current.Request["PageSize"], out int pageSize); 144 string showAllUrl = $"{Pageview.SearchFriendlyUrl}?PageSize=999"; 145 146 bool showAll = Model.Item.GetItem("Content").GetBoolean("ShowAll"); 147 bool showFacets = Model.Item.GetItem("Content").GetBoolean("ShowFacets"); 148 bool showSearch = Model.Item.GetItem("Content").GetBoolean("ShowSearch"); 149 bool allowAllQueryItems = showFacets || showSearch; 150 showAll = allowAllQueryItems || showAll; 151 int numberOfItemsToShow = 999; 152 int rowsPerPage = 3; 153 154 155 List<FacetOption> selectedFacetOptions = new List<FacetOption>(); 156 if (hasFeatureListItems) 157 { 158 allowAllQueryItems = false; 159 } 160 161 QueryResult queryResult = new QueryResult(); 162 string contentType = Model.Item.GetItem("Content").GetString("FeatureOptions"); 163 int totaleCount = 0; 164 165 switch (contentType) 166 { 167 case "articles": 168 numberOfItemsToShow = 4; 169 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 170 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 171 172 if (!hasFeatureListItems) 173 { 174 queryResult = showAll ? ContentRelationService.Instance.GetAllKnowledge(numberOfItemsToShow) : ContentRelationService.Instance.GetKnowledgeByCurrentPage(numberOfItemsToShow); 175 } 176 177 imageAspectRatio = "ratio-4x3"; 178 colClasslist.Add("col-md-3"); 179 break; 180 case "events": 181 numberOfItemsToShow = 3; 182 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 183 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 184 if (!hasFeatureListItems) 185 { 186 queryResult = showAll ? ContentRelationService.Instance.GetAllEvents(numberOfItemsToShow) : ContentRelationService.Instance.GetEventsByCurrentPage(numberOfItemsToShow); 187 } 188 189 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 190 colClasslist.Add("col-md-4"); 191 break; 192 case "cases": 193 numberOfItemsToShow = 3; 194 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 195 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 196 if (!hasFeatureListItems) 197 { 198 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 199 { 200 queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentFunding(numberOfItemsToShow); 201 } 202 else 203 { 204 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 205 } 206 207 } 208 209 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 210 imageAspectRatio = "ratio-16x9"; 211 colClasslist.Add("col-md-4 d-flex flex-column"); 212 break; 213 case "news": 214 numberOfItemsToShow = 3; 215 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 216 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 217 if (!hasFeatureListItems) 218 { 219 queryResult = showAll ? ContentRelationService.Instance.GetAllNews(numberOfItemsToShow) : ContentRelationService.Instance.GetNewsByCurrentPage(numberOfItemsToShow); 220 } 221 222 rowWidthClasslist.Add("col-lg-11 ms-auto"); 223 colClasslist.Add("mb-5"); 224 break; 225 case "projects": 226 numberOfItemsToShow = 3; 227 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 228 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 229 if (!hasFeatureListItems) 230 { 231 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 232 { 233 queryResult = ContentRelationService.Instance.GetCaseProjectsByCurrentFunding(numberOfItemsToShow); 234 } 235 else 236 { 237 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentPage(numberOfItemsToShow); 238 } 239 } 240 241 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 242 imageAspectRatio = "ratio-16x9"; 243 colClasslist.Add("col-md-4 d-flex flex-column"); 244 break; 245 case "related-services": 246 numberOfItemsToShow = 6; 247 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 248 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 249 if (!hasFeatureListItems) 250 { 251 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 252 } 253 254 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 255 imageAspectRatio = "ratio-16x9"; 256 colClasslist.Add("col-md-4 d-flex flex-column"); 257 break; 258 } 259 260 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 261 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 262 263 List<string> pageIds = new List<string>(); 264 if (hasFeatureListItems) 265 { 266 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 267 } 268 else if (queryResult.Results.Any()) 269 { 270 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 271 } 272 273 string strTitle = string.Empty; 274 string strLink = string.Empty; 275 string strSummary = string.Empty; 276 string strImage = string.Empty; 277 string strType = string.Empty; 278 string badgeTheme = string.Empty; 279 DateTime strDate = new DateTime(); 280 } 281 282 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 283 { 284 int loopCounter = 1; // Initialize loop counter for each group 285 286 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 287 <div class="container-xl"> 288 <div class="row justify-content-center"> 289 <div class="@rowWidthClasslist"> 290 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 291 292 @if (hasLead || hasText || hasHeading) 293 { 294 <div class="js-content-container content-container col-12 mb-3"> 295 296 <div class="col-lg-6"> 297 <span> 298 @string.Join("", headings.Select(h => h.ToString())) 299 </span> 300 301 @if (!string.IsNullOrEmpty(lead)) 302 { 303 <p class="lead">@lead</p> 304 } 305 306 @text 307 308 </div> 309 </div> 310 } 311 312 @{ 313 ButtonViewModel btnViewResult = new ButtonViewModel 314 { 315 Text = Translate("View more"), 316 Type = ButtonType.Link, 317 DisplayType = ButtonDisplayType.Link 318 }; 319 320 if (showAll) 321 { 322 totaleCount = queryResult.TotalCount; 323 } 324 325 <a href="@showAllUrl" class="d-none">show all</a> 326 <form method="post" action="@Pageview.SearchFriendlyUrl" data-response-target-element="content" tabindex="-1" aria-hidden="false" class="d-flex js-dalgas-facets-form dalgas-facets-form" data-total-count="@totaleCount" data-page-size="@numberOfItemsToShow"> 327 <input type="hidden" name="LayoutTemplate" value="Designs/Swift/Swift_PageClean.cshtml"/> 328 <input type="hidden" name="PageNum" value="@pageNum"/> 329 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 330 @if (allowAllQueryItems) 331 { 332 if (showFacets) 333 { 334 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 335 { 336 foreach (Facet facet in facetGroup.Facets) 337 { 338 string showClass = " show"; 339 string ariaExpanded = "true"; 340 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 341 342 343 if (facet.Options.Any()) 344 { 345 int selectedFacetsInGroup = 0; 346 347 foreach (FacetOption option in facet.Options) 348 { 349 if (option.Selected) 350 { 351 selectedFacetsInGroup++; 352 } 353 } 354 355 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 356 357 <div class="dropdown js-facets-selector"> 358 <button class="btn dropdown-toggle" type="button" id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" aria-expanded="false"> 359 @label 360 </button> 361 <div data-lenis-prevent class="dropdown-menu p-3" aria-labelledby="FacetGroup_@facetGroupId" style="min-width: 280px"> 362 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 363 { 364 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 365 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 366 string selected = facetOption.Selected ? "checked" : string.Empty; 367 string facetValue = Uri.UnescapeDataString(facetOption.Value); 368 string optionValue = $"[{facetValue}]"; 369 370 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 371 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 372 373 <label class="form-check mt-1" @disabled> 374 <input type="checkbox" onclick="custom.QueryResult.update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 375 <span class="form-check-label d-flex align-items-center"> 376 <span class="flex-fill">@facetLabel </span> 377 <small class="opacity-85">@facetOption.Count</small> 378 </span> 379 </label> 380 381 if (facetOption.Selected) 382 { 383 FacetOption selectFacetOption = facetOption; 384 selectFacetOption.Name = facet.QueryParameter; 385 selectedFacetOptions.Add(selectFacetOption); 386 } 387 } 388 </div> 389 </div> 390 } 391 } 392 } 393 394 if (!string.IsNullOrEmpty(searchTerm)) 395 { 396 selectedFacetOptions.Add(new FacetOption() 397 { 398 Count = 1, 399 Label = searchTerm, 400 Name = "q", 401 Selected = true, 402 Value = searchTerm 403 }); 404 } 405 } 406 407 if (showSearch) 408 { 409 <div class="type-ahead-dropdown"> 410 <div class="position-relative suggest-form"> 411 <span class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 412 @ReadFile(iconPath + "search.svg") 413 </span> 414 415 <input id="searchField_@Model.Id" 416 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 417 type="search" 418 placeholder="@Translate("Search here")" 419 autocomplete="off" 420 maxlength="255" 421 name="q" 422 value="@searchTerm" 423 data-original="@searchTerm"> 424 425 <button type="button" 426 onclick="custom.QueryResult.clearSearchField(event)" 427 class="btn h-100 icon-2 reset-search" 428 aria-label="@Translate("Clear search")" 429 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 430 @ReadFile(iconPath + "x.svg") 431 </button> 432 </div> 433 </div> 434 <input type="submit" onclick="custom.QueryResult.update(event)" class="btn btn-primary" value="@Translate("Search", "Search")"> 435 } 436 } 437 </form> 438 439 if (showFacets && selectedFacetOptions.Any()) 440 { 441 <div class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 442 @foreach (FacetOption facetOption in selectedFacetOptions) 443 { 444 string facetValue = Uri.UnescapeDataString(facetOption.Value); 445 string optionValue = $"[{facetValue}]"; 446 <input class="visually-hidden" id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" name="@facetOption.Name" onclick="custom.QueryResult.deselectFacetOption(event)" type="checkbox" value="@optionValue" title="@facetOption.Label" checked> 447 <label class="badge theme border border-dark text-nowrap" for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 448 <span class="text-nowrap">@(facetOption.Label)</span> 449 <span class="icon-2 ms-2"> 450 @ReadFile(iconPath + "x.svg") 451 </span> 452 </label> 453 } 454 455 @if (selectedFacetOptions.Count >= 3) 456 { 457 <input class="visually-hidden" id="ClearAll" name="ClearAll" onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" title="" checked> 458 <label class="badge theme border border-dark dalgas-btn-clear-all" for="ClearAll"> 459 <span class="text-nowrap">@Translate("Clear all")</span> 460 <span class="icon-2 ms-2"> 461 @ReadFile(iconPath + "x.svg") 462 </span> 463 </label> 464 } 465 </div> 466 }} 467 468 @if (pageIds.Any() == false) 469 { 470 <div class="mt-4">@Translate("Your search returned no results...")</div> 471 } 472 473 <div class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 474 @foreach (string pageId in pageIds) 475 { 476 if (!int.TryParse(pageId, out int intPageId)) 477 { 478 continue; 479 } 480 481 Page page = Services.Pages.GetPage(intPageId); 482 483 if (page == null) 484 { 485 continue; 486 } 487 488 strTitle = page.Item["Title"]?.ToString(); 489 strSummary = page.Item["Summary"]?.ToString(); 490 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 491 btnViewResult.Id = "pageId_" + page.ID; 492 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 493 if (page.Item["Date"] != null) 494 { 495 strDate = (DateTime) page.Item["Date"]; 496 } 497 498 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 499 if (jpgIndex != -1) 500 { 501 strImage = strImage.Substring(0, jpgIndex + 4); 502 } 503 504 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 505 imageList.Add(featuredListImage); 506 507 508 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 509 { 510 badgeTheme = ""; 511 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 512 { 513 newsModolusClasslist = "col-lg-5"; 514 imageAspectRatio = "ratio-16x9"; 515 if (showAll) 516 { 517 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 518 } 519 } 520 else 521 { 522 newsModolusClasslist = "col-lg-3"; 523 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 524 if (showAll) 525 { 526 imageAspectRatio = "ratio-3x4"; 527 } 528 } 529 530 loopCounter++; 531 } 532 533 534 <div class="@colClasslist @newsModolusClasslist"> 535 536 <a href="@btnViewResult.Url"> 537 <figure class="ratio @imageAspectRatio mb-0"> 538 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 539 </figure> 540 </a> 541 542 <div class="@cardClasslist"> 543 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 544 { 545 badgeTheme = "mb-5"; 546 } 547 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 548 { 549 if (strDate != null) 550 { 551 var date = strDate; 552 var formattedDate = date.ToLongDateString(); 553 if (date.TimeOfDay.ToString() != "00:00:00") 554 { 555 formattedDate = formattedDate + " - " +date.ToShortTimeString(); 556 } 557 558 <div class="badge mb-3 @badgeTheme"> 559 @formattedDate 560 </div> 561 } 562 } 563 564 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 565 { 566 var selectedValues = page.Item["Type"].ToString(); 567 <div class="badge mb-5 mr-3 @badgeTheme"> 568 @ContentService.Instance.GetLabelForCaseType(selectedValues) 569 </div> 570 } 571 572 @{ 573 var badgeParms = new Dictionary<string, object>(); 574 badgeParms.Add("pageId", page.ID); 575 } 576 @RenderPartial("UserInterfaceModels/badge.cshtml", Model, badgeParms) 577 578 <h4> 579 <a href="@btnViewResult.Url" class="text-decoration-none"> 580 @strTitle 581 </a> 582 </h4> 583 @if (strSummary != null) 584 { 585 <span class="small">@strSummary</span> 586 } 587 588 <div class="mt-2"> 589 @RenderModel(btnViewResult) 590 </div> 591 </div> 592 </div> 593 } 594 </div> 595 596 @if (showAll && totaleCount > numberOfItemsToShow) 597 { 598 <div class="row"> 599 <div class="col-12 text-center"> 600 <button onclick="custom.QueryResult.getNextPage(event)" class="btn btn-primary">@Translate("Vis flere")</button> 601 </div> 602 </div> 603 } 604 605 @if (hasButton) 606 { 607 <div class="js-content-container content-container col-12"> 608 609 <div class="d-flex flex-wrap gap-3"> 610 @foreach (ButtonViewModel button in buttons) 611 { 612 @button 613 } 614 </div> 615 616 </div> 617 } 618 619 </div> 620 </div> 621 </div> 622 </div> 623 @if (enableFifthElement) 624 { 625 <div class="fifth-element-section-container"> 626 <div class="fifth-element size-2 bottom-0 ob-50 right-0 @fifthElementTheme"> 627 @ReadFile(fifthElementIconPath + "sun.svg") 628 </div> 629 </div> 630 } 631 </section> 632 } 633 else 634 { 635 if (Pageview.IsVisualEditorMode) 636 { 637 <div class="container-xl alert alert-danger" role="alert"> 638 This <strong>@Model.Item.SystemName</strong> is empty 639 </div> 640 } 641 } 642

Medlemsudvalget
Hedeselskabets medlemsudvalg er nedsat af bestyrelsen til at varetage medlemmernes interesser og arbejder blandt andet med at kortlægge mulighederne for at støtte projekter og aktiviteter i overensstemmelse med Hedeselskabets formålsparagraf.
Medlemsudvalget består af:
- Janus Skak Olufsen, formand for repræsentantskabet og formand for medlemsudvalget
- John Nielsen, næstformand for repræsentantskabet
- Bolette van Ingen Bro, udpeget af Hedeselskabets bestyrelse
Du er altid velkommen til at fremsende forslag til mulige projekter til os på info@hedeselskabet.dk
Andre støtteformer
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Funding.cshtml" System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 70 at Dalgas.Custom.Services.ContentRelationService.GetAllFundings(Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 704 at CompiledRazorTemplates.Dynamic.RazorEngine_d59a25cd9b114037a1c49ae2df540c8b.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Funding.cshtml:line 144 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.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 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 System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Text.RegularExpressions 6 @using Dalgas.Custom.Models.Content 7 @using Dalgas.Custom.Services 8 @using Dalgas.Custom.ViewModels.UI 9 @using Dynamicweb.Content 10 @using Dynamicweb.Core.Encoders 11 @using Dynamicweb.Frontend 12 @using Dynamicweb.Ecommerce.ProductCatalog 13 @using Page = Dynamicweb.Content.Page 14 @using System 15 @using System.Collections.Generic 16 @using System.Linq 17 @using Dalgas.Custom.ViewModels.UI 18 @using Dynamicweb.Content 19 @using Dynamicweb.Ecommerce.ProductCatalog 20 @using Dynamicweb.Frontend 21 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 22 23 @*TODO: Move these functions onto the model *@ 24 25 @functions 26 { 27 28 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 29 { 30 var returnValues = new List<string> 31 { 32 $"item_{model.Item.SystemName.ToLower()}" 33 }; 34 35 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 36 { 37 returnValues.Add("dalgas-section-first-on-page"); 38 } 39 40 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 41 42 if (!string.IsNullOrEmpty(overwriteTheme)) 43 { 44 sectionBackgroundTheme = overwriteTheme; 45 } 46 47 // Add theme class if it exists 48 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 49 { 50 if (sectionBackgroundTheme.Contains("default")) 51 { 52 returnValues.Add("theme theme-light"); 53 } 54 else 55 { 56 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 57 } 58 } 59 60 // Determine if top padding should be removed 61 62 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 63 64 returnValues.Add("pb-6"); 65 if (removeTopPadding != "enable") 66 { 67 returnValues.Add("pt-6"); 68 } 69 70 return string.Join(" ", returnValues); 71 } 72 73 } 74 75 76 @{ 77 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 78 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 79 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 80 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 81 82 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 83 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 84 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 85 bool hasHeading = headings.Any(); 86 bool hasButton = buttons.Any(); 87 88 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 89 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 90 91 var sectionClassList = GetSectionClassList(Model); 92 93 var image = string.Empty; 94 var imageParameters = new Dictionary<string, object>(); 95 96 string layout = string.Empty; 97 Boolean enableFifthElement = false; 98 if (Model?.Item != null) 99 { 100 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 101 102 if (paragraphLayout != null) 103 { 104 layout = paragraphLayout.GetString("Layout"); 105 106 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 107 } 108 } 109 110 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 111 { 112 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 113 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 114 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 115 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 116 string cssPosition = $"{xPos}% {yPos}%"; 117 imageParameters.Add("style", "object-position:" + cssPosition); 118 } 119 120 LinkViewModel imageLink = new LinkViewModel(); 121 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 122 { 123 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 124 } 125 126 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 127 } 128 129 130 @{ 131 ClassList rowWidthClasslist = new ClassList(string.Empty); 132 ClassList colClasslist = new ClassList("js-content-container content-container col-12 mb-4"); 133 ClassList cardClasslist = new ClassList(string.Empty); 134 ClassList imageCardClasslist = new ClassList(string.Empty); 135 string imageAspectRatio = string.Empty; 136 string newsModolusClasslist = string.Empty; 137 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 138 139 FileViewModel featuredListImage = new FileViewModel(); 140 141 int numberOfItemsToShow = 999; 142 143 QueryResult queryResult = new QueryResult(); 144 queryResult = ContentRelationService.Instance.GetAllFundings(numberOfItemsToShow); 145 146 List<string> pageIds = new List<string>(); 147 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 148 149 string strTitle = string.Empty; 150 string strSummary = string.Empty; 151 string strImage = string.Empty; 152 string badgeTheme = string.Empty; 153 DateTime strDate = new DateTime(); 154 } 155 156 @{ 157 string contentType = Model.Item.GetItem("Content").GetString("Layout"); 158 159 switch (contentType) 160 { 161 case "simple": 162 rowWidthClasslist.Add("col-md-11 ms-auto"); 163 cardClasslist.Add("pt-3"); 164 165 break; 166 case "extended": 167 rowWidthClasslist.Add("col-md-10"); 168 colClasslist.Add("d-flex flex-column flex-md-row col-6 mb-6 justify-content-between"); 169 imageCardClasslist.Add("col-12 col-md-6"); 170 imageAspectRatio = "ratio-1x1"; 171 cardClasslist.Add("col-12 col-md-5 p-txt-container"); 172 break; 173 } 174 } 175 176 177 @if (queryResult.Results.Any()) 178 { 179 int loopCounter = 1; // Initialize loop counter for each group 180 181 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 182 <div class="container-xl"> 183 <div class="row justify-content-center"> 184 <div class="@rowWidthClasslist"> 185 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 186 187 @if (hasLead || hasText || hasHeading) 188 { 189 <div class="js-content-container content-container col-12 mb-3"> 190 191 <div class="col-lg-8"> 192 <span> 193 @string.Join("", headings.Select(h => h.ToString())) 194 </span> 195 196 @if (!string.IsNullOrEmpty(lead)) 197 { 198 <p class="lead">@lead</p> 199 } 200 201 @text 202 203 </div> 204 </div> 205 } 206 207 @{ 208 ButtonViewModel btnViewResult = new ButtonViewModel 209 { 210 Text = Translate("View more"), 211 Type = ButtonType.Link, 212 DisplayType = ButtonDisplayType.Link 213 }; 214 } 215 216 <div class="row @(contentType == "simple" ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 217 218 @foreach (string pageId in pageIds) 219 { 220 if (int.TryParse(pageId, out int intPageId) && intPageId == PageView.Current().Page.ID) 221 { 222 continue; 223 } 224 225 switch (contentType) 226 { 227 case "simple": 228 229 if (loopCounter % 3 == 2) 230 { 231 newsModolusClasslist = "col-lg-5"; 232 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 233 } 234 else 235 { 236 newsModolusClasslist = "col-lg-3"; 237 imageAspectRatio = "ratio-3x4"; 238 } 239 240 break; 241 case "extended": 242 243 btnViewResult.DisplayType = ButtonDisplayType.Primary; 244 if (loopCounter % 2 != 0) 245 { 246 imageCardClasslist.Add("order-md-last"); 247 } 248 else 249 { 250 imageCardClasslist.Remove("order-md-last"); 251 } 252 253 break; 254 } 255 256 Page page = Services.Pages.GetPage(intPageId); 257 258 if (page == null) 259 { 260 continue; 261 } 262 263 strTitle = page.Item["Title"]?.ToString(); 264 strSummary = page.Item["Summary"]?.ToString(); 265 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 266 btnViewResult.Id = "pageId_" + page.ID; 267 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 268 269 if (page.Item["ApplicationDeadline"] != null) 270 { 271 strDate = (DateTime) page.Item["ApplicationDeadline"]; 272 } 273 274 ButtonViewModel btnhowToApplyLink = new ButtonViewModel 275 { 276 Text = Translate("This is how you apply"), 277 Type = ButtonType.Link, 278 DisplayType = ButtonDisplayType.Secondary, 279 Url = page.Item["HowToApplyLink"]?.ToString() 280 }; 281 282 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 283 284 <div class="@colClasslist @newsModolusClasslist"> 285 286 <div class="@imageCardClasslist"> 287 288 <figure class="ratio @imageAspectRatio @(loopCounter == 1 && contentType == "extended" ? "mb-lg-6" : "mb-0")"> 289 @if (loopCounter == 1 && contentType == "extended") 290 { 291 <div class="fifth-element size-2 d-none d-lg-flex bottom-lg-0 right-0 ob-lg-50 @fifthElementTheme"> 292 <div> 293 <span>@ReadFile(fifthElementIconPath + "lotus.svg")</span> 294 <span>@ReadFile(fifthElementIconPath + "snow.svg")</span> 295 </div> 296 </div> 297 } 298 <a href="@btnViewResult.Url"> 299 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 300 </a> 301 </figure> 302 303 </div> 304 305 <div class="@cardClasslist"> 306 307 @{ 308 if (strDate != null && page.Item["ApplicationDeadline"] != null) 309 { 310 var date = strDate; 311 var formattedDate = date.ToShortDateString(); 312 313 <div class="badge mb-4 @badgeTheme"> 314 @Translate("Application deadline", "Ansøgningsfrist:") @formattedDate 315 </div> 316 } 317 } 318 319 <h3 class="h4"> 320 <a href="@btnViewResult.Url" class="text-decoration-none"> 321 @strTitle 322 </a> 323 </h3> 324 @if (strSummary != null) 325 { 326 <span class="small">@strSummary</span> 327 } 328 329 @if (contentType == "extended") 330 { 331 <div class="mt-4 d-flex flex-row flex-wrap gap-3"> 332 @RenderModel(btnViewResult) 333 @RenderModel(btnhowToApplyLink) 334 </div> 335 } 336 else 337 { 338 <div class="mt-2 d-flex flex-row flex-wrap gap-3"> 339 @RenderModel(btnViewResult) 340 </div> 341 } 342 </div> 343 </div> 344 loopCounter++; 345 } 346 </div> 347 348 @if (hasButton) 349 { 350 <div class="js-content-container content-container col-12 mt-3"> 351 352 <div class="d-flex flex-wrap gap-3"> 353 @foreach (ButtonViewModel button in buttons) 354 { 355 @button 356 } 357 </div> 358 359 </div> 360 } 361 362 </div> 363 </div> 364 </div> 365 </div> 366 367 </section> 368 } 369 else 370 { 371 if (Pageview.IsVisualEditorMode) 372 { 373 <div class="container-xl alert alert-danger" role="alert"> 374 This <strong>@Model.Item.SystemName</strong> is empty 375 </div> 376 } 377 } 378
Dine medlemsfordele
Hedeselskabets forening er et fællesskab med dedikerede medlemmer med interesse for benyttelse og beskyttelse af naturen. Der er mange gode grunde til at være medlem af Hedeselskabet – her har du fire af dem:
Netværk
Som medlem bliver du en del af et stærkt, fagligt interessefællesskab, som består af en bred kreds af fagfolk, beslutningstagere, studerende og andre med interesse for natur, klima, bæredygtighed og biodiversitet.
Viden
Som medlem modtager du Hedeselskabets magasin VÆKST fire gange årligt. Du får i VÆKST ny viden og faglig indsigt i naturpleje, klimatilpasning, bæredygtighed og biodiversitet samt adgang til fysiske og digitale arrangementer og digitale platforme.
Oplevelser
Som medlem kan du deltage i Hedeselskabets mange arrangementer. De er gratis for medlemmer og giver faglig viden, indsigt, netværk med ligesindede samt mulighed for at deltage på en årlig jagt og en fisketur.
Indflydelse
Som medlem kan du foreslå, hvilke projekter Hedeselskabet skal støtte med midler fra medlemspuljen, ligesom du selv kan søge midler. Du har også mulighed for at stemme, når der er valg til Hedeselskabets repræsentantskab, som er vores øverste myndighed.