diff --git a/exampleSite/hugo_stats.json b/exampleSite/hugo_stats.json index 16779128..ae67e471 100644 --- a/exampleSite/hugo_stats.json +++ b/exampleSite/hugo_stats.json @@ -998,10 +998,10 @@ "docs", "dropdown-callout-1", "dropdown-nav-0", - "dropdown-panel-1d0658730d47d6ace11128374e690b90", - "dropdown-panel-b4ec1bba87d10a332865654cc5c19a6b", - "dropdown-panel-bf0794d13fedf09a704c86e0292c4569", - "dropdown-panel-c5df493aabe2d1ad023df9d3069c96c4", + "dropdown-panel-2b1b4f360c8f8e734bc2855145885663", + "dropdown-panel-3f56152912d745e119052c0258044b22", + "dropdown-panel-cbcea5acc67a7532649c8139f7a626d0", + "dropdown-panel-efd4a1ff966b96864dca703cb84a026b", "dropdown-pills-1", "dropdown-tabs-1", "dropdown-underline-1", @@ -1025,11 +1025,11 @@ "fab-whatsapp", "fab-x-twitter", "faq", - "faq-9b7c864a4b3429c32315fca5282bf54a", - "faq-9b7c864a4b3429c32315fca5282bf54a-heading-faq-9b7c864a4b3429c32315fca5282bf54a", - "faq-9b7c864a4b3429c32315fca5282bf54a-item-0", - "faq-9b7c864a4b3429c32315fca5282bf54a-item-1", - "faq-9b7c864a4b3429c32315fca5282bf54a-item-2", + "faq-f633e5459b21f0df0493c50eeecb6181", + "faq-f633e5459b21f0df0493c50eeecb6181-heading-faq-f633e5459b21f0df0493c50eeecb6181", + "faq-f633e5459b21f0df0493c50eeecb6181-item-0", + "faq-f633e5459b21f0df0493c50eeecb6181-item-1", + "faq-f633e5459b21f0df0493c50eeecb6181-item-2", "far-square", "fas-1", "fas-2", @@ -1185,10 +1185,10 @@ "nav-0-btn-2", "nav-callout-1", "nav-nav-0", - "nav-panel-1d0658730d47d6ace11128374e690b90", - "nav-panel-b4ec1bba87d10a332865654cc5c19a6b", - "nav-panel-bf0794d13fedf09a704c86e0292c4569", - "nav-panel-c5df493aabe2d1ad023df9d3069c96c4", + "nav-panel-2b1b4f360c8f8e734bc2855145885663", + "nav-panel-3f56152912d745e119052c0258044b22", + "nav-panel-cbcea5acc67a7532649c8139f7a626d0", + "nav-panel-efd4a1ff966b96864dca703cb84a026b", "nav-pills-1", "nav-tabs-1", "nav-underline-1", @@ -1225,30 +1225,30 @@ "over-mij", "overview", "page-link", - "panel-1d0658730d47d6ace11128374e690b90-0", - "panel-1d0658730d47d6ace11128374e690b90-1", - "panel-1d0658730d47d6ace11128374e690b90-2", - "panel-1d0658730d47d6ace11128374e690b90-btn-0", - "panel-1d0658730d47d6ace11128374e690b90-btn-1", - "panel-1d0658730d47d6ace11128374e690b90-btn-2", - "panel-b4ec1bba87d10a332865654cc5c19a6b-0", - "panel-b4ec1bba87d10a332865654cc5c19a6b-1", - "panel-b4ec1bba87d10a332865654cc5c19a6b-2", - "panel-b4ec1bba87d10a332865654cc5c19a6b-btn-0", - "panel-b4ec1bba87d10a332865654cc5c19a6b-btn-1", - "panel-b4ec1bba87d10a332865654cc5c19a6b-btn-2", - "panel-bf0794d13fedf09a704c86e0292c4569-0", - "panel-bf0794d13fedf09a704c86e0292c4569-1", - "panel-bf0794d13fedf09a704c86e0292c4569-2", - "panel-bf0794d13fedf09a704c86e0292c4569-btn-0", - "panel-bf0794d13fedf09a704c86e0292c4569-btn-1", - "panel-bf0794d13fedf09a704c86e0292c4569-btn-2", - "panel-c5df493aabe2d1ad023df9d3069c96c4-0", - "panel-c5df493aabe2d1ad023df9d3069c96c4-1", - "panel-c5df493aabe2d1ad023df9d3069c96c4-2", - "panel-c5df493aabe2d1ad023df9d3069c96c4-btn-0", - "panel-c5df493aabe2d1ad023df9d3069c96c4-btn-1", - "panel-c5df493aabe2d1ad023df9d3069c96c4-btn-2", + "panel-2b1b4f360c8f8e734bc2855145885663-0", + "panel-2b1b4f360c8f8e734bc2855145885663-1", + "panel-2b1b4f360c8f8e734bc2855145885663-2", + "panel-2b1b4f360c8f8e734bc2855145885663-btn-0", + "panel-2b1b4f360c8f8e734bc2855145885663-btn-1", + "panel-2b1b4f360c8f8e734bc2855145885663-btn-2", + "panel-3f56152912d745e119052c0258044b22-0", + "panel-3f56152912d745e119052c0258044b22-1", + "panel-3f56152912d745e119052c0258044b22-2", + "panel-3f56152912d745e119052c0258044b22-btn-0", + "panel-3f56152912d745e119052c0258044b22-btn-1", + "panel-3f56152912d745e119052c0258044b22-btn-2", + "panel-cbcea5acc67a7532649c8139f7a626d0-0", + "panel-cbcea5acc67a7532649c8139f7a626d0-1", + "panel-cbcea5acc67a7532649c8139f7a626d0-2", + "panel-cbcea5acc67a7532649c8139f7a626d0-btn-0", + "panel-cbcea5acc67a7532649c8139f7a626d0-btn-1", + "panel-cbcea5acc67a7532649c8139f7a626d0-btn-2", + "panel-efd4a1ff966b96864dca703cb84a026b-0", + "panel-efd4a1ff966b96864dca703cb84a026b-1", + "panel-efd4a1ff966b96864dca703cb84a026b-2", + "panel-efd4a1ff966b96864dca703cb84a026b-btn-0", + "panel-efd4a1ff966b96864dca703cb84a026b-btn-1", + "panel-efd4a1ff966b96864dca703cb84a026b-btn-2", "panels", "persona", "pie-chart", @@ -1266,50 +1266,50 @@ "powershell", "premier-article", "preview", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-desktop", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-desktop-tab", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-mobile", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-mobile-tab", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-tablet", - "preview-0397be08363bf0bf65d7c7b25b9a9ae8-tablet-tab", + "preview-0d769bdc778af3070f29603625c58d61-desktop", + "preview-0d769bdc778af3070f29603625c58d61-desktop-tab", + "preview-0d769bdc778af3070f29603625c58d61-mobile", + "preview-0d769bdc778af3070f29603625c58d61-mobile-tab", + "preview-0d769bdc778af3070f29603625c58d61-tablet", + "preview-0d769bdc778af3070f29603625c58d61-tablet-tab", "preview-1", - "preview-196dc2f073889223e182639f658ffe9a-desktop", - "preview-196dc2f073889223e182639f658ffe9a-desktop-tab", - "preview-196dc2f073889223e182639f658ffe9a-mobile", - "preview-196dc2f073889223e182639f658ffe9a-mobile-tab", - "preview-196dc2f073889223e182639f658ffe9a-tablet", - "preview-196dc2f073889223e182639f658ffe9a-tablet-tab", "preview-2", - "preview-21856d385d16a2516668e98dc15dc601-desktop", - "preview-21856d385d16a2516668e98dc15dc601-mobile", - "preview-21856d385d16a2516668e98dc15dc601-tablet", - "preview-23a61124d9703d09568c47fa9c641480-desktop", - "preview-23a61124d9703d09568c47fa9c641480-mobile", - "preview-23a61124d9703d09568c47fa9c641480-tablet", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-desktop", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-desktop-tab", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-mobile", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-mobile-tab", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-tablet", - "preview-6d686670a6c0f6e37350cb18f4ccf3b7-tablet-tab", - "preview-849932cb757db41ce1a9224fb7bfcf76-desktop", - "preview-849932cb757db41ce1a9224fb7bfcf76-desktop-tab", - "preview-849932cb757db41ce1a9224fb7bfcf76-mobile", - "preview-849932cb757db41ce1a9224fb7bfcf76-mobile-tab", - "preview-849932cb757db41ce1a9224fb7bfcf76-tablet", - "preview-849932cb757db41ce1a9224fb7bfcf76-tablet-tab", - "preview-b1859b651cf35e55907f295660f1ccee-desktop", - "preview-b1859b651cf35e55907f295660f1ccee-desktop-tab", - "preview-b1859b651cf35e55907f295660f1ccee-mobile", - "preview-b1859b651cf35e55907f295660f1ccee-mobile-tab", - "preview-b1859b651cf35e55907f295660f1ccee-tablet", - "preview-b1859b651cf35e55907f295660f1ccee-tablet-tab", - "preview-b5329d7b69dc4d5e628418c295c24adb-desktop", - "preview-b5329d7b69dc4d5e628418c295c24adb-desktop-tab", - "preview-b5329d7b69dc4d5e628418c295c24adb-mobile", - "preview-b5329d7b69dc4d5e628418c295c24adb-mobile-tab", - "preview-b5329d7b69dc4d5e628418c295c24adb-tablet", - "preview-b5329d7b69dc4d5e628418c295c24adb-tablet-tab", + "preview-693fe51c664328a7916e28f2db27855d-desktop", + "preview-693fe51c664328a7916e28f2db27855d-mobile", + "preview-693fe51c664328a7916e28f2db27855d-tablet", + "preview-6c18393748139552a3bf7ac07a0f8e77-desktop", + "preview-6c18393748139552a3bf7ac07a0f8e77-desktop-tab", + "preview-6c18393748139552a3bf7ac07a0f8e77-mobile", + "preview-6c18393748139552a3bf7ac07a0f8e77-mobile-tab", + "preview-6c18393748139552a3bf7ac07a0f8e77-tablet", + "preview-6c18393748139552a3bf7ac07a0f8e77-tablet-tab", + "preview-8a61ce43963da4727eb00ba95203a8a4-desktop", + "preview-8a61ce43963da4727eb00ba95203a8a4-desktop-tab", + "preview-8a61ce43963da4727eb00ba95203a8a4-mobile", + "preview-8a61ce43963da4727eb00ba95203a8a4-mobile-tab", + "preview-8a61ce43963da4727eb00ba95203a8a4-tablet", + "preview-8a61ce43963da4727eb00ba95203a8a4-tablet-tab", + "preview-94e9a6a5e9ec21196624da64f64b36fb-desktop", + "preview-94e9a6a5e9ec21196624da64f64b36fb-mobile", + "preview-94e9a6a5e9ec21196624da64f64b36fb-tablet", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-desktop", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-desktop-tab", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-mobile", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-mobile-tab", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-tablet", + "preview-9f1bdf6890b6800fa5dc4d7e4c47ac9c-tablet-tab", + "preview-b8d0c22bf6ad242a06f409087f27228a-desktop", + "preview-b8d0c22bf6ad242a06f409087f27228a-desktop-tab", + "preview-b8d0c22bf6ad242a06f409087f27228a-mobile", + "preview-b8d0c22bf6ad242a06f409087f27228a-mobile-tab", + "preview-b8d0c22bf6ad242a06f409087f27228a-tablet", + "preview-b8d0c22bf6ad242a06f409087f27228a-tablet-tab", + "preview-c66498e515983593b7e78b765f49e650-desktop", + "preview-c66498e515983593b7e78b765f49e650-desktop-tab", + "preview-c66498e515983593b7e78b765f49e650-mobile", + "preview-c66498e515983593b7e78b765f49e650-mobile-tab", + "preview-c66498e515983593b7e78b765f49e650-tablet", + "preview-c66498e515983593b7e78b765f49e650-tablet-tab", "preview-unavailable", "preview-unavailable-alert-only", "preview-with-specific-device", @@ -1375,7 +1375,7 @@ "tabs-1-btn-2", "team", "testimonial", - "testimonial-carousel-6379dfbdec3752c5abd8ed7df7624139", + "testimonial-carousel-1f4ebf75ce47e780f1e841b6f2006c4d", "testimonial-with-avatar", "testimonial-with-case-study", "testimonial-with-icon", diff --git a/go.mod b/go.mod index 8e906136..779926d0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/gethinode/mod-csp v1.0.9 // indirect github.com/gethinode/mod-flexsearch/v4 v4.1.0 // indirect github.com/gethinode/mod-fontawesome/v5 v5.1.0 // indirect - github.com/gethinode/mod-google-analytics/v2 v2.0.0 // indirect + github.com/gethinode/mod-google-analytics/v2 v2.0.1 // indirect github.com/gethinode/mod-katex v1.1.4 // indirect github.com/gethinode/mod-leaflet/v2 v2.1.0 // indirect github.com/gethinode/mod-lottie/v2 v2.1.0 // indirect diff --git a/go.sum b/go.sum index 5fade483..7cb1217c 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,8 @@ github.com/gethinode/mod-fontawesome/v5 v5.1.0 h1:u3ntQMe1fGntcrljxrbZXA9Q0z2WHl github.com/gethinode/mod-fontawesome/v5 v5.1.0/go.mod h1:b9nG1pel6LIWiNyb0kZAmyhLo2rrx4dvG2xyoD8tDlk= github.com/gethinode/mod-google-analytics/v2 v2.0.0 h1:Vor4j56qtpjtKY9r5QLeN5CBxuf8YKP3+XvQKEkayrM= github.com/gethinode/mod-google-analytics/v2 v2.0.0/go.mod h1:y4ZlacA8FSXjmvn9P8cZshOrBB5Wc+3p0DKSehkk+8E= +github.com/gethinode/mod-google-analytics/v2 v2.0.1 h1:WNI8e06Bl1pLYrt1Adwuk4KtU9uVrJmO+KZxggIcI0M= +github.com/gethinode/mod-google-analytics/v2 v2.0.1/go.mod h1:y4ZlacA8FSXjmvn9P8cZshOrBB5Wc+3p0DKSehkk+8E= github.com/gethinode/mod-katex v1.1.4 h1:HWc45uHKX2JhI624UnA46LCZkLGhSbaq+zAHt9e57zw= github.com/gethinode/mod-katex v1.1.4/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-leaflet/v2 v2.0.0 h1:94sQHzzrgB15LuePziHahss/SgJ21a2kDsOx4eE4e7A= diff --git a/layouts/_partials/footer/scripts.html b/layouts/_partials/footer/scripts.html index a05fa18a..427ac2fd 100644 --- a/layouts/_partials/footer/scripts.html +++ b/layouts/_partials/footer/scripts.html @@ -54,7 +54,11 @@ {{- $js := $bundle.bundle -}} {{- $jsmod := $bundle.module -}} - {{- if gt (len $js.Content) 0 -}} + {{/* Strip js and Hugo comments then trim whitespace to detect whether the bundle contains actual code. A bundle + that renders to comments only would otherwise produce a fingerprint of empty content while hugo server serves + the unminified comment, causing an SRI/CSP integrity mismatch. */}} + {{- $jsCode := $js.Content | replaceRE `(?m)//[^\n]*` "" | replaceRE `(?s)/\*.*?\*/` "" | strings.TrimSpace -}} + {{- if gt (len $jsCode) 0 -}} {{- $integrity := "" -}} {{- if hugo.IsProduction -}} {{- $js = $js | minify | fingerprint -}} @@ -63,13 +67,14 @@ {{- partial "templates/script.html" (dict "link" (cond $absoluteURL $js.Permalink $js.RelPermalink) - "category" $cat + "category" $cat "state" $state "integrity" $integrity ) -}} {{- end -}} - {{- if gt (len $jsmod.Content) 0 -}} + {{- $jsmodCode := $jsmod.Content | replaceRE `(?m)//[^\n]*` "" | replaceRE `(?s)/\*.*?\*/` "" | strings.TrimSpace -}} + {{- if gt (len $jsmodCode) 0 -}} {{- $integrity := "" -}} {{- if hugo.IsProduction -}} {{- $jsmod = $jsmod | minify | fingerprint -}} @@ -78,7 +83,7 @@ {{- partial "templates/script.html" (dict "link" (cond $absoluteURL $jsmod.Permalink $jsmod.RelPermalink) - "category" $cat + "category" $cat "state" $state "integrity" $integrity "script-type" "module"