mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-07 18:14:28 +00:00
Compare commits
101 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cde8495583 | ||
![]() |
c2aaff81cf | ||
![]() |
5421839028 | ||
![]() |
a74466e281 | ||
![]() |
454c659e44 | ||
![]() |
2de384497e | ||
![]() |
ca41d9adb4 | ||
![]() |
a633e4eea0 | ||
![]() |
a341e916b9 | ||
![]() |
a3d289843f | ||
![]() |
8700e18ad9 | ||
![]() |
8936dafac6 | ||
![]() |
4d1c7d46eb | ||
![]() |
bffe6425da | ||
![]() |
3e1c3a2c9c | ||
![]() |
df83103718 | ||
![]() |
e54417bc02 | ||
![]() |
61f2b82221 | ||
![]() |
2689107e5a | ||
![]() |
d20d053232 | ||
![]() |
35fb72d408 | ||
![]() |
18cee3cac6 | ||
![]() |
192021fbb3 | ||
![]() |
a3c5d36584 | ||
![]() |
42d169bbc0 | ||
![]() |
3b4b3a65b6 | ||
![]() |
32ee66bf90 | ||
![]() |
6b8ff44fb0 | ||
![]() |
70cc8946b0 | ||
![]() |
eab0cfa6ab | ||
![]() |
1580898f1a | ||
![]() |
530fb03d29 | ||
![]() |
3e5261bd36 | ||
![]() |
e2d409baed | ||
![]() |
d009874ece | ||
![]() |
f8adffc131 | ||
![]() |
68a3a3be30 | ||
![]() |
c077c8b53b | ||
![]() |
6a0c6af296 | ||
![]() |
2bf16b0e59 | ||
![]() |
e56cc645e2 | ||
![]() |
8c361a8417 | ||
![]() |
65e9e57c9e | ||
![]() |
ffa4473d25 | ||
![]() |
6c5fe6f208 | ||
![]() |
60efecf946 | ||
![]() |
70fdf7c4f0 | ||
![]() |
ee4bb45368 | ||
![]() |
a08695d97e | ||
![]() |
1abeabcacd | ||
![]() |
16b2c8b058 | ||
![]() |
f8eab705fb | ||
![]() |
13b8421893 | ||
![]() |
6324a90d77 | ||
![]() |
faccca732b | ||
![]() |
04736fd8f1 | ||
![]() |
9c4378e5af | ||
![]() |
0574627010 | ||
![]() |
9e668775db | ||
![]() |
cefd152430 | ||
![]() |
48d2002d1c | ||
![]() |
259f0f321c | ||
![]() |
d24cb8ccb3 | ||
![]() |
96226e2d8a | ||
![]() |
27857b7fd5 | ||
![]() |
9a67f7bd4f | ||
![]() |
e15cd08bea | ||
![]() |
dd817bc5ce | ||
![]() |
4b4c9d1711 | ||
![]() |
38e68ac757 | ||
![]() |
c14d3868bb | ||
![]() |
067c244770 | ||
![]() |
d76d275ddb | ||
![]() |
1803759b6b | ||
![]() |
2833cfc15a | ||
![]() |
0a174def75 | ||
![]() |
7a7d3a93f9 | ||
![]() |
c1afe32344 | ||
![]() |
749dab16ca | ||
![]() |
264012eefb | ||
![]() |
fda4efa72b | ||
![]() |
6a0bdf0f61 | ||
![]() |
1a09879bea | ||
![]() |
81cc8fe02f | ||
![]() |
ef3d79f875 | ||
![]() |
c66bb79ac5 | ||
![]() |
c5c5695541 | ||
![]() |
a3343c29dc | ||
![]() |
50a697c1fb | ||
![]() |
6cf7a410f4 | ||
![]() |
bdade82dea | ||
![]() |
38aac9507e | ||
![]() |
0eec1da639 | ||
![]() |
1e8bc5f11d | ||
![]() |
56f467e02c | ||
![]() |
83049db4bc | ||
![]() |
78599c8f76 | ||
![]() |
fc6e916fca | ||
![]() |
a0febc31ee | ||
![]() |
800c82dba5 | ||
![]() |
8b59f3b6f7 |
@@ -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
|
||||||
|
|
||||||
|
@@ -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 -}}
|
20
assets/js/menu.js
Normal file
20
assets/js/menu.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
const url = new URL(window.location.href)
|
||||||
|
const menu = url.searchParams.get('menu')
|
||||||
|
const child = url.searchParams.get('child')
|
||||||
|
const menuItems = document.querySelectorAll('[data-nav="main"]')
|
||||||
|
|
||||||
|
if (menu !== null) {
|
||||||
|
menuItems.forEach(element => {
|
||||||
|
element.classList.remove('active')
|
||||||
|
})
|
||||||
|
|
||||||
|
const targetMainItems = document.querySelectorAll(`[data-nav-main="${menu}"]:not([data-nav-child])`)
|
||||||
|
targetMainItems.forEach(element => {
|
||||||
|
element.classList.add('active')
|
||||||
|
})
|
||||||
|
|
||||||
|
const targetChildItems = document.querySelectorAll(`[data-nav-main="${menu}"][data-nav-child="${child}"]`)
|
||||||
|
targetChildItems.forEach(element => {
|
||||||
|
element.classList.add('active')
|
||||||
|
})
|
||||||
|
}
|
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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"
|
@@ -1,33 +1,33 @@
|
|||||||
[[main]]
|
[[main]]
|
||||||
name = "About"
|
name = "About"
|
||||||
url = "/about/"
|
pageRef = "/about/"
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Blog"
|
name = "Blog"
|
||||||
url = "/blog/"
|
pageRef = "/blog/"
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Projects"
|
name = "Projects"
|
||||||
url = "/projects/"
|
pageRef = "/projects/"
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Sample project"
|
name = "Sample project"
|
||||||
url = "/en/projects/sample-project/"
|
pageRef = "/projects/sample-project/"
|
||||||
parent = "Projects"
|
parent = "Projects"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Another project"
|
name = "Another project"
|
||||||
url = "/en/projects/another-project/"
|
pageRef = "/projects/another-project/"
|
||||||
parent = "Projects"
|
parent = "Projects"
|
||||||
weight = 2
|
weight = 2
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Tags"
|
name = "Tags"
|
||||||
url = "/tags/"
|
pageRef = "/tags/"
|
||||||
weight = 40
|
weight = 40
|
||||||
|
|
||||||
[[social]]
|
[[social]]
|
||||||
@@ -51,23 +51,23 @@
|
|||||||
# toml-docs-start sample-navigation
|
# toml-docs-start sample-navigation
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Blog"
|
name = "Blog"
|
||||||
url = "/blog/"
|
pageRef = "/blog/"
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Projects"
|
name = "Projects"
|
||||||
url = "/projects/"
|
pageRef = "/projects/"
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Sample project"
|
name = "Sample project"
|
||||||
url = "/en/projects/sample-project/"
|
pageRef = "/projects/sample-project/"
|
||||||
parent = "Projects"
|
parent = "Projects"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Another project"
|
name = "Another project"
|
||||||
url = "/en/projects/another-project/"
|
pageRef = "/projects/another-project/"
|
||||||
parent = "Projects"
|
parent = "Projects"
|
||||||
weight = 2
|
weight = 2
|
||||||
# toml-docs-end sample-navigation
|
# toml-docs-end sample-navigation
|
@@ -1,33 +1,33 @@
|
|||||||
[[main]]
|
[[main]]
|
||||||
name = "Over mij"
|
name = "Over mij"
|
||||||
url = "/over-mij/"
|
pageRef = "/over-mij/"
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Blog"
|
name = "Blog"
|
||||||
url = "/blog/"
|
pageRef = "/blog/"
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Projecten"
|
name = "Projecten"
|
||||||
url = "/projecten/"
|
pageRef = "/projecten/"
|
||||||
weight = 30
|
weight = 30
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Voorbeeldproject"
|
name = "Voorbeeldproject"
|
||||||
url = "/nl/projecten/voorbeeldproject/"
|
pageRef = "/projecten/voorbeeldproject/"
|
||||||
parent = "Projecten"
|
parent = "Projecten"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Ander project"
|
name = "Ander project"
|
||||||
url = "/nl/projecten/ander-project/"
|
pageRef = "/projecten/ander-project/"
|
||||||
parent = "Projecten"
|
parent = "Projecten"
|
||||||
weight = 2
|
weight = 2
|
||||||
|
|
||||||
[[main]]
|
[[main]]
|
||||||
name = "Tags"
|
name = "Tags"
|
||||||
url = "/tags/"
|
pageRef = "/tags/"
|
||||||
weight = 40
|
weight = 40
|
||||||
|
|
||||||
[[social]]
|
[[social]]
|
||||||
@@ -51,23 +51,23 @@
|
|||||||
# toml-docs-start sample-navigation
|
# toml-docs-start sample-navigation
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Blog"
|
name = "Blog"
|
||||||
url = "/blog/"
|
pageRef = "/blog/"
|
||||||
weight = 10
|
weight = 10
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Projecten"
|
name = "Projecten"
|
||||||
url = "/projecten/"
|
pageRef = "/projecten/"
|
||||||
weight = 20
|
weight = 20
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Voorbeeldproject"
|
name = "Voorbeeldproject"
|
||||||
url = "/nl/projecten/voorbeeldproject/"
|
pageRef = "/projecten/voorbeeldproject/"
|
||||||
parent = "Projecten"
|
parent = "Projecten"
|
||||||
weight = 1
|
weight = 1
|
||||||
|
|
||||||
[[sample]]
|
[[sample]]
|
||||||
name = "Ander project"
|
name = "Ander project"
|
||||||
url = "/nl/projecten/ander-project/"
|
pageRef = "/projecten/ander-project/"
|
||||||
parent = "Projecten"
|
parent = "Projecten"
|
||||||
weight = 2
|
weight = 2
|
||||||
# toml-docs-end sample-navigation
|
# toml-docs-end sample-navigation
|
@@ -10,6 +10,8 @@
|
|||||||
[docs]
|
[docs]
|
||||||
version = "0.8"
|
version = "0.8"
|
||||||
basePath = ""
|
basePath = ""
|
||||||
|
github = "https://github.com/gethinode/hinode"
|
||||||
|
release = "https://github.com/gethinode/hinode/releases/tag/"
|
||||||
# toml-docs-end docs
|
# toml-docs-end docs
|
||||||
|
|
||||||
# toml-docs-start home
|
# toml-docs-start home
|
||||||
@@ -40,6 +42,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 +56,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"
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
author: Mark Dumay
|
author: Mark Dumay
|
||||||
title: Blog
|
title: Blog
|
||||||
|
nested: true
|
||||||
---
|
---
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
author: Mark Dumay
|
author: Mark Dumay
|
||||||
title: Bootstrap elements
|
title: Bootstrap elements
|
||||||
date: 2023-02-17
|
date: 2023-05-20
|
||||||
description: Use shortcodes to add common Bootstrap elements with ease.
|
description: Use shortcodes to add common Bootstrap elements with ease.
|
||||||
tags: ["bootstrap", "shortcode"]
|
tags: ["bootstrap", "shortcode"]
|
||||||
thumbnail: img/boots.jpg
|
thumbnail: img/boots.jpg
|
||||||
@@ -223,6 +223,16 @@ As an example, the following shortcode displays a light navigation header.
|
|||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
<!-- markdownlint-enable MD037 -->
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
|
## Release
|
||||||
|
|
||||||
|
As an example, the following shortcode displays a default release button.
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD037 -->
|
||||||
|
{{< example lang="hugo" >}}
|
||||||
|
{{</* release version="v0.14.1" */>}}
|
||||||
|
{{< /example >}}
|
||||||
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
## Spinner
|
## Spinner
|
||||||
|
|
||||||
As an example, the following shortcode displays a centered spinner.
|
As an example, the following shortcode displays a centered spinner.
|
||||||
|
@@ -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"]
|
||||||
@@ -223,6 +224,16 @@ De volgende shortcode toont een navigatiemenu.
|
|||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
<!-- markdownlint-enable MD037 -->
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
|
## Release
|
||||||
|
|
||||||
|
De volgende shortcode toont een knop voor een nieuwe release.
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD037 -->
|
||||||
|
{{< example lang="hugo" >}}
|
||||||
|
{{</* release version="v0.14.1" */>}}
|
||||||
|
{{< /example >}}
|
||||||
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
## Spinner
|
## Spinner
|
||||||
|
|
||||||
De volgende shortcode toont een ronddraaiende cirkel.
|
De volgende shortcode toont een ronddraaiende cirkel.
|
||||||
|
@@ -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"]
|
||||||
|
@@ -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"]
|
||||||
|
@@ -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"]
|
||||||
|
@@ -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"]
|
||||||
|
@@ -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
|
||||||
@@ -73,6 +75,10 @@
|
|||||||
translation: "Toggle main navigation"
|
translation: "Toggle main navigation"
|
||||||
- id: demo
|
- id: demo
|
||||||
translation: "Demo"
|
translation: "Demo"
|
||||||
|
- id: addedFeature
|
||||||
|
translation: "Added in"
|
||||||
|
- id: deprecatedFeature
|
||||||
|
translation: "Deprecated in"
|
||||||
|
|
||||||
# 404 page
|
# 404 page
|
||||||
- id: pageNotFound
|
- id: pageNotFound
|
||||||
|
@@ -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
|
||||||
@@ -65,6 +65,10 @@
|
|||||||
translation: "Automatisch"
|
translation: "Automatisch"
|
||||||
- id: toggleMainNav
|
- id: toggleMainNav
|
||||||
translation: "Toon of verberg hoofdnavigatie"
|
translation: "Toon of verberg hoofdnavigatie"
|
||||||
|
- id: addedFeature
|
||||||
|
translation: "Toegevoegd in"
|
||||||
|
- id: deprecatedFeature
|
||||||
|
translation: "Verouderd in"
|
||||||
|
|
||||||
# 404 page
|
# 404 page
|
||||||
- id: pageNotFound
|
- id: pageNotFound
|
||||||
|
@@ -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 }}
|
||||||
|
@@ -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,9 +57,16 @@
|
|||||||
<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 "header" false "page" .) }}
|
{{- partialCached "footer/scripts.html" (dict "header" false "page" .) }}
|
||||||
</body>
|
</body>
|
||||||
|
@@ -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 -}}
|
@@ -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>
|
||||||
|
|
||||||
{{ 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>
|
||||||
|
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
</div>
|
</div>
|
||||||
|
11
layouts/alias.html
Normal file
11
layouts/alias.html
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html{{ with site.LanguageCode | default site.Language.Lang }} lang="{{ . }}"{{ end }}>
|
||||||
|
<head>
|
||||||
|
<title>{{ .Permalink }}</title>
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
<meta name="robots" content="noindex">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<noscript><meta http-equiv="refresh" content="0; url={{ .Permalink }}"></noscript>
|
||||||
|
<script src="/js/alias.js"></script>
|
||||||
|
</head>
|
||||||
|
</html>
|
@@ -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.
|
|
||||||
-->
|
|
@@ -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)
|
||||||
-}}
|
-}}
|
||||||
|
@@ -1,7 +1,14 @@
|
|||||||
<nav aria-label="breadcrumb">
|
<nav aria-label="breadcrumb">
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
{{- range .Page.Ancestors.Reverse -}}
|
{{- range $index, $item := .Page.Ancestors.Reverse -}}
|
||||||
<li class="breadcrumb-item"><a href="{{ .Permalink }}">{{ if not .IsHome }}{{ .Title }}{{ else }}{{ T "home" }}{{ end }}</a></li>
|
{{- $title := .Title -}}
|
||||||
|
{{- if .IsHome }}{{ $title = T "home" }}{{ end -}}
|
||||||
|
{{- $address := or .Permalink (.Params.Redirect | absLangURL) -}}
|
||||||
|
{{ if $address }}
|
||||||
|
<li class="breadcrumb-item"><a href="{{ $address }}">{{ $title }}</a></li>
|
||||||
|
{{ else }}
|
||||||
|
<li class="breadcrumb-item">{{ $title }}</li>
|
||||||
|
{{ end }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
<li class="breadcrumb-item active" aria-current="page">{{ .Page.Title }}</li>
|
<li class="breadcrumb-item active" aria-current="page">{{ .Page.Title }}</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
@@ -108,14 +108,15 @@
|
|||||||
{{- errorf "partial [assets/button.html] - Invalid value for param 'justify': %s" $justify -}}
|
{{- errorf "partial [assets/button.html] - Invalid value for param 'justify': %s" $justify -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
|
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end }}
|
||||||
{{- with $id }}id="{{ . }}"{{ end -}}
|
{{ with $id }}id="{{ . }}"{{ end }}
|
||||||
{{- if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}" role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
|
{{ if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class }}"
|
||||||
{{- else }}class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
|
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end }}
|
||||||
{{- with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
|
{{ else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end }}
|
||||||
{{- with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
|
{{ with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end }}
|
||||||
{{- if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end -}}
|
{{ with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end }}
|
||||||
{{- if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end -}}
|
{{ if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end }}
|
||||||
|
{{ if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end }}
|
||||||
>
|
>
|
||||||
|
|
||||||
<div class="d-flex justify-content-{{ $justify }}">
|
<div class="d-flex justify-content-{{ $justify }}">
|
||||||
|
@@ -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
|
||||||
) -}}
|
) -}}
|
||||||
|
@@ -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 }} • {{ end -}}
|
{{- if gt $index 0 }} • {{ 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" -}}
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
|
|
||||||
{{- if eq $orientation "horizontal" -}}
|
{{- if eq $orientation "horizontal" -}}
|
||||||
<div class="card mb-3 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
<div class="card mb-3 {{ with $color }}bg-{{ . }} text-bg-{{ . }}{{ end }} {{ $class }}">
|
||||||
<div class="row g-0">
|
<div class="row g-0 row-cols-1">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
{{- if $thumbnail -}}
|
{{- 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) -}}
|
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "1x1" "outerClass" "h-100 card-img-wrap" "innerClass" "rounded-start card-img-h100" "title" $title) -}}
|
||||||
@@ -141,7 +144,7 @@
|
|||||||
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
|
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-4x text-secondary" $icon)) -}}
|
||||||
</div>
|
</div>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<div class="card-body d-flex p-{{ $padding }} flex-column h-100">
|
<div class="card-body d-flex p-{{ $padding }} flex-column h-100">
|
||||||
{{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) }}</div>{{ end }}
|
{{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $header "color" $color) }}</div>{{ end }}
|
||||||
|
@@ -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) }}
|
||||||
|
@@ -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 }}>
|
||||||
|
46
layouts/partials/assets/navbar-item.html
Normal file
46
layouts/partials/assets/navbar-item.html
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{{- $menu := .menu -}}
|
||||||
|
{{- $parent := .parent -}}
|
||||||
|
{{- $page := .page -}}
|
||||||
|
{{- $class := .class -}}
|
||||||
|
{{- $anchorClass := "" -}}
|
||||||
|
|
||||||
|
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
|
||||||
|
{{- $pageURL := $page.RelPermalink | relLangURL -}}
|
||||||
|
{{- $isActive := hasPrefix $pageURL $menuURL -}}
|
||||||
|
{{- $isAlias := $menu.Params.alias -}}
|
||||||
|
|
||||||
|
{{- $url := urls.Parse $menuURL -}}
|
||||||
|
{{- $baseURL := urls.Parse $.Site.Params.Baseurl -}}
|
||||||
|
{{- $isExternal := ne $url.Host $baseURL.Host -}}
|
||||||
|
{{- $externalHref := "" }}
|
||||||
|
{{- if $isExternal }}{{ $externalHref = "target=\"_blank\" rel=\"noopener noreferrer\"" }}{{ end -}}
|
||||||
|
|
||||||
|
{{- $mainNav := urlize (lower $menu.Name) -}}
|
||||||
|
{{- $childNav := "" -}}
|
||||||
|
|
||||||
|
{{- $button := "" -}}
|
||||||
|
{{- if $parent -}}
|
||||||
|
{{- $mainNav = urlize (lower $parent.Name) -}}
|
||||||
|
{{- $childNav = urlize (lower $menu.Name) -}}
|
||||||
|
{{- $anchorClass = "dropdown-item" -}}
|
||||||
|
{{- else if $menu.HasChildren -}}
|
||||||
|
{{- $anchorClass = "nav-link dropdown-toggle" -}}
|
||||||
|
{{- $button = " role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\"" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $anchorClass = "nav-link" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $params := "" -}}
|
||||||
|
{{- if and $isAlias (not $isExternal) -}}
|
||||||
|
{{- $params = printf "?menu=%s" $mainNav -}}
|
||||||
|
{{- with $childNav }}{{ $params = printf "%s&child=%s" $params . }}{{ end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<a class="{{ $anchorClass }}{{ if $isActive }} active{{ end }}{{ with $class }} {{. }}{{ end }}"
|
||||||
|
data-nav="main" data-nav-main="{{ $mainNav }}"{{ with $childNav }} data-nav-child="{{ . }}"{{ end }}
|
||||||
|
href="{{ $menuURL }}{{ $params | safeHTMLAttr }}"{{ with $externalHref }} {{ . | safeHTMLAttr }}{{ end }} {{ $button | safeHTMLAttr }}>
|
||||||
|
|
||||||
|
{{- with $menu.Pre }}{{ . }}{{ end -}}
|
||||||
|
<span {{ if $isActive }} class="active"{{ end }}>{{ $menu.Name }}</span>
|
||||||
|
{{- with $menu.Post }}{{ . }}{{ end -}}
|
||||||
|
{{- if $isExternal }} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
|
||||||
|
</a>
|
@@ -1,12 +1,13 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a navigation header with a toggler. The partial supports the following arguments:
|
Displays a navigation header with a toggler. The partial supports the following arguments:
|
||||||
|
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-0".
|
||||||
"page" Required object reference to the current page.
|
"page" Required object reference to the current page.
|
||||||
"menus" Optional name of the menu configuration, defaults to "main".
|
"menus" Optional name of the menu configuration, defaults to "main".
|
||||||
"size" Optional size of the button, either "sm", "md" (default), or "lg".
|
"size" Optional size of the button, either "sm", "md" (default), or "lg".
|
||||||
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
|
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
|
||||||
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
||||||
"danger", "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". The
|
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
|
||||||
default color is none.
|
none.
|
||||||
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
|
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
|
||||||
"search" Optional flag to include a search input, default is "true".
|
"search" Optional flag to include a search input, default is "true".
|
||||||
"logo" Optional address of the logo image, defaults to the parameter "logo" set in the "main" section of
|
"logo" Optional address of the logo image, defaults to the parameter "logo" set in the "main" section of
|
||||||
@@ -16,7 +17,6 @@
|
|||||||
|
|
||||||
<!-- Inline partial to render the color mode switcher -->
|
<!-- Inline partial to render the color mode switcher -->
|
||||||
{{- define "partials/navbar-mode.html" -}}
|
{{- define "partials/navbar-mode.html" -}}
|
||||||
{{- $id := .id -}}
|
|
||||||
{{- $size := .size -}}
|
{{- $size := .size -}}
|
||||||
{{- $collapsed := .collapsed -}}
|
{{- $collapsed := .collapsed -}}
|
||||||
|
|
||||||
@@ -50,8 +50,10 @@
|
|||||||
|
|
||||||
{{- $supportedFlags := slice "true" "false" -}}
|
{{- $supportedFlags := slice "true" "false" -}}
|
||||||
|
|
||||||
{{- $id := 0 -}}
|
{{- $id := printf "navbar-collapse-%d" 0 -}}
|
||||||
{{- with .id }}{{ $id = . }}{{ end -}}
|
{{ with .id }}
|
||||||
|
{{ $id = . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{- $page := .page -}}
|
{{- $page := .page -}}
|
||||||
{{- if not $page -}}
|
{{- if not $page -}}
|
||||||
@@ -84,7 +86,7 @@
|
|||||||
{{- $color := "" -}}
|
{{- $color := "" -}}
|
||||||
{{- with .color -}}
|
{{- with .color -}}
|
||||||
{{- $color = . -}}
|
{{- $color = . -}}
|
||||||
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
|
{{- $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "white" "black" "body" "body-tertiary" -}}
|
||||||
{{- if not (in $supportedColors $color) -}}
|
{{- if not (in $supportedColors $color) -}}
|
||||||
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'color': %s" $color -}}
|
{{- errorf "partial [assets/navbar.html] - Invalid value for param 'color': %s" $color -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
@@ -124,7 +126,11 @@
|
|||||||
{{- $pre := .Pre -}}
|
{{- $pre := .Pre -}}
|
||||||
{{- $post := .Post -}}
|
{{- $post := .Post -}}
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-4">
|
{{- $theme := "" -}}
|
||||||
|
{{- if eq $color "black" }}{{ $theme = "dark" }}{{ end -}}
|
||||||
|
{{- if eq $color "white" }}{{ $theme = "light" }}{{ end -}}
|
||||||
|
|
||||||
|
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} {{ if $fixed }}fixed-top{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
||||||
<div class="container-xxl p-0">
|
<div class="container-xxl p-0">
|
||||||
<!-- Insert sidebar toggler when applicable -->
|
<!-- Insert sidebar toggler when applicable -->
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
@@ -151,54 +157,34 @@
|
|||||||
|
|
||||||
<!-- Insert main navigation toggler -->
|
<!-- Insert main navigation toggler -->
|
||||||
<div class="d-flex fw-30">
|
<div class="d-flex fw-30">
|
||||||
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent-{{ $id }}"
|
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}"
|
||||||
aria-controls="navbarSupportedContent-{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
aria-controls="{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
||||||
<span class="toggler-icon top-bar emphasis"></span>
|
<span class="toggler-icon top-bar emphasis"></span>
|
||||||
<span class="toggler-icon middle-bar emphasis"></span>
|
<span class="toggler-icon middle-bar emphasis"></span>
|
||||||
<span class="toggler-icon bottom-bar emphasis"></span>
|
<span class="toggler-icon bottom-bar emphasis"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="navbar-collapse collapse" id="navbarSupportedContent-{{ $id }}">
|
<div class="navbar-collapse collapse" id="{{ $id }}">
|
||||||
<!-- Insert search input -->
|
<!-- Insert search input -->
|
||||||
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
|
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
|
||||||
|
|
||||||
<!-- Render top-menu items (maximum depth of 2) -->
|
<!-- Render top-menu items (maximum depth of 2) -->
|
||||||
<ul class="navbar-nav ms-auto">
|
<ul class="navbar-nav ms-auto">
|
||||||
{{- range $menu := $menus -}}
|
{{- range $menu := $menus -}}
|
||||||
{{- $menu_item_url := $menu.URL | relLangURL -}}
|
<li class="nav-item{{ if .HasChildren }} dropdown{{ end }}">
|
||||||
{{- $page_url:= $page.RelPermalink | relLangURL -}}
|
{{- partial "assets/navbar-item.html" (dict "menu" $menu "page" $page) -}}
|
||||||
{{- $active := hasPrefix $page_url $menu_item_url -}}
|
{{- if .HasChildren -}}
|
||||||
|
|
||||||
{{- $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">
|
|
||||||
{{ if $active }}<span class="active">{{ .Name }}</span>{{ else }}{{ .Name }}{{ end }}
|
|
||||||
</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 -}}
|
{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}
|
||||||
<li><a class="dropdown-item {{ if $child_active }}active{{ end }}" href="{{ .URL }}">{{ .Name }}</a></li>
|
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
{{- end -}}
|
||||||
{{- else -}}
|
</li>
|
||||||
<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 }}>
|
|
||||||
{{- with $pre}}{{ . }}{{ end -}}
|
|
||||||
<span {{if $active }} class="active"{{end}}>{{ .Name }}</span>
|
|
||||||
{{- with $post}}{{ . }}{{ end -}}
|
|
||||||
{{- if $external }} {{ partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}{{ end -}}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{{- end -}}
|
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
<!-- Insert divider if applicable -->
|
||||||
{{- if or $enableLanguage $enableDarkMode -}}
|
{{- if or $enableLanguage $enableDarkMode -}}
|
||||||
<li class="nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $size }}-block">
|
<li class="nav-item py-2 py-md-1 col-12 col-md-auto d-none d-{{ $size }}-block">
|
||||||
<div class="vr d-none d-md-flex h-100 mx-md-2"></div>
|
<div class="vr d-none d-md-flex h-100 mx-md-2"></div>
|
||||||
@@ -232,8 +218,8 @@
|
|||||||
|
|
||||||
<!-- Insert color mode switcher -->
|
<!-- Insert color mode switcher -->
|
||||||
{{- if $enableDarkMode -}}
|
{{- if $enableDarkMode -}}
|
||||||
{{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" true) -}}
|
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true) -}}
|
||||||
{{- partial "partials/navbar-mode.html" (dict "id" $id "size" $size "collapsed" false) -}}
|
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -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>
|
||||||
|
46
layouts/partials/assets/section-header.html
Normal file
46
layouts/partials/assets/section-header.html
Normal 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>
|
@@ -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
|
||||||
|
@@ -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 -}}
|
||||||
|
@@ -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 }}">
|
||||||
{{- 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">
|
||||||
|
@@ -1 +1,6 @@
|
|||||||
{{ return index .Site.Data .Section }}
|
{{- $menu := "" -}}
|
||||||
|
{{- if .IsPage -}}
|
||||||
|
{{- $menu = index .Site.Data .Section -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return $menu -}}
|
@@ -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 }}
|
||||||
• <a href="{{ site.Params.schema.gitHub }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>
|
• <a href="{{ site.Params.docs.github | default site.Params.schema.github }}/commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>
|
||||||
{{ end -}}
|
{{ end -}}
|
@@ -5,6 +5,12 @@
|
|||||||
"show" Optional flag to indicate an item should be shown as collapsed.
|
"show" Optional flag to indicate an item should be shown as collapsed.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
{{- $id := .Ordinal -}}
|
||||||
|
{{- $parent := printf "accordion-%d" .Parent.Ordinal -}}
|
||||||
|
{{- with (.Parent.Get "id") -}}
|
||||||
|
{{- $parent = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- $id := .Ordinal -}}
|
{{- $id := .Ordinal -}}
|
||||||
{{ $header := .Get "header" -}}
|
{{ $header := .Get "header" -}}
|
||||||
{{ if not $header -}}
|
{{ if not $header -}}
|
||||||
@@ -35,8 +41,6 @@
|
|||||||
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{- $parent := printf "accordion-%d" .Parent.Ordinal -}}
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
{{- with $header -}}
|
{{- with $header -}}
|
||||||
<h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}">
|
<h2 class="accordion-header m-0" id="{{ $parent }}-heading-{{ $id }}">
|
||||||
|
@@ -1,12 +1,34 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a group of vertically collapsing and expanding items. Add accordion-item inner elements for each accordion
|
Displays a group of vertically collapsing and expanding items. Add accordion-item inner elements for each accordion
|
||||||
item. The shortcode supports the following arguments:
|
item. The shortcode supports the following arguments:
|
||||||
|
"id": Optional id of the accordion, defaults to "accordion-" with a sequential number.
|
||||||
|
"always-open": Optional flag to make accordion items stay open when another item is opened.
|
||||||
"class": Optional class attribute of the accordion element, e.g. “w-50”.
|
"class": Optional class attribute of the accordion element, e.g. “w-50”.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{- $id := .Ordinal -}}
|
{{- $id := printf "accordion-%d" .Ordinal -}}
|
||||||
|
{{ with .Get "id" }}
|
||||||
|
{{ $id = . }}
|
||||||
|
{{ end }}
|
||||||
{{- $class := .Get "class" -}}
|
{{- $class := .Get "class" -}}
|
||||||
|
|
||||||
<div id="accordion-{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
{{- $openParam := "false" -}}
|
||||||
{{- .Inner -}}
|
{{- $open := false -}}
|
||||||
|
{{- with .Get "always-open" }}{{ $openParam = . }}{{ end -}}
|
||||||
|
{{- $supportedFlags := slice "true" "false" -}}
|
||||||
|
{{- if in $supportedFlags $openParam -}}
|
||||||
|
{{- if eq $openParam "true" }}{{ $open = true }}{{ end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- errorf "Invalid value for param 'always-open': %s" .Position -}}
|
||||||
|
{{- $error = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $body := .Inner -}}
|
||||||
|
{{- if $open -}}
|
||||||
|
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
|
||||||
|
{{- $body = (replace .Inner $pattern "") | markdownify | safeHTML }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
||||||
|
{{- $body -}}
|
||||||
</div>
|
</div>
|
@@ -6,15 +6,19 @@
|
|||||||
"icon" Optional class and name of a Font Awesome icon to include.
|
"icon" Optional class and name of a Font Awesome icon to include.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
{{- $error := false -}}
|
||||||
{{ $color := "primary" -}}
|
{{ $color := "primary" -}}
|
||||||
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
||||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
|
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
|
||||||
{{ if not (in $supportedColors $color) -}}
|
{{ if not (in $supportedColors $color) -}}
|
||||||
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
||||||
{{ $color = "primary" -}}
|
{{ $error = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $icon := .Get "icon" }}
|
{{ $icon := "" }}
|
||||||
|
{{ with .Get "icon" }}
|
||||||
|
{{ $icon = partial "assets/icon.html" (dict "icon" (printf "%s fa-2x fa-pull-left" .)) }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ $dismissibleParam := "false" -}}
|
{{ $dismissibleParam := "false" -}}
|
||||||
{{ $dismissible := false -}}
|
{{ $dismissible := false -}}
|
||||||
@@ -24,10 +28,13 @@
|
|||||||
{{ if eq $dismissibleParam "true" }}{{ $dismissible = true }}{{ end -}}
|
{{ if eq $dismissibleParam "true" }}{{ $dismissible = true }}{{ end -}}
|
||||||
{{ else -}}
|
{{ else -}}
|
||||||
{{ errorf "Invalid value for param 'dismissible': %s" .Position -}}
|
{{ errorf "Invalid value for param 'dismissible': %s" .Position -}}
|
||||||
|
{{ $error = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
<div class="alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}" role="alert">
|
{{- if not $error -}}
|
||||||
{{ with $icon }}<i class="{{ . }} fa-2x fa-pull-left"></i>{{ end }}
|
<div class="alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}" role="alert">
|
||||||
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
|
{{ with $icon }}{{ . }}{{ end }}
|
||||||
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
|
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
|
||||||
</div>
|
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
@@ -1,18 +1,23 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
|
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
|
||||||
elements to define individual image slides. The shortcode supports the following arguments:
|
elements to define individual image slides. The shortcode supports the following arguments:
|
||||||
|
"id": Optional id of the carousel, defaults to "carousel-" with a sequential number.
|
||||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
||||||
Instead, the original aspect ratio of the image is preserved.
|
Instead, the original aspect ratio of the image is preserved.
|
||||||
"class": Optional class attribute of the carousel element, e.g. “w-75”.
|
"class": Optional class attribute of the carousel element, e.g. “w-75”.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
{{- $id := printf "carousel-%d" .Ordinal -}}
|
||||||
|
{{ with .Get "id" }}
|
||||||
|
{{ $id = . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ $ratio := .Get "ratio" -}}
|
{{ $ratio := .Get "ratio" -}}
|
||||||
{{ $class := .Get "class" -}}
|
{{ $class := .Get "class" -}}
|
||||||
{{ $id := .Ordinal -}}
|
|
||||||
{{ $images := .Inner -}}
|
{{ $images := .Inner -}}
|
||||||
{{ $items := len (findRE "carousel-item" $images) -}}
|
{{ $items := len (findRE "carousel-item" $images) -}}
|
||||||
|
|
||||||
<div id="carousel-{{ $id }}" class="carousel slide mb-3{{ with $class }} {{ . }}{{ end }}" data-bs-ride="true">
|
<div id="{{ $id }}" class="carousel slide mb-3{{ with $class }} {{ . }}{{ end }}" data-bs-ride="true">
|
||||||
<div class="carousel-indicators">
|
<div class="carousel-indicators">
|
||||||
{{ range $index := (seq $items) -}}
|
{{ range $index := (seq $items) -}}
|
||||||
<button type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide-to="{{ sub $index 1 }}" {{ if eq $index 1 }}class="active"{{ end }} aria-current="true" aria-label="Slide {{ $index }}"></button>
|
<button type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide-to="{{ sub $index 1 }}" {{ if eq $index 1 }}class="active"{{ end }} aria-current="true" aria-label="Slide {{ $index }}"></button>
|
||||||
@@ -21,11 +26,11 @@
|
|||||||
<div class="carousel-inner">
|
<div class="carousel-inner">
|
||||||
{{ $images }}
|
{{ $images }}
|
||||||
</div>
|
</div>
|
||||||
<button class="carousel-control-prev" type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide="prev">
|
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $id }}" data-bs-slide="prev">
|
||||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||||
<span class="visually-hidden">Previous</span>
|
<span class="visually-hidden">Previous</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="carousel-control-next" type="button" data-bs-target="#carousel-{{ $id }}" data-bs-slide="next">
|
<button class="carousel-control-next" type="button" data-bs-target="#{{ $id }}" data-bs-slide="next">
|
||||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||||
<span class="visually-hidden">Next</span>
|
<span class="visually-hidden">Next</span>
|
||||||
</button>
|
</button>
|
||||||
|
@@ -2,13 +2,15 @@
|
|||||||
Displays a navigation header with a toggler. The menu items are derived from the site's configuration. Nested items
|
Displays a navigation header with a toggler. The menu items are derived from the site's configuration. Nested items
|
||||||
are supported at one-level depth. The navigation bar includes a search area and a language switcher if applicable.
|
are supported at one-level depth. The navigation bar includes a search area and a language switcher if applicable.
|
||||||
The shortcode supports the following arguments:
|
The shortcode supports the following arguments:
|
||||||
|
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-n" with a sequential number n
|
||||||
|
starting at 1.
|
||||||
"path" Required path of the active page.
|
"path" Required path of the active page.
|
||||||
"menus" Optional name of the menu configuration, defaults to "main".
|
"menus" Optional name of the menu configuration, defaults to "main".
|
||||||
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
|
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
|
||||||
"style" Optional style of the navbar, either "light" (default) or "dark".
|
"style" Optional style of the navbar, either "light" (default) or "dark".
|
||||||
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
||||||
"danger", "warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". The
|
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
|
||||||
default color is none.
|
none.
|
||||||
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
|
"mode" Optional flag to include a color mode switcher, default is "true" (if dark mode is enabled).
|
||||||
"search" Optional flag to include a search input, default is "true".
|
"search" Optional flag to include a search input, default is "true".
|
||||||
"logo" Optional address of the logo image.
|
"logo" Optional address of the logo image.
|
||||||
@@ -16,10 +18,13 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
{{ $error := false }}
|
{{ $error := false }}
|
||||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body" "body-tertiary" -}}
|
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "white" "black" "body" "body" "body-tertiary" -}}
|
||||||
{{ $supportedFlags := slice "true" "false" -}}
|
{{ $supportedFlags := slice "true" "false" -}}
|
||||||
|
|
||||||
{{ $id := add .Ordinal 1 }}
|
{{- $id := printf "navbar-collapse-%d" (add .Ordinal 1) -}}
|
||||||
|
{{ with .Get "id" }}
|
||||||
|
{{ $id = . }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ $path := .Get "path" }}
|
{{ $path := .Get "path" }}
|
||||||
{{ $page := .Site.GetPage $path }}
|
{{ $page := .Site.GetPage $path }}
|
||||||
|
68
layouts/shortcodes/release.html
Normal file
68
layouts/shortcodes/release.html
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<!--
|
||||||
|
Displays a release button that links to a specific release. Use the optional state to indicate if it is a new or
|
||||||
|
deprecated feature.
|
||||||
|
"version": Required version string, expects semver notation with a "v" prefix.
|
||||||
|
"state": Optional state, either "new" or "deprecated".
|
||||||
|
"short": Optional flag to indicate the release button should use short notation.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{- $error := false -}}
|
||||||
|
{{- $version := .Get "version" -}}
|
||||||
|
{{- $inline := false -}}
|
||||||
|
|
||||||
|
{{- $state := "new" -}}
|
||||||
|
{{- with .Get "state" }}{{ $state = . }}{{ end -}}
|
||||||
|
{{- $supportedStates := slice "new" "deprecated" -}}
|
||||||
|
{{- if not (in $supportedStates $state) -}}
|
||||||
|
{{- errorf "Invalid value for param 'state': %s" .Position -}}
|
||||||
|
{{- $error = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $shortParam := "false" -}}
|
||||||
|
{{- $short := false -}}
|
||||||
|
{{- with .Get "short" }}{{ $shortParam = . }}{{ end -}}
|
||||||
|
{{- $supportedFlags := slice "true" "false" -}}
|
||||||
|
{{- if in $supportedFlags $shortParam -}}
|
||||||
|
{{- if eq $shortParam "true" }}{{ $short = true }}{{ end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- errorf "Invalid value for param 'short': %s" .Position -}}
|
||||||
|
{{- $error = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $inlineParam := "false" -}}
|
||||||
|
{{- $inline := false -}}
|
||||||
|
{{- with .Get "inline" }}{{ $inlineParam = . }}{{ end -}}
|
||||||
|
{{- $supportedFlags := slice "true" "false" -}}
|
||||||
|
{{- if in $supportedFlags $inlineParam -}}
|
||||||
|
{{- if eq $inlineParam "true" }}{{ $inline = true }}{{ end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- errorf "Invalid value for param 'inline': %s" .Position -}}
|
||||||
|
{{- $error = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $title := $version -}}
|
||||||
|
{{- $color := "success" -}}
|
||||||
|
{{- if eq $state "deprecated" -}}
|
||||||
|
{{- $color = "secondary" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if not $short -}}
|
||||||
|
{{- if eq $state "deprecated" -}}
|
||||||
|
{{- $title = (printf "Deprecated in %s" $version) -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $title = (printf "Added in %s" $version) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if not $error -}}
|
||||||
|
<div class="pb-3">
|
||||||
|
{{- partial "assets/button.html" (dict
|
||||||
|
"title" $title
|
||||||
|
"href" (printf "%s/%s" (strings.TrimSuffix "/" site.Params.docs.release) $version)
|
||||||
|
"size" "sm"
|
||||||
|
"color" $color
|
||||||
|
"outline" "true"
|
||||||
|
"class" "rounded-2 fw-semibold")
|
||||||
|
-}}
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
@@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a tooltip for a link. The shortcode supports the following arguments:
|
Displays a tooltip for a link. The shortcode supports the following arguments:
|
||||||
"color": Optional theme color of the element, either "primary" (default), "secondary", "success",
|
"color": Optional theme color of the element, either "primary" (default), "secondary", "success",
|
||||||
"danger", "warning", "info", "light", "dark", "white", or "black".
|
"danger", "warning", "info", "light", or "dark".
|
||||||
"title" Required text to display in the tooltip.
|
"title" Required text to display in the tooltip.
|
||||||
"href" Required address for the button or hyperlink.
|
"href" Required address for the button or hyperlink.
|
||||||
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
|
"placement" Optional position of the tooltip: "top" (default), "bottom", "left", or "right".
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
{{ $color := "primary" -}}
|
{{ $color := "primary" -}}
|
||||||
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
||||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" -}}
|
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" -}}
|
||||||
{{ if not (in $supportedColors $color) -}}
|
{{ if not (in $supportedColors $color) -}}
|
||||||
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
{{ errorf "Invalid value for param 'color': %s" .Position -}}
|
||||||
{{ $error = true }}
|
{{ $error = true }}
|
||||||
|
@@ -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 }}
|
||||||
|
751
package-lock.json
generated
751
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gethinode/hinode",
|
"name": "@gethinode/hinode",
|
||||||
"version": "0.12.6",
|
"version": "0.14.2",
|
||||||
"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",
|
||||||
|
3
static/js/alias.js
Normal file
3
static/js/alias.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const alias = document.querySelector("link[rel='canonical']").getAttribute('href')
|
||||||
|
const params = window.location.search + window.location.hash
|
||||||
|
window.location = alias + params
|
Reference in New Issue
Block a user