Compare commits

...

86 Commits

Author SHA1 Message Date
Mark Dumay
70fdf7c4f0 Merge pull request #254 from gethinode/develop
Sections
2023-05-15 15:36:53 +02:00
Mark Dumay
ee4bb45368 Merge branch 'main' into develop 2023-05-15 14:37:05 +02:00
mark
a08695d97e Bump package release 2023-05-15 14:35:28 +02:00
mark
1abeabcacd Refactor section headers 2023-05-15 14:34:53 +02:00
mark
16b2c8b058 Fix detection of headless content 2023-05-15 14:33:57 +02:00
mark
f8eab705fb Make href optional 2023-05-15 14:33:15 +02:00
mark
13b8421893 Enable description and content for list pages 2023-05-15 14:31:15 +02:00
mark
6324a90d77 Add option to push footer below page fold 2023-05-15 14:30:18 +02:00
mark
faccca732b Add thumbnail, icon, and content for sections 2023-05-15 14:29:30 +02:00
mark
04736fd8f1 Adjust color of projects section 2023-05-15 14:27:28 +02:00
mark
9c4378e5af Add moreOpensource translation 2023-05-15 14:17:05 +02:00
mark
0574627010 Refine theme switcher label 2023-05-15 14:16:51 +02:00
Mark Dumay
9e668775db Merge pull request #252 from gethinode/develop
Develop
2023-05-14 05:33:48 +02:00
mark
cefd152430 Bump release version 2023-05-14 05:30:00 +02:00
mark
48d2002d1c Remove docs template from main repository 2023-05-14 05:29:23 +02:00
Mark Dumay
259f0f321c Merge pull request #251 from gethinode/main
Sync
2023-05-13 17:36:29 +02:00
Mark Dumay
d24cb8ccb3 Merge pull request #250 from gethinode/sections
Sections
2023-05-13 17:32:46 +02:00
Mark Dumay
96226e2d8a Merge branch 'main' into sections 2023-05-13 16:48:02 +02:00
mark
27857b7fd5 Bump release version 2023-05-13 16:47:31 +02:00
mark
9a67f7bd4f Support configurable nesting 2023-05-13 16:46:43 +02:00
Mark Dumay
e15cd08bea Merge pull request #249 from gethinode/links
Links
2023-05-11 09:26:04 +02:00
Mark Dumay
dd817bc5ce Merge branch 'main' into links 2023-05-11 09:08:09 +02:00
mark
4b4c9d1711 Bump release version 2023-05-11 09:07:52 +02:00
mark
38e68ac757 Fix potentially unsafe external links 2023-05-11 09:06:55 +02:00
Mark Dumay
c14d3868bb Merge pull request #248 from gethinode/develop
Multilingual
2023-05-11 06:47:51 +02:00
Mark Dumay
067c244770 Merge branch 'main' into develop 2023-05-11 06:40:52 +02:00
mark
d76d275ddb Bump release version 2023-05-11 06:38:57 +02:00
mark
1803759b6b Ensure parsed URLs are language aware 2023-05-11 06:32:31 +02:00
mark
2833cfc15a Remove language URL prefix 2023-05-11 06:28:45 +02:00
mark
0a174def75 Remove language URL prefix 2023-05-11 06:28:24 +02:00
mark
7a7d3a93f9 Translate slug of Dutch blog posts 2023-05-11 06:04:27 +02:00
Mark Dumay
c1afe32344 Merge pull request #245 from gethinode/develop
Navbar
2023-05-08 18:07:14 +02:00
Mark Dumay
749dab16ca Merge branch 'main' into develop 2023-05-08 17:04:05 +02:00
mark
264012eefb Bump release version 2023-05-08 17:03:36 +02:00
mark
fda4efa72b Fix navbar handling 2023-05-08 17:03:08 +02:00
github-actions[bot]
6a0bdf0f61 Merge pull request #244 from gethinode/dependabot/npm_and_yarn/eslint-8.40.0
Bump eslint from 8.39.0 to 8.40.0
2023-05-08 14:14:26 +00:00
dependabot[bot]
1a09879bea Bump eslint from 8.39.0 to 8.40.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.39.0 to 8.40.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.39.0...v8.40.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-08 14:10:33 +00:00
Mark Dumay
81cc8fe02f Merge pull request #243 from gethinode/develop
Search
2023-05-08 10:12:53 +02:00
Mark Dumay
ef3d79f875 Merge branch 'main' into develop 2023-05-08 09:57:23 +02:00
mark
c66bb79ac5 Bump release version 2023-05-08 09:56:43 +02:00
mark
c5c5695541 Remove debug statement 2023-05-08 09:55:34 +02:00
mark
a3343c29dc Fix handling when search input is unavailable 2023-05-08 09:52:50 +02:00
mark
50a697c1fb Fix incorrect translation of no search results 2023-05-08 09:50:33 +02:00
github-actions[bot]
6cf7a410f4 Merge pull request #241 from gethinode/dependabot/npm_and_yarn/cssnano-6.0.1
Bump cssnano from 6.0.0 to 6.0.1
2023-05-03 14:13:19 +00:00
dependabot[bot]
bdade82dea Bump cssnano from 6.0.0 to 6.0.1
Bumps [cssnano](https://github.com/cssnano/cssnano) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@6.0.0...cssnano@6.0.1)

---
updated-dependencies:
- dependency-name: cssnano
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-03 14:09:44 +00:00
github-actions[bot]
38aac9507e Merge pull request #242 from gethinode/dependabot/npm_and_yarn/stylelint-15.6.1
Bump stylelint from 15.6.0 to 15.6.1
2023-05-03 14:08:56 +00:00
dependabot[bot]
0eec1da639 Bump stylelint from 15.6.0 to 15.6.1
Bumps [stylelint](https://github.com/stylelint/stylelint) from 15.6.0 to 15.6.1.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/15.6.0...15.6.1)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-03 14:05:09 +00:00
github-actions[bot]
1e8bc5f11d Merge pull request #240 from gethinode/dependabot/npm_and_yarn/cssnano-preset-advanced-6.0.1
Bump cssnano-preset-advanced from 6.0.0 to 6.0.1
2023-05-01 14:15:51 +00:00
dependabot[bot]
56f467e02c Bump cssnano-preset-advanced from 6.0.0 to 6.0.1
Bumps [cssnano-preset-advanced](https://github.com/cssnano/cssnano) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano-preset-advanced@6.0.0...cssnano-preset-advanced@6.0.1)

---
updated-dependencies:
- dependency-name: cssnano-preset-advanced
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 14:12:37 +00:00
github-actions[bot]
83049db4bc Merge pull request #239 from gethinode/dependabot/npm_and_yarn/markdownlint-cli2-0.7.1
Bump markdownlint-cli2 from 0.7.0 to 0.7.1
2023-04-28 14:13:01 +00:00
dependabot[bot]
78599c8f76 Bump markdownlint-cli2 from 0.7.0 to 0.7.1
Bumps [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) from 0.7.0 to 0.7.1.
- [Release notes](https://github.com/DavidAnson/markdownlint-cli2/releases)
- [Changelog](https://github.com/DavidAnson/markdownlint-cli2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint-cli2/compare/v0.7.0...v0.7.1)

---
updated-dependencies:
- dependency-name: markdownlint-cli2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-28 14:05:36 +00:00
Mark Dumay
fc6e916fca Merge pull request #238 from gethinode/develop
Git commits
2023-04-28 12:29:10 +02:00
Mark Dumay
a0febc31ee Merge branch 'main' into develop 2023-04-28 12:19:27 +02:00
mark
800c82dba5 Bump release version 2023-04-28 12:18:58 +02:00
mark
8b59f3b6f7 Fix docs git commit link 2023-04-28 12:18:06 +02:00
Mark Dumay
9795e04a9b Merge pull request #237 from gethinode/develop
Tables
2023-04-28 09:23:19 +02:00
mark
6381cb3519 Fix linting issues 2023-04-28 09:18:51 +02:00
mark
01927f22b6 Bump package release 2023-04-28 09:07:52 +02:00
mark
da75210771 Add responsive behavior for tables 2023-04-28 09:00:12 +02:00
mark
b47bf99744 Fix highlight of nav items 2023-04-27 17:46:13 +02:00
Mark Dumay
2a4ba34c51 Merge pull request #236 from gethinode/develop
Add Google Analytics for demo site
2023-04-27 15:00:26 +02:00
mark
fc07cec664 Use cross-domain linking 2023-04-27 14:55:08 +02:00
Mark Dumay
538a1d2de3 Merge branch 'main' into develop 2023-04-27 14:46:22 +02:00
mark
6dda374b73 Add Google Analytics for demo site 2023-04-27 14:45:36 +02:00
Mark Dumay
e53a333ebf Merge pull request #235 from gethinode/develop
Fixes
2023-04-27 12:58:45 +02:00
Mark Dumay
5ed8c28bee Merge branch 'main' into develop 2023-04-27 12:36:22 +02:00
mark
fa47b7d93e Bump release 2023-04-27 12:35:51 +02:00
mark
f1693c8cf0 Refine Netlify CSP headers 2023-04-27 12:34:56 +02:00
mark
740fd91038 Remove empty parameters 2023-04-27 11:44:45 +02:00
mark
9a0dba5ee4 Fix loading tag manager script twice 2023-04-27 11:44:25 +02:00
Mark Dumay
e4b7b252b3 Revert back to macos-latest 2023-04-27 08:29:00 +02:00
Mark Dumay
569562cf24 Merge pull request #234 from gethinode/develop
Server
2023-04-27 08:28:27 +02:00
Mark Dumay
60b53f2fa9 Merge branch 'main' into develop 2023-04-27 08:17:46 +02:00
mark
3e5f23cf89 Bump release version 2023-04-27 08:17:07 +02:00
mark
c7b16cf2f4 Fix Hugo server detection 2023-04-27 08:16:21 +02:00
Mark Dumay
191d6e3d94 Change to macos-latest-xl runner 2023-04-27 08:01:43 +02:00
Mark Dumay
9dd7bf64e1 Merge pull request #233 from gethinode/main
Sync
2023-04-27 08:00:32 +02:00
Mark Dumay
580675f8b1 Merge pull request #232 from gethinode/tooltip
Tooltip
2023-04-27 07:55:02 +02:00
Mark Dumay
b2b43d550b Merge branch 'main' into tooltip 2023-04-27 07:47:08 +02:00
Mark Dumay
f79317b317 Merge pull request #231 from gethinode/develop
Google Analytics
2023-04-27 07:46:14 +02:00
mark
3d7bcc4356 Bump release version 2023-04-27 07:45:56 +02:00
mark
a7256ff270 Fix tooltip justification 2023-04-27 07:45:47 +02:00
mark
8ffc6dbd59 Bump release version 2023-04-27 07:28:46 +02:00
mark
5bb0cf07e6 Add Google Analytics support 2023-04-27 07:28:22 +02:00
Mark Dumay
37e9e70c55 Merge pull request #230 from gethinode/main
Sync
2023-04-26 16:04:43 +02:00
Mark Dumay
fdebbccfa1 Merge branch 'main' into develop 2023-04-26 13:44:28 +02:00
46 changed files with 613 additions and 414 deletions

View File

@@ -1,3 +1,4 @@
assets/js/analytics.js
assets/js/color.js assets/js/color.js
assets/js/flexsearch.js assets/js/flexsearch.js
assets/js/vendor assets/js/vendor

View File

@@ -116,7 +116,7 @@ Hinode is inspired by the following themes:
## Donate ## Donate
<a href="https://www.buymeacoffee.com/markdumay" target="_blank"><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"><img src="https://cdn.buymeacoffee.com/buttons/lato-orange.png" alt="Buy Me A Coffee" style="height: 51px !important;width: 217px !important;"></a>
## License ## License

69
assets/js/analytics.js Normal file
View File

@@ -0,0 +1,69 @@
// Adapted from https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/google_analytics.html
{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}}
{{- $pc := .Site.Config.Privacy.GoogleAnalytics -}}
{{- if not $pc.RespectDoNotTrack -}}
var doNotTrack = false;
{{- else -}}
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
{{- end -}}
{{- end -}}
{{- $pc := .Site.Config.Privacy.GoogleAnalytics -}}
{{- if (and (not .Site.IsServer) (not $pc.Disable)) -}}
{{ with .Site.GoogleAnalytics -}}
{{ if hasPrefix . "G-"}}
{{ template "__ga_js_set_doNotTrack" $ }}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ . }}', { 'anonymize_ip': {{- $pc.AnonymizeIP -}} });
}
{{ else if hasPrefix . "UA-" }}
{{ template "__ga_js_set_doNotTrack" $ }}
if (!doNotTrack) {
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
{{- if $pc.UseSessionStorage }}
if (window.sessionStorage) {
var GA_SESSION_STORAGE_KEY = 'ga:clientId';
ga('create', '{{ . }}', {
'storage': 'none',
'clientId': sessionStorage.getItem(GA_SESSION_STORAGE_KEY)
});
ga(function(tracker) {
sessionStorage.setItem(GA_SESSION_STORAGE_KEY, tracker.get('clientId'));
});
}
{{ else }}
ga('create', '{{ . }}', 'auto');
{{ end -}}
{{ if $pc.AnonymizeIP }}
ga('set', 'anonymizeIp', true);
{{ end }}
ga('send', 'pageview');
}
{{- end }}
{{ end -}}
{{- end }}

View File

@@ -1,89 +1,30 @@
/* {{- $search := default true site.Params.navigation.search -}}
Source: {{- if $search -}}
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js var search = document.getElementById('search');
*/ var suggestions = document.getElementById('suggestions');
var index = new FlexSearch.Document({
tokenize: "forward",
cache: 100,
document: {
id: "id",
tag: "tag",
store: ["href", "title", "description"],
index: ["title", "description", "content"]
}
});
var suggestions = document.getElementById('suggestions'); /*
var search = document.getElementById('search'); Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
if (search !== null) { - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
document.addEventListener('keydown', inputFocus); */
} function initIndex() {
function inputFocus(e) {
if (e.ctrlKey && e.key === '/' ) {
e.preventDefault();
search.focus();
}
if (e.key === 'Escape' ) {
search.blur();
suggestions.classList.add('d-none');
}
}
document.addEventListener('click', function(event) {
var isClickInsideElement = suggestions.contains(event.target);
if (!isClickInsideElement) {
suggestions.classList.add('d-none');
}
});
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
document.addEventListener('keydown',suggestionFocus);
function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= [...suggestions.querySelectorAll('a')];
if (focusableSuggestions.length === 0) return;
const index = focusableSuggestions.indexOf(document.activeElement);
if (e.key === "ArrowUp") {
e.preventDefault();
const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.key === "ArrowDown") {
e.preventDefault();
const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus();
}
}
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
(function(){
var index = new FlexSearch.Document({
tokenize: "forward",
cache: 100,
document: {
id: "id",
tag: "tag",
store: ["href", "title", "description"],
index: ["title", "description", "content"]
}
});
// https://discourse.gohugo.io/t/range-length-or-last-element/3803/2 // https://discourse.gohugo.io/t/range-length-or-last-element/3803/2
// Note: uses .Site.AllPages as .Site.RegularPages only returns content for the current language // Note: uses .Site.AllPages as .Site.RegularPages only returns content for the current language;
// pages without a title (such as browserconfig.xml) are excluded // pages without a title (such as browserconfig.xml) are excluded
{{ $list := where (where site.AllPages "Kind" "in" "page") "Title" "!=" "" }} {{ $list := where (where site.AllPages "Kind" "in" "page") "Title" "!=" "" }}
{{ $len := (len $list) -}} {{ $len := (len $list) -}}
index.add( index.add(
{{ range $index, $element := $list -}} {{ range $index, $element := $list -}}
{ {
@@ -103,59 +44,121 @@ Source:
{{ end -}} {{ end -}}
{{ end -}} {{ end -}}
; ;
search.addEventListener('input', show_results, true); search.addEventListener('input', showResults, true);
}
function show_results(){
const maxResult = 5; function hideSuggestions(e) {
var searchQuery = this.value; var isClickInsideElement = suggestions.contains(e.target);
// filter the results for the currently tagged language
const lang = document.documentElement.lang; if (!isClickInsideElement) {
var results = index.search(searchQuery, { index: ['title', 'description', 'content'], limit: maxResult, tag: lang, enrich: true }); suggestions.classList.add('d-none');
// flatten results since index.search() returns results for each indexed field
const flatResults = new Map(); // keyed by href to dedupe results
for (const result of results.flatMap(r => r.result)) {
if (flatResults.has(result.doc.href)) continue;
flatResults.set(result.doc.href, result.doc);
}
suggestions.innerHTML = "";
suggestions.classList.remove('d-none');
// inform user that no results were found
if (flatResults.size === 0 && searchQuery) {
const noResultsMessage = document.createElement('div')
noResultsMessage.innerHTML = `{{ T "ui_no_results" }} "<strong>${searchQuery}</strong>"`
noResultsMessage.classList.add("suggestion__no-results");
suggestions.appendChild(noResultsMessage);
return;
}
// construct a list of suggestions
for(const [href, doc] of flatResults) {
const entry = document.createElement('div');
suggestions.appendChild(entry);
const a = document.createElement('a');
a.href = href;
entry.appendChild(a);
const title = document.createElement('span');
title.classList.add('text-start');
title.textContent = doc.title;
title.classList.add("suggestion__title");
a.appendChild(title);
const description = document.createElement('span');
description.textContent = doc.description;
description.classList.add("suggestion__description");
a.appendChild(description);
suggestions.appendChild(entry);
if(suggestions.childElementCount == maxResult) break;
}
} }
}()); }
/*
Source:
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js
*/
function inputFocus(e) {
if (e.ctrlKey && e.key === '/' ) {
e.preventDefault();
search.focus();
}
if (e.key === 'Escape' ) {
search.blur();
suggestions.classList.add('d-none');
}
}
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
function suggestionFocus(e) {
const suggestionsHidden = suggestions.classList.contains('d-none');
if (suggestionsHidden) return;
const focusableSuggestions= [...suggestions.querySelectorAll('a')];
if (focusableSuggestions.length === 0) return;
const index = focusableSuggestions.indexOf(document.activeElement);
if (e.key === "ArrowUp") {
e.preventDefault();
const nextIndex = index > 0 ? index - 1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.key === "ArrowDown") {
e.preventDefault();
const nextIndex= index + 1 < focusableSuggestions.length ? index + 1 : index;
focusableSuggestions[nextIndex].focus();
}
}
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
function showResults() {
const maxResult = 5;
var searchQuery = this.value;
// filter the results for the currently tagged language
const lang = document.documentElement.lang;
var results = index.search(searchQuery, { index: ['title', 'description', 'content'], limit: maxResult, tag: lang, enrich: true });
// flatten results since index.search() returns results for each indexed field
const flatResults = new Map(); // keyed by href to dedupe results
for (const result of results.flatMap(r => r.result)) {
if (flatResults.has(result.doc.href)) continue;
flatResults.set(result.doc.href, result.doc);
}
suggestions.innerHTML = "";
suggestions.classList.remove('d-none');
// inform user that no results were found
if (flatResults.size === 0 && searchQuery) {
const msg = suggestions.dataset.noResults;
const noResultsMessage = document.createElement('div')
noResultsMessage.innerHTML = `${msg} "<strong>${searchQuery}</strong>"`
noResultsMessage.classList.add("suggestion__no-results");
suggestions.appendChild(noResultsMessage);
return;
}
// construct a list of suggestions
for (const [href, doc] of flatResults) {
const entry = document.createElement('div');
suggestions.appendChild(entry);
const a = document.createElement('a');
a.href = href;
entry.appendChild(a);
const title = document.createElement('span');
title.classList.add('text-start');
title.textContent = doc.title;
title.classList.add("suggestion__title");
a.appendChild(title);
const description = document.createElement('span');
description.textContent = doc.description;
description.classList.add("suggestion__description");
a.appendChild(description);
suggestions.appendChild(entry);
if (suggestions.childElementCount == maxResult) break;
}
}
if (search !== null && suggestions !== null) {
document.addEventListener('keydown', inputFocus);
document.addEventListener('keydown', suggestionFocus);
document.addEventListener('click', hideSuggestions);
initIndex();
}
{{- end -}}

View File

@@ -2,23 +2,25 @@ const navbar = document.querySelector('.navbar')
const toggler = document.getElementById('main-nav-toggler') const toggler = document.getElementById('main-nav-toggler')
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed') const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
// set the navbar background color to opaque when scrolling past a breakpoint if (navbar !== null && toggler !== null) {
window.onscroll = () => { // set the navbar background color to opaque when scrolling past a breakpoint
if (window.scrollY > 75) { window.onscroll = () => {
navbar.classList.add('nav-active') if (window.scrollY > 75) {
} else { navbar.classList.add('nav-active')
navbar.classList.remove('nav-active') } else {
} navbar.classList.remove('nav-active')
} }
}
// set the navbar background color to opaque when expanded
toggler.onclick = () => { // set the navbar background color to opaque when expanded
navbar.classList.toggle('navbar-expanded') toggler.onclick = () => {
} navbar.classList.toggle('navbar-expanded')
}
// invoke the navbar toggler for each mode switcher to collapse the main menu afterwards
for (let i = 0; i < modeSelectors.length; ++i) { // invoke the navbar toggler for each mode switcher to collapse the main menu afterwards
modeSelectors[i].onclick = () => { for (let i = 0; i < modeSelectors.length; ++i) {
toggler.click() modeSelectors[i].onclick = () => {
toggler.click()
}
} }
} }

View File

@@ -30,20 +30,12 @@
.toc nav li { .toc nav li {
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
&:hover {
color: var(--bs-primary);
}
} }
.toc nav a { .toc nav a {
color: inherit; color: inherit;
}
.toc-panel nav a { &:hover {
&.active,
&:hover,
&:focus {
color: var(--bs-primary); color: var(--bs-primary);
} }
} }

View File

@@ -6,6 +6,7 @@ enableGitInfo = true
# toml-docs-end main # toml-docs-end main
# additional settings # additional settings
googleAnalytics = "G-T85PPZ36GN"
baseURL = "https://demo.gethinode.com/" baseURL = "https://demo.gethinode.com/"
canonifyURLs = false canonifyURLs = false
enableEmoji = true enableEmoji = true

View File

@@ -8,10 +8,10 @@
[en.params.head] [en.params.head]
tagline = "A Hugo Theme" tagline = "A Hugo Theme"
[en.params.feature] [en.params.feature]
link = "/en/about" link = "about"
caption = "About" caption = "About"
[en.params.footer] [en.params.footer]
license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>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'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Follow me" socialTitle = "Follow me"
socialCaption = "I work on everything coding and tweet developer memes" socialCaption = "I work on everything coding and tweet developer memes"
# toml-docs-end lang-param # toml-docs-end lang-param
@@ -23,9 +23,9 @@
[nl.params.head] [nl.params.head]
tagline = "Een Hugo Thema" tagline = "Een Hugo Thema"
[nl.params.feature] [nl.params.feature]
link = "/nl/over-mij" link = "over-mij"
caption = "Over mij" caption = "Over mij"
[nl.params.footer] [nl.params.footer]
license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank'>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'>CC BY-NC-SA 4.0</a>)."
socialTitle = "Volg mij" socialTitle = "Volg mij"
socialCaption = "Ik doe aan programmeren en tweet memes" socialCaption = "Ik doe aan programmeren en tweet memes"

View File

@@ -15,13 +15,13 @@
[[main]] [[main]]
name = "Sample project" name = "Sample project"
url = "/en/projects/sample-project/" url = "/projects/sample-project/"
parent = "Projects" parent = "Projects"
weight = 1 weight = 1
[[main]] [[main]]
name = "Another project" name = "Another project"
url = "/en/projects/another-project/" url = "/projects/another-project/"
parent = "Projects" parent = "Projects"
weight = 2 weight = 2
@@ -61,13 +61,13 @@
[[sample]] [[sample]]
name = "Sample project" name = "Sample project"
url = "/en/projects/sample-project/" url = "/projects/sample-project/"
parent = "Projects" parent = "Projects"
weight = 1 weight = 1
[[sample]] [[sample]]
name = "Another project" name = "Another project"
url = "/en/projects/another-project/" url = "/projects/another-project/"
parent = "Projects" parent = "Projects"
weight = 2 weight = 2
# toml-docs-end sample-navigation # toml-docs-end sample-navigation

View File

@@ -15,13 +15,13 @@
[[main]] [[main]]
name = "Voorbeeldproject" name = "Voorbeeldproject"
url = "/nl/projecten/voorbeeldproject/" url = "/projecten/voorbeeldproject/"
parent = "Projecten" parent = "Projecten"
weight = 1 weight = 1
[[main]] [[main]]
name = "Ander project" name = "Ander project"
url = "/nl/projecten/ander-project/" url = "/projecten/ander-project/"
parent = "Projecten" parent = "Projecten"
weight = 2 weight = 2
@@ -61,13 +61,13 @@
[[sample]] [[sample]]
name = "Voorbeeldproject" name = "Voorbeeldproject"
url = "/nl/projecten/voorbeeldproject/" url = "/projecten/voorbeeldproject/"
parent = "Projecten" parent = "Projecten"
weight = 1 weight = 1
[[sample]] [[sample]]
name = "Ander project" name = "Ander project"
url = "/nl/projecten/ander-project/" url = "/projecten/ander-project/"
parent = "Projecten" parent = "Projecten"
weight = 2 weight = 2
# toml-docs-end sample-navigation # toml-docs-end sample-navigation

View File

@@ -40,6 +40,7 @@
title = "Blog" title = "Blog"
sort = "date" sort = "date"
reverse = true reverse = true
nested = true
cols = 3 cols = 3
color = "" color = ""
padding = "0" padding = "0"
@@ -53,8 +54,10 @@
title = "Projects" title = "Projects"
sort = "title" sort = "title"
reverse = false reverse = false
nested = true
cols = 1 cols = 1
color = "body-tertiary" background = "body-tertiary"
color = "body"
padding = "3" padding = "3"
header = "none" header = "none"
footer = "tags" footer = "tags"

View File

@@ -8,14 +8,15 @@ for = '/**'
Content-Security-Policy = """\ Content-Security-Policy = """\
default-src 'self'; \ default-src 'self'; \
script-src 'self' \ script-src 'self' \
https://utteranc.es/client.js; \ https://utteranc.es/client.js https://*.google-analytics.com https://*.googletagmanager.com; \
style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \ style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
object-src 'none'; \ object-src 'none'; \
base-uri 'self'; \ base-uri 'self'; \
connect-src 'self'; \ connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' https://i.vimeocdn.com https://i.ytimg.com; \ img-src 'self' https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

View File

@@ -1,4 +1,5 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Blog title: Blog
nested: true
--- ---

View File

@@ -257,8 +257,6 @@ As an example, the following shortcode displays a tooltip for a colored hyperlin
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* tooltip color="primary" title="Tooltip" href="#!" */>}} {{</* tooltip color="primary" title="Tooltip" href="#!" */>}}Tooltip{{</* /tooltip */>}} demonstration
Tooltip demonstration
{{</* /tooltip */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Bootstrap elementen title: Bootstrap elementen
slug: bootstrap-elementen
date: 2023-02-17 date: 2023-02-17
description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen. description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen.
tags: ["bootstrap", "shortcode"] tags: ["bootstrap", "shortcode"]
@@ -257,8 +258,6 @@ De volgende shortcode toont een uitleg voor een gekleurde link.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* tooltip color="primary" title="Tooltip" href="#!" */>}} {{</* tooltip color="primary" title="Tooltip" href="#!" */>}}Tooltip{{</* /tooltip */>}} demonstratie
Tooltip demonstration
{{</* /tooltip */>}}
{{< /example >}} {{< /example >}}
<!-- markdownlint-enable MD037 --> <!-- markdownlint-enable MD037 -->

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Eerste artikel title: Eerste artikel
slug: eerste-artikel
date: 2022-10-01 date: 2022-10-01
description: Dit is mijn eerste artikel. description: Dit is mijn eerste artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Vierde artikel title: Vierde artikel
slug: vierde-artikel
date: 2023-01-01 date: 2023-01-01
description: Dit is mijn vierde artikel. description: Dit is mijn vierde artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Tweede artikel title: Tweede artikel
slug: tweede-artikel
date: 2022-11-01 date: 2022-11-01
description: Dit is mijn tweede artikel. description: Dit is mijn tweede artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -1,6 +1,7 @@
--- ---
author: Mark Dumay author: Mark Dumay
title: Derde artikel title: Derde artikel
slug: derde-artikel
date: 2022-12-01 date: 2022-12-01
description: Dit is mijn derde artikel. description: Dit is mijn derde artikel.
tags: ["blog"] tags: ["blog"]

View File

@@ -31,6 +31,8 @@
translation: "More Features" translation: "More Features"
- id: moreGuides - id: moreGuides
translation: "More Guides" translation: "More Guides"
- id: moreOpensource
translation: "More Features"
- id: moreProjects - id: moreProjects
translation: "More Projects" translation: "More Projects"
- id: moreUsers - id: moreUsers
@@ -62,7 +64,7 @@
- id: toggleSidebar - id: toggleSidebar
translation: "Toggle sidebar navigation" translation: "Toggle sidebar navigation"
- id: colorMode - id: colorMode
translation: "Color mode" translation: "Toggle theme"
- id: colorLight - id: colorLight
translation: "Light" translation: "Light"
- id: colorDark - id: colorDark

View File

@@ -56,7 +56,7 @@
- id: toggleSidebar - id: toggleSidebar
translation: "Toon of verberg navigatie" translation: "Toon of verberg navigatie"
- id: colorMode - id: colorMode
translation: "Modus" translation: "Pas modus aan"
- id: colorLight - id: colorLight
translation: "Licht" translation: "Licht"
- id: colorDark - id: colorDark

View File

@@ -6,7 +6,7 @@
<p class="display-1 mt-3 fw-bold">404</p> <p class="display-1 mt-3 fw-bold">404</p>
<p class="fs-3">{{ T "pageNotFoundTitle" }}</p> <p class="fs-3">{{ T "pageNotFoundTitle" }}</p>
</span> </span>
<p>{{ T "pageNotFound" }} <a href="{{ "/" | relURL }}">{{ T "pageNotFoundHome" }}</a>.</p> <p>{{ T "pageNotFound" }} <a href="{{ "/" | relLangURL }}">{{ T "pageNotFoundHome" }}</a>.</p>
</div> </div>
</div> </div>
{{ end }} {{ end }}

View File

@@ -10,7 +10,7 @@
<body> <body>
{{- if site.Params.main.enableDarkMode -}} {{- if site.Params.main.enableDarkMode -}}
{{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "page" .) -}} {{- partial "footer/scripts.html" (dict "filename" "js/critical.bundle.js" "match" "js/critical/**.js" "header" true "page" .) -}}
{{- end -}} {{- end -}}
<div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}"> <div class="d-flex flex-column min-vh-100{{ if and .IsHome .Site.Params.home.style }} {{ .Site.Params.home.style }}{{ end }}">
<div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}"> <div class="{{ if .Site.Params.navigation.fixed }}mb-4{{ end }}">
@@ -33,19 +33,23 @@
<div class="d-flex flex-column flex-fill"> <div class="d-flex flex-column flex-fill">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
<div class=""> {{ if not .Site.Params.main.footerBelowFold }}
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
</div> {{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}} {{ end -}}
{{ else -}} {{ else -}}
<div class="d-flex flex-column flex-fill {{ if .Site.Params.navigation.fixed }}mt-5{{ end }}"> <div class="d-flex flex-column flex-fill {{ if .Site.Params.navigation.fixed }}mt-5{{ end }}">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
<div class=""> {{ if not .Site.Params.main.footerBelowFold }}
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
</div> {{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}} {{ end -}}
</div> </div>
@@ -53,10 +57,17 @@
<div class=""> <div class="">
{{ block "main" . }}{{ end -}} {{ block "main" . }}{{ end -}}
</div> </div>
{{- partial "footer/social.html" . -}} <div class="">
{{- partial "footer/footer.html" . -}} {{- partial "footer/social.html" . -}}
{{ end -}} {{- partial "footer/footer.html" . -}}
</div>
{{ else if .Site.Params.main.footerBelowFold }}
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{- partialCached "footer/scripts.html" (dict "page" .) }} {{- partialCached "footer/scripts.html" (dict "header" false "page" .) }}
</body> </body>
</html> </html>

View File

@@ -1,9 +1,12 @@
{{- define "main" -}} {{- define "main" -}}
{{- partial "assets/section-list.html" (dict {{- partial "assets/section-list.html" (dict
"page" . "page" .
"section" .Section "section" .Type
"home" false "home" false
"nested" .Params.Nested
"title" .Title "title" .Title
"description" .Description
"content" .Content
"paginate" true) "paginate" true)
-}} -}}
{{- end -}} {{- end -}}

View File

@@ -17,14 +17,14 @@
<div class="mt-3"> <div class="mt-3">
<div class="d-none-dark"> <div class="d-none-dark">
{{ range (.GetTerms "tags") -}} {{ range (.GetTerms "tags") -}}
<a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relURL }}" role="button">{{ .LinkTitle }}</a> <a class="btn btn-light btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
&nbsp; &nbsp;
{{ end -}} {{ end -}}
</div> </div>
<div class="d-none-light"> <div class="d-none-light">
{{ range (.GetTerms "tags") -}} {{ range (.GetTerms "tags") -}}
<a class="btn btn-outline-secondary btn-sm" href="{{ (path.Join .Page.RelPermalink) | relURL }}" role="button">{{ .LinkTitle }}</a> <a class="btn btn-outline-secondary btn-sm" href="{{ (path.Join .Page.RelPermalink) | relLangURL }}" role="button">{{ .LinkTitle }}</a>
&nbsp; &nbsp;
{{ end -}} {{ end -}}
</div> </div>

View File

@@ -1,10 +0,0 @@
<!-- Hugo considers all first-level directories to be a root section. As such, as "/en/docs/" is considered to be a
branch bundle, despite it not having an "_index.md" page. Being a branch bundle, Hugo uses a list template to
render the "/en/docs/" page. This overwrites the alias defined in "/en/docs/<ver>/getting-started/introduction/".
This empty list template is deliberately added to the "/layouts/docs/" directory to prevent Hugo from generating
a list page for "/en/docs/" (all other nested sections). This enables the alias defined in
"/en/docs/<version>/getting-started/introduction/".
See https://gohugo.io/content-management/sections/ for more details.
-->

View File

@@ -6,11 +6,13 @@
{{- $page := . -}} {{- $page := . -}}
{{- range $index, $section := site.Params.home.sections -}} {{- range $index, $section := site.Params.home.sections -}}
{{- $pages := where site.RegularPages "Type" "in" $section -}} {{- $sectionPage := site.GetPage "section" $section -}}
{{- $sectionURL := "" -}} {{- $sectionURL := $sectionPage.RelPermalink -}}
{{- range $p := first 1 $pages -}} {{- $title := $sectionPage.Title -}}
{{- $sectionURL = $p.Parent.RelPermalink -}} {{- $thumbnail := $sectionPage.Params.Thumbnail -}}
{{- end -}} {{- $icon := $sectionPage.Params.Icon -}}
{{- $description := $sectionPage.Description -}}
{{- $content := $sectionPage.Content -}}
{{- $moreTitle := (T (printf "more%s" (strings.FirstUpper $section))) -}} {{- $moreTitle := (T (printf "more%s" (strings.FirstUpper $section))) -}}
@@ -18,6 +20,10 @@
"page" $page "page" $page
"section" $section "section" $section
"home" true "home" true
"nested" true
"thumbnail" $thumbnail
"icon" $icon
"content" $content
"moreTitle" $moreTitle "moreTitle" $moreTitle
"sectionURL" $sectionURL) "sectionURL" $sectionURL)
-}} -}}

View File

@@ -58,8 +58,6 @@
{{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}} {{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}}
{{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}} {{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}}
{{- $title := .title -}}
{{- $paginate := false -}} {{- $paginate := false -}}
{{- with .paginate -}} {{- with .paginate -}}
{{- if ne (printf "%T" .) "bool" -}} {{- if ne (printf "%T" .) "bool" -}}
@@ -90,7 +88,6 @@
{{- $orientation := .orientation -}} {{- $orientation := .orientation -}}
<div class="container-fluid p-4 px-xxl-0"> <div class="container-fluid p-4 px-xxl-0">
{{ with $title }}<p class="display-4 mt-3{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ $paginator := "" }} {{ $paginator := "" }}
{{ if $paginate }} {{ if $paginate }}
{{ $paginator = $page.Paginate $list }} {{ $paginator = $page.Paginate $list }}
@@ -107,13 +104,14 @@
"footer" $footer "footer" $footer
"orientation" $orientation "orientation" $orientation
) -}} ) -}}
{{- if $element.IsPage -}}
{{- if $element.Permalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}} {{- $params = merge $params (dict "path" $element.File.Path) -}}
{{- else -}} {{- else -}}
{{- $params = merge $params (dict {{- $params = merge $params (dict
"title" $element.Title "title" $element.Title
"href" (or $element.Permalink "#!") "href" $element.Permalink
"description" $element.Description "description" (or $element.Description $element.Content)
"thumbnail" $element.Params.thumbnail "thumbnail" $element.Params.thumbnail
"icon" $element.Params.icon "icon" $element.Params.icon
) -}} ) -}}

View File

@@ -5,7 +5,7 @@
The shortcode supports the following arguments: The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters. "path" Optional path of the page, override with other parameters.
"title" Required title of the card. "title" Required title of the card.
"href" Required address for the button or hyperlink. "href" Optional address for the button or hyperlink.
"class" Optional class attribute of the card element, e.g. “w-50”. "class" Optional class attribute of the card element, e.g. “w-50”.
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger", "color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
@@ -28,10 +28,17 @@
{{- $color := .color -}} {{- $color := .color -}}
{{- $description := .description -}} {{- $description := .description -}}
<a href="{{ $href }}" class="{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }} stretched-link"> {{- if $href -}}
<a href="{{ $href }}" class="{{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }} stretched-link">
<p class="card-title fs-5 fw-bold">{{ $title }}</p>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</a>
{{- else -}}
<div>
<p class="card-title fs-5 fw-bold">{{ $title }}</p> <p class="card-title fs-5 fw-bold">{{ $title }}</p>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}} {{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</a> </div>
{{- end -}}
{{- end -}} {{- end -}}
<!-- Inline partial to render the card's header or footer --> <!-- Inline partial to render the card's header or footer -->
@@ -60,7 +67,7 @@
{{- range $index, $tag := first $maxTags ($page.GetTerms "tags") -}} {{- range $index, $tag := first $maxTags ($page.GetTerms "tags") -}}
{{- if gt $index 0 }}&nbsp;&bull;&nbsp;{{ end -}} {{- if gt $index 0 }}&nbsp;&bull;&nbsp;{{ end -}}
<a href="{{ (path.Join $tag.Page.RelPermalink) | relURL }}" class="{{ $link }} tag-link" aria-label="tag: {{ $tag.LinkTitle }}">{{ $tag.LinkTitle }}</a> <a href="{{ (path.Join $tag.Page.RelPermalink) | relLangURL }}" class="{{ $link }} tag-link" aria-label="tag: {{ $tag.LinkTitle }}">{{ $tag.LinkTitle }}</a>
{{- end -}} {{- end -}}
</small></p> </small></p>
{{- end -}} {{- end -}}
@@ -109,10 +116,6 @@
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}} {{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
{{- end -}} {{- end -}}
{{- if not $href -}}
{{- errorf "partial [assets/card.html] - Missing value for param 'href'" -}}
{{- end -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $padding := "auto" -}} {{- $padding := "auto" -}}

View File

@@ -53,10 +53,6 @@
{{- range $index, $item := $list -}} {{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}} {{- $odd := eq (mod $index 2) 1 -}}
<div class="container ratio-section d-flex flex-column"> <div class="container ratio-section d-flex flex-column">
{{ if eq $index 0 }}
{{ with $title }}<p class="display-4 pt-5{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ end }}
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2"> <div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
<div class="col-6{{ if $odd }} order-last{{ end }}"> <div class="col-6{{ if $odd }} order-last{{ end }}">
{{- $style := "reveal fade-bottom" -}} {{- $style := "reveal fade-bottom" -}}
@@ -78,9 +74,6 @@
{{- range $index, $item := $list -}} {{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}} {{- $odd := eq (mod $index 2) 1 -}}
<div class="container d-flex flex-column"> <div class="container d-flex flex-column">
{{ if eq $index 0 }}
{{ with $title }}<p class="display-4 pt-5{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ end }}
<div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2"> <div class="row pt-5 pb-5 align-items-center flex-fill row-cols-2">
<div class="col-12 text-center"> <div class="col-12 text-center">
{{ partial "partials/list-img.html" (dict "thumbnail" $item.Params.Thumbnail "mode" $item.Params.colormode) }} {{ partial "partials/list-img.html" (dict "thumbnail" $item.Params.Thumbnail "mode" $item.Params.colormode) }}

View File

@@ -76,7 +76,6 @@
{{ end -}} {{ end -}}
{{ end -}} {{ end -}}
{{ with $title }}<p class="display-4 pt-5{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
<div class="{{ if eq $width 50 }}col-sm-12 col-md-10 col-lg-8 col-xl-6{{ else }}col-12{{ end }} mx-auto pt-5 pb-5"> <div class="{{ if eq $width 50 }}col-sm-12 col-md-10 col-lg-8 col-xl-6{{ else }}col-12{{ end }} mx-auto pt-5 pb-5">
{{ if $vertical }}<div class="d-flex align-items-start">{{ end }} {{ if $vertical }}<div class="d-flex align-items-start">{{ end }}
<div class="nav{{ with $type }} nav-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}{{ if $vertical }} flex-column{{ end }}" id="nav-{{ $id }}" role="tablist"{{ if $vertical }} aria-orientation="vertical"{{ end }}> <div class="nav{{ with $type }} nav-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}{{ if $vertical }} flex-column{{ end }}" id="nav-{{ $id }}" role="tablist"{{ if $vertical }} aria-orientation="vertical"{{ end }}>

View File

@@ -169,18 +169,18 @@
{{- $menu_item_url := $menu.URL | relLangURL -}} {{- $menu_item_url := $menu.URL | relLangURL -}}
{{- $page_url:= $page.RelPermalink | relLangURL -}} {{- $page_url:= $page.RelPermalink | relLangURL -}}
{{- $active := hasPrefix $page_url $menu_item_url -}} {{- $active := hasPrefix $page_url $menu_item_url -}}
{{- $url := urls.Parse .URL -}} {{- $url := urls.Parse .URL -}}
{{- $baseurl := urls.Parse $.Site.Params.Baseurl -}} {{- $baseurl := urls.Parse $.Site.Params.Baseurl -}}
{{- if .HasChildren -}} {{- if .HasChildren -}}
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link {{ if $active }}active{{ end }} dropdown-toggle" href="{{ .URL }}" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link {{ if $active }}active{{ end }} dropdown-toggle" href="{{ .URL | relLangURL }}" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }} {{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }}
</a> </a>
<ul class="dropdown-menu dropdown-menu-end"> <ul class="dropdown-menu dropdown-menu-end">
{{- range .Children -}} {{- range .Children -}}
{{- $child_active := eq $page_url .URL -}} {{- $child_active := eq $page_url (.URL | relLangURL) -}}
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL }}">{{ .Name }}</a></li> <li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL | relLangURL }}">{{ .Name }}</a></li>
{{- end -}} {{- end -}}
</ul> </ul>
</li> </li>
@@ -188,7 +188,7 @@
<li class="nav-item"> <li class="nav-item">
{{- $external := ne $url.Host $baseurl.Host -}} {{- $external := ne $url.Host $baseurl.Host -}}
<a class="nav-link {{ if $active }}active{{ end }}" <a class="nav-link {{ if $active }}active{{ end }}"
href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if $external }}target="_blank" {{ end }}> href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if $external }}target="_blank" rel="noopener noreferrer" {{ end }}>
{{- with $pre}}{{ . }}{{ end -}} {{- with $pre}}{{ . }}{{ end -}}
<span {{if $active }} class="active"{{end}}>{{ .Name }}</span> <span {{if $active }} class="active"{{end}}>{{ .Name }}</span>
{{- with $post}}{{ . }}{{ end -}} {{- with $post}}{{ . }}{{ end -}}

View File

@@ -1,6 +1,6 @@
<div class="d-flex ms-md-3"> <div class="d-flex ms-md-3">
<form class="search position-relative flex-grow-1 me-auto"> <form class="search position-relative flex-grow-1 me-auto">
<input id="search" class="form-control is-search" type="search" placeholder="{{ T "ui_search" }}" aria-label="{{ T "ui_search" }}" autocomplete="off"> <input id="search" class="form-control is-search" type="search" placeholder="{{ T "ui_search" }}" aria-label="{{ T "ui_search" }}" autocomplete="off">
<div id="suggestions" class="shadow bg-body rounded d-none"></div> <div id="suggestions" class="shadow bg-body rounded d-none" data-no-results="{{ T "ui_no_results" }}"></div>
</form> </form>
</div> </div>

View File

@@ -0,0 +1,46 @@
{{- $title := .title -}}
{{- $thumbnail := .thumbnail -}}
{{- $icon := .icon -}}
{{- $sectionHeader := .sectionHeader -}}
{{- $description := .description -}}
{{- $content := .content -}}
{{- define "partials/section-header-img.html" -}}
{{- $title := .title -}}
{{- $thumbnail := .thumbnail -}}
{{- $icon := .icon -}}
{{ $padding := 5 }}
{{- if $thumbnail -}}
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
{{- else if $icon -}}
<div class="text-secondary fw-bold">
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-10x" $icon)) -}}
</div>
{{- end -}}
{{- end -}}
<div class="container-fluid p-4 px-xxl-0">
{{ with $title }}<p class="display-4 mt-3{{ if and page.IsHome site.Params.home.centerHeadline }} text-center{{ end }}">{{ . }}</p>{{ end }}
{{ with $description }} <p class="lead mb-5">{{ . }}</p>{{ end }}
{{- if $content -}}
<div class="row row-cols-1 row-cols-lg-3 pt-5">
<div class="col col-lg-3 d-none d-lg-block"></div>
<div class="col col-sm-12 col-lg-6 text-center">
<div class="row row-cols-1{{ if ne $sectionHeader "justify-content-center" }} row-cols-sm-2{{ end }} row-gap-5 p-0 align-items-center flex-fill">
{{- if eq $sectionHeader "justify-content-center" -}}
<div class="col p-0 w-50 mx-auto pb-5">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
<div class="col fs-md-5 fs-6">{{ $content }}</div>
{{- else if eq $sectionHeader "justify-content-end" -}}
<div class="col p-0">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
<div class="col fs-md-5 fs-6 text-sm-start">{{ $content }}</div>
{{- else -}}
<div class="col fs-md-5 fs-6 text-sm-start">{{ $content }}</div>
<div class="col p-0">{{ partial "partials/section-header-img.html" (dict "title" $title "thumbnail" $thumbnail "icon" $icon )}}</div>
{{- end -}}
</div>
</div>
<div class="col col-lg-3 d-none d-lg-block"></div>
</div>
{{- end -}}
</div>

View File

@@ -6,9 +6,14 @@
{{ errorf "partial [assets/section-list.html] - Invalid value for param 'home'"}} {{ errorf "partial [assets/section-list.html] - Invalid value for param 'home'"}}
{{ end }} {{ end }}
{{- $title := .title -}} {{- $title := .title -}}
{{- $icon := .icon -}}
{{- $thumbnail := .thumbnail -}}
{{- $sectionHeader := .sectionHeader -}}
{{- $description := .description -}}
{{- $content := .content -}}
{{- $moreTitle := .moreTitle -}} {{- $moreTitle := .moreTitle -}}
{{- $sectionURL := .sectionURL -}} {{- $sectionURL := .sectionURL -}}
{{- $nested := .nested | default true -}}
{{- $paginate := true -}} {{- $paginate := true -}}
{{- $sort := "date" -}} {{- $sort := "date" -}}
{{- $order := "desc" -}} {{- $order := "desc" -}}
@@ -30,8 +35,10 @@
{{- with (index site.Params.sections $section) -}} {{- with (index site.Params.sections $section) -}}
{{- with index . "title" }}{{ $title = or $.title . }}{{ end -}} {{- with index . "title" }}{{ $title = or $.title . }}{{ end -}}
{{- with index . "sectionHeader" }}{{ $sectionHeader = . }}{{ end -}}
{{- with index . "sort" }}{{ $sort = . }}{{ end -}} {{- with index . "sort" }}{{ $sort = . }}{{ end -}}
{{- if (index . "reverse") }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}} {{- if (index . "reverse") }}{{ $order = "desc" }}{{ else }}{{ $order = "asc" }}{{ end -}}
{{- if $home }}{{- if (isset . "nested") }}{{ $nested = (index . "nested") }}{{ end -}}{{ end -}}
{{- if (index . "separator") }}{{ $separator = true }}{{ else }}{{ $separator = false }}{{ end -}} {{- if (index . "separator") }}{{ $separator = true }}{{ else }}{{ $separator = false }}{{ end -}}
{{- with index . "orientation" }}{{ $orientation = . }}{{ end -}} {{- with index . "orientation" }}{{ $orientation = . }}{{ end -}}
{{- with index . "cols" }}{{ $cols = . }}{{ end -}} {{- with index . "cols" }}{{ $cols = . }}{{ end -}}
@@ -48,8 +55,20 @@
{{- with index . "vertical" }}{{ $vertical = . }}{{ end -}} {{- with index . "vertical" }}{{ $vertical = . }}{{ end -}}
{{- with index . "width" }}{{ $width = . }}{{ end -}} {{- with index . "width" }}{{ $width = . }}{{ end -}}
{{- end -}} {{- end -}}
{{ if ne (printf "%T" $nested) "bool" }}
{{ errorf "partial [assets/section-list.html] - Invalid value for param 'nested'"}}
{{ end }}
{{ $list := "" }}
{{ if $nested }}
{{ $list = where site.RegularPages "Type" "in" $section }}
{{ else if $home }}
{{ $sectionPage := site.GetPage "section" $section }}
{{ $list = $sectionPage.RegularPages }}
{{ else }}
{{ $list = $page.RegularPages }}
{{ end }}
{{ $list := where site.RegularPages "Type" "in" $section }}
{{ $max := (len $list) -}} {{ $max := (len $list) -}}
{{ if eq $max 0 }} {{ if eq $max 0 }}
{{- $bundle := site.GetPage $section -}} {{- $bundle := site.GetPage $section -}}
@@ -74,6 +93,11 @@
"page" $page "page" $page
"list" $list "list" $list
"title" $title "title" $title
"icon" $icon
"thumbnail" $thumbnail
"sectionHeader" $sectionHeader
"description" $description
"content" $content
"class" $style "class" $style
"color" $color "color" $color
) )
@@ -82,6 +106,8 @@
<div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }}"> <div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }}">
<div class="container-xxl flex-fill p-0"> <div class="container-xxl flex-fill p-0">
{{- partial "assets/section-header.html" $params -}}
{{ if eq $layout "card" }} {{ if eq $layout "card" }}
{{- $partial = "assets/card-group.html" -}} {{- $partial = "assets/card-group.html" -}}
{{- $params = merge $params (dict {{- $params = merge $params (dict

View File

@@ -1,6 +1,7 @@
{{ $filename := .filename | default "js/main.bundle.js" -}} {{ $filename := .filename | default "js/main.bundle.js" -}}
{{ $match := .match | default "{js/*.js,js/vendor/**.js}" }} {{ $match := .match | default "{js/*.js,js/vendor/**.js}" }}
{{ $page := .page }} {{ $page := .page }}
{{ $header := .header }}
{{ $files := slice -}} {{ $files := slice -}}
{{ range $index, $file := resources.Match $match -}} {{ range $index, $file := resources.Match $match -}}
@@ -11,6 +12,13 @@
{{ $bundle := $files | resources.Concat $filename -}} {{ $bundle := $files | resources.Concat $filename -}}
{{ $js := $bundle | resources.ExecuteAsTemplate $filename $page -}} {{ $js := $bundle | resources.ExecuteAsTemplate $filename $page -}}
{{- if and (not site.IsServer) $header -}}
{{- $pc := site.Config.Privacy.GoogleAnalytics -}}
{{- if and (not $pc.Disable) (hasPrefix site.GoogleAnalytics "G-") }}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.GoogleAnalytics }}"></script>
{{- end }}
{{- end -}}
{{- if not hugo.IsProduction -}} {{- if not hugo.IsProduction -}}
<script src="{{ $js.RelPermalink }}"></script> <script src="{{ $js.RelPermalink }}"></script>
{{ else -}} {{ else -}}

View File

@@ -7,7 +7,7 @@
</div> </div>
<div class="col text-sm-start text-center col-sm-6 col-md-4"> <div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}} {{ range .Site.Menus.social -}}
<a href="{{ .URL | relURL }}" target="_blank" rel="noopener" aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2"> <a href="{{ .URL | relLangURL }}" target="_blank" rel="noopener noreferrer" aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
{{ .Pre | safeHTML }} {{ .Pre | safeHTML }}
</a> </a>
{{ end -}} {{ end -}}

View File

@@ -30,7 +30,7 @@
{{- end -}} {{- end -}}
{{- if not hugo.IsProduction -}} {{- if not hugo.IsProduction -}}
<link rel="stylesheet" href="{{ $css.Permalink | relURL }}"> <link rel="stylesheet" href="{{ $css.Permalink | relLangURL }}">
{{- else -}} {{- else -}}
{{- $css = $css | fingerprint | resources.PostProcess -}} {{- $css = $css | fingerprint | resources.PostProcess -}}
<link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous"> <link rel="stylesheet" href="{{ $css.Permalink }}" integrity="{{ $css.Data.Integrity }}" crossorigin="anonymous">

View File

@@ -1,7 +1,7 @@
<!-- Copied from doks --> <!-- Copied from doks -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="{{ .Site.Params.twitterSite }}"> {{ with .Site.Params.twitterSite }}<meta name="twitter:site" content="{{ . }}">{{ end }}
<meta name="twitter:creator" content="{{ .Site.Params.twitterCreator }}"> {{ with .Site.Params.twitterCreator }}<meta name="twitter:creator" content="{{ . }}">{{ end }}
<meta name="twitter:title" content="{{ $.Scratch.Get "title" }}"> <meta name="twitter:title" content="{{ $.Scratch.Get "title" }}">
<meta name="twitter:description" content="{{ $.Scratch.Get "description" }}"> <meta name="twitter:description" content="{{ $.Scratch.Get "description" }}">
<meta name="twitter:image" content="{{ $.Scratch.Get "thumbnail" }}"> <meta name="twitter:image" content="{{ $.Scratch.Get "thumbnail" }}">

View File

@@ -1,5 +1,5 @@
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}} {{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
Last updated: {{ $lastmodstr }} Last updated: {{ $lastmodstr }}
{{ with .GitInfo }} {{ with .GitInfo }}
&bull;&nbsp;<a href="{{ site.Params.schema.gitHub }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a> &bull;&nbsp;<a href="{{ site.Params.docs.github | default site.Params.schema.github }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>
{{ end -}} {{ end -}}

View File

@@ -1,9 +1,21 @@
{{ $input := .Inner | markdownify }} {{- $responsiveVals := slice "table-responsive" "table-responsive-none" "table-responsive-sm" "table-responsive-md" "table-responsive-lg" "table-responsive-xl" "table-responsive-xxl" -}}
{{ $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" }} {{- $responsive := intersect .Params $responsiveVals -}}
{{ $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" }} {{- $main := complement $responsive .Params -}}
{{ $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" }}
{{ $class := .Get 0 | default "" }} {{- if in $responsive "table-responsive-none" -}}
{{ $old := "<table>" }} {{- $responsive = "" -}}
{{ $new := printf "<table class=\"table %s\">" $class }} {{- else if not $responsive -}}
{{ $input := replace $input $old $new }} {{ $responsive = (slice "table-responsive") -}}
{{ $input | safeHTML }} {{- end -}}
{{- $input := .Inner | markdownify }}
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}}
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}}
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}}
{{- $class := delimit $main " " -}}
{{- $old := "<table>" -}}
{{- $new := printf "<table class=\"table %s\">" $class -}}
{{ $input := replace $input $old $new -}}
{{- with $responsive }}<div class="{{ delimit . " " }}">{{ end -}}
{{ $input | safeHTML }}
{{- with $responsive }}</div>{{ end -}}

View File

@@ -41,5 +41,5 @@
{{ end -}} {{ end -}}
{{ if not $error }} {{ if not $error }}
{{- partial "assets/button.html" (dict "type" $type "title" $title "color" $color "tooltip" $tooltip "href" $href "placement" $placement) -}} <div class="d-inline-flex">{{- partial "assets/button.html" (dict "type" $type "title" $title "color" $color "tooltip" $tooltip "href" $href "placement" $placement) -}}</div>
{{ end }} {{ end }}

View File

@@ -13,7 +13,7 @@
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }} {{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
</div> </div>
<div class="col"> <div class="col">
<a href="{{ (path.Join .Page.RelPermalink) | relURL }}">{{ .Name | markdownify }}</a> <a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | markdownify }}</a>
</div> </div>
</div> </div>
{{ end }} {{ end }}
@@ -32,7 +32,7 @@
<p class="text-body-secondary mt-5">{{ $year }}</p> <p class="text-body-secondary mt-5">{{ $year }}</p>
{{ $.Scratch.Set "lastYear" $year }} {{ $.Scratch.Set "lastYear" $year }}
{{ end }} {{ end }}
<a href="{{ .Permalink | relURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | markdownify }}</a> <a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | markdownify }}</a>
</div> </div>
</div> </div>
{{ end }} {{ end }}

View File

@@ -24,15 +24,20 @@
X-XSS-Protection = "1; mode=block" X-XSS-Protection = "1; mode=block"
Content-Security-Policy = """\ Content-Security-Policy = """\
default-src 'self'; \ default-src 'self'; \
child-src 'self' app.netlify.com; \
script-src 'self' \ script-src 'self' \
https://utteranc.es/client.js; \ app.netlify.com netlify-cdp-loader.netlify.app \
style-src 'self' https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \ https://utteranc.es/client.js https://*.google-analytics.com https://*.googletagmanager.com; \
style-src 'self' \
netlify.app https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
object-src 'none'; \ object-src 'none'; \
base-uri 'self'; \ base-uri 'self'; \
connect-src 'self'; \ connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://utteranc.es https://www.youtube-nocookie.com https://www.youtube.com \
img-src 'self' https://i.vimeocdn.com https://i.ytimg.com; \ app.netlify.com; \
img-src 'self' https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

303
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.12.1", "version": "0.13.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.12.1", "version": "0.13.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@fortawesome/fontawesome-free": "^6.4.0", "@fortawesome/fontawesome-free": "^6.4.0",
@@ -224,14 +224,14 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "2.0.2", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
"integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.1", "espree": "^9.5.2",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@@ -247,9 +247,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.39.0", "version": "8.40.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz",
"integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1553,12 +1553,12 @@
} }
}, },
"node_modules/cssnano": { "node_modules/cssnano": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
"integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==", "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"cssnano-preset-default": "^6.0.0", "cssnano-preset-default": "^6.0.1",
"lilconfig": "^2.1.0" "lilconfig": "^2.1.0"
}, },
"engines": { "engines": {
@@ -1573,16 +1573,16 @@
} }
}, },
"node_modules/cssnano-preset-advanced": { "node_modules/cssnano-preset-advanced": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.0.1.tgz",
"integrity": "sha512-OasX46ANVy93yaMVgxGk1PoPzrzrgXxX6C8b3Pr6LE3oVyCsyh1Oywm7xxSkZfbGzNp6M/+4OmzP5xtAf21IMw==", "integrity": "sha512-z50X9tDqiZx0Cv+vi3/IRe+5ca1lLLvoG67PjwWdC6gXNqc7JXbU/hWEfYQg+e9/8cq+fVKhyLHO8n3mV7mxDw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"autoprefixer": "^10.4.12", "autoprefixer": "^10.4.12",
"cssnano-preset-default": "^6.0.0", "cssnano-preset-default": "^6.0.1",
"postcss-discard-unused": "^6.0.0", "postcss-discard-unused": "^6.0.0",
"postcss-merge-idents": "^6.0.0", "postcss-merge-idents": "^6.0.0",
"postcss-reduce-idents": "^6.0.0", "postcss-reduce-idents": "^6.0.1",
"postcss-zindex": "^6.0.0" "postcss-zindex": "^6.0.0"
}, },
"engines": { "engines": {
@@ -1593,14 +1593,14 @@
} }
}, },
"node_modules/cssnano-preset-default": { "node_modules/cssnano-preset-default": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
"integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==", "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"css-declaration-sorter": "^6.3.1", "css-declaration-sorter": "^6.3.1",
"cssnano-utils": "^4.0.0", "cssnano-utils": "^4.0.0",
"postcss-calc": "^8.2.3", "postcss-calc": "^9.0.0",
"postcss-colormin": "^6.0.0", "postcss-colormin": "^6.0.0",
"postcss-convert-values": "^6.0.0", "postcss-convert-values": "^6.0.0",
"postcss-discard-comments": "^6.0.0", "postcss-discard-comments": "^6.0.0",
@@ -1608,7 +1608,7 @@
"postcss-discard-empty": "^6.0.0", "postcss-discard-empty": "^6.0.0",
"postcss-discard-overridden": "^6.0.0", "postcss-discard-overridden": "^6.0.0",
"postcss-merge-longhand": "^6.0.0", "postcss-merge-longhand": "^6.0.0",
"postcss-merge-rules": "^6.0.0", "postcss-merge-rules": "^6.0.1",
"postcss-minify-font-values": "^6.0.0", "postcss-minify-font-values": "^6.0.0",
"postcss-minify-gradients": "^6.0.0", "postcss-minify-gradients": "^6.0.0",
"postcss-minify-params": "^6.0.0", "postcss-minify-params": "^6.0.0",
@@ -2100,15 +2100,15 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.39.0", "version": "8.40.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz",
"integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.2", "@eslint/eslintrc": "^2.0.3",
"@eslint/js": "8.39.0", "@eslint/js": "8.40.0",
"@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@@ -2119,8 +2119,8 @@
"doctrine": "^3.0.0", "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.2.0", "eslint-scope": "^7.2.0",
"eslint-visitor-keys": "^3.4.0", "eslint-visitor-keys": "^3.4.1",
"espree": "^9.5.1", "espree": "^9.5.2",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@@ -2411,9 +2411,9 @@
} }
}, },
"node_modules/eslint-visitor-keys": { "node_modules/eslint-visitor-keys": {
"version": "3.4.0", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2423,14 +2423,14 @@
} }
}, },
"node_modules/espree": { "node_modules/espree": {
"version": "9.5.1", "version": "9.5.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
"integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"acorn": "^8.8.0", "acorn": "^8.8.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.0" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4071,9 +4071,9 @@
} }
}, },
"node_modules/markdownlint": { "node_modules/markdownlint": {
"version": "0.28.1", "version": "0.28.2",
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.1.tgz", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.2.tgz",
"integrity": "sha512-8At2DbgGKT/RVBinkqIPqLETopPXyQFGWSiTCJSr9Y6wVVyY70cDJ9dw3FXePn4AkytIUclgrsgI6KVeqeHFoA==", "integrity": "sha512-yYaQXoKKPV1zgrFsyAuZPEQoe+JrY9GDag9ObKpk09twx4OCU5lut+0/kZPrQ3W7w82SmgKhd7D8m34aG1unVw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"markdown-it": "13.0.1", "markdown-it": "13.0.1",
@@ -4084,17 +4084,17 @@
} }
}, },
"node_modules/markdownlint-cli2": { "node_modules/markdownlint-cli2": {
"version": "0.7.0", "version": "0.7.1",
"resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.7.0.tgz", "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.7.1.tgz",
"integrity": "sha512-67r1t9ep+z0fa6g9TgL3tiPQeWo297ip165Et2u54UquJAkXWnq6e+dXFBjSPft/iLaGJfU0fUHXhXueqNUkGQ==", "integrity": "sha512-N58lw50Ws0WOfCc07B9dPKMnPMbIj6ZCMlszZLVfxBwKN/M+WZqXLdOHyRL2BWCZ3APBxQN9qDEw7Vf1PRqFkg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"globby": "13.1.4", "globby": "13.1.4",
"markdownlint": "0.28.1", "markdownlint": "0.28.2",
"markdownlint-cli2-formatter-default": "0.0.4", "markdownlint-cli2-formatter-default": "0.0.4",
"micromatch": "4.0.5", "micromatch": "4.0.5",
"strip-json-comments": "5.0.0", "strip-json-comments": "5.0.0",
"yaml": "2.2.1" "yaml": "2.2.2"
}, },
"bin": { "bin": {
"markdownlint-cli2": "markdownlint-cli2.js", "markdownlint-cli2": "markdownlint-cli2.js",
@@ -4885,14 +4885,17 @@
} }
}, },
"node_modules/postcss-calc": { "node_modules/postcss-calc": {
"version": "8.2.4", "version": "9.0.0",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.0.tgz",
"integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "integrity": "sha512-B9BNW/SVh4SMJfoCQ6D9h1Wo7Yjqks7UdbiARJ16J5TIsQn5NEqwMF5joSgOYb26oJPUR5Uv3fCQ/4PvmZWeJQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"postcss-selector-parser": "^6.0.9", "postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
"engines": {
"node": "^14 || ^16 || >=18.0"
},
"peerDependencies": { "peerDependencies": {
"postcss": "^8.2.2" "postcss": "^8.2.2"
} }
@@ -5103,9 +5106,9 @@
} }
}, },
"node_modules/postcss-merge-rules": { "node_modules/postcss-merge-rules": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
"integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==", "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"browserslist": "^4.21.4", "browserslist": "^4.21.4",
@@ -5334,9 +5337,9 @@
} }
}, },
"node_modules/postcss-reduce-idents": { "node_modules/postcss-reduce-idents": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.1.tgz",
"integrity": "sha512-Dw/+s0J3Ie+jXE4QKdgcf8mswuQ8/KaVzKmC925B1tCn6uW8iQ2T2CBKtPN5vAKnVsNMrMsREe/7gaIwi91hJw==", "integrity": "sha512-KniPTynD5u69rLwcS6++OMBQg2TsH59Z8SX01rqs4LFhcU9A3IqjZ1ax41MiYfqCotseBmo01+hzO+Bqrcd1Og==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
@@ -5444,9 +5447,9 @@
} }
}, },
"node_modules/postcss-selector-parser": { "node_modules/postcss-selector-parser": {
"version": "6.0.11", "version": "6.0.12",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"cssesc": "^3.0.0", "cssesc": "^3.0.0",
@@ -6458,9 +6461,9 @@
} }
}, },
"node_modules/stylelint": { "node_modules/stylelint": {
"version": "15.6.0", "version": "15.6.1",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.6.0.tgz", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.6.1.tgz",
"integrity": "sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg==", "integrity": "sha512-d8icFBlVl93Elf3Z5ABQNOCe4nx69is3D/NZhDLAie1eyYnpxfeKe7pCfqzT5W4F8vxHCLSDfV8nKNJzogvV2Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@csstools/css-parser-algorithms": "^2.1.1", "@csstools/css-parser-algorithms": "^2.1.1",
@@ -6490,11 +6493,11 @@
"micromatch": "^4.0.5", "micromatch": "^4.0.5",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"postcss": "^8.4.22", "postcss": "^8.4.23",
"postcss-media-query-parser": "^0.2.3", "postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1", "postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0", "postcss-safe-parser": "^6.0.0",
"postcss-selector-parser": "^6.0.11", "postcss-selector-parser": "^6.0.12",
"postcss-value-parser": "^4.2.0", "postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0", "resolve-from": "^5.0.0",
"string-width": "^4.2.3", "string-width": "^4.2.3",
@@ -6504,7 +6507,7 @@
"svg-tags": "^1.0.0", "svg-tags": "^1.0.0",
"table": "^6.8.1", "table": "^6.8.1",
"v8-compile-cache": "^2.3.0", "v8-compile-cache": "^2.3.0",
"write-file-atomic": "^5.0.0" "write-file-atomic": "^5.0.1"
}, },
"bin": { "bin": {
"stylelint": "bin/stylelint.js" "stylelint": "bin/stylelint.js"
@@ -7041,18 +7044,30 @@
"dev": true "dev": true
}, },
"node_modules/write-file-atomic": { "node_modules/write-file-atomic": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
"integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"imurmurhash": "^0.1.4", "imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7" "signal-exit": "^4.0.1"
}, },
"engines": { "engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0" "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
} }
}, },
"node_modules/write-file-atomic/node_modules/signal-exit": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
"integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
"dev": true,
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/xtend": { "node_modules/xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -7078,9 +7093,9 @@
"dev": true "dev": true
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.2.1", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
"integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">= 14" "node": ">= 14"
@@ -7273,14 +7288,14 @@
"dev": true "dev": true
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "2.0.2", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
"integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.1", "espree": "^9.5.2",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@@ -7290,9 +7305,9 @@
} }
}, },
"@eslint/js": { "@eslint/js": {
"version": "8.39.0", "version": "8.40.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.40.0.tgz",
"integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", "integrity": "sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==",
"dev": true "dev": true
}, },
"@fortawesome/fontawesome-free": { "@fortawesome/fontawesome-free": {
@@ -8210,38 +8225,38 @@
"dev": true "dev": true
}, },
"cssnano": { "cssnano": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
"integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==", "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
"dev": true, "dev": true,
"requires": { "requires": {
"cssnano-preset-default": "^6.0.0", "cssnano-preset-default": "^6.0.1",
"lilconfig": "^2.1.0" "lilconfig": "^2.1.0"
} }
}, },
"cssnano-preset-advanced": { "cssnano-preset-advanced": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.0.1.tgz",
"integrity": "sha512-OasX46ANVy93yaMVgxGk1PoPzrzrgXxX6C8b3Pr6LE3oVyCsyh1Oywm7xxSkZfbGzNp6M/+4OmzP5xtAf21IMw==", "integrity": "sha512-z50X9tDqiZx0Cv+vi3/IRe+5ca1lLLvoG67PjwWdC6gXNqc7JXbU/hWEfYQg+e9/8cq+fVKhyLHO8n3mV7mxDw==",
"dev": true, "dev": true,
"requires": { "requires": {
"autoprefixer": "^10.4.12", "autoprefixer": "^10.4.12",
"cssnano-preset-default": "^6.0.0", "cssnano-preset-default": "^6.0.1",
"postcss-discard-unused": "^6.0.0", "postcss-discard-unused": "^6.0.0",
"postcss-merge-idents": "^6.0.0", "postcss-merge-idents": "^6.0.0",
"postcss-reduce-idents": "^6.0.0", "postcss-reduce-idents": "^6.0.1",
"postcss-zindex": "^6.0.0" "postcss-zindex": "^6.0.0"
} }
}, },
"cssnano-preset-default": { "cssnano-preset-default": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
"integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==", "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"css-declaration-sorter": "^6.3.1", "css-declaration-sorter": "^6.3.1",
"cssnano-utils": "^4.0.0", "cssnano-utils": "^4.0.0",
"postcss-calc": "^8.2.3", "postcss-calc": "^9.0.0",
"postcss-colormin": "^6.0.0", "postcss-colormin": "^6.0.0",
"postcss-convert-values": "^6.0.0", "postcss-convert-values": "^6.0.0",
"postcss-discard-comments": "^6.0.0", "postcss-discard-comments": "^6.0.0",
@@ -8249,7 +8264,7 @@
"postcss-discard-empty": "^6.0.0", "postcss-discard-empty": "^6.0.0",
"postcss-discard-overridden": "^6.0.0", "postcss-discard-overridden": "^6.0.0",
"postcss-merge-longhand": "^6.0.0", "postcss-merge-longhand": "^6.0.0",
"postcss-merge-rules": "^6.0.0", "postcss-merge-rules": "^6.0.1",
"postcss-minify-font-values": "^6.0.0", "postcss-minify-font-values": "^6.0.0",
"postcss-minify-gradients": "^6.0.0", "postcss-minify-gradients": "^6.0.0",
"postcss-minify-params": "^6.0.0", "postcss-minify-params": "^6.0.0",
@@ -8615,15 +8630,15 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "8.39.0", "version": "8.40.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.40.0.tgz",
"integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "integrity": "sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.2", "@eslint/eslintrc": "^2.0.3",
"@eslint/js": "8.39.0", "@eslint/js": "8.40.0",
"@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@@ -8634,8 +8649,8 @@
"doctrine": "^3.0.0", "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.2.0", "eslint-scope": "^7.2.0",
"eslint-visitor-keys": "^3.4.0", "eslint-visitor-keys": "^3.4.1",
"espree": "^9.5.1", "espree": "^9.5.2",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@@ -8838,20 +8853,20 @@
} }
}, },
"eslint-visitor-keys": { "eslint-visitor-keys": {
"version": "3.4.0", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
"integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
"dev": true "dev": true
}, },
"espree": { "espree": {
"version": "9.5.1", "version": "9.5.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
"integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^8.8.0", "acorn": "^8.8.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.0" "eslint-visitor-keys": "^3.4.1"
} }
}, },
"esquery": { "esquery": {
@@ -10064,9 +10079,9 @@
} }
}, },
"markdownlint": { "markdownlint": {
"version": "0.28.1", "version": "0.28.2",
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.1.tgz", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.2.tgz",
"integrity": "sha512-8At2DbgGKT/RVBinkqIPqLETopPXyQFGWSiTCJSr9Y6wVVyY70cDJ9dw3FXePn4AkytIUclgrsgI6KVeqeHFoA==", "integrity": "sha512-yYaQXoKKPV1zgrFsyAuZPEQoe+JrY9GDag9ObKpk09twx4OCU5lut+0/kZPrQ3W7w82SmgKhd7D8m34aG1unVw==",
"dev": true, "dev": true,
"requires": { "requires": {
"markdown-it": "13.0.1", "markdown-it": "13.0.1",
@@ -10074,17 +10089,17 @@
} }
}, },
"markdownlint-cli2": { "markdownlint-cli2": {
"version": "0.7.0", "version": "0.7.1",
"resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.7.0.tgz", "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.7.1.tgz",
"integrity": "sha512-67r1t9ep+z0fa6g9TgL3tiPQeWo297ip165Et2u54UquJAkXWnq6e+dXFBjSPft/iLaGJfU0fUHXhXueqNUkGQ==", "integrity": "sha512-N58lw50Ws0WOfCc07B9dPKMnPMbIj6ZCMlszZLVfxBwKN/M+WZqXLdOHyRL2BWCZ3APBxQN9qDEw7Vf1PRqFkg==",
"dev": true, "dev": true,
"requires": { "requires": {
"globby": "13.1.4", "globby": "13.1.4",
"markdownlint": "0.28.1", "markdownlint": "0.28.2",
"markdownlint-cli2-formatter-default": "0.0.4", "markdownlint-cli2-formatter-default": "0.0.4",
"micromatch": "4.0.5", "micromatch": "4.0.5",
"strip-json-comments": "5.0.0", "strip-json-comments": "5.0.0",
"yaml": "2.2.1" "yaml": "2.2.2"
}, },
"dependencies": { "dependencies": {
"strip-json-comments": { "strip-json-comments": {
@@ -10620,12 +10635,12 @@
} }
}, },
"postcss-calc": { "postcss-calc": {
"version": "8.2.4", "version": "9.0.0",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.0.tgz",
"integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "integrity": "sha512-B9BNW/SVh4SMJfoCQ6D9h1Wo7Yjqks7UdbiARJ16J5TIsQn5NEqwMF5joSgOYb26oJPUR5Uv3fCQ/4PvmZWeJQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"postcss-selector-parser": "^6.0.9", "postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
} }
}, },
@@ -10753,9 +10768,9 @@
} }
}, },
"postcss-merge-rules": { "postcss-merge-rules": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
"integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==", "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
"dev": true, "dev": true,
"requires": { "requires": {
"browserslist": "^4.21.4", "browserslist": "^4.21.4",
@@ -10895,9 +10910,9 @@
} }
}, },
"postcss-reduce-idents": { "postcss-reduce-idents": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.1.tgz",
"integrity": "sha512-Dw/+s0J3Ie+jXE4QKdgcf8mswuQ8/KaVzKmC925B1tCn6uW8iQ2T2CBKtPN5vAKnVsNMrMsREe/7gaIwi91hJw==", "integrity": "sha512-KniPTynD5u69rLwcS6++OMBQg2TsH59Z8SX01rqs4LFhcU9A3IqjZ1ax41MiYfqCotseBmo01+hzO+Bqrcd1Og==",
"dev": true, "dev": true,
"requires": { "requires": {
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
@@ -10953,9 +10968,9 @@
"requires": {} "requires": {}
}, },
"postcss-selector-parser": { "postcss-selector-parser": {
"version": "6.0.11", "version": "6.0.12",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
"dev": true, "dev": true,
"requires": { "requires": {
"cssesc": "^3.0.0", "cssesc": "^3.0.0",
@@ -11690,9 +11705,9 @@
} }
}, },
"stylelint": { "stylelint": {
"version": "15.6.0", "version": "15.6.1",
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.6.0.tgz", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.6.1.tgz",
"integrity": "sha512-Cqzpc8tvJm77KaM8qUbhpJ/UYK55Ia0whQXj4b9IId9dlPICO7J8Lyo15SZWiHxKjlvy3p5FQor/3n6i8ignXg==", "integrity": "sha512-d8icFBlVl93Elf3Z5ABQNOCe4nx69is3D/NZhDLAie1eyYnpxfeKe7pCfqzT5W4F8vxHCLSDfV8nKNJzogvV2Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@csstools/css-parser-algorithms": "^2.1.1", "@csstools/css-parser-algorithms": "^2.1.1",
@@ -11722,11 +11737,11 @@
"micromatch": "^4.0.5", "micromatch": "^4.0.5",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"postcss": "^8.4.22", "postcss": "^8.4.23",
"postcss-media-query-parser": "^0.2.3", "postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1", "postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0", "postcss-safe-parser": "^6.0.0",
"postcss-selector-parser": "^6.0.11", "postcss-selector-parser": "^6.0.12",
"postcss-value-parser": "^4.2.0", "postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0", "resolve-from": "^5.0.0",
"string-width": "^4.2.3", "string-width": "^4.2.3",
@@ -11736,7 +11751,7 @@
"svg-tags": "^1.0.0", "svg-tags": "^1.0.0",
"table": "^6.8.1", "table": "^6.8.1",
"v8-compile-cache": "^2.3.0", "v8-compile-cache": "^2.3.0",
"write-file-atomic": "^5.0.0" "write-file-atomic": "^5.0.1"
}, },
"dependencies": { "dependencies": {
"balanced-match": { "balanced-match": {
@@ -12134,13 +12149,21 @@
"dev": true "dev": true
}, },
"write-file-atomic": { "write-file-atomic": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
"integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true, "dev": true,
"requires": { "requires": {
"imurmurhash": "^0.1.4", "imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7" "signal-exit": "^4.0.1"
},
"dependencies": {
"signal-exit": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
"integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
"dev": true
}
} }
}, },
"xtend": { "xtend": {
@@ -12162,9 +12185,9 @@
"dev": true "dev": true
}, },
"yaml": { "yaml": {
"version": "2.2.1", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
"integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.12.1", "version": "0.13.0",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator", "description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [ "keywords": [
"hugo", "hugo",