Enhance your business, save time & become a B2B Customer
If you want to be a customer, please fill out the form below.
You will be contacted when the account is approved
Get a B2B account
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