Contact us

We are always glad
to hear from you

We will strive to make a reply in 24hours. You can also
make a call. Our number is +45 70252090

Error executing template "Designs/Swift/Forms/Form/Default.cshtml"
System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted.
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity()
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value)
   at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations)
   at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node)
   at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder)
   at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument()
   at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source)
   at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document)
   at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument)
   at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document)
   at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context)
   at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context)
   at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context)
   at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
   at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using System.Collections.Generic 3 @using System.Linq 4 5 @functions { 6 7 public static string GetTextAreaHeight(int rows) 8 { 9 // Bootstrap with floating labels requires style instead of row attribute https://getbootstrap.com/docs/5.0/forms/floating-labels/#textareas 10 int swiftLineHeight = 20; // Magic number from https://stackoverflow.com/questions/17475652/html-one-row-of-textarea-is-of-how-much-height 11 int formControlPadding = 16; // Magic number from top padding on form controls 12 int formControlBorder = 1; // Magic number from top border on form controls 13 int formControlFixToAvoidScroll = 4; // Magic number from top border on form controls 14 int formControlSpacing = formControlPadding * 2 + formControlBorder * 2 + formControlFixToAvoidScroll; 15 16 if (rows < 1) 17 { 18 rows = 1; 19 } 20 return $"height:{(rows * swiftLineHeight) + formControlSpacing }px;"; 21 } 22 23 } 24 @{ 25 List<LoopItem> fields = GetLoop("Fields"); 26 bool hasDateFields = fields.Any(f => f.GetString("Field.Type") == "Date"); 27 28 @GetString("Form.FormStart") 29 <div class="item-inner grid"> 30 @GetString("Form.SystemFields") 31 32 @foreach (LoopItem field in fields) 33 { 34 const string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 35 string fieldType = field.GetString("Field.Type"); 36 string inputType = fieldType.ToLower().Replace("textinput", "text"); 37 bool required = field.GetBoolean("Field.Required"); 38 string systemName = field.GetString("Field.SystemName"); 39 string value = field.GetString("Field.ValueFromAutoOrDefault"); 40 string placeholder = Translate(field.GetString("Field.Placeholder")); 41 string label = Translate(field.GetString("Field.Name")); 42 string description = Translate(field.GetString("Field.Description")); 43 string control = field.GetString("Field.Control"); 44 string name = field.GetString("Field.Name"); 45 string cssClass = field.GetString("Field.CssClass"); 46 string pattern = field.GetString("Field.InputPattern"); 47 48 // Fix for browsers that cannot handle an empty pattern attribute if the field is required 49 pattern = !string.IsNullOrEmpty(pattern) ? "pattern='" + pattern + "'" : ""; 50 51 <div class="mb-3 g-col-12 @cssClass"> 52 @switch (fieldType) 53 { 54 case "TextInput": 55 case "Email": 56 case "Password": 57 case "Tel": 58 case "Number": 59 <div class="form-floating"> 60 <input id="@systemName" class="form-control" type="@inputType" name="@systemName" placeholder="@placeholder" value="@value" required="@required" @pattern /> 61 <label for="@systemName" class="form-label">@label@(required ? $" ({Translate("required")})" : "")</label> 62 </div> 63 break; 64 65 case "Color": 66 <label for="@systemName" class="form-label">@label</label> 67 <input type="color" class="form-control form-control-color" value="@value" id="@systemName" name="@systemName" title="@label"> 68 break; 69 70 case "Textarea": 71 string textAreaHeight = GetTextAreaHeight(field.GetInteger("Field.TextareaHeight")); 72 73 <div class="form-floating"> 74 <textarea id="@systemName" class="form-control" name="@systemName" placeholder="@placeholder" required="@required" style="@textAreaHeight">@value</textarea> 75 <label for="@systemName" class="form-label">@label@(required ? $" ({Translate("required")})" : "")</label> 76 </div> 77 break; 78 79 case "Hidden": 80 <input type="@inputType" id="@systemName" name="@systemName" value="@value"> 81 break; 82 83 case "File": 84 <label for="@systemName" class="form-label">@name@(required ? $" ({Translate("required")})" : "")</label> 85 <input class="form-control" type="@inputType" id="@systemName" name="@systemName" required="@required"> 86 break; 87 88 case "Range": 89 <label for="@systemName" class="form-label">@label</label> 90 <input type="range" class="form-range" name="@systemName" id="@systemName"> 91 break; 92 93 case "Week": 94 case "Time": 95 case "Month": 96 case "Search": 97 case "Url": 98 case "Datetime": 99 case "Datetime-Local": 100 //Missing component 101 break; 102 103 case "Date": 104 <div class="form-floating input-group flatpickr"> 105 <input type="text" class="form-control" id="@systemName" name="@systemName" placeholder="@placeholder" data-input> 106 <label for="@systemName" class="form-label">@label@(required ? $" ({Translate("required")})" : "")</label> 107 108 <button class="btn btn-outline-primary d-flex justify-content-center align-items-center" type="button" data-toggle id="ToggleDateCalendar"> 109 <span class="icon-2"> 110 @ReadFile(iconPath + "calendar.svg") 111 </span> 112 </button> 113 114 <button class="btn btn-outline-primary d-flex justify-content-center align-items-center" type="button" data-clear id="DeleteDeliveryDate"> 115 <span class="icon-2"> 116 @ReadFile(iconPath + "x.svg") 117 </span> 118 </button> 119 </div> 120 break; 121 122 case "CheckBox": 123 string isChecked = value.ToLower() == "true" ? "checked" : ""; 124 125 <div class="form-check"> 126 <input class="form-check-input" type="@inputType" id="@systemName" name="@systemName" required="@required" @isChecked> 127 <label class="form-check-label" for="@systemName">@label@(required ? $" ({Translate("required")})" : "")</label> 128 </div> 129 break; 130 131 case "Radio": 132 case "CheckBoxList": 133 string type = fieldType.ToLower() == "radio" ? "radio" : "checkbox"; 134 135 <label class="form-label d-block">@label@(required ? $" ({Translate("required")})" : "")</label> 136 foreach (LoopItem option in field.GetLoop("Options")) 137 { 138 string optionChecked = option.GetBoolean("Option.DefaultSelected") ? "checked" : ""; 139 string id = systemName + option.GetString("Option.ID"); 140 string optionValue = option.GetString("Option.Value"); 141 string optionText = Translate(option.GetString("Option.Text")); 142 143 <div class="form-check @cssClass"> 144 <input class="form-check-input" type="@type" id="@id" name="@systemName" value="@optionValue" required="@required" @optionChecked> 145 <label class="form-check-label" for="@id">@optionText</label> 146 </div> 147 } 148 break; 149 150 case "Select": 151 <div class="form-floating"> 152 <select class="form-select" id="@systemName" name="@systemName" required="@required"> 153 @foreach (var option in field.GetLoop("Options")) 154 { 155 string optionSelected = option.GetBoolean("Option.DefaultSelected") == true ? "selected" : ""; 156 string id = systemName + option.GetString("Option.ID"); 157 string optionValue = option.GetString("Option.Value"); 158 string optionText = Translate(option.GetString("Option.Text")); 159 160 <option @optionSelected value="@optionValue" id="@id" >@optionText</option> 161 } 162 </select> 163 <label for="@systemName" class="form-label">@label@(required ? $" ({Translate("required")})" : "")</label> 164 </div> 165 break; 166 167 case "Submit": 168 <button class="btn btn-primary" type="submit" onclick="Buttons.LockButton(event)" id="@systemName">@label</button> 169 break; 170 171 case "Reset": 172 <button class="btn btn-secondary" type="reset" onclick="Buttons.LockButton(event)" id="@systemName">@label</button> 173 break; 174 case "Text": 175 <div class="form-text">@control</div> 176 break; 177 178 case "Image": 179 string imagePath = field.GetString("Field.Image"); 180 if (!string.IsNullOrEmpty(imagePath)) 181 { 182 <img class="img-fluid" src="@imagePath" alt="@name"> 183 } 184 break; 185 186 case "PageShift": 187 <label>@label</label><span class="formPageShift"></span> 188 break; 189 } 190 @if (!string.IsNullOrEmpty(description)) { 191 <div class="form-text">@description</div> 192 } 193 </div> 194 } 195 </div> 196 197 @GetString("Form.FormEnd") 198 199 if (hasDateFields) 200 { 201 <script type="module"> 202 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/flatpickr.min.css', 'css'); 203 204 @* Wait for flatpickr styles and then import the js and load the flatpick instance *@ 205 document.addEventListener('load.swift.assetloader', function () { 206 import('/Files/Templates/Designs/Swift/Assets/js/flatpickr.js').then(function(){ 207 208 @* Set the flatpickr locale language from culture info *@ 209 flatpickr.localize(flatpickr.l10ns.@(Pageview.Area.CultureInfo.TwoLetterISOLanguageName)); 210 211 flatpickr(".flatpickr", { 212 altInput: true, 213 weekNumbers: true, 214 wrap: true, 215 formatDate: (date, format, locale) => { 216 return date.toLocaleDateString('@(Pageview.Area.CultureInfo)'); 217 }, 218 }); 219 }); 220 }) 221 222 </script> 223 } 224 } 225
Error executing template "CookieWarning/Cookies.cshtml"
System.InvalidOperationException: A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted.
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.VerifyIntegrity()
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Container.CreateEntryNoResize(TKey key, TValue value)
   at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value)
   at Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.MarkupTextLiteralSyntax.SetAnnotations(SyntaxAnnotation[] annotations)
   at Microsoft.AspNetCore.Razor.Language.Legacy.TokenizerBackedParser`1.GetNodeWithSpanContext[TNode](TNode node)
   at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.OtherParserBlock(SyntaxListBuilder`1& builder)
   at Microsoft.AspNetCore.Razor.Language.Legacy.HtmlMarkupParser.ParseDocument()
   at Microsoft.AspNetCore.Razor.Language.Legacy.RazorParser.Parse(RazorSourceDocument source)
   at Microsoft.AspNetCore.Razor.Language.DefaultRazorEngine.Process(RazorCodeDocument document)
   at Microsoft.AspNetCore.Razor.Language.RazorTemplateEngine.GenerateCode(RazorCodeDocument codeDocument)
   at RazorEngine.Compilation.CompilerServiceBase.GenerateCodeFile(RazorTemplateEngine templateEngine, RazorCodeDocument document)
   at RazorEngine.Compilation.CompilerServiceBase.GetGeneratorResult(IEnumerable`1 namespaces, TypeContext context)
   at RazorEngine.Compilation.CompilerServiceBase.GetCodeCompileUnit(TypeContext context)
   at Dynamicweb.Rendering.Compatibility.RoslynCompilerServiceBase.CompileType(TypeContext context)
   at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
   at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
   at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Dynamicweb.Environment; 3 4 @{ 5 var categories = CookieManager.GetCategories(); 6 7 string cookieNoticeLink = Pageview.AreaSettings.GetLink("CookiePolicyLink") != null ? Pageview.AreaSettings.GetLink("CookiePolicyLink").Url : ""; 8 string privacyPolicyLink = Pageview.AreaSettings.GetLink("PrivacyPolicyLink") != null ? Pageview.AreaSettings.GetLink("PrivacyPolicyLink").Url : ""; 9 int cookieNoticePageID = Pageview.AreaSettings.GetLink("CookiePolicyLink") != null ? Pageview.AreaSettings.GetLink("CookiePolicyLink").PageId : 0; 10 int privacyPolicyPageID = Pageview.AreaSettings.GetLink("PrivacyPolicyLink") != null ? Pageview.AreaSettings.GetLink("PrivacyPolicyLink").PageId : 0; 11 string googleTagManagerID = Pageview.AreaSettings.GetString("GoogleTagManagerID"); 12 13 string layout = Pageview.AreaSettings.GetRawValueString("CookieLayout", "modal"); 14 15 layout = Pageview.Page.ID == cookieNoticePageID || Pageview.Page.ID == privacyPolicyPageID ? "both" : layout; 16 } 17 18 @if (!Pageview.IsVisualEditorMode) { 19 if (layout == "banner" || layout == "both") 20 { 21 string bannerTheme = !string.IsNullOrWhiteSpace(Pageview.AreaSettings.GetRawValueString("CookieBannerTheme")) ? " theme " + Pageview.AreaSettings.GetRawValueString("CookieBannerTheme").Replace(" ", "").Trim().ToLower() : "theme light"; 22 23 <div class="position-fixed bottom-0 w-100 shadow @bannerTheme" id="dwCookieBanner"> 24 <div class="align-items-center grid p-3"> 25 @if (layout == "banner") 26 { 27 <div class="g-col-12 g-col-md-6 g-col-lg-8"> 28 <span>@Translate("By clicking 'Accept All' you consent that we may collect information about you for various purposes, including: Statistics and Marketing")</span> 29 </div> 30 <div class="g-col-12 g-col-md-6 g-col-lg-4"> 31 <div class="grid grid-1 grid-sm-2"> 32 <button type="button" onclick="setOptInCookie(2)" class="btn btn-primary" id="CookiesAcceptAll"> 33 @Translate("Accept all") 34 </button> 35 <button type="button" onclick="setOptInCookie(1)" class="btn btn-secondary" id="CookiesDeclineAll"> 36 @Translate("Decline") 37 </button> 38 </div> 39 </div> 40 } 41 @if (layout == "both") 42 { 43 <div class="g-col-12 g-col-lg-6 g-col-xxl-8"> 44 <span>@Translate("By clicking 'Accept All' you consent that we may collect information about you for various purposes, including: Statistics and Marketing")</span> 45 </div> 46 <div class="g-col-12 g-col-lg-6 g-col-xxl-4"> 47 <div class="grid grid-1 grid-sm-3"> 48 <button type="button" class="btn btn-link" data-bs-toggle="modal" data-bs-target="#dwCookieModal"> 49 @Translate("Customize settings") 50 </button> 51 <button type="button" onclick="setOptInCookie(2)" class="btn btn-secondary" id="CookiesAcceptAll"> 52 @Translate("Accept all") 53 </button> 54 <button type="button" onclick="setOptInCookie(1)" class="btn btn-secondary" id="CookiesDeclineAll"> 55 @Translate("Decline") 56 </button> 57 </div> 58 </div> 59 } 60 </div> 61 </div> 62 } 63 64 if (layout == "modal" || layout == "both") 65 { 66 string modalTheme = !string.IsNullOrWhiteSpace(Pageview.AreaSettings.GetRawValueString("CookieModalTheme")) ? " theme " + Pageview.AreaSettings.GetRawValueString("CookieModalTheme").Replace(" ", "").Trim().ToLower() : "theme light"; 67 68 <div class="modal fade" id="dwCookieModal"> 69 <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" style="max-width:560px;"> 70 <div class="modal-content @modalTheme"> 71 <div style="overflow-y:auto;overflow-x:hidden"> 72 <div class="p-3 p-md-4 overflow-auto" style="max-height:50vh;"> 73 <div class="h3 mb-3">@Translate("You control your data")</div> 74 <p>@Translate("We and our partners use technologies, including cookies, to collect information about you for various purposes, including"):</p> 75 <ol> 76 <li>@Translate("Functionality")</li> 77 <li>@Translate("Statistics")</li> 78 <li>@Translate("Marketing")</li> 79 </ol> 80 <p>@Translate("By clicking 'Accept All' you consent to all these purposes. You can also choose to indicate what purposes you will consent to using the custom selections and then click 'Accept selected'").</p> 81 82 @if (!string.IsNullOrEmpty(cookieNoticeLink) || !string.IsNullOrEmpty(privacyPolicyLink)) 83 { 84 <p>@Translate("You can read more about our use of cookies and other technologies, as well as our collection and processing of personal data by clicking here"):</p> 85 } 86 87 @if (!string.IsNullOrEmpty(cookieNoticeLink)) 88 { 89 <a href="@cookieNoticeLink" class="d-block mb-3" id="CookiesReadModeAbout">@Translate("Read more about Cookies")</a> 90 } 91 @if (!string.IsNullOrEmpty(privacyPolicyLink)) 92 { 93 <a href="@privacyPolicyLink" class="d-block" id="CookiesPrivacyPolicy">@Translate("Our privacy policy")</a> 94 } 95 </div> 96 97 <div class="p-3 px-md-4 border-top"> 98 <div class="grid grid-1 grid-sm-2 gap-3"> 99 <button type="button" onclick="setOptInCookie(1)" class="btn btn-secondary" data-bs-dismiss="modal" id="dwCookieDeclineAll">@Translate("Decline")</button> 100 @if (categories.Any()) 101 { 102 <button type="button" onclick="acceptCustomSetup()" class="btn btn-secondary d-none" data-bs-dismiss="modal" id="dwCookieAcceptSelected">@Translate("Accept selected")</button> 103 } 104 <button type="button" onclick="setOptInCookie(2)" class="btn btn-secondary" data-bs-dismiss="modal" id="dwCookieAcceptAll">@Translate("Accept All")</button> 105 </div> 106 </div> 107 108 @if (categories.Any()) 109 { 110 int categoriesCount = 0; 111 int totalCategories = categories.Count(); 112 113 <form id="dwCookieModalCustomForm" method="post" action="/Admin/Public/CookieOptInLevelConfig.aspx"> 114 <input type="hidden" name="cmd" value="SetCookieOptInLevel"> 115 <input type="hidden" name="OptInLevel" id="OptInLevel" value="1"> 116 <div class="grid grid-2 grid-sm-4 gap-0 px-md-3 border-top border-1"> 117 <div class="p-3"> 118 <label class="form-check-label" for="dwCookieNecessary"><span>@Translate("Necessary")</span></label> 119 <div class="form-check form-switch form-control-lg py-0"> 120 <input class="form-check-input opacity-100" type="checkbox" id="dwCookieNecessary" checked disabled style="background-color: rgba(0,0,0,0.1);"> 121 </div> 122 </div> 123 @foreach (var category in categories) 124 { 125 string border = categoriesCount < (totalCategories - 1) ? "" : ""; 126 127 <div class="p-3 @(border)"> 128 <label class="form-check-label" for="CookieCategory_@category"><span>@Translate(category)</span></label> 129 <div class="form-check form-switch form-control-lg py-0"> 130 <input class="form-check-input js-checkbox" type="checkbox" name="OptInCategory" value="@category" id="CookieCategory_@category" onchange="toggleAcceptSelected()" style="background-color: rgba(0,0,0,0.1);"> 131 </div> 132 </div> 133 categoriesCount++; 134 } 135 </div> 136 </form> 137 } 138 </div> 139 </div> 140 </div> 141 </div> 142 } 143 144 145 <script> 146 async function setOptInCookie(optInLevel) { 147 let response = await fetch("/admin/public/CookieOptInLevelConfig.aspx?cmd=SetCookieOptInLevel&OptInLevel=" + optInLevel); 148 @if (!string.IsNullOrWhiteSpace(googleTagManagerID)){ <text> 149 if (optInLevel == '2') { 150 consentGrantedAll(); 151 } 152 </text> 153 } 154 155 if (response.ok) { 156 if (document.querySelector("#dwCookieBanner")) { 157 document.querySelector("#dwCookieBanner").classList.add("d-none"); 158 } 159 document.location.reload(); 160 return false; 161 } else { 162 return false; 163 } 164 } 165 166 async function acceptCustomSetup() { 167 var form = document.querySelector("#dwCookieModalCustomForm"); 168 169 let formData = new FormData(form); 170 var fetchOptions = { 171 method: 'POST', 172 body: formData 173 }; 174 175 for (const value of formData.values()) { 176 console.log(value); 177 if (value == 'Marketing') { console.log('Granting marketing cookies') consentGrantedMarketing(); 178 } 179 if (value == 'Statistical') { 180 console.log('Granting statistical cookies') 181 consentGrantedAnalyticsStorage(); 182 } 183 } 184 185 186 let response = await fetch(form.action, fetchOptions); 187 188 if (response.ok) { 189 if (document.querySelector("#dwCookieBanner")) { 190 document.querySelector("#dwCookieBanner").classList.add("d-none"); 191 } 192 document.location.reload(); 193 return false; 194 } else { 195 return false; 196 } 197 } 198 199 200 function consentGrantedAll() { 201 consentGrantedMarketing(); 202 consentGrantedAnalyticsStorage(); 203 } 204 function consentGrantedMarketing() { 205 consentGrantedAdStorage(); 206 consentGrantedAdUserData(); 207 consentGrantedAdPersonalization(); 208 } 209 210 function consentGrantedAdStorage() { 211 if (!window.dataLayer) return; 212 gtag('consent', 'update', { 213 'ad_storage': 'granted' 214 }); 215 } 216 217 function consentGrantedAdUserData() { 218 if (!window.dataLayer) return; 219 gtag('consent', 'update', { 220 'ad_user_data': 'granted' 221 }); 222 } 223 224 function consentGrantedAdPersonalization() { 225 if (!window.dataLayer) return; 226 gtag('consent', 'update', { 227 'ad_personalization': 'granted' 228 }); 229 } 230 231 function consentGrantedAnalyticsStorage() { 232 if (!window.dataLayer) return; 233 gtag('consent', 'update', { 234 'analytics_storage': 'granted' 235 }); 236 } 237 238 function toggleAcceptSelected() { 239 var cookieCalegoriesElement = document.querySelector("#dwCookieModalCustomForm"); 240 var enableAcceptSelected = false; 241 242 cookieCalegoriesElement.querySelectorAll(".js-checkbox").forEach(function (field) { 243 if (field.checked == true) { 244 enableAcceptSelected = true; 245 } 246 }); 247 248 if (enableAcceptSelected) { 249 document.querySelector("#dwCookieDeclineAll").classList.add("d-none"); 250 document.querySelector("#dwCookieAcceptSelected").classList.remove("d-none"); 251 } else { 252 document.querySelector("#dwCookieDeclineAll").classList.remove("d-none"); 253 document.querySelector("#dwCookieAcceptSelected").classList.add("d-none"); 254 } 255 } 256 257 function showCookieModal() { 258 var cookieModal = new bootstrap.Modal(document.querySelector('#dwCookieModal'), { 259 backdrop: 'static' 260 }); 261 cookieModal.show(); 262 } 263 </script> 264 265 if (layout == "modal") 266 { 267 <script type="module"> 268 showCookieModal(); 269 </script> 270 } 271 } 272