From c3bcde658bfca3a779b7948e5817f19bdc30298c Mon Sep 17 00:00:00 2001
From: Paolo Mainardi <paolomainardi@gmail.com>
Date: Mon, 02 Jan 2023 12:22:08 +0000
Subject: [PATCH] feat: Add support for custom remote javascript files (#751)

---
 exampleSite/config.toml      |    4 ++++
 layouts/_default/baseof.html |   11 +++++++++++
 docs/configurations.md       |   13 +++++++------
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/docs/configurations.md b/docs/configurations.md
index 5e07d0b..2202971 100644
--- a/docs/configurations.md
+++ b/docs/configurations.md
@@ -130,11 +130,11 @@
 | Name                          | Type   | Required | Description                                      | Default                          | Example                                          |
 | ----------------------------- | ------ | -------- | ------------------------------------------------ | -------------------------------- | ------------------------------------------------ |
 | author                        | string | Yes      | Author name.                                     |                                  | `"John Doe"`                                     |
-| info                          | string | Yes      | An headline, job title or similar.               |                                  | `"Full Stack Developer"`                         | 
+| info                          | string | Yes      | An headline, job title or similar.               |                                  | `"Full Stack Developer"`                         |
 | description                   | string | Yes      | Description of the site.                         |                                  | `"John Doe's personal website"`                  |
 | keywords                      | string | Yes      | Site keywords.                                   |                                  | `"blog,developer,personal"`                      |
-| avatarURL                     | string | No       | Photo of the author.                             |                                  | `"images/avatar.jpg"`                            | 
-| gravatar                      | string | No       | Gravatar photo of the author                     |                                  | `"john.doe@example.com"`                         | 
+| avatarURL                     | string | No       | Photo of the author.                             |                                  | `"images/avatar.jpg"`                            |
+| gravatar                      | string | No       | Gravatar photo of the author                     |                                  | `"john.doe@example.com"`                         |
 | favicon_32                    | string | No       | Custom path to a 32x32 favicon.                  | `"/img/favicon-32x32.png"`       | `"/img/favicon-32x32.png"`                       |
 | favicon_16                    | string | No       | Custom path to a 16x16 favicon.                  | `"/img/favicon-16x16.png"`       | `"/img/favicon-16x16.png"`                       |
 | touchIcon                     | string | No       | Custom path to a touch-icon                      | `"/images/apple-touch-icon.png"` | `"/images/apple-touch-icon.png"`                 |
@@ -149,13 +149,14 @@
 | customCSS                     | list   | No       | Add extra CSS files to the website.              | []                               | `["css/extra-style.css"]`                        |
 | customSCSS                    | list   | No       | Add extra SCSS files to the website.             | []                               | `["scss/extra-style.scss"]`                      |
 | customJS                      | list   | No       | Add extra JS files to the website.               | []                               | `["js/extra-script.js"]`                         |
+| customRemoteJS                | list   | No       | Add extra remote JS files to the website.        | []                               | `["https://www.example.com/file.js"]` |
 | enableTwemoji                 | bool   | No       | Adds support for Twemoji                         | `false`                          | `true` or `false`                                |
 
 ### Social Icons Configuration
 
 Social Icons are optional. To use them you will need to set at least all the following required parameters for each icon.
 
-| Configuration  | Type   | Required | Description                              | Example                         | 
+| Configuration  | Type   | Required | Description                              | Example                         |
 | -------------- | ------ | -------- | ---------------------------------------- | ------------------------------- |
 | name           | string | Yes      | Icon name.                               | `"Github"`                      |
 | icon           | string | Yes      | ForkAwesome icon classes.                | `"fa fa-github"`                |
@@ -186,7 +187,7 @@
 
 Menu Items are optional. To use them you will need to set all the following required parameters for each icon.
 
-| Configuration  | Type   | Required | Description                              | Example                         | 
+| Configuration  | Type   | Required | Description                              | Example                         |
 | -------------- | ------ | -------- | ---------------------------------------- | ------------------------------- |
 | name           | string | Yes      | Menu Item name.                          | `"Posts"`                       |
 | weight         | int    | Yes      | Menu Item order.                         | `1`                             |
@@ -212,7 +213,7 @@
 
 CSP stands for [Content Security Policy](https://developers.google.com/web/fundamentals/security/csp). These configurations are optional. To use them you will need to set all the following required parameters. See [here](https://developers.google.com/web/fundamentals/security/csp#policy_applies_to_a_wide_variety_of_resources) for reference.
 
-| Configuration  | Type        | Required | Description | Example                         | 
+| Configuration  | Type        | Required | Description | Example                         |
 | -------------- | ----------- | -------- | ----------- | ------------------------------- |
 | childsrc       | string list | Yes      |             | `["'self'"]`                    |
 | fontsrc        | string list | Yes      |             | `["'self'"]`                    |
diff --git a/exampleSite/config.toml b/exampleSite/config.toml
index 07f9608..b213811 100644
--- a/exampleSite/config.toml
+++ b/exampleSite/config.toml
@@ -39,9 +39,13 @@
 customCSS = []
 # Custom SCSS, file path is relative to Hugo's asset folder (default: {your project root}/assets)
 customSCSS = []
+
 # Custom JS
 customJS = []
 
+# Custom remote JS files
+customRemoteJS = []
+
 # If you want to use fathom(https://usefathom.com) for analytics, add this section
 # [params.fathomAnalytics]
 # siteID = "ABCDE"
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 562d7fc..ff0d00d 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -49,6 +49,17 @@
   {{ end }}
   {{ end }}
 
+  {{ range .Site.Params.customRemoteJS }}
+  {{ if $.Site.IsServer }}
+  {{ $script := resources.GetRemote . }}
+  <script src="{{ $script.RelPermalink }}"></script>
+  {{ else }}
+  {{ $script := resources.GetRemote . | minify | fingerprint }}
+  <script src="{{ $script.RelPermalink }}" integrity="{{ $script.Data.Integrity }}"></script>
+  {{ end }}
+  {{ end }}
+
+
   {{ template "_internal/google_analytics.html" . }}
 
   {{ if and .Site.Params.fathomAnalytics .Site.Params.fathomAnalytics.siteID }}

--
Gitblit v1.10.0