forked from drowl87/hextra_mirror
Compare commits
39 Commits
jupyter
...
37a135f38a
Author | SHA1 | Date | |
---|---|---|---|
37a135f38a | |||
8ecd48d391 | |||
0c9c900018 | |||
1200a7bee4 | |||
1313415c8b | |||
3cba6b9820 | |||
6ee6ddeacb | |||
db92de0f1b | |||
b2bc4f7098 | |||
857c4e4ca1 | |||
d3f251b621 | |||
d43ac66494 | |||
4eca719b0b | |||
daaf281012 | |||
ba7707d4d9 | |||
25da2baf7f | |||
234fd39254 | |||
4a7ab16695 | |||
19852552c6 | |||
80a1692ade | |||
81720c7727 | |||
f98fa8c389 | |||
3503b4c4f1 | |||
bf38320797 | |||
6a9117ae7c | |||
be7e0d3f40 | |||
e4cdabff12 | |||
2f127a2f2f | |||
781e7000c4 | |||
8e98791082 | |||
6d4bbac085 | |||
5103da4cd5 | |||
9f2b67c08c | |||
0d6cbba9df | |||
1936b46af4 | |||
ab9e40effd | |||
5080877576 | |||
24fb13b221 | |||
a5b59b61f1 |
@ -3,7 +3,7 @@
|
|||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/hugo:1": {
|
"ghcr.io/devcontainers/features/hugo:1": {
|
||||||
"extended": true,
|
"extended": true,
|
||||||
"version": "0.119.0"
|
"version": "0.124.1"
|
||||||
},
|
},
|
||||||
"ghcr.io/devcontainers/features/node:1": {}
|
"ghcr.io/devcontainers/features/node:1": {}
|
||||||
},
|
},
|
||||||
|
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
@ -57,7 +57,7 @@ We recommend that you search existing [issues][issues] or discussions before ope
|
|||||||
|
|
||||||
### Local development setup
|
### Local development setup
|
||||||
|
|
||||||
- [Hugo][hugo] >= v0.115.0 (extended version)
|
- [Hugo][hugo] >= v0.124.0 (extended version)
|
||||||
- [Node.js][nodejs]
|
- [Node.js][nodejs]
|
||||||
- [Go][go]
|
- [Go][go]
|
||||||
|
|
||||||
|
25
.github/workflows/pages.yml
vendored
25
.github/workflows/pages.yml
vendored
@ -31,21 +31,24 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
HUGO_VERSION: 0.117.0
|
HUGO_VERSION: 0.126.1
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
fetch-depth: 0 # fetch all history for .GitInfo and .Lastmod
|
||||||
|
submodules: recursive
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: actions/setup-go@v4
|
uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: '1.20'
|
go-version: '1.22'
|
||||||
|
- name: Setup Pages
|
||||||
|
id: pages
|
||||||
|
uses: actions/configure-pages@v4
|
||||||
- name: Setup Hugo
|
- name: Setup Hugo
|
||||||
uses: peaceiris/actions-hugo@v2
|
run: |
|
||||||
with:
|
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
|
||||||
hugo-version: ${{ env.HUGO_VERSION }}
|
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
|
||||||
extended: true
|
|
||||||
- name: Build with Hugo
|
- name: Build with Hugo
|
||||||
env:
|
env:
|
||||||
# For maximum backward compatibility with Hugo modules
|
# For maximum backward compatibility with Hugo modules
|
||||||
@ -55,9 +58,9 @@ jobs:
|
|||||||
hugo \
|
hugo \
|
||||||
--minify \
|
--minify \
|
||||||
--themesDir=../.. --source=exampleSite \
|
--themesDir=../.. --source=exampleSite \
|
||||||
--baseURL "https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/"
|
--baseURL "${{ steps.pages.outputs.base_url }}/"
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v2
|
uses: actions/upload-pages-artifact@v3
|
||||||
with:
|
with:
|
||||||
path: ./exampleSite/public
|
path: ./exampleSite/public
|
||||||
|
|
||||||
@ -71,4 +74,4 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v2
|
uses: actions/deploy-pages@v4
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<h1 align="center">هگزترا</h1>
|
<h1 align="center">هگزترا</h1>
|
||||||
|
<sup align="center"><a href="README.md">English</a> | <a href="README.zh-cn.md">简体中文</a> | <a href="README.fa.md">فارسی</a></sup>
|
||||||
<p align="center">تم هیوگو مدرن، پاسخگو و دارای امکانات کامل برای ایجاد وبسایتهای استاتیک زیبا.</p>
|
<p align="center">تم هیوگو مدرن، پاسخگو و دارای امکانات کامل برای ایجاد وبسایتهای استاتیک زیبا.</p>
|
||||||
|
|
||||||
نسخهی نمایشی → [imfing.github.io/hextra](https://imfing.github.io/hextra/fa)
|
نسخهی نمایشی → [imfing.github.io/hextra](https://imfing.github.io/hextra/fa)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<h1 align="center">Hextra</h1>
|
<h1 align="center">Hextra</h1>
|
||||||
|
<sup align="center"><a href="README.md">English</a> | <a href="README.zh-cn.md">简体中文</a> | <a href="README.fa.md">فارسی</a></sup>
|
||||||
<p align="center">Modern, responsive, batteries-included Hugo theme for creating beautiful static websites.</p>
|
<p align="center">Modern, responsive, batteries-included Hugo theme for creating beautiful static websites.</p>
|
||||||
|
|
||||||
Demo → [imfing.github.io/hextra](https://imfing.github.io/hextra/)
|
Demo → [imfing.github.io/hextra](https://imfing.github.io/hextra/)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<h1 align="center">Hextra</h1>
|
<h1 align="center">Hextra</h1>
|
||||||
|
<sup align="center"><a href="README.md">English</a> | <a href="README.zh-cn.md">简体中文</a> | <a href="README.fa.md">فارسی</a></sup>
|
||||||
<p align="center">用于创建美观的静态站点的现代化, 响应式, 功能强大的 Hugo 主题.</p>
|
<p align="center">用于创建美观的静态站点的现代化, 响应式, 功能强大的 Hugo 主题.</p>
|
||||||
|
|
||||||
演示 → [imfing.github.io/hextra](https://imfing.github.io/hextra/)
|
演示 → [imfing.github.io/hextra](https://imfing.github.io/hextra/)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
.hextra-cards {
|
.hextra-cards {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--rows))), 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--hextra-cards-grid-cols))), 1fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
.hextra-card img {
|
.hextra-card img {
|
||||||
|
5
assets/css/components/hextra/feature-grid.css
Normal file
5
assets/css/components/hextra/feature-grid.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.hextra-feature-grid {
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
grid-template-columns: repeat(var(--hextra-feature-grid-cols), minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@
|
|||||||
@import "components/navbar.css";
|
@import "components/navbar.css";
|
||||||
@import "components/scrollbar.css";
|
@import "components/scrollbar.css";
|
||||||
@import "components/code-copy.css";
|
@import "components/code-copy.css";
|
||||||
|
@import "components/hextra/feature-grid.css";
|
||||||
|
|
||||||
html {
|
html {
|
||||||
@apply hx-text-base hx-antialiased;
|
@apply hx-text-base hx-antialiased;
|
||||||
|
@ -77,6 +77,15 @@
|
|||||||
@apply hx-text-sm hx-text-gray-500 dark:hx-text-gray-400 hx-mt-2 hx-block hx-text-center;
|
@apply hx-text-sm hx-text-gray-500 dark:hx-text-gray-400 hx-mt-2 hx-block hx-text-center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Definition list */
|
||||||
|
:where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) {
|
||||||
|
dt {
|
||||||
|
@apply hx-mt-6 hx-font-semibold;
|
||||||
|
}
|
||||||
|
dd {
|
||||||
|
@apply hx-my-2 hx-ps-6;
|
||||||
|
}
|
||||||
|
}
|
||||||
.footnotes {
|
.footnotes {
|
||||||
@apply hx-mt-12 hx-text-sm;
|
@apply hx-mt-12 hx-text-sm;
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,20 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
el.addEventListener('focus', init);
|
el.addEventListener('focus', init);
|
||||||
el.addEventListener('keyup', search);
|
el.addEventListener('keyup', search);
|
||||||
el.addEventListener('keydown', handleKeyDown);
|
el.addEventListener('keydown', handleKeyDown);
|
||||||
|
el.addEventListener('input', handleInputChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
const shortcutElements = document.querySelectorAll('.search-wrapper kbd');
|
||||||
|
|
||||||
|
function setShortcutElementsOpacity(opacity) {
|
||||||
|
shortcutElements.forEach(el => {
|
||||||
|
el.style.opacity = opacity;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleInputChange(e) {
|
||||||
|
const opacity = e.target.value.length > 0 ? 0 : 100;
|
||||||
|
setShortcutElementsOpacity(opacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the search wrapper, input, and results elements.
|
// Get the search wrapper, input, and results elements.
|
||||||
@ -79,6 +93,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
e.target !== resultsElement &&
|
e.target !== resultsElement &&
|
||||||
!resultsElement.contains(e.target)
|
!resultsElement.contains(e.target)
|
||||||
) {
|
) {
|
||||||
|
setShortcutElementsOpacity(100);
|
||||||
hideSearchResults();
|
hideSearchResults();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -157,6 +172,10 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
case 'Escape':
|
case 'Escape':
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
hideSearchResults();
|
hideSearchResults();
|
||||||
|
// Clear the input when pressing escape
|
||||||
|
inputElement.value = '';
|
||||||
|
inputElement.dispatchEvent(new Event('input'));
|
||||||
|
// Remove focus from the input
|
||||||
inputElement.blur();
|
inputElement.blur();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -170,7 +189,10 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preload the search index.
|
/**
|
||||||
|
* Preloads the search index by fetching data and adding it to the FlexSearch index.
|
||||||
|
* @returns {Promise<void>} A promise that resolves when the index is preloaded.
|
||||||
|
*/
|
||||||
async function preloadIndex() {
|
async function preloadIndex() {
|
||||||
const tokenize = '{{- site.Params.search.flexsearch.tokenize | default "forward" -}}';
|
const tokenize = '{{- site.Params.search.flexsearch.tokenize | default "forward" -}}';
|
||||||
window.pageIndex = new FlexSearch.Document({
|
window.pageIndex = new FlexSearch.Document({
|
||||||
@ -240,6 +262,10 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a search based on the provided query and displays the results.
|
||||||
|
* @param {Event} e - The event object.
|
||||||
|
*/
|
||||||
function search(e) {
|
function search(e) {
|
||||||
const query = e.target.value;
|
const query = e.target.value;
|
||||||
if (!e.target.value) {
|
if (!e.target.value) {
|
||||||
@ -308,6 +334,12 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||||||
displayResults(sortedResults, query);
|
displayResults(sortedResults, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays the search results on the page.
|
||||||
|
*
|
||||||
|
* @param {Array} results - The array of search results.
|
||||||
|
* @param {string} query - The search query.
|
||||||
|
*/
|
||||||
function displayResults(results, query) {
|
function displayResults(results, query) {
|
||||||
const { resultsElement } = getActiveSearchElement();
|
const { resultsElement } = getActiveSearchElement();
|
||||||
if (!resultsElement) return;
|
if (!resultsElement) return;
|
||||||
|
2
assets/lib/katex/auto-render.min.js
vendored
2
assets/lib/katex/auto-render.min.js
vendored
@ -1 +1 @@
|
|||||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var i=r[e];if(void 0!==i)return i.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var i={};return function(){n.d(i,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,i=0,a=e.length;n<t.length;){var o=t[n];if(i<=0&&t.slice(n,n+a)===e)return n;"\\"===o?n++:"{"===o?i++:"}"===o&&i--,n++}return-1},a=/^\\begin{/,o=function(e,t){for(var n,i=[],o=new RegExp("("+t.map((function(e){return e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")})).join("|")+")");-1!==(n=e.search(o));){n>0&&(i.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=a.test(d)?d:e.slice(t[l].left.length,n);i.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&i.push({type:"text",data:e}),i},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var i=document.createDocumentFragment(),a=0;a<n.length;a++)if("text"===n[a].type)i.appendChild(document.createTextNode(n[a].data));else{var l=document.createElement("span"),d=n[a].data;r.displayMode=n[a].display;try{r.preProcess&&(d=r.preProcess(d)),t().render(d,l,r)}catch(e){if(!(e instanceof t().ParseError))throw e;r.errorCallback("KaTeX auto-render: Failed to parse `"+n[a].data+"` with ",e),i.appendChild(document.createTextNode(n[a].rawData));continue}i.appendChild(l)}return i},d=function e(t,r){for(var n=0;n<t.childNodes.length;n++){var i=t.childNodes[n];if(3===i.nodeType){for(var a=i.textContent,o=i.nextSibling,d=0;o&&o.nodeType===Node.TEXT_NODE;)a+=o.textContent,o=o.nextSibling,d++;var s=l(a,r);if(s){for(var f=0;f<d;f++)i.nextSibling.remove();n+=s.childNodes.length-1,t.replaceChild(s,i)}else n+=d}else 1===i.nodeType&&function(){var t=" "+i.className+" ";-1===r.ignoredTags.indexOf(i.nodeName.toLowerCase())&&r.ignoredClasses.every((function(e){return-1===t.indexOf(" "+e+" ")}))&&e(i,r)}()}},s=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},d(e,r)}}(),i=i.default}()}));
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};return function(){r.d(o,{default:function(){return d}});var e=r(771),t=r.n(e);const n=function(e,t,n){let r=n,o=0;const i=e.length;for(;r<t.length;){const n=t[r];if(o<=0&&t.slice(r,r+i)===e)return r;"\\"===n?r++:"{"===n?o++:"}"===n&&o--,r++}return-1},i=/^\\begin{/;var a=function(e,t){let r;const o=[],a=new RegExp("("+t.map((e=>e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;r=e.search(a),-1!==r;){r>0&&(o.push({type:"text",data:e.slice(0,r)}),e=e.slice(r));const a=t.findIndex((t=>e.startsWith(t.left)));if(r=n(t[a].right,e,t[a].left.length),-1===r)break;const l=e.slice(0,r+t[a].right.length),s=i.test(l)?l:e.slice(t[a].left.length,r);o.push({type:"math",data:s,rawData:l,display:t[a].display}),e=e.slice(r+t[a].right.length)}return""!==e&&o.push({type:"text",data:e}),o};const l=function(e,n){const r=a(e,n.delimiters);if(1===r.length&&"text"===r[0].type)return null;const o=document.createDocumentFragment();for(let e=0;e<r.length;e++)if("text"===r[e].type)o.appendChild(document.createTextNode(r[e].data));else{const i=document.createElement("span");let a=r[e].data;n.displayMode=r[e].display;try{n.preProcess&&(a=n.preProcess(a)),t().render(a,i,n)}catch(i){if(!(i instanceof t().ParseError))throw i;n.errorCallback("KaTeX auto-render: Failed to parse `"+r[e].data+"` with ",i),o.appendChild(document.createTextNode(r[e].rawData));continue}o.appendChild(i)}return o},s=function(e,t){for(let n=0;n<e.childNodes.length;n++){const r=e.childNodes[n];if(3===r.nodeType){let o=r.textContent,i=r.nextSibling,a=0;for(;i&&i.nodeType===Node.TEXT_NODE;)o+=i.textContent,i=i.nextSibling,a++;const s=l(o,t);if(s){for(let e=0;e<a;e++)r.nextSibling.remove();n+=s.childNodes.length-1,e.replaceChild(s,r)}else n+=a}else if(1===r.nodeType){const e=" "+r.className+" ";-1===t.ignoredTags.indexOf(r.nodeName.toLowerCase())&&t.ignoredClasses.every((t=>-1===e.indexOf(" "+t+" ")))&&s(r,t)}}};var d=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},s(e,n)}}(),o=o.default}()}));
|
2
assets/lib/katex/katex.min.css
vendored
2
assets/lib/katex/katex.min.css
vendored
File diff suppressed because one or more lines are too long
2
assets/lib/katex/katex.min.js
vendored
2
assets/lib/katex/katex.min.js
vendored
File diff suppressed because one or more lines are too long
1014
assets/lib/mermaid/mermaid.min.js
vendored
1014
assets/lib/mermaid/mermaid.min.js
vendored
File diff suppressed because one or more lines are too long
@ -9,6 +9,11 @@ github: >
|
|||||||
<path d="M12 3C7.0275 3 3 7.12937 3 12.2276C3 16.3109 5.57625 19.7597 9.15374 20.9824C9.60374 21.0631 9.77249 20.7863 9.77249 20.5441C9.77249 20.3249 9.76125 19.5982 9.76125 18.8254C7.5 19.2522 6.915 18.2602 6.735 17.7412C6.63375 17.4759 6.19499 16.6569 5.8125 16.4378C5.4975 16.2647 5.0475 15.838 5.80124 15.8264C6.51 15.8149 7.01625 16.4954 7.18499 16.7723C7.99499 18.1679 9.28875 17.7758 9.80625 17.5335C9.885 16.9337 10.1212 16.53 10.38 16.2993C8.3775 16.0687 6.285 15.2728 6.285 11.7432C6.285 10.7397 6.63375 9.9092 7.20749 9.26326C7.1175 9.03257 6.8025 8.08674 7.2975 6.81794C7.2975 6.81794 8.05125 6.57571 9.77249 7.76377C10.4925 7.55615 11.2575 7.45234 12.0225 7.45234C12.7875 7.45234 13.5525 7.55615 14.2725 7.76377C15.9937 6.56418 16.7475 6.81794 16.7475 6.81794C17.2424 8.08674 16.9275 9.03257 16.8375 9.26326C17.4113 9.9092 17.76 10.7281 17.76 11.7432C17.76 15.2843 15.6563 16.0687 13.6537 16.2993C13.98 16.5877 14.2613 17.1414 14.2613 18.0065C14.2613 19.2407 14.25 20.2326 14.25 20.5441C14.25 20.7863 14.4188 21.0746 14.8688 20.9824C16.6554 20.364 18.2079 19.1866 19.3078 17.6162C20.4077 16.0457 20.9995 14.1611 21 12.2276C21 7.12937 16.9725 3 12 3Z"></path>
|
<path d="M12 3C7.0275 3 3 7.12937 3 12.2276C3 16.3109 5.57625 19.7597 9.15374 20.9824C9.60374 21.0631 9.77249 20.7863 9.77249 20.5441C9.77249 20.3249 9.76125 19.5982 9.76125 18.8254C7.5 19.2522 6.915 18.2602 6.735 17.7412C6.63375 17.4759 6.19499 16.6569 5.8125 16.4378C5.4975 16.2647 5.0475 15.838 5.80124 15.8264C6.51 15.8149 7.01625 16.4954 7.18499 16.7723C7.99499 18.1679 9.28875 17.7758 9.80625 17.5335C9.885 16.9337 10.1212 16.53 10.38 16.2993C8.3775 16.0687 6.285 15.2728 6.285 11.7432C6.285 10.7397 6.63375 9.9092 7.20749 9.26326C7.1175 9.03257 6.8025 8.08674 7.2975 6.81794C7.2975 6.81794 8.05125 6.57571 9.77249 7.76377C10.4925 7.55615 11.2575 7.45234 12.0225 7.45234C12.7875 7.45234 13.5525 7.55615 14.2725 7.76377C15.9937 6.56418 16.7475 6.81794 16.7475 6.81794C17.2424 8.08674 16.9275 9.03257 16.8375 9.26326C17.4113 9.9092 17.76 10.7281 17.76 11.7432C17.76 15.2843 15.6563 16.0687 13.6537 16.2993C13.98 16.5877 14.2613 17.1414 14.2613 18.0065C14.2613 19.2407 14.25 20.2326 14.25 20.5441C14.25 20.7863 14.4188 21.0746 14.8688 20.9824C16.6554 20.364 18.2079 19.1866 19.3078 17.6162C20.4077 16.0457 20.9995 14.1611 21 12.2276C21 7.12937 16.9725 3 12 3Z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
gitea: >
|
||||||
|
<svg fill="currentColor" viewBox="75 100 824 824">
|
||||||
|
<path d="M762.2 350.3c-100.9 5.3-160.7 8-212 8.5v114.1l-16-7.9-.1-106.1c-58.9 0-110.7-3.1-209.1-8.6-12.3-.1-29.5-2.4-47.9-2.5-47.1-.1-110.2 33.5-106.7 118C175.8 597.6 296 609.9 344 610.9c5.3 24.7 61.8 110.1 103.6 114.6H631c109.9-8.2 192.3-373.8 131.2-375.2zm-546 117.3c-4.7-36.6 11.8-74.8 73.2-73.2C296.1 462 307 501.5 329 561.9c-56.2-7.4-104-25.7-112.8-94.3zm415.6 83.5-51.3 105.6c-6.5 13.4-22.7 19-36.2 12.5l-105.6-51.3c-13.4-6.5-19-22.7-12.5-36.2l51.3-105.6c6.5-13.4 22.7-19 36.2-12.5l105.6 51.3c13.4 6.6 19 22.8 12.5 36.2z M555 609.9c.1-.2.2-.3.2-.5 17.2-35.2 24.3-49.8 19.8-62.4-3.9-11.1-15.5-16.6-36.7-26.6-.8-.4-1.7-.8-2.5-1.2.2-2.3-.1-4.7-1-7-.8-2.3-2.1-4.3-3.7-6l13.6-27.8-11.9-5.8-13.7 28.4c-2 0-4.1.3-6.2 1-8.9 3.2-13.5 13-10.3 21.9.7 1.9 1.7 3.5 2.8 5l-23.6 48.4c-1.9 0-3.8.3-5.7 1-8.9 3.2-13.5 13-10.3 21.9 3.2 8.9 13 13.5 21.9 10.3 8.9-3.2 13.5-13 10.3-21.9-.9-2.5-2.3-4.6-4-6.3l23-47.2c2.5.2 5 0 7.5-.9 2.1-.8 3.9-1.9 5.5-3.3.9.4 1.9.9 2.7 1.3 17.4 8.2 27.9 13.2 30 19.1 2.6 7.5-5.1 23.4-19.3 52.3-.1.2-.2.5-.4.7-2.2-.1-4.4.2-6.5 1-8.9 3.2-13.5 13-10.3 21.9 3.2 8.9 13 13.5 21.9 10.3 8.9-3.2 13.5-13 10.3-21.9-.6-2-1.9-4-3.4-5.7z"></path>
|
||||||
|
</svg>
|
||||||
|
|
||||||
codeberg: >
|
codeberg: >
|
||||||
<svg fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
<svg fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M11.955.49A12 12 0 0 0 0 12.49a12 12 0 0 0 1.832 6.373L11.838 5.928a.187.14 0 0 1 .324 0l10.006 12.935A12 12 0 0 0 24 12.49a12 12 0 0 0-12-12 12 12 0 0 0-.045 0zm.375 6.467 4.416 16.553a12 12 0 0 0 5.137-4.213z"/>
|
<path d="M11.955.49A12 12 0 0 0 0 12.49a12 12 0 0 0 1.832 6.373L11.838 5.928a.187.14 0 0 1 .324 0l10.006 12.935A12 12 0 0 0 24 12.49a12 12 0 0 0-12-12 12 12 0 0 0-.045 0zm.375 6.467 4.416 16.553a12 12 0 0 0 5.137-4.213z"/>
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
---
|
---
|
||||||
title: "博客"
|
title: "博客"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<div style="text-align: center; margin-top: 1em;">
|
||||||
|
{{< hextra/hero-badge link="index.xml" >}}
|
||||||
|
<span>RSS 订阅</span>
|
||||||
|
{{< icon name="rss" attributes="height=14" >}}
|
||||||
|
{{< /hextra/hero-badge >}}
|
||||||
|
</div>
|
||||||
|
@ -161,7 +161,7 @@ To modify the copyright text displayed in your website's footer, you'll need to
|
|||||||
In this file, specify your new copyright text as shown below:
|
In this file, specify your new copyright text as shown below:
|
||||||
|
|
||||||
```yaml {filename="i18n/en.yaml"}
|
```yaml {filename="i18n/en.yaml"}
|
||||||
copyright: "© 2023 YOUR TEXT HERE"
|
copyright: "© 2024 YOUR TEXT HERE"
|
||||||
```
|
```
|
||||||
|
|
||||||
For your reference, an example [`i18n/en.yaml`](https://github.com/imfing/hextra/blob/main/i18n/en.yaml) file can be found in the GitHub repository. Additionally, you could use Markdown format in the copyright text.
|
For your reference, an example [`i18n/en.yaml`](https://github.com/imfing/hextra/blob/main/i18n/en.yaml) file can be found in the GitHub repository. Additionally, you could use Markdown format in the copyright text.
|
||||||
@ -251,6 +251,23 @@ Options for `flexsearch.index`:
|
|||||||
- `heading` - level 1 and level 2 headings
|
- `heading` - level 1 and level 2 headings
|
||||||
- `title` - only include the page title
|
- `title` - only include the page title
|
||||||
|
|
||||||
|
To customize the search tokenize, set the `params.search.flexsearch.tokenize` parameter in the config file:
|
||||||
|
|
||||||
|
```yaml {filename="hugo.yaml"}
|
||||||
|
params:
|
||||||
|
# ...
|
||||||
|
flexsearch:
|
||||||
|
# full | forward | reverse | strict
|
||||||
|
tokenize: forward
|
||||||
|
```
|
||||||
|
|
||||||
|
Options for [`flexsearch.tokenize`](https://github.com/nextapps-de/flexsearch/#tokenizer-prefix-search):
|
||||||
|
|
||||||
|
- `strict` - index whole words
|
||||||
|
- `forward` - incrementally index words in forward direction
|
||||||
|
- `reverse` - incrementally index words in both directions
|
||||||
|
- `full` - index every possible combination
|
||||||
|
|
||||||
To exclude a page from the search index, set the `excludeSearch: true` in the front matter of the page:
|
To exclude a page from the search index, set the `excludeSearch: true` in the front matter of the page:
|
||||||
|
|
||||||
```yaml {filename="content/docs/guide/configuration.md"}
|
```yaml {filename="content/docs/guide/configuration.md"}
|
||||||
|
@ -130,7 +130,7 @@ editURL: "https://example.com/edit/this/page"
|
|||||||
在此文件中,填写新的版权文本,像这样:
|
在此文件中,填写新的版权文本,像这样:
|
||||||
|
|
||||||
```yaml {filename="i18n/en.yaml"}
|
```yaml {filename="i18n/en.yaml"}
|
||||||
copyright: "© 2023 YOUR TEXT HERE"
|
copyright: "© 2024 YOUR TEXT HERE"
|
||||||
```
|
```
|
||||||
你可以在 GitHub 存储库中找到示例 [`i18n/en.yaml`](https://github.com/imfing/hextra/blob/main/i18n/en.yaml) 文件。另外,你可以在版权文本中使用 Markdown 格式。
|
你可以在 GitHub 存储库中找到示例 [`i18n/en.yaml`](https://github.com/imfing/hextra/blob/main/i18n/en.yaml) 文件。另外,你可以在版权文本中使用 Markdown 格式。
|
||||||
|
|
||||||
@ -219,6 +219,25 @@ params:
|
|||||||
- `heading` - 一级和二级标题
|
- `heading` - 一级和二级标题
|
||||||
- `title` - 仅搜索标题
|
- `title` - 仅搜索标题
|
||||||
|
|
||||||
|
要自定义检索分词,请在配置文件中设置`params.search.flexsearch.tokenize`:
|
||||||
|
|
||||||
|
```hugo.yaml
|
||||||
|
params:
|
||||||
|
# ...
|
||||||
|
flexsearch:
|
||||||
|
# full | forward | reverse | strict
|
||||||
|
tokenize: forward
|
||||||
|
```
|
||||||
|
|
||||||
|
[`flexsearch.tokenize`](https://github.com/nextapps-de/flexsearch/#tokenizer-prefix-search)的可选项:
|
||||||
|
|
||||||
|
- `strict` - 严格单词匹配
|
||||||
|
- `forward` - 单词前缀匹配
|
||||||
|
- `reverse` - 单词前后缀匹配
|
||||||
|
- `full` - 单词子串匹配。
|
||||||
|
|
||||||
|
> 在默认的分词逻辑下,中文一句话就是一个“单词”
|
||||||
|
|
||||||
要从搜索索引中排除页面,更改 front matter 中的 `excludeSearch: true`:
|
要从搜索索引中排除页面,更改 front matter 中的 `excludeSearch: true`:
|
||||||
|
|
||||||
```yaml {filename="content/docs/guide/configuration.md"}
|
```yaml {filename="content/docs/guide/configuration.md"}
|
||||||
|
164
exampleSite/content/docs/guide/deploy-site.zh-cn.md
Normal file
164
exampleSite/content/docs/guide/deploy-site.zh-cn.md
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
---
|
||||||
|
title: 部署站点
|
||||||
|
prev: /docs/guide/shortcodes
|
||||||
|
next: /docs/advanced
|
||||||
|
---
|
||||||
|
|
||||||
|
Hugo 生成静态站点,允许多种托管方式,你可以自由选择
|
||||||
|
本页将给出部署你的 Hextra 站点的方法
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
|
||||||
|
## GitHub Pages
|
||||||
|
|
||||||
|
[GitHub Pages](https://docs.github.com/pages) 是免费部署和托管网站的推荐方法
|
||||||
|
|
||||||
|
如果您使用以下方式引导该网站 [hextra-starter-template](https://github.com/imfing/hextra-starter-template), 它提供了开箱即用的 GitHub Actions 工作流程,有助于自动部署到 GitHub Pages
|
||||||
|
|
||||||
|
{{% details title="GitHub Actions Configuration" closed="true" %}}
|
||||||
|
|
||||||
|
以下是配置来自 [hextra-starter-template](https://github.com/imfing/hextra-starter-template) 的 Workflow 的示例:
|
||||||
|
|
||||||
|
```yaml {filename=".github/workflows/pages.yaml"}
|
||||||
|
# 用于构建 Hugo 站点并将其部署到 GitHub Pages 的示例工作流程
|
||||||
|
name: Deploy Hugo site to Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
# 由默认分支触发
|
||||||
|
push:
|
||||||
|
branches: ["main"]
|
||||||
|
|
||||||
|
# 允许手动运行
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# 设置 GITHUB_TOKEN 的权限以允许部署到 GitHub Pages
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
# 仅允许一项并发部署,跳过正在进行的运行和最新排队的运行之间排队的运行
|
||||||
|
# 但是,不要取消正在进行的运行,因为我们希望完成这些生产部署
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
# 默认为 bash
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# 开始构建
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
HUGO_VERSION: 0.121.2
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # 获取 .GitInfo 和 .Lastmod 的所有历史记录
|
||||||
|
submodules: recursive
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
- name: Setup Pages
|
||||||
|
id: pages
|
||||||
|
uses: actions/configure-pages@v4
|
||||||
|
- name: Setup Hugo
|
||||||
|
run: |
|
||||||
|
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
|
||||||
|
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
|
||||||
|
- name: Build with Hugo
|
||||||
|
env:
|
||||||
|
# 最大程度地向后兼容 Hugo 模块
|
||||||
|
HUGO_ENVIRONMENT: production
|
||||||
|
HUGO_ENV: production
|
||||||
|
run: |
|
||||||
|
hugo \
|
||||||
|
--gc --minify \
|
||||||
|
--baseURL "${{ steps.pages.outputs.base_url }}/"
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: ./public
|
||||||
|
|
||||||
|
# 开始部署
|
||||||
|
deploy:
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
|
```
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
在仓库设置中将 **Pages** > **Build and deployment** > **Source** 调整为 **GitHub Actions**:
|
||||||
|

|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
默认情况下,上述 GitHub Actions 工作流程 `.github/workflows/pages.yaml` 假定站点部署到 `https://<USERNAME>.github.io/<REPO>/`
|
||||||
|
|
||||||
|
如需部署到 `https://<USERNAME>.github.io/` 修改参数 `--baseURL`:
|
||||||
|
|
||||||
|
```yaml {filename=".github/workflows/pages.yaml",linenos=table,linenostart=54,hl_lines=[4]}
|
||||||
|
run: |
|
||||||
|
hugo \
|
||||||
|
--gc --minify \
|
||||||
|
--baseURL "https://${{ github.repository_owner }}.github.io/"
|
||||||
|
```
|
||||||
|
|
||||||
|
如需部署到自己的域,请对应修改 `--baseURL`
|
||||||
|
|
||||||
|
|
||||||
|
## Cloudflare Pages
|
||||||
|
|
||||||
|
1. 将您的网站托管在 Git 存储库(例如 GitHub)
|
||||||
|
2. 登录到 [Cloudflare dashboard](https://dash.cloudflare.com/) 并选择你的账户
|
||||||
|
3. 转至在账户主页面中 **Workers & Pages** > **Create application** > **Pages** > **Connect to Git**
|
||||||
|
4. 选择你的仓库 **Set up builds and deployments** 提供以下信息:
|
||||||
|
|
||||||
|
| Configuration | Value |
|
||||||
|
| ----------------- | -------------------- |
|
||||||
|
| Production branch | `main` |
|
||||||
|
| Build command | `hugo --gc --minify` |
|
||||||
|
| Build directory | `public` |
|
||||||
|
|
||||||
|
如需了解更多内容,见:
|
||||||
|
- [Deploy a Hugo site](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/#deploy-with-cloudflare-pages).
|
||||||
|
- [Language support and tools](https://developers.cloudflare.com/pages/platform/language-support-and-tools/).
|
||||||
|
|
||||||
|
|
||||||
|
## Netlify
|
||||||
|
|
||||||
|
1. 将代码推送到 Git 存储库 (如 GitHub, GitLab)
|
||||||
|
2. [导入项目](https://app.netlify.com/start)
|
||||||
|
3. 如果您不使用[hextra-starter-template][hextra-starter-template], 手动配置以下内容:
|
||||||
|
- C 将构建命令配置为 `hugo --gc --minify`
|
||||||
|
- 指定发布目录为 `public`
|
||||||
|
- 添加环境变量 `HUGO_VERSION` 并设定为 `0.119.0`
|
||||||
|
4. 部署
|
||||||
|
|
||||||
|
转至 [Hugo on Netlify](https://docs.netlify.com/integrations/frameworks/hugo/) 获得更多信息
|
||||||
|
|
||||||
|
|
||||||
|
## Vercel
|
||||||
|
|
||||||
|
1. 将代码推送到 Git 存储库(GitHub、GitLab 等)
|
||||||
|
2. 转至 [Vercel Dashboard](https://vercel.com/dashboard) 并导入你的 Hugo 项目
|
||||||
|
3. 配置项目,选择 Hugo 作为 Framework Preset
|
||||||
|
4. 覆盖构建命令和安装命令:
|
||||||
|
1. 设置构建命令为 `hugo --gc --minify`
|
||||||
|
2. 将安装命令设置为 `yum install golang`
|
||||||
|
|
||||||
|

|
@ -14,7 +14,7 @@ Hugo supports [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax for form
|
|||||||
| Style | Syntax | Example | Output |
|
| Style | Syntax | Example | Output |
|
||||||
| -------- | -------- | ------ | ------ |
|
| -------- | -------- | ------ | ------ |
|
||||||
| Bold | `**bold text**` | `**bold text**` | **bold text** |
|
| Bold | `**bold text**` | `**bold text**` | **bold text** |
|
||||||
| Italic | `*italicized text*` | `*italicized text* | *italicized text* |
|
| Italic | `*italicized text*` | `*italicized text*` | *italicized text* |
|
||||||
| Strikethrough | `~~strikethrough text~~` | `~~strikethrough text~~` | ~~strikethrough text~~ |
|
| Strikethrough | `~~strikethrough text~~` | `~~strikethrough text~~` | ~~strikethrough text~~ |
|
||||||
| Subscript | `<sub></sub>` | `This is a <sub>subscript</sub> text` | This is a <sub>subscript</sub> text |
|
| Subscript | `<sub></sub>` | `This is a <sub>subscript</sub> text` | This is a <sub>subscript</sub> text |
|
||||||
| Superscript | `<sup></sup>` | `This is a <sup>superscript</sup> text` | This is a <sup>superscript</sup> text |
|
| Superscript | `<sup></sup>` | `This is a <sup>superscript</sup> text` | This is a <sup>superscript</sup> text |
|
||||||
|
@ -82,6 +82,45 @@ weight: 2
|
|||||||
It is recommended to keep the sidebar not too deep. If you have a lot of content, consider **splitting them into multiple sections**.
|
It is recommended to keep the sidebar not too deep. If you have a lot of content, consider **splitting them into multiple sections**.
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Breadcrumb Navigation
|
||||||
|
|
||||||
|
Breadcrumbs are auto-generated based on the directory structure of `/content`.
|
||||||
|
|
||||||
|
For example, consider the file structure [demonstrated above](#directory-structure). Given that structure, the breadcrumbs atop the page at `/docs/guide/organize-files/` would appear automatically as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
Documentation > Guide > Organize Files
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customizing Breadcrumb Link Titles
|
||||||
|
|
||||||
|
By default, each breadcrumb link is generated based on that page's `title` parameter. You can customize this by specifying a `linkTitle`.
|
||||||
|
|
||||||
|
For example, if instead of `Organize Files` we wanted the breadcrumb to be `Foo Bar`:
|
||||||
|
|
||||||
|
```yaml {filename="content/docs/guide/organize-files.md"}
|
||||||
|
---
|
||||||
|
linkTitle: Foo Bar
|
||||||
|
title: Organize Files
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
This would now generate the following breadcrumbs:
|
||||||
|
```
|
||||||
|
Documentation > Guide > Foo Bar
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hiding Breadcrumbs
|
||||||
|
|
||||||
|
You can hide breadcrumbs completely from a page by specfying `breadcrumbs: false` in its front matter:
|
||||||
|
|
||||||
|
```yaml {filename="content/docs/guide/organize-files.md"}
|
||||||
|
---
|
||||||
|
breadcrumbs: false
|
||||||
|
title: Organize Files
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
## Configure Content Directory
|
## Configure Content Directory
|
||||||
|
|
||||||
By default, the root `content/` directory is used by Hugo to build the site.
|
By default, the root `content/` directory is used by Hugo to build the site.
|
||||||
|
78
exampleSite/content/docs/guide/shortcodes/callout.zh-cn.md
Normal file
78
exampleSite/content/docs/guide/shortcodes/callout.zh-cn.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
title: 标注
|
||||||
|
aliases:
|
||||||
|
- callouts
|
||||||
|
prev: /docs/guide/shortcodes
|
||||||
|
---
|
||||||
|
|
||||||
|
向读者显示重要信息的内置组件。
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
{{< callout emoji="👾">}}
|
||||||
|
**标注**是一段旨在吸引注意力的短文本
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout type="info" >}}
|
||||||
|
**标注**是一段旨在吸引注意力的短文本。
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout type="warning" >}}
|
||||||
|
**标注**是一段旨在吸引注意力的短文本。
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout type="error" >}}
|
||||||
|
**标注**是一段旨在吸引注意力的短文本。
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Default
|
||||||
|
|
||||||
|
{{< callout emoji="🌐">}}
|
||||||
|
Hugo 可用于创建各种网站,包括博客、作品集、文档网站等
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
{{</* callout emoji="🌐" */>}}
|
||||||
|
Hugo 可用于创建各种网站,包括博客、作品集、文档网站等
|
||||||
|
{{</* /callout */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Info
|
||||||
|
|
||||||
|
{{< callout type="info" >}}
|
||||||
|
请访问 GitHub 查看最新版本
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
{{</* callout type="info" */>}}
|
||||||
|
请访问 GitHub 查看最新版本
|
||||||
|
{{</* /callout */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Warning
|
||||||
|
|
||||||
|
{{< callout type="warning" >}}
|
||||||
|
该 API 将在下一版本中弃用
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
{{</* callout type="warning" */>}}
|
||||||
|
**标注**是一段旨在吸引注意力的简短文字
|
||||||
|
{{</* /callout */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error
|
||||||
|
|
||||||
|
{{< callout type="error" >}}
|
||||||
|
出问题了,要爆炸了
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
{{</* callout type="error" */>}}
|
||||||
|
出问题了,要爆炸了
|
||||||
|
{{</* /callout */>}}
|
||||||
|
```
|
65
exampleSite/content/docs/guide/shortcodes/cards.zh-cn.md
Normal file
65
exampleSite/content/docs/guide/shortcodes/cards.zh-cn.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
title: 卡片
|
||||||
|
linkTitle: Cards
|
||||||
|
---
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{< cards >}}
|
||||||
|
{{< card link="../callout" title="Callout" icon="warning" >}}
|
||||||
|
{{< card link="/" title="No Icon" >}}
|
||||||
|
{{< /cards >}}
|
||||||
|
|
||||||
|
{{< cards >}}
|
||||||
|
{{< card link="/" title="Image Card" image="https://source.unsplash.com/featured/800x600?landscape" subtitle="Unsplash Landscape" >}}
|
||||||
|
{{< card link="/" title="Local Image" image="/images/card-image-unprocessed.jpg" subtitle="Raw image under static directory." >}}
|
||||||
|
{{< card link="/" title="Local Image" image="images/space.jpg" subtitle="Image under assets directory, processed by Hugo." method="Resize" options="600x q80 webp" >}}
|
||||||
|
{{< /cards >}}
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* cards */>}}
|
||||||
|
{{</* card link="../callout" title="Callout" icon="warning" */>}}
|
||||||
|
{{</* card link="/" title="No Icon" */>}}
|
||||||
|
{{</* /cards */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* cards */>}}
|
||||||
|
{{</* card link="/" title="Image Card" image="https://source.unsplash.com/featured/800x600?landscape" subtitle="Unsplash Landscape" */>}}
|
||||||
|
{{</* card link="/" title="Local Image" image="/images/card-image-unprocessed.jpg" subtitle="Raw image under static directory." */>}}
|
||||||
|
{{</* card link="/" title="Local Image" image="images/space.jpg" subtitle="Image under assets directory, processed by Hugo." method="Resize" options="600x q80 webp" */>}}
|
||||||
|
{{</* /cards */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 卡片参数
|
||||||
|
|
||||||
|
| Parameter | Description |
|
||||||
|
|----------- |---------------------------------------|
|
||||||
|
| `link` | URL(内部或外部) |
|
||||||
|
| `title` | 卡片的标题 |
|
||||||
|
| `subtitle` | 字幕标题(支持 Markdown) |
|
||||||
|
| `icon` | 图标的名称 |
|
||||||
|
|
||||||
|
## Image Card
|
||||||
|
|
||||||
|
此外,该卡还支持通过以下参数添加图像和处理:
|
||||||
|
|
||||||
|
| Parameter | Description |
|
||||||
|
|----------- |---------------------------------------------|
|
||||||
|
| `image` | 指定卡片的图像 URL. |
|
||||||
|
| `method` | 设置 Hugo 的图像处理方法。 |
|
||||||
|
| `options` | 配置 Hugo 的图像处理选项。|
|
||||||
|
|
||||||
|
卡片支持三种图像:
|
||||||
|
|
||||||
|
1. 远程图片:完整网址应放置在 image 参数中
|
||||||
|
2. 静态图片:使用 Hugo 的 static/ 目录中的相对路径
|
||||||
|
3. 处理过的图片:使用 Hugo 的 assets/ 目录中的相对路径
|
||||||
|
|
||||||
|
Hextra 在构建过程中会自动检测图片是否需要处理,并根据需要应用 options 参数或默认设置(缩放,800x,质量 80,WebP 格式)。
|
||||||
|
|
||||||
|
它目前支持以下处理方法:Resize(缩放)、Fit(适应)、Fill(填充)和 Crop(裁剪)。
|
||||||
|
|
||||||
|
有关 Hugo 内置图像处理命令、方法和选项的更多信息,请参阅他们的 [Image Processing Documentation](https://gohugo.io/content-management/image-processing/).
|
43
exampleSite/content/docs/guide/shortcodes/details.zh-cn.md
Normal file
43
exampleSite/content/docs/guide/shortcodes/details.zh-cn.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
title: 详情
|
||||||
|
---
|
||||||
|
|
||||||
|
用于显示可折叠内容的内置组件。
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{% details title="Details" %}}
|
||||||
|
|
||||||
|
这是细节的内容
|
||||||
|
|
||||||
|
Markdown is **supported**.
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="Click me to reveal" closed="true" %}}
|
||||||
|
|
||||||
|
默认情况下这将被隐藏
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
{{%/* details title="Details" */%}}
|
||||||
|
|
||||||
|
这是细节的内容
|
||||||
|
|
||||||
|
**支持** Markdown
|
||||||
|
|
||||||
|
{{%/* /details */%}}
|
||||||
|
````
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
{{%/* details title="Click me to reveal" closed="true" */%}}
|
||||||
|
|
||||||
|
默认情况下这将被隐藏
|
||||||
|
|
||||||
|
{{%/* /details */%}}
|
||||||
|
````
|
33
exampleSite/content/docs/guide/shortcodes/filetree.zh-cn.md
Normal file
33
exampleSite/content/docs/guide/shortcodes/filetree.zh-cn.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: 文件树
|
||||||
|
---
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{< filetree/container >}}
|
||||||
|
{{< filetree/folder name="content" >}}
|
||||||
|
{{< filetree/file name="_index.md" >}}
|
||||||
|
{{< filetree/folder name="docs" state="closed" >}}
|
||||||
|
{{< filetree/file name="_index.md" >}}
|
||||||
|
{{< filetree/file name="introduction.md" >}}
|
||||||
|
{{< filetree/file name="introduction.fr.md" >}}
|
||||||
|
{{< /filetree/folder >}}
|
||||||
|
{{< /filetree/folder >}}
|
||||||
|
{{< filetree/file name="hugo.toml" >}}
|
||||||
|
{{< /filetree/container >}}
|
||||||
|
|
||||||
|
## 用法
|
||||||
|
|
||||||
|
```text {filename="Markdown"}
|
||||||
|
{{</* filetree/container */>}}
|
||||||
|
{{</* filetree/folder name="content" */>}}
|
||||||
|
{{</* filetree/file name="_index.md" */>}}
|
||||||
|
{{</* filetree/folder name="docs" state="closed" */>}}
|
||||||
|
{{</* filetree/file name="_index.md" */>}}
|
||||||
|
{{</* filetree/file name="introduction.md" */>}}
|
||||||
|
{{</* filetree/file name="introduction.fr.md" */>}}
|
||||||
|
{{</* /filetree/folder */>}}
|
||||||
|
{{</* /filetree/folder */>}}
|
||||||
|
{{</* filetree/file name="hugo.toml" */>}}
|
||||||
|
{{</* /filetree/container */>}}
|
||||||
|
```
|
46
exampleSite/content/docs/guide/shortcodes/icon.zh-cn.md
Normal file
46
exampleSite/content/docs/guide/shortcodes/icon.zh-cn.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: 图标
|
||||||
|
---
|
||||||
|
|
||||||
|
要内联使用此短代码,需要在配置中启用内联短代码:
|
||||||
|
|
||||||
|
```yaml {filename="hugo.yaml"}
|
||||||
|
enableInlineShortcodes: true
|
||||||
|
```
|
||||||
|
|
||||||
|
可用图标列表可以在以下位置找到 [`data/icons.yaml`](https://github.com/imfing/hextra/blob/main/data/icons.yaml).
|
||||||
|
|
||||||
|
<!--more-->
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{< icon "academic-cap" >}}
|
||||||
|
{{< icon "cake" >}}
|
||||||
|
{{< icon "gift" >}}
|
||||||
|
{{< icon "sparkles" >}}
|
||||||
|
|
||||||
|
## 用法
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* icon "github" */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
[Heroicons](https://v1.heroicons.com/) v1 轮廓图标开箱即用
|
||||||
|
|
||||||
|
### 如何添加自己的图标
|
||||||
|
|
||||||
|
创建 `data/icons.yaml` 文件,然后按以下格式添加您自己的 SVG 图标:
|
||||||
|
|
||||||
|
```yaml {filename="data/icons.yaml"}
|
||||||
|
your-icon: <svg>your icon svg content</svg>
|
||||||
|
```
|
||||||
|
|
||||||
|
然后可以在短代码中使用它,如下所示:
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* icon "your-icon" */>}}
|
||||||
|
|
||||||
|
{{</* card icon="your-icon" */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
提示:[Iconify Design](https://iconify.design/) 是为您的网站查找 SVG 图标的好地方
|
42
exampleSite/content/docs/guide/shortcodes/steps.zh-cn.md
Normal file
42
exampleSite/content/docs/guide/shortcodes/steps.zh-cn.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
title: 步骤
|
||||||
|
---
|
||||||
|
|
||||||
|
A built-in component to display a series of steps.
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{% steps %}}
|
||||||
|
|
||||||
|
### 第一步
|
||||||
|
|
||||||
|
这是第一步。
|
||||||
|
|
||||||
|
### 第二步
|
||||||
|
|
||||||
|
这是第二步。
|
||||||
|
|
||||||
|
### 第三步
|
||||||
|
|
||||||
|
这是第三步。
|
||||||
|
|
||||||
|
{{% /steps %}}
|
||||||
|
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
|
||||||
|
将 Markdown h3 标题放入 `steps` 短代码中。
|
||||||
|
|
||||||
|
```
|
||||||
|
{{%/* steps */%}}
|
||||||
|
|
||||||
|
### Step 1
|
||||||
|
|
||||||
|
This is the first step.
|
||||||
|
|
||||||
|
### Step 2
|
||||||
|
|
||||||
|
This is the second step.
|
||||||
|
|
||||||
|
{{%/* /steps */%}}
|
||||||
|
```
|
93
exampleSite/content/docs/guide/shortcodes/tabs.zh-cn.md
Normal file
93
exampleSite/content/docs/guide/shortcodes/tabs.zh-cn.md
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
---
|
||||||
|
title: 标签页
|
||||||
|
next: /docs/guide/deploy-site
|
||||||
|
---
|
||||||
|
|
||||||
|
## 示例
|
||||||
|
|
||||||
|
{{< tabs items="JSON,YAML,TOML" >}}
|
||||||
|
|
||||||
|
{{< tab >}}**JSON**: JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax.{{< /tab >}}
|
||||||
|
{{< tab >}}**YAML**: YAML is a human-readable data serialization language.{{< /tab >}}
|
||||||
|
{{< tab >}}**TOML**: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.{{< /tab >}}
|
||||||
|
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
|
||||||
|
### 默认情况下
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* tabs items="JSON,YAML,TOML" */>}}
|
||||||
|
|
||||||
|
{{</* tab */>}}**JSON**: JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax.{{</* /tab */>}}
|
||||||
|
{{</* tab */>}}**YAML**: YAML is a human-readable data serialization language.{{</* /tab */>}}
|
||||||
|
{{</* tab */>}}**TOML**: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.{{</* /tab */>}}
|
||||||
|
|
||||||
|
{{</* /tabs */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 指定索引
|
||||||
|
|
||||||
|
使用 `defaultIndex` 属性指定选定的选项卡。索引从 0 开始。
|
||||||
|
|
||||||
|
```
|
||||||
|
{{</* tabs items="JSON,YAML,TOML" defaultIndex="1" */>}}
|
||||||
|
|
||||||
|
{{</* tab */>}}**JSON**: JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax.{{</* /tab */>}}
|
||||||
|
{{</* tab */>}}**YAML**: YAML is a human-readable data serialization language.{{</* /tab */>}}
|
||||||
|
{{</* tab */>}}**TOML**: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.{{</* /tab */>}}
|
||||||
|
|
||||||
|
{{</* /tabs */>}}
|
||||||
|
```
|
||||||
|
|
||||||
|
默认为 `YAML`
|
||||||
|
|
||||||
|
{{< tabs items="JSON,YAML,TOML" defaultIndex="1" >}}
|
||||||
|
|
||||||
|
{{< tab >}}**JSON**: JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax.{{< /tab >}}
|
||||||
|
{{< tab >}}**YAML**: YAML is a human-readable data serialization language.{{< /tab >}}
|
||||||
|
{{< tab >}}**TOML**: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.{{< /tab >}}
|
||||||
|
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
|
|
||||||
|
### 使用 Markdown
|
||||||
|
|
||||||
|
还支持包括代码块的 Markdown 语法:
|
||||||
|
|
||||||
|
````
|
||||||
|
{{</* tabs items="JSON,YAML,TOML" */>}}
|
||||||
|
|
||||||
|
{{</* tab */>}}
|
||||||
|
```json
|
||||||
|
{ "hello": "world" }
|
||||||
|
```
|
||||||
|
{{</* /tab */>}}
|
||||||
|
|
||||||
|
... add other tabs similarly
|
||||||
|
|
||||||
|
{{</* /tabs */>}}
|
||||||
|
````
|
||||||
|
|
||||||
|
{{< tabs items="JSON,YAML,TOML" >}}
|
||||||
|
|
||||||
|
{{< tab >}}
|
||||||
|
```json
|
||||||
|
{ "hello": "world" }
|
||||||
|
```
|
||||||
|
{{< /tab >}}
|
||||||
|
|
||||||
|
{{< tab >}}
|
||||||
|
```yaml
|
||||||
|
hello: world
|
||||||
|
```
|
||||||
|
{{< /tab >}}
|
||||||
|
|
||||||
|
{{< tab >}}
|
||||||
|
```toml
|
||||||
|
hello = "world"
|
||||||
|
```
|
||||||
|
{{< /tab >}}
|
||||||
|
|
||||||
|
{{< /tabs >}}
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: Showcase
|
title: Showcase
|
||||||
description: "Open source projects powered by Hextra."
|
description: "Open source projects powered by Hextra"
|
||||||
toc: false
|
toc: false
|
||||||
layout: wide
|
layout: wide
|
||||||
---
|
---
|
||||||
@ -8,13 +8,77 @@ layout: wide
|
|||||||
<div class="hx-mt-4"></div>
|
<div class="hx-mt-4"></div>
|
||||||
|
|
||||||
<p class="hx-mb-12 hx-text-center hx-text-lg hx-text-gray-500 dark:hx-text-gray-400">
|
<p class="hx-mb-12 hx-text-center hx-text-lg hx-text-gray-500 dark:hx-text-gray-400">
|
||||||
Open source projects powered by Hextra.
|
Open source projects powered by Hextra
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{{< cards >}}
|
{{< cards >}}
|
||||||
{{< card link="https://developers.osuny.org" title="Osuny" image="https://raw.githubusercontent.com/noesya/osuny-developers/main/static/images/showcase-hextra/screenshot.png" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
|
||||||
{{< card link="https://porter.sh/" title="Porter" image="https://repository-images.githubusercontent.com/155893691/aa249c80-fcf3-11ea-93b0-30079e8d7de4" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
{{< card
|
||||||
{{< card link="https://lutheranconfessions.org/" title="LutheranConfessions" image="https://github.com/imfing/hextra/assets/5097752/ad6625e4-88cd-4cad-b102-5399997d0359" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
link="https://github.com/axivo/website"
|
||||||
{{< card link="https://github.com/imfing/hextra-starter-template/" title="Hextra Starter Template" image="https://user-images.githubusercontent.com/5097752/263551418-c403b9a9-a76c-47a6-8466-513d772ef0b7.jpg" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
title="AXIVO Docs"
|
||||||
{{< card link="https://developers.clever-cloud.com/" title="Clever Cloud Documentation" image="https://cellar-c2.services.clever-cloud.com/documentation/doc-screenshot.png" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
image="https://github.com/imfing/hextra/assets/19806136/f22f0710-23a0-430b-8bad-616283b8a3e5"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/infracourse/web"
|
||||||
|
title="Stanford CS 40"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/8c29470b-3994-41c8-be9a-5b41476e6f3c"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/helixml/docs"
|
||||||
|
title="Helix Docs"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/78045af0-4922-4358-ae73-624770909db6"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://developers.clever-cloud.com/"
|
||||||
|
title="Clever Cloud Documentation"
|
||||||
|
image="https://cellar-c2.services.clever-cloud.com/documentation/doc-screenshot.png" imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://owaspai.org/"
|
||||||
|
title="OWASP AI Security and Privacy Guide"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/fbb1d3a5-a0e8-4cfc-88cf-3523b0176c89"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://developers.osuny.org"
|
||||||
|
title="Osuny"
|
||||||
|
image="https://raw.githubusercontent.com/noesya/osuny-developers/main/static/images/showcase-hextra/screenshot.png"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card link="https://porter.sh/"
|
||||||
|
title="Porter"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/401abc3a-b4c3-4336-b95a-a6dd9afbc1de"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://hoa.moe/"
|
||||||
|
title="HITSZ OpenAuto"
|
||||||
|
image="https://raw.githubusercontent.com/HITSZ-OpenAuto/hoa.moe/main/static/images/showcase-new.png"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://lutheranconfessions.org/"
|
||||||
|
title="LutheranConfessions"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/ad6625e4-88cd-4cad-b102-5399997d0359"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/imfing/hextra-starter-template/"
|
||||||
|
title="Hextra Starter Template"
|
||||||
|
image="https://user-images.githubusercontent.com/5097752/263551418-c403b9a9-a76c-47a6-8466-513d772ef0b7.jpg"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
{{< /cards >}}
|
{{< /cards >}}
|
||||||
|
@ -12,8 +12,73 @@ layout: wide
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
{{< cards >}}
|
{{< cards >}}
|
||||||
{{< card link="https://developers.osuny.org" title="Osuny" image="https://raw.githubusercontent.com/noesya/osuny-developers/main/static/images/showcase-hextra/screenshot.png" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
|
||||||
{{< card link="https://porter.sh/" title="Porter" image="https://repository-images.githubusercontent.com/155893691/aa249c80-fcf3-11ea-93b0-30079e8d7de4" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
{{< card
|
||||||
{{< card link="https://lutheranconfessions.org/" title="LutheranConfessions" image="https://github.com/imfing/hextra/assets/5097752/ad6625e4-88cd-4cad-b102-5399997d0359" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
link="https://github.com/axivo/website"
|
||||||
{{< card link="https://github.com/imfing/hextra-starter-template" title="Hextra Starter Template" image="https://user-images.githubusercontent.com/5097752/263551418-c403b9a9-a76c-47a6-8466-513d772ef0b7.jpg" imageStyle="object-fit:cover; aspect-ratio:16/9;" >}}
|
title="AXIVO Docs"
|
||||||
|
image="https://github.com/imfing/hextra/assets/19806136/f22f0710-23a0-430b-8bad-616283b8a3e5"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/infracourse/web"
|
||||||
|
title="Stanford CS 40"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/8c29470b-3994-41c8-be9a-5b41476e6f3c"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/helixml/docs"
|
||||||
|
title="Helix Docs"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/78045af0-4922-4358-ae73-624770909db6"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://developers.clever-cloud.com/"
|
||||||
|
title="Clever Cloud Documentation"
|
||||||
|
image="https://cellar-c2.services.clever-cloud.com/documentation/doc-screenshot.png" imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://owaspai.org/"
|
||||||
|
title="OWASP AI Security and Privacy Guide"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/fbb1d3a5-a0e8-4cfc-88cf-3523b0176c89"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://developers.osuny.org"
|
||||||
|
title="Osuny"
|
||||||
|
image="https://raw.githubusercontent.com/noesya/osuny-developers/main/static/images/showcase-hextra/screenshot.png"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card link="https://porter.sh/"
|
||||||
|
title="Porter"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/401abc3a-b4c3-4336-b95a-a6dd9afbc1de"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://hoa.moe/"
|
||||||
|
title="HITSZ OpenAuto"
|
||||||
|
image="https://raw.githubusercontent.com/HITSZ-OpenAuto/hoa.moe/main/static/images/showcase-new.png"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://lutheranconfessions.org/"
|
||||||
|
title="LutheranConfessions"
|
||||||
|
image="https://github.com/imfing/hextra/assets/5097752/ad6625e4-88cd-4cad-b102-5399997d0359"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
|
{{< card
|
||||||
|
link="https://github.com/imfing/hextra-starter-template/"
|
||||||
|
title="Hextra Starter Template"
|
||||||
|
image="https://user-images.githubusercontent.com/5097752/263551418-c403b9a9-a76c-47a6-8466-513d772ef0b7.jpg"
|
||||||
|
imageStyle="object-fit:cover; aspect-ratio:16/9;"
|
||||||
|
>}}
|
||||||
|
|
||||||
{{< /cards >}}
|
{{< /cards >}}
|
||||||
|
@ -147,6 +147,9 @@ params:
|
|||||||
blog:
|
blog:
|
||||||
list:
|
list:
|
||||||
displayTags: true
|
displayTags: true
|
||||||
|
# date | lastmod | publishDate | title | weight
|
||||||
|
sortBy: date
|
||||||
|
sortOrder: desc # or "asc"
|
||||||
|
|
||||||
comments:
|
comments:
|
||||||
enable: false
|
enable: false
|
||||||
|
@ -208,11 +208,15 @@
|
|||||||
"group-open:before:hx-rotate-90",
|
"group-open:before:hx-rotate-90",
|
||||||
"hamburger-menu",
|
"hamburger-menu",
|
||||||
"hextra-card",
|
"hextra-card",
|
||||||
|
"hextra-card-icon",
|
||||||
|
"hextra-card-image",
|
||||||
|
"hextra-card-subtitle",
|
||||||
"hextra-cards",
|
"hextra-cards",
|
||||||
"hextra-code-block",
|
"hextra-code-block",
|
||||||
"hextra-code-copy-btn",
|
"hextra-code-copy-btn",
|
||||||
"hextra-code-copy-btn-container",
|
"hextra-code-copy-btn-container",
|
||||||
"hextra-feature-card",
|
"hextra-feature-card",
|
||||||
|
"hextra-feature-grid",
|
||||||
"hextra-filetree",
|
"hextra-filetree",
|
||||||
"hextra-filetree-folder",
|
"hextra-filetree-folder",
|
||||||
"hextra-footer",
|
"hextra-footer",
|
||||||
@ -300,7 +304,6 @@
|
|||||||
"hx-gap-x-1.5",
|
"hx-gap-x-1.5",
|
||||||
"hx-gap-y-2",
|
"hx-gap-y-2",
|
||||||
"hx-grid",
|
"hx-grid",
|
||||||
"hx-grid-cols-1",
|
|
||||||
"hx-group",
|
"hx-group",
|
||||||
"hx-group/code",
|
"hx-group/code",
|
||||||
"hx-group/copybtn",
|
"hx-group/copybtn",
|
||||||
@ -506,7 +509,6 @@
|
|||||||
"language-options",
|
"language-options",
|
||||||
"language-switcher",
|
"language-switcher",
|
||||||
"last-of-type:hx-mb-0",
|
"last-of-type:hx-mb-0",
|
||||||
"lg:hx-grid-cols-3",
|
|
||||||
"lntable",
|
"lntable",
|
||||||
"lntd",
|
"lntd",
|
||||||
"ltr:before:hx-left-0",
|
"ltr:before:hx-left-0",
|
||||||
@ -536,6 +538,7 @@
|
|||||||
"max-md:[transform:translate3d(0,-100%,0)]",
|
"max-md:[transform:translate3d(0,-100%,0)]",
|
||||||
"max-md:hx-hidden",
|
"max-md:hx-hidden",
|
||||||
"max-md:hx-min-h-[340px]",
|
"max-md:hx-min-h-[340px]",
|
||||||
|
"max-sm:hx-grid-cols-1",
|
||||||
"max-xl:hx-hidden",
|
"max-xl:hx-hidden",
|
||||||
"md:hx-aspect-[1.1/1]",
|
"md:hx-aspect-[1.1/1]",
|
||||||
"md:hx-h-[calc(100vh-var(--navbar-height)-var(--menu-height))]",
|
"md:hx-h-[calc(100vh-var(--navbar-height)-var(--menu-height))]",
|
||||||
@ -593,10 +596,10 @@
|
|||||||
"sidebar-container",
|
"sidebar-container",
|
||||||
"sm:hx-block",
|
"sm:hx-block",
|
||||||
"sm:hx-flex",
|
"sm:hx-flex",
|
||||||
"sm:hx-grid-cols-2",
|
|
||||||
"sm:hx-items-start",
|
"sm:hx-items-start",
|
||||||
"sm:hx-text-xl",
|
"sm:hx-text-xl",
|
||||||
"sm:hx-w-[110%]",
|
"sm:hx-w-[110%]",
|
||||||
|
"sm:max-lg:hx-grid-cols-2",
|
||||||
"steps",
|
"steps",
|
||||||
"subheading-anchor",
|
"subheading-anchor",
|
||||||
"success-icon",
|
"success-icon",
|
||||||
|
6
exampleSite/layouts/partials/custom/head-end.html
Normal file
6
exampleSite/layouts/partials/custom/head-end.html
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/quicklink/2.3.0/quicklink.umd.js"></script>
|
||||||
|
<script>
|
||||||
|
window.addEventListener("load", () => {
|
||||||
|
quicklink.listen();
|
||||||
|
});
|
||||||
|
</script>
|
@ -2,7 +2,7 @@ backToTop: "Zpět nahoru"
|
|||||||
changeLanguage: "Změnit jazyk"
|
changeLanguage: "Změnit jazyk"
|
||||||
changeTheme: "Změnit vzhled"
|
changeTheme: "Změnit vzhled"
|
||||||
copyCode: "Zkopírovat kód"
|
copyCode: "Zkopírovat kód"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "Tmavý"
|
dark: "Tmavý"
|
||||||
editThisPage: "Upravit tuto stránku na GitHubu →"
|
editThisPage: "Upravit tuto stránku na GitHubu →"
|
||||||
lastUpdated: "Naposledy změněno"
|
lastUpdated: "Naposledy změněno"
|
||||||
|
@ -2,7 +2,7 @@ backToTop: "Scroll to top"
|
|||||||
changeLanguage: "Change language"
|
changeLanguage: "Change language"
|
||||||
changeTheme: "Change theme"
|
changeTheme: "Change theme"
|
||||||
copyCode: "Copy code"
|
copyCode: "Copy code"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "Dark"
|
dark: "Dark"
|
||||||
editThisPage: "Edit this page on GitHub →"
|
editThisPage: "Edit this page on GitHub →"
|
||||||
lastUpdated: "Last updated on"
|
lastUpdated: "Last updated on"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Subir al inicio"
|
backToTop: "Subir al inicio"
|
||||||
changeLanguage: "Cambiar idioma"
|
changeLanguage: "Cambiar idioma"
|
||||||
changeTheme: "Cambiar tema"
|
changeTheme: "Cambiar tema"
|
||||||
copyright: "© 2023 Proyecto Hextra."
|
copyright: "© 2024 Proyecto Hextra."
|
||||||
dark: "Oscuro"
|
dark: "Oscuro"
|
||||||
editThisPage: "Edita esta página en GitHub →"
|
editThisPage: "Edita esta página en GitHub →"
|
||||||
lastUpdated: "Última actualización"
|
lastUpdated: "Última actualización"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Revenir en haut"
|
backToTop: "Revenir en haut"
|
||||||
changeLanguage: "Changer la langue"
|
changeLanguage: "Changer la langue"
|
||||||
changeTheme: "Thème d'affichage"
|
changeTheme: "Thème d'affichage"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "Sombre"
|
dark: "Sombre"
|
||||||
editThisPage: "Modifier cette page sur GitHub →"
|
editThisPage: "Modifier cette page sur GitHub →"
|
||||||
lastUpdated: "Dernière modification"
|
lastUpdated: "Dernière modification"
|
||||||
|
14
i18n/he.yaml
Normal file
14
i18n/he.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
backToTop: "גלול למעלה"
|
||||||
|
changeLanguage: "שנה שפה"
|
||||||
|
changeTheme: "שנה ערכת צבעים"
|
||||||
|
copyCode: "העתק קוד"
|
||||||
|
copyright: "© 2024 פרוייקט Hextra"
|
||||||
|
dark: "כהה"
|
||||||
|
editThisPage: "← ערוך עמוד זה בגיטהאב"
|
||||||
|
lastUpdated: "עודכן לאחרונה ב"
|
||||||
|
light: "בהיר"
|
||||||
|
noResultsFound: "לא נמצאו תוצאות."
|
||||||
|
onThisPage: "בעמוד זה"
|
||||||
|
poweredBy: "Hextra מופעל על-ידי"
|
||||||
|
readMore: "← קרא עוד"
|
||||||
|
searchPlaceholder: "חיפוש..."
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "トップにスクロール"
|
backToTop: "トップにスクロール"
|
||||||
changeLanguage: "言語を変更"
|
changeLanguage: "言語を変更"
|
||||||
changeTheme: "テーマを変更"
|
changeTheme: "テーマを変更"
|
||||||
copyright: "© 2023 Hextra プロジェクト。"
|
copyright: "© 2024 Hextra プロジェクト。"
|
||||||
dark: "ダーク"
|
dark: "ダーク"
|
||||||
editThisPage: "このページをGitHubで編集 →"
|
editThisPage: "このページをGitHubで編集 →"
|
||||||
lastUpdated: "最終更新日"
|
lastUpdated: "最終更新日"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "맨위로 스크롤"
|
backToTop: "맨위로 스크롤"
|
||||||
changeLanguage: "언어변경"
|
changeLanguage: "언어변경"
|
||||||
changeTheme: "테마변경"
|
changeTheme: "테마변경"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "어두운 테마"
|
dark: "어두운 테마"
|
||||||
editThisPage: "Github에서 편집하기 →"
|
editThisPage: "Github에서 편집하기 →"
|
||||||
lastUpdated: "마지막 수정일자"
|
lastUpdated: "마지막 수정일자"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Gå til toppen"
|
backToTop: "Gå til toppen"
|
||||||
changeLanguage: "Endre språk"
|
changeLanguage: "Endre språk"
|
||||||
changeTheme: "Endre tema"
|
changeTheme: "Endre tema"
|
||||||
copyright: "© 2023 Hextra-prosjektet."
|
copyright: "© 2024 Hextra-prosjektet."
|
||||||
dark: "Mørk"
|
dark: "Mørk"
|
||||||
editThisPage: "Rediger denne siden på GitHub →"
|
editThisPage: "Rediger denne siden på GitHub →"
|
||||||
lastUpdated: "Sist oppdatert"
|
lastUpdated: "Sist oppdatert"
|
||||||
|
14
i18n/nl.yaml
Normal file
14
i18n/nl.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
backToTop: "Terug naar boven"
|
||||||
|
changeLanguage: "Taal veranderen"
|
||||||
|
changeTheme: "Thema aanpassen"
|
||||||
|
copyCode: "Kopieer code"
|
||||||
|
copyright: "© 2024 Hextra Project."
|
||||||
|
dark: "Donker"
|
||||||
|
editThisPage: "Bewerk deze pagina op GitHub →"
|
||||||
|
lastUpdated: "Laatst bijgewerkt op"
|
||||||
|
light: "Licht"
|
||||||
|
noResultsFound: "Geen resultaten gevonden."
|
||||||
|
onThisPage: "Op deze pagina"
|
||||||
|
poweredBy: "Mogelijk gemaakt door Hextra"
|
||||||
|
readMore: "Lees meer →"
|
||||||
|
searchPlaceholder: "Zoeken..."
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Gå til toppen"
|
backToTop: "Gå til toppen"
|
||||||
changeLanguage: "Endre språk"
|
changeLanguage: "Endre språk"
|
||||||
changeTheme: "Endre tema"
|
changeTheme: "Endre tema"
|
||||||
copyright: "© 2023 Hextra-prosjektet."
|
copyright: "© 2024 Hextra-prosjektet."
|
||||||
dark: "Mørk"
|
dark: "Mørk"
|
||||||
editThisPage: "Rediger denne sida på GitHub →"
|
editThisPage: "Rediger denne sida på GitHub →"
|
||||||
lastUpdated: "Sist oppdatert"
|
lastUpdated: "Sist oppdatert"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Voltar ao topo"
|
backToTop: "Voltar ao topo"
|
||||||
changeLanguage: "Mudar a língua"
|
changeLanguage: "Mudar a língua"
|
||||||
changeTheme: "Mudar tema"
|
changeTheme: "Mudar tema"
|
||||||
copyright: "© 2023 Projecto Hextra."
|
copyright: "© 2024 Projecto Hextra."
|
||||||
dark: "Escuro"
|
dark: "Escuro"
|
||||||
editThisPage: "Edita esta página no GitHub →"
|
editThisPage: "Edita esta página no GitHub →"
|
||||||
lastUpdated: "Última modificação"
|
lastUpdated: "Última modificação"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Tembeza hadi juu"
|
backToTop: "Tembeza hadi juu"
|
||||||
changeLanguage: "Badilisha lugha"
|
changeLanguage: "Badilisha lugha"
|
||||||
changeTheme: "Badilisha mandhari"
|
changeTheme: "Badilisha mandhari"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "Meusi"
|
dark: "Meusi"
|
||||||
editThisPage: "Hariri ukurasa huu kwenye GitHub →"
|
editThisPage: "Hariri ukurasa huu kwenye GitHub →"
|
||||||
lastUpdated: "Ilisasishwa mwisho"
|
lastUpdated: "Ilisasishwa mwisho"
|
||||||
|
14
i18n/uk.yaml
Normal file
14
i18n/uk.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
backToTop: "Прокрутити до початку"
|
||||||
|
changeLanguage: "Змінити мову"
|
||||||
|
changeTheme: "Змінити тему"
|
||||||
|
copyCode: "Скопіювати код"
|
||||||
|
copyright: "2024 Проєкт Hextra."
|
||||||
|
dark: "Темна"
|
||||||
|
editThisPage: "Редагувати цю сторінку на Github →"
|
||||||
|
lastUpdated: "Востаннє оновлено"
|
||||||
|
light: "Світла"
|
||||||
|
noResultsFound: "Не знайдено результатів"
|
||||||
|
onThisPage: "На цій сторінці"
|
||||||
|
poweredBy: "Працює завдяки Hextra"
|
||||||
|
readMore: "Читати більше →"
|
||||||
|
searchPlaceholder: "Пошук..."
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "Lướt lên đầu trang"
|
backToTop: "Lướt lên đầu trang"
|
||||||
changeLanguage: "Đổi ngôn ngữ"
|
changeLanguage: "Đổi ngôn ngữ"
|
||||||
changeTheme: "Đổi chủ đề"
|
changeTheme: "Đổi chủ đề"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "Tối"
|
dark: "Tối"
|
||||||
editThisPage: "Sửa trang này trên GitHub →"
|
editThisPage: "Sửa trang này trên GitHub →"
|
||||||
lastUpdated: "Lần cuối cập nhật lúc"
|
lastUpdated: "Lần cuối cập nhật lúc"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "返回顶部"
|
backToTop: "返回顶部"
|
||||||
changeLanguage: "切换语言"
|
changeLanguage: "切换语言"
|
||||||
changeTheme: "切换主题"
|
changeTheme: "切换主题"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "深色"
|
dark: "深色"
|
||||||
editThisPage: "在 GitHub 上编辑此页 →"
|
editThisPage: "在 GitHub 上编辑此页 →"
|
||||||
lastUpdated: "最后更新于"
|
lastUpdated: "最后更新于"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
backToTop: "返回頂部"
|
backToTop: "返回頂部"
|
||||||
changeLanguage: "切換語言"
|
changeLanguage: "切換語言"
|
||||||
changeTheme: "切換主題"
|
changeTheme: "切換主題"
|
||||||
copyright: "© 2023 Hextra Project."
|
copyright: "© 2024 Hextra Project."
|
||||||
dark: "深色"
|
dark: "深色"
|
||||||
editThisPage: "在 GitHub 上編輯此頁 →"
|
editThisPage: "在 GitHub 上編輯此頁 →"
|
||||||
lastUpdated: "最後更新於"
|
lastUpdated: "最後更新於"
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
{{- if or (eq .Site.Params.footer.enable nil) (.Site.Params.footer.enable) }}
|
{{- if or (eq .Site.Params.footer.enable nil) (.Site.Params.footer.enable) }}
|
||||||
{{ partial "footer.html" . }}
|
{{ partial "footer.html" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</body>
|
|
||||||
{{ partial "scripts.html" . }}
|
{{ partial "scripts.html" . }}
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
<br class="hx-mt-1.5 hx-text-sm" />
|
<br class="hx-mt-1.5 hx-text-sm" />
|
||||||
<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>
|
<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>
|
||||||
<div class="content">{{ .Content }}</div>
|
<div class="content">{{ .Content }}</div>
|
||||||
{{ range .Pages.ByDate.Reverse }}
|
{{- $pages := partial "utils/sort-pages" (dict "page" . "by" site.Params.blog.list.sortBy "order" site.Params.blog.list.sortOrder) -}}
|
||||||
|
{{- range $pages }}
|
||||||
<div class="hx-mb-10">
|
<div class="hx-mb-10">
|
||||||
<h3><a style="color: inherit; text-decoration: none;" class="hx-block hx-font-semibold hx-mt-8 hx-text-2xl " href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
|
<h3><a style="color: inherit; text-decoration: none;" class="hx-block hx-font-semibold hx-mt-8 hx-text-2xl " href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
|
||||||
{{- if site.Params.blog.list.displayTags -}}
|
{{- if site.Params.blog.list.displayTags -}}
|
||||||
@ -25,9 +26,9 @@
|
|||||||
</p>
|
</p>
|
||||||
<p class="hx-opacity-50 hx-text-sm hx-mt-4 hx-leading-7">{{ partial "utils/format-date" .Date }}</p>
|
<p class="hx-opacity-50 hx-text-sm hx-mt-4 hx-leading-7">{{ partial "utils/format-date" .Date }}</p>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end -}}
|
||||||
</main>
|
</main>
|
||||||
</article>
|
</article>
|
||||||
<div class="max-xl:hx-hidden hx-h-0 hx-w-64 hx-shrink-0"></div>
|
<div class="max-xl:hx-hidden hx-h-0 hx-w-64 hx-shrink-0"></div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{- end -}}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
{{- if (default true .Params.breadcrumbs) }}
|
||||||
<div class="hx-mt-1.5 hx-flex hx-items-center hx-gap-1 hx-overflow-hidden hx-text-sm hx-text-gray-500 dark:hx-text-gray-400 contrast-more:hx-text-current">
|
<div class="hx-mt-1.5 hx-flex hx-items-center hx-gap-1 hx-overflow-hidden hx-text-sm hx-text-gray-500 dark:hx-text-gray-400 contrast-more:hx-text-current">
|
||||||
{{- range .Ancestors.Reverse }}
|
{{- range .Ancestors.Reverse }}
|
||||||
{{- if not .IsHome }}
|
{{- if not .IsHome }}
|
||||||
<div class="hx-whitespace-nowrap hx-transition-colors hx-min-w-[24px] hx-overflow-hidden hx-text-ellipsis hover:hx-text-gray-900 dark:hover:hx-text-gray-100">
|
<div class="hx-whitespace-nowrap hx-transition-colors hx-min-w-[24px] hx-overflow-hidden hx-text-ellipsis hover:hx-text-gray-900 dark:hover:hx-text-gray-100">
|
||||||
<a href="{{ .Permalink }}">{{- partial "utils/title" . -}}</a>
|
<a href="{{ .RelPermalink }}">{{- partial "utils/title" . -}}</a>
|
||||||
</div>
|
</div>
|
||||||
{{- partial "utils/icon.html" (dict "name" "chevron-right" "attributes" "class=\"hx-w-3.5 hx-shrink-0 rtl:-hx-rotate-180\"") -}}
|
{{- partial "utils/icon.html" (dict "name" "chevron-right" "attributes" "class=\"hx-w-3.5 hx-shrink-0 rtl:-hx-rotate-180\"") -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
@ -11,3 +12,4 @@
|
|||||||
{{- partial "utils/title" . -}}
|
{{- partial "utils/title" . -}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{{ end -}}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{{- $enableFooterSwitches := .Scratch.Get "enableFooterSwitches" | default false -}}
|
{{- $enableFooterSwitches := .Scratch.Get "enableFooterSwitches" | default false -}}
|
||||||
{{- $displayThemeToggle := site.Params.theme.displayToggle | default true -}}
|
{{- $displayThemeToggle := site.Params.theme.displayToggle | default true -}}
|
||||||
|
|
||||||
{{- $copyright := (T "copyright") | default "© 2023 Hextra." -}}
|
{{- $copyright := (T "copyright") | default "© 2024 Hextra." -}}
|
||||||
{{- $poweredBy := (T "poweredBy") | default "Powered by Hextra" -}}
|
{{- $poweredBy := (T "poweredBy") | default "Powered by Hextra" -}}
|
||||||
|
|
||||||
{{- $footerWidth := "hx-max-w-screen-xl" -}}
|
{{- $footerWidth := "hx-max-w-screen-xl" -}}
|
||||||
@ -20,7 +20,7 @@
|
|||||||
{{- partial "language-switch.html" (dict "context" .) -}}
|
{{- partial "language-switch.html" (dict "context" .) -}}
|
||||||
{{- with $displayThemeToggle }}{{ partial "theme-toggle.html" }}{{ end -}}
|
{{- with $displayThemeToggle }}{{ partial "theme-toggle.html" }}{{ end -}}
|
||||||
</div>
|
</div>
|
||||||
{{- if or site.IsMultiLingual $displayThemeToggle -}}
|
{{- if or hugo.IsMultilingual $displayThemeToggle -}}
|
||||||
<hr class="dark:hx-border-neutral-800" />
|
<hr class="dark:hx-border-neutral-800" />
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
{{- $changeLanguage := (T "changeLanguage") | default "Change language" -}}
|
{{- $changeLanguage := (T "changeLanguage") | default "Change language" -}}
|
||||||
|
|
||||||
{{- if site.IsMultiLingual -}}
|
{{- if hugo.IsMultilingual -}}
|
||||||
<div class="hx-flex hx-justify-items-start {{ if $grow }}hx-grow{{ end }}">
|
<div class="hx-flex hx-justify-items-start {{ if $grow }}hx-grow{{ end }}">
|
||||||
<button
|
<button
|
||||||
title="{{ $changeLanguage }}"
|
title="{{ $changeLanguage }}"
|
||||||
|
54
layouts/partials/shortcodes/card.html
Normal file
54
layouts/partials/shortcodes/card.html
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
{{- $page := .page -}}
|
||||||
|
{{- $link := .link -}}
|
||||||
|
{{- $title := .title -}}
|
||||||
|
{{- $icon := .icon -}}
|
||||||
|
{{- $subtitle := .subtitle -}}
|
||||||
|
{{- $image := .image -}}
|
||||||
|
{{- $width := .width -}}
|
||||||
|
{{- $height := .height -}}
|
||||||
|
{{- $imageStyle := .imageStyle -}}
|
||||||
|
|
||||||
|
{{ $linkClass := "hover:hx-border-gray-300 hx-bg-transparent hx-shadow-sm dark:hx-border-neutral-800 hover:hx-bg-slate-50 hover:hx-shadow-md dark:hover:hx-border-neutral-700 dark:hover:hx-bg-neutral-900" }}
|
||||||
|
{{- with $image -}}
|
||||||
|
{{ $linkClass = "hover:hx-border-gray-300 hx-bg-gray-100 hx-shadow dark:hx-border-neutral-700 dark:hx-bg-neutral-800 dark:hx-text-gray-50 hover:hx-shadow-lg dark:hover:hx-border-neutral-500 dark:hover:hx-bg-neutral-700" }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $external := strings.HasPrefix $link "http" -}}
|
||||||
|
{{- $href := cond (strings.HasPrefix $link "/") ($link | relURL) $link -}}
|
||||||
|
|
||||||
|
|
||||||
|
<a
|
||||||
|
class="hextra-card hx-group hx-flex hx-flex-col hx-justify-start hx-overflow-hidden hx-rounded-lg hx-border hx-border-gray-200 hx-text-current hx-no-underline dark:hx-shadow-none hover:hx-shadow-gray-100 dark:hover:hx-shadow-none hx-shadow-gray-100 active:hx-shadow-sm active:hx-shadow-gray-200 hx-transition-all hx-duration-200 {{ $linkClass }}"
|
||||||
|
{{- if $link -}}
|
||||||
|
href="{{ $href }}"
|
||||||
|
{{ with $external }}target="_blank" rel="noreferrer"{{ end -}}
|
||||||
|
{{- end -}}
|
||||||
|
>
|
||||||
|
{{- with $image -}}
|
||||||
|
<img
|
||||||
|
alt="{{ $title }}"
|
||||||
|
class="hextra-card-image"
|
||||||
|
loading="lazy"
|
||||||
|
decoding="async"
|
||||||
|
src="{{ $image | safeURL }}"
|
||||||
|
{{ with $width }}width="{{ . }}"{{ end }}
|
||||||
|
{{ with $height }}height="{{ . }}"{{ end }}
|
||||||
|
{{ with $imageStyle }}style="{{ . | safeCSS }}"{{ end }}
|
||||||
|
/>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $padding := "hx-p-4" -}}
|
||||||
|
{{- with $subtitle -}}
|
||||||
|
{{- $padding = "hx-pt-4 hx-px-4" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
<span class="hextra-card-icon hx-flex hx-font-semibold hx-items-start hx-gap-2 {{ $padding }} hx-text-gray-700 hover:hx-text-gray-900 dark:hx-text-neutral-200 dark:hover:hx-text-neutral-50">
|
||||||
|
{{- with $icon }}{{ partial "utils/icon.html" (dict "name" $icon) -}}{{- end -}}
|
||||||
|
{{- $title -}}
|
||||||
|
</span>
|
||||||
|
{{- with $subtitle -}}
|
||||||
|
<div class="hextra-card-subtitle hx-line-clamp-3 hx-text-sm hx-font-normal hx-text-gray-500 dark:hx-text-gray-400 hx-px-4 hx-mb-4 hx-mt-2">{{- $subtitle | markdownify -}}</div>
|
||||||
|
{{- end -}}
|
||||||
|
</a>
|
||||||
|
{{- /* Strip trailing newline. */ -}}
|
@ -43,9 +43,9 @@
|
|||||||
{{ $switchesClass := cond $disableSidebar "md:hx-hidden" "" -}}
|
{{ $switchesClass := cond $disableSidebar "md:hx-hidden" "" -}}
|
||||||
{{ $displayThemeToggle := (site.Params.theme.displayToggle | default true) -}}
|
{{ $displayThemeToggle := (site.Params.theme.displayToggle | default true) -}}
|
||||||
|
|
||||||
{{ if or site.IsMultiLingual $displayThemeToggle }}
|
{{ if or hugo.IsMultilingual $displayThemeToggle }}
|
||||||
<div class="{{ $switchesClass }} {{ with site.IsMultiLingual }}hx-justify-end{{ end }} hx-sticky hx-bottom-0 hx-bg-white dark:hx-bg-dark hx-mx-4 hx-py-4 hx-shadow-[0_-12px_16px_#fff] hx-flex hx-items-center hx-gap-2 dark:hx-border-neutral-800 dark:hx-shadow-[0_-12px_16px_#111] contrast-more:hx-border-neutral-400 contrast-more:hx-shadow-none contrast-more:dark:hx-shadow-none hx-border-t" data-toggle-animation="show">
|
<div class="{{ $switchesClass }} {{ with hugo.IsMultilingual }}hx-justify-end{{ end }} hx-sticky hx-bottom-0 hx-bg-white dark:hx-bg-dark hx-mx-4 hx-py-4 hx-shadow-[0_-12px_16px_#fff] hx-flex hx-items-center hx-gap-2 dark:hx-border-neutral-800 dark:hx-shadow-[0_-12px_16px_#111] contrast-more:hx-border-neutral-400 contrast-more:hx-shadow-none contrast-more:dark:hx-shadow-none hx-border-t" data-toggle-animation="show">
|
||||||
{{- with site.IsMultiLingual -}}
|
{{- with hugo.IsMultilingual -}}
|
||||||
{{- partial "language-switch" (dict "context" $context "grow" true) -}}
|
{{- partial "language-switch" (dict "context" $context "grow" true) -}}
|
||||||
{{- with $displayThemeToggle }}{{ partial "theme-toggle" (dict "hideLabel" true) }}{{ end -}}
|
{{- with $displayThemeToggle }}{{ partial "theme-toggle" (dict "hideLabel" true) }}{{ end -}}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
|
21
layouts/partials/utils/file-path.html
Normal file
21
layouts/partials/utils/file-path.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{{/* This utility is used to get the file path from absolute, relative path or URL. */}}
|
||||||
|
|
||||||
|
{{- $path := .path -}}
|
||||||
|
{{- $page := .page -}}
|
||||||
|
|
||||||
|
{{- $isLocal := not (urls.Parse $path).Scheme -}}
|
||||||
|
{{- $isPage := and (eq $page.Kind "page") (not $page.BundleType) -}}
|
||||||
|
{{- $startsWithSlash := hasPrefix $path "/" -}}
|
||||||
|
{{- $startsWithRelative := hasPrefix $path "../" -}}
|
||||||
|
|
||||||
|
{{- if and $path $isLocal -}}
|
||||||
|
{{- if $startsWithSlash -}}
|
||||||
|
{{/* File under static directory */}}
|
||||||
|
{{- $path = (relURL (strings.TrimPrefix "/" $path)) -}}
|
||||||
|
{{- else if and $isPage (not $startsWithRelative) -}}
|
||||||
|
{{/* File is a sibling to the individual page file */}}
|
||||||
|
{{ $path = (printf "../%s" $path) }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return $path -}}
|
32
layouts/partials/utils/sort-pages.html
Normal file
32
layouts/partials/utils/sort-pages.html
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{{- $page := .page -}}
|
||||||
|
{{- $by := .by | default "weight" -}}
|
||||||
|
{{- $order := .order | default "asc" -}}
|
||||||
|
|
||||||
|
{{- $pages := slice }}
|
||||||
|
|
||||||
|
{{- if eq $by "weight" }}
|
||||||
|
{{- $pages = $page.Pages.ByWeight }}
|
||||||
|
{{- else if eq $by "date" }}
|
||||||
|
{{- $pages = $page.Pages.ByDate }}
|
||||||
|
{{- else if eq $by "title" }}
|
||||||
|
{{- $pages = $page.Pages.ByTitle }}
|
||||||
|
{{- else if eq $by "expiryDate" }}
|
||||||
|
{{- $pages = $page.Pages.ByExpiryDate }}
|
||||||
|
{{- else if eq $by "publishDate" }}
|
||||||
|
{{- $pages = $page.Pages.ByPublishDate }}
|
||||||
|
{{- else if eq $by "lastmod" }}
|
||||||
|
{{- $pages = $page.Pages.ByLastmod }}
|
||||||
|
{{- else if eq $by "linkTitle" }}
|
||||||
|
{{- $pages = $page.Pages.ByLinkTitle }}
|
||||||
|
{{- else if eq $by "length" }}
|
||||||
|
{{- $pages = $page.Pages.ByLength }}
|
||||||
|
{{- else }}
|
||||||
|
{{- warnf "sort-pages: unknown sort field %q" $by -}}
|
||||||
|
{{- $pages = $page.Pages }}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- if eq $order "desc" }}
|
||||||
|
{{- $pages = $pages.Reverse }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return $pages -}}
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<div class="hx-w-full hx-min-w-0 hx-leading-7">
|
<div class="hx-w-full hx-min-w-0 hx-leading-7">
|
||||||
<div class="hx-mt-6 hx-leading-7 first:hx-mt-0">
|
<div class="hx-mt-6 hx-leading-7 first:hx-mt-0">
|
||||||
{{ .Inner | markdownify }}
|
{{ .InnerDeindent | markdownify }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -38,45 +38,15 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{ $linkClass := "hover:hx-border-gray-300 hx-bg-transparent hx-shadow-sm dark:hx-border-neutral-800 hover:hx-bg-slate-50 hover:hx-shadow-md dark:hover:hx-border-neutral-700 dark:hover:hx-bg-neutral-900" }}
|
{{- partial "shortcodes/card" (dict
|
||||||
{{- with $image -}}
|
"page" .Page
|
||||||
{{ $linkClass = "hover:hx-border-gray-300 hx-bg-gray-100 hx-shadow dark:hx-border-neutral-700 dark:hx-bg-neutral-800 dark:hx-text-gray-50 hover:hx-shadow-lg dark:hover:hx-border-neutral-500 dark:hover:hx-bg-neutral-700" }}
|
"link" $link
|
||||||
{{- end -}}
|
"title" $title
|
||||||
|
"icon" $icon
|
||||||
{{- $external := strings.HasPrefix $link "http" -}}
|
"subtitle" $subtitle
|
||||||
{{- $href := cond (strings.HasPrefix $link "/") ($link | relURL) $link -}}
|
"image" $image
|
||||||
|
"width" $width
|
||||||
|
"height" $height
|
||||||
<a
|
"imageStyle" $imageStyle
|
||||||
class="hextra-card hx-group hx-flex hx-flex-col hx-justify-start hx-overflow-hidden hx-rounded-lg hx-border hx-border-gray-200 hx-text-current hx-no-underline dark:hx-shadow-none hover:hx-shadow-gray-100 dark:hover:hx-shadow-none hx-shadow-gray-100 active:hx-shadow-sm active:hx-shadow-gray-200 hx-transition-all hx-duration-200 {{ $linkClass }}"
|
)
|
||||||
{{- if $link -}}
|
-}}
|
||||||
href="{{ $href }}" {{ with $external }}target="_blank" rel="noreferrer"{{ end -}}
|
|
||||||
{{- end -}}
|
|
||||||
>
|
|
||||||
{{- with $image -}}
|
|
||||||
<img
|
|
||||||
alt="{{ $title }}"
|
|
||||||
loading="lazy"
|
|
||||||
decoding="async"
|
|
||||||
src="{{ $image | safeURL }}"
|
|
||||||
{{ with $width }}width="{{ . }}"{{ end }}
|
|
||||||
{{ with $height }}height="{{ . }}"{{ end }}
|
|
||||||
{{ with $imageStyle }}style="{{ . | safeCSS }}"{{ end }}
|
|
||||||
/>
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- $padding := "hx-p-4" -}}
|
|
||||||
{{- with $subtitle -}}
|
|
||||||
{{- $padding = "hx-pt-4 hx-px-4" -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
|
|
||||||
<span class="hx-flex hx-font-semibold hx-items-start hx-gap-2 {{ $padding }} hx-text-gray-700 hover:hx-text-gray-900 dark:hx-text-neutral-200 dark:hover:hx-text-neutral-50">
|
|
||||||
{{- with $icon }}{{ partial "utils/icon.html" (dict "name" $icon) -}}{{- end -}}
|
|
||||||
{{- $title -}}
|
|
||||||
</span>
|
|
||||||
{{- with $subtitle -}}
|
|
||||||
<div class="hx-line-clamp-3 hx-text-sm hx-font-normal hx-text-gray-500 dark:hx-text-gray-400 hx-px-4 hx-mb-4 hx-mt-2">{{- $subtitle | markdownify -}}</div>
|
|
||||||
{{- end -}}
|
|
||||||
</a>
|
|
||||||
{{- /* Strip trailing newline. */ -}}
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{{ $rows := .Get "rows" | default "3" }}
|
{{- $cols := .Get "cols" | default 3 -}}
|
||||||
|
|
||||||
<div class="hextra-cards hx-mt-4 hx-gap-4 hx-grid not-prose" style="--rows: {{ $rows }};">
|
<div class="hextra-cards hx-mt-4 hx-gap-4 hx-grid not-prose" style="--hextra-cards-grid-cols: {{ $cols }};">
|
||||||
{{- .Inner -}}
|
{{- .Inner -}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
{{- $style := .Get "style" -}}
|
{{- $cols := .Get "cols" | default 3 -}}
|
||||||
|
{{- $style := .Get "style" | default "" -}}
|
||||||
|
|
||||||
|
{{- $css := printf "--hextra-feature-grid-cols: %v; %s" $cols $style -}}
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="hx-grid sm:hx-grid-cols-2 lg:hx-grid-cols-3 hx-grid-cols-1 hx-gap-4 hx-w-full not-prose"
|
class="hextra-feature-grid hx-grid sm:max-lg:hx-grid-cols-2 max-sm:hx-grid-cols-1 hx-gap-4 hx-w-full not-prose"
|
||||||
{{ with $style }}style="{{ . | safeCSS }}"{{ end }}
|
{{ with $css }}style="{{ . | safeCSS }}"{{ end }}
|
||||||
>
|
>
|
||||||
{{ .Inner }}
|
{{ .Inner }}
|
||||||
</div>
|
</div>
|
||||||
|
38
layouts/shortcodes/hextra/hero-container.html
Normal file
38
layouts/shortcodes/hextra/hero-container.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{{- $class := .Get "class" -}}
|
||||||
|
{{- $cols := .Get "cols" | default 2 -}}
|
||||||
|
{{- $image := .Get "image" -}}
|
||||||
|
{{- $imageCard := .Get "imageCard" | default false -}}
|
||||||
|
{{- $imageClass := .Get "imageClass" -}}
|
||||||
|
{{- $imageLink := .Get "imageLink" -}}
|
||||||
|
{{- $imageLinkExternal := hasPrefix $imageLink "http" -}}
|
||||||
|
{{- $imageStyle := .Get "imageStyle" -}}
|
||||||
|
{{- $imageTitle := .Get "imageTitle" -}}
|
||||||
|
{{- $imageWidth := .Get "imageWidth" | default 350 -}}
|
||||||
|
{{- $imageHeight := .Get "imageHeight" | default 350 -}}
|
||||||
|
{{- $style := .Get "style" -}}
|
||||||
|
|
||||||
|
{{- $css := printf "--hextra-feature-grid-cols: %v; %s" $cols $style -}}
|
||||||
|
{{- $href := cond (hasPrefix $imageLink "/") ($imageLink | relURL) $imageLink -}}
|
||||||
|
{{- if hasPrefix $image "/" -}}
|
||||||
|
{{- $image = relURL (strings.TrimPrefix "/" $image) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="{{ $class }} hextra-feature-grid hx-grid sm:max-lg:hx-grid-cols-2 max-sm:hx-grid-cols-1 hx-gap-4 hx-w-full not-prose"
|
||||||
|
{{ with $css }}style="{{ . | safeCSS }}"{{ end }}
|
||||||
|
>
|
||||||
|
<div class="hx-w-full">
|
||||||
|
{{ .Inner }}
|
||||||
|
</div>
|
||||||
|
{{- with $image }}
|
||||||
|
<div class="hx-mx-auto">
|
||||||
|
<a
|
||||||
|
{{ with $imageLink }}href="{{ $href }}" {{ with $imageLinkExternal }} target="_blank" rel="noreferrer"{{ end }}{{ end }}
|
||||||
|
{{ with $imageStyle }}style="{{ . | safeCSS }}"{{ end }}
|
||||||
|
class="{{ $imageClass }} {{ if $imageCard }}hextra-feature-card not-prose hx-block hx-relative hx-p-6 hx-overflow-hidden hx-rounded-3xl hx-border hx-border-gray-200 hover:hx-border-gray-300 dark:hx-border-neutral-800 dark:hover:hx-border-neutral-700 before:hx-pointer-events-none before:hx-absolute before:hx-inset-0 before:hx-bg-glass-gradient{{ end }}"
|
||||||
|
>
|
||||||
|
<img src="{{ $image }}" width="{{ $imageWidth }}" height="{{ $imageHeight }}" {{ with $imageTitle }}alt="{{ $imageTitle }}"{{ end }}/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{ end -}}
|
||||||
|
</div>
|
9
layouts/shortcodes/pdf.html
Normal file
9
layouts/shortcodes/pdf.html
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{{/* Shortcode to include a PDF file in a page. */}}
|
||||||
|
|
||||||
|
{{- $path := .Get 0 -}}
|
||||||
|
{{- $url := partial "utils/file-path" (dict "page" .Page "path" $path) -}}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="hextra-pdf">
|
||||||
|
<iframe src="{{ $url | safeURL }}" width="100%" style="min-height: 32rem;" frameborder="0"></iframe>
|
||||||
|
</div>
|
@ -7,4 +7,6 @@ command = "cd exampleSite && hugo --gc --minify --themesDir ../.. -b ${DEPLOY_PR
|
|||||||
ignore = "false"
|
ignore = "false"
|
||||||
|
|
||||||
[build.environment]
|
[build.environment]
|
||||||
HUGO_VERSION = "0.117.0"
|
HUGO_VERSION = "0.126.1"
|
||||||
|
GO_VERSION = "1.22.3"
|
||||||
|
NODE_VERSION = "22.2.0"
|
||||||
|
313
package-lock.json
generated
313
package-lock.json
generated
@ -6,13 +6,13 @@
|
|||||||
"": {
|
"": {
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.19",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.38",
|
||||||
"postcss-cli": "^10.1.0",
|
"postcss-cli": "^11.0.0",
|
||||||
"postcss-import": "^15.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^3.2.5",
|
||||||
"prettier-plugin-go-template": "^0.0.13",
|
"prettier-plugin-go-template": "^0.0.15",
|
||||||
"tailwindcss": "^3.3.2"
|
"tailwindcss": "^3.4.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@alloc/quick-lru": {
|
"node_modules/@alloc/quick-lru": {
|
||||||
@ -116,6 +116,18 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@sindresorhus/merge-streams": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@tailwindcss/nesting": {
|
"node_modules/@tailwindcss/nesting": {
|
||||||
"version": "0.0.0-insiders.565cd3e",
|
"version": "0.0.0-insiders.565cd3e",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/nesting/-/nesting-0.0.0-insiders.565cd3e.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/nesting/-/nesting-0.0.0-insiders.565cd3e.tgz",
|
||||||
@ -197,9 +209,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/autoprefixer": {
|
"node_modules/autoprefixer": {
|
||||||
"version": "10.4.14",
|
"version": "10.4.19",
|
||||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
|
||||||
"integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
|
"integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -209,12 +221,16 @@
|
|||||||
{
|
{
|
||||||
"type": "tidelift",
|
"type": "tidelift",
|
||||||
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
|
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ai"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"browserslist": "^4.21.5",
|
"browserslist": "^4.23.0",
|
||||||
"caniuse-lite": "^1.0.30001464",
|
"caniuse-lite": "^1.0.30001599",
|
||||||
"fraction.js": "^4.2.0",
|
"fraction.js": "^4.3.7",
|
||||||
"normalize-range": "^0.1.2",
|
"normalize-range": "^0.1.2",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -267,9 +283,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.21.9",
|
"version": "4.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
|
||||||
"integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
|
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -286,10 +302,10 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001503",
|
"caniuse-lite": "^1.0.30001587",
|
||||||
"electron-to-chromium": "^1.4.431",
|
"electron-to-chromium": "^1.4.668",
|
||||||
"node-releases": "^2.0.12",
|
"node-releases": "^2.0.14",
|
||||||
"update-browserslist-db": "^1.0.11"
|
"update-browserslist-db": "^1.0.13"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"browserslist": "cli.js"
|
"browserslist": "cli.js"
|
||||||
@ -308,9 +324,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001587",
|
"version": "1.0.30001610",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz",
|
||||||
"integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==",
|
"integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -428,18 +444,6 @@
|
|||||||
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/dir-glob": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"path-type": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dlv": {
|
"node_modules/dlv": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||||
@ -447,9 +451,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.474",
|
"version": "1.4.738",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.474.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.738.tgz",
|
||||||
"integrity": "sha512-GsFT9gtxkFMkpHf13UeN/RFbWdLQVs4DMxA1aQv4xdUAT2qyXEoAQ0hodl2sUvWmztOlicM1UYnNPcoMdzQB5A==",
|
"integrity": "sha512-lwKft2CLFztD+vEIpesrOtCrko/TFnEJlHFdRhazU7Y/jx5qc4cqsocfVrBg4So4gGe9lvxnbLIoev47WMpg+A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
@ -468,9 +472,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fast-glob": {
|
"node_modules/fast-glob": {
|
||||||
"version": "3.3.1",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
||||||
"integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
|
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nodelib/fs.stat": "^2.0.2",
|
"@nodelib/fs.stat": "^2.0.2",
|
||||||
@ -505,16 +509,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fraction.js": {
|
"node_modules/fraction.js": {
|
||||||
"version": "4.2.0",
|
"version": "4.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
|
||||||
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
|
"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "*"
|
"node": "*"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "patreon",
|
"type": "patreon",
|
||||||
"url": "https://www.patreon.com/infusion"
|
"url": "https://github.com/sponsors/rawify"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fs-extra": {
|
"node_modules/fs-extra": {
|
||||||
@ -611,31 +615,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/globby": {
|
"node_modules/globby": {
|
||||||
"version": "13.2.2",
|
"version": "14.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz",
|
||||||
"integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
|
"integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dir-glob": "^3.0.1",
|
"@sindresorhus/merge-streams": "^2.1.0",
|
||||||
"fast-glob": "^3.3.0",
|
"fast-glob": "^3.3.2",
|
||||||
"ignore": "^5.2.4",
|
"ignore": "^5.2.4",
|
||||||
"merge2": "^1.4.1",
|
"path-type": "^5.0.0",
|
||||||
"slash": "^4.0.0"
|
"slash": "^5.1.0",
|
||||||
|
"unicorn-magic": "^0.1.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
"node": ">=18"
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/globby/node_modules/slash": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
@ -660,9 +653,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ignore": {
|
"node_modules/ignore": {
|
||||||
"version": "5.2.4",
|
"version": "5.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
|
||||||
"integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
|
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 4"
|
"node": ">= 4"
|
||||||
@ -748,9 +741,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jiti": {
|
"node_modules/jiti": {
|
||||||
"version": "1.19.1",
|
"version": "1.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz",
|
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
|
||||||
"integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==",
|
"integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"jiti": "bin/jiti.js"
|
"jiti": "bin/jiti.js"
|
||||||
@ -829,9 +822,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/nanoid": {
|
"node_modules/nanoid": {
|
||||||
"version": "3.3.6",
|
"version": "3.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||||
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
|
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -847,9 +840,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.13",
|
"version": "2.0.14",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||||
"integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
|
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/normalize-path": {
|
"node_modules/normalize-path": {
|
||||||
@ -913,12 +906,15 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/path-type": {
|
"node_modules/path-type": {
|
||||||
"version": "4.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
|
||||||
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
"integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/picocolors": {
|
"node_modules/picocolors": {
|
||||||
@ -958,9 +954,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.31",
|
"version": "8.4.38",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
|
||||||
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
|
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -977,27 +973,27 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.6",
|
"nanoid": "^3.3.7",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.2.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^10 || ^12 || >=14"
|
"node": "^10 || ^12 || >=14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss-cli": {
|
"node_modules/postcss-cli": {
|
||||||
"version": "10.1.0",
|
"version": "11.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz",
|
||||||
"integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
|
"integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chokidar": "^3.3.0",
|
"chokidar": "^3.3.0",
|
||||||
"dependency-graph": "^0.11.0",
|
"dependency-graph": "^0.11.0",
|
||||||
"fs-extra": "^11.0.0",
|
"fs-extra": "^11.0.0",
|
||||||
"get-stdin": "^9.0.0",
|
"get-stdin": "^9.0.0",
|
||||||
"globby": "^13.0.0",
|
"globby": "^14.0.0",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"postcss-load-config": "^4.0.0",
|
"postcss-load-config": "^5.0.0",
|
||||||
"postcss-reporter": "^7.0.0",
|
"postcss-reporter": "^7.0.0",
|
||||||
"pretty-hrtime": "^1.0.3",
|
"pretty-hrtime": "^1.0.3",
|
||||||
"read-cache": "^1.0.0",
|
"read-cache": "^1.0.0",
|
||||||
@ -1008,16 +1004,63 @@
|
|||||||
"postcss": "index.js"
|
"postcss": "index.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"postcss": "^8.0.0"
|
"postcss": "^8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-cli/node_modules/lilconfig": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antonk52"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-cli/node_modules/postcss-load-config": {
|
||||||
|
"version": "5.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.0.3.tgz",
|
||||||
|
"integrity": "sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ai"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"lilconfig": "^3.0.0",
|
||||||
|
"yaml": "^2.3.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 18"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"jiti": ">=1.21.0",
|
||||||
|
"postcss": ">=8.0.9"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"jiti": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"postcss": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-import": {
|
"node_modules/postcss-import": {
|
||||||
"version": "15.1.0",
|
"version": "16.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz",
|
||||||
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
"integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"postcss-value-parser": "^4.0.0",
|
"postcss-value-parser": "^4.0.0",
|
||||||
@ -1025,7 +1068,7 @@
|
|||||||
"resolve": "^1.1.7"
|
"resolve": "^1.1.7"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=18.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"postcss": "^8.0.0"
|
"postcss": "^8.0.0"
|
||||||
@ -1151,24 +1194,24 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
"node_modules/prettier": {
|
||||||
"version": "2.8.8",
|
"version": "3.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
|
||||||
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
|
"integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin-prettier.js"
|
"prettier": "bin/prettier.cjs"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.13.0"
|
"node": ">=14"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier-plugin-go-template": {
|
"node_modules/prettier-plugin-go-template": {
|
||||||
"version": "0.0.13",
|
"version": "0.0.15",
|
||||||
"resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.13.tgz",
|
"resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.15.tgz",
|
||||||
"integrity": "sha512-gG/xT5kd+kCzoMaTchXvdfBdsunyRCV6G8cgdPGPd2V5JGGKXUG7SjzBKU7jaGh2RTeblcAdBb/E+S/duOAMsA==",
|
"integrity": "sha512-WqU92E1NokWYNZ9mLE6ijoRg6LtIGdLMePt2C7UBDjXeDH9okcRI3zRqtnWR4s5AloiqyvZ66jNBAa9tmRY5EQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ulid": "^2.3.0"
|
"ulid": "^2.3.0"
|
||||||
@ -1177,7 +1220,7 @@
|
|||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"prettier": "^2.0.0"
|
"prettier": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pretty-hrtime": {
|
"node_modules/pretty-hrtime": {
|
||||||
@ -1302,9 +1345,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/source-map-js": {
|
"node_modules/source-map-js": {
|
||||||
"version": "1.0.2",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
@ -1371,9 +1414,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.3.3",
|
"version": "3.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz",
|
||||||
"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
|
"integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alloc/quick-lru": "^5.2.0",
|
"@alloc/quick-lru": "^5.2.0",
|
||||||
@ -1381,10 +1424,10 @@
|
|||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"didyoumean": "^1.2.2",
|
"didyoumean": "^1.2.2",
|
||||||
"dlv": "^1.1.3",
|
"dlv": "^1.1.3",
|
||||||
"fast-glob": "^3.2.12",
|
"fast-glob": "^3.3.0",
|
||||||
"glob-parent": "^6.0.2",
|
"glob-parent": "^6.0.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
"jiti": "^1.18.2",
|
"jiti": "^1.21.0",
|
||||||
"lilconfig": "^2.1.0",
|
"lilconfig": "^2.1.0",
|
||||||
"micromatch": "^4.0.5",
|
"micromatch": "^4.0.5",
|
||||||
"normalize-path": "^3.0.0",
|
"normalize-path": "^3.0.0",
|
||||||
@ -1419,6 +1462,23 @@
|
|||||||
"node": ">=10.13.0"
|
"node": ">=10.13.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tailwindcss/node_modules/postcss-import": {
|
||||||
|
"version": "15.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
||||||
|
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-value-parser": "^4.0.0",
|
||||||
|
"read-cache": "^1.0.0",
|
||||||
|
"resolve": "^1.1.7"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
|
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
|
||||||
"version": "6.0.13",
|
"version": "6.0.13",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
|
||||||
@ -1486,6 +1546,18 @@
|
|||||||
"ulid": "bin/cli.js"
|
"ulid": "bin/cli.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/unicorn-magic": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/universalify": {
|
"node_modules/universalify": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||||
@ -1496,9 +1568,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/update-browserslist-db": {
|
"node_modules/update-browserslist-db": {
|
||||||
"version": "1.0.11",
|
"version": "1.0.13",
|
||||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
|
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
|
||||||
"integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
|
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1564,10 +1636,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yaml": {
|
"node_modules/yaml": {
|
||||||
"version": "2.3.1",
|
"version": "2.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
|
||||||
"integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
|
"integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"yaml": "bin.mjs"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 14"
|
"node": ">= 14"
|
||||||
}
|
}
|
||||||
|
14
package.json
14
package.json
@ -7,12 +7,12 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.19",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.38",
|
||||||
"postcss-cli": "^10.1.0",
|
"postcss-cli": "^11.0.0",
|
||||||
"postcss-import": "^15.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^3.2.5",
|
||||||
"prettier-plugin-go-template": "^0.0.13",
|
"prettier-plugin-go-template": "^0.0.15",
|
||||||
"tailwindcss": "^3.3.2"
|
"tailwindcss": "^3.4.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
28
taskfile.yaml
Normal file
28
taskfile.yaml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
build:
|
||||||
|
desc: Build Hextra documentation site under `exampleSite`
|
||||||
|
cmds:
|
||||||
|
- hugo --gc --minify --themesDir=../.. --source=exampleSite
|
||||||
|
|
||||||
|
css:
|
||||||
|
depends: [build]
|
||||||
|
desc: Compile production CSS using PostCSS to `assets/css/compiled/main.css`
|
||||||
|
cmds:
|
||||||
|
- npx postcss --config postcss.config.js --env production assets/css/styles.css -o assets/css/compiled/main.css
|
||||||
|
|
||||||
|
dev:
|
||||||
|
desc: Start development server for Hextra theme
|
||||||
|
cmds:
|
||||||
|
- npm run dev:theme
|
||||||
|
|
||||||
|
libs:
|
||||||
|
desc: Download libs from CDN
|
||||||
|
cmds:
|
||||||
|
- curl -o assets/lib/flexsearch/flexsearch.bundle.min.js https://cdn.jsdelivr.net/npm/flexsearch@0.7.31/dist/flexsearch.bundle.min.js
|
||||||
|
- curl -o assets/lib/katex/katex.min.js https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js
|
||||||
|
- curl -o assets/lib/katex/katex.min.css https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css
|
||||||
|
- curl -o assets/lib/katex/auto-render.min.js https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js
|
||||||
|
- curl -o assets/lib/katex/mhchem.min.js https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/mhchem.min.js
|
||||||
|
- curl -o assets/lib/mermaid/mermaid.min.js https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.min.js
|
@ -9,7 +9,7 @@ homepage = "https://github.com/imfing/hextra/"
|
|||||||
demosite = "https://imfing.github.io/hextra/"
|
demosite = "https://imfing.github.io/hextra/"
|
||||||
tags = ["Modern", "Elegant", "Blog", "Documentation", "Responsive", "Clean", "Light", "Dark", "Minimal"]
|
tags = ["Modern", "Elegant", "Blog", "Documentation", "Responsive", "Clean", "Light", "Dark", "Minimal"]
|
||||||
features = ["Responsive", "Dark Mode", "Search", "Syntax Highlighting", "Multilingual", "Social", "Blog", "RSS", "Customization"]
|
features = ["Responsive", "Dark Mode", "Search", "Syntax Highlighting", "Multilingual", "Social", "Blog", "RSS", "Customization"]
|
||||||
min_version = "0.111.0"
|
min_version = "0.124.0"
|
||||||
|
|
||||||
[author]
|
[author]
|
||||||
name = "Xin"
|
name = "Xin"
|
||||||
|
Reference in New Issue
Block a user