Error executing template "Designs/Swift-v2/Swift-v2_Page.cshtml"
System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open file descriptors has been reached.
at System.IO.FileSystemWatcher.StartRaisingEvents()
at Dynamicweb.Caching.FileChangeMonitor.InitializeMonitor(String path)
at Dynamicweb.Caching.FileChangeMonitor..ctor(IEnumerable`1 paths, Boolean includeSubdirectories)
at Dynamicweb.Caching.MemoryCacheManager.ConvertCachePolicy(CacheItemPolicy policy)
at Dynamicweb.Caching.MemoryCacheManager.Set(String key, Object cacheItem, CacheItemPolicy policy)
at Dynamicweb.Rendering.Translation.Source.GetTranslationSource(String designName, String moduleName, String cultureName)
at Dynamicweb.Rendering.Template.TranslateText(String text, String defaultValue, String cultureName)
at CompiledRazorTemplates.Dynamic.RazorEngine_25110594e629463dbb87617c4c2aca29.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2 @using System
3 @using Dynamicweb
4 @using Dynamicweb.Environment
5 @using Dynamicweb.Frontend
6 @using Dynamicweb.Frontend.Devices
7 @using Dynamicweb.Rendering
8
9 @{
10 Pageview.Meta.AddTag("fb:app_id", Model.Area?.Item?.GetString("FacebookAppId"));
11 Pageview.Meta.AddTag("google-site-verification", Model.Area?.Item?.GetString("GoogleSiteVerification"));
12 Pageview.Meta.AddTag("site_name", Model.Area?.Item?.TryGetString("MetaSiteName", out string? siteName) is true ? siteName : Model.Area?.Name);
13 Pageview.Meta.AddTag("url", Pageview.Meta.Canonical?.ToString());
14 Pageview.Meta.AddTag("twitter:site", Model.Area?.Item?.GetString("TwitterSite"));
15 Pageview.Meta.AddOpenGraphTag("type", "website");
16 Pageview.Meta.AddOpenGraphTag("url", Pageview.Meta.Canonical?.ToString());
17 Pageview.Meta.AddOpenGraphTag("title", Model.Title);
18 Pageview.Meta.AddOpenGraphTag("description", Model.Description);
19
20 if (Model.Area?.Item?.TryGetImageFile("MetaImage", out ImageFileViewModel? image) ?? false) {
21 Pageview.Meta.AddOpenGraphTag("image", image.Path);
22 Pageview.Meta.AddOpenGraphTag("image:alt", Model.Area?.Item?.GetString("MetaImageALT"));
23 }
24
25 string? googleTagManagerID = string.Empty;
26 if (Model.Area?.Item?.TryGetString("GoogleTagManagerID", out googleTagManagerID) ?? false)
27 {
28 googleTagManagerID = googleTagManagerID.Trim();
29 }
30
31 @* Stylesheets *@
32 AddStylesheet("/Files/Templates/Designs/Swift-v2/Assets/css/swift.css");
33
34 @* Color schemes stylesheet *@
35 @if (Model.TryGetColorSchemeStyle(out string? colorSchemeStyle))
36 {
37 AddStylesheet(colorSchemeStyle);
38 }
39 @* Button stylesheet *@
40 @if (Model.TryGetButtonStyle(out string? buttonStyle)) {
41 AddStylesheet(buttonStyle);
42 }
43 @* Typography stylesheet *@
44 @if (Model.TryGetTypographyStyle(out string? typographyStyle)) {
45 AddStylesheet(typographyStyle);
46 }
47
48 @* Scripts *@
49 AddScript("/Files/Templates/Designs/Swift-v2/Assets/lib/bootstrap/dist/js/bootstrap.bundle.min.js");
50 AddScript("/Files/Templates/Designs/Swift-v2/Assets/lib/htmx.org/dist/htmx.min.js");
51 AddScript("/Files/Templates/Designs/Swift-v2/Assets/lib/alpinejs/dist/cdn.min.js", true);
52 AddScript("/Files/Templates/Designs/Swift-v2/Assets/js/swift.js");
53
54 @* Custom <head> include *@
55 if (Model.Area?.Item?.TryGetFile("CustomHeadInclude", out FileViewModel? customHeadInclude) ?? false)
56 {
57 @RenderPartial($"Designs/Swift-v2/Custom/{customHeadInclude?.Name}")
58 }
59 }
60
61 <!doctype html>
62 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName" data-swift-version="@(ReadFile("/Files/Templates/Designs/Swift-v2/swift_version.txt")?.Trim())" data-swift-openlinksinnewtab="@Model.Area?.Item?.GetBoolean("OpenLinksInNewTab")">
63 <head>
64 @* Required meta tags *@
65 <meta charset="utf-8">
66 <meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0">
67
68 @* MetaTags *@
69 @Model.MetaTags
70
71 @if (Model.Area?.Item?.TryGetImageFile("Favicon", out ImageFileViewModel? faviconImage) ?? false)
72 {
73 <link rel="shortcut icon" href="@faviconImage?.Path">
74 }
75 @if (Model.Area?.Item?.TryGetImageFile("AppleTouchIcon", out ImageFileViewModel? appleTouchIconImage) ?? false)
76 {
77 <link rel="apple-touch-icon" href="@appleTouchIconImage?.Path">
78 }
79
80 @* Pageview Meta *@
81 <title>@Model.Title</title>
82
83 @* Get stylesheets *@
84 @Model.GetStylesheetsMarkup()
85
86 @* Media Query Limit *@
87 @if(Model.Area?.Item?.TryGetString("MediaQueryLimit", out string? mediaQueryLimit) ?? false) {
88 <style>
89 @@media screen and (min-width: @(mediaQueryLimit)px) {
90 [data-swift-container] {
91 --dw-container-limit: @(mediaQueryLimit)px;
92 }
93
94 [data-swift-container],
95 [data-dw-container-width="3"] {
96 --dw-container-width: calc(var(--dw-container-limit) * .8);
97 }
98
99 [data-dw-container-width="1"] {
100 --dw-container-width: var(--swift-text-width);
101 }
102
103 [data-dw-container-width="2"] {
104 --dw-container-width: calc(var(--dw-container-limit) * .65);
105 }
106 }
107 </style>
108 }
109
110 @* Get scripts *@
111 @Model.GetScriptsMarkup()
112
113 @* Google gtag method - always include even if it is not used for anything *@
114 <script>
115 window.dataLayer = window.dataLayer || [];
116 function gtag() { dataLayer.push(arguments); }
117 </script>
118 @* Google tag manager *@
119 @if (!string.IsNullOrWhiteSpace(googleTagManagerID) && !Pageview.IsVisualEditorMode)
120 {
121 <script>
122 gtag('consent', 'default', {
123 'ad_storage': 'denied',
124 'ad_user_data': 'denied',
125 'ad_personalization': 'denied',
126 'analytics_storage': 'denied'
127 });
128 </script>
129 <script>
130 (function (w, d, s, l, i) {
131 w[l] = w[l] || []; w[l].push({
132 'gtm.start':
133 new Date().getTime(), event: 'gtm.js'
134 }); var f = d.getElementsByTagName(s)[0],
135 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
136 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
137 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)');
138 </script>
139 if (AllowTracking())
140 {
141 <script>
142 gtag('consent', 'update', {
143 'ad_storage': '@(CookieManager.IsCookieOptInGranted("Marketing") ? "granted" : "denied")',
144 'ad_user_data': '@(CookieManager.IsCookieOptInGranted("Marketing") ? "granted" : "denied")',
145 'ad_personalization': '@(CookieManager.IsCookieOptInGranted("Marketing") ? "granted" : "denied")',
146 'analytics_storage': '@(CookieManager.IsCookieOptInGranted("Statistical") ? "granted" : "denied")'
147 });
148 </script>
149 }
150 }
151 </head>
152 <body data-dw-page-id="@(Model.ID)" data-dw-itemtype="@Model.Item?.SystemName?.ToLower()">
153
154 @* Google tag manager *@
155 @if (!string.IsNullOrWhiteSpace(googleTagManagerID) && AllowTracking())
156 {
157 <noscript>
158 <iframe src="https://www.googletagmanager.com/ns.html?id=@(googleTagManagerID)" height="0" width="0" style="display:none;visibility:hidden"></iframe>
159 </noscript>
160 }
161
162 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
163 @using System
164 @using Dynamicweb.Frontend
165 @using Dynamicweb.Frontend.Devices
166 @using Dynamicweb.Ecommerce.ProductCatalog
167 @using Dynamicweb.Ecommerce.Products
168
169
170 @{
171 bool isContentOnly = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current?.Request.QueryString.Get("ContentOnly") ?? "false");
172 // Page headers
173 LinkViewModel headerLink;
174 if (!isContentOnly && ((Pageview.Device == DeviceType.Desktop && (Model.Area?.Item?.TryGetLink("HeaderDesktop", out headerLink) ?? false)) ||
175 !isContentOnly && (Pageview.Device == DeviceType.Mobile || Pageview.Device == DeviceType.Tablet) && (Model.Area?.Item?.TryGetLink("HeaderMobile", out headerLink) ?? false)))
176 {
177 string? headerCss = null;
178 var headerPage = ContentViewModelFactory.CreatePageInfoViewModel(Dynamicweb.Content.Services.Pages.GetPage(headerLink.PageId));
179 if ((headerPage.Item?.TryGetString("HeaderPosition", out string headerPosition) ?? false) && !headerPosition.Equals("static", StringComparison.OrdinalIgnoreCase))
180 {
181 headerCss = headerPosition;
182 }
183 <header data-swift-page-header="@(headerLink.PageId)" class="@headerCss d-print-none" data-dw-colorscheme="@headerPage.ColorScheme?.Id">
184 @RenderGrid(headerLink.PageId)
185 </header>
186 }
187 }
188
189 <main id="content" data-dw-colorscheme="@(Model.ColorScheme?.Id ?? Model.Area?.ColorScheme?.Id)">
190
191 @Model.Grid("Grid", "Grid", "default:true;sort:1", "Page")
192
193 </main>
194
195 @{ // Page footers
196 LinkViewModel footerLink;
197 if (!isContentOnly && ((Pageview.Device == DeviceType.Desktop) && (Model.Area?.Item?.TryGetLink("FooterDesktop", out footerLink) ?? false)) ||
198 !isContentOnly && ((Pageview.Device == DeviceType.Mobile || Pageview.Device == DeviceType.Tablet) && (Model.Area?.Item?.TryGetLink("FooterMobile", out footerLink) ?? false)))
199 {
200 var footerPage = ContentViewModelFactory.CreatePageInfoViewModel(Dynamicweb.Content.Services.Pages.GetPage(footerLink.PageId));
201 <footer class="d-print-none" data-swift-page-footer="@(footerLink.PageId)" data-dw-colorscheme="@footerPage.ColorScheme?.Id">
202 @RenderGrid(footerLink.PageId)
203 </footer>
204 }
205 }
206
207 @if (isContentOnly)
208 {
209 return;
210 }
211
212 @* Favorite toast *@
213 <div aria-live="polite" aria-atomic="true" data-dw-colorscheme="@(Model.Area?.ColorScheme?.Id ?? "light")">
214 <div class="position-fixed bottom-0 end-0 p-3" style="z-index: 11">
215 <div id="favoriteNotificationToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
216 <div class="toast-header">
217 <strong class="me-auto">@Translate("Favorite list updated")</strong>
218 <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
219 </div>
220 <div class="toast-body d-flex gap-3">
221 <div id="favoriteNotificationToast_Image"></div>
222 <div id="favoriteNotificationToast_Text"></div>
223 </div>
224 </div>
225 </div>
226 </div>
227
228 @* Modal for dynamic content *@
229 <div class="modal fade js-product" id="DynamicModal" tabindex="-1" aria-hidden="true">
230 <div class="modal-dialog modal-dialog-centered modal-md">
231 <div class="modal-content" id="DynamicModalContent" data-dw-colorscheme="@(Model.Area?.ColorScheme?.Id ?? "light")">
232 @* The content here comes from an external request *@
233 </div>
234 </div>
235 </div>
236
237 @* Offcanvas for dynamic content *@
238 <div class="offcanvas offcanvas-end border-0" tabindex="-1" id="DynamicOffcanvas" data-dw-colorscheme="@(Model.Area?.ColorScheme?.Id ?? "light")">
239 @* The content here comes from an external request *@
240 </div>
241
242 </body>
243
244 </html>
245
246 @functions {
247 bool AllowTracking()
248 {
249 bool allowTracking = true;
250 if (CookieManager.IsCookieManagementActive)
251 {
252 var cookieOptInLevel = CookieManager.GetCookieOptInLevel();
253 var cookieOptInCategories = CookieManager.GetCookieOptInCategories();
254 bool consentEither = (cookieOptInCategories.Contains("Statistical") || cookieOptInCategories.Contains("Marketing"));
255 bool consentFunctional = cookieOptInLevel == CookieOptInLevel.Functional;
256 bool consentAtLeastOne = cookieOptInLevel == CookieOptInLevel.All || (consentFunctional && consentEither);
257 allowTracking = consentAtLeastOne;
258 }
259 return allowTracking;
260 }
261 }
262