New column

Here comes the sun

Hjemmets første indtryk

Dørmåtte med flettede detaljer

Når De træder over dørtrinnet ind i hjemmet, bør indtrykket være roligt og venligt om et varmt kram af Deres kære, synes Anna. "Glædeligt er det, når praktik er skønt at se på," tilføjer hun om søstrenes nye dørmåtte.

Hjemmets første indtryk

Dørmåtte med flettede detaljer

Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. 

Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. 

Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. Her skal der bare fyldes ud. 

New column

New column

HEj med jer

Vertical navigation

Your stories

The best reviews are customer reviews! In these user stories you can read about what kind of equipment, bikes or tools other bike enthusiast like you recommend.

New column

Big text here

B

 

Race though the woods

Use the right equipment

Discover more

No items found

Sorry, that filter combination has no results.
Please try different criteria

Cras eu massa

Suspendisse vitae eleifend ante

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ullamcorper risus dui. Maecenas eu urna congue, porttitor neque id, aliquet purus. Vestibulum mattis varius tempor. Praesent mattis scelerisque dui, id euismod dolor scelerisque in. Cras eu massa vestibulum, feugiat augue a, elementum mauris. Curabitur egestas ipsum enim, vel fringilla magna consequat sit amet. Suspendisse aliquam gravida tellus a tincidunt. Proin nec felis eros. Nulla placerat orci ut fermentum lobortis.

Left text

Pellentesque sagittis augue eget leo sodales

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor facilisis enim, in tincidunt felis bibendum a. Etiam ligula sem, hendrerit vitae dolor in, pretium suscipit nibh. Nullam malesuada, magna a volutpat porta, augue arcu consequat tortor, ac varius augue nulla in ante. Nulla posuere neque tellus, et tempus nunc pulvinar ut. Ut vitae luctus erat. Vestibulum mattis elit sapien, euismod elementum sem semper ac. Aliquam nec enim vel sem congue dignissim. Pellentesque sagittis augue eget leo sodales efficitur. Nam luctus est arcu, eget cursus ante maximus nec. Duis diam nisl, gravida id iaculis eu, dictum ac dui. Proin suscipit scelerisque mattis. Nulla facilisi. Proin tristique lorem at risus laoreet sollicitudin.

Nulla facilisi. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sit amet lorem feugiat, sollicitudin turpis in, ullamcorper dui. Praesent imperdiet, metus at condimentum pellentesque, nisl lacus rhoncus libero, at accumsan lacus ante non mauris. Nunc aliquam, dolor sit amet finibus fringilla, arcu quam luctus diam, ac commodo metus dui nec lacus. Donec urna justo, euismod ut velit eu, bibendum eleifend quam. Pellentesque sem mauris, ornare in bibendum nec, dignissim sit amet ante. Quisque congue, nisi sed fringilla luctus, odio nunc posuere nibh, sed viver

Error compiling template "Designs/Swift/Paragraph/Swift_Carousel.cshtml"
Line 77: No overload for method 'RenderItem' takes 8 arguments
Line 83: The name 'helper' does not exist in the current context
Line 99: The name 'active' does not exist in the current context
Line 105: The name 'theme' does not exist in the current context
Line 109: The name 'RenderImage' does not exist in the current context
Line 109: The name 'item' does not exist in the current context
Line 111: The name 'layout' does not exist in the current context
Line 114: The name 'alignment' does not exist in the current context
Line 117: The name 'alignment' does not exist in the current context
Line 120: The name 'alignment' does not exist in the current context
Line 123: The name 'alignment' does not exist in the current context
Line 126: The name 'alignment' does not exist in the current context
Line 129: The name 'alignment' does not exist in the current context
Line 132: The name 'alignment' does not exist in the current context
Line 135: The name 'alignment' does not exist in the current context
Line 138: The name 'alignment' does not exist in the current context
Line 146: The name 'carouselWidth' does not exist in the current context
Line 148: The name 'alignment' does not exist in the current context
Line 152: The name 'RenderTitle' does not exist in the current context
Line 152: The name 'item' does not exist in the current context
Line 152: The name 'maxWidth' does not exist in the current context
Line 154: The name 'RenderText' does not exist in the current context
Line 154: The name 'item' does not exist in the current context
Line 154: The name 'maxWidth' does not exist in the current context
Line 156: The name 'RenderButton' does not exist in the current context
Line 156: The name 'item' does not exist in the current context
Line 158: The name 'helper' does not exist in the current context
Line 178: The name 'imageFilter' does not exist in the current context
Line 181: The name 'item' does not exist in the current context
Line 181: The name 'parms' does not exist in the current context
Line 183: The name 'helper' does not exist in the current context
Line 191: The name 'maxWidth' does not exist in the current context
Line 194: The name 'item' does not exist in the current context
Line 196: The name 'helper' does not exist in the current context
Line 205: The name 'maxWidth' does not exist in the current context
Line 208: The name 'item' does not exist in the current context
Line 210: The name 'helper' does not exist in the current context
Line 282: The name 'link' does not exist in the current context
Line 286: The name 'buttonStyle' does not exist in the current context
Line 288: The name 'StretchedLink' does not exist in the current context
Line 291: The name 'target' does not exist in the current context
Line 293: The name 'rel' does not exist in the current context
Line 295: The name 'item' does not exist in the current context
Line 306: The name 'link' does not exist in the current context
Line 309: The name 'target' does not exist in the current context
Line 311: The name 'rel' does not exist in the current context
Line 313: The name 'StretchedLink' does not exist in the current context

1 // <auto-generated/> 2 #pragma warning disable 1591 3 namespace CompiledRazorTemplates.Dynamic 4 { 5 #line hidden 6 using System.Threading.Tasks; 7 using System; 8 using System.Collections.Generic; 9 using System.Linq; 10 using Dynamicweb.Ecommerce.ProductCatalog; 11 using System.Web; 12 using Dynamicweb.Frontend; 13 internal class RazorEngine_109ce039b02c4627a252558cdf7e5d4c : Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 14 { 15 #pragma warning disable 1998 16 public async override global::System.Threading.Tasks.Task ExecuteAsync() 17 { 18 WriteLiteral("\n"); 19 bool movePageBehind = false; bool isFirstPoster = false; string movePageBehindClass = ""; if (Pageview.Page.PropertyItem != null) { string headerCssClass = Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"] != null ? Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"].ToString() : "sticky-top"; movePageBehind = headerCssClass == "fixed-top" && !Pageview.IsVisualEditorMode ? true : false; if (movePageBehind) { movePageBehindClass = " poster-behind"; if (!Dynamicweb.Context.Current.Items.Contains("firstPosterIsRendered")) { isFirstPoster = true; Dynamicweb.Context.Current.Items.Add("firstPosterIsRendered", true); } } } var uniqueId = Pageview.CurrentParagraph.ID.ToString(); string title = Model.Item.GetString("Title"); var carouselItems = Model.Item?.GetItems("Carousel_Items") ?? Enumerable.Empty<Dynamicweb.Frontend.ItemViewModel>().ToList(); string enableControls = Model.Item.GetBoolean("EnableControls").ToString().ToLower(); string enableIndcators = Model.Item.GetBoolean("EnableIndicators").ToString().ToLower(); bool autoplay = Model.Item.GetBoolean("Autoplay"); string interval = (autoplay) ? Model.Item.GetString("Interval", "5000") : "0"; string enableAutoplay = autoplay.ToString().ToLower(); string animation = Model.Item.GetRawValueString("Animation", "carousel"); string carouselHeight = Model.Item.GetRawValueString("CarouselHeight", "h-100 min-vh-75 min-vh-md-100"); carouselHeight = carouselHeight == "small" ? "min-vh-25 min-vh-md-50" : carouselHeight; carouselHeight = carouselHeight == "medium" ? "min-vh-50 min-vh-md-75" : carouselHeight; carouselHeight = carouselHeight == "large" ? "min-vh-75 min-vh-md-100" : carouselHeight; string buttonSize = Model.Item.GetRawValueString("buttonSize", "regular"); buttonSize = buttonSize == "small" ? " btn-sm" : buttonSize; buttonSize = buttonSize == "regular" ? "" : buttonSize; buttonSize = buttonSize == "large" ? " btn-lg" : buttonSize; string carouselPadding = Model.Item.GetRawValueString("ContentPadding", ""); carouselPadding = carouselPadding == "none" ? "p-3 px-xl-3 py-xl-4" : carouselPadding; carouselPadding = carouselPadding == "small" ? "p-3 p-xl-4" : carouselPadding; carouselPadding = carouselPadding == "large" ? "p-4 p-xl-5" : carouselPadding; string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "display-1"); string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); WriteLiteral("\n<div"); 20 BeginWriteAttribute("id", " id=\"", 2661, "\"", 2684, 2); 21 WriteAttributeValue("", 2666, "carousel_", 2666, 9, true); 22 WriteAttributeValue("", 2675, uniqueId, 2675, 9, false); 23 EndWriteAttribute(); 24 BeginWriteAttribute("class", " class=\"", 2685, "\"", 2740, 3); 25 WriteAttributeValue("", 2693, "js-slider", 2693, 9, true); 26 WriteAttributeValue(" ", 2702, "item_", 2703, 6, true); 27 WriteAttributeValue("", 2708, Model.Item.SystemName.ToLower(), 2708, 32, false); 28 EndWriteAttribute(); 29 WriteLiteral(">\n\n"); 30 bool isFirst = true; WriteLiteral("\n"); 31 foreach (var item in carouselItems) { Write(RenderItem(item, isFirst, carouselHeight, carouselPadding, buttonSize, titleFontSize, subtitleFontSize, movePageBehindClass)); 32 isFirst = false; } WriteLiteral("\n</div>\n\n"); 33 Write(helper); 34 WriteLiteral(@" RenderItem(ItemViewModel item, bool isFirst, string carouselHeight, string carouselPadding, string buttonSize, string titleFontSize, string subtitleFontSize, string movePageBehindClass) { string layout = item.GetRawValueString(""Layout"", ""align-middle-center-text-center""); string carouselWidth = ""container-xl""; int xPos = item?.GetFile(""Image"")?.FocalPositionFromLeft ?? 50; int yPos = item?.GetFile(""Image"")?.FocalPositionFromTop ?? 50; string theme = !string.IsNullOrWhiteSpace(item.GetRawValueString(""Theme"")) ? "" theme "" + item.GetRawValueString(""Theme"").Replace("" "", """").Trim().ToLower() : """"; string active = isFirst ? ""active"" : """"; string alignment = """"; string maxWidth = item.GetRawValueString(""TextReadability"", ""max-width-on""); maxWidth = maxWidth == ""max-width-on"" ? ""mw-75ch d-inline-block"" : maxWidth; maxWidth = maxWidth == ""max-width-off"" ? """" : maxWidth; <div"); 35 BeginWriteAttribute("class", " class=\"", 3874, "\"", 3891, 1); 36 WriteAttributeValue("", 3882, active, 3882, 9, false); 37 EndWriteAttribute(); 38 WriteLiteral(">\n\t\t<div"); 39 BeginWriteAttribute("class", " class=\"", 3900, "\"", 3961, 4); 40 WriteAttributeValue("", 3908, "position-relative", 3908, 17, true); 41 WriteAttributeValue(" ", 3925, "h-100", 3926, 6, true); 42 WriteAttributeValue("", 3931, theme, 3931, 8, false); 43 WriteAttributeValue("", 3939, movePageBehindClass, 3939, 22, false); 44 EndWriteAttribute(); 45 WriteLiteral(">\n\t\t\t"); 46 Write(RenderImage(item)); 47 WriteLiteral("\n\n"); 48 switch (layout) { case "align-top-left-text-left": alignment = "text-start justify-content-start align-items-start"; break; case "align-top-center-text-center": alignment = "text-center justify-content-start align-items-start"; break; case "align-top-right-text-right": alignment = "text-end justify-content-start align-items-start"; break; case "align-middle-left-text-left": alignment = "text-start justify-content-center align-items-center"; break; case "align-middle-center-text-center": alignment = "text-center justify-content-center align-items-center"; break; case "align-middle-right-text-right": alignment = "text-end justify-content-center align-items-center"; break; case "align-bottom-left-text-left": alignment = "text-start justify-content-end align-items-end"; break; case "align-bottom-center-text-center": alignment = "text-center justify-content-end align-items-end"; break; case "align-bottom-right-text-right": alignment = "text-end justify-content-end align-items-end"; break; } WriteLiteral("\t\t\t<div class=\"position-relative h-100\">\n\t\t\t\t<div"); 49 BeginWriteAttribute("class", " class=\"", 5173, "\"", 5263, 7); 50 WriteAttributeValue("", 5181, "h-100", 5181, 5, true); 51 WriteAttributeValue(" ", 5186, "grid", 5187, 5, true); 52 WriteAttributeValue(" ", 5191, "grid-1", 5192, 7, true); 53 WriteAttributeValue(" ", 5198, carouselWidth, 5199, 16, false); 54 WriteAttributeValue(" ", 5215, carouselPadding, 5216, 16, false); 55 WriteAttributeValue(" ", 5232, alignment, 5233, 12, false); 56 WriteAttributeValue(" ", 5245, carouselHeight, 5246, 17, false); 57 EndWriteAttribute(); 58 WriteLiteral(">\n\t\t\t\t\t<div class=\"grid grid-1 gap-3 gap-md-4\">\n\t\t\t\t\t\t"); 59 Write(RenderTitle(item, titleFontSize, maxWidth)); 60 WriteLiteral("\n\t\t\t\t\t\t"); 61 Write(RenderText(item, subtitleFontSize, maxWidth)); 62 WriteLiteral("\n\t\t\t\t\t\t"); 63 Write(RenderButton(item, buttonSize)); 64 WriteLiteral("\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n}\n\n"); 65 Write(helper); 66 WriteLiteral(@" RenderImage(ItemViewModel item) { if (!string.IsNullOrEmpty(item.GetString(""Image""))) { var parms = new Dictionary<string, object>(); parms.Add(""cssClass"", ""h-100 w-100""); parms.Add(""columns"", Model.GridRowColumnCount); string imageFilter = item.GetRawValueString(""ImageFilter"", """"); imageFilter = imageFilter == ""no-filter"" ? """" : imageFilter; imageFilter = imageFilter == ""filter"" ? "" image-filter"" : imageFilter; <div"); 67 BeginWriteAttribute("class", " class=\"", 5951, "\"", 6019, 6); 68 WriteAttributeValue("", 5959, "position-absolute", 5959, 17, true); 69 WriteAttributeValue(" ", 5976, "top-0", 5977, 6, true); 70 WriteAttributeValue(" ", 5982, "bottom-0", 5983, 9, true); 71 WriteAttributeValue(" ", 5991, "end-0", 5992, 6, true); 72 WriteAttributeValue(" ", 5997, "start-0", 5998, 8, true); 73 WriteAttributeValue("", 6005, imageFilter, 6005, 14, false); 74 EndWriteAttribute(); 75 WriteLiteral(">\n\t\t\t"); 76 Write(RenderPartial("Components/Image.cshtml", item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms)); 77 WriteLiteral("\n\t\t</div>\n\t}\n}\n\n"); 78 Write(helper); 79 WriteLiteral(" RenderTitle(ItemViewModel item, string titleFontSize, string maxWidth)\n{\n\tif (!string.IsNullOrEmpty(item.GetString(\"Title\")) && !item.GetBoolean(\"HideTitle\"))\n\t{\n\t\t<h2"); 80 BeginWriteAttribute("class", " class=\"", 6330, "\"", 6356, 2); 81 WriteAttributeValue("", 6338, titleFontSize, 6338, 14, false); 82 WriteAttributeValue(" ", 6352, "m-0", 6353, 4, true); 83 EndWriteAttribute(); 84 WriteLiteral(">\n\t\t\t<span"); 85 BeginWriteAttribute("class", " class=\"", 6367, "\"", 6384, 1); 86 WriteAttributeValue("", 6375, maxWidth, 6375, 9, false); 87 EndWriteAttribute(); 88 WriteLiteral(">"); 89 Write(item.GetString("Title")); 90 WriteLiteral("</span>\n\t\t</h2>\n\t}\n}\n\n"); 91 Write(helper); 92 WriteLiteral(" RenderText(ItemViewModel item, string subtitleFontSize, string maxWidth)\n{\n\tif (!string.IsNullOrEmpty(item.GetString(\"Text\")))\n\t{\n\t\t<p"); 93 BeginWriteAttribute("class", " class=\"", 6574, "\"", 6608, 3); 94 WriteAttributeValue("", 6582, subtitleFontSize, 6582, 17, false); 95 WriteAttributeValue(" ", 6599, "lead", 6600, 5, true); 96 WriteAttributeValue(" ", 6604, "m-0", 6605, 4, true); 97 EndWriteAttribute(); 98 WriteLiteral(">\n\t\t\t<span"); 99 BeginWriteAttribute("class", " class=\"", 6619, "\"", 6636, 1); 100 WriteAttributeValue("", 6627, maxWidth, 6627, 9, false); 101 EndWriteAttribute(); 102 WriteLiteral(">"); 103 Write(item.GetString("Text")); 104 WriteLiteral("</span>\n\t\t</p>\n\t}\n}\n\n"); 105 Write(helper); 106 WriteLiteral(@" RenderButton(ItemViewModel item, string buttonSize) { string linkType = item.GetRawValueString(""LinkType"", ""page""); Dynamicweb.Frontend.LinkViewModel link = new Dynamicweb.Frontend.LinkViewModel(); string StretchedLink = item.GetRawValueString(""StretchedLink"", """"); StretchedLink = StretchedLink == ""item-not-clickable"" ? """" : StretchedLink; StretchedLink = StretchedLink == ""item-clickable"" ? "" stretched-link"" : StretchedLink; if (linkType == ""page"" && item.GetLink(""ButtonLink"") != null) { link = item.GetLink(""ButtonLink""); } if (linkType == ""product-group"") { IList<ProductGroupViewModel> selectedGroups = item.GetValue<IList<ProductGroupViewModel>>(""ProductGroupLink""); IList<string> groupIds = new List<string> { }; if (selectedGroups != null) { foreach (var fromGroup in selectedGroups) { groupIds.Add(fromGroup.Id); } } link = new Dynamicweb.Frontend.LinkViewModel() { Url = ""/Default.aspx?ID="" + GetPageIdByNavigationTag(""Shop"") + ""&GroupID="" + string.Join("","", grou"); 107 WriteLiteral(@"pIds).Trim(), IsExternal = false }; } if (linkType == ""product"") { ProductListViewModel products = item.GetValue<ProductListViewModel>(""ProductLink""); IList<string> productIds = new List<string> { }; if (products != null) { foreach (var product in products.Products) { productIds.Add(product.Id); } } string productParameter = productIds.Count == 1 ? ""ProductID"" : ""MainProductId""; string pageTag = productIds.Count == 1 ? ""ProductDetailPage"" : ""Shop""; link = new Dynamicweb.Frontend.LinkViewModel() { Url = ""/Default.aspx?ID="" + GetPageIdByNavigationTag(pageTag) + ""&"" + productParameter + ""="" + string.Join("","", productIds).Trim(), IsExternal = false }; } if (link != null && !string.IsNullOrEmpty(item.GetString(""ButtonLabel""))) { string target = Pageview.AreaSettings.GetBoolean(""OpenLinksInNewTab"") && link.IsExternal ? ""target=\""_blank\"""" : """"; string rel = Pageview.AreaSettings.GetBoolean(""OpenLinksInNewTab"") && link.IsExternal ? ""rel=\""noopener\"""" : """"; "); 108 WriteLiteral(@" string buttonStyle = item.GetRawValueString(""ButtonStyle"", ""primary""); buttonStyle = buttonStyle == ""primary"" ? ""btn-primary"" : buttonStyle; buttonStyle = buttonStyle == ""secondary"" ? ""btn-secondary"" : buttonStyle; buttonStyle = buttonStyle == ""link"" ? ""btn-link"" : buttonStyle; <div class=""m-0""> <a"); 109 BeginWriteAttribute("href", " href=\"", 9049, "\"", 9065, 1); 110 WriteAttributeValue("", 9056, link.Url, 9056, 9, false); 111 EndWriteAttribute(); 112 BeginWriteAttribute("class", " class=\"", 9066, "\"", 9119, 4); 113 WriteAttributeValue("", 9074, "btn", 9074, 3, true); 114 WriteAttributeValue(" ", 9077, buttonStyle, 9078, 12, false); 115 WriteAttributeValue("", 9090, buttonSize, 9090, 13, false); 116 WriteAttributeValue("", 9103, StretchedLink, 9103, 16, false); 117 EndWriteAttribute(); 118 WriteLiteral(" "); 119 Write(target); 120 WriteLiteral(" "); 121 Write(rel); 122 WriteLiteral(">"); 123 Write(item.GetString("ButtonLabel")); 124 WriteLiteral(@"</a> </div> } else if (link != null && !string.IsNullOrEmpty(link.Url)) { string target = Pageview.AreaSettings.GetBoolean(""OpenLinksInNewTab"") && link.IsExternal ? ""target=\""_blank\"""" : """"; string rel = Pageview.AreaSettings.GetBoolean(""OpenLinksInNewTab"") && link.IsExternal ? ""rel=\""noopener\"""" : """"; <a"); 125 BeginWriteAttribute("href", " href=\"", 9482, "\"", 9498, 1); 126 WriteAttributeValue("", 9489, link.Url, 9489, 9, false); 127 EndWriteAttribute(); 128 WriteLiteral(" "); 129 Write(target); 130 WriteLiteral(" "); 131 Write(rel); 132 WriteLiteral(" class=\""); 133 Write(StretchedLink); 134 WriteLiteral("\">\n\t\t\t<span class=\"visually-hidden\">"); 135 Write(Model.Item.GetString("Title")); 136 WriteLiteral(@"</span> </a> } } <script type=""module"" src=""~/Files/Templates/Designs/Swift/Assets/js/tiny-slider.js""></script> <script type=""module""> swift.AssetLoader.Load('Files/Templates/Designs/Swift/Assets/css/tiny-slider.css', 'css'); document.addEventListener('load.swift.assetloader', function () { var slider = tns({ container: ""#carousel_"); 137 Write(uniqueId); 138 WriteLiteral("\",\n\t\t\tcontrols: false,\n\t\t\tnav: false,\n\t\t\tautoplay: "); 139 Write(enableAutoplay); 140 WriteLiteral(",\n\t\t\tautoplayTimeout: "); 141 Write(interval); 142 WriteLiteral(",\n\t\t\tautoplayHoverPause: true,\n\t\t\tautoplayButtonOutput: false,\n\t\t\titems: 1,\n\t\t\tloop: "); 143 Write(enableAutoplay); 144 WriteLiteral(",\n\t\t\tmode: \""); 145 Write(animation); 146 WriteLiteral("\",\n\t\t\trewind: false,\n\t\t\tarrowKeys: false,\n\t\t\tlazyload: true,\n\t\t\tswipeAngle: 30,\n\t\t\tmouseDrag: true,\n\t\t\tpreventScrollOnTouch: \'auto\',\n\t\t\tresponsive: {\n\t\t\t\t992: {\n\t\t\t\t\tcontrols: "); 147 Write(enableControls); 148 WriteLiteral(@", mouseDrag: false, controlsText: [ '<span class=""tns-controls-icon"" style=""height:3em; width: 3em;""><span class=""visually-hidden"">Previous</span><span class=""icon-3""><svg viewBox=""0 0 16 16"" class=""bi bi-arrow-left"" fill=""currentColor"" xmlns=""http://www.w3.org/2000/svg""><path fill-rule=""evenodd"" d=""M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z""/></svg></span></span>', '<span class=""tns-controls-icon"" style=""height:3em; width: 3em;""><span class=""visually-hidden"">Next</span><span class=""icon-3""><svg viewBox=""0 0 16 16"" class=""bi bi-arrow-right"" fill=""currentColor"" xmlns=""http://www.w3.org/2000/svg""><path fill-rule=""evenodd"" d=""M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8z""/></svg></span></span>' ], } } }); }); </script> "); 149 if (movePageBehind && isFirstPoster) { WriteLiteral("\t<script>\n\t\t[\'resize\', \'load\'].forEach(function (e) {\n\t\t\twindow.addEventListener(e, () => swift.Scroll.setContentPosition());\n\t\t});\n\t</script>\n"); 150 } } 151 #pragma warning restore 1998 152 } 153 } 154 #pragma warning restore 1591 155

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> @using Dynamicweb.Ecommerce.ProductCatalog @using System.Web @using Dynamicweb.Frontend @{ bool movePageBehind = false; bool isFirstPoster = false; string movePageBehindClass = ""; if (Pageview.Page.PropertyItem != null) { string headerCssClass = Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"] != null ? Pageview.Page.PropertyItem["MoveThisPageBehindTheHeader"].ToString() : "sticky-top"; movePageBehind = headerCssClass == "fixed-top" && !Pageview.IsVisualEditorMode ? true : false; if (movePageBehind) { movePageBehindClass = " poster-behind"; if (!Dynamicweb.Context.Current.Items.Contains("firstPosterIsRendered")) { isFirstPoster = true; Dynamicweb.Context.Current.Items.Add("firstPosterIsRendered", true); } } } var uniqueId = Pageview.CurrentParagraph.ID.ToString(); string title = Model.Item.GetString("Title"); var carouselItems = Model.Item?.GetItems("Carousel_Items") ?? Enumerable.Empty<Dynamicweb.Frontend.ItemViewModel>().ToList(); string enableControls = Model.Item.GetBoolean("EnableControls").ToString().ToLower(); string enableIndcators = Model.Item.GetBoolean("EnableIndicators").ToString().ToLower(); bool autoplay = Model.Item.GetBoolean("Autoplay"); string interval = (autoplay) ? Model.Item.GetString("Interval", "5000") : "0"; string enableAutoplay = autoplay.ToString().ToLower(); string animation = Model.Item.GetRawValueString("Animation", "carousel"); string carouselHeight = Model.Item.GetRawValueString("CarouselHeight", "h-100 min-vh-75 min-vh-md-100"); carouselHeight = carouselHeight == "small" ? "min-vh-25 min-vh-md-50" : carouselHeight; carouselHeight = carouselHeight == "medium" ? "min-vh-50 min-vh-md-75" : carouselHeight; carouselHeight = carouselHeight == "large" ? "min-vh-75 min-vh-md-100" : carouselHeight; string buttonSize = Model.Item.GetRawValueString("buttonSize", "regular"); buttonSize = buttonSize == "small" ? " btn-sm" : buttonSize; buttonSize = buttonSize == "regular" ? "" : buttonSize; buttonSize = buttonSize == "large" ? " btn-lg" : buttonSize; string carouselPadding = Model.Item.GetRawValueString("ContentPadding", ""); carouselPadding = carouselPadding == "none" ? "p-3 px-xl-3 py-xl-4" : carouselPadding; carouselPadding = carouselPadding == "small" ? "p-3 p-xl-4" : carouselPadding; carouselPadding = carouselPadding == "large" ? "p-4 p-xl-5" : carouselPadding; string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "display-1"); string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); } <div id="carousel_@uniqueId" class="js-slider item_@Model.Item.SystemName.ToLower()"> @{ bool isFirst = true; } @foreach (var item in carouselItems) { @RenderItem(item, isFirst, carouselHeight, carouselPadding, buttonSize, titleFontSize, subtitleFontSize, movePageBehindClass) isFirst = false; } </div> @helper RenderItem(ItemViewModel item, bool isFirst, string carouselHeight, string carouselPadding, string buttonSize, string titleFontSize, string subtitleFontSize, string movePageBehindClass) { string layout = item.GetRawValueString("Layout", "align-middle-center-text-center"); string carouselWidth = "container-xl"; int xPos = item?.GetFile("Image")?.FocalPositionFromLeft ?? 50; int yPos = item?.GetFile("Image")?.FocalPositionFromTop ?? 50; string theme = !string.IsNullOrWhiteSpace(item.GetRawValueString("Theme")) ? " theme " + item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; string active = isFirst ? "active" : ""; string alignment = ""; string maxWidth = item.GetRawValueString("TextReadability", "max-width-on"); maxWidth = maxWidth == "max-width-on" ? "mw-75ch d-inline-block" : maxWidth; maxWidth = maxWidth == "max-width-off" ? "" : maxWidth; <div class="@(active)"> <div class="position-relative h-100@(theme)@(movePageBehindClass)"> @RenderImage(item) @switch (layout) { case "align-top-left-text-left": alignment = "text-start justify-content-start align-items-start"; break; case "align-top-center-text-center": alignment = "text-center justify-content-start align-items-start"; break; case "align-top-right-text-right": alignment = "text-end justify-content-start align-items-start"; break; case "align-middle-left-text-left": alignment = "text-start justify-content-center align-items-center"; break; case "align-middle-center-text-center": alignment = "text-center justify-content-center align-items-center"; break; case "align-middle-right-text-right": alignment = "text-end justify-content-center align-items-center"; break; case "align-bottom-left-text-left": alignment = "text-start justify-content-end align-items-end"; break; case "align-bottom-center-text-center": alignment = "text-center justify-content-end align-items-end"; break; case "align-bottom-right-text-right": alignment = "text-end justify-content-end align-items-end"; break; } <div class="position-relative h-100"> <div class="h-100 grid grid-1 @(carouselWidth) @carouselPadding @(alignment) @(carouselHeight)"> <div class="grid grid-1 gap-3 gap-md-4"> @RenderTitle(item, titleFontSize, maxWidth) @RenderText(item, subtitleFontSize, maxWidth) @RenderButton(item, buttonSize) </div> </div> </div> </div> </div> } @helper RenderImage(ItemViewModel item) { if (!string.IsNullOrEmpty(item.GetString("Image"))) { var parms = new Dictionary<string, object>(); parms.Add("cssClass", "h-100 w-100"); parms.Add("columns", Model.GridRowColumnCount); string imageFilter = item.GetRawValueString("ImageFilter", ""); imageFilter = imageFilter == "no-filter" ? "" : imageFilter; imageFilter = imageFilter == "filter" ? " image-filter" : imageFilter; <div class="position-absolute top-0 bottom-0 end-0 start-0@(imageFilter)"> @RenderPartial("Components/Image.cshtml", item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) </div> } } @helper RenderTitle(ItemViewModel item, string titleFontSize, string maxWidth) { if (!string.IsNullOrEmpty(item.GetString("Title")) && !item.GetBoolean("HideTitle")) { <h2 class="@titleFontSize m-0"> <span class="@maxWidth">@item.GetString("Title")</span> </h2> } } @helper RenderText(ItemViewModel item, string subtitleFontSize, string maxWidth) { if (!string.IsNullOrEmpty(item.GetString("Text"))) { <p class="@subtitleFontSize lead m-0"> <span class="@maxWidth">@item.GetString("Text")</span> </p> } } @helper RenderButton(ItemViewModel item, string buttonSize) { string linkType = item.GetRawValueString("LinkType", "page"); Dynamicweb.Frontend.LinkViewModel link = new Dynamicweb.Frontend.LinkViewModel(); string StretchedLink = item.GetRawValueString("StretchedLink", ""); StretchedLink = StretchedLink == "item-not-clickable" ? "" : StretchedLink; StretchedLink = StretchedLink == "item-clickable" ? " stretched-link" : StretchedLink; if (linkType == "page" && item.GetLink("ButtonLink") != null) { link = item.GetLink("ButtonLink"); } if (linkType == "product-group") { IList<ProductGroupViewModel> selectedGroups = item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink"); IList<string> groupIds = new List<string> { }; if (selectedGroups != null) { foreach (var fromGroup in selectedGroups) { groupIds.Add(fromGroup.Id); } } link = new Dynamicweb.Frontend.LinkViewModel() { Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag("Shop") + "&GroupID=" + string.Join(",", groupIds).Trim(), IsExternal = false }; } if (linkType == "product") { ProductListViewModel products = item.GetValue<ProductListViewModel>("ProductLink"); IList<string> productIds = new List<string> { }; if (products != null) { foreach (var product in products.Products) { productIds.Add(product.Id); } } string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; string pageTag = productIds.Count == 1 ? "ProductDetailPage" : "Shop"; link = new Dynamicweb.Frontend.LinkViewModel() { Url = "/Default.aspx?ID=" + GetPageIdByNavigationTag(pageTag) + "&" + productParameter + "=" + string.Join(",", productIds).Trim(), IsExternal = false }; } if (link != null && !string.IsNullOrEmpty(item.GetString("ButtonLabel"))) { string target = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link.IsExternal ? "target=\"_blank\"" : ""; string rel = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link.IsExternal ? "rel=\"noopener\"" : ""; string buttonStyle = item.GetRawValueString("ButtonStyle", "primary"); buttonStyle = buttonStyle == "primary" ? "btn-primary" : buttonStyle; buttonStyle = buttonStyle == "secondary" ? "btn-secondary" : buttonStyle; buttonStyle = buttonStyle == "link" ? "btn-link" : buttonStyle; <div class="m-0"> <a href="@link.Url" class="btn @buttonStyle@(buttonSize)@(StretchedLink)" @target @rel>@item.GetString("ButtonLabel")</a> </div> } else if (link != null && !string.IsNullOrEmpty(link.Url)) { string target = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link.IsExternal ? "target=\"_blank\"" : ""; string rel = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link.IsExternal ? "rel=\"noopener\"" : ""; <a href="@link.Url" @target @rel class="@StretchedLink"> <span class="visually-hidden">@Model.Item.GetString("Title")</span> </a> } } <script type="module" src="~/Files/Templates/Designs/Swift/Assets/js/tiny-slider.js"></script> <script type="module"> swift.AssetLoader.Load('Files/Templates/Designs/Swift/Assets/css/tiny-slider.css', 'css'); document.addEventListener('load.swift.assetloader', function () { var slider = tns({ container: "#carousel_@uniqueId", controls: false, nav: false, autoplay: @enableAutoplay, autoplayTimeout: @interval, autoplayHoverPause: true, autoplayButtonOutput: false, items: 1, loop: @enableAutoplay, mode: "@animation", rewind: false, arrowKeys: false, lazyload: true, swipeAngle: 30, mouseDrag: true, preventScrollOnTouch: 'auto', responsive: { 992: { controls: @enableControls, mouseDrag: false, controlsText: [ '<span class="tns-controls-icon" style="height:3em; width: 3em;"><span class="visually-hidden">Previous</span><span class="icon-3"><svg viewBox="0 0 16 16" class="bi bi-arrow-left" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z"/></svg></span></span>', '<span class="tns-controls-icon" style="height:3em; width: 3em;"><span class="visually-hidden">Next</span><span class="icon-3"><svg viewBox="0 0 16 16" class="bi bi-arrow-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8z"/></svg></span></span>' ], } } }); }); </script> @if (movePageBehind && isFirstPoster) { <script> ['resize', 'load'].forEach(function (e) { window.addEventListener(e, () => swift.Scroll.setContentPosition()); }); </script> }

Next day delivery

Or collect same day

Expanded assortment

Order hundreds of products

Secure shopping

You're in safe hands

24/7 support

Dedicated support

New great adventures

The trails are calling

Explore our bikes

New column