mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 10:04:22 +00:00
Compare commits
47 Commits
v0.27.0-al
...
v0.27.0-al
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2b3f87b885 | ||
![]() |
213bb31133 | ||
![]() |
b0130d9f7d | ||
![]() |
07a3be644c | ||
![]() |
262bc47260 | ||
![]() |
51553a05f0 | ||
![]() |
bd06ee211b | ||
![]() |
cc8e889825 | ||
![]() |
a6144122b2 | ||
![]() |
853e0c818f | ||
![]() |
1c5fb55d89 | ||
![]() |
d48fb1a300 | ||
![]() |
f2aa9d2661 | ||
![]() |
d721e1cfc2 | ||
![]() |
7f7bf2152c | ||
![]() |
a9543de1e7 | ||
![]() |
39e4073837 | ||
![]() |
d2782349d5 | ||
![]() |
fe97815460 | ||
![]() |
7bcaa69d5b | ||
![]() |
30ae3f6b3c | ||
![]() |
6540e11fa9 | ||
![]() |
14f2145239 | ||
![]() |
856a0aed08 | ||
![]() |
5c6b91f1ce | ||
![]() |
152b8ca060 | ||
![]() |
0f8870fed0 | ||
![]() |
742ae6784b | ||
![]() |
ce4c8c0a7c | ||
![]() |
40de449fed | ||
![]() |
4c27864248 | ||
![]() |
3efb2b7451 | ||
![]() |
721e222849 | ||
![]() |
77b9d62d76 | ||
![]() |
efe3c947c2 | ||
![]() |
beee2e40e0 | ||
![]() |
895d606175 | ||
![]() |
9a17df96f3 | ||
![]() |
d2e1a1678a | ||
![]() |
d8451e2699 | ||
![]() |
f98ab74905 | ||
![]() |
6e453ea2ab | ||
![]() |
d6ca890c80 | ||
![]() |
46aecfe65a | ||
![]() |
496c07ff7e | ||
![]() |
3a63f4fad7 | ||
![]() |
bbf99507d6 |
@@ -123,7 +123,7 @@ Hinode is inspired by the following themes:
|
||||
## Donate
|
||||
|
||||
<!-- markdownlint-disable MD033 -->
|
||||
<a href="https://www.buymeacoffee.com/markdumay" target="_blank" rel="noopener noreferrer"><img src="https://cdn.buymeacoffee.com/buttons/lato-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;"></a>
|
||||
<a href="https://www.buymeacoffee.com/markdumay" target="_blank" rel="noopener noreferrer nofollow"><img src="https://cdn.buymeacoffee.com/buttons/lato-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;"></a>
|
||||
<!-- markdownlint-enable MD033 -->
|
||||
|
||||
## License
|
||||
|
@@ -1,21 +0,0 @@
|
||||
// Adapted from https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/google_analytics.html
|
||||
|
||||
{{ if and (not hugo.IsServer) (not site.Config.Privacy.GoogleAnalytics.Disable) }}
|
||||
{{ with site.Config.Services.GoogleAnalytics.ID }}
|
||||
{{ if strings.HasPrefix (lower .) "ua-" }}
|
||||
{{ warnf "Google Analytics 4 (GA4) replaced Google Universal Analytics (UA) effective 1 July 2023. See https://support.google.com/analytics/answer/11583528. Create a GA4 property and data stream, then replace the Google Analytics ID in your site configuration with the new value." }}
|
||||
{{ else }}
|
||||
var doNotTrack = false;
|
||||
if ({{ site.Config.Privacy.GoogleAnalytics.RespectDoNotTrack }}) {
|
||||
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
|
||||
var doNotTrack = (dnt == "1" || dnt == "yes");
|
||||
}
|
||||
if (!doNotTrack) {
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{ . }}');
|
||||
}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
@@ -130,6 +130,8 @@ home = ["HTML", "RSS", "REDIR"]
|
||||
path = "github.com/gethinode/mod-flexsearch/v2"
|
||||
[[module.imports]]
|
||||
path = "github.com/gethinode/mod-fontawesome"
|
||||
[[module.imports]]
|
||||
path = "github.com/gethinode/mod-google-analytics"
|
||||
[[module.imports]]
|
||||
path = "github.com/gethinode/mod-katex"
|
||||
[[module.imports]]
|
||||
|
@@ -11,5 +11,5 @@
|
||||
title = "Follow me"
|
||||
caption = "I work on everything coding and tweet developer memes"
|
||||
[en.params.footer]
|
||||
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer nofollow'>CC BY-NC-SA 4.0</a>)."
|
||||
# toml-docs-end lang-param
|
||||
|
@@ -10,7 +10,7 @@ const purgecss = require('@fullhuman/postcss-purgecss')({
|
||||
return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]
|
||||
},
|
||||
dynamicAttributes: ['data-bs-theme'],
|
||||
safelist: [
|
||||
safelist: ['was-validated',
|
||||
...whitelister([
|
||||
'./assets/scss/components/_clipboard.scss',
|
||||
'./assets/scss/components/_command.scss',
|
||||
|
65
data/structures/script.yml
Normal file
65
data/structures/script.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
comment: >-
|
||||
Includes a reference to a local or external JavaScript file. Hinode uses the
|
||||
template defined in `layouts/partials/templates/script.html` to generate the
|
||||
link to a (bundled) JavaScript file. It includes context such as the state,
|
||||
category, and integrity. For example, you can adapt this template to implement
|
||||
cookie consent management.
|
||||
arguments:
|
||||
link:
|
||||
type: string
|
||||
optional: false
|
||||
comment: >-
|
||||
Location of the script source, either an URL for an external script or a
|
||||
(relative) path for a local script.
|
||||
state:
|
||||
type: select
|
||||
optional: true
|
||||
comment: >-
|
||||
Defines the loading behavior of the script bundle. By default, scripts are
|
||||
loaded immediately. Use `async` to process the script in the background.
|
||||
Use 'defer' to load the script in relative order when the DOM is fully
|
||||
built.
|
||||
options:
|
||||
values:
|
||||
- async
|
||||
- defer
|
||||
- immediate
|
||||
category:
|
||||
type: select
|
||||
optional: true
|
||||
default: other
|
||||
comment: >-
|
||||
Assigns the script to a category that can be used for cookie consent
|
||||
management. The following categories are available:
|
||||
- Necessary cookies are linked to the site's essential features, which include
|
||||
secure log-in and customizable consent settings. There is no personally
|
||||
identifying information stored by these cookies.
|
||||
- Functional cookies facilitate the performance of specific tasks, such as
|
||||
gathering user comments, disseminating the website's content on social
|
||||
media, and enabling additional third-party capabilities. Hinode uses
|
||||
functional cookies to store the user's language and theme preferences.
|
||||
- Cookies with analytical functions are employed to comprehend how users
|
||||
engage with the website. These cookies aid in the provision of data on
|
||||
metrics like number of visitors, bounce rate, source of traffic, etc.
|
||||
- In order to provide users with a better user experience, performance
|
||||
cookies are employed to comprehend and evaluate the website's important
|
||||
performance indicators.
|
||||
- Advertisement cookies are used to track the success of ad campaigns and
|
||||
show users personalized advertisements depending on the pages they have
|
||||
previously viewed.
|
||||
- Unassigned cookies are categorized as 'other' by default. These cookies
|
||||
should be reviewed and assigned to a specific category by the site
|
||||
administrator.
|
||||
options:
|
||||
values:
|
||||
- necessary
|
||||
- functional
|
||||
- analytics
|
||||
- performance
|
||||
- advertisement
|
||||
- other
|
||||
integrity:
|
||||
type: string
|
||||
optional: true
|
||||
comment: >-
|
||||
Cryptographic hash of the script to enable Subresource Integrity (SRI).
|
@@ -8,62 +8,17 @@ arguments:
|
||||
- '*hugolib.pageForShortcode'
|
||||
optional: false
|
||||
comment: Context of the current page.
|
||||
core:
|
||||
type: bool
|
||||
default: false
|
||||
optional: true
|
||||
comment: >-
|
||||
Trigger to include all core files in the script bundle. Core bundles are
|
||||
loaded asynchronously in each page of the site.
|
||||
filename:
|
||||
type: string
|
||||
default: js/main.bundle.js
|
||||
optional: true
|
||||
comment: >-
|
||||
Path of the target bundle file, relative to the site root.
|
||||
match:
|
||||
type: string
|
||||
default: {js/*.js,js/vendor/**.js}
|
||||
optional: true
|
||||
comment: >-
|
||||
Regular expression that defines the pattern of source files to be included
|
||||
in the bundle. The pattern is relative to the project's `asset` folder.
|
||||
header:
|
||||
type: bool
|
||||
default: false
|
||||
comment: >-
|
||||
Trigger to consider the script as loaded in the page header. When enabled,
|
||||
it includes a script to load Google Analytics adjacent to any bundle
|
||||
input.
|
||||
localize:
|
||||
type: bool
|
||||
default: false
|
||||
optional: true
|
||||
comment: >-
|
||||
Triggers the creation of a language-specific bundle file. The language
|
||||
code is appended as suffix to the base name. For example, the English
|
||||
version of `js/main.bundle.js` becomes `js/main.bundle.en.js`.
|
||||
skipTemplate:
|
||||
type: bool
|
||||
default: false
|
||||
optional: true
|
||||
comment: >-
|
||||
Script source input can contain Go Template magic. As such, Hinode
|
||||
processes all input files with `resources.ExecuteAsTemplate`. However,
|
||||
certain input files may be incompatible. Set `skipTemplate` to true to
|
||||
skip template processing.
|
||||
state:
|
||||
type:
|
||||
type: select
|
||||
default: core
|
||||
optional: true
|
||||
default: async
|
||||
comment: >-
|
||||
Defines the loading behavior of the script bundle. By default, scripts are
|
||||
processed in the background and loaded when ready (`async`). Set the state
|
||||
to `immediate` to load the script immediately (such as critical scripts).
|
||||
Use 'defer' to load the script in relative order when the DOM is fully
|
||||
built.
|
||||
options:
|
||||
Type of script bundle. Critical scripts are included in the page header
|
||||
and are loaded immediately. Core scripts are bundled by category and are
|
||||
loaded asynchronously. Optional scripts are loaded individually on the
|
||||
pages that require them. They use the synchronization method as defined
|
||||
in their containing module.
|
||||
values:
|
||||
- async
|
||||
- defer
|
||||
- immediate
|
||||
- critical
|
||||
- core
|
||||
- optional
|
@@ -11,7 +11,7 @@ tagline = "A Hugo Theme"
|
||||
title = "Follow me"
|
||||
caption = "I work on everything coding and tweet developer memes"
|
||||
[en.params.footer]
|
||||
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer nofollow'>CC BY-NC-SA 4.0</a>)."
|
||||
# toml-docs-end lang-param
|
||||
[en.params.sections.blog]
|
||||
reference = "More Posts"
|
||||
@@ -30,7 +30,7 @@ tagline = "Een Hugo Thema"
|
||||
title = "Volg mij"
|
||||
caption = "Ik doe aan programmeren en tweet memes"
|
||||
[nl.params.footer]
|
||||
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer nofollow'>CC BY-NC-SA 4.0</a>)."
|
||||
[nl.params.sections.blog]
|
||||
reference = "Meer artikelen"
|
||||
[nl.params.sections.projects]
|
||||
@@ -49,7 +49,7 @@ tagline = "Un thème Hugo"
|
||||
title = "Suivez-moi"
|
||||
caption = "Je code et je tweet des mèmes de développeurs."
|
||||
[fr.params.footer]
|
||||
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer nofollow'>CC BY-NC-SA 4.0</a>)."
|
||||
[fr.params.sections.blog]
|
||||
reference = "Plus d'articles"
|
||||
[fr.params.sections.projects]
|
||||
|
@@ -10,7 +10,7 @@ const purgecss = require('@fullhuman/postcss-purgecss')({
|
||||
return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])]
|
||||
},
|
||||
dynamicAttributes: ['data-bs-theme'],
|
||||
safelist: [
|
||||
safelist: ['was-validated',
|
||||
...whitelister([
|
||||
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_clipboard.scss',
|
||||
'./_vendor/github.com/gethinode/hinode/assets/scss/components/_command.scss',
|
||||
|
@@ -14,7 +14,7 @@ As an example, the following shortcode displays an image with rounded corners an
|
||||
|
||||
<!-- markdownlint-disable MD037 -->
|
||||
{{< example lang="hugo" >}}
|
||||
{{</* image src="https://res.cloudinary.com/demo/image/upload/dog.webp"
|
||||
{{</* image src="https://res.cloudinary.com/demo/dog.webp"
|
||||
ratio="21x9" caption="Cloudinary image" class="rounded" plain=true */>}}
|
||||
{{< /example >}}
|
||||
<!-- markdownlint-enable MD037 -->
|
||||
|
7
go.mod
7
go.mod
@@ -7,11 +7,12 @@ require (
|
||||
github.com/gethinode/mod-bootstrap v1.3.1 // indirect
|
||||
github.com/gethinode/mod-flexsearch/v2 v2.0.1 // indirect
|
||||
github.com/gethinode/mod-fontawesome v1.10.0 // indirect
|
||||
github.com/gethinode/mod-google-analytics v1.0.2 // indirect
|
||||
github.com/gethinode/mod-katex v1.1.2 // indirect
|
||||
github.com/gethinode/mod-leaflet v1.1.1 // indirect
|
||||
github.com/gethinode/mod-lottie v1.5.8 // indirect
|
||||
github.com/gethinode/mod-simple-datatables v1.0.10 // indirect
|
||||
github.com/gethinode/mod-utils/v2 v2.7.0 // indirect
|
||||
github.com/gethinode/mod-lottie v1.5.9 // indirect
|
||||
github.com/gethinode/mod-simple-datatables v1.0.12 // indirect
|
||||
github.com/gethinode/mod-utils/v2 v2.8.1 // indirect
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240501124520-961c3ae84a87 // indirect
|
||||
github.com/twbs/bootstrap v5.3.3+incompatible // indirect
|
||||
)
|
||||
|
14
go.sum
14
go.sum
@@ -118,6 +118,12 @@ github.com/gethinode/mod-fontawesome v1.9.1 h1:cQk84vriqffM4fuUUoM9j3SSD+3ppeW2j
|
||||
github.com/gethinode/mod-fontawesome v1.9.1/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y=
|
||||
github.com/gethinode/mod-fontawesome v1.10.0 h1:Izs2AKc+YVBa1TywcH54OKLTNCUMXRoFIqOs+n0FgOo=
|
||||
github.com/gethinode/mod-fontawesome v1.10.0/go.mod h1:xBKsZH3WJtMOItZVlp9SbO51uaBy6IbvUZSKpNu3b6Y=
|
||||
github.com/gethinode/mod-google-analytics v1.0.0 h1:fly42RQ69bdyJe8WFefsBIo7WMIXkd3wZn32kyAr4h4=
|
||||
github.com/gethinode/mod-google-analytics v1.0.0/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
|
||||
github.com/gethinode/mod-google-analytics v1.0.1 h1:zbmOdnAhhFCA7qWw7fnR46biWhqW2r06sIaTWyhB5R0=
|
||||
github.com/gethinode/mod-google-analytics v1.0.1/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
|
||||
github.com/gethinode/mod-google-analytics v1.0.2 h1:ljrAYdAPqiQg6rdnL6Je8zLK6mhlXoTGJ/vGtIUpX+w=
|
||||
github.com/gethinode/mod-google-analytics v1.0.2/go.mod h1:dl628cFozpCvoIMCiV7ujzQipjxcm3eatXrSfLPWNII=
|
||||
github.com/gethinode/mod-katex v1.0.0 h1:me/3dIIZBkfk1mRIFt8QiAGYwYDoSG5bc2hHRtIutFc=
|
||||
github.com/gethinode/mod-katex v1.0.0/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
||||
github.com/gethinode/mod-katex v1.0.1 h1:809QUztxmKgMNchU+v03iMO7Ma+ISc3ZzhXYauc21rs=
|
||||
@@ -206,6 +212,8 @@ github.com/gethinode/mod-lottie v1.5.7 h1:hcf04kmKv7xrI2byxtgHwkScYIHfP9aquInHNZ
|
||||
github.com/gethinode/mod-lottie v1.5.7/go.mod h1:rhWg+MSSnWmqHKNEViE/9/78RjQD6uWWFASgjvFjgyo=
|
||||
github.com/gethinode/mod-lottie v1.5.8 h1:glg5HcjOBkFt5MoF7p24NN+RzctExPQUDXvdhPx9u6I=
|
||||
github.com/gethinode/mod-lottie v1.5.8/go.mod h1:Z/FlAcCJWYI1Z9tQnL0yRN4lqhyZl9CqYpfJUPVDaGc=
|
||||
github.com/gethinode/mod-lottie v1.5.9 h1:1MFsq8pO7s4RXu1sA0z75xdp63FPdJ6ar9OhEieDSj8=
|
||||
github.com/gethinode/mod-lottie v1.5.9/go.mod h1:TA1rPRwSilT5mXUakNSVlXNrgTpE87mUOB/fdunAdA0=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.0 h1:Dj4WGw12OkaimwkCpLn5Jhmd49dvNJW9O2P/W9F+HlQ=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.0/go.mod h1:K8T7fIdb8pMOB+OSW4A5lz5IW99+HyzcTgx764fvOGw=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.2 h1:zhqxHet3iLQWYCBbGROALpOY9zQlptMycFkz1Tto5bA=
|
||||
@@ -224,6 +232,8 @@ github.com/gethinode/mod-simple-datatables v1.0.9 h1:8OnpY/axFkgxJ598DHW4nDtxsCY
|
||||
github.com/gethinode/mod-simple-datatables v1.0.9/go.mod h1:rgQWdDZ6lTR9+08dGY1zBDLZI/UneKPufakAK20+lmI=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.10 h1:/nYy4oCgooUJhTBgLdQzMnJEjolkD+dp2nkfLNT9Klg=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.10/go.mod h1:rgQWdDZ6lTR9+08dGY1zBDLZI/UneKPufakAK20+lmI=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.12 h1:myyVp1ctQA6j+5UTWcDwQmy8ipXdjs8T+qpTpRPBPII=
|
||||
github.com/gethinode/mod-simple-datatables v1.0.12/go.mod h1:QuH7wz1igohzCgL76xI1960mFxPPrqgvGtLwR/0cFyQ=
|
||||
github.com/gethinode/mod-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
|
||||
github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
|
||||
github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE=
|
||||
@@ -280,6 +290,10 @@ github.com/gethinode/mod-utils/v2 v2.6.0 h1:r7l/E6fbPZHnjFyJY4T/xzekd7Xp3czNVCMg
|
||||
github.com/gethinode/mod-utils/v2 v2.6.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/gethinode/mod-utils/v2 v2.7.0 h1:5CKygjsc7X4dFtb90ihWyDVvUp2iqoJE8C7M+jeWYus=
|
||||
github.com/gethinode/mod-utils/v2 v2.7.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.0 h1:BdB+onItuO29g5ZLEz/HEwq9c4xBEM4GGqQc3kQ++js=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.1 h1:u7sFbgJ5sBEMYC/GwcMRyjRAd5NxTjBnbld5b0V5n98=
|
||||
github.com/gethinode/mod-utils/v2 v2.8.1/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 h1:H/qVR5O4BXjRjD+5PZB+r4ug2BSJ2Of4RtwOntd+OKo=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
|
||||
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg=
|
||||
|
@@ -9,10 +9,18 @@
|
||||
}}
|
||||
|
||||
{{ if eq .Type "alert" }}
|
||||
<blockquote class="blockquote-alert blockquote-alert-{{ .AlertType }}">
|
||||
{{ $alert := .AlertType }}
|
||||
{{ $icon := (index $icons $alert) }}
|
||||
|
||||
<blockquote class="blockquote-alert blockquote-alert-{{ $alert }}">
|
||||
<p class="blockquote-alert-heading">
|
||||
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-fw" (index $icons .AlertType))) }}
|
||||
{{ or (i18n .AlertType) (title .AlertType) }}
|
||||
{{ with $icon }}
|
||||
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-fw" .)) }}
|
||||
{{ or (i18n $alert) (title $alert) }}
|
||||
{{ else }}
|
||||
{{ title $alert }}
|
||||
{{ warnf "Unsupported alert type: '%s'. See %s" $alert $.Position }}
|
||||
{{ end }}
|
||||
</p>
|
||||
{{ trim .Text "\n\r" | safeHTML }}
|
||||
</blockquote>
|
||||
|
@@ -1,5 +1,12 @@
|
||||
{{ if site.Params.navigation.anchor }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}</a></h{{ .Level }}>
|
||||
{{ $text := trim .Text " \n\r" }}
|
||||
|
||||
{{ if and site.Params.navigation.anchor $text }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">
|
||||
{{- .Text | safeHTML -}}
|
||||
<a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">
|
||||
{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}
|
||||
</a>
|
||||
</h{{ .Level }}>
|
||||
{{ else }}
|
||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
|
||||
{{ end }}
|
@@ -14,7 +14,7 @@
|
||||
{{- end -}}
|
||||
|
||||
{{- /* Initialize module configuration */ -}}
|
||||
{{- $modules := partial "utilities/InitModules.html" (dict "page" .) -}}
|
||||
{{- $modules := partialCached "utilities/InitModules.html" . -}}
|
||||
{{- $.Scratch.Set "modules" $modules -}}
|
||||
|
||||
{{- $fullCover := or (or (and .IsHome .Site.Params.home.fullCover) .Page.Params.fullCover) .Site.Params.main.footerBelowFold }}
|
||||
@@ -27,7 +27,7 @@
|
||||
{{- $.Scratch.Set "sections" $sections -}}
|
||||
|
||||
{{- /* Define main breakpoint */ -}}
|
||||
{{- $.Scratch.Set "breakpoint" (partial "utilities/GetBreakpoint.html") }}
|
||||
{{- $.Scratch.Set "breakpoint" (partialCached "utilities/GetBreakpoint.html" .) }}
|
||||
|
||||
{{- /* Define base URL */ -}}
|
||||
{{ $lang := site.LanguageCode | default site.Language.Lang }}
|
||||
@@ -36,7 +36,7 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ .Site.Language.Lang }}" class="no-js">
|
||||
<head>
|
||||
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
|
||||
{{- partial "footer/scripts.html" (dict "page" . "type" "critical") -}}
|
||||
{{ block "head" . }}{{ end -}}
|
||||
</head>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
{{- partial "footer/toast-container.html" . -}}
|
||||
{{- partial "assets/symbols.html" . -}}
|
||||
{{- partialCached "footer/scripts.html" (dict "header" false "page" . "core" true) }}
|
||||
{{- partial "footer/optional-scripts.html" . -}}
|
||||
{{- partialCached "footer/scripts.html" (dict "page" .) -}}
|
||||
{{- partial "footer/scripts.html" (dict "page" . "type" "optional") -}}
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
<meta charset="utf-8">
|
||||
<noscript><meta http-equiv="refresh" content="0; url={{ .Permalink }}"></noscript>
|
||||
{{ if site.Params.main.enableLanguageSelectionStorage }}
|
||||
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" page) -}}
|
||||
{{- partial "footer/scripts.html" (dict "page" page "type" "critical") -}}
|
||||
{{ else }}
|
||||
<script src='{{ partial "utilities/GetStaticURL" (dict "url" "js/alias.js") }}'></script>
|
||||
{{ end }}
|
||||
|
@@ -39,13 +39,22 @@
|
||||
{{ $element := "" }}
|
||||
|
||||
<!-- Split path between upload dir and sub dir -->
|
||||
{{ $newdir := partial "utilities/URLJoin.html" (dict "base" (index (split $dir "upload") 0) "path" "upload") }}
|
||||
{{ $file = partial "utilities/URLJoin.html" (dict "base" (index (split $dir "upload") 1) "path" $file) }}
|
||||
{{ $dir = $newdir }}
|
||||
{{ $dir = path.Clean (trim .dir "/") }}
|
||||
{{ $api := "image/upload" }}
|
||||
|
||||
<!-- Define the account, optional API segment, and directory -->
|
||||
{{ $elements := split $dir "/" }}
|
||||
{{ $account := index $elements 0 }}
|
||||
{{ $operation := "" }}
|
||||
{{ if and (in (slice "image" "video") (index $elements 1)) (eq (index $elements 2) "upload") }}
|
||||
{{ $api = delimit (slice | append (index $elements 1) | append (index $elements 2)) "/" }}
|
||||
{{ $dir = delimit (after 3 $elements) "/" }}
|
||||
{{ else }}
|
||||
{{ $dir = delimit (after 1 $elements) "/" }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Generate image URL -->
|
||||
{{ if not $error }}
|
||||
{{ $operation := "" }}
|
||||
{{ if $format }}
|
||||
{{ $operation = printf "%s,h_%d,w_%d" $transform $height $width }}
|
||||
{{ $file = printf "%s.%s" (strings.TrimSuffix (path.Ext $file) $file) $format }}
|
||||
@@ -55,7 +64,7 @@
|
||||
{{ with $anchor }}
|
||||
{{ $operation = printf "%s,g_%s" $operation . }}
|
||||
{{ end }}
|
||||
{{- $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $dir $operation $file)) -}}
|
||||
{{- $element = partial "utilities/URLJoin.html" (dict "elements" (slice "https://" $host $account $api $operation $dir $file)) -}}
|
||||
{{ end }}
|
||||
|
||||
{{ return $element }}
|
||||
|
@@ -64,7 +64,7 @@
|
||||
{{- if $isExternal -}}
|
||||
{{- if $tab -}}
|
||||
{{- $target = "_blank" -}}
|
||||
{{- $rel = "noopener noreferrer" -}}
|
||||
{{- $rel = "noopener noreferrer nofollow" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if and $title $cue -}}
|
||||
|
@@ -58,7 +58,7 @@
|
||||
{{ else }}
|
||||
{{ $paginator = $args.page.Paginate $list }}
|
||||
{{ end }}
|
||||
{{ $list = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $list) }}
|
||||
{{ $list = first $paginator.PagerSize (after (mul (sub $paginator.PageNumber 1) $paginator.PagerSize) $list) }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize list elements -->
|
||||
|
@@ -38,7 +38,7 @@
|
||||
|
||||
{{- if $tab -}}
|
||||
{{- $target = "_blank" -}}
|
||||
{{- $rel = "noopener noreferrer" -}}
|
||||
{{- $rel = "noopener noreferrer nofollow" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if $cue -}}
|
||||
|
@@ -42,7 +42,7 @@
|
||||
|
||||
{{- if $isExternal }}
|
||||
{{- if $tab -}}
|
||||
{{ $externalHref = "target=\"_blank\" rel=\"noopener noreferrer\"" }}
|
||||
{{ $externalHref = "target=\"_blank\" rel=\"noopener noreferrer nofollow\"" }}
|
||||
{{- end -}}
|
||||
|
||||
{{- if $cue -}}
|
||||
|
@@ -45,7 +45,7 @@
|
||||
{{- $rel := "" -}}
|
||||
{{- if and $isExternal $tab -}}
|
||||
{{- $target = "_blank" -}}
|
||||
{{- $rel = "noopener noreferrer" -}}
|
||||
{{- $rel = "noopener noreferrer nofollow" -}}
|
||||
{{- end -}}
|
||||
|
||||
<!-- Inline partial to render the card's body -->
|
||||
|
@@ -1,46 +0,0 @@
|
||||
{{ $page_modules := slice }}
|
||||
{{ if reflect.IsMap .Params.modules }}
|
||||
{{ $page_modules = .Params.modules }}
|
||||
{{ else }}
|
||||
{{ $page_modules = $page_modules | append .Params.modules }}
|
||||
{{ end }}
|
||||
{{ with .Scratch.Get "dependencies" }}{{ $page_modules = append $page_modules . | uniq }}{{ end }}
|
||||
|
||||
{{ $config := page.Scratch.Get "modules" }}
|
||||
{{ if not $config }}
|
||||
{{ errorf "partial [footer/optional-scripts.html] - Cannot initialize module configuration" }}
|
||||
{{ end }}
|
||||
|
||||
{{- $modules := $config.optional | intersect $page_modules -}}
|
||||
{{- range $index, $mod := $modules -}}
|
||||
{{- $filename := printf "js/%s.bundle.js" $mod -}}
|
||||
{{- $match := printf "js/modules/%s/**.js" $mod -}}
|
||||
{{- $skipTemplate := false -}}
|
||||
{{- if reflect.IsSlice $config.disableTemplate -}}
|
||||
{{- if in $config.disableTemplate $mod}}
|
||||
{{- $skipTemplate = true -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ $state := "" }}
|
||||
{{- with (index $config.modules $mod) -}}
|
||||
{{- with index . "state" }}{{ $state = . }}{{ end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{ $localize := false }}
|
||||
{{- if reflect.IsSlice $config.localize -}}
|
||||
{{- if in $config.localize $mod}}
|
||||
{{- $localize = true -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- partial "footer/scripts.html" (dict
|
||||
"filename" $filename
|
||||
"match" $match
|
||||
"header" false
|
||||
"skipTemplate" $skipTemplate
|
||||
"state" $state
|
||||
"localize" $localize
|
||||
"page" page
|
||||
) }}
|
||||
{{- end -}}
|
@@ -6,50 +6,42 @@
|
||||
|
||||
{{ $error := false }}
|
||||
|
||||
<!-- Validate arguments -->
|
||||
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "scripts" "args" . "group" "partial") }}
|
||||
{{- errorf "partial [footer/scripts.html] - Invalid arguments" -}}
|
||||
{{ $error = true }}
|
||||
<!-- Define inline partials -->
|
||||
{{ define "partials/match.html" }}
|
||||
{{ $result := "" }}
|
||||
{{ $matches := slice }}
|
||||
{{ if gt (len .modules) 0 }}
|
||||
{{ range .modules }}
|
||||
{{ $matches = $matches | append (printf "js/modules/%s/**.js" .) }}
|
||||
{{ end }}
|
||||
{{ $result = printf "{%s}" (delimit $matches ",") }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{- $filename := .filename | default "js/main.bundle.js" -}}
|
||||
{{- $match := .match | default "{js/*.js,js/vendor/**.js}" -}}
|
||||
{{- $page := .page -}}
|
||||
{{- $header := .header -}}
|
||||
{{- $core := .core | default false -}}
|
||||
{{- $skipTemplate := .skipTemplate | default false -}}
|
||||
{{- $localize := .localize | default false }}
|
||||
|
||||
{{- $state := .state | default "async" -}}
|
||||
{{- if or $header (eq $state "immediate") }}{{ $state = "" }}{{ end -}}
|
||||
|
||||
{{- $modules := "" -}}
|
||||
{{ if $core }}
|
||||
{{ $config := $page.Scratch.Get "modules" }}
|
||||
{{ if not $config }}
|
||||
{{ errorf "partial [footer/scripts.html] - Cannot initialize module configuration" }}
|
||||
{{ return $result }}
|
||||
{{ end }}
|
||||
|
||||
{{- $modules = $config.core -}}
|
||||
{{- if reflect.IsSlice $config.localize -}}
|
||||
{{- range $index, $mod := $modules -}}
|
||||
{{- if in $config.localize $mod}}
|
||||
{{- $localize = true -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{ define "partials/bundle-script.html" }}
|
||||
{{ $page := .page }}
|
||||
{{ $match := .match }}
|
||||
{{ $destination := .destination }}
|
||||
{{ $cat := .cat }}
|
||||
{{ $localize := .localize }}
|
||||
{{ $modules := .modules }}
|
||||
{{ $skipTemplate := .skipTemplate }}
|
||||
{{ $absoluteURL := .absoluteURL }}
|
||||
{{ $state := cond (ne .state "immediate") .state "" }}
|
||||
|
||||
{{ if and $cat (ne $cat "other") }}
|
||||
{{ $destination = path.Join (path.Dir $destination) (printf "%s-%s%s" (path.BaseName $destination) $cat (path.Ext $destination)) }}
|
||||
{{ end }}
|
||||
|
||||
{{ if $localize }}
|
||||
{{ $filename = path.Join (path.Dir $filename) (printf "%s.%s%s" (path.BaseName $filename) $page.Language.Lang (path.Ext $filename)) }}
|
||||
{{ $destination = path.Join (path.Dir $destination) (printf "%s.%s%s" (path.BaseName $destination) $page.Language.Lang (path.Ext $destination)) }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{- $bundle := partial "utilities/bundle" (dict
|
||||
{{- $bundle := partial "utilities/bundle.html" (dict
|
||||
"match" $match
|
||||
"filename" $filename
|
||||
"filename" $destination
|
||||
"modules" $modules
|
||||
"basepath" "js/modules"
|
||||
"all" true
|
||||
@@ -57,21 +49,120 @@
|
||||
) -}}
|
||||
{{- $js := $bundle -}}
|
||||
{{- if not $skipTemplate -}}
|
||||
{{- $js = $bundle | resources.ExecuteAsTemplate $filename $page -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if and (not hugo.IsServer) $header -}}
|
||||
{{- $pc := site.Config.Privacy.GoogleAnalytics -}}
|
||||
{{- if and (not $pc.Disable) (hasPrefix site.Config.Services.GoogleAnalytics.ID "G-") }}
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.Config.Services.GoogleAnalytics.ID }}"></script>
|
||||
{{- end }}
|
||||
{{- $js = $bundle | resources.ExecuteAsTemplate $destination $page -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if gt (len $js.Content) 0 -}}
|
||||
{{- if not hugo.IsProduction -}}
|
||||
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}"{{ with $state }} {{ . | safeHTMLAttr }}{{ end }}></script>
|
||||
{{ else -}}
|
||||
{{ $integrity := "" }}
|
||||
{{- if hugo.IsProduction -}}
|
||||
{{ $js = $js | minify | fingerprint -}}
|
||||
<script src="{{ if $absoluteURL }}{{ $js.Permalink }}{{ else }}{{ $js.RelPermalink }}{{ end }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"{{ with $state}} {{ . | safeHTMLAttr }}{{ end }}></script>
|
||||
{{ $integrity = $js.Data.Integrity }}
|
||||
{{ end -}}
|
||||
{{ partial "templates/script.html" (dict "link" (cond $absoluteURL $js.Permalink $js.RelPermalink) "category" $cat "state" $state "integrity" $integrity) }}
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "scripts" "args" .) }}
|
||||
{{ if $args.err }}
|
||||
{{ partial "utilities/LogErr.html" (dict
|
||||
"partial" "footer/scripts.html"
|
||||
"msg" "Invalid arguments"
|
||||
"details" $args.errmsg
|
||||
"file" page.File
|
||||
)}}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize local arguments -->
|
||||
{{ $patterns := dict
|
||||
"critical" "js/critical/**.js"
|
||||
"core" "{js/*.js,js/vendor/**.js}"
|
||||
}}
|
||||
|
||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||
{{ $state := "immediate" }}
|
||||
|
||||
{{ $config := dict }}
|
||||
{{ if ne $args.type "critical" }}
|
||||
{{ $config = $args.page.Scratch.Get "modules" }}
|
||||
{{ if not $config }}
|
||||
{{ errorf "partial [footer/scripts.html] - Cannot initialize module configuration" }}
|
||||
{{ $error = true }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $page_modules := slice }}
|
||||
{{ if reflect.IsMap $args.page.Params.modules }}
|
||||
{{ $page_modules = $args.page.Params.modules }}
|
||||
{{ else }}
|
||||
{{ $page_modules = $page_modules | append $args.page.Params.modules }}
|
||||
{{ end }}
|
||||
{{ with $args.page.Scratch.Get "dependencies" }}{{ $page_modules = append $page_modules . | uniq }}{{ end }}
|
||||
|
||||
{{ $modules := slice }}
|
||||
{{ if eq $args.type "core" }}
|
||||
{{- $modules = $config.core -}}
|
||||
{{ else if eq $args.type "optional" }}
|
||||
{{- $modules = $config.optional | intersect $page_modules -}}
|
||||
{{ end }}
|
||||
|
||||
{{ $localize := false }}
|
||||
{{ if gt (intersect (or $config.localize slice) $modules | len) 0 }}{{ $localize = true }}{{ end }}
|
||||
|
||||
{{ $skipTemplate := false }}
|
||||
{{ if gt (intersect (or $config.skipTemplate slice) $modules | len) 0 }}{{ $skipTemplate = true }}{{ end }}
|
||||
|
||||
{{- $categories := dict "other" slice -}}
|
||||
{{ range $cat, $val := $config.categories }}
|
||||
{{ $categories = merge $categories (dict $cat (intersect $val $modules)) }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Main code -->
|
||||
{{ if not $error }}
|
||||
<!-- Bundle the critical scripts as single file -->
|
||||
{{ if eq $args.type "critical" }}
|
||||
{{ partial "partials/bundle-script.html" (dict
|
||||
"page" $args.page
|
||||
"match" (index $patterns $args.type)
|
||||
"destination" (printf "js/%s.bundle.js" $args.type)
|
||||
"localize" $localize
|
||||
"skipTemplate" $skipTemplate
|
||||
"absoluteURL" $absoluteURL
|
||||
)}}
|
||||
<!-- Bundle the core scripts by category -->
|
||||
{{ else if eq $args.type "core" }}
|
||||
{{ range $cat, $val := $categories }}
|
||||
{{ if gt ($val | len) 0 }}
|
||||
{{ partial "partials/bundle-script.html" (dict
|
||||
"page" $args.page
|
||||
"match" (cond (eq $cat "other") (index $patterns $args.type) "")
|
||||
"destination" (printf "js/%s.bundle.js" $args.type)
|
||||
"cat" $cat
|
||||
"modules" $val
|
||||
"localize" $localize
|
||||
"skipTemplate" $skipTemplate
|
||||
"absoluteURL" $absoluteURL
|
||||
"state" "async"
|
||||
)}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<!-- Bundle the core scripts by module name and category -->
|
||||
{{ range $cat, $val := $categories }}
|
||||
{{ range $val }}
|
||||
{{ $modconfig := index $config.modules . }}
|
||||
{{ partial "partials/bundle-script.html" (dict
|
||||
"page" $args.page
|
||||
"destination" (printf "js/%s.js" .)
|
||||
"cat" $cat
|
||||
"modules" (slice .)
|
||||
"localize" $modconfig.localize
|
||||
"skipTemplate" $modconfig.disabletemplate
|
||||
"absoluteURL" $absoluteURL
|
||||
"state" $modconfig.state
|
||||
)}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
<div class="col col-6 text-sm-start">
|
||||
{{ range .Site.Menus.social -}}
|
||||
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
|
||||
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer nofollow"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
|
||||
{{ if hasPrefix .Pre "<i" }}
|
||||
{{ .Pre | safeHTML }}
|
||||
{{ else }}
|
||||
|
@@ -1,13 +1,17 @@
|
||||
<!-- TODO: replace scratch with dict -->
|
||||
|
||||
<!-- Adapted from doks -->
|
||||
{{ with .Params.meta.title }}
|
||||
{{ $.Scratch.Set "title" . -}}
|
||||
{{ else }}
|
||||
{{ with .Title -}}
|
||||
{{ $.Scratch.Set "title" . -}}
|
||||
{{ else -}}
|
||||
{{ $.Scratch.Set "title" .Site.Title -}}
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
|
||||
{{ $description := or (partial "utilities/GetDescription.html" (dict "page" .)) .Site.Params.main.description }}
|
||||
{{ $description := or (partial "utilities/GetDescription.html" (dict "page" . "meta" true)) .Site.Params.main.description }}
|
||||
{{ if gt (strings.RuneCount $description) 150 }}
|
||||
{{ $description = print (substr $description 0 150) "..." }}
|
||||
{{ end }}
|
||||
|
@@ -63,7 +63,7 @@
|
||||
-}}
|
||||
|
||||
{{- $options := (dict "transpiler" $transpiler "targetPath" $target "enableSourceMap" (not hugo.IsProduction) "vars" $vars) -}}
|
||||
{{- $bundle := partial "utilities/bundle" (dict "match" $source "filename" (printf "scss/bundle-%d.scss" now.UnixNano) "modules" $modules "basepath" "scss" "debugging" site.Params.debugging.showSCSS) -}}
|
||||
{{- $bundle := partial "utilities/bundle.html" (dict "match" $source "filename" (printf "scss/bundle-%d.scss" now.UnixNano) "modules" $modules "basepath" "scss" "debugging" site.Params.debugging.showSCSS) -}}
|
||||
|
||||
{{- if gt ($bundle.Content | len) 0 }}
|
||||
{{- $css := $bundle | resources.ExecuteAsTemplate $target . | toCSS $options -}}
|
||||
|
26
layouts/partials/templates/script.html
Normal file
26
layouts/partials/templates/script.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<!--
|
||||
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
|
||||
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
|
||||
Visit gethinode.com/license for more details.
|
||||
-->
|
||||
|
||||
<!-- Initialize arguments -->
|
||||
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "script" "args" .) }}
|
||||
{{ if $args.err }}
|
||||
{{ partial "utilities/LogErr.html" (dict
|
||||
"partial" "templates/script.html"
|
||||
"msg" "Invalid arguments"
|
||||
"details" $args.errmsg
|
||||
"file" page.File
|
||||
)}}
|
||||
{{ end }}
|
||||
|
||||
<!-- Initialize local arguments -->
|
||||
{{ $category := cond (ne $args.category "other") $args.category "" }}
|
||||
|
||||
<!-- Main code -->
|
||||
<script src="{{ $args.link }}"
|
||||
{{- with $category }} data-category="{{ . }}"{{ end -}}
|
||||
{{- with $args.integrity }}integrity="{{ . }}" crossorigin="anonymous"{{ end }}
|
||||
{{- with $args.state }} {{ . | safeHTMLAttr }}{{ end -}}>
|
||||
</script>
|
@@ -1,26 +1,13 @@
|
||||
{{ $page := .page }}
|
||||
|
||||
{{ $core := slice }}
|
||||
{{ $optional := slice }}
|
||||
{{ $excludeSCSS := slice }}
|
||||
{{ $disableTemplate := slice }}
|
||||
{{ $localize := slice }}
|
||||
{{ $category := dict }}
|
||||
{{ $modules := dict }}
|
||||
|
||||
{{ range $key, $mod := $page.Site.Params.modules }}
|
||||
{{ if eq $key "core" }}
|
||||
{{ warnf "DEPRECATED: module parameter `core` has been deprecated in release v0.24.0" }}
|
||||
{{ $core = $core | append $mod }}
|
||||
{{ else if eq $key "optional" }}
|
||||
{{ warnf "DEPRECATED: module parameter `optional` has been deprecated in release v0.24.0" }}
|
||||
{{ $optional = $optional | append $mod }}
|
||||
{{ else if eq $key "excludescss" }}
|
||||
{{ warnf "DEPRECATED: module parameter `excludeSCSS` has been deprecated in release v0.24.0" }}
|
||||
{{ $excludeSCSS = $excludeSCSS | append $mod }}
|
||||
{{ else if eq $key "disabletemplate" }}
|
||||
{{ warnf "DEPRECATED: module parameter `disableTemplate` has been deprecated in release v0.24.0" }}
|
||||
{{ $disableTemplate = $disableTemplate | append $mod }}
|
||||
{{ else if reflect.IsMap $mod }}
|
||||
{{ range $key, $mod := .Site.Params.modules }}
|
||||
{{ if reflect.IsMap $mod }}
|
||||
{{ $integration := index $mod "integration" }}
|
||||
{{ if eq $integration "core" }}
|
||||
{{ $core = $core | append $key }}
|
||||
@@ -42,6 +29,12 @@
|
||||
{{ $localize = $localize | append $key }}
|
||||
{{ end }}
|
||||
|
||||
{{ $categoryKey := "other" }}
|
||||
{{ with (index $mod "category") }}{{ $categoryKey = . }}{{ end }}
|
||||
{{ $cat := index $category $categoryKey | default slice }}
|
||||
{{ $cat = $cat | append $key}}
|
||||
{{ $category = merge $category (dict $categoryKey $cat) }}
|
||||
|
||||
{{ $modules = merge $modules (dict $key $mod) }}
|
||||
{{ else }}
|
||||
{{ warnf "Unsupported module parameter: %s" $key }}
|
||||
@@ -55,9 +48,10 @@
|
||||
"excludeSCSS" $excludeSCSS
|
||||
"disableTemplate" $disableTemplate
|
||||
"localize" $localize
|
||||
"categories" $category
|
||||
}}
|
||||
|
||||
{{- if and $page.IsPage (not (in $core "bootstrap")) -}}
|
||||
{{- if and .IsPage (not (in $core "bootstrap")) -}}
|
||||
{{- errorf "Bootstrap is a required module, please add it to 'modules.core' in your site parameters" -}}
|
||||
{{- end -}}
|
||||
|
||||
|
@@ -4,12 +4,12 @@
|
||||
command = "npm run build:example"
|
||||
|
||||
[build.environment]
|
||||
DART_SASS_VERSION = "1.77.5"
|
||||
HUGO_VERSION = "0.131.0"
|
||||
DART_SASS_VERSION = "1.78.0"
|
||||
HUGO_VERSION = "0.134.1"
|
||||
HUGO_ENV = "production"
|
||||
HUGO_ENABLEGITINFO = "true"
|
||||
NODE_VERSION = "20.16.0"
|
||||
NPM_VERSION = "10.8.1"
|
||||
NODE_VERSION = "20.17.0"
|
||||
NPM_VERSION = "10.8.2"
|
||||
# toml-docs-end netlify
|
||||
|
||||
[[headers]]
|
||||
|
53
package-lock.json
generated
53
package-lock.json
generated
@@ -1,26 +1,26 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.27.0-alpha4",
|
||||
"version": "0.27.0-alpha8",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.27.0-alpha4",
|
||||
"version": "0.27.0-alpha8",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fullhuman/postcss-purgecss": "^6.0.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cssnano": "^7.0.6",
|
||||
"cssnano-preset-advanced": "^7.0.6",
|
||||
"hugo-bin": "0.131.1",
|
||||
"hugo-bin": "0.131.2",
|
||||
"purgecss-whitelister": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
|
||||
"eslint": "^9.9.1",
|
||||
"eslint": "^9.10.0",
|
||||
"markdownlint-cli2": "^0.14.0",
|
||||
"neostandard": "^0.11.4",
|
||||
"neostandard": "^0.11.5",
|
||||
"netlify-plugin-hugo-cache-resources": "^0.2.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss-cli": "^11.0.0",
|
||||
@@ -381,9 +381,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
|
||||
"integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
|
||||
"integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -398,6 +398,18 @@
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz",
|
||||
"integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"levn": "^0.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@fullhuman/postcss-purgecss": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-6.0.0.tgz",
|
||||
@@ -2427,16 +2439,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "9.9.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.1.tgz",
|
||||
"integrity": "sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==",
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz",
|
||||
"integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.11.0",
|
||||
"@eslint/config-array": "^0.18.0",
|
||||
"@eslint/eslintrc": "^3.1.0",
|
||||
"@eslint/js": "9.9.1",
|
||||
"@eslint/js": "9.10.0",
|
||||
"@eslint/plugin-kit": "^0.1.0",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@humanwhocodes/retry": "^0.3.0",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
@@ -2459,7 +2472,6 @@
|
||||
"is-glob": "^4.0.0",
|
||||
"is-path-inside": "^3.0.3",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"levn": "^0.4.1",
|
||||
"lodash.merge": "^4.6.2",
|
||||
"minimatch": "^3.1.2",
|
||||
"natural-compare": "^1.4.0",
|
||||
@@ -3668,9 +3680,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/hugo-bin": {
|
||||
"version": "0.131.1",
|
||||
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.131.1.tgz",
|
||||
"integrity": "sha512-bfUFKhQ6felvBNng06vwimNuvV+88yYwU6xTuAoTmtdY0g13Z03pf9rrg3AualxpMOu+dV/Yl/n90EvutKPzIQ==",
|
||||
"version": "0.131.2",
|
||||
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.131.2.tgz",
|
||||
"integrity": "sha512-5NrvwHUwu67IQywxXcR9IPc44wT7M0h/gtYxd8b8V1lbUsHywTBCRzKbAFMnbaE/pHey2MEVAzpQt6rY2XTXWA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -4715,14 +4727,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/neostandard": {
|
||||
"version": "0.11.4",
|
||||
"resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.11.4.tgz",
|
||||
"integrity": "sha512-rBdlVeUdM0NhBc2S7Vr/l98Y/FTYY+YGdOqSgv60HzP3LF7ruX9Mceur4Nc/qkXf7UT1IOjofLS7OSLAObPi2A==",
|
||||
"version": "0.11.5",
|
||||
"resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.11.5.tgz",
|
||||
"integrity": "sha512-TgCL4CbPtqyoKoCGjqlK71rdbqTzXS9GFqgwyI69Np/Bo+mXVOLqM6mfXAYjEKK0d/TEDsEDVVeLzbVvkqKlmQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
|
||||
"@stylistic/eslint-plugin": "^2.6.3",
|
||||
"@types/eslint": "^9.6.0",
|
||||
"@stylistic/eslint-plugin": "^2.6.4",
|
||||
"eslint-plugin-n": "^17.10.2",
|
||||
"eslint-plugin-promise": "^7.1.0",
|
||||
"eslint-plugin-react": "^7.35.0",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@gethinode/hinode",
|
||||
"version": "0.27.0-alpha4",
|
||||
"version": "0.27.0-alpha8",
|
||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||
"keywords": [
|
||||
"hugo",
|
||||
@@ -71,14 +71,14 @@
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cssnano": "^7.0.6",
|
||||
"cssnano-preset-advanced": "^7.0.6",
|
||||
"hugo-bin": "0.131.1",
|
||||
"hugo-bin": "0.131.2",
|
||||
"purgecss-whitelister": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gethinode/netlify-plugin-dartsass": "^0.3.0",
|
||||
"eslint": "^9.9.1",
|
||||
"eslint": "^9.10.0",
|
||||
"markdownlint-cli2": "^0.14.0",
|
||||
"neostandard": "^0.11.4",
|
||||
"neostandard": "^0.11.5",
|
||||
"netlify-plugin-hugo-cache-resources": "^0.2.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss-cli": "^11.0.0",
|
||||
|
Reference in New Issue
Block a user