Compare commits

...

74 Commits

Author SHA1 Message Date
Mark Dumay
65e9e57c9e Merge pull request #255 from gethinode/develop
Menu fix
2023-05-15 16:43:17 +02:00
Mark Dumay
ffa4473d25 Merge branch 'main' into develop 2023-05-15 16:10:43 +02:00
mark
6c5fe6f208 Bump release 2023-05-15 16:10:10 +02:00
mark
60efecf946 Retrieve menu data for single pages only 2023-05-15 16:09:39 +02:00
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
42 changed files with 532 additions and 403 deletions

View File

@@ -116,7 +116,7 @@ Hinode is inspired by the following themes:
## 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

View File

@@ -1,89 +1,30 @@
/*
Source:
- https://raw.githubusercontent.com/h-enk/doks/master/assets/js/index.js
*/
{{- $search := default true site.Params.navigation.search -}}
{{- if $search -}}
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');
if (search !== null) {
document.addEventListener('keydown', inputFocus);
}
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"]
}
});
/*
Source:
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
*/
function initIndex() {
// 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
{{ $list := where (where site.AllPages "Kind" "in" "page") "Title" "!=" "" }}
{{ $len := (len $list) -}}
index.add(
{{ range $index, $element := $list -}}
{
@@ -103,59 +44,121 @@ Source:
{{ end -}}
{{ end -}}
;
search.addEventListener('input', show_results, true);
function show_results(){
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 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;
}
search.addEventListener('input', showResults, true);
}
function hideSuggestions(e) {
var isClickInsideElement = suggestions.contains(e.target);
if (!isClickInsideElement) {
suggestions.classList.add('d-none');
}
}());
}
/*
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 modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
// set the navbar background color to opaque when scrolling past a breakpoint
window.onscroll = () => {
if (window.scrollY > 75) {
navbar.classList.add('nav-active')
} else {
navbar.classList.remove('nav-active')
}
}
// set the navbar background color to opaque when 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) {
modeSelectors[i].onclick = () => {
toggler.click()
if (navbar !== null && toggler !== null) {
// set the navbar background color to opaque when scrolling past a breakpoint
window.onscroll = () => {
if (window.scrollY > 75) {
navbar.classList.add('nav-active')
} else {
navbar.classList.remove('nav-active')
}
}
// set the navbar background color to opaque when 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) {
modeSelectors[i].onclick = () => {
toggler.click()
}
}
}

View File

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

View File

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

View File

@@ -8,10 +8,10 @@
[en.params.head]
tagline = "A Hugo Theme"
[en.params.feature]
link = "/en/about"
link = "about"
caption = "About"
[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"
socialCaption = "I work on everything coding and tweet developer memes"
# toml-docs-end lang-param
@@ -23,9 +23,9 @@
[nl.params.head]
tagline = "Een Hugo Thema"
[nl.params.feature]
link = "/nl/over-mij"
link = "over-mij"
caption = "Over mij"
[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"
socialCaption = "Ik doe aan programmeren en tweet memes"

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,7 @@
---
author: Mark Dumay
title: Bootstrap elementen
slug: bootstrap-elementen
date: 2023-02-17
description: Gebruik shortcodes om eenvoudig Bootstrap elementen toe te voegen.
tags: ["bootstrap", "shortcode"]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -10,7 +10,7 @@
<body>
{{- 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 -}}
<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 }}">
@@ -33,19 +33,23 @@
<div class="d-flex flex-column flex-fill">
{{ block "main" . }}{{ end -}}
</div>
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ if not .Site.Params.main.footerBelowFold }}
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}}
{{ else -}}
<div class="d-flex flex-column flex-fill {{ if .Site.Params.navigation.fixed }}mt-5{{ end }}">
{{ block "main" . }}{{ end -}}
</div>
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ if not .Site.Params.main.footerBelowFold }}
<div class="">
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
</div>
{{ end }}
{{ end -}}
</div>
@@ -53,10 +57,17 @@
<div class="">
{{ block "main" . }}{{ end -}}
</div>
{{- partial "footer/social.html" . -}}
{{- partial "footer/footer.html" . -}}
{{ end -}}
<div class="">
{{- partial "footer/social.html" . -}}
{{- 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>
</html>

View File

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

View File

@@ -17,14 +17,14 @@
<div class="mt-3">
<div class="d-none-dark">
{{ 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;
{{ end -}}
</div>
<div class="d-none-light">
{{ 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;
{{ end -}}
</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 := . -}}
{{- range $index, $section := site.Params.home.sections -}}
{{- $pages := where site.RegularPages "Type" "in" $section -}}
{{- $sectionURL := "" -}}
{{- range $p := first 1 $pages -}}
{{- $sectionURL = $p.Parent.RelPermalink -}}
{{- end -}}
{{- $sectionPage := site.GetPage "section" $section -}}
{{- $sectionURL := $sectionPage.RelPermalink -}}
{{- $title := $sectionPage.Title -}}
{{- $thumbnail := $sectionPage.Params.Thumbnail -}}
{{- $icon := $sectionPage.Params.Icon -}}
{{- $description := $sectionPage.Description -}}
{{- $content := $sectionPage.Content -}}
{{- $moreTitle := (T (printf "more%s" (strings.FirstUpper $section))) -}}
@@ -18,6 +20,10 @@
"page" $page
"section" $section
"home" true
"nested" true
"thumbnail" $thumbnail
"icon" $icon
"content" $content
"moreTitle" $moreTitle
"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 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}}
{{- $title := .title -}}
{{- $paginate := false -}}
{{- with .paginate -}}
{{- if ne (printf "%T" .) "bool" -}}
@@ -90,7 +88,6 @@
{{- $orientation := .orientation -}}
<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 := "" }}
{{ if $paginate }}
{{ $paginator = $page.Paginate $list }}
@@ -107,13 +104,14 @@
"footer" $footer
"orientation" $orientation
) -}}
{{- if $element.IsPage -}}
{{- if $element.Permalink -}}
{{- $params = merge $params (dict "path" $element.File.Path) -}}
{{- else -}}
{{- $params = merge $params (dict
"title" $element.Title
"href" (or $element.Permalink "#!")
"description" $element.Description
"href" $element.Permalink
"description" (or $element.Description $element.Content)
"thumbnail" $element.Params.thumbnail
"icon" $element.Params.icon
) -}}

View File

@@ -5,7 +5,7 @@
The shortcode supports the following arguments:
"path" Optional path of the page, override with other parameters.
"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”.
"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
@@ -28,10 +28,17 @@
{{- $color := .color -}}
{{- $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>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</a>
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
</div>
{{- end -}}
{{- end -}}
<!-- Inline partial to render the card's header or footer -->
@@ -60,7 +67,7 @@
{{- range $index, $tag := first $maxTags ($page.GetTerms "tags") -}}
{{- 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 -}}
</small></p>
{{- end -}}
@@ -109,10 +116,6 @@
{{- if not $icon }}{{ $icon = .Params.icon }}{{ end -}}
{{- end -}}
{{- if not $href -}}
{{- errorf "partial [assets/card.html] - Missing value for param 'href'" -}}
{{- end -}}
{{- $class := .class -}}
{{- $padding := "auto" -}}

View File

@@ -53,10 +53,6 @@
{{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}}
<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="col-6{{ if $odd }} order-last{{ end }}">
{{- $style := "reveal fade-bottom" -}}
@@ -78,9 +74,6 @@
{{- range $index, $item := $list -}}
{{- $odd := eq (mod $index 2) 1 -}}
<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="col-12 text-center">
{{ partial "partials/list-img.html" (dict "thumbnail" $item.Params.Thumbnail "mode" $item.Params.colormode) }}

View File

@@ -76,7 +76,6 @@
{{ 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">
{{ 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 }}>

View File

@@ -169,18 +169,18 @@
{{- $menu_item_url := $menu.URL | relLangURL -}}
{{- $page_url:= $page.RelPermalink | relLangURL -}}
{{- $active := hasPrefix $page_url $menu_item_url -}}
{{- $url := urls.Parse .URL -}}
{{- $baseurl := urls.Parse $.Site.Params.Baseurl -}}
{{- if .HasChildren -}}
<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 }}
</a>
<ul class="dropdown-menu dropdown-menu-end">
{{- range .Children -}}
{{- $child_active := eq $page_url .URL -}}
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL }}">{{ .Name }}</a></li>
{{- $child_active := eq $page_url (.URL | relLangURL) -}}
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL | relLangURL }}">{{ .Name }}</a></li>
{{- end -}}
</ul>
</li>
@@ -188,7 +188,7 @@
<li class="nav-item">
{{- $external := ne $url.Host $baseurl.Host -}}
<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 -}}
<span {{if $active }} class="active"{{end}}>{{ .Name }}</span>
{{- with $post}}{{ . }}{{ end -}}

View File

@@ -1,6 +1,6 @@
<div class="d-flex ms-md-3">
<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">
<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>
</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'"}}
{{ end }}
{{- $title := .title -}}
{{- $icon := .icon -}}
{{- $thumbnail := .thumbnail -}}
{{- $sectionHeader := .sectionHeader -}}
{{- $description := .description -}}
{{- $content := .content -}}
{{- $moreTitle := .moreTitle -}}
{{- $sectionURL := .sectionURL -}}
{{- $nested := .nested | default true -}}
{{- $paginate := true -}}
{{- $sort := "date" -}}
{{- $order := "desc" -}}
@@ -30,8 +35,10 @@
{{- with (index site.Params.sections $section) -}}
{{- with index . "title" }}{{ $title = or $.title . }}{{ end -}}
{{- with index . "sectionHeader" }}{{ $sectionHeader = . }}{{ end -}}
{{- with index . "sort" }}{{ $sort = . }}{{ 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 -}}
{{- with index . "orientation" }}{{ $orientation = . }}{{ end -}}
{{- with index . "cols" }}{{ $cols = . }}{{ end -}}
@@ -48,8 +55,20 @@
{{- with index . "vertical" }}{{ $vertical = . }}{{ end -}}
{{- with index . "width" }}{{ $width = . }}{{ 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) -}}
{{ if eq $max 0 }}
{{- $bundle := site.GetPage $section -}}
@@ -74,6 +93,11 @@
"page" $page
"list" $list
"title" $title
"icon" $icon
"thumbnail" $thumbnail
"sectionHeader" $sectionHeader
"description" $description
"content" $content
"class" $style
"color" $color
)
@@ -82,6 +106,8 @@
<div class="container-fluid {{ with $background }} bg-{{ . }}{{ end }}">
<div class="container-xxl flex-fill p-0">
{{- partial "assets/section-header.html" $params -}}
{{ if eq $layout "card" }}
{{- $partial = "assets/card-group.html" -}}
{{- $params = merge $params (dict

View File

@@ -1,6 +1,7 @@
{{ $filename := .filename | default "js/main.bundle.js" -}}
{{ $match := .match | default "{js/*.js,js/vendor/**.js}" }}
{{ $page := .page }}
{{ $header := .header }}
{{ $files := slice -}}
{{ range $index, $file := resources.Match $match -}}
@@ -11,7 +12,7 @@
{{ $bundle := $files | resources.Concat $filename -}}
{{ $js := $bundle | resources.ExecuteAsTemplate $filename $page -}}
{{- if (not site.IsServer) -}}
{{- 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>

View File

@@ -7,7 +7,7 @@
</div>
<div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ 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 }}
</a>
{{ end -}}

View File

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

View File

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

View File

@@ -1 +1,6 @@
{{ return index .Site.Data .Section }}
{{- $menu := "" -}}
{{- if .IsPage -}}
{{- $menu = index .Site.Data .Section -}}
{{- end -}}
{{- return $menu -}}

View File

@@ -1,5 +1,5 @@
{{ $lastmodstr := (partial "utilities/date.html" (dict "date" .Lastmod "format" "long")) -}}
Last updated: {{ $lastmodstr }}
{{ 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 -}}

View File

@@ -1,9 +1,21 @@
{{ $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 := .Get 0 | default "" }}
{{ $old := "<table>" }}
{{ $new := printf "<table class=\"table %s\">" $class }}
{{ $input := replace $input $old $new }}
{{ $input | safeHTML }}
{{- $responsiveVals := slice "table-responsive" "table-responsive-none" "table-responsive-sm" "table-responsive-md" "table-responsive-lg" "table-responsive-xl" "table-responsive-xxl" -}}
{{- $responsive := intersect .Params $responsiveVals -}}
{{- $main := complement $responsive .Params -}}
{{- if in $responsive "table-responsive-none" -}}
{{- $responsive = "" -}}
{{- else if not $responsive -}}
{{ $responsive = (slice "table-responsive") -}}
{{- 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

@@ -13,7 +13,7 @@
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
</div>
<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>
{{ end }}
@@ -32,7 +32,7 @@
<p class="text-body-secondary mt-5">{{ $year }}</p>
{{ $.Scratch.Set "lastYear" $year }}
{{ 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>
{{ end }}

View File

@@ -24,15 +24,19 @@
X-XSS-Protection = "1; mode=block"
Content-Security-Policy = """\
default-src 'self'; \
child-src 'self' app.netlify.com; \
script-src 'self' \
app.netlify.com netlify-cdp-loader.netlify.app \
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' \
netlify.app https://utteranc.es https://fonts.googleapis.com https://www.youtube.com; \
object-src 'none'; \
base-uri 'self'; \
connect-src 'self'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.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 \
app.netlify.com; \
img-src 'self' https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com; \
manifest-src 'self'; \
media-src 'self' \

303
package-lock.json generated
View File

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

View File

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