mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-08 18:44:24 +00:00
Compare commits
243 Commits
v0.18.0-be
...
v0.18.6
Author | SHA1 | Date | |
---|---|---|---|
![]() |
17973c1090 | ||
![]() |
28b5bd8c58 | ||
![]() |
62f94369c9 | ||
![]() |
c9fc53a546 | ||
![]() |
946f8ca938 | ||
![]() |
ffbeb3ede7 | ||
![]() |
6dd4678339 | ||
![]() |
82090571d6 | ||
![]() |
63bfe64e71 | ||
![]() |
5121f92870 | ||
![]() |
1b95b3a265 | ||
![]() |
e8d926eca8 | ||
![]() |
2076081405 | ||
![]() |
da5b898250 | ||
![]() |
cf2f806820 | ||
![]() |
3ebbea542b | ||
![]() |
cce963aaba | ||
![]() |
4e6156cae0 | ||
![]() |
457f122861 | ||
![]() |
d94b54b90f | ||
![]() |
834ac4744b | ||
![]() |
2716af78be | ||
![]() |
3d37a93336 | ||
![]() |
1d976cb7df | ||
![]() |
4e2a5a39e9 | ||
![]() |
63ef832ab4 | ||
![]() |
f480dfa6b4 | ||
![]() |
bd85cabce9 | ||
![]() |
76a5408bda | ||
![]() |
61537afb93 | ||
![]() |
12417340f2 | ||
![]() |
b7533957b2 | ||
![]() |
15512c9448 | ||
![]() |
f69efa7ec8 | ||
![]() |
f3c392760a | ||
![]() |
d59e6ea87b | ||
![]() |
476d36d41c | ||
![]() |
0ccc0c64f4 | ||
![]() |
c5b4db6141 | ||
![]() |
6d0f917a0e | ||
![]() |
497dbe6bce | ||
![]() |
1da8133e09 | ||
![]() |
b3354a35ad | ||
![]() |
827fe5b5e1 | ||
![]() |
fc98b2d768 | ||
![]() |
dd5c6886cd | ||
![]() |
72f6f5d260 | ||
![]() |
d54fd6abf8 | ||
![]() |
5c75a78a3d | ||
![]() |
653c2b9d4b | ||
![]() |
dba91ad560 | ||
![]() |
108672e9a1 | ||
![]() |
18499d12c5 | ||
![]() |
79e97f0b5b | ||
![]() |
dba7ad3e09 | ||
![]() |
d260ada9ec | ||
![]() |
1503937c48 | ||
![]() |
585f4d7c5c | ||
![]() |
b125085315 | ||
![]() |
ee605fb4eb | ||
![]() |
2e14d200ed | ||
![]() |
de28b1b2e3 | ||
![]() |
467815e8d5 | ||
![]() |
98687a0ec1 | ||
![]() |
bc92818c53 | ||
![]() |
3fd6806549 | ||
![]() |
3f76ed2f59 | ||
![]() |
c4b9f91376 | ||
![]() |
c797a2f7a8 | ||
![]() |
c23ceafddd | ||
![]() |
e0b1b0250c | ||
![]() |
ce54758f36 | ||
![]() |
a80efa9578 | ||
![]() |
04bad29146 | ||
![]() |
8816c0c40e | ||
![]() |
b6c9ce4a9f | ||
![]() |
c8d16104d5 | ||
![]() |
215d125032 | ||
![]() |
ccdf4ab391 | ||
![]() |
8bd7d68d2e | ||
![]() |
03f1df615e | ||
![]() |
86ee2d3d2f | ||
![]() |
9c608b0583 | ||
![]() |
bdc84fb36d | ||
![]() |
4dda37ad3d | ||
![]() |
7559010b83 | ||
![]() |
75644ae046 | ||
![]() |
994ffe5ab5 | ||
![]() |
1dc016a6f8 | ||
![]() |
44e3b31c67 | ||
![]() |
3cbfd60098 | ||
![]() |
fc0715aa97 | ||
![]() |
84fff0fe8b | ||
![]() |
153ef9bf1f | ||
![]() |
bbe8f3a32c | ||
![]() |
eb7c9b5c3c | ||
![]() |
90e73ed010 | ||
![]() |
e613017c13 | ||
![]() |
6404bb84ed | ||
![]() |
55ec9acccf | ||
![]() |
0197b79427 | ||
![]() |
828e531b52 | ||
![]() |
23279d9710 | ||
![]() |
0caf473897 | ||
![]() |
8e68534b28 | ||
![]() |
0f07ccfd3f | ||
![]() |
77fad02da7 | ||
![]() |
7a9cb1b2ca | ||
![]() |
d82ed79989 | ||
![]() |
ff82ded064 | ||
![]() |
78167f2d03 | ||
![]() |
80f2084822 | ||
![]() |
a7d67e993f | ||
![]() |
317eab54f8 | ||
![]() |
cb90ef363b | ||
![]() |
f31309f863 | ||
![]() |
a76a692075 | ||
![]() |
f52f758962 | ||
![]() |
bcc3a7877e | ||
![]() |
7b52da5ce0 | ||
![]() |
e7403bd1a4 | ||
![]() |
2881eb4546 | ||
![]() |
c7cc2269ba | ||
![]() |
014158bc63 | ||
![]() |
8dcccb17ad | ||
![]() |
325a222386 | ||
![]() |
9b4f4229f7 | ||
![]() |
3b719bf145 | ||
![]() |
136d5d2e15 | ||
![]() |
1c10a00089 | ||
![]() |
a8d9401de3 | ||
![]() |
e77fa7dfbc | ||
![]() |
8d3c0cc4ce | ||
![]() |
87e04c8c4b | ||
![]() |
e1f4228c31 | ||
![]() |
4cb4bef579 | ||
![]() |
744a0f7248 | ||
![]() |
a1e48ade96 | ||
![]() |
9a2540cf04 | ||
![]() |
399f525a3f | ||
![]() |
f1c99b0ed7 | ||
![]() |
6e14e50dfd | ||
![]() |
a143f90a37 | ||
![]() |
e60b2ec4a1 | ||
![]() |
0250ef68dd | ||
![]() |
71c9c19480 | ||
![]() |
fe108c2621 | ||
![]() |
aa76036470 | ||
![]() |
1475782fa6 | ||
![]() |
aa201d561d | ||
![]() |
35a8776bae | ||
![]() |
1f000d4b23 | ||
![]() |
fa268f4541 | ||
![]() |
f9c8c85578 | ||
![]() |
f7274cd43d | ||
![]() |
b122c40148 | ||
![]() |
05fa3b795c | ||
![]() |
5f329f9271 | ||
![]() |
22f9b9ee68 | ||
![]() |
3713f73da6 | ||
![]() |
efa4933c77 | ||
![]() |
fc9be4cdcf | ||
![]() |
9060fe20fe | ||
![]() |
b4d60df133 | ||
![]() |
09d7904654 | ||
![]() |
a7d35b7b06 | ||
![]() |
f22cffcfc4 | ||
![]() |
b6ae910514 | ||
![]() |
4486dcc814 | ||
![]() |
1452109194 | ||
![]() |
512f39ed8a | ||
![]() |
39c6f922fe | ||
![]() |
e8ccd62987 | ||
![]() |
210237c42f | ||
![]() |
daa2295cea | ||
![]() |
e6d5c16f12 | ||
![]() |
e0dea81ef5 | ||
![]() |
2889f8e8b1 | ||
![]() |
ac6d3504be | ||
![]() |
fdaf7de75e | ||
![]() |
185b8b5f40 | ||
![]() |
603590e95b | ||
![]() |
9cf7825384 | ||
![]() |
d50814ab08 | ||
![]() |
97d77d0dfc | ||
![]() |
4ec4cf28de | ||
![]() |
89f869a55e | ||
![]() |
aaecdb93f8 | ||
![]() |
24ce0ed262 | ||
![]() |
70e2532434 | ||
![]() |
828e0266fc | ||
![]() |
21d7117ca1 | ||
![]() |
13d4be8086 | ||
![]() |
862f0bb95b | ||
![]() |
2d7e32369c | ||
![]() |
ac37e4269c | ||
![]() |
5287ab023a | ||
![]() |
92d1b20678 | ||
![]() |
7b08b0b0ac | ||
![]() |
7047b9c5f5 | ||
![]() |
6c9cb40f1e | ||
![]() |
74901ecbf5 | ||
![]() |
598018feb7 | ||
![]() |
ca6a2bed82 | ||
![]() |
41cabcffd0 | ||
![]() |
3424565e95 | ||
![]() |
7b037bae46 | ||
![]() |
6d257e1aca | ||
![]() |
a3c288fb1d | ||
![]() |
3d33aa41da | ||
![]() |
4ba0104dc8 | ||
![]() |
3ab1d6b123 | ||
![]() |
5cca744f10 | ||
![]() |
c56d35b153 | ||
![]() |
b9df91cad8 | ||
![]() |
d05204a61b | ||
![]() |
c5376ea8c6 | ||
![]() |
ccfb4a8f82 | ||
![]() |
b99a9168bd | ||
![]() |
26fe455cc3 | ||
![]() |
eb66a24177 | ||
![]() |
5610ed67e5 | ||
![]() |
73f14989d8 | ||
![]() |
dc4ca0e862 | ||
![]() |
40b47bc782 | ||
![]() |
1a1c998f3f | ||
![]() |
f5c44ab79f | ||
![]() |
3da6951801 | ||
![]() |
f80241548a | ||
![]() |
65793ef70e | ||
![]() |
754da19c7c | ||
![]() |
73dc16f469 | ||
![]() |
91be9969e4 | ||
![]() |
792d7417b5 | ||
![]() |
ee0a50c4c2 | ||
![]() |
13554854d9 | ||
![]() |
1bdfc42d9e | ||
![]() |
f0ddacabe9 | ||
![]() |
de76908ad9 | ||
![]() |
8f2b4d7a36 | ||
![]() |
1e137fa213 | ||
![]() |
3035caddce | ||
![]() |
a2fc2ddb4c |
15
.github/workflows/auto-merge.yml
vendored
15
.github/workflows/auto-merge.yml
vendored
@@ -16,27 +16,24 @@ jobs:
|
|||||||
uses: dependabot/fetch-metadata@v1
|
uses: dependabot/fetch-metadata@v1
|
||||||
with:
|
with:
|
||||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|
||||||
- name: Enable auto-merge for Dependabot PRs
|
- name: Enable auto-merge for Dependabot PRs
|
||||||
run: gh pr merge --auto --merge "$PR_URL"
|
run: gh pr merge --auto --merge "$PR_URL"
|
||||||
env:
|
env:
|
||||||
PR_URL: ${{github.event.pull_request.html_url}}
|
PR_URL: ${{github.event.pull_request.html_url}}
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
|
||||||
- name: Approve patch and minor updates
|
- name: Approve patch and minor updates
|
||||||
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch' || steps.dependabot-metadata.outputs.update-type == 'version-update:semver-minor'}}
|
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch' || steps.dependabot-metadata.outputs.update-type == 'version-update:semver-minor'}}
|
||||||
run: gh pr review $PR_URL --approve -b "I'm **approving** this pull request because **it includes a patch or minor update**"
|
run: gh pr review $PR_URL --approve -b "I'm **approving** this pull request because **it includes a patch or minor update**"
|
||||||
env:
|
env:
|
||||||
PR_URL: ${{github.event.pull_request.html_url}}
|
PR_URL: ${{github.event.pull_request.html_url}}
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||||
- name: Approve major updates of development dependencies
|
|
||||||
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major' && steps.dependabot-metadata.outputs.dependency-type == 'direct:development'}}
|
- name: Comment on major updates of any dependencies
|
||||||
run: gh pr review $PR_URL --approve -b "I'm **approving** this pull request because **it includes a major update of a dependency used only in development**"
|
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major'}}
|
||||||
env:
|
|
||||||
PR_URL: ${{github.event.pull_request.html_url}}
|
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
||||||
- name: Comment on major updates of non-development dependencies
|
|
||||||
if: ${{steps.dependabot-metadata.outputs.update-type == 'version-update:semver-major' && steps.dependabot-metadata.outputs.dependency-type == 'direct:production'}}
|
|
||||||
run: |
|
run: |
|
||||||
gh pr comment $PR_URL --body "I'm **not approving** this PR because **it includes a major update of a dependency used in production**"
|
gh pr comment $PR_URL --body "I'm **not approving** this PR because **it includes a major update of a dependency**"
|
||||||
gh pr edit $PR_URL --add-label "requires-manual-qa"
|
gh pr edit $PR_URL --add-label "requires-manual-qa"
|
||||||
env:
|
env:
|
||||||
PR_URL: ${{github.event.pull_request.html_url}}
|
PR_URL: ${{github.event.pull_request.html_url}}
|
||||||
|
30
.github/workflows/build.yml
vendored
30
.github/workflows/build.yml
vendored
@@ -1,30 +0,0 @@
|
|||||||
name: build
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
branches: [ main ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ main ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
|
||||||
node-version: [16.x, 18.x, 20.x]
|
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'npm'
|
|
||||||
cache-dependency-path: '**/package-lock.json'
|
|
||||||
- run: npm ci
|
|
||||||
- run: npm run build
|
|
||||||
- run: npm run build:example
|
|
78
.github/workflows/lint-build.yml
vendored
Normal file
78
.github/workflows/lint-build.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
name: Lint & build
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
CACHE_KEY: 'hugo-hinode'
|
||||||
|
CACHE_PATH_DEBIAN: '/tmp/hugo_cache_runner'
|
||||||
|
CACHE_PATH_WIN: '~\AppData\Local\hugo_cache'
|
||||||
|
CACHE_PATH_MAC: '/Users/runner/Library/Caches/hugo_cache'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: lts/*
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: '**/package-lock.json'
|
||||||
|
|
||||||
|
- name: Perform clean install of npm
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Lint the source files
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
build:
|
||||||
|
needs: lint
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
node-version: [16.x, 18.x, 20.x]
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: '**/package-lock.json'
|
||||||
|
|
||||||
|
- name: Perform clean install of npm
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
# Cache Hugo cachedir and resourcedir (configured in config/ci/hugo.toml) for each OS
|
||||||
|
# No additional cache invalidation is needed, Hugo uses checksums itself
|
||||||
|
- name: Use Hugo cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ${{ runner.os == 'Windows' && env.CACHE_PATH_WIN || runner.os == 'macOS' && env.CACHE_PATH_MAC || env.CACHE_PATH_DEBIAN }}
|
||||||
|
key: ${{ runner.os }}-${{ env.CACHE_KEY }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-${{ env.CACHE_KEY }}
|
||||||
|
|
||||||
|
- name: Build main site
|
||||||
|
run: npm run build:cache
|
||||||
|
|
||||||
|
# The example site is to be published to demo.gethinode.com
|
||||||
|
- name: Build example site
|
||||||
|
run: npm run build:example:ci
|
31
.github/workflows/lint.yml
vendored
31
.github/workflows/lint.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
name: lint
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
branches: [ main ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ main ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [16.x, 18.x, 20.x]
|
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'npm'
|
|
||||||
cache-dependency-path: '**/package-lock.json'
|
|
||||||
|
|
||||||
- run: npm ci --ignore-scripts
|
|
||||||
- run: npm run lint
|
|
60
.github/workflows/mod-update.yml
vendored
Normal file
60
.github/workflows/mod-update.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: Update Hugo dependencies
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 3 * * *' # run daily at 03:00 AM
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-mod:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: lts/*
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: '**/package-lock.json'
|
||||||
|
|
||||||
|
- name: Perform clean install of npm
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Update Hugo module dependencies
|
||||||
|
id: mod-updates
|
||||||
|
run: |
|
||||||
|
MOD_OUTPUT=$(npm run mod:update 2>&1)
|
||||||
|
echo "$MOD_OUTPUT"
|
||||||
|
MOD_UPDATES=$(echo "$MOD_OUTPUT" | grep '^go: upgraded' | sed 's/go: / - /' | sort -u)
|
||||||
|
echo 'MOD_UPDATES<<EOF' >> $GITHUB_OUTPUT
|
||||||
|
echo "$MOD_UPDATES" >> "$GITHUB_OUTPUT"
|
||||||
|
echo 'EOF' >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: gethinode-actions/create-pull-request@v5
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.HUGO_MOD_PR }}
|
||||||
|
commit-message: 'fix: update Hugo module dependencies'
|
||||||
|
committer: GitHub <noreply@github.com>
|
||||||
|
branch: hugo-mod-dependencies
|
||||||
|
delete-branch: true
|
||||||
|
title: 'Update Hugo module dependencies'
|
||||||
|
body: |
|
||||||
|
This PR is auto-generated by [create-pull-request][1].
|
||||||
|
|
||||||
|
Changes to go.mod:
|
||||||
|
|
||||||
|
${{ steps.mod-updates.outputs.MOD_UPDATES }}
|
||||||
|
|
||||||
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
|
labels: dependencies
|
||||||
|
add-paths: |
|
||||||
|
go.mod
|
||||||
|
go.sum
|
||||||
|
**/go.mod
|
||||||
|
**/go.sum
|
53
.github/workflows/npm-publish.yml
vendored
53
.github/workflows/npm-publish.yml
vendored
@@ -1,35 +1,40 @@
|
|||||||
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
# This workflow will run tests using node and then publish a package to npmjs.org when a release is created
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
|
||||||
|
name: Publish package to npmjs
|
||||||
name: Node.js Package
|
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
branches: [ main ]
|
|
||||||
release:
|
release:
|
||||||
types: [created]
|
types: [published]
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY_URL: 'https://registry.npmjs.org/'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
strategy:
|
||||||
steps:
|
matrix:
|
||||||
- uses: actions/checkout@v3
|
os: [ubuntu-latest]
|
||||||
- uses: actions/setup-node@v3
|
node-version: [20.x]
|
||||||
with:
|
|
||||||
node-version: 16
|
runs-on: ${{ matrix.os }}
|
||||||
- run: npm ci
|
|
||||||
- run: npm test
|
|
||||||
|
|
||||||
publish-npm:
|
|
||||||
needs: build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout repository
|
||||||
- uses: actions/setup-node@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup .npmrc file to publish to npm
|
||||||
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: ${{ matrix.node-version }}
|
||||||
registry-url: https://registry.npmjs.org/
|
registry-url: ${{ env.REGISTRY_URL }}
|
||||||
- run: npm ci
|
cache: 'npm'
|
||||||
- run: npm publish
|
cache-dependency-path: '**/package-lock.json'
|
||||||
|
|
||||||
|
- name: Perform clean install of npm
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Publish package to npm
|
||||||
|
run: npm publish
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
37
.github/workflows/update.yml
vendored
37
.github/workflows/update.yml
vendored
@@ -1,37 +0,0 @@
|
|||||||
name: Update Hugo Dependencies
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 3 * * *' # run daily at 03:00 AM
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-dep:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: "lts/*"
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm ci
|
|
||||||
- name: Update Hugo module dependencies
|
|
||||||
run: npm run mod:update
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.HUGO_MOD_PR }}
|
|
||||||
commit-message: 'fix: update Hugo module dependencies'
|
|
||||||
branch: hugo-mod-dependencies
|
|
||||||
delete-branch: true
|
|
||||||
title: 'Update Hugo module dependencies'
|
|
||||||
body: >
|
|
||||||
This PR is auto-generated by
|
|
||||||
[create-pull-request](https://github.com/peter-evans/create-pull-request).
|
|
||||||
labels: dependencies
|
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,4 +5,3 @@ node_modules/
|
|||||||
|
|
||||||
.DS_store
|
.DS_store
|
||||||
.hugo_build.lock
|
.hugo_build.lock
|
||||||
hugo_stats.json
|
|
@@ -1,7 +1,6 @@
|
|||||||
assets/scss/common/_variables.scss
|
assets/scss/common/_variables.scss
|
||||||
assets/scss/components/_syntax-dark.scss
|
assets/scss/components/_syntax-dark.scss
|
||||||
assets/scss/components/_syntax-light.scss
|
assets/scss/components/_syntax-light.scss
|
||||||
assets/scss/hotfix
|
|
||||||
assets/scss/vendor
|
assets/scss/vendor
|
||||||
assets/scss/theme/fonts.scss
|
assets/scss/theme/fonts.scss
|
||||||
assets/scss/app.scss
|
assets/scss/app.scss
|
||||||
|
49
README.md
49
README.md
@@ -56,54 +56,42 @@
|
|||||||
- [PageSpeed Insights][pagespeed]
|
- [PageSpeed Insights][pagespeed]
|
||||||
- [Mozilla Observatory][observatory]
|
- [Mozilla Observatory][observatory]
|
||||||
|
|
||||||
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] to automate the build process and to keep track of dependencies.
|
Hinode is a clean documentation and blog theme for [Hugo][hugo], an open-source static site generator. Based on the [Bootstrap 5][bootstrap] framework, the rendered site is fast, secure, and responsive. Hinode uses [FlexSearch][flexsearch] to enable full text search across your site. Finally, the theme supports [Node Package Manager][npm] (npm) to automate the build process and to keep track of dependencies.
|
||||||
|
|
||||||
Additional features include:
|
|
||||||
|
|
||||||
- Flexible configuration of Hugo modules
|
|
||||||
- Switching between light mode and dark mode
|
|
||||||
- Support for multiple languages
|
|
||||||
- Reusable Bootstrap components through configurable shortcodes and partials
|
|
||||||
- Embedded comments through light-weight integration with GitHub via [utteranc.es][utterances]
|
|
||||||
- Integrated sidebar navigation for content-heavy sections, such as documentation pages
|
|
||||||
- Reponsive image handling for multiple screen sizes and resolutions
|
|
||||||
- Optimized search results, scoring 100 points for SEO on [PageSpeed Insights][pagespeed]
|
|
||||||
- Secure by default, scoring A+ on [Mozilla Observatory test][observatory]
|
|
||||||
|
|
||||||
Detailed information about Hinode is available on the [official website][website].
|
Detailed information about Hinode is available on the [official website][website].
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Hinode requires Git, Node.js and npm for local development and testing. Download the Git binary from the [official website][git_download]. Next, download and install [Node.js][nodejs] (it includes npm) for your platform.
|
Hinode is a [Hugo theme that uses modules][hugo_modules] to install and maintain various components. It can be installed using either Hugo or npm. If you would like to take advantage of automation, the npm approach is recommended. Refer to the [Hinode template][repository_template] for installation instructions with npm.
|
||||||
|
|
||||||
|
The installation instructions in this readme install Hinode as a regular Hugo theme. Hinode requires the following software to be installed on your local machine.
|
||||||
|
|
||||||
|
- [Go binary][golang_download]
|
||||||
|
- [Hugo][nodejs] (extended version)
|
||||||
|
|
||||||
|
[Git][git_download] is recommended, but is not a strict requirement.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Start a new Hinode project in three steps:
|
Start a new Hinode project in three steps:
|
||||||
|
|
||||||
1. Create a new site
|
1. **Create a new site**
|
||||||
|
|
||||||
Hinode is available as a [template][repository_template], and a [main repository][repository]. The template [npm][npm] to link to the latest available version of Hinode. Unless you plan to customize a lot, it is recommended to use the template:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/gethinode/template.git my-hinode-site && cd my-hinode-site
|
hugo new site my-hinode-site && cd my-hinode-site
|
||||||
```
|
```
|
||||||
|
|
||||||
Use the main theme if you intend to customize the base code:
|
1. **Initialize the module system**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/gethinode/hinode.git my-hinode-site && cd my-hinode-site
|
hugo mod init example.com/my-hinode-site
|
||||||
|
echo "[[module.imports]]\npath = 'github.com/gethinode/hinode'" >> hugo.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Install dependencies
|
1. **Start a development server**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install
|
hugo server
|
||||||
```
|
|
||||||
|
|
||||||
1. Start development server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run start
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@@ -127,7 +115,7 @@ Hinode is inspired by the following themes:
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The `hinode` and `template` codebase is released under the [MIT license][license]. The documentation (including the "README" and `docs` codebase) is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license.
|
The `hinode`, `docs`, and `template` codebase is released under the [MIT license][license]. The documentation of Hinode is licensed under the Creative Commons [(CC BY-NC 4.0)][cc-by-nc-4.0] license. This includes all files within the repository's `/content` and `/exampleSite/content` folders and their children, as well as the "README" in the repository root. This applies to all public repositories maintained by `gethinode` on GitHub, including the `gethinode/hinode`, `gethinode/template`, and `gethinode/docs` repositories, unless specified otherwise.
|
||||||
|
|
||||||
<!-- MARKDOWN PUBLIC LINKS -->
|
<!-- MARKDOWN PUBLIC LINKS -->
|
||||||
[blist]: https://github.com/apvarun/blist-hugo-theme
|
[blist]: https://github.com/apvarun/blist-hugo-theme
|
||||||
@@ -137,6 +125,8 @@ The `hinode` and `template` codebase is released under the [MIT license][license
|
|||||||
[flexsearch]: https://github.com/nextapps-de/flexsearch
|
[flexsearch]: https://github.com/nextapps-de/flexsearch
|
||||||
[git_download]: https://git-scm.com
|
[git_download]: https://git-scm.com
|
||||||
[hugo]: https://gohugo.io
|
[hugo]: https://gohugo.io
|
||||||
|
[hugo_download]: https://gohugo.io/installation
|
||||||
|
[hugo_modules]: https://gohugo.io/hugo-modules/
|
||||||
[netlify]: https://www.netlify.com
|
[netlify]: https://www.netlify.com
|
||||||
[nodejs]: https://nodejs.org
|
[nodejs]: https://nodejs.org
|
||||||
[npm]: https://www.npmjs.com
|
[npm]: https://www.npmjs.com
|
||||||
@@ -147,6 +137,7 @@ The `hinode` and `template` codebase is released under the [MIT license][license
|
|||||||
<!-- MARKDOWN MAINTAINED LINKS -->
|
<!-- MARKDOWN MAINTAINED LINKS -->
|
||||||
[contribute]: https://gethinode.com/contribute
|
[contribute]: https://gethinode.com/contribute
|
||||||
[getstarted]: https://gethinode.com/docs
|
[getstarted]: https://gethinode.com/docs
|
||||||
|
[golang_download]: https://go.dev/dl/
|
||||||
[demo]: https://demo.gethinode.com/
|
[demo]: https://demo.gethinode.com/
|
||||||
[license]: https://github.com/gethinode/hinode/blob/main/LICENSE
|
[license]: https://github.com/gethinode/hinode/blob/main/LICENSE
|
||||||
[repository]: https://github.com/gethinode/hinode.git
|
[repository]: https://github.com/gethinode/hinode.git
|
||||||
|
@@ -15,6 +15,7 @@ const addCopyButtons = (clipboard) => {
|
|||||||
const button = document.createElement('button')
|
const button = document.createElement('button')
|
||||||
button.className = 'clipboard-button'
|
button.className = 'clipboard-button'
|
||||||
button.setAttribute('data-toast-target', 'toast-copied-code-message')
|
button.setAttribute('data-toast-target', 'toast-copied-code-message')
|
||||||
|
button.setAttribute('aria-label', '{{ T "copyToClipboard" }}')
|
||||||
button.type = 'button'
|
button.type = 'button'
|
||||||
button.innerHTML = svgCopy
|
button.innerHTML = svgCopy
|
||||||
button.addEventListener('click', () => {
|
button.addEventListener('click', () => {
|
||||||
|
@@ -40,8 +40,7 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
for (let i = 0; i < activeSelectors.length; ++i) {
|
for (let i = 0; i < activeSelectors.length; ++i) {
|
||||||
activeSelectors[i].className = activeIcon.className
|
activeSelectors[i].innerHTML = activeIcon.innerHTML
|
||||||
activeSelectors[i].className = activeSelectors[i].className.replace('theme-icon', 'theme-icon-active')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < activeButtons.length; ++i) {
|
for (let i = 0; i < activeButtons.length; ++i) {
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const navbar = document.querySelector('.navbar')
|
const navbar = document.querySelector('.navbar')
|
||||||
const toggler = document.getElementById('main-nav-toggler')
|
const togglers = document.querySelectorAll('.main-nav-toggler')
|
||||||
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
|
const modeSelectors = document.querySelectorAll('.switch-mode-collapsed')
|
||||||
|
|
||||||
if (navbar !== null && toggler !== null) {
|
if (navbar !== null && togglers !== null) {
|
||||||
// set the navbar background color to opaque when scrolling past a breakpoint
|
// set the navbar background color to opaque when scrolling past a breakpoint
|
||||||
window.onscroll = () => {
|
window.onscroll = () => {
|
||||||
if (window.scrollY > 75) {
|
if (window.scrollY > 75) {
|
||||||
@@ -13,14 +13,21 @@ if (navbar !== null && toggler !== null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set the navbar background color to opaque when expanded
|
// set the navbar background color to opaque when expanded
|
||||||
toggler.onclick = () => {
|
for (let i = 0; i < togglers.length; ++i) {
|
||||||
navbar.classList.toggle('navbar-expanded')
|
togglers[i].onclick = () => {
|
||||||
|
navbar.classList.toggle('navbar-expanded')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// invoke the navbar toggler for each mode switcher to collapse the main menu afterwards
|
// invoke the navbar toggler for each mode switcher to collapse the main menu afterwards
|
||||||
for (let i = 0; i < modeSelectors.length; ++i) {
|
for (let i = 0; i < modeSelectors.length; ++i) {
|
||||||
modeSelectors[i].onclick = () => {
|
modeSelectors[i].onclick = () => {
|
||||||
toggler.click()
|
for (let j = 0; j < togglers.length; ++j) {
|
||||||
|
const toggler = togglers[j]
|
||||||
|
if (toggler.getAttribute('aria-expanded') === 'true') {
|
||||||
|
toggler.click()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,9 @@
|
|||||||
// Import Bootstrap configuration (mounted by core Bootstrap module)
|
// Import Bootstrap configuration (mounted by core Bootstrap module)
|
||||||
@import "bootstrap.scss";
|
@import "bootstrap.scss";
|
||||||
|
|
||||||
|
// Include dark mode overrides
|
||||||
|
@import "common/variables-dark.scss";
|
||||||
|
|
||||||
// Import Hinode theme styles
|
// Import Hinode theme styles
|
||||||
@import "components/alert.scss";
|
@import "components/alert.scss";
|
||||||
@import "components/blockquote.scss";
|
@import "components/blockquote.scss";
|
||||||
@@ -19,6 +22,7 @@
|
|||||||
@import "components/command.scss";
|
@import "components/command.scss";
|
||||||
@import "components/comments.scss";
|
@import "components/comments.scss";
|
||||||
@import "components/feature.scss";
|
@import "components/feature.scss";
|
||||||
|
@import "components/footer.scss";
|
||||||
@import "components/navbar.scss";
|
@import "components/navbar.scss";
|
||||||
@import "components/img.scss";
|
@import "components/img.scss";
|
||||||
@import "components/pagination.scss";
|
@import "components/pagination.scss";
|
||||||
|
101
assets/scss/common/_variables-dark.scss
Normal file
101
assets/scss/common/_variables-dark.scss
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
@if $enable-dark-mode {
|
||||||
|
@include color-mode(dark) {
|
||||||
|
--bs-primary: #{$primary-text-emphasis-dark};
|
||||||
|
--bs-secondary: #{$secondary-text-emphasis-dark};
|
||||||
|
--bs-primary-dark: #{$primary-bg-subtle-dark};
|
||||||
|
--bs-primary-bg-subtle: #{$primary-bg-subtle-dark};
|
||||||
|
--bg-primary-subtle: rgba(var(--bs-primary-rgb), var(--bs-link-opacity, 0.1));
|
||||||
|
|
||||||
|
.bg-primary-subtle {
|
||||||
|
background-color: var(--bg-primary-subtle) if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
.accordion-button {
|
||||||
|
background-color: var(--bg-primary-subtle);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-check-input:checked {
|
||||||
|
background-color: var(--bs-primary);
|
||||||
|
border-color: var(--bs-primary); }
|
||||||
|
|
||||||
|
.form-check-input[type="checkbox"]:indeterminate {
|
||||||
|
background-color: var(--bs-primary);
|
||||||
|
border-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-range::-webkit-slider-thumb {
|
||||||
|
background-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-range::-moz-range-thumb {
|
||||||
|
background-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-primary {
|
||||||
|
--bs-alert-bg: var(--bg-primary-subtle);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-primary {
|
||||||
|
--bs-btn-color: var(--bs-primary);
|
||||||
|
--bs-btn-border-color: var(--bs-primary);
|
||||||
|
--bs-btn-hover-bg: var(--bs-primary);
|
||||||
|
--bs-btn-hover-border-color: var(--bs-primary);
|
||||||
|
--bs-btn-active-bg: var(--bs-primary);
|
||||||
|
--bs-btn-active-border-color: var(--bs-primary);
|
||||||
|
--bs-btn-disabled-color: var(--bs-primary);
|
||||||
|
--bs-btn-disabled-border-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-secondary {
|
||||||
|
--bs-btn-color: var(--bs-secondary);
|
||||||
|
--bs-btn-border-color: var(--bs-secondary);
|
||||||
|
--bs-btn-hover-bg: var(--bs-secondary);
|
||||||
|
--bs-btn-hover-border-color: var(--bs-secondary);
|
||||||
|
--bs-btn-active-bg: var(--bs-secondary);
|
||||||
|
--bs-btn-active-border-color: var(--bs-secondary);
|
||||||
|
--bs-btn-disabled-color: var(--bs-secondary);
|
||||||
|
--bs-btn-disabled-border-color: var(--bs-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-primary {
|
||||||
|
color: var(--bs-primary) if($enable-important-utilities, !important, null);
|
||||||
|
text-decoration-color: var(--bs-primary) if($enable-important-utilities, !important, null);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);
|
||||||
|
text-decoration-color: var(--bs-primary-dark) if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
--bs-pagination-color: var(--bs-body-bg);
|
||||||
|
--bs-pagination-bg: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress,
|
||||||
|
.progress-stacked {
|
||||||
|
--bs-progress-bar-bg: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-group {
|
||||||
|
--bs-list-group-active-bg: var(--bs-primary);
|
||||||
|
--bs-list-group-active-border-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.clipboard-button:hover {
|
||||||
|
color: var(--bs-primary); }
|
||||||
|
|
||||||
|
.clipboard-button:hover > svg {
|
||||||
|
fill: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggler-icon {
|
||||||
|
background-color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.heading:hover .anchor {
|
||||||
|
color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -2,9 +2,6 @@
|
|||||||
$enable-negative-margins: true;
|
$enable-negative-margins: true;
|
||||||
$enable-important-utilities: true !default;
|
$enable-important-utilities: true !default;
|
||||||
|
|
||||||
// Font awesome variables overrides for theme
|
|
||||||
$fa-font-path: "../fonts";
|
|
||||||
|
|
||||||
// Remove the border from the focused navigation toggler
|
// Remove the border from the focused navigation toggler
|
||||||
$navbar-toggler-focus-width: 0 !default;
|
$navbar-toggler-focus-width: 0 !default;
|
||||||
|
|
||||||
@@ -28,3 +25,11 @@ $btn-toggle-color: $black !default;
|
|||||||
$carousel-dark-indicator-active-bg: #ffffff !default;
|
$carousel-dark-indicator-active-bg: #ffffff !default;
|
||||||
$carousel-dark-caption-color: #ffffff !default;
|
$carousel-dark-caption-color: #ffffff !default;
|
||||||
$carousel-dark-control-icon-filter: invert(0) grayscale(100) !default;
|
$carousel-dark-control-icon-filter: invert(0) grayscale(100) !default;
|
||||||
|
|
||||||
|
// scss-docs-start color-mode
|
||||||
|
$primary-text-emphasis-dark: mix(white, $primary, $dark-mode-tint) !default;
|
||||||
|
$secondary-text-emphasis-dark: mix(white, $secondary, $dark-mode-tint) !default;
|
||||||
|
$link-color-dark: mix(white, $primary, $dark-mode-tint) !default;
|
||||||
|
$primary-bg-subtle-dark: mix(black, $primary, $dark-mode-shade) !default;
|
||||||
|
$primary-border-subtle-dark: mix(black, $primary, $dark-mode-shade / 2) !default;
|
||||||
|
// scss-docs-end color-mode
|
@@ -1,3 +1,18 @@
|
|||||||
.alert-no-decoration {
|
.alert code {
|
||||||
--bs-alert-border-radius: none;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* stylelint-disable declaration-block-no-redundant-longhand-properties */
|
||||||
|
.alert a {
|
||||||
|
color: inherit;
|
||||||
|
|
||||||
|
&:link,
|
||||||
|
&:visited,
|
||||||
|
&:hover,
|
||||||
|
&:active {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-style: dotted;
|
||||||
|
text-decoration-color: var(--bs-body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* stylelint-enable declaration-block-no-redundant-longhand-properties */
|
||||||
|
@@ -8,6 +8,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-social {
|
.btn-social {
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
--bs-btn-bg: transparent;
|
--bs-btn-bg: transparent;
|
||||||
--bs-btn-border-width: none;
|
--bs-btn-border-width: none;
|
||||||
--bs-btn-color: var(--bs-secondary);
|
--bs-btn-color: var(--bs-secondary);
|
||||||
@@ -23,5 +25,6 @@
|
|||||||
.btn-social:active,
|
.btn-social:active,
|
||||||
.btn-social.active,
|
.btn-social.active,
|
||||||
.open > .dropdown-toggle.btn-primary {
|
.open > .dropdown-toggle.btn-primary {
|
||||||
|
background-color: transparent;
|
||||||
color: var(--bs-primary) if($enable-important-utilities, !important, null);
|
color: var(--bs-primary) if($enable-important-utilities, !important, null);
|
||||||
}
|
}
|
||||||
|
@@ -64,6 +64,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if $enable-dark-mode {
|
||||||
|
@include color-mode(dark) {
|
||||||
|
.card-zoom card-body-link,
|
||||||
|
.card-body-link {
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: $primary-bg-subtle-dark if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// stylelint-enable annotation-no-unknown
|
// stylelint-enable annotation-no-unknown
|
||||||
|
|
||||||
// make tag-link clickable on top of the stretched-link.
|
// make tag-link clickable on top of the stretched-link.
|
||||||
|
30
assets/scss/components/_footer.scss
Normal file
30
assets/scss/components/_footer.scss
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.footer {
|
||||||
|
// background-color: $gray-800 if($enable-important-utilities, !important, null);
|
||||||
|
color: var(--bs-secondary) if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-bg-footer {
|
||||||
|
color: var(--bs-secondary) if($enable-important-utilities, !important, null);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: var(--bs-tertiary-color) if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@if $enable-dark-mode {
|
||||||
|
@include color-mode(dark) {
|
||||||
|
.footer {
|
||||||
|
color: $gray-500 if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-bg-footer {
|
||||||
|
color: $gray-500 if($enable-important-utilities, !important, null);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: $gray-400 if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -11,6 +11,22 @@
|
|||||||
background-color: var(--bs-body-bg);
|
background-color: var(--bs-body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
margin: 0 .15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-contrast .nav-link.active, .navbar-contrast .nav-link.show, .navbar-contrast .nav-link:hover {
|
||||||
|
border-bottom: solid 1px var(--bs-navbar-hover-color);
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-contrast {
|
||||||
|
--bs-navbar-color: white !important;
|
||||||
|
--bs-navbar-hover-color: white !important;
|
||||||
|
--bs-navbar-disabled-color: white !important;
|
||||||
|
--bs-navbar-active-color: white !important;
|
||||||
|
}
|
||||||
|
|
||||||
.navbar-expanded {
|
.navbar-expanded {
|
||||||
box-shadow: $box-shadow-sm;
|
box-shadow: $box-shadow-sm;
|
||||||
}
|
}
|
||||||
@@ -36,7 +52,6 @@
|
|||||||
.toggler-icon {
|
.toggler-icon {
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
background-color: $primary;
|
|
||||||
display: block;
|
display: block;
|
||||||
transition: all 0.2s;
|
transition: all 0.2s;
|
||||||
}
|
}
|
||||||
@@ -85,15 +100,21 @@
|
|||||||
background-color: #777;
|
background-color: #777;
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphasis {
|
.emphasis-light {
|
||||||
background-color: $black if($enable-important-utilities, !important, null);
|
background-color: $black if($enable-important-utilities, !important, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@if $enable-dark-mode {
|
.emphasis-dark {
|
||||||
@include color-mode(dark) {
|
background-color: $white if($enable-important-utilities, !important, null);
|
||||||
.emphasis {
|
}
|
||||||
background-color: $white if($enable-important-utilities, !important, null);
|
|
||||||
}
|
.emphasis, {
|
||||||
|
background-color: $black if($enable-important-utilities, !important, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@include color-mode(dark) {
|
||||||
|
.emphasis {
|
||||||
|
background-color: $white if($enable-important-utilities, !important, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
.pagination {
|
.pagination {
|
||||||
--bs-pagination-bg: var(--bs-primary-bg-subtle);
|
--bs-pagination-bg: var(--bs-primary-bg-subtle);
|
||||||
|
--bs-pagination-color: var(--bs-body-color);
|
||||||
--bs-pagination-border-color: none;
|
--bs-pagination-border-color: none;
|
||||||
--bs-pagination-hover-color: var(--bs-pagination-active-color);
|
--bs-pagination-hover-color: var(--bs-pagination-active-color);
|
||||||
--bs-pagination-hover-bg: var(--bs-pagination-active-bg);
|
--bs-pagination-hover-bg: var(--bs-pagination-active-bg);
|
||||||
|
@@ -69,24 +69,25 @@
|
|||||||
@if $enable-dark-mode {
|
@if $enable-dark-mode {
|
||||||
@include color-mode(dark) {
|
@include color-mode(dark) {
|
||||||
.sidebar-item {
|
.sidebar-item {
|
||||||
color: var(--bs-tertiary-color);
|
color: var(--bs-body-color);
|
||||||
margin-left: 0 !important;
|
margin-left: 0 !important;
|
||||||
padding-left: 0.85rem !important;
|
padding-left: 0.85rem !important;
|
||||||
|
|
||||||
&.active,
|
&.active,
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: var(--bs-secondary-color);
|
color: white !important;
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-toggle {
|
.btn-toggle {
|
||||||
color: var(--bs-tertiary-color);
|
color: var(--bs-body-color);
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: $secondary;
|
color: white !important;
|
||||||
background-color: tint-color($primary, 90%);
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
@@ -105,8 +106,8 @@
|
|||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: $secondary;
|
color: white !important;
|
||||||
background-color: tint-color($primary, 90%);
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
|
@@ -6,9 +6,9 @@
|
|||||||
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
|
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
|
||||||
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
||||||
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
|
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
|
||||||
/* LineHighlight */ .chroma .hl { background-color: #b8b800 }
|
/* LineHighlight */ .chroma .hl { background-color: #373700 }
|
||||||
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #64686c }
|
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #64686c }
|
||||||
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #6e7681 }
|
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #999fa8 }
|
||||||
/* Line */ .chroma .line { display: flex; }
|
/* Line */ .chroma .line { display: flex; }
|
||||||
/* Keyword */ .chroma .k { color: #ff7b72 }
|
/* Keyword */ .chroma .k { color: #ff7b72 }
|
||||||
/* KeywordConstant */ .chroma .kc { color: #79c0ff }
|
/* KeywordConstant */ .chroma .kc { color: #79c0ff }
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
/* KeywordReserved */ .chroma .kr { color: #ff7b72 }
|
/* KeywordReserved */ .chroma .kr { color: #ff7b72 }
|
||||||
/* KeywordType */ .chroma .kt { color: #ff7b72 }
|
/* KeywordType */ .chroma .kt { color: #ff7b72 }
|
||||||
/* Name */ .chroma .n { }
|
/* Name */ .chroma .n { }
|
||||||
/* NameAttribute */ .chroma .na { }
|
/* NameAttribute */ .chroma .na { color: #00cccc }
|
||||||
/* NameBuiltin */ .chroma .nb { }
|
/* NameBuiltin */ .chroma .nb { color: #00a2d8 }
|
||||||
/* NameBuiltinPseudo */ .chroma .bp { }
|
/* NameBuiltinPseudo */ .chroma .bp { }
|
||||||
/* NameClass */ .chroma .nc { color: #f0883e; font-weight: bold }
|
/* NameClass */ .chroma .nc { color: #f0883e; font-weight: bold }
|
||||||
/* NameConstant */ .chroma .no { color: #79c0ff; font-weight: bold }
|
/* NameConstant */ .chroma .no { color: #79c0ff; font-weight: bold }
|
||||||
@@ -64,23 +64,23 @@
|
|||||||
/* Operator */ .chroma .o { color: #ff7b72; font-weight: bold }
|
/* Operator */ .chroma .o { color: #ff7b72; font-weight: bold }
|
||||||
/* OperatorWord */ .chroma .ow { color: #ff7b72; font-weight: bold }
|
/* OperatorWord */ .chroma .ow { color: #ff7b72; font-weight: bold }
|
||||||
/* Punctuation */ .chroma .p { }
|
/* Punctuation */ .chroma .p { }
|
||||||
/* Comment */ .chroma .c { color: #8b949e; font-style: italic }
|
/* Comment */ .chroma .c { color: #979fa8; font-style: italic }
|
||||||
/* CommentHashbang */ .chroma .ch { color: #8b949e; font-style: italic }
|
/* CommentHashbang */ .chroma .ch { color: #979fa8; font-style: italic }
|
||||||
/* CommentMultiline */ .chroma .cm { color: #8b949e; font-style: italic }
|
/* CommentMultiline */ .chroma .cm { color: #979fa8; font-style: italic }
|
||||||
/* CommentSingle */ .chroma .c1 { color: #8b949e; font-style: italic }
|
/* CommentSingle */ .chroma .c1 { color: #979fa8; font-style: italic }
|
||||||
/* CommentSpecial */ .chroma .cs { color: #8b949e; font-weight: bold; font-style: italic }
|
/* CommentSpecial */ .chroma .cs { color: #979fa8; font-weight: bold; font-style: italic }
|
||||||
/* CommentPreproc */ .chroma .cp { color: #8b949e; font-weight: bold; font-style: italic }
|
/* CommentPreproc */ .chroma .cp { color: #979fa8; font-weight: bold; font-style: italic }
|
||||||
/* CommentPreprocFile */ .chroma .cpf { color: #8b949e; font-weight: bold; font-style: italic }
|
/* CommentPreprocFile */ .chroma .cpf { color: #979fa8; font-weight: bold; font-style: italic }
|
||||||
/* Generic */ .chroma .g { }
|
/* Generic */ .chroma .g { }
|
||||||
/* GenericDeleted */ .chroma .gd { color: #ffa198; background-color: #490202 }
|
/* GenericDeleted */ .chroma .gd { color: #ffa198; background-color: #490202 }
|
||||||
/* GenericEmph */ .chroma .ge { font-style: italic }
|
/* GenericEmph */ .chroma .ge { font-style: italic }
|
||||||
/* GenericError */ .chroma .gr { color: #ffa198 }
|
/* GenericError */ .chroma .gr { color: #ffa198 }
|
||||||
/* GenericHeading */ .chroma .gh { color: #79c0ff; font-weight: bold }
|
/* GenericHeading */ .chroma .gh { color: #79c0ff; font-weight: bold }
|
||||||
/* GenericInserted */ .chroma .gi { color: #56d364; background-color: #0f5323 }
|
/* GenericInserted */ .chroma .gi { color: #56d364; background-color: #0f5323 }
|
||||||
/* GenericOutput */ .chroma .go { color: #8b949e }
|
/* GenericOutput */ .chroma .go { color: #979fa8 }
|
||||||
/* GenericPrompt */ .chroma .gp { color: #8b949e }
|
/* GenericPrompt */ .chroma .gp { color: #979fa8 }
|
||||||
/* GenericStrong */ .chroma .gs { font-weight: bold }
|
/* GenericStrong */ .chroma .gs { font-weight: bold }
|
||||||
/* GenericSubheading */ .chroma .gu { color: #79c0ff }
|
/* GenericSubheading */ .chroma .gu { color: #79c0ff }
|
||||||
/* GenericTraceback */ .chroma .gt { color: #ff7b72 }
|
/* GenericTraceback */ .chroma .gt { color: #ff7b72 }
|
||||||
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
|
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
|
||||||
/* TextWhitespace */ .chroma .w { color: #6e7681 }
|
/* TextWhitespace */ .chroma .w { color: #999fa8 }
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
/* KeywordType */ .chroma .kt { color: #445588; font-weight: bold }
|
/* KeywordType */ .chroma .kt { color: #445588; font-weight: bold }
|
||||||
/* Name */ .chroma .n { }
|
/* Name */ .chroma .n { }
|
||||||
/* NameAttribute */ .chroma .na { color: #008080 }
|
/* NameAttribute */ .chroma .na { color: #008080 }
|
||||||
/* NameBuiltin */ .chroma .nb { color: #0086b3 }
|
/* NameBuiltin */ .chroma .nb { color: #006b8f }
|
||||||
/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }
|
/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }
|
||||||
/* NameClass */ .chroma .nc { color: #445588; font-weight: bold }
|
/* NameClass */ .chroma .nc { color: #445588; font-weight: bold }
|
||||||
/* NameConstant */ .chroma .no { color: #008080 }
|
/* NameConstant */ .chroma .no { color: #008080 }
|
||||||
@@ -54,20 +54,20 @@
|
|||||||
/* LiteralStringRegex */ .chroma .sr { color: #009926 }
|
/* LiteralStringRegex */ .chroma .sr { color: #009926 }
|
||||||
/* LiteralStringSingle */ .chroma .s1 { color: #dd1144 }
|
/* LiteralStringSingle */ .chroma .s1 { color: #dd1144 }
|
||||||
/* LiteralStringSymbol */ .chroma .ss { color: #990073 }
|
/* LiteralStringSymbol */ .chroma .ss { color: #990073 }
|
||||||
/* LiteralNumber */ .chroma .m { color: #009999 }
|
/* LiteralNumber */ .chroma .m { color: #007a7a }
|
||||||
/* LiteralNumberBin */ .chroma .mb { color: #009999 }
|
/* LiteralNumberBin */ .chroma .mb { color: #007a7a }
|
||||||
/* LiteralNumberFloat */ .chroma .mf { color: #009999 }
|
/* LiteralNumberFloat */ .chroma .mf { color: #007a7a }
|
||||||
/* LiteralNumberHex */ .chroma .mh { color: #009999 }
|
/* LiteralNumberHex */ .chroma .mh { color: #007a7a }
|
||||||
/* LiteralNumberInteger */ .chroma .mi { color: #009999 }
|
/* LiteralNumberInteger */ .chroma .mi { color: #007a7a }
|
||||||
/* LiteralNumberIntegerLong */ .chroma .il { color: #009999 }
|
/* LiteralNumberIntegerLong */ .chroma .il { color: #007a7a }
|
||||||
/* LiteralNumberOct */ .chroma .mo { color: #009999 }
|
/* LiteralNumberOct */ .chroma .mo { color: #007a7a }
|
||||||
/* Operator */ .chroma .o { color: #000000; font-weight: bold }
|
/* Operator */ .chroma .o { color: #000000; font-weight: bold }
|
||||||
/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }
|
/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }
|
||||||
/* Punctuation */ .chroma .p { }
|
/* Punctuation */ .chroma .p { }
|
||||||
/* Comment */ .chroma .c { color: #999988; font-style: italic }
|
/* Comment */ .chroma .c { color: #6d6d5d; font-style: italic }
|
||||||
/* CommentHashbang */ .chroma .ch { color: #999988; font-style: italic }
|
/* CommentHashbang */ .chroma .ch { color: #6d6d5d; font-style: italic }
|
||||||
/* CommentMultiline */ .chroma .cm { color: #999988; font-style: italic }
|
/* CommentMultiline */ .chroma .cm { color: #6d6d5d; font-style: italic }
|
||||||
/* CommentSingle */ .chroma .c1 { color: #999988; font-style: italic }
|
/* CommentSingle */ .chroma .c1 { color: #6d6d5d; font-style: italic }
|
||||||
/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }
|
/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }
|
||||||
/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }
|
/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }
|
||||||
/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }
|
/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
// stylelint-disable annotation-no-unknown
|
// stylelint-disable annotation-no-unknown
|
||||||
@import "components/syntax-light";
|
@import "syntax-light";
|
||||||
|
|
||||||
.bg,
|
.bg,
|
||||||
.chroma,
|
.chroma,
|
||||||
@@ -8,18 +8,22 @@
|
|||||||
background-color: transparent if($enable-important-utilities, !important, null);
|
background-color: transparent if($enable-important-utilities, !important, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chroma {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chroma code {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.syntax-highlight {
|
.syntax-highlight {
|
||||||
background-color: var(--bs-light) if($enable-important-utilities, !important, null);
|
background-color: var(--bs-light) if($enable-important-utilities, !important, null);
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.preview-background {
|
|
||||||
background-color: var(--bs-dark-bg-subtle) if($enable-important-utilities, !important, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@if $enable-dark-mode {
|
@if $enable-dark-mode {
|
||||||
[data-bs-theme="dark"] {
|
[data-bs-theme="dark"] {
|
||||||
@import "components/syntax-dark"; // stylelint-disable-line no-invalid-position-at-import-rule
|
@import "syntax-dark"; // stylelint-disable-line no-invalid-position-at-import-rule
|
||||||
|
|
||||||
.bg,
|
.bg,
|
||||||
.chroma,
|
.chroma,
|
||||||
|
@@ -14,11 +14,7 @@ $semi-circle-border: 0.2rem;
|
|||||||
.timeline-#{$state} {
|
.timeline-#{$state} {
|
||||||
--timeline-highlight: var(--#{$prefix}#{$state});
|
--timeline-highlight: var(--#{$prefix}#{$state});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.timeline-bg-#{$state} {
|
|
||||||
--timeline-connector-bg: var(--#{$prefix}#{$state}-bg-subtle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// scss-docs-end timeline
|
// scss-docs-end timeline
|
||||||
|
|
||||||
@@ -27,10 +23,16 @@ $semi-circle-border: 0.2rem;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.timeline-sm {
|
.timeline-sm {
|
||||||
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2);
|
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2.4);
|
||||||
--timeline-offset: 25%
|
--timeline-offset: 25%
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
.timeline-sm {
|
||||||
|
--timeline-icon-radius: calc(#{$semi-circle-radius} / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.timeline::before, .timeline-sm::before {
|
.timeline::before, .timeline-sm::before {
|
||||||
content: "";
|
content: "";
|
||||||
width: 2 * $semi-circle-border;
|
width: 2 * $semi-circle-border;
|
||||||
|
@@ -48,6 +48,10 @@
|
|||||||
font: inherit;
|
font: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#toc-collapse {
|
||||||
|
border-color: var(--bs-secondary-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.toc-button {
|
.toc-button {
|
||||||
--bs-btn-hover-color: var(--bs-primary);
|
--bs-btn-hover-color: var(--bs-primary);
|
||||||
--bs-btn-hover-bg: var(--bs-body-bg);
|
--bs-btn-hover-bg: var(--bs-body-bg);
|
||||||
@@ -65,3 +69,24 @@
|
|||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if $enable-dark-mode {
|
||||||
|
[data-bs-theme="dark"] {
|
||||||
|
.toc-button {
|
||||||
|
--bs-btn-color: var(--bs-body-color);
|
||||||
|
--bs-btn-border-color: var(--bs-body-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#toc-collapse {
|
||||||
|
border-color: var(--bs-body-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc nav a {
|
||||||
|
color: var(--bs-body-color);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -94,6 +94,9 @@ home = ["HTML", "RSS", "REDIR"]
|
|||||||
[[module.mounts]]
|
[[module.mounts]]
|
||||||
source = "assets"
|
source = "assets"
|
||||||
target = "assets"
|
target = "assets"
|
||||||
|
[[module.mounts]]
|
||||||
|
source = "content"
|
||||||
|
target = "content"
|
||||||
[[module.mounts]]
|
[[module.mounts]]
|
||||||
source = "i18n"
|
source = "i18n"
|
||||||
target = "i18n"
|
target = "i18n"
|
||||||
|
@@ -31,5 +31,5 @@ defaultMarkdownHandler = "goldmark"
|
|||||||
block = true
|
block = true
|
||||||
[goldmark.renderer]
|
[goldmark.renderer]
|
||||||
hardWraps = false
|
hardWraps = false
|
||||||
unsafe = true
|
unsafe = false
|
||||||
xhtml = false
|
xhtml = false
|
@@ -27,6 +27,7 @@
|
|||||||
[debugging]
|
[debugging]
|
||||||
showJS = false
|
showJS = false
|
||||||
showSCSS = false
|
showSCSS = false
|
||||||
|
purgeHTMLComments = false
|
||||||
# toml-docs-end debugging
|
# toml-docs-end debugging
|
||||||
|
|
||||||
# toml-docs-start docs
|
# toml-docs-start docs
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
breadcrumb = true
|
breadcrumb = true
|
||||||
toc = true
|
toc = true
|
||||||
sidebar = true
|
sidebar = true
|
||||||
|
size = "md"
|
||||||
# toml-docs-end navigation
|
# toml-docs-end navigation
|
||||||
|
|
||||||
# toml-docs-start messages
|
# toml-docs-start messages
|
||||||
@@ -135,6 +137,8 @@
|
|||||||
dark = "#212529"
|
dark = "#212529"
|
||||||
# toml-docs-end theme-colors
|
# toml-docs-end theme-colors
|
||||||
themeOpacity = "10"
|
themeOpacity = "10"
|
||||||
|
darkModeShade = "20%"
|
||||||
|
darkModeTint = "40%"
|
||||||
# toml-docs-start font
|
# toml-docs-start font
|
||||||
themeFont = "Inter"
|
themeFont = "Inter"
|
||||||
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
|
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
|
||||||
|
23
config/ci/hugo.toml
Normal file
23
config/ci/hugo.toml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# cachedir default on POSIX: '/tmp/hugo_cache_runner'
|
||||||
|
# cachedir default on Windows: '~\AppData\Local\hugo_cache'
|
||||||
|
# cachedir default on macOS: '/Users/runner/Library/Caches/hugo_cache'
|
||||||
|
|
||||||
|
[caches]
|
||||||
|
[caches.assets]
|
||||||
|
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getcsv]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getjson]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getresource]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.images]
|
||||||
|
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
|
||||||
|
maxAge = -1
|
||||||
|
[caches.modules]
|
||||||
|
dir = ':cacheDir/modules'
|
||||||
|
maxAge = -1
|
@@ -1,3 +1,4 @@
|
|||||||
|
resourcedir = '../resources/'
|
||||||
title = "Hinode"
|
title = "Hinode"
|
||||||
copyright = "Copyright © 2023 Mark Dumay."
|
copyright = "Copyright © 2023 Mark Dumay."
|
||||||
paginate = 9
|
paginate = 9
|
||||||
|
@@ -1,36 +1,53 @@
|
|||||||
# toml-docs-start lang-main
|
# toml-docs-start lang-main
|
||||||
[en]
|
[en]
|
||||||
languageName = "English"
|
languageName = "English"
|
||||||
contentDir = "content/en"
|
contentDir = "content/en"
|
||||||
weight = 1
|
weight = 1
|
||||||
# toml-docs-end lang-main
|
# toml-docs-end lang-main
|
||||||
# toml-docs-start lang-param
|
# toml-docs-start lang-param
|
||||||
[en.params.head]
|
[en.params.head]
|
||||||
tagline = "A Hugo Theme"
|
tagline = "A Hugo Theme"
|
||||||
[en.params.social]
|
[en.params.social]
|
||||||
title = "Follow me"
|
title = "Follow me"
|
||||||
caption = "I work on everything coding and tweet developer memes"
|
caption = "I work on everything coding and tweet developer memes"
|
||||||
[en.params.footer]
|
[en.params.footer]
|
||||||
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
# license = "Licensed under Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||||
# toml-docs-end lang-param
|
# toml-docs-end lang-param
|
||||||
[en.params.sections.blog]
|
[en.params.sections.blog]
|
||||||
reference = "More Posts"
|
reference = "More Posts"
|
||||||
[en.params.sections.projects]
|
[en.params.sections.projects]
|
||||||
reference = "More Projects"
|
reference = "More Projects"
|
||||||
|
|
||||||
[nl]
|
[nl]
|
||||||
languageName = "Nederlands"
|
languageName = "Nederlands"
|
||||||
contentDir = "content/nl"
|
contentDir = "content/nl"
|
||||||
weight = 2
|
weight = 2
|
||||||
[nl.params.head]
|
[nl.params.head]
|
||||||
tagline = "Een Hugo Thema"
|
tagline = "Een Hugo Thema"
|
||||||
[nl.params.social]
|
[nl.params.social]
|
||||||
title = "Volg mij"
|
title = "Volg mij"
|
||||||
caption = "Ik doe aan programmeren en tweet memes"
|
caption = "Ik doe aan programmeren en tweet memes"
|
||||||
[nl.params.footer]
|
[nl.params.footer]
|
||||||
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||||
[nl.params.sections.blog]
|
[nl.params.sections.blog]
|
||||||
reference = "Meer artikelen"
|
reference = "Meer artikelen"
|
||||||
[nl.params.sections.projects]
|
[nl.params.sections.projects]
|
||||||
title = "Projecten"
|
title = "Projecten"
|
||||||
reference = "Meer projecten"
|
reference = "Meer projecten"
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
languageName = "Français"
|
||||||
|
contentDir = "content/fr"
|
||||||
|
weight = 2
|
||||||
|
[fr.params.head]
|
||||||
|
tagline = "Un thème Hugo"
|
||||||
|
[fr.params.social]
|
||||||
|
title = "Suivez-moi"
|
||||||
|
caption = "Je code et je tweet des mèmes de développeurs."
|
||||||
|
[fr.params.footer]
|
||||||
|
# license = "Gelicenseerd onder Creative Commons (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/' class='link-secondary' target='_blank' rel='noopener noreferrer'>CC BY-NC-SA 4.0</a>)."
|
||||||
|
[fr.params.sections.blog]
|
||||||
|
reference = "Plus d'articles"
|
||||||
|
[fr.params.sections.projects]
|
||||||
|
title = "Projets"
|
||||||
|
reference = "Plus de projets"
|
||||||
|
@@ -31,5 +31,5 @@ defaultMarkdownHandler = "goldmark"
|
|||||||
block = true
|
block = true
|
||||||
[goldmark.renderer]
|
[goldmark.renderer]
|
||||||
hardWraps = false
|
hardWraps = false
|
||||||
unsafe = true
|
unsafe = false
|
||||||
xhtml = false
|
xhtml = false
|
73
exampleSite/config/_default/menus/menus.fr.toml
Normal file
73
exampleSite/config/_default/menus/menus.fr.toml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
[[main]]
|
||||||
|
name = "À propos"
|
||||||
|
pageRef = "/a-propos/"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[main]]
|
||||||
|
name = "Blog"
|
||||||
|
pageRef = "/blog/"
|
||||||
|
weight = 20
|
||||||
|
|
||||||
|
[[main]]
|
||||||
|
name = "Projets"
|
||||||
|
pageRef = "/projets/"
|
||||||
|
weight = 30
|
||||||
|
|
||||||
|
[[main]]
|
||||||
|
name = "Exemple de projet"
|
||||||
|
pageRef = "/projets/exemple-de-projet/"
|
||||||
|
parent = "Projets"
|
||||||
|
weight = 1
|
||||||
|
|
||||||
|
[[main]]
|
||||||
|
name = "Autre projet"
|
||||||
|
pageRef = "/projets/autre-projet/"
|
||||||
|
parent = "Projets"
|
||||||
|
weight = 2
|
||||||
|
|
||||||
|
[[main]]
|
||||||
|
name = "Tags"
|
||||||
|
pageRef = "/tags/"
|
||||||
|
weight = 40
|
||||||
|
|
||||||
|
[[social]]
|
||||||
|
name = "LinkedIn"
|
||||||
|
pre = "fab linkedin"
|
||||||
|
url = "https://linkedin.com/"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[social]]
|
||||||
|
name = "GitHub"
|
||||||
|
pre = "fab fa-github"
|
||||||
|
url = "https://github.com/"
|
||||||
|
weight = 20
|
||||||
|
|
||||||
|
[[social]]
|
||||||
|
name = "Medium"
|
||||||
|
pre = "fab medium"
|
||||||
|
url = "https://medium.com/"
|
||||||
|
weight = 30
|
||||||
|
|
||||||
|
# toml-docs-start sample-navigation
|
||||||
|
[[sample]]
|
||||||
|
name = "Blog"
|
||||||
|
pageRef = "/blog/"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[sample]]
|
||||||
|
name = "Projets"
|
||||||
|
pageRef = "/projets/"
|
||||||
|
weight = 20
|
||||||
|
|
||||||
|
[[sample]]
|
||||||
|
name = "Exemple de projet"
|
||||||
|
pageRef = "/projets/exemple-de-projet/"
|
||||||
|
parent = "Projets"
|
||||||
|
weight = 1
|
||||||
|
|
||||||
|
[[sample]]
|
||||||
|
name = "Autre projet"
|
||||||
|
pageRef = "/projets/autre-projet/"
|
||||||
|
parent = "Projets"
|
||||||
|
weight = 2
|
||||||
|
# toml-docs-end sample-navigation
|
@@ -21,6 +21,7 @@
|
|||||||
[debugging]
|
[debugging]
|
||||||
showJS = false
|
showJS = false
|
||||||
showSCSS = false
|
showSCSS = false
|
||||||
|
purgeHTMLComments = true # prevents a Goldmark warning when processing HTML comments (as used by markdownlint)
|
||||||
|
|
||||||
[docs]
|
[docs]
|
||||||
basePath = "/" # TODO: replace
|
basePath = "/" # TODO: replace
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
breadcrumb = true
|
breadcrumb = true
|
||||||
toc = true
|
toc = true
|
||||||
sidebar = true
|
sidebar = true
|
||||||
|
size = "md"
|
||||||
|
|
||||||
[messages]
|
[messages]
|
||||||
placement = "bottom-right"
|
placement = "bottom-right"
|
||||||
@@ -131,6 +133,8 @@
|
|||||||
light = "#f8f9fa"
|
light = "#f8f9fa"
|
||||||
dark = "#212529"
|
dark = "#212529"
|
||||||
themeOpacity = "10"
|
themeOpacity = "10"
|
||||||
|
darkModeShade = "20%"
|
||||||
|
darkModeTint = "40%"
|
||||||
themeFont = "Inter"
|
themeFont = "Inter"
|
||||||
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
|
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
|
||||||
themeFontPath = "/fonts" # local path
|
themeFontPath = "/fonts" # local path
|
||||||
|
22
exampleSite/config/ci/hugo.toml
Normal file
22
exampleSite/config/ci/hugo.toml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# cachedir default on POSIX: '/tmp/hugo_cache_runner'
|
||||||
|
# cachedir default on Windows: '~\AppData\Local\hugo_cache'
|
||||||
|
|
||||||
|
[caches]
|
||||||
|
[caches.assets]
|
||||||
|
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getcsv]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getjson]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.getresource]
|
||||||
|
dir = ':cacheDir/:project'
|
||||||
|
maxAge = -1
|
||||||
|
[caches.images]
|
||||||
|
dir = ':cacheDir/resources/_gen' # map to cacheDir instead of resourceDir to utilize GitHub action/cache
|
||||||
|
maxAge = -1
|
||||||
|
[caches.modules]
|
||||||
|
dir = ':cacheDir/modules'
|
||||||
|
maxAge = -1
|
@@ -6,29 +6,19 @@ updated: 2023-08-02
|
|||||||
showComments: false
|
showComments: false
|
||||||
---
|
---
|
||||||
|
|
||||||
<p class="text-center"><svg class="img-fluid w-50"><use href="/img/logo_var.svg#logo"></use></svg></p>
|
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
|
||||||
|
|
||||||
<section class="section section-sm mt-5 mb-5">
|
{{< card-group class="text-center border-0" padding="3" >}}
|
||||||
<div class="container-fluid">
|
{{< card title="Bootstrap framework" icon="fab bootstrap" >}}
|
||||||
<div class="row justify-content-center text-center">
|
Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.
|
||||||
<div class="col-lg-4">
|
{{< /card >}}
|
||||||
{{< icon fab bootstrap fa-2xl >}}
|
{{< card title="Full text search" icon="fas magnifying-glass" >}}
|
||||||
<h2 class="h4">Bootstrap framework</h2>
|
Search your site with FlexSearch, a full-text search library with zero dependencies.
|
||||||
<p>Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Sass files.</p>
|
{{< /card >}}
|
||||||
</div>
|
{{< card title="Development tools" icon="fas code" >}}
|
||||||
<div class="col-lg-4">
|
Use Node Package Manager to automate the build process and to keep track of dependencies.
|
||||||
{{< icon fas magnifying-glass fa-2xl >}}
|
{{< /card >}}
|
||||||
<h2 class="h4">Full text search</h2>
|
{{< /card-group >}}
|
||||||
<p>Search your site with FlexSearch, a full-text search library with zero dependencies.</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
{{< icon fas code fa-2xl >}}
|
|
||||||
<h2 class="h4">Development tools</h2>
|
|
||||||
<p>Use Node Package Manager to automate the build process and to keep track of dependencies.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
Additional features include:
|
Additional features include:
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
author: Mark Dumay
|
author: Mark Dumay
|
||||||
title: Bootstrap elements
|
title: Bootstrap elements
|
||||||
date: 2023-08-05
|
date: 2023-08-12
|
||||||
description: Use shortcodes to add common Bootstrap elements with ease.
|
description: Use shortcodes to add common Bootstrap elements with ease.
|
||||||
tags: ["bootstrap", "shortcode"]
|
tags: ["bootstrap", "shortcode"]
|
||||||
thumbnail:
|
thumbnail:
|
||||||
@@ -22,11 +22,10 @@ As an example, the following shortcode displays an accordion with three elements
|
|||||||
{{< example lang="hugo" >}}
|
{{< example lang="hugo" >}}
|
||||||
{{</* accordion */>}}
|
{{</* accordion */>}}
|
||||||
{{</* accordion-item header="Accordion Item #1" show="true" */>}}
|
{{</* accordion-item header="Accordion Item #1" show="true" */>}}
|
||||||
This is the first item's accordion body. It supports HTML content. The item is shown by adding the value
|
This is the first item's accordion body. It supports HTML content, if enabled in the goldmark renderer. The item is shown by adding the value `show` to the `class` argument.
|
||||||
<code>show</code> to the <code>class</code> argument.
|
|
||||||
{{</* /accordion-item */>}}
|
{{</* /accordion-item */>}}
|
||||||
{{</* accordion-item header="Accordion Item #2" */>}}
|
{{</* accordion-item header="Accordion Item #2" */>}}
|
||||||
This is the second item's accordion body. It supports HTML content too.
|
This is the second item's accordion body.
|
||||||
{{</* /accordion-item */>}}
|
{{</* /accordion-item */>}}
|
||||||
{{</* accordion-item header="Accordion Item #3" */>}}
|
{{</* accordion-item header="Accordion Item #3" */>}}
|
||||||
This is the third item's accordion body.
|
This is the third item's accordion body.
|
||||||
@@ -102,7 +101,28 @@ As an example, the following shortcode displays a stacked card that links to the
|
|||||||
|
|
||||||
<!-- markdownlint-disable MD037 -->
|
<!-- markdownlint-disable MD037 -->
|
||||||
{{< example lang="hugo" >}}
|
{{< example lang="hugo" >}}
|
||||||
{{</* card path="about" padding="3" class="w-50" color="body-tertiary" header="publication" footer="none" */>}}
|
{{</* card path="about" padding="3" class="col-6 mx-auto" color="body-tertiary" header="publication" footer="none" /*/>}}
|
||||||
|
{{< /example >}}
|
||||||
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
|
## Card group
|
||||||
|
|
||||||
|
As an example, the following shortcode displays a card group of three elements.
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD037 -->
|
||||||
|
{{< example lang="hugo" >}}
|
||||||
|
{{</* card-group padding="3" */>}}
|
||||||
|
{{</* card title="Bootstrap framework" icon="fab bootstrap" */>}}
|
||||||
|
Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source
|
||||||
|
Sass files.
|
||||||
|
{{</* /card */>}}
|
||||||
|
{{</* card title="Full text search" icon="fas magnifying-glass" */>}}
|
||||||
|
Search your site with FlexSearch, a full-text search library with zero dependencies.
|
||||||
|
{{</* /card */>}}
|
||||||
|
{{</* card title="Development tools" icon="fas code" */>}}
|
||||||
|
Use Node Package Manager to automate the build process and to keep track of dependencies.
|
||||||
|
{{</* /card */>}}
|
||||||
|
{{</* /card-group */>}}
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
<!-- markdownlint-enable MD037 -->
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
@@ -217,6 +237,31 @@ As an example, the following shortcode displays an image with rounded corners an
|
|||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
<!-- markdownlint-enable MD037 -->
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
|
## Link
|
||||||
|
|
||||||
|
As an example, the following shortcodes render links in different formats.
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD037 -->
|
||||||
|
{{< example lang="hugo" >}}
|
||||||
|
|
||||||
|
- {{</* link hinode >}}Named link with default settings{{< /link */>}}
|
||||||
|
- {{</* link name=hinode cue=false tab=false >}}Named link opening in current tab w/o icon{{< /link */>}}
|
||||||
|
- {{</* link name=hinode cue=true tab=true >}}Named link opening in new tab with icon{{< /link */>}}
|
||||||
|
- {{</* link hinode /*/>}}
|
||||||
|
- {{</* link href="https://developer.mozilla.org" >}}External link{{< /link */>}}
|
||||||
|
- {{</* link "./projects/another-project" >}}Internal link with title{{< /link */>}}
|
||||||
|
- {{</* link url="projects/another-project" /*/>}}
|
||||||
|
- {{</* link url="/projects/another-project" /*/>}}
|
||||||
|
- {{</* link url="../projects/another-project" case=false /*/>}}
|
||||||
|
- {{</* link "/about/" /*/>}}
|
||||||
|
- {{</* link "/fr/about/" /*/>}}
|
||||||
|
- {{</* link "/fr/about" >}}About (French){{< /link */>}}
|
||||||
|
- {{</* link "#image" /*/>}}
|
||||||
|
- {{</* link "components/#map" /*/>}}
|
||||||
|
|
||||||
|
{{< /example >}}
|
||||||
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
## Nav
|
## Nav
|
||||||
|
|
||||||
As an example, the following shortcode displays a tab group with vertically aligned pills.
|
As an example, the following shortcode displays a tab group with vertically aligned pills.
|
||||||
@@ -225,11 +270,10 @@ As an example, the following shortcode displays a tab group with vertically alig
|
|||||||
{{< example lang="hugo" >}}
|
{{< example lang="hugo" >}}
|
||||||
{{</* nav type="pills" vertical="true" */>}}
|
{{</* nav type="pills" vertical="true" */>}}
|
||||||
{{</* nav-item header="Nav Item #1" show="true" */>}}
|
{{</* nav-item header="Nav Item #1" show="true" */>}}
|
||||||
This is the first item's nav body. It supports HTML content. The item is shown by adding the value
|
This is the first item's nav body. It supports HTML content, if enabled in the goldmark renderer. The item is shown by adding the value `show` to the `class` argument.
|
||||||
<code>show</code> to the <code>class</code> argument.
|
|
||||||
{{</* /nav-item */>}}
|
{{</* /nav-item */>}}
|
||||||
{{</* nav-item header="Nav Item #2" */>}}
|
{{</* nav-item header="Nav Item #2" */>}}
|
||||||
This is the second item's nav body. It too supports HTML content.
|
This is the second item's nav body.
|
||||||
{{</* /nav-item */>}}
|
{{</* /nav-item */>}}
|
||||||
{{</* nav-item header="Nav Item #3" */>}}
|
{{</* nav-item header="Nav Item #3" */>}}
|
||||||
This is the third item's nav body.
|
This is the third item's nav body.
|
||||||
@@ -244,7 +288,7 @@ As an example, the following shortcode displays a light navigation header.
|
|||||||
|
|
||||||
<!-- markdownlint-disable MD037 -->
|
<!-- markdownlint-disable MD037 -->
|
||||||
{{< example lang="hugo" >}}
|
{{< example lang="hugo" >}}
|
||||||
{{</* navbar path="about" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
|
{{</* navbar id="navbar-sample" path="blog" color="primary" size="md" search="false" menus="sample" title="Brand" mode="false" */>}}
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
<!-- markdownlint-enable MD037 -->
|
<!-- markdownlint-enable MD037 -->
|
||||||
|
|
||||||
|
14
exampleSite/content/fr/_index.md
Normal file
14
exampleSite/content/fr/_index.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Bienvenue sur Hinode!
|
||||||
|
thumbnail:
|
||||||
|
url: /img/sunrise.jpg
|
||||||
|
author: Harris Vo
|
||||||
|
authorURL: https://unsplash.com/@hoanvokim
|
||||||
|
origin: https://unsplash.com/photos/ZX6BPboJrYk
|
||||||
|
originName: Unsplash
|
||||||
|
---
|
||||||
|
|
||||||
|
Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.
|
||||||
|
|
||||||
|
{{< button href="a-propos" >}}À propos{{< /button>}}
|
39
exampleSite/content/fr/about.md
Normal file
39
exampleSite/content/fr/about.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
slug: a-propos
|
||||||
|
title: À propos
|
||||||
|
description: Un thème de blog et de documentation pour Hugo basé sur Bootstrap 5.
|
||||||
|
date: 2023-02-17
|
||||||
|
updated: 2023-08-02
|
||||||
|
showComments: false
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
|
||||||
|
|
||||||
|
{{< card-group class="text-center border-0" padding="3" >}}
|
||||||
|
{{< card title="Framework Bootstrap" icon="fab bootstrap" >}}
|
||||||
|
Créez des sites rapides et réactifs avec Bootstrap 5. Personnalisez facilement votre site avec les fichiers source Sass.
|
||||||
|
{{< /card >}}
|
||||||
|
{{< card title="Recherche en texte intégral" icon="fas magnifying-glass" >}}
|
||||||
|
Recherchez votre site avec FlexSearch, une bibliothèque de recherche en texte intégral avec zéro dépendances.
|
||||||
|
{{< /card >}}
|
||||||
|
{{< card title="Outils de développement" icon="fas code" >}}
|
||||||
|
Utilisez Node Package Manager pour automatiser le processus de construction et suivre les dépendances.
|
||||||
|
{{< /card >}}
|
||||||
|
{{< /card-group >}}
|
||||||
|
|
||||||
|
Les fonctionnalités supplémentaires incluent:
|
||||||
|
|
||||||
|
- Passer du mode clair au mode sombre
|
||||||
|
- Prise en charge de plusieurs langues
|
||||||
|
- Composants bootstrap réutilisables à travers des codes et partiels configurables
|
||||||
|
- Documentation versionnée, incluant une navigation latérale et un sélecteur de version.
|
||||||
|
- Commentaires intégrés via une intégration légère avec GitHub via [utteranc.es]({{< param "links.utterances" >}})
|
||||||
|
- Gestion d'images adaptatives pour plusieurs tailles d'écran et résolutions.
|
||||||
|
- Résultats de recherche optimisés, obtenant un score de 100 points pour le référencement (SEO) sur [PageSpeed Insights]({{< param "links.pagespeed" >}}).
|
||||||
|
- Sécurisé par défaut, obtenant un score A+ au test [Mozilla Observatory]({{< param "links.observatory" >}})
|
||||||
|
{.tickmark}
|
||||||
|
|
||||||
|
Hinode est inspiré par les thèmes suivants:
|
||||||
|
|
||||||
|
- [Blist](https://github.com/apvarun/blist-hugo-theme) - Un thème de blog pour Hugo basé sur Tailwind CSS.
|
||||||
|
- [Doks](https://github.com/h-enk/doks) - Un thème Hugo pour la création de sites de documentation sécurisés, rapides et optimisés pour le référencement (SEO), que vous pouvez facilement mettre à jour et personnaliser.
|
4
exampleSite/content/fr/blog/_index.md
Normal file
4
exampleSite/content/fr/blog/_index.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Blog
|
||||||
|
---
|
18
exampleSite/content/fr/blog/first-post.md
Normal file
18
exampleSite/content/fr/blog/first-post.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Premier article
|
||||||
|
slug: premier-article
|
||||||
|
date: 2022-10-01
|
||||||
|
description: Ceci est mon premier article.
|
||||||
|
tags: ["blog"]
|
||||||
|
thumbnail:
|
||||||
|
url: img/notepad.jpg
|
||||||
|
author: Frederick Medina
|
||||||
|
authorURL: https://unsplash.com/@frederickjmedina
|
||||||
|
origin: Unsplash
|
||||||
|
originURL: https://unsplash.com/photos/PdfRE-xB--s
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vulputate, ante in luctus congue, leo risus semper justo, vel consequat sapien lectus quis ipsum. In imperdiet urna justo. Nulla vel pellentesque ipsum. Cras congue feugiat dolor ac aliquam. Pellentesque eget dui venenatis, ultrices urna ac, vehicula nibh. Curabitur est lectus, dapibus eu vehicula non, malesuada et dui. Nam enim nulla, egestas et nunc non, elementum aliquet justo. Mauris euismod mauris sapien, eget vestibulum odio dictum sit amet. Morbi nisl elit, placerat at auctor in, finibus ac neque. Curabitur placerat feugiat risus non vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis cursus est, nec posuere libero.
|
||||||
|
|
||||||
|
In ac lobortis diam. Curabitur id dui ac nunc mattis rhoncus a sed lorem. Sed lobortis sem turpis, at posuere enim dignissim et. Vivamus fermentum justo quis volutpat volutpat. Proin eget vehicula neque, ut tempus urna. Duis ac ex vel leo pharetra lobortis et vitae lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat. Suspendisse ullamcorper ultrices elementum. Suspendisse mi elit, commodo at varius a, cursus a ligula. Sed et mattis elit, eu luctus arcu. Cras a porttitor libero. Vestibulum tincidunt sed magna at dapibus. Sed quis orci eu lacus aliquam tristique. Integer porttitor ultrices ipsum quis porttitor. Etiam a sodales ligula.
|
20
exampleSite/content/fr/blog/fourth-post.md
Normal file
20
exampleSite/content/fr/blog/fourth-post.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Quatrième article
|
||||||
|
slug: quatrieme-article
|
||||||
|
date: 2023-01-01
|
||||||
|
description: Ceci est mon quatrième article.
|
||||||
|
tags: ["blog"]
|
||||||
|
thumbnail:
|
||||||
|
url: img/flowers.jpg
|
||||||
|
author: Arvee Marie
|
||||||
|
authorURL: https://unsplash.com/@flutterhappy
|
||||||
|
origin: Unsplash
|
||||||
|
originURL: https://unsplash.com/photos/YnfGtpt2gf4
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam finibus libero in felis accumsan, vitae imperdiet metus vehicula. Quisque nec dignissim purus. In id dui porta sapien posuere viverra nec vel nisi. Sed varius tincidunt lectus, quis sagittis felis interdum id. Proin purus odio, ultrices auctor libero convallis, volutpat gravida turpis. Ut commodo metus orci, quis sagittis lectus rhoncus non. Nulla et lectus tortor. Suspendisse quam felis, molestie non odio quis, consequat venenatis orci. Etiam sed turpis sit amet elit scelerisque imperdiet. Sed suscipit felis non nibh suscipit egestas. Nulla sodales libero non rhoncus consequat. Nunc in elit at est cursus congue ut ac velit. Cras luctus libero augue, id semper sapien volutpat ultrices.
|
||||||
|
|
||||||
|
Pellentesque sit amet sollicitudin nibh. Cras in dolor eget quam feugiat ultricies in ac lectus. Ut venenatis vitae justo quis pretium. Pellentesque vulputate nulla ac est iaculis vulputate. Proin pellentesque sem nec molestie imperdiet. Duis eu molestie sapien, vel ultricies lacus. Donec in felis tempus, rutrum ipsum at, fermentum felis. Praesent mi odio, semper non vulputate vitae, vulputate quis ex.
|
||||||
|
|
||||||
|
Nunc rhoncus eleifend gravida. Aliquam feugiat tristique pellentesque. Pellentesque vel elit sed nulla commodo convallis. Curabitur placerat sapien augue, ac semper metus volutpat non. Sed semper ultricies enim, consequat convallis justo placerat eget. Ut fermentum leo facilisis metus congue commodo. Vestibulum consectetur magna vitae ullamcorper sodales. Nulla lobortis aliquam odio id tincidunt. Suspendisse efficitur auctor tortor non consequat. Quisque sit amet posuere lorem, convallis bibendum nisi. Proin ullamcorper justo tempus dignissim scelerisque. Quisque sit amet sapien libero. Phasellus eget enim velit. Proin ut fermentum dui. Proin gravida tortor in ligula lacinia, id dapibus dui tincidunt. Mauris suscipit nisi et urna consectetur, non venenatis nisi euismod.
|
20
exampleSite/content/fr/blog/second-post.md
Normal file
20
exampleSite/content/fr/blog/second-post.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Deuxième article
|
||||||
|
slug: deuxieme-article
|
||||||
|
date: 2022-11-01
|
||||||
|
description: Ceci est mon deuxième article.
|
||||||
|
tags: ["blog"]
|
||||||
|
thumbnail:
|
||||||
|
url: img/phone.jpg
|
||||||
|
author: Thom
|
||||||
|
authorURL: https://unsplash.com/@thomweerd
|
||||||
|
origin: Unsplash
|
||||||
|
originURL: https://unsplash.com/photos/Zdcq3iKly6g
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non sollicitudin sapien. Ut porttitor lectus eu tempor ultricies. Sed semper tincidunt nibh pellentesque condimentum. Vivamus dictum sem eu rhoncus semper. Vestibulum convallis congue tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris magna urna, egestas sit amet ligula quis, viverra semper arcu. Praesent laoreet nunc vitae nulla posuere facilisis.
|
||||||
|
|
||||||
|
Nunc eget dignissim ex, sed lobortis leo. Suspendisse mollis posuere tellus, in viverra nunc ullamcorper vitae. Nam vel tempor arcu, in imperdiet odio. Fusce malesuada vehicula odio, in iaculis nulla congue eget. Quisque id odio id nisl facilisis posuere porta sit amet mauris. Curabitur lorem leo, tempus id rhoncus eget, placerat vitae lectus. Morbi eu aliquet enim. Nulla malesuada laoreet sodales.
|
||||||
|
|
||||||
|
Nunc volutpat dui in elit euismod, sed egestas purus tristique. Nam in condimentum mauris. Praesent nec suscipit enim. Aliquam dolor ipsum, faucibus vitae purus ac, congue egestas nisi. Donec hendrerit erat eu arcu porttitor rhoncus. Nunc a odio bibendum metus semper pellentesque. Sed at sapien ut est semper eleifend. Aliquam lorem libero, porttitor nec tristique ut, auctor vitae ipsum. Suspendisse pretium pharetra rutrum. Nulla tincidunt tempus enim eu sagittis. Maecenas pulvinar metus a urna mattis dictum sed id tellus.
|
20
exampleSite/content/fr/blog/third-post.md
Normal file
20
exampleSite/content/fr/blog/third-post.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
author: Mark Dumay
|
||||||
|
title: Troisième article
|
||||||
|
slug: troisieme-article
|
||||||
|
date: 2022-12-01
|
||||||
|
description: Ceci est mon troisième article.
|
||||||
|
tags: ["blog"]
|
||||||
|
thumbnail:
|
||||||
|
url: https://picsum.photos/id/184/4288/2848.jpg
|
||||||
|
author: Tim de Groot
|
||||||
|
authorURL: https://unsplash.com/@timdegroot
|
||||||
|
origin: Unsplash
|
||||||
|
originURL: https://unsplash.com/photos/yNGQ830uFB4
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent id scelerisque ligula. Vestibulum eu lorem tortor. Suspendisse tristique ultrices mauris, non maximus lorem faucibus in. Suspendisse sagittis eleifend dapibus. Curabitur dignissim luctus sapien eu consequat. Proin congue dui vel ipsum bibendum varius. Pellentesque cursus nisi metus, egestas eleifend ipsum sollicitudin vitae. Sed vitae erat elementum, semper turpis sed, molestie nulla.
|
||||||
|
|
||||||
|
Nulla molestie ultrices vehicula. Etiam iaculis, erat a blandit blandit, nulla tellus dapibus ligula, vitae venenatis turpis diam non felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu in justo iaculis egestas. In imperdiet arcu vitae pharetra commodo. Quisque ut erat eget nisl semper laoreet vitae eget ligula. Mauris bibendum purus nec vulputate faucibus. In luctus sagittis ante, quis laoreet orci bibendum vitae. Nam at odio accumsan, tincidunt eros at, lacinia metus. In et ultricies sapien, a mollis est. Nunc convallis orci eu tristique euismod. Proin vel ullamcorper diam. Quisque et semper orci. Proin pharetra lorem justo, id malesuada erat feugiat sit amet. Praesent bibendum mi at lorem volutpat suscipit. Morbi sed libero elit.
|
||||||
|
|
||||||
|
Nunc sodales est eu ipsum volutpat, in mollis dui facilisis. Nulla faucibus interdum lectus, a condimentum elit vulputate eu. Nunc ipsum risus, suscipit sit amet nulla ac, pulvinar maximus nulla. In venenatis diam erat, non elementum ante dignissim posuere. Aliquam sem justo, luctus at vestibulum ut, egestas ut quam. Quisque a dolor viverra, aliquam nunc vel, lacinia nulla. In id magna magna. Morbi dapibus pretium sollicitudin. Morbi volutpat augue at felis tristique, quis euismod tellus vulputate. Morbi dui lacus, aliquam eget quam vel, vestibulum faucibus enim. Proin porta pretium metus id venenatis. Aliquam nec tempor lorem. Vivamus euismod est varius sagittis placerat. Maecenas tincidunt elementum libero, at imperdiet elit feugiat vel.
|
6
exampleSite/content/fr/browserconfig.md
Normal file
6
exampleSite/content/fr/browserconfig.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
draft: false
|
||||||
|
outputs:
|
||||||
|
- xml
|
||||||
|
url: browserconfig.xml
|
||||||
|
---
|
5
exampleSite/content/fr/projects/_index.md
Normal file
5
exampleSite/content/fr/projects/_index.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
author: Katheryn Fox
|
||||||
|
title: Projets
|
||||||
|
url: "projets"
|
||||||
|
---
|
12
exampleSite/content/fr/projects/another-project.md
Normal file
12
exampleSite/content/fr/projects/another-project.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
author: "Hugo Authors"
|
||||||
|
slug: "autre-projet"
|
||||||
|
title: "Autre projet"
|
||||||
|
url: "projets/autre-projet"
|
||||||
|
date: 2021-07-15
|
||||||
|
description: "Un autre projet."
|
||||||
|
tags: ["javascript", "golang"]
|
||||||
|
icon: fas rocket
|
||||||
|
---
|
||||||
|
|
||||||
|
Vivamus iaculis metus sed magna porta tincidunt. Aliquam molestie eget orci eu elementum. Integer pellentesque dolor sit amet suscipit maximus. Duis consequat, massa vitae volutpat rhoncus, erat augue venenatis velit, a auctor leo nulla nec turpis. Nunc ut libero sapien. Vivamus aliquam ultrices vestibulum. Sed sit amet vestibulum dolor, ut vehicula diam. Sed felis purus, feugiat vitae vulputate quis, sodales vitae dui. Pellentesque volutpat fringilla sapien varius condimentum. Integer odio massa, pharetra at bibendum vitae, aliquam nec erat.
|
12
exampleSite/content/fr/projects/sample-project.md
Normal file
12
exampleSite/content/fr/projects/sample-project.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
author: "Hugo Authors"
|
||||||
|
slug: "exemple-de-projet"
|
||||||
|
title: "Exemple de projet"
|
||||||
|
url: "projets/exemple-de-projet"
|
||||||
|
date: 2021-07-15
|
||||||
|
description: "Un exemple de projet."
|
||||||
|
tags: ["html", "css"]
|
||||||
|
icon: fab docker
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
@@ -7,30 +7,20 @@ updated: 2023-08-02
|
|||||||
showComments: false
|
showComments: false
|
||||||
---
|
---
|
||||||
|
|
||||||
<p class="text-center"><svg class="img-fluid w-50"><use href="/img/logo_var.svg#logo"></use></svg></p>
|
|
||||||
|
|
||||||
<section class="section section-sm mt-5">
|
{{< image src="/img/logo_var.svg#logo" class="img-fluid w-50" wrapper="text-center" >}}
|
||||||
<div class="container-fluid">
|
|
||||||
<div class="row justify-content-center text-center">
|
{{< card-group class="text-center border-0" padding="3" >}}
|
||||||
<div class="row justify-content-center text-center">
|
{{< card title="Bootstrap raamwerk" icon="fab bootstrap" >}}
|
||||||
<div class="col-lg-4">
|
Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.
|
||||||
{{< icon fab bootstrap fa-2xl >}}
|
{{< /card >}}
|
||||||
<h2 class="h4">Bootstrap raamwerk</h2>
|
{{< card title="Volledig doorzoekbaar" icon="fas magnifying-glass" >}}
|
||||||
<p>Bouw snelle websites geschikt voor mobiele en desktop schermen met Bootstrap 5. Pas de site eenvoudig aan met bronbestanden in Sass.</p>
|
Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.
|
||||||
</div>
|
{{< /card >}}
|
||||||
<div class="col-lg-4">
|
{{< card title="Ontwikkelgereedschap" icon="fas code" >}}
|
||||||
{{< icon fas magnifying-glass fa-2xl >}}
|
Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.
|
||||||
<h2 class="h4">Volledig doorzoekbaar</h2>
|
{{< /card >}}
|
||||||
<p>Doorzoek je site met FlexSearch, een software bibliotheek zonder afhankelijkheden.</p>
|
{{< /card-group >}}
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
{{< icon fas code fa-2xl >}}
|
|
||||||
<h2 class="h4">Ontwikkelgereedschap</h2>
|
|
||||||
<p>Gebruik Node Package Manager om het bouwproces inclusief versiebeheer volledig te automatiseren.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
Overige functies:
|
Overige functies:
|
||||||
|
|
||||||
|
@@ -4,8 +4,8 @@ go 1.19
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
|
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0 // indirect
|
github.com/gethinode/mod-flexsearch v1.4.0 // indirect
|
||||||
github.com/gethinode/mod-fontawesome v1.2.4 // indirect
|
github.com/gethinode/mod-fontawesome v1.2.5 // indirect
|
||||||
github.com/gethinode/mod-katex v1.0.2 // indirect
|
github.com/gethinode/mod-katex v1.0.2 // indirect
|
||||||
github.com/gethinode/mod-leaflet v0.3.4 // indirect
|
github.com/gethinode/mod-leaflet v0.3.4 // indirect
|
||||||
)
|
)
|
||||||
|
@@ -2,8 +2,15 @@ github.com/gethinode/mod-bootstrap v1.1.1 h1:Tx4M5hGVOFrEaxnUONDAm6N9xuRi5UphKlT
|
|||||||
github.com/gethinode/mod-bootstrap v1.1.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
|
github.com/gethinode/mod-bootstrap v1.1.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
|
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.3.0 h1:RbfEDw219Y1rOVp9lHmy5ePdF9lyPalDu2J5oVeejrU=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.3.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.4.0 h1:5e/NVRLyWzUZ9fO/fNsM5o+O7nw+xyln2rfEOtbgfWc=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.4.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
github.com/gethinode/mod-fontawesome v1.2.4 h1:SqE3CQ+boaBIhrVh3MPu4nz0uoHPfEH5t60nNY1CfsI=
|
github.com/gethinode/mod-fontawesome v1.2.4 h1:SqE3CQ+boaBIhrVh3MPu4nz0uoHPfEH5t60nNY1CfsI=
|
||||||
github.com/gethinode/mod-fontawesome v1.2.4/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
github.com/gethinode/mod-fontawesome v1.2.4/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||||
|
github.com/gethinode/mod-fontawesome v1.2.5 h1:RqkLRj6+s+gM4nKd0IwNMMDA8cRmxfp0fxkVH4FdAGU=
|
||||||
|
github.com/gethinode/mod-fontawesome v1.2.5/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||||
|
github.com/gethinode/mod-katex v1.0.1/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
||||||
github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk=
|
github.com/gethinode/mod-katex v1.0.2 h1:pIG4n3qLl/IVe7BEiwn+GL8r5lOCtF6FDxlcrPKdAXk=
|
||||||
github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
github.com/gethinode/mod-katex v1.0.2/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
|
||||||
github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp4ia4r4=
|
github.com/gethinode/mod-leaflet v0.3.4 h1:oY+YQ0JiJuhFQNrk9XgFdg0NMsTUQPXNfnILp4ia4r4=
|
||||||
|
463
exampleSite/hugo_stats.json
Normal file
463
exampleSite/hugo_stats.json
Normal file
@@ -0,0 +1,463 @@
|
|||||||
|
{
|
||||||
|
"htmlElements": {
|
||||||
|
"tags": [
|
||||||
|
"a",
|
||||||
|
"body",
|
||||||
|
"br",
|
||||||
|
"button",
|
||||||
|
"code",
|
||||||
|
"div",
|
||||||
|
"figcaption",
|
||||||
|
"figure",
|
||||||
|
"footer",
|
||||||
|
"form",
|
||||||
|
"h1",
|
||||||
|
"h2",
|
||||||
|
"h3",
|
||||||
|
"h4",
|
||||||
|
"h5",
|
||||||
|
"h6",
|
||||||
|
"head",
|
||||||
|
"hr",
|
||||||
|
"html",
|
||||||
|
"i",
|
||||||
|
"img",
|
||||||
|
"input",
|
||||||
|
"li",
|
||||||
|
"link",
|
||||||
|
"meta",
|
||||||
|
"nav",
|
||||||
|
"nil",
|
||||||
|
"noscript",
|
||||||
|
"ol",
|
||||||
|
"p",
|
||||||
|
"path",
|
||||||
|
"pre",
|
||||||
|
"script",
|
||||||
|
"small",
|
||||||
|
"span",
|
||||||
|
"strong",
|
||||||
|
"svg",
|
||||||
|
"time",
|
||||||
|
"title",
|
||||||
|
"ul",
|
||||||
|
"use"
|
||||||
|
],
|
||||||
|
"classes": [
|
||||||
|
"accordion",
|
||||||
|
"accordion-body",
|
||||||
|
"accordion-button",
|
||||||
|
"accordion-collapse",
|
||||||
|
"accordion-header",
|
||||||
|
"accordion-item",
|
||||||
|
"active",
|
||||||
|
"alert",
|
||||||
|
"alert-danger",
|
||||||
|
"alert-dismissible",
|
||||||
|
"align-content-center",
|
||||||
|
"align-items-center",
|
||||||
|
"align-items-end",
|
||||||
|
"align-items-start",
|
||||||
|
"align-middle",
|
||||||
|
"align-self-center",
|
||||||
|
"anchor",
|
||||||
|
"badge",
|
||||||
|
"bg-body",
|
||||||
|
"bg-body-tertiary",
|
||||||
|
"bg-danger",
|
||||||
|
"bg-info",
|
||||||
|
"bg-opacity-10",
|
||||||
|
"bg-primary",
|
||||||
|
"bg-primary-subtle",
|
||||||
|
"bg-secondary",
|
||||||
|
"border",
|
||||||
|
"border-0",
|
||||||
|
"border-1",
|
||||||
|
"border-bottom",
|
||||||
|
"border-end",
|
||||||
|
"border-none",
|
||||||
|
"border-start",
|
||||||
|
"border-top",
|
||||||
|
"bottom-0",
|
||||||
|
"bottom-bar",
|
||||||
|
"breadcrumb",
|
||||||
|
"breadcrumb-item",
|
||||||
|
"btn",
|
||||||
|
"btn-close",
|
||||||
|
"btn-group",
|
||||||
|
"btn-light",
|
||||||
|
"btn-outline-primary",
|
||||||
|
"btn-outline-secondary",
|
||||||
|
"btn-primary",
|
||||||
|
"btn-secondary",
|
||||||
|
"btn-sm",
|
||||||
|
"btn-social",
|
||||||
|
"card",
|
||||||
|
"card-body",
|
||||||
|
"card-body-link",
|
||||||
|
"card-emphasize",
|
||||||
|
"card-img-top",
|
||||||
|
"card-img-wrap",
|
||||||
|
"card-text",
|
||||||
|
"card-title",
|
||||||
|
"card-zoom",
|
||||||
|
"carousel",
|
||||||
|
"carousel-caption",
|
||||||
|
"carousel-control-next",
|
||||||
|
"carousel-control-next-icon",
|
||||||
|
"carousel-control-prev",
|
||||||
|
"carousel-control-prev-icon",
|
||||||
|
"carousel-indicators",
|
||||||
|
"carousel-inner",
|
||||||
|
"carousel-item",
|
||||||
|
"chroma",
|
||||||
|
"col",
|
||||||
|
"col-12",
|
||||||
|
"col-3",
|
||||||
|
"col-4",
|
||||||
|
"col-6",
|
||||||
|
"col-8",
|
||||||
|
"col-9",
|
||||||
|
"col-lg-2",
|
||||||
|
"col-lg-4",
|
||||||
|
"col-lg-8",
|
||||||
|
"col-md-10",
|
||||||
|
"col-md-2",
|
||||||
|
"col-md-4",
|
||||||
|
"col-md-8",
|
||||||
|
"col-md-auto",
|
||||||
|
"col-sm-12",
|
||||||
|
"col-sm-3",
|
||||||
|
"col-sm-6",
|
||||||
|
"collapse",
|
||||||
|
"collapsed",
|
||||||
|
"container",
|
||||||
|
"container-fluid",
|
||||||
|
"container-xxl",
|
||||||
|
"d-block",
|
||||||
|
"d-flex",
|
||||||
|
"d-grid",
|
||||||
|
"d-inline",
|
||||||
|
"d-inline-flex",
|
||||||
|
"d-lg-block",
|
||||||
|
"d-md-block",
|
||||||
|
"d-md-flex",
|
||||||
|
"d-md-none",
|
||||||
|
"d-none",
|
||||||
|
"d-none-dark",
|
||||||
|
"d-none-light",
|
||||||
|
"d-sm-block",
|
||||||
|
"d-sm-none",
|
||||||
|
"display-1",
|
||||||
|
"display-4",
|
||||||
|
"dropdown",
|
||||||
|
"dropdown-divider-bg",
|
||||||
|
"dropdown-item",
|
||||||
|
"dropdown-menu",
|
||||||
|
"dropdown-menu-end",
|
||||||
|
"dropdown-toggle",
|
||||||
|
"emphasis",
|
||||||
|
"emphasis-dark",
|
||||||
|
"end-0",
|
||||||
|
"fa",
|
||||||
|
"fa-10x",
|
||||||
|
"fa-2x",
|
||||||
|
"fa-2xs",
|
||||||
|
"fa-4x",
|
||||||
|
"fa-arrow-left",
|
||||||
|
"fa-arrow-right",
|
||||||
|
"fa-bootstrap",
|
||||||
|
"fa-circle-check",
|
||||||
|
"fa-circle-half-stroke",
|
||||||
|
"fa-code",
|
||||||
|
"fa-docker",
|
||||||
|
"fa-ellipsis",
|
||||||
|
"fa-face-frown",
|
||||||
|
"fa-facebook",
|
||||||
|
"fa-fluid",
|
||||||
|
"fa-fw",
|
||||||
|
"fa-github",
|
||||||
|
"fa-globe",
|
||||||
|
"fa-heart",
|
||||||
|
"fa-house",
|
||||||
|
"fa-link",
|
||||||
|
"fa-linkedin",
|
||||||
|
"fa-magnifying-glass",
|
||||||
|
"fa-medium",
|
||||||
|
"fa-moon",
|
||||||
|
"fa-rocket",
|
||||||
|
"fa-share-nodes",
|
||||||
|
"fa-sort",
|
||||||
|
"fa-square-check",
|
||||||
|
"fa-sun",
|
||||||
|
"fa-up-right-from-square",
|
||||||
|
"fa-whatsapp",
|
||||||
|
"fa-wrapper",
|
||||||
|
"fa-x-twitter",
|
||||||
|
"fab",
|
||||||
|
"fade",
|
||||||
|
"fas",
|
||||||
|
"feature",
|
||||||
|
"figure-caption",
|
||||||
|
"fixed-top",
|
||||||
|
"flex-column",
|
||||||
|
"flex-fill",
|
||||||
|
"flex-grow-1",
|
||||||
|
"flex-wrap",
|
||||||
|
"font-monospace",
|
||||||
|
"footer",
|
||||||
|
"form-control",
|
||||||
|
"fs-3",
|
||||||
|
"fs-5",
|
||||||
|
"fw-30",
|
||||||
|
"fw-bold",
|
||||||
|
"fw-semibold",
|
||||||
|
"g-0",
|
||||||
|
"g-3",
|
||||||
|
"gap-2",
|
||||||
|
"gap-3",
|
||||||
|
"gradient",
|
||||||
|
"h-100",
|
||||||
|
"h6",
|
||||||
|
"heading",
|
||||||
|
"highlight",
|
||||||
|
"hstack",
|
||||||
|
"img-fluid",
|
||||||
|
"img-wrap",
|
||||||
|
"invisible",
|
||||||
|
"is-search",
|
||||||
|
"justify-content-between",
|
||||||
|
"justify-content-center",
|
||||||
|
"justify-content-end",
|
||||||
|
"justify-content-start",
|
||||||
|
"lead",
|
||||||
|
"leaflet-map",
|
||||||
|
"link-bg-body",
|
||||||
|
"link-bg-body-tertiary",
|
||||||
|
"link-bg-footer",
|
||||||
|
"link-primary",
|
||||||
|
"link-secondary",
|
||||||
|
"link-success",
|
||||||
|
"link-warning",
|
||||||
|
"m-0",
|
||||||
|
"main-nav-toggler",
|
||||||
|
"mb-0",
|
||||||
|
"mb-3",
|
||||||
|
"mb-4",
|
||||||
|
"mb-5",
|
||||||
|
"mb-lg-5",
|
||||||
|
"me-3",
|
||||||
|
"me-auto",
|
||||||
|
"middle-bar",
|
||||||
|
"min-vh-100",
|
||||||
|
"ms-1",
|
||||||
|
"ms-3",
|
||||||
|
"ms-auto",
|
||||||
|
"ms-md-3",
|
||||||
|
"mt-2",
|
||||||
|
"mt-3",
|
||||||
|
"mt-5",
|
||||||
|
"mt-auto",
|
||||||
|
"multi-docs-collapse-15",
|
||||||
|
"multi-file-collapse-1",
|
||||||
|
"mx-auto",
|
||||||
|
"mx-md-2",
|
||||||
|
"my-2",
|
||||||
|
"my-auto",
|
||||||
|
"my-md-0",
|
||||||
|
"nav",
|
||||||
|
"nav-item",
|
||||||
|
"nav-link",
|
||||||
|
"nav-pills",
|
||||||
|
"nav-tabs",
|
||||||
|
"navbar",
|
||||||
|
"navbar-brand",
|
||||||
|
"navbar-collapse",
|
||||||
|
"navbar-contrast",
|
||||||
|
"navbar-expand-md",
|
||||||
|
"navbar-nav",
|
||||||
|
"navbar-nav-scroll",
|
||||||
|
"navbar-toggler",
|
||||||
|
"next",
|
||||||
|
"no-js",
|
||||||
|
"order-1",
|
||||||
|
"order-2",
|
||||||
|
"order-3",
|
||||||
|
"order-4",
|
||||||
|
"order-first",
|
||||||
|
"order-sm-2",
|
||||||
|
"order-sm-3",
|
||||||
|
"p-0",
|
||||||
|
"p-1",
|
||||||
|
"p-2",
|
||||||
|
"p-3",
|
||||||
|
"p-4",
|
||||||
|
"pb-2",
|
||||||
|
"pb-3",
|
||||||
|
"pb-5",
|
||||||
|
"pe-3",
|
||||||
|
"position-absolute",
|
||||||
|
"position-fixed",
|
||||||
|
"position-relative",
|
||||||
|
"post-date",
|
||||||
|
"previous",
|
||||||
|
"ps-1",
|
||||||
|
"ps-3",
|
||||||
|
"ps-xl-3",
|
||||||
|
"pt-3",
|
||||||
|
"px-3",
|
||||||
|
"px-4",
|
||||||
|
"px-xxl-0",
|
||||||
|
"py-1",
|
||||||
|
"py-2",
|
||||||
|
"py-3",
|
||||||
|
"py-5",
|
||||||
|
"py-md-1",
|
||||||
|
"ratio",
|
||||||
|
"ratio-16x9",
|
||||||
|
"rounded",
|
||||||
|
"rounded-2",
|
||||||
|
"rounded-bottom",
|
||||||
|
"rounded-pill",
|
||||||
|
"rounded-top",
|
||||||
|
"row",
|
||||||
|
"row-cols-1",
|
||||||
|
"row-cols-2",
|
||||||
|
"row-cols-md-3",
|
||||||
|
"row-cols-sm-2",
|
||||||
|
"row-cols-sm-3",
|
||||||
|
"row-cols-sm-4",
|
||||||
|
"search",
|
||||||
|
"search-input",
|
||||||
|
"search-suggestions",
|
||||||
|
"shadow",
|
||||||
|
"show",
|
||||||
|
"slide",
|
||||||
|
"small",
|
||||||
|
"spinner-border",
|
||||||
|
"start-100",
|
||||||
|
"sticky-top",
|
||||||
|
"stretched-link",
|
||||||
|
"svg-inline--fa",
|
||||||
|
"switch-mode-collapsed",
|
||||||
|
"syntax-highlight",
|
||||||
|
"tab-content",
|
||||||
|
"tab-pane",
|
||||||
|
"tag-link",
|
||||||
|
"text-bg-body",
|
||||||
|
"text-bg-body-tertiary",
|
||||||
|
"text-bg-info",
|
||||||
|
"text-bg-primary",
|
||||||
|
"text-bg-success",
|
||||||
|
"text-bg-warning",
|
||||||
|
"text-body",
|
||||||
|
"text-body-secondary",
|
||||||
|
"text-break",
|
||||||
|
"text-center",
|
||||||
|
"text-decoration-none",
|
||||||
|
"text-end",
|
||||||
|
"text-info",
|
||||||
|
"text-nowrap",
|
||||||
|
"text-right",
|
||||||
|
"text-secondary",
|
||||||
|
"text-sm-start",
|
||||||
|
"text-uppercase",
|
||||||
|
"theme-icon",
|
||||||
|
"theme-icon-active",
|
||||||
|
"tickmark",
|
||||||
|
"timeline",
|
||||||
|
"timeline-bg-dark",
|
||||||
|
"timeline-connector-end",
|
||||||
|
"timeline-connector-start",
|
||||||
|
"timeline-description-text-end",
|
||||||
|
"timeline-description-text-start",
|
||||||
|
"timeline-dot",
|
||||||
|
"timeline-info",
|
||||||
|
"timeline-panel-end",
|
||||||
|
"timeline-panel-start",
|
||||||
|
"timeline-primary",
|
||||||
|
"timeline-semi-circle-end",
|
||||||
|
"timeline-semi-circle-start",
|
||||||
|
"timeline-sm",
|
||||||
|
"timeline-success",
|
||||||
|
"timeline-warning",
|
||||||
|
"toast",
|
||||||
|
"toast-body",
|
||||||
|
"toast-container",
|
||||||
|
"toast-header",
|
||||||
|
"toc",
|
||||||
|
"toc-button",
|
||||||
|
"toc-panel",
|
||||||
|
"toc-sidebar",
|
||||||
|
"toggler-icon",
|
||||||
|
"top-0",
|
||||||
|
"top-bar",
|
||||||
|
"translate-middle",
|
||||||
|
"visually-hidden",
|
||||||
|
"vr",
|
||||||
|
"w-100",
|
||||||
|
"w-50"
|
||||||
|
],
|
||||||
|
"ids": [
|
||||||
|
"-theme",
|
||||||
|
"-theme-collapsed",
|
||||||
|
"TableOfContents",
|
||||||
|
"accordion",
|
||||||
|
"accordion-0",
|
||||||
|
"accordion-0-heading-0",
|
||||||
|
"accordion-0-heading-1",
|
||||||
|
"accordion-0-heading-2",
|
||||||
|
"accordion-0-item-0",
|
||||||
|
"accordion-0-item-1",
|
||||||
|
"accordion-0-item-2",
|
||||||
|
"alert",
|
||||||
|
"badge",
|
||||||
|
"body-docs-collapse-15",
|
||||||
|
"body-file-collapse-1",
|
||||||
|
"breadcrumb",
|
||||||
|
"btn-webshare",
|
||||||
|
"button",
|
||||||
|
"button-group",
|
||||||
|
"card",
|
||||||
|
"card-group",
|
||||||
|
"carousel",
|
||||||
|
"carousel-0",
|
||||||
|
"collapse",
|
||||||
|
"collapse-1",
|
||||||
|
"command-prompt",
|
||||||
|
"docs",
|
||||||
|
"example",
|
||||||
|
"file",
|
||||||
|
"footer-docs-collapse-15",
|
||||||
|
"footer-file-collapse-1",
|
||||||
|
"formula-katex",
|
||||||
|
"icon",
|
||||||
|
"image",
|
||||||
|
"leaflet-map-0",
|
||||||
|
"link",
|
||||||
|
"map",
|
||||||
|
"nav",
|
||||||
|
"nav-0",
|
||||||
|
"nav-0-0",
|
||||||
|
"nav-0-1",
|
||||||
|
"nav-0-2",
|
||||||
|
"nav-0-btn-0",
|
||||||
|
"nav-0-btn-1",
|
||||||
|
"nav-0-btn-2",
|
||||||
|
"navbar",
|
||||||
|
"navbar-0-collapse",
|
||||||
|
"navbar-sample-collapse",
|
||||||
|
"release",
|
||||||
|
"spinner",
|
||||||
|
"timeline",
|
||||||
|
"toast",
|
||||||
|
"toast-container",
|
||||||
|
"toast-copied-code-message",
|
||||||
|
"toast-example-1",
|
||||||
|
"toast-example-2",
|
||||||
|
"toast-message-email-4",
|
||||||
|
"toc-collapse",
|
||||||
|
"tooltip"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
2
go.mod
2
go.mod
@@ -4,7 +4,7 @@ go 1.19
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
|
github.com/gethinode/mod-bootstrap v1.1.1 // indirect
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0 // indirect
|
github.com/gethinode/mod-flexsearch v1.4.0 // indirect
|
||||||
github.com/gethinode/mod-fontawesome v1.2.5 // indirect
|
github.com/gethinode/mod-fontawesome v1.2.5 // indirect
|
||||||
github.com/gethinode/mod-katex v1.0.2 // indirect
|
github.com/gethinode/mod-katex v1.0.2 // indirect
|
||||||
github.com/gethinode/mod-leaflet v0.3.4 // indirect
|
github.com/gethinode/mod-leaflet v0.3.4 // indirect
|
||||||
|
4
go.sum
4
go.sum
@@ -18,6 +18,10 @@ github.com/gethinode/mod-flexsearch v1.1.4 h1:dJvwBxYlLe/VGlctLn8k89STJ5toATIjNn
|
|||||||
github.com/gethinode/mod-flexsearch v1.1.4/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
github.com/gethinode/mod-flexsearch v1.1.4/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
|
github.com/gethinode/mod-flexsearch v1.2.0 h1:SSMpWzK9SMbi9QRYfil9PJZLLWWLHWzlTc69UxtSWAA=
|
||||||
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
github.com/gethinode/mod-flexsearch v1.2.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.3.0 h1:RbfEDw219Y1rOVp9lHmy5ePdF9lyPalDu2J5oVeejrU=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.3.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.4.0 h1:5e/NVRLyWzUZ9fO/fNsM5o+O7nw+xyln2rfEOtbgfWc=
|
||||||
|
github.com/gethinode/mod-flexsearch v1.4.0/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
|
||||||
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
|
github.com/gethinode/mod-fontawesome v1.0.2 h1:ZSK6D20/w4y5GnfYfTBB58uHD0ChIfkpKfRGwioS9rg=
|
||||||
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
github.com/gethinode/mod-fontawesome v1.0.2/go.mod h1:Ki1qkWEOiF0hQpCgWeZRw+HkpL6nd1DxKFptU0O2feI=
|
||||||
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
|
github.com/gethinode/mod-fontawesome v1.1.0 h1:rsDzUI+3ZlS/do2ff3ne8/z3KwHeysmuA+WsXlumXXk=
|
||||||
|
186
hugo_stats.json
Normal file
186
hugo_stats.json
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
{
|
||||||
|
"htmlElements": {
|
||||||
|
"tags": [
|
||||||
|
"a",
|
||||||
|
"body",
|
||||||
|
"button",
|
||||||
|
"div",
|
||||||
|
"footer",
|
||||||
|
"form",
|
||||||
|
"head",
|
||||||
|
"hr",
|
||||||
|
"html",
|
||||||
|
"img",
|
||||||
|
"input",
|
||||||
|
"li",
|
||||||
|
"link",
|
||||||
|
"meta",
|
||||||
|
"nav",
|
||||||
|
"p",
|
||||||
|
"path",
|
||||||
|
"script",
|
||||||
|
"small",
|
||||||
|
"span",
|
||||||
|
"strong",
|
||||||
|
"svg",
|
||||||
|
"title",
|
||||||
|
"ul"
|
||||||
|
],
|
||||||
|
"classes": [
|
||||||
|
"active",
|
||||||
|
"align-content-center",
|
||||||
|
"align-items-center",
|
||||||
|
"align-self-center",
|
||||||
|
"bg-body",
|
||||||
|
"bg-info",
|
||||||
|
"bg-opacity-10",
|
||||||
|
"bg-primary",
|
||||||
|
"bottom-0",
|
||||||
|
"bottom-bar",
|
||||||
|
"btn",
|
||||||
|
"btn-close",
|
||||||
|
"btn-primary",
|
||||||
|
"col",
|
||||||
|
"col-12",
|
||||||
|
"col-lg-2",
|
||||||
|
"col-lg-4",
|
||||||
|
"col-md-2",
|
||||||
|
"col-md-4",
|
||||||
|
"col-md-8",
|
||||||
|
"col-md-auto",
|
||||||
|
"col-sm-12",
|
||||||
|
"col-sm-6",
|
||||||
|
"collapse",
|
||||||
|
"collapsed",
|
||||||
|
"container-fluid",
|
||||||
|
"container-xxl",
|
||||||
|
"d-block",
|
||||||
|
"d-flex",
|
||||||
|
"d-inline",
|
||||||
|
"d-lg-block",
|
||||||
|
"d-md-block",
|
||||||
|
"d-md-flex",
|
||||||
|
"d-md-none",
|
||||||
|
"d-none",
|
||||||
|
"d-sm-none",
|
||||||
|
"display-1",
|
||||||
|
"display-4",
|
||||||
|
"dropdown",
|
||||||
|
"dropdown-divider-bg",
|
||||||
|
"dropdown-item",
|
||||||
|
"dropdown-menu",
|
||||||
|
"dropdown-menu-end",
|
||||||
|
"dropdown-toggle",
|
||||||
|
"emphasis",
|
||||||
|
"end-0",
|
||||||
|
"fa",
|
||||||
|
"fa-10x",
|
||||||
|
"fa-2x",
|
||||||
|
"fa-book-open",
|
||||||
|
"fa-circle-half-stroke",
|
||||||
|
"fa-ellipsis",
|
||||||
|
"fa-face-frown",
|
||||||
|
"fa-fw",
|
||||||
|
"fa-github",
|
||||||
|
"fa-linkedin",
|
||||||
|
"fa-medium",
|
||||||
|
"fa-moon",
|
||||||
|
"fa-sun",
|
||||||
|
"fab",
|
||||||
|
"fas",
|
||||||
|
"feature",
|
||||||
|
"fixed-top",
|
||||||
|
"flex-column",
|
||||||
|
"flex-fill",
|
||||||
|
"flex-grow-1",
|
||||||
|
"flex-wrap",
|
||||||
|
"footer",
|
||||||
|
"form-control",
|
||||||
|
"fs-3",
|
||||||
|
"fw-30",
|
||||||
|
"fw-bold",
|
||||||
|
"h-100",
|
||||||
|
"img-fluid",
|
||||||
|
"img-wrap",
|
||||||
|
"invisible",
|
||||||
|
"is-search",
|
||||||
|
"justify-content-center",
|
||||||
|
"link-bg-footer",
|
||||||
|
"link-secondary",
|
||||||
|
"main-nav-toggler",
|
||||||
|
"mb-4",
|
||||||
|
"me-auto",
|
||||||
|
"middle-bar",
|
||||||
|
"min-vh-100",
|
||||||
|
"ms-auto",
|
||||||
|
"ms-md-3",
|
||||||
|
"mt-3",
|
||||||
|
"mt-5",
|
||||||
|
"mx-auto",
|
||||||
|
"mx-md-2",
|
||||||
|
"my-auto",
|
||||||
|
"nav-item",
|
||||||
|
"nav-link",
|
||||||
|
"navbar",
|
||||||
|
"navbar-brand",
|
||||||
|
"navbar-collapse",
|
||||||
|
"navbar-expand-md",
|
||||||
|
"navbar-nav",
|
||||||
|
"navbar-toggler",
|
||||||
|
"no-js",
|
||||||
|
"order-1",
|
||||||
|
"order-2",
|
||||||
|
"order-3",
|
||||||
|
"order-4",
|
||||||
|
"order-first",
|
||||||
|
"order-sm-2",
|
||||||
|
"order-sm-3",
|
||||||
|
"p-0",
|
||||||
|
"p-2",
|
||||||
|
"p-3",
|
||||||
|
"p-4",
|
||||||
|
"pb-5",
|
||||||
|
"pe-1",
|
||||||
|
"position-fixed",
|
||||||
|
"position-relative",
|
||||||
|
"px-3",
|
||||||
|
"px-4",
|
||||||
|
"px-xxl-0",
|
||||||
|
"py-2",
|
||||||
|
"py-5",
|
||||||
|
"py-md-1",
|
||||||
|
"rounded",
|
||||||
|
"row",
|
||||||
|
"row-cols-1",
|
||||||
|
"row-cols-sm-3",
|
||||||
|
"row-cols-sm-4",
|
||||||
|
"search",
|
||||||
|
"search-input",
|
||||||
|
"search-suggestions",
|
||||||
|
"shadow",
|
||||||
|
"svg-inline--fa",
|
||||||
|
"switch-mode-collapsed",
|
||||||
|
"text-center",
|
||||||
|
"text-decoration-none",
|
||||||
|
"text-secondary",
|
||||||
|
"text-sm-start",
|
||||||
|
"theme-icon",
|
||||||
|
"theme-icon-active",
|
||||||
|
"toast",
|
||||||
|
"toast-body",
|
||||||
|
"toast-container",
|
||||||
|
"toast-header",
|
||||||
|
"toggler-icon",
|
||||||
|
"top-bar",
|
||||||
|
"vr",
|
||||||
|
"w-100"
|
||||||
|
],
|
||||||
|
"ids": [
|
||||||
|
"-theme",
|
||||||
|
"-theme-collapsed",
|
||||||
|
"navbar-0-collapse",
|
||||||
|
"toast-container",
|
||||||
|
"toast-copied-code-message"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@@ -26,7 +26,11 @@
|
|||||||
|
|
||||||
# Sharing
|
# Sharing
|
||||||
- id: shareLink
|
- id: shareLink
|
||||||
translation: "Diese Seite teilen"
|
translation: "Diese Seite teilen per {{ . }}"
|
||||||
|
- id: shareSystem
|
||||||
|
translation: "Betriebssystem"
|
||||||
|
- id: copyToClipboard
|
||||||
|
translation: "In Zwischenablage kopieren"
|
||||||
- id: copiedToClipboard
|
- id: copiedToClipboard
|
||||||
translation: "Der Text befindet sich in die Zwischenablage"
|
translation: "Der Text befindet sich in die Zwischenablage"
|
||||||
- id: link
|
- id: link
|
||||||
|
@@ -28,7 +28,11 @@
|
|||||||
|
|
||||||
# Sharing
|
# Sharing
|
||||||
- id: shareLink
|
- id: shareLink
|
||||||
translation: "Share via"
|
translation: "Share via {{ . }}"
|
||||||
|
- id: shareSystem
|
||||||
|
translation: "system"
|
||||||
|
- id: copyToClipboard
|
||||||
|
translation: "copy to clipboard"
|
||||||
- id: copiedToClipboard
|
- id: copiedToClipboard
|
||||||
translation: "copied to clipboard"
|
translation: "copied to clipboard"
|
||||||
- id: link
|
- id: link
|
||||||
|
115
i18n/fr.yaml
Normal file
115
i18n/fr.yaml
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# Single pages
|
||||||
|
- id: postedOnDate
|
||||||
|
translation: "Posté le {{ . }}"
|
||||||
|
- id: lastModified
|
||||||
|
translation: "Dernière modification le {{ . }}"
|
||||||
|
- id: read
|
||||||
|
translation: "de lecture"
|
||||||
|
- id: minutesShort
|
||||||
|
translation: "min"
|
||||||
|
- id: words
|
||||||
|
translation: "mots"
|
||||||
|
- id: photoFull
|
||||||
|
translation: "Photo par %s sur %s"
|
||||||
|
- id: photoShort
|
||||||
|
translation: "Photo par {{ . }}"
|
||||||
|
- id: photoOn
|
||||||
|
translation: "sur"
|
||||||
|
- id: draft
|
||||||
|
translation: "Brouillon"
|
||||||
|
|
||||||
|
# List pages
|
||||||
|
- id: article
|
||||||
|
translation: "Article"
|
||||||
|
- id: articles
|
||||||
|
translation: "Articles"
|
||||||
|
- id: more
|
||||||
|
translation: "Plus {{ . }}"
|
||||||
|
|
||||||
|
# Sharing
|
||||||
|
- id: shareLink
|
||||||
|
translation: "Partager via {{ . }}"
|
||||||
|
- id: shareSystem
|
||||||
|
translation: "système"
|
||||||
|
- id: copyToClipboard
|
||||||
|
translation: "copier dans le presse-papier"
|
||||||
|
- id: copiedToClipboard
|
||||||
|
translation: "copié dans le presse-papier"
|
||||||
|
- id: link
|
||||||
|
translation: "Lien"
|
||||||
|
- id: code
|
||||||
|
translation: "Code"
|
||||||
|
|
||||||
|
# Pagination
|
||||||
|
- id: paginationNav
|
||||||
|
translation: "Navigation de la page"
|
||||||
|
- id: paginationPrevious
|
||||||
|
translation: "Page précédente"
|
||||||
|
- id: paginationNext
|
||||||
|
translation: "Page suivante"
|
||||||
|
- id: paginationFirst
|
||||||
|
translation: "Première page"
|
||||||
|
- id: paginationLast
|
||||||
|
translation: "Dernière page"
|
||||||
|
|
||||||
|
# Navigation
|
||||||
|
- id: colorMode
|
||||||
|
translation: "Changer le thème"
|
||||||
|
- id: colorLight
|
||||||
|
translation: "Clair"
|
||||||
|
- id: colorDark
|
||||||
|
translation: "Sombre"
|
||||||
|
- id: colorAuto
|
||||||
|
translation: "Auto"
|
||||||
|
- id: toggleMainNav
|
||||||
|
translation: "Afficher/Masquer la navigation principale"
|
||||||
|
- id: home
|
||||||
|
translation: "Accueil"
|
||||||
|
- id: languageSwitcherLabel
|
||||||
|
translation: "Langage"
|
||||||
|
|
||||||
|
# Table of contents
|
||||||
|
- id: toc
|
||||||
|
translation: "Sur cette page"
|
||||||
|
- id: seeAlso
|
||||||
|
translation: "Voir également"
|
||||||
|
|
||||||
|
# Sidebar
|
||||||
|
- id: toggleSidebar
|
||||||
|
translation: "Afficher/Masquer la barre latérale"
|
||||||
|
|
||||||
|
# Feature
|
||||||
|
- id: addedFeature
|
||||||
|
translation: "Ajouté dans {{ . }}"
|
||||||
|
- id: deprecatedFeature
|
||||||
|
translation: "Obsolète dans {{ . }}"
|
||||||
|
|
||||||
|
# Versioning
|
||||||
|
- id: latest
|
||||||
|
translation: "dernière"
|
||||||
|
- id: allVersions
|
||||||
|
translation: "Toutes les versions"
|
||||||
|
- id: newerVersionAlert
|
||||||
|
translation: "Il existe une nouvelle version de {{ . }}!"
|
||||||
|
|
||||||
|
# 404 page
|
||||||
|
- id: pageNotFound
|
||||||
|
translation: "La page que vous recherchez n'existe pas ou une autre erreur s'est produite. Essayez de revenir à notre {{ . }}."
|
||||||
|
- id: pageNotFoundTitle
|
||||||
|
translation: "Page non trouvée"
|
||||||
|
- id: pageNotFoundHome
|
||||||
|
translation: "page d'accueil"
|
||||||
|
|
||||||
|
# Footer
|
||||||
|
- id: copyright
|
||||||
|
translation: "Copyright"
|
||||||
|
- id: rights
|
||||||
|
translation: "Tous droits réservés"
|
||||||
|
- id: poweredBy
|
||||||
|
translation: "Propulsé par {{ . }}."
|
||||||
|
|
||||||
|
# Comments
|
||||||
|
- id: show
|
||||||
|
translation: "Afficher"
|
||||||
|
- id: comments
|
||||||
|
translation: "Commentaires"
|
@@ -26,7 +26,11 @@
|
|||||||
|
|
||||||
# Sharing
|
# Sharing
|
||||||
- id: shareLink
|
- id: shareLink
|
||||||
translation: "Delen via"
|
translation: "Delen via {{ . }}"
|
||||||
|
- id: shareSystem
|
||||||
|
translation: "systeem"
|
||||||
|
- id: copyToClipboard
|
||||||
|
translation: "kopieren naar clipboard"
|
||||||
- id: copiedToClipboard
|
- id: copiedToClipboard
|
||||||
translation: "gekopieerd naar clipboard"
|
translation: "gekopieerd naar clipboard"
|
||||||
- id: link
|
- id: link
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{{ if site.Params.navigation.anchor }}
|
{{ if site.Params.navigation.anchor }}
|
||||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}</a></h{{ .Level }}>
|
<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="heading">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}" aria-labelledby="{{ .Anchor | safeURL }}">{{- partial "assets/icon.html" (dict "icon" "fas link anchor") }}</a></h{{ .Level }}>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
|
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}</h{{ .Level }}>
|
||||||
{{ end }}
|
{{ end }}
|
@@ -30,7 +30,8 @@
|
|||||||
"page" .
|
"page" .
|
||||||
"fixed" (string .Site.Params.navigation.fixed)
|
"fixed" (string .Site.Params.navigation.fixed)
|
||||||
"color" (.Site.Params.navigation.color)
|
"color" (.Site.Params.navigation.color)
|
||||||
"style" (default "light" .Site.Params.navigation.style))
|
"style" (default "light" .Site.Params.navigation.style)
|
||||||
|
"size" (default "md" .Site.Params.navigation.size))
|
||||||
-}}
|
-}}
|
||||||
</div>
|
</div>
|
||||||
{{ if .IsHome -}}
|
{{ if .IsHome -}}
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
<div class="hstack gap-3">
|
<div class="hstack gap-3">
|
||||||
{{ range (.GetTerms "tags") -}}
|
{{ range (.GetTerms "tags") -}}
|
||||||
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
|
{{- $url := (path.Join .Page.RelPermalink) | relLangURL -}}
|
||||||
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "secondary" "size" "sm" "outline" "true") }}
|
{{ partial "assets/button.html" (dict "href" $url "title" .LinkTitle "color" "primary" "size" "sm" "outline" "true") }}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -83,7 +83,8 @@
|
|||||||
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" $credits) -}}
|
{{- partial "assets/image.html" (dict "url" $thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" $credits) -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ .Content }}
|
|
||||||
|
{{ partial "utilities/ProcessContent" (dict "page" .Page "raw" .RawContent )}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ define "partials/footer.html" -}}
|
{{ define "partials/footer.html" -}}
|
||||||
|
@@ -9,7 +9,8 @@
|
|||||||
"danger", "warning", "info", "light", "dark", "white", or "black".
|
"danger", "warning", "info", "light", "dark", "white", or "black".
|
||||||
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
|
"outline" Optional flag indicating the button should be outlined, either "false" (default) or "true".
|
||||||
"badge" Optional positioned badge to display on top of the button.
|
"badge" Optional positioned badge to display on top of the button.
|
||||||
"aria-label" Optional assistive label for the badge.
|
"label" Optional assistive label for the button or badge. The label is applied to the badge instead of the
|
||||||
|
button when a badge has been defined. Default value of the button aria-label is its title.
|
||||||
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
|
"tooltip" Optional text to display in a tooltip. Cannot be used together with collapse. Ignored for active/
|
||||||
inactive buttons.
|
inactive buttons.
|
||||||
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
|
"collapse" Optional panel to collapse. Cannot be used together with tooltip. Ignored for active/inactive buttons.
|
||||||
@@ -139,20 +140,20 @@
|
|||||||
|
|
||||||
{{- $attributes := .attributes -}}
|
{{- $attributes := .attributes -}}
|
||||||
|
|
||||||
<a aria-label="{{ $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
|
<a aria-label="{{ or $label $title }}" {{ if ne $state "disabled" }}{{ with $href }}href="{{ . }}"{{ end }}{{ end -}}
|
||||||
{{- with $id }}id="{{ . }}"{{ end -}}
|
{{- with $id }} id="{{ . }}"{{ end -}}
|
||||||
{{- with $target }}target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}}
|
{{- with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end -}}
|
||||||
{{- with $toast }}data-toast-target="{{ $toast }}"{{ end -}}
|
{{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}}
|
||||||
{{- with $clipboard }}data-clipboard="{{ $clipboard }}"{{ end -}}
|
{{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ end -}}
|
||||||
{{- if eq $type "button" }}class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}"
|
{{- if eq $type "button" }} class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}"
|
||||||
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
|
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
|
||||||
{{- else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
|
{{- else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end -}}
|
||||||
{{- with $tooltip }}data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
|
{{- with $tooltip }} data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
|
||||||
{{- with $collapse }}data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
|
{{- with $collapse }} data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
|
||||||
{{- if eq $state "active" }}data-bs-toggle="button" aria-pressed="true"{{ end -}}
|
{{- if eq $state "active" }} data-bs-toggle="button" aria-pressed="true"{{ end -}}
|
||||||
{{- if eq $state "inactive" }}data-bs-toggle="button" aria-pressed="false"{{ end -}}
|
{{- if eq $state "inactive" }} data-bs-toggle="button" aria-pressed="false"{{ end -}}
|
||||||
{{- range $key, $val := $attributes -}}
|
{{- range $key, $val := $attributes -}}
|
||||||
{{- print $key | safeHTMLAttr }}="{{ $val }}"
|
{{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
>
|
>
|
||||||
<div class="d-flex justify-content-{{ $justify }}">
|
<div class="d-flex justify-content-{{ $justify }}">
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
The shortcode supports the following arguments:
|
The shortcode supports the following arguments:
|
||||||
"page" Required context of the current page.
|
"page" Required context of the current page.
|
||||||
"list" Required array of pages.
|
"list" Required array of pages.
|
||||||
|
"cards" Optional string of rendered cards.
|
||||||
"max" Required maximum number of cards to display.
|
"max" Required maximum number of cards to display.
|
||||||
"cols" Required number of columns for the grid, must be a value between 1 and 5.
|
"cols" Required number of columns for the grid, must be a value between 1 and 5.
|
||||||
"title" Optional title of the card group.
|
"title" Optional title of the card group.
|
||||||
@@ -30,21 +31,61 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
{{- $page := .page -}}
|
{{- $page := .page -}}
|
||||||
{{- if ne (printf "%T" $page) "*hugolib.pageState" -}}
|
|
||||||
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'page'" -}}
|
{{- if not (in (slice "*hugolib.pageState" "*hugolib.pageForShortcode") (printf "%T" $page)) -}}
|
||||||
|
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'page': %T" $page -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
|
{{- $supportedTypes := slice "page.Pages" "resource.Resources" -}}
|
||||||
{{ $list := .list }}
|
{{ $pages := .list }}
|
||||||
{{- if not (in $supportedTypes (printf "%T" $list)) -}}
|
{{- if and $pages (not (in $supportedTypes (printf "%T" $pages))) -}}
|
||||||
{{ warnf "Type: %T" $list }}
|
{{ warnf "Type: %T" $pages }}
|
||||||
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'list'" -}}
|
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'list'" -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
{{ $cards := .cards }}
|
||||||
|
|
||||||
|
{{- $paginate := false -}}
|
||||||
|
{{- with .paginate -}}
|
||||||
|
{{- if ne (printf "%T" .) "bool" -}}
|
||||||
|
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $paginate = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ $paginator := "" }}
|
||||||
|
{{ if $paginate }}
|
||||||
|
{{ $paginator = $page.Paginate $pages }}
|
||||||
|
{{ $pages = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $pages) }}
|
||||||
|
{{ end }}
|
||||||
|
{{ $list := slice }}
|
||||||
|
{{ range $index, $element := $pages }}
|
||||||
|
{{ $params := dict }}
|
||||||
|
<!-- regular page -->
|
||||||
|
{{- if $element.RelPermalink -}}
|
||||||
|
{{- $params = merge $params (dict "path" $element.File.Path) -}}
|
||||||
|
<!-- headless page -->
|
||||||
|
{{- else -}}
|
||||||
|
{{- $thumbnail := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.url) $element.Params.Thumbnail) -}}
|
||||||
|
{{- $params = merge $params (dict
|
||||||
|
"title" $element.Title
|
||||||
|
"href" $element.RelPermalink
|
||||||
|
"description" (partial "utilities/GetDescription.html" $element)
|
||||||
|
"thumbnail" $thumbnail
|
||||||
|
"icon" $element.Params.icon
|
||||||
|
) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $list = $list | append $params }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{- $count := len $list -}}
|
{{- $count := len $list -}}
|
||||||
{{- $max := .max -}}
|
{{- $max := $count -}}
|
||||||
{{- if ne (printf "%T" $max) "int" -}}
|
{{- with .max }}
|
||||||
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'max'" -}}
|
{{- if ne (printf "%T" .) "int" -}}
|
||||||
|
{{- warnf "partial [assets/card-group.html] - Invalid value for param 'max': %s" . -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $max = . -}}
|
||||||
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- $max = math.Min $max $count -}}
|
{{- $max = math.Min $max $count -}}
|
||||||
|
|
||||||
@@ -58,13 +99,6 @@
|
|||||||
{{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}}
|
{{- else if eq $cols 4 }}{{ $colGrid = "row-cols-1 row-cols-sm-2 row-cols-md-4" -}}
|
||||||
{{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}}
|
{{- else if eq $cols 5 }}{{ $colGrid = "row-cols-1 row-cols-sm-3 row-cols-md-5" }}{{ end -}}
|
||||||
|
|
||||||
{{- $paginate := false -}}
|
|
||||||
{{- with .paginate -}}
|
|
||||||
{{- if ne (printf "%T" .) "bool" -}}
|
|
||||||
{{- errorf "partial [assets/card-group.html] - Invalid value for param 'paginate'" -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- $paginate = . -}}
|
|
||||||
{{- end -}}
|
|
||||||
{{- if not $paginate -}}
|
{{- if not $paginate -}}
|
||||||
{{- $list = first $max $list -}}
|
{{- $list = first $max $list -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
@@ -89,13 +123,7 @@
|
|||||||
|
|
||||||
{{- if and (eq $cols 1) (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
|
{{- if and (eq $cols 1) (eq $orientation "horizontal") }}{{ $orientation = "horizontal-sm" }}{{ end -}}
|
||||||
|
|
||||||
<div class="container-fluid p-4 px-xxl-0">
|
<div class="container-fluid p-4 px-xxl-0 ">
|
||||||
{{ $paginator := "" }}
|
|
||||||
{{ if $paginate }}
|
|
||||||
{{ $paginator = $page.Paginate $list }}
|
|
||||||
{{ $list = first $paginator.PageSize (after (mul (sub $paginator.PageNumber 1) $paginator.PageSize) $list) }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
<div class="row {{ $colGrid }}">
|
<div class="row {{ $colGrid }}">
|
||||||
{{ range $index, $element := $list }}
|
{{ range $index, $element := $list }}
|
||||||
{{- $params := (dict
|
{{- $params := (dict
|
||||||
@@ -106,19 +134,7 @@
|
|||||||
"footer" $footer
|
"footer" $footer
|
||||||
"orientation" $orientation
|
"orientation" $orientation
|
||||||
) -}}
|
) -}}
|
||||||
|
{{- $params = merge $params $element }}
|
||||||
{{- if $element.RelPermalink -}}
|
|
||||||
{{- $params = merge $params (dict "path" $element.File.Path) -}}
|
|
||||||
{{- else -}}
|
|
||||||
{{- $thumbnail := (or (and (reflect.IsMap $element.Params.Thumbnail) $element.Params.Thumbnail.url) $element.Params.Thumbnail) -}}
|
|
||||||
{{- $params = merge $params (dict
|
|
||||||
"title" $element.Title
|
|
||||||
"href" $element.RelPermalink
|
|
||||||
"description" (partial "utilities/GetDescription.html" $element)
|
|
||||||
"thumbnail" $thumbnail
|
|
||||||
"icon" $element.Params.icon
|
|
||||||
) -}}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
<div class="col pt-3 pb-3">
|
<div class="col pt-3 pb-3">
|
||||||
{{- partial "assets/card.html" $params -}}
|
{{- partial "assets/card.html" $params -}}
|
||||||
@@ -129,6 +145,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
{{- print $cards | safeHTML }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ if $paginate }}
|
{{ if $paginate }}
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
{{- else -}}
|
{{- else -}}
|
||||||
<div>
|
<div>
|
||||||
<p class="card-title fs-5 fw-bold">{{ $title }}</p>
|
<p class="card-title fs-5 fw-bold">{{ $title }}</p>
|
||||||
{{ with $description }}<p class="card-text mb-4 {{ if $color }}link-bg-{{ $color }}{{ else }}card-body-link{{ end }}">{{ . }}</p>{{ end -}}
|
{{ with $description }}<p class="card-text mb-4">{{ . }}</p>{{ end -}}
|
||||||
</div>
|
</div>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
@@ -2,22 +2,43 @@
|
|||||||
Render a local or remote image with responsive image sizing. Images are resized using default media breakpoints
|
Render a local or remote image with responsive image sizing. Images are resized using default media breakpoints
|
||||||
and are converted to webp format. The image is processed using the quality setting specified in the [imaging]
|
and are converted to webp format. The image is processed using the quality setting specified in the [imaging]
|
||||||
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The image is
|
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The image is
|
||||||
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint. The
|
wrapped in a figure if a caption is provided, else the image is wrapped in a div with a ratio constraint.
|
||||||
partial supports the following arguments:
|
|
||||||
"url": Required relative url of the image, e.g. "img/example.jpg"
|
If the url starts with 'http', the image is retrieved from an external location. Else, the url is matched with a
|
||||||
|
page resource and site asset (in that order). The path of a remote image is rewritten to ensure processed files are
|
||||||
|
stored in the final '/img' folder.
|
||||||
|
|
||||||
|
The partial supports the following bitmap image formats: "png", "jpeg", "gif", "tiff", "bmp", and "webp". Vector
|
||||||
|
graphics of type "svg" are supported too, although these images do no support additional processing. This means
|
||||||
|
the arguments "ratio" and "portrait" have no effect for vector images. Vector graphics support an optional anchor
|
||||||
|
"#" in their url to denote a styling reference.
|
||||||
|
|
||||||
|
The partial supports the following arguments:
|
||||||
|
"url": Required path or url of the image, e.g. "img/example.jpg"
|
||||||
"mode": Optional flag indicating if the image should support color modes.
|
"mode": Optional flag indicating if the image should support color modes.
|
||||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". If set, the image is
|
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". If set, the image is
|
||||||
resized and cropped to match the ratio. Else the original aspect ratio of the image is kept.
|
resized and cropped to match the ratio. Else the original aspect ratio of the image is kept. Not
|
||||||
|
applicable to vector graphics.
|
||||||
|
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
|
||||||
|
the crop area is adjusted. Not applicable to vector graphics.
|
||||||
"outerClass": Optional class attribute of the outer div element, e.g. "img-wrap".
|
"outerClass": Optional class attribute of the outer div element, e.g. "img-wrap".
|
||||||
"innerClass": Optional class attribute of the inner img element, e.g. "rounded".
|
"innerClass": Optional class attribute of the inner img element, e.g. "rounded".
|
||||||
"title": Optional alternate text of the image.
|
"title": Optional alternate text of the image.
|
||||||
"caption": Optional figure caption.
|
"caption": Optional figure caption.
|
||||||
|
"page": Optional page context, used to match page resources.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
|
|
||||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||||
|
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
|
||||||
{{- $ratio := .ratio -}}
|
{{- $ratio := .ratio -}}
|
||||||
|
{{- if $ratio -}}
|
||||||
|
{{ if not (in $validRatios $ratio) -}}
|
||||||
|
{{- errorf "partial [assets/image.html] - Invalid value for param 'ratio'" -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $portrait := .portrait -}}
|
||||||
{{- $url := .url -}}
|
{{- $url := .url -}}
|
||||||
|
|
||||||
{{- $mode := false -}}
|
{{- $mode := false -}}
|
||||||
{{- with .mode -}}
|
{{- with .mode -}}
|
||||||
{{ $mode = . -}}
|
{{ $mode = . -}}
|
||||||
@@ -30,12 +51,37 @@
|
|||||||
{{- errorf "partial [assets/image.html] - Invalid value for param 'mode'" -}}
|
{{- errorf "partial [assets/image.html] - Invalid value for param 'mode'" -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
|
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
|
||||||
|
{{- $page := .page -}}
|
||||||
|
|
||||||
|
|
||||||
|
{{- define "partials/image-portrait.html" -}}
|
||||||
|
{{- $dimensions := slice }}
|
||||||
|
{{- $dim := .dim -}}
|
||||||
|
{{- $dimensions = $dimensions | append $dim -}}
|
||||||
|
{{- $portraits := slice }}
|
||||||
|
{{- range $d := $dimensions -}}
|
||||||
|
{{- $p := split $d "x" }}
|
||||||
|
{{ if ne (len $p) 2 }}
|
||||||
|
{{- warnf "partial [assets/image.html] - Invalid dimension: %s" $d -}}
|
||||||
|
{{- $portraits = $portraits | append $d -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $portraits = $portraits | append (printf "%sx%s" (index $p 1) (index $p 0)) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $ret := "" }}
|
||||||
|
{{- if reflect.IsSlice $dim -}}
|
||||||
|
{{ $ret = $portraits -}}
|
||||||
|
{{- else if gt (len $portraits) 0 -}}
|
||||||
|
{{- $ret = index $portraits 0 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- return $ret -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
<!-- Generate a fallback image of type jpg -->
|
<!-- Generate a fallback image of type jpg -->
|
||||||
{{- define "partials/image-default.html" -}}
|
{{- define "partials/image-default.html" -}}
|
||||||
{{- $img := .img -}}
|
{{- $img := .img -}}
|
||||||
{{- $ratio := .ratio -}}
|
{{- $ratio := .ratio -}}
|
||||||
|
{{- $portrait := and .portrait .ratio -}}
|
||||||
{{- $width := "1400" -}}
|
{{- $width := "1400" -}}
|
||||||
{{- $dim := "" -}}
|
{{- $dim := "" -}}
|
||||||
{{- $fallback := "" -}}
|
{{- $fallback := "" -}}
|
||||||
@@ -43,6 +89,8 @@
|
|||||||
{{- with $img -}}
|
{{- with $img -}}
|
||||||
{{- if eq $ratio "4x3" -}}
|
{{- if eq $ratio "4x3" -}}
|
||||||
{{- $dim = "1400x1050" }}
|
{{- $dim = "1400x1050" }}
|
||||||
|
{{- else if eq $ratio "3x2" -}}
|
||||||
|
{{- $dim = "1400x933" }}
|
||||||
{{- else if eq $ratio "1x1" -}}
|
{{- else if eq $ratio "1x1" -}}
|
||||||
{{- $dim = "1400x1400" }}
|
{{- $dim = "1400x1400" }}
|
||||||
{{- else if eq $ratio "16x9" -}}
|
{{- else if eq $ratio "16x9" -}}
|
||||||
@@ -53,6 +101,10 @@
|
|||||||
{{- $dim = printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height))) -}}
|
{{- $dim = printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height))) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $portrait -}}
|
||||||
|
{{- $dim = partial "partials/image-portrait.html" (dict "dim" $dim) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- if $ratio -}}
|
{{- if $ratio -}}
|
||||||
{{- $fallback = ($img.Fill (printf "%s jpg" $dim)) -}}
|
{{- $fallback = ($img.Fill (printf "%s jpg" $dim)) -}}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
@@ -72,6 +124,7 @@
|
|||||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||||
{{- $img := .img -}}
|
{{- $img := .img -}}
|
||||||
{{- $ratio := .ratio -}}
|
{{- $ratio := .ratio -}}
|
||||||
|
{{- $portrait := and .portrait .ratio -}}
|
||||||
{{- $imgset := "" -}}
|
{{- $imgset := "" -}}
|
||||||
|
|
||||||
{{- $widths := slice "576" "768" "992" "1200" "1400" -}}
|
{{- $widths := slice "576" "768" "992" "1200" "1400" -}}
|
||||||
@@ -79,6 +132,8 @@
|
|||||||
{{- with $img -}}
|
{{- with $img -}}
|
||||||
{{- if eq $ratio "4x3" -}}
|
{{- if eq $ratio "4x3" -}}
|
||||||
{{- $dims = slice "576x432" "768x576" "992x744" "1200x900" "1400x1050" -}}
|
{{- $dims = slice "576x432" "768x576" "992x744" "1200x900" "1400x1050" -}}
|
||||||
|
{{- else if eq $ratio "3x2" -}}
|
||||||
|
{{- $dims = slice "576x384" "768x512" "992x661" "1200x800" "1400x933" -}}
|
||||||
{{- else if eq $ratio "1x1" -}}
|
{{- else if eq $ratio "1x1" -}}
|
||||||
{{- $dims = slice "576x576" "768x768" "992x992" "1200x1200" "1400x1400" -}}
|
{{- $dims = slice "576x576" "768x768" "992x992" "1200x1200" "1400x1400" -}}
|
||||||
{{- else if eq $ratio "16x9" -}}
|
{{- else if eq $ratio "16x9" -}}
|
||||||
@@ -91,6 +146,10 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $portrait -}}
|
||||||
|
{{- $dims = partial "partials/image-portrait.html" (dict "dim" $dims) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- $scaled := "" -}}
|
{{- $scaled := "" -}}
|
||||||
{{- range $index, $dim := $dims -}}
|
{{- range $index, $dim := $dims -}}
|
||||||
{{- $clean := path.Ext $img.RelPermalink -}}
|
{{- $clean := path.Ext $img.RelPermalink -}}
|
||||||
@@ -116,28 +175,41 @@
|
|||||||
{{- define "partials/image-definition.html" -}}
|
{{- define "partials/image-definition.html" -}}
|
||||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||||
{{- $ratio := .ratio -}}
|
{{- $ratio := .ratio -}}
|
||||||
|
{{- $portrait := .portrait -}}
|
||||||
{{- $url := .url -}}
|
{{- $url := .url -}}
|
||||||
{{- $outerClass := .outerClass -}}
|
{{- $outerClass := .outerClass -}}
|
||||||
{{- $innerClass := .innerClass -}}
|
{{- $innerClass := .innerClass -}}
|
||||||
{{- $title := .title -}}
|
{{- $title := .title -}}
|
||||||
{{- $caption := .caption -}}
|
{{- $caption := .caption -}}
|
||||||
{{- $fallbackURL := "" -}}
|
{{- $fallbackURL := "" -}}
|
||||||
|
{{- $anchor := "" -}}
|
||||||
{{- $imgset := "" -}}
|
{{- $imgset := "" -}}
|
||||||
{{- $mode := .mode -}}
|
{{- $mode := .mode -}}
|
||||||
{{- $modes := .modes -}}
|
{{- $modes := .modes -}}
|
||||||
|
{{- $page := .page -}}
|
||||||
|
{{- $isVector := false -}}
|
||||||
|
|
||||||
|
{{- $segments := split $url "#" -}}
|
||||||
|
{{- if gt (len $segments) 2 -}}
|
||||||
|
{{- errorf "Invalid path or url: %q" $url -}}
|
||||||
|
{{- else if eq (len $segments) 2 }}
|
||||||
|
{{- $url = index $segments 0 -}}
|
||||||
|
{{- $anchor = index $segments 1 -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- if hasSuffix $url "svg" -}}
|
{{- if hasSuffix $url "svg" -}}
|
||||||
{{- $fallbackURL = $url -}}
|
{{- $fallbackURL = $url -}}
|
||||||
|
{{- $isVector = true -}}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- $img := partial "utilities/GetImage.html" (dict "url" $url) -}}
|
{{- $img := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
|
||||||
{{- if $img -}}
|
{{- if $img -}}
|
||||||
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio) -}}
|
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
|
||||||
{{- if $absoluteURL -}}
|
{{- if $absoluteURL -}}
|
||||||
{{- $fallbackURL = $fallback.Permalink -}}
|
{{- $fallbackURL = $fallback.Permalink -}}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- $fallbackURL = $fallback.RelPermalink -}}
|
{{- $fallbackURL = $fallback.RelPermalink -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio) -}}
|
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
@@ -150,7 +222,8 @@
|
|||||||
{{- if $caption -}}
|
{{- if $caption -}}
|
||||||
<figure {{ with $outerClass }}class="{{ . }}"{{ end }}>
|
<figure {{ with $outerClass }}class="{{ . }}"{{ end }}>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<div class="{{ with $ratio }}ratio ratio-{{ . }}{{ end }}{{ if not $caption }} {{ $outerClass }}{{ end }}">
|
{{- if not $isVector -}}
|
||||||
|
<div class="{{ if not $caption }}{{ $outerClass }}{{ end }}">
|
||||||
<img class="img-fluid {{ $innerClass }}"
|
<img class="img-fluid {{ $innerClass }}"
|
||||||
{{ with $imgset -}}
|
{{ with $imgset -}}
|
||||||
srcset="{{ . }}"
|
srcset="{{ . }}"
|
||||||
@@ -159,10 +232,17 @@
|
|||||||
src="{{ $fallbackURL }}"
|
src="{{ $fallbackURL }}"
|
||||||
alt="{{ $title }}">
|
alt="{{ $title }}">
|
||||||
</div>
|
</div>
|
||||||
|
{{ else }}
|
||||||
|
<div class="{{ if not $caption }}{{ $outerClass }}{{ end }}">
|
||||||
|
<svg class="{{ $innerClass }}">
|
||||||
|
<use href="{{ $fallbackURL }}{{ with $anchor }}#{{ . }}{{ end }}"></use>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
{{- if $caption -}}
|
{{- if $caption -}}
|
||||||
<figcaption class="figure-caption">{{ $caption | safeHTML }}</figcaption>
|
<figcaption class="figure-caption">{{ $caption | safeHTML }}</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
<!-- Initiate the regular or color-mode image -->
|
<!-- Initiate the regular or color-mode image -->
|
||||||
@@ -177,22 +257,26 @@
|
|||||||
{{- $image := printf "%s-%s%s" $base $suffix $ext -}}
|
{{- $image := printf "%s-%s%s" $base $suffix $ext -}}
|
||||||
{{- partial "partials/image-definition.html" (dict
|
{{- partial "partials/image-definition.html" (dict
|
||||||
"ratio" $ratio
|
"ratio" $ratio
|
||||||
|
"portrait" $portrait
|
||||||
"url" $image
|
"url" $image
|
||||||
"outerClass" $outerClass
|
"outerClass" $outerClass
|
||||||
"innerClass" $innerClass
|
"innerClass" $innerClass
|
||||||
"title" $title
|
"title" $title
|
||||||
"caption" $caption
|
"caption" $caption
|
||||||
"mode" $suffix
|
"mode" $suffix
|
||||||
"modes" $modes)
|
"modes" $modes
|
||||||
|
"page" $page)
|
||||||
-}}
|
-}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- partial "partials/image-definition.html" (dict
|
{{- partial "partials/image-definition.html" (dict
|
||||||
"ratio" $ratio
|
"ratio" $ratio
|
||||||
|
"portrait" $portrait
|
||||||
"url" $url
|
"url" $url
|
||||||
"outerClass" $outerClass
|
"outerClass" $outerClass
|
||||||
"innerClass" $innerClass
|
"innerClass" $innerClass
|
||||||
"title" $title
|
"title" $title
|
||||||
"caption" $caption)
|
"caption" $caption
|
||||||
|
"page" $page)
|
||||||
-}}
|
-}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
|
{{- $menuURL := (or $menu.PageRef $menu.URL) | relLangURL -}}
|
||||||
{{- $pageURL := $page.RelPermalink | relLangURL -}}
|
{{- $pageURL := $page.RelPermalink | relLangURL -}}
|
||||||
{{- $isActive := hasPrefix $pageURL $menuURL -}}
|
{{- $isActive := or (and (hasPrefix $pageURL $menuURL) (ne $menuURL ("/" | relLangURL))) (eq $pageURL $menuURL) -}}
|
||||||
{{- $isAlias := $menu.Params.alias -}}
|
{{- $isAlias := $menu.Params.alias -}}
|
||||||
{{- $isIcon := $menu.Params.icon -}}
|
{{- $isIcon := $menu.Params.icon -}}
|
||||||
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a navigation header with a toggler. The partial supports the following arguments:
|
Displays a navigation header with a toggler. The partial supports the following arguments:
|
||||||
"id" Optional id of the navbar toggler, defaults to "navbar-collapse-0".
|
"id" Optional id of the navbar, defaults to "navbar-0". The id is used by several child elements,
|
||||||
|
including a color mode switcher, version switcher, and collapse panel.
|
||||||
"page" Required object reference to the current page.
|
"page" Required object reference to the current page.
|
||||||
"menus" Optional name of the menu configuration, defaults to "main".
|
"menus" Optional name of the menu configuration, defaults to "main".
|
||||||
"size" Optional size of the button, either "sm", "md" (default), or "lg".
|
"size" Optional breakpoint of the navbar toggler, either "xs", "sm", "md" (default), "lg", or "xl".
|
||||||
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
|
"fixed" Optional flag to indicate the navbar should stick to the top, defaults to false.
|
||||||
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
"color" Optional background color of the navbar, either "primary", "secondary", "success",
|
||||||
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
|
"danger", "warning", "info", "white", "black", "body", or "body-tertiary". The default color is
|
||||||
@@ -20,13 +21,14 @@
|
|||||||
{{- define "partials/navbar-mode.html" -}}
|
{{- define "partials/navbar-mode.html" -}}
|
||||||
{{- $size := .size -}}
|
{{- $size := .size -}}
|
||||||
{{- $collapsed := .collapsed -}}
|
{{- $collapsed := .collapsed -}}
|
||||||
|
{{- $id := .id -}}
|
||||||
|
|
||||||
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
|
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
|
||||||
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-color-theme{{ if $collapsed }}-collapsed{{ end }}">
|
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-label="{{ T "colorMode" }}" aria-expanded="false" id="{{ $id }}-theme{{ if $collapsed }}-collapsed{{ end }}">
|
||||||
<span class="theme-icon-active">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }} {{ if $collapsed }} {{ T "colorMode" }} {{ end }}</span>
|
<span class="theme-icon-active">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>{{ if $collapsed }} {{ T "colorMode" }} {{ end }}
|
||||||
<span class="d-md-none"></span>
|
<span class="d-md-none"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-color-theme{{ if $collapsed }}-collapsed{{ end }}">
|
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="{{ $id }}-theme{{ if $collapsed }}-collapsed{{ end }}">
|
||||||
<li>
|
<li>
|
||||||
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="light" href="#!">
|
<a class="dropdown-item{{ if $collapsed }} switch-mode-collapsed{{ end }}" data-bs-theme-value="light" href="#!">
|
||||||
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>
|
<span class="theme-icon">{{- partial "assets/icon.html" (dict "icon" "fas sun fa-fw") }}</span>
|
||||||
@@ -55,13 +57,14 @@
|
|||||||
{{- $collapsed := .collapsed -}}
|
{{- $collapsed := .collapsed -}}
|
||||||
{{- $page := .page -}}
|
{{- $page := .page -}}
|
||||||
{{- $list := site.Params.docs.releases -}}
|
{{- $list := site.Params.docs.releases -}}
|
||||||
|
{{- $id := .id -}}
|
||||||
{{- $version := partial "utilities/GetVersion.html" (dict "page" $page) -}}
|
{{- $version := partial "utilities/GetVersion.html" (dict "page" $page) -}}
|
||||||
|
|
||||||
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
|
<li class="nav-item dropdown {{ if $collapsed }}d-{{ $size }}-none{{ else }}d-none d-{{ $size }}-block{{ end }}">
|
||||||
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="navbar-version-switch">
|
<a class="nav-link dropdown-toggle" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false" id="{{ $id }}-version-switch">
|
||||||
{{ if $collapsed }}{{ site.Title }} {{ end }}{{ $version }}
|
{{ if $collapsed }}{{ site.Title }} {{ end }}{{ $version }}
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbar-version-switch">
|
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="{{ $id }}-version-switch">
|
||||||
{{- range $index, $item := $list -}}
|
{{- range $index, $item := $list -}}
|
||||||
{{- $active := eq $item.label $version -}}
|
{{- $active := eq $item.label $version -}}
|
||||||
{{- $disabled := false -}}
|
{{- $disabled := false -}}
|
||||||
@@ -97,7 +100,7 @@
|
|||||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||||
{{- $supportedFlags := slice "true" "false" -}}
|
{{- $supportedFlags := slice "true" "false" -}}
|
||||||
|
|
||||||
{{- $id := printf "navbar-collapse-%d" 0 -}}
|
{{- $id := printf "navbar-%d" 0 -}}
|
||||||
{{ with .id }}
|
{{ with .id }}
|
||||||
{{ $id = . }}
|
{{ $id = . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -171,7 +174,32 @@
|
|||||||
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
|
{{- $enableLanguage := or $page.IsTranslated site.IsMultiLingual -}}
|
||||||
|
|
||||||
{{- $logo := site.Params.navigation.logo -}}
|
{{- $logo := site.Params.navigation.logo -}}
|
||||||
{{- with .logo }}{{ $logo = . }}{{ end -}}
|
{{- $logoLight := "" -}}
|
||||||
|
{{- $logoDark := "" -}}
|
||||||
|
{{- with .logo }}
|
||||||
|
{{ $logo = . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $enableDarkMode -}}
|
||||||
|
{{ $ext := path.Ext $logo -}}
|
||||||
|
{{- $logoLight = printf "%s-light%s" (strings.TrimSuffix $ext $logo) $ext -}}
|
||||||
|
{{- $logoDark = printf "%s-dark%s" (strings.TrimSuffix $ext $logo) $ext -}}
|
||||||
|
{{- $light := fileExists (path.Join "/static" $logoLight) -}}
|
||||||
|
{{- $dark := fileExists (path.Join "/static" $logoDark) -}}
|
||||||
|
{{- if and $light (not $dark) -}}
|
||||||
|
{{- warnf "partial [assets/navbar.html] - Missing file: %s" $logoDark -}}
|
||||||
|
{{- $logoLight = "" -}}
|
||||||
|
{{- $logoDark = "" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $light) $dark -}}
|
||||||
|
{{- warnf "partial [assets/navbar.html] - Missing file: %s" $logoLight -}}
|
||||||
|
{{- $logoLight = "" -}}
|
||||||
|
{{- $logoDark = "" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if not (or $light $dark) -}}
|
||||||
|
{{- $logoLight = "" -}}
|
||||||
|
{{- $logoDark = "" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- $title := site.Title -}}
|
{{- $title := site.Title -}}
|
||||||
{{- if .title -}}
|
{{- if .title -}}
|
||||||
@@ -182,15 +210,18 @@
|
|||||||
{{- $pre := .Pre -}}
|
{{- $pre := .Pre -}}
|
||||||
{{- $post := .Post -}}
|
{{- $post := .Post -}}
|
||||||
|
|
||||||
{{- $theme := "" -}}
|
{{- $theme := "light" -}}
|
||||||
{{- if eq $color "black" }}{{ $theme = "dark" }}{{ end -}}
|
{{- if in (slice "primary" "secondary" "success" "danger" "black") $color }}{{ $theme = "dark" }}{{ end -}}
|
||||||
{{- if eq $color "white" }}{{ $theme = "light" }}{{ end -}}
|
{{- if in (slice "body" "body-tertiary") $color }}{{ $theme = "" }}{{ end -}}
|
||||||
|
{{- if not $color }}{{ $theme = "" }}{{ end -}}
|
||||||
{{- $class := .class -}}
|
{{- $class := .class -}}
|
||||||
|
|
||||||
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
{{- $contrast := false -}}
|
||||||
|
{{- if in (slice "primary" "secondary" "success" "danger") $color }}{{ $contrast = true }}{{ end -}}
|
||||||
|
|
||||||
|
<div class="container-fluid {{ if $fixed }}fixed-top{{ end }} p-0{{ with $class }} {{ . }}{{ end }}">
|
||||||
{{- partial "assets/page-alert.html" (dict "page" $page) -}}
|
{{- partial "assets/page-alert.html" (dict "page" $page) -}}
|
||||||
<nav class="navbar navbar-expand-{{ $size }} {{ with $color }}bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
<nav class="navbar navbar-expand-{{ $size }}{{ if $contrast }} navbar-contrast{{ end }}{{ with $color }} bg-{{ . }}{{ end }} p-4"{{ with $theme }} data-bs-theme="{{ . }}"{{ end }}>
|
||||||
<div class="container-xxl p-0">
|
<div class="container-xxl p-0">
|
||||||
<!-- Insert sidebar toggler when applicable -->
|
<!-- Insert sidebar toggler when applicable -->
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
@@ -208,7 +239,10 @@
|
|||||||
|
|
||||||
<!-- Insert the brand logo or name -->
|
<!-- Insert the brand logo or name -->
|
||||||
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
|
<a class="navbar-brand mx-auto" href="{{ site.Home.RelPermalink }}">
|
||||||
{{- if $logo -}}
|
{{- if (and $logoLight $logoDark) -}}
|
||||||
|
<img src="{{if $absoluteURL }}{{ absURL $logoLight }}{{ else }}{{ $logoLight }}{{ end }}" class="d-none-dark" alt="{{ $title }} logo" height="30">
|
||||||
|
<img src="{{if $absoluteURL }}{{ absURL $logoDark }}{{ else }}{{ $logoDark }}{{ end }}" class="d-none-light" alt="{{ $title }} logo" height="30">
|
||||||
|
{{- else if $logo -}}
|
||||||
<img src="{{if $absoluteURL }}{{ absURL $logo }}{{ else }}{{ $logo }}{{ end }}" alt="{{ $title }} logo" height="30">
|
<img src="{{if $absoluteURL }}{{ absURL $logo }}{{ else }}{{ $logo }}{{ end }}" alt="{{ $title }} logo" height="30">
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
<span class="fw-bold">{{ $title }}</span>
|
<span class="fw-bold">{{ $title }}</span>
|
||||||
@@ -217,15 +251,15 @@
|
|||||||
|
|
||||||
<!-- Insert main navigation toggler -->
|
<!-- Insert main navigation toggler -->
|
||||||
<div class="d-flex fw-30">
|
<div class="d-flex fw-30">
|
||||||
<button id="main-nav-toggler" class="navbar-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}"
|
<button class="navbar-toggler main-nav-toggler collapsed p-0" type="button" data-bs-toggle="collapse" data-bs-target="#{{ $id }}-collapse"
|
||||||
aria-controls="{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
aria-controls="{{ $id }}" aria-expanded="false" aria-label="{{ T "toggleMainNav" }}">
|
||||||
<span class="toggler-icon top-bar emphasis"></span>
|
<span class="toggler-icon top-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
|
||||||
<span class="toggler-icon middle-bar emphasis"></span>
|
<span class="toggler-icon middle-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
|
||||||
<span class="toggler-icon bottom-bar emphasis"></span>
|
<span class="toggler-icon bottom-bar emphasis{{ with $theme }}-{{ . }}{{ end }}"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="navbar-collapse collapse" id="{{ $id }}">
|
<div class="navbar-collapse collapse" id="{{ $id }}-collapse">
|
||||||
<!-- Insert search input -->
|
<!-- Insert search input -->
|
||||||
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
|
{{- if $search }}{{ partial "assets/search-input.html" -}}{{ end -}}
|
||||||
|
|
||||||
@@ -237,7 +271,7 @@
|
|||||||
{{- if .HasChildren -}}
|
{{- if .HasChildren -}}
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
{{- range .Children -}}
|
{{- range .Children -}}
|
||||||
{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}
|
<li>{{- partial "assets/navbar-item.html" (dict "menu" . "parent" $menu "page" $page) -}}</li>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</ul>
|
</ul>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
@@ -256,10 +290,10 @@
|
|||||||
{{- if $enableLanguage -}}
|
{{- if $enableLanguage -}}
|
||||||
{{- $currentLang := $page.Language.Lang -}}
|
{{- $currentLang := $page.Language.Lang -}}
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link dropdown-toggle d-{{ $size }}-none" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<a class="nav-link dropdown-toggle d-{{ $size }}-none" href="#!" role="button" data-bs-toggle="dropdown" aria-label="{{ T "languageSwitcherLabel" }}" aria-expanded="false">
|
||||||
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }} {{ T "languageSwitcherLabel" }}
|
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }} {{ T "languageSwitcherLabel" }}
|
||||||
</a>
|
</a>
|
||||||
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<a class="nav-link dropdown-toggle d-none d-{{ $size }}-block" href="#!" role="button" data-bs-toggle="dropdown" aria-label="{{ T "languageSwitcherLabel" }}" aria-expanded="false">
|
||||||
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }}
|
{{- partial "assets/icon.html" (dict "icon" "fas globe fa-fw") }}
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end ">
|
<ul class="dropdown-menu dropdown-menu-end ">
|
||||||
@@ -278,8 +312,8 @@
|
|||||||
|
|
||||||
<!-- Insert version switcher -->
|
<!-- Insert version switcher -->
|
||||||
{{- if $enableVersions -}}
|
{{- if $enableVersions -}}
|
||||||
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" true ) -}}
|
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" true "id" .id) -}}
|
||||||
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" false) -}}
|
{{- partial "partials/navbar-versions.html" (dict "page" $page "size" $size "collapsed" false "id" .id) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
<!-- Insert color mode switcher -->
|
<!-- Insert color mode switcher -->
|
||||||
@@ -290,8 +324,8 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><hr class="dropdown-divider-bg"></li>
|
<li><hr class="dropdown-divider-bg"></li>
|
||||||
|
|
||||||
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true) -}}
|
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" true "id" .id) -}}
|
||||||
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false) -}}
|
{{- partial "partials/navbar-mode.html" (dict "size" $size "collapsed" false "id" .id) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
{{- $sort := .Site.Params.sharing.sort | default "weight" -}}
|
{{- $sort := .Site.Params.sharing.sort | default "weight" -}}
|
||||||
{{- $list = sort $list $sort $order -}}
|
{{- $list = sort $list $sort $order -}}
|
||||||
<div class="py-3 text-body-secondary hstack gap-2">
|
<div class="py-3 text-body-secondary hstack gap-2">
|
||||||
{{ T "shareLink" }}
|
{{ T "shareLink" "" }}
|
||||||
{{- range $index, $item := $list -}}
|
{{- range $index, $item := $list -}}
|
||||||
{{- $url := $item.url -}}
|
{{- $url := $item.url -}}
|
||||||
{{- $url = replace $url "{url}" $page.Permalink -}}
|
{{- $url = replace $url "{url}" $page.Permalink -}}
|
||||||
@@ -21,11 +21,11 @@
|
|||||||
{{- $url = "#!" -}}
|
{{- $url = "#!" -}}
|
||||||
{{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}}
|
{{- partial "assets/toast.html" (dict "id" $target "message" (printf "%s %s" (T "link") (T "copiedToClipboard"))) -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" )}}
|
{{ partial "assets/button.html" (dict "toast" $target "clipboard" $clipboard "href" $url "icon" (printf "%s fa-fw" $item.icon) "class" "btn-social p-0" "label" (T "shareLink" $item.name)) }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{ if .Site.Params.sharing.webshare }}
|
{{ if .Site.Params.sharing.webshare }}
|
||||||
{{ $attr := dict "data-sharing-title" .Title "data-sharing-description" .Description "data-sharing-url" .Permalink }}
|
{{ $attr := dict "data-sharing-title" .Title "data-sharing-description" .Description "data-sharing-url" .Permalink }}
|
||||||
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr )}}
|
{{ partial "assets/button.html" (dict "href" "#!" "icon" "fas share-nodes fa-fw" "id" "btn-webshare" "class" "btn-social p-0" "attributes" $attr "label" (T "shareLink" (T "shareSystem"))) }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
</div>
|
</div>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
|
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse">
|
||||||
<div class="toc toc-panel text-body-secondary p-2">
|
<div class="toc toc-panel text-body p-2">
|
||||||
<small>{{ .TableOfContents }}</small>
|
<small>{{ .TableOfContents }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
<footer class="container-fluid text-center p-3">
|
<footer class="container-fluid footer text-center p-3">
|
||||||
<div class="container-xxl text-center">
|
<div class="container-xxl text-center">
|
||||||
<small class="text-secondary">
|
<small>
|
||||||
{{- $copyright := printf "%s © %s %s %s." (T "copyright") (dateFormat "2006" now) .Site.Title (T "rights") }}
|
{{- $copyright := printf "%s © %s %s %s." (T "copyright") (dateFormat "2006" now) .Site.Title (T "rights") }}
|
||||||
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
|
{{ cond (gt (len .Site.Copyright) 0) .Site.Copyright $copyright }}
|
||||||
{{ .Site.Params.footer.license | safeHTML }}
|
{{ .Site.Params.footer.license | safeHTML }}
|
||||||
{{ if .Site.Params.main.endorse }}
|
{{ if .Site.Params.main.endorse }}
|
||||||
{{ $link := partial "utilities/link" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-secondary") }}
|
{{ $link := partial "utilities/link" (dict "destination" (index site.Params.links "hinode") "text" "Hinode" "class" "link-bg-footer") }}
|
||||||
{{ T "poweredBy" $link | safeHTML }}
|
{{ T "poweredBy" $link | safeHTML }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</small>
|
</small>
|
||||||
|
@@ -5,27 +5,29 @@
|
|||||||
{{ warnf "DEPRECATED: parameter `Params.home.socialCaption` has been deprecated in release v0.18"}}
|
{{ warnf "DEPRECATED: parameter `Params.home.socialCaption` has been deprecated in release v0.18"}}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{- $tab := site.Params.main.externalLinks.tab -}}
|
{{ if gt .Site.Menus.social 0 }}
|
||||||
<div class="container-fluid">
|
{{- $tab := site.Params.main.externalLinks.tab -}}
|
||||||
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
|
<div class="container-fluid">
|
||||||
<div class="col col-md-2 d-none d-md-block"></div>
|
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
|
||||||
<div class="col col-sm-6 col-md-4">
|
<div class="col col-md-2 d-none d-md-block"></div>
|
||||||
{{ if gt .Site.Menus.social 0 }}
|
<div class="col col-sm-6 col-md-4">
|
||||||
<div class="fs-3 fw-bold">{{ or .Site.Params.footer.socialTitle .Site.Params.social.title }}</div>
|
{{ if gt .Site.Menus.social 0 }}
|
||||||
<p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
|
<div class="fs-3 fw-bold">{{ or .Site.Params.footer.socialTitle .Site.Params.social.title }}</div>
|
||||||
{{ end }}
|
<p>{{ or .Site.Params.footer.socialCaption .Site.Params.social.caption }}</p>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
<div class="col text-sm-start text-center col-sm-6 col-md-4">
|
||||||
|
{{ range .Site.Menus.social -}}
|
||||||
|
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
|
||||||
|
{{ if hasPrefix .Pre "<i" }}
|
||||||
|
{{ .Pre | safeHTML }}
|
||||||
|
{{ else }}
|
||||||
|
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-2x" .Pre) )}}
|
||||||
|
{{ end }}
|
||||||
|
</a>
|
||||||
|
{{ end -}}
|
||||||
|
</div>
|
||||||
|
<div class="col col-md-2 d-none d-md-block"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col text-sm-start text-center col-sm-6 col-md-4">
|
|
||||||
{{ range .Site.Menus.social -}}
|
|
||||||
<a href="{{ .URL }}" {{ if $tab }} target="_blank" rel="noopener noreferrer"{{ end }} aria-label="{{ .Name | safeHTML }}" class="text-decoration-none link-secondary d-inline p-2">
|
|
||||||
{{ if hasPrefix .Pre "<i" }}
|
|
||||||
{{ .Pre | safeHTML }}
|
|
||||||
{{ else }}
|
|
||||||
{{ partial "assets/icon.html" (dict "icon" (printf "%s fa-2x" .Pre) )}}
|
|
||||||
{{ end }}
|
|
||||||
</a>
|
|
||||||
{{ end -}}
|
|
||||||
</div>
|
|
||||||
<div class="col col-md-2 d-none d-md-block"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{{ end }}
|
@@ -2,10 +2,14 @@
|
|||||||
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
|
||||||
{{ if .Site.Params.favicon.logo -}}
|
{{ if .Site.Params.favicon.logo -}}
|
||||||
{{ $favicon := resources.Get .Site.Params.favicon.logo -}}
|
{{ $favicon := resources.Get .Site.Params.favicon.logo -}}
|
||||||
{{ range $i := .Site.Params.favicon.sizes -}}
|
{{- if $favicon -}}
|
||||||
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
|
{{ range $i := .Site.Params.favicon.sizes -}}
|
||||||
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
{{ $image := $favicon.Resize (printf "%dx%d CatmullRom" $i $i) -}}
|
||||||
{{ end -}}
|
<link rel="icon" type="image/png" sizes="{{$i}}x{{$i}}" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
||||||
{{ $image := $favicon.Resize "180x CatmullRom" -}}
|
{{ end -}}
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
{{ $image := $favicon.Resize "180x CatmullRom" -}}
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="{{ if $absoluteURL }}{{ $image.Permalink }}{{ else }}{{ $image.RelPermalink }}{{ end }}">
|
||||||
|
{{ else }}
|
||||||
|
{{- errorf "partial [head/favicon.html] - Cannot find file: %s" .Site.Params.favicon.logo -}}
|
||||||
|
{{ end }}
|
||||||
{{ end -}}
|
{{ end -}}
|
@@ -13,6 +13,10 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ if and site.Params.style.darkModeTint (not (findRE `\d+%` site.Params.style.darkModeTint)) }}
|
||||||
|
{{- errorf "partial [head/stylesheet.html] - Invalid value for site param 'style.darkModeTint': %s" site.Params.style.darkModeTint -}}
|
||||||
|
{{ end}}
|
||||||
|
|
||||||
{{- $navbarOffset := "0em" -}}
|
{{- $navbarOffset := "0em" -}}
|
||||||
{{- if site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4em" }}{{ end }}
|
{{- if site.Params.navigation.fixed }}{{ $navbarOffset = site.Params.navigation.offset | default "4em" }}{{ end }}
|
||||||
{{- $vars := dict
|
{{- $vars := dict
|
||||||
@@ -28,6 +32,8 @@
|
|||||||
"navbar-offset" $navbarOffset
|
"navbar-offset" $navbarOffset
|
||||||
"enable-dark-mode" (printf "%t" ((default true site.Params.main.enableDarkMode)))
|
"enable-dark-mode" (printf "%t" ((default true site.Params.main.enableDarkMode)))
|
||||||
"import-fonts" (printf "%t" (not (hasPrefix (lower site.Params.style.themeFontPath) "http")))
|
"import-fonts" (printf "%t" (not (hasPrefix (lower site.Params.style.themeFontPath) "http")))
|
||||||
|
"dark-mode-shade" (default "0%" site.Params.style.darkModeShade)
|
||||||
|
"dark-mode-tint" (default "0%" site.Params.style.darkModeTint)
|
||||||
-}}
|
-}}
|
||||||
|
|
||||||
{{- $options := (dict "transpiler" "libsass" "targetPath" $target "enableSourceMap" (not hugo.IsProduction) "vars" $vars) -}}
|
{{- $options := (dict "transpiler" "libsass" "targetPath" $target "enableSourceMap" (not hugo.IsProduction) "vars" $vars) -}}
|
||||||
|
22
layouts/partials/utilities/GetArg.html
Normal file
22
layouts/partials/utilities/GetArg.html
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<!--
|
||||||
|
Retrieve the value from a given argument within the shortcode context. If a parent is set and merge is false, the
|
||||||
|
value of the parent's argument is retrieved when the current context is unavailable. If merge is true, the parent's
|
||||||
|
value is merged with the value of the shortcode context, separated by a single space.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ $page := .page -}}
|
||||||
|
{{ $arg := .arg -}}
|
||||||
|
{{ $merge := .merge -}}
|
||||||
|
{{ $val := $page.Get $arg }}
|
||||||
|
|
||||||
|
{{- with $page.Parent -}}
|
||||||
|
{{ with .Get $arg }}
|
||||||
|
{{ if $merge }}
|
||||||
|
{{ $val = trim (printf "%s %s" . $val) " " }}
|
||||||
|
{{ else if not $val }}
|
||||||
|
{{ $val = . }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return $val -}}
|
@@ -1,18 +1,28 @@
|
|||||||
<!--
|
<!--
|
||||||
Retrieve a local or remote resource compatible with Hugo's image processing. The path of a remote image is
|
Retrieve a local or remote resource compatible with Hugo's image processing. If the url starts with 'http', the
|
||||||
rewritten to ensure processed files are stored in the final '/img' folder. The partial returns nil if the
|
image is retrieved from an external location. Else, the url is matched with a page resource and site asset (in that
|
||||||
resource cannot be found or is incompatibile. The partial supports the following arguments:
|
order). The path of a remote image is rewritten to ensure processed files are stored in the final '/img' folder. The
|
||||||
"url": Required path or url of the image, e.g. "img/example.jpg" or "https://example.com/img.jpg"
|
partial returns nil if the resource cannot be found or is incompatibile. The partial supports the following
|
||||||
|
arguments:
|
||||||
|
"url" Required path or url of the image, e.g. "img/example.jpg" or "https://example.com/img.jpg"
|
||||||
|
"page" Optional page context, used to retrieve an image from page resources.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{ $url := .url -}}
|
{{ $url := .url -}}
|
||||||
|
{{ $page := .page -}}
|
||||||
|
|
||||||
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
|
{{ $supportedMediaTypes := slice "image/png" "image/jpeg" "image/gif" "image/tiff" "image/bmp" "image/webp" -}}
|
||||||
{{ $img := "" }}
|
{{ $img := "" }}
|
||||||
{{ $remote := hasPrefix (lower $url) "http" }}
|
{{ $remote := hasPrefix (lower $url) "http" }}
|
||||||
{{ if $remote }}
|
{{ if $remote }}
|
||||||
{{ $img = resources.GetRemote $url -}}
|
{{ $img = resources.GetRemote $url -}}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ $img = resources.GetMatch $url -}}
|
{{ if $page }}
|
||||||
|
{{ $img = $page.Resources.Get $url -}}
|
||||||
|
{{ end }}
|
||||||
|
{{ if not $img }}
|
||||||
|
{{ $img = resources.GetMatch $url }}
|
||||||
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ with $img -}}
|
{{ with $img -}}
|
||||||
|
13
layouts/partials/utilities/ProcessContent.html
Normal file
13
layouts/partials/utilities/ProcessContent.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!--
|
||||||
|
Purges any HTML comments from raw content, if applicable. The partial supports the following arguments:
|
||||||
|
"page" Required page context, used to render shortcodes properly.
|
||||||
|
"raw" Raw page content, e.g. .Page.RawContent.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ $page := .page -}}
|
||||||
|
{{ $raw := .raw -}}
|
||||||
|
{{- if site.Params.debugging.purgeHTMLComments -}}
|
||||||
|
{{- $raw = replaceRE "<!--(.|\n)*?-->" "" $raw -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ $content := $raw | $page.RenderString | safeHTML }}
|
||||||
|
{{ return $content }}
|
@@ -1 +1 @@
|
|||||||
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_short" }}{{ end }}
|
{{ if eq .format "long" }}{{ .date | time.Format ":date_long" }}{{ else }}{{ .date | time.Format ":date_medium" }}{{ end }}
|
@@ -9,24 +9,16 @@
|
|||||||
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
|
||||||
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
|
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
|
||||||
{{- $isExternal := ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host -}}
|
{{- $isExternal := ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host -}}
|
||||||
|
{{- $page := .page -}}
|
||||||
{{ $text := .text }}
|
{{- $anchor := "" -}}
|
||||||
{{- if not $text -}}
|
{{- $text := .text -}}
|
||||||
{{ if $isExternal }}
|
{{- $class := .class -}}
|
||||||
{{ $text = (urls.Parse (absURL $destination)).Host }}
|
|
||||||
{{ else }}
|
|
||||||
{{ $target := site.GetPage $destination }}
|
|
||||||
{{ if not $target }}
|
|
||||||
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}}
|
|
||||||
{{ else }}
|
|
||||||
{{ $text = $target.Title }}
|
|
||||||
{{ if not $case }}{{ $text = lower $text }}{{ end }}
|
|
||||||
{{ $destination = $target.RelPermalink }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
{{- if $isExternal -}}
|
{{- if $isExternal -}}
|
||||||
|
{{- if not $text -}}
|
||||||
|
{{- $text = (urls.Parse (absURL $destination)).Host -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- if $tab -}}
|
{{- if $tab -}}
|
||||||
{{- $target = "_blank" -}}
|
{{- $target = "_blank" -}}
|
||||||
{{- $rel = "noopener noreferrer" -}}
|
{{- $rel = "noopener noreferrer" -}}
|
||||||
@@ -36,10 +28,45 @@
|
|||||||
{{ $suffix := partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
|
{{ $suffix := partial "assets/icon.html" (dict "icon" "fas up-right-from-square fa-2xs") }}
|
||||||
{{- $text = printf "%s %s" $text $suffix | safeHTML -}}
|
{{- $text = printf "%s %s" $text $suffix | safeHTML -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{ else }}
|
{{- else -}}
|
||||||
{{ $destination = relLangURL $destination }}
|
{{- if strings.Contains $destination "#" }}
|
||||||
|
{{ $segments := split $destination "#" }}
|
||||||
|
{{- if ne (len $segments) 2 }}
|
||||||
|
{{- errorf "partial [utilities/link.html] - Malformed path, expected one anchor '#' only: %s" $destination -}}
|
||||||
|
{{ else }}
|
||||||
|
{{- $destination = index $segments 0 -}}
|
||||||
|
{{- $anchor = index $segments 1 -}}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{- $destination = strings.TrimSuffix "/" $destination -}}
|
||||||
|
{{- $ref := $page.GetPage $destination -}}
|
||||||
|
|
||||||
|
{{- if not $ref }}
|
||||||
|
{{- $segments := split $destination "/" -}}
|
||||||
|
{{- if and (hasPrefix $destination "/") (gt (len $segments) 1) -}}
|
||||||
|
{{- $prefix := index $segments 1 -}}
|
||||||
|
{{- $page := .Page -}}
|
||||||
|
{{ with index (where site.Sites "Language.Lang" $prefix) 0 }}
|
||||||
|
{{- $path := printf "/%s" (strings.TrimPrefix (printf "/%s/" $prefix) $destination) }}
|
||||||
|
{{- $ref = .GetPage $path -}}
|
||||||
|
{{ end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if not $ref -}}
|
||||||
|
{{- errorf "partial [utilities/link.html] - Cannot find page: %s" $destination -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $destination = $ref.RelPermalink -}}
|
||||||
|
{{- with $anchor }}{{ $destination = printf "%s#%s" (strings.TrimSuffix "/" $destination) . -}}{{ end -}}
|
||||||
|
{{- if not $text -}}
|
||||||
|
{{- if $anchor -}}
|
||||||
|
{{- $text = $anchor -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $text = $ref.LinkTitle -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{- if not $case }}{{ $text = lower $text }}{{ end -}}
|
||||||
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- $class := .class -}}
|
|
||||||
|
|
||||||
<a {{ with $class }}class="{{ . }}" {{ end }}href="{{ $destination | safeURL }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{ $text }}</a>
|
<a {{ with $class }}class="{{ . }}" {{ end }}href="{{ $destination | safeURL }}"{{ with $target }} target="{{ . }}"{{ end }}{{ with $rel }} rel="{{ . }}"{{ end }}>{{ $text }}</a>
|
@@ -50,6 +50,6 @@
|
|||||||
</h2>
|
</h2>
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
<div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}">
|
<div id="{{ $parent }}-item-{{ $id }}" class="accordion-collapse collapse{{ if $show }} show{{ end }}{{ with $class }} {{ . }}{{ end }}" aria-labelledby="{{ $parent }}-heading-{{ $id }}" data-bs-parent="#{{ $parent }}">
|
||||||
<div class="accordion-body">{{ $body | markdownify | safeHTML }}</div>
|
<div class="accordion-body">{{ $body | .Page.RenderString | safeHTML }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
{{- $body := .Inner -}}
|
{{- $body := .Inner -}}
|
||||||
{{- if $open -}}
|
{{- if $open -}}
|
||||||
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
|
{{- $pattern := printf "data-bs-parent=\"#%s\"" $id -}}
|
||||||
{{- $body = (replace .Inner $pattern "") | markdownify | safeHTML }}
|
{{- $body = (replace .Inner $pattern "") | .Page.RenderString | safeHTML }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
<div id="{{ $id }}" class="accordion mb-3{{ with $class }} {{ . }}{{ end }}">
|
||||||
|
@@ -55,7 +55,7 @@
|
|||||||
<div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert">
|
<div class="d-flex alert alert-{{ $color }} {{ if $dismissible }}alert-dismissible fade show{{ end }}{{ with $class }} {{ . }}{{ end }}" role="alert">
|
||||||
{{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }}
|
{{ with $icon }}<div class="pt-1 pe-2">{{ . }}</div>{{ end }}
|
||||||
<div class="flex-grow-1 my-auto">
|
<div class="flex-grow-1 my-auto">
|
||||||
{{ trim .Inner " \r\n" | markdownify | safeHTML -}}
|
{{ trim .Inner " \r\n" | .Page.RenderString | safeHTML -}}
|
||||||
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
|
{{ if $dismissible }}<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>{{ end }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
50
layouts/shortcodes/card-group.html
Normal file
50
layouts/shortcodes/card-group.html
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<!--
|
||||||
|
Displays a grid of Bootstrap cards with 1 to 5 columns. The cards are rendered using a provided list of pages.
|
||||||
|
Cards on the same row are aligned to each other. The grid renders pages up to a provided maximum amount. The
|
||||||
|
remaining items are accessible via either a paginator or button to a list page (default behavior). Be aware a page
|
||||||
|
can only contain one paginator at a time.
|
||||||
|
|
||||||
|
The shortcode supports the following arguments:
|
||||||
|
"cols" Required number of columns for the grid, must be a value between 1 and 5.
|
||||||
|
"title" Optional title of the card group.
|
||||||
|
"separator" Optional flag to indicate a horizontal line should be added between items on small screens.
|
||||||
|
"gutter" Gutter between columns in a group, either "0", "1", "2", "3" (default), "4", or "5".
|
||||||
|
|
||||||
|
In addition, the following arguments are passed to the individual cards.
|
||||||
|
"class" Optional class attribute of the card element, e.g. “w-50”.
|
||||||
|
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
|
||||||
|
"warning", "info", "light", "dark", or "body". By default, no color is specified.
|
||||||
|
"padding": Optional padding of the content, either "0", "1", "2", "3" (default), "4", "5", or "auto".
|
||||||
|
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
|
||||||
|
(default), "publication", "tags", and "none".
|
||||||
|
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
|
||||||
|
"publication", "tags", and "none" (default).
|
||||||
|
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{- $cols := 3 -}}
|
||||||
|
{{ with .Get "cols" }}{{ $cols = int . }}{{ end -}}
|
||||||
|
{{- $title := .Get "title" -}}
|
||||||
|
{{- $separator := .Get "separator" -}}
|
||||||
|
{{- $class := .Get "class" -}}
|
||||||
|
{{- $wrapper := .Get "wrapper" -}}
|
||||||
|
{{- $color := .Get "color" -}}
|
||||||
|
{{- $padding := .Get "padding" | default "3" -}}
|
||||||
|
{{- $header := .Get "header" -}}
|
||||||
|
{{- $footer := .Get "footer" -}}
|
||||||
|
{{- $orientation := .Get "orientation" -}}
|
||||||
|
|
||||||
|
{{- partial "assets/card-group.html" (dict
|
||||||
|
"page" .Page
|
||||||
|
"cards" .Inner
|
||||||
|
"cols" $cols
|
||||||
|
"title" $title
|
||||||
|
"separator" $separator
|
||||||
|
"class" $class
|
||||||
|
"color" $color
|
||||||
|
"padding" $padding
|
||||||
|
"header" $header
|
||||||
|
"footer" $footer
|
||||||
|
"orientation" $orientation
|
||||||
|
)
|
||||||
|
-}}
|
@@ -1,31 +1,37 @@
|
|||||||
<!--
|
<!--
|
||||||
Displays a Bootstrap card that links to a page. The shortcode supports the following arguments:
|
Displays a Bootstrap card that links to a page. Any inner text is used as description The shortcode supports the
|
||||||
"path" Required path of the page.
|
following arguments:
|
||||||
|
"path" Optional path of the page.
|
||||||
"class" Optional class attribute of the card element, e.g. “w-50”.
|
"class" Optional class attribute of the card element, e.g. “w-50”.
|
||||||
"color": Optional theme color of the card, either "primary", "secondary", "success", "danger",
|
"color" Optional theme color of the card, either "primary", "secondary", "success", "danger",
|
||||||
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
|
"warning", "info", "light", "dark", "white", "black", "body", or "body-tertiary". By default, no
|
||||||
color is specified.
|
color is specified.
|
||||||
"padding": Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
|
"padding" Optional padding of the content, either "0", "1", "2", "3", "4", "5", or "auto" (default).
|
||||||
|
"gutter" Gutter between columns in a group, either "0", "1", "2", "3" (default), "4", or "5".
|
||||||
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
|
"header" Optional header components of the card, displayed in small caps. Supported values are "full"
|
||||||
(default), "publication", "tags", and "none".
|
(default), "publication", "tags", and "none".
|
||||||
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
|
"footer" Optional footer components of the card, displayed in small caps. Supported values are "full",
|
||||||
"publication", "tags", and "none" (default).
|
"publication", "tags", and "none" (default).
|
||||||
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
|
"orientation" Optional placecement of the thumbnail, either "stacked" (default), "horizontal", or "none".
|
||||||
|
"thumbnail" Optional thumbnail image url, displayed on top or the left of the card.
|
||||||
|
"icon" Optional Font Awesome icon, displayed on top or the left of the card.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{ $error := false }}
|
{{ $error := false }}
|
||||||
|
|
||||||
{{ $path := .Get "path" }}
|
{{ $path := .Get "path" }}
|
||||||
{{ $page := .Site.GetPage $path }}
|
{{ $page := .Page }}
|
||||||
{{ if not $page }}
|
{{ with $path }}
|
||||||
{{ errorf "Invalid or missing value for param 'path': %s" .Position -}}
|
{{ $page = $.Site.GetPage $path }}
|
||||||
{{ $error = true }}
|
{{ if not $page }}
|
||||||
|
{{ errorf "Invalid or missing value for param 'path': %s" .Position -}}
|
||||||
|
{{ $error = true }}
|
||||||
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ $class := .Get "class" }}
|
{{- $class := partial "utilities/GetArg" (dict "page" . "arg" "class" "merge" true) -}}
|
||||||
|
|
||||||
{{ $color := "" -}}
|
{{- $color := partial "utilities/GetArg" (dict "page" . "arg" "color") -}}
|
||||||
{{ with .Get "color" }}{{ $color = . }}{{ end -}}
|
|
||||||
{{ if $color }}
|
{{ if $color }}
|
||||||
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
|
{{ $supportedColors := slice "primary" "secondary" "success" "danger" "warning" "info" "light" "dark" "white" "black" "body" "body-tertiary" -}}
|
||||||
{{ if not (in $supportedColors $color) -}}
|
{{ if not (in $supportedColors $color) -}}
|
||||||
@@ -34,43 +40,64 @@
|
|||||||
{{ end -}}
|
{{ end -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $header := "full" }}
|
{{- $header := partial "utilities/GetArg" (dict "page" . "arg" "header") | default "full" -}}
|
||||||
{{ with .Get "header" }}{{ $header = . }}{{ end -}}
|
|
||||||
{{ $supportedKeywords := slice "full" "publication" "tags" "none" -}}
|
{{ $supportedKeywords := slice "full" "publication" "tags" "none" -}}
|
||||||
{{ if not (in $supportedKeywords $header) -}}
|
{{ if not (in $supportedKeywords $header) -}}
|
||||||
{{ errorf "Invalid value for param 'header': %s" .Position -}}
|
{{ errorf "Invalid value for param 'header': %s" .Position -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $footer := "none" }}
|
{{- $footer := partial "utilities/GetArg" (dict "page" . "arg" "footer") | default "none" -}}
|
||||||
{{ with .Get "footer" }}{{ $footer = . }}{{ end -}}
|
|
||||||
{{ if not (in $supportedKeywords $footer) -}}
|
{{ if not (in $supportedKeywords $footer) -}}
|
||||||
{{ errorf "Invalid value for param 'footer': %s" .Position -}}
|
{{ errorf "Invalid value for param 'footer': %s" .Position -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $padding := "auto" }}
|
{{- $padding := partial "utilities/GetArg" (dict "page" . "arg" "padding") | default "auto" -}}
|
||||||
{{ with .Get "padding" }}{{ $padding = . }}{{ end -}}
|
|
||||||
{{ $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}}
|
{{ $supportedPaddings := slice "0" "1" "2" "3" "4" "5" "auto" -}}
|
||||||
{{ if not (in $supportedPaddings $padding) -}}
|
{{ if not (in $supportedPaddings $padding) -}}
|
||||||
{{ errorf "Invalid value for param 'padding': %s" .Position -}}
|
{{ errorf "Invalid value for param 'padding': %s" .Position -}}
|
||||||
{{ $error = true -}}
|
{{ $error = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $orientation := "stacked" -}}
|
{{- $gutter := partial "utilities/GetArg" (dict "page" . "arg" "gutter") | default "3" -}}
|
||||||
{{ with .Get "orientation" }}{{ $orientation = . }}{{ end -}}
|
{{ $supportedGutters:= slice "0" "1" "2" "3" "4" "5" -}}
|
||||||
|
{{ if not (in $supportedGutters $gutter) -}}
|
||||||
|
{{ errorf "Invalid value for param 'gutter': %s" .Position -}}
|
||||||
|
{{ $error = true -}}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- $orientation := partial "utilities/GetArg" (dict "page" . "arg" "orientation") | default "stacked" -}}
|
||||||
{{ $supportedOrientations := slice "stacked" "horizontal" "none" -}}
|
{{ $supportedOrientations := slice "stacked" "horizontal" "none" -}}
|
||||||
{{ if not (in $supportedOrientations $orientation) -}}
|
{{ if not (in $supportedOrientations $orientation) -}}
|
||||||
{{ errorf "Invalid value for param 'orientation': %s" .Position -}}
|
{{ errorf "Invalid value for param 'orientation': %s" .Position -}}
|
||||||
{{ $error = true -}}
|
{{ $error = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{ $layout := "rich" -}}
|
{{- $layout := partial "utilities/GetArg" (dict "page" . "arg" "layout") | default "rich" -}}
|
||||||
{{ with .Get "layout" }}{{ $layout = . }}{{ end -}}
|
|
||||||
{{ $supportedLayouts := slice "rich" "minimal" -}}
|
{{ $supportedLayouts := slice "rich" "minimal" -}}
|
||||||
{{ if not (in $supportedLayouts $layout) -}}
|
{{ if not (in $supportedLayouts $layout) -}}
|
||||||
{{ errorf "Invalid value for param 'layout': %s" .Position -}}
|
{{ errorf "Invalid value for param 'layout': %s" .Position -}}
|
||||||
{{ $error = true -}}
|
{{ $error = true -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
|
{{ $description := .Inner }}
|
||||||
|
{{ $title := .Get "title" }}
|
||||||
|
{{ $icon := .Get "icon" }}
|
||||||
|
{{ $thumbnail := .Get "thumbnail" }}
|
||||||
|
|
||||||
{{ if not $error -}}
|
{{ if not $error -}}
|
||||||
{{- partial "assets/card.html" (dict "path" $path "class" $class "color" $color "padding" $padding "header" $header "footer" $footer "orientation" $orientation) -}}
|
<div class="g-{{ $gutter }}">
|
||||||
|
{{- partial "assets/card.html" (dict
|
||||||
|
"path" $path
|
||||||
|
"title" $title
|
||||||
|
"class" (printf "h-100 %s" $class)
|
||||||
|
"color" $color
|
||||||
|
"padding" $padding
|
||||||
|
"header" $header
|
||||||
|
"footer" $footer
|
||||||
|
"orientation" $orientation
|
||||||
|
"description" $description
|
||||||
|
"icon" $icon
|
||||||
|
"thumbnail" $thumbnail
|
||||||
|
) -}}
|
||||||
|
</div>
|
||||||
{{ end -}}
|
{{ end -}}
|
@@ -2,8 +2,10 @@
|
|||||||
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
|
Displays a carousel of several responsive images (see the image shortcode for more details). Add inner <img>
|
||||||
elements to define individual image slides. The shortcode supports the following arguments:
|
elements to define individual image slides. The shortcode supports the following arguments:
|
||||||
"id": Optional id of the carousel, defaults to "carousel-" with a sequential number.
|
"id": Optional id of the carousel, defaults to "carousel-" with a sequential number.
|
||||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
"ratio": Optional ratio of the images, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
||||||
Instead, the original aspect ratio of the image is preserved.
|
Instead, the original aspect ratio of the image is preserved.
|
||||||
|
"portrait": Optional flag to adjust the ratio from landscape to portrait. The images themselves are not rotated,
|
||||||
|
only the crop area is adjusted.
|
||||||
"class": Optional class attribute of the carousel element, e.g. “w-75”.
|
"class": Optional class attribute of the carousel element, e.g. “w-75”.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@@ -12,7 +14,6 @@
|
|||||||
{{ $id = . }}
|
{{ $id = . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ $ratio := .Get "ratio" -}}
|
|
||||||
{{ $class := .Get "class" -}}
|
{{ $class := .Get "class" -}}
|
||||||
{{ $images := .Inner -}}
|
{{ $images := .Inner -}}
|
||||||
{{ $items := len (findRE "carousel-item" $images) -}}
|
{{ $items := len (findRE "carousel-item" $images) -}}
|
||||||
|
@@ -21,11 +21,11 @@
|
|||||||
|
|
||||||
{{ $preprocess := slice "hugo" "markdown" }}
|
{{ $preprocess := slice "hugo" "markdown" }}
|
||||||
{{- if in $preprocess $lang -}}
|
{{- if in $preprocess $lang -}}
|
||||||
{{- $content = (trim $content "\r\n") | markdownify }}
|
{{- $content = (trim $content "\r\n") | .Page.RenderString }}
|
||||||
{{ $lang = "markdown" }}
|
{{ $lang = "markdown" }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
<div class="rounded border preview-background mb-3">
|
<div class="rounded border mb-3">
|
||||||
{{- if eq $show_preview true -}}
|
{{- if eq $show_preview true -}}
|
||||||
<div {{ with $id }}id="{{ . }}"{{ end }} class="rounded-top p-3 {{ with $class }} {{ . }}{{ end }}">
|
<div {{ with $id }}id="{{ . }}"{{ end }} class="rounded-top p-3 {{ with $class }} {{ . }}{{ end }}">
|
||||||
{{- $content -}}
|
{{- $content -}}
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- if eq $show_markup true -}}
|
{{- if eq $show_markup true -}}
|
||||||
<div class="d-flex align-items-center ps-3 pe-3 py-1{{ if $show_preview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight">
|
<div class="d-flex align-items-center ps-3 pe-3 py-1{{ if $show_preview }} border-top{{ else }} rounded-top{{ end }} border-bottom syntax-highlight">
|
||||||
<small class="font-monospace text-body-secondary text-uppercase">{{- $lang -}}</small>
|
<small class="font-monospace text-body text-uppercase">{{- $lang -}}</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-bottom syntax-highlight border-none">
|
<div class="rounded-bottom syntax-highlight border-none">
|
||||||
{{- highlight (trim $input "\r\n") $lang "" -}}
|
{{- highlight (trim $input "\r\n") $lang "" -}}
|
||||||
|
@@ -4,8 +4,11 @@
|
|||||||
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The partial
|
section of the main config file (defaults to 75). A fallback image is provided for older browsers. The partial
|
||||||
supports the following arguments:
|
supports the following arguments:
|
||||||
"src": Required relative url of the image, e.g. "img/example.jpg"
|
"src": Required relative url of the image, e.g. "img/example.jpg"
|
||||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Leave empty to keep the
|
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". Leave empty to keep the
|
||||||
original aspect ratio of the image.
|
original aspect ratio of the image.
|
||||||
|
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
|
||||||
|
the crop area is adjusted.
|
||||||
|
"wrapper": Optional class attributes of the wrapper element, e.g. "mx-auto".
|
||||||
"class": Optional class attribute of the inner img element, e.g. "rounded".
|
"class": Optional class attribute of the inner img element, e.g. "rounded".
|
||||||
"title": Optional alternate text of the image.
|
"title": Optional alternate text of the image.
|
||||||
"caption": Optional figure caption.
|
"caption": Optional figure caption.
|
||||||
@@ -14,7 +17,7 @@
|
|||||||
|
|
||||||
{{- if isset .Params "src" -}}
|
{{- if isset .Params "src" -}}
|
||||||
{{ $url := .Get "src" -}}
|
{{ $url := .Get "src" -}}
|
||||||
{{- $validRatios := slice "1x1" "4x3" "16x9" "21x9" -}}
|
{{- $validRatios := slice "1x1" "3x2" "4x3" "16x9" "21x9" -}}
|
||||||
{{ $ratio := .Get "ratio" -}}
|
{{ $ratio := .Get "ratio" -}}
|
||||||
{{ if $ratio -}}
|
{{ if $ratio -}}
|
||||||
{{ if not (in $validRatios $ratio) -}}
|
{{ if not (in $validRatios $ratio) -}}
|
||||||
@@ -23,6 +26,7 @@
|
|||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
{{- $class := .Get "class" -}}
|
{{- $class := .Get "class" -}}
|
||||||
|
{{- $wrapper := .Get "wrapper" -}}
|
||||||
{{ $title := .Get "title" -}}
|
{{ $title := .Get "title" -}}
|
||||||
{{ $caption := .Get "caption" -}}
|
{{ $caption := .Get "caption" -}}
|
||||||
{{ $supportedFlags := slice "true" "false" -}}
|
{{ $supportedFlags := slice "true" "false" -}}
|
||||||
@@ -34,14 +38,25 @@
|
|||||||
{{ else -}}
|
{{ else -}}
|
||||||
{{ errorf "Invalid value for param 'mode': %s" $modeParam -}}
|
{{ errorf "Invalid value for param 'mode': %s" $modeParam -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
{{ $portraitParam := "false" -}}
|
||||||
|
{{ $portrait := false -}}
|
||||||
|
{{ with .Get "portrait" }}{{ $portraitParam = . }}{{ end -}}
|
||||||
|
{{ if in $supportedFlags $portraitParam -}}
|
||||||
|
{{ if eq $portraitParam "true" }}{{ $portrait = true }}{{ else }}{{ $portrait = false }}{{ end -}}
|
||||||
|
{{ else -}}
|
||||||
|
{{ errorf "Invalid value for param 'portrait': %s" $portraitParam -}}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
{{- partial "assets/image.html" (dict
|
{{- partial "assets/image.html" (dict
|
||||||
"url" $url
|
"url" $url
|
||||||
"ratio" $ratio
|
"ratio" $ratio
|
||||||
|
"outerClass" $wrapper
|
||||||
"innerClass" $class
|
"innerClass" $class
|
||||||
"title" $title
|
"title" $title
|
||||||
"caption" $caption
|
"caption" $caption
|
||||||
"mode" $mode)
|
"mode" $mode
|
||||||
|
"portrait" $portrait
|
||||||
|
"page" .Page)
|
||||||
-}}
|
-}}
|
||||||
{{ else -}}
|
{{ else -}}
|
||||||
{{ errorf "Missing value for param 'src': %s" .Position -}}
|
{{ errorf "Missing value for param 'src': %s" .Position -}}
|
||||||
|
@@ -2,8 +2,10 @@
|
|||||||
Renders a carousel item with a responsive image (see the image shortcode for more details). The shortcode
|
Renders a carousel item with a responsive image (see the image shortcode for more details). The shortcode
|
||||||
supports the following arguments:
|
supports the following arguments:
|
||||||
"src": Required relative url of the image, e.g. "img/example.jpg"
|
"src": Required relative url of the image, e.g. "img/example.jpg"
|
||||||
"ratio": Optional ratio of the image, either "1x1", "4x3", "16x9", or "21x9". Other values are ignored.
|
"ratio": Optional ratio of the image, either "1x1", "3x2", "4x3", "16x9", or "21x9". Other values are
|
||||||
Instead, the original aspect ratio of the image is preserved.
|
ignored. Instead, the original aspect ratio of the image is preserved.
|
||||||
|
"portrait": Optional flag to adjust the ratio from landscape to portrait. The image itself is not rotated, only
|
||||||
|
the crop area is adjusted.
|
||||||
"caption": Optional carousel slide caption.
|
"caption": Optional carousel slide caption.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@@ -15,10 +17,16 @@
|
|||||||
{{ else }}
|
{{ else }}
|
||||||
{{ with .Get "ratio" }}{{ $ratio = . }}{{ end -}}
|
{{ with .Get "ratio" }}{{ $ratio = . }}{{ end -}}
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
{{- $portrait := false -}}
|
||||||
|
{{ with .Parent -}}
|
||||||
|
{{ with .Get "portrait" }}{{ $portrait = . }}{{ end -}}
|
||||||
|
{{ else }}
|
||||||
|
{{ with .Get "portrait" }}{{ $portrait = . }}{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
{{- if $src -}}
|
{{- if $src -}}
|
||||||
<div class="carousel-item {{ if eq .Ordinal 0 }}active{{ end }}">
|
<div class="carousel-item {{ if eq .Ordinal 0 }}active{{ end }}">
|
||||||
{{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "innerClass" "d-block w-100") }}
|
{{ partial "assets/image.html" (dict "url" $src "ratio" $ratio "page" .Page "innerClass" "d-block w-100" "portrait" $portrait) }}
|
||||||
<div class="carousel-caption gradient"></div>
|
<div class="carousel-caption gradient"></div>
|
||||||
{{ with $caption }}
|
{{ with $caption }}
|
||||||
<div class="carousel-caption d-none d-md-block">
|
<div class="carousel-caption d-none d-md-block">
|
||||||
|
@@ -1,12 +1,14 @@
|
|||||||
<!--
|
<!--
|
||||||
Generates a link for a given named link or url. The shortcode supports a single unnamed parameter, or various named
|
Generates a link for a given named link or url. The shortcode supports a single unnamed parameter, or various named
|
||||||
parameters. The unnamed parameter is recognized as a named link if it does not contain any "/", otherwise it is
|
parameters. The unnamed parameter is recognized as a url if it starts with "http", else it is treated as either a
|
||||||
treated as a url. Any inner text is rendered as the link title, otherwise it uses the host name (for external links)
|
named link or internal reference (in that order). Any inner text is rendered as the link title, otherwise it uses
|
||||||
or page name (for internal links). The shortcode supports the following named arguments:
|
the host name (for external links), link title (for internal links), or anchor name (for any local references
|
||||||
"name" Optional name of the link maintained in the "links" section of the site's parameters. If omitted,
|
containing a `#`). The shortcode supports the following named arguments:
|
||||||
the "url" argument should be provided instead.
|
"href" Required reference to either an external link (if it starts with http), a named link (if it can be
|
||||||
"url" Optional url of the link, including the scheme ("http" or "https"). If omitted, the "name" argument
|
found in params.links), or internal reference. External and internal references may include an
|
||||||
should be provided instead.
|
anchor "#".
|
||||||
|
"name" Alias of href.
|
||||||
|
"url" Alias of href.
|
||||||
"cue" Optional flag to indicate if an external link should show a visual cue, defaults to setting
|
"cue" Optional flag to indicate if an external link should show a visual cue, defaults to setting
|
||||||
"main.externalLinks.cue" in the site's parameters.
|
"main.externalLinks.cue" in the site's parameters.
|
||||||
"tab" Optional flag to indicate if an external link should open in a new tab, defaults to setting
|
"tab" Optional flag to indicate if an external link should open in a new tab, defaults to setting
|
||||||
@@ -17,42 +19,92 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
{{- $error := false -}}
|
{{- $error := false -}}
|
||||||
|
{{ $href := "" }}
|
||||||
{{ $name := "" }}
|
{{ $name := "" }}
|
||||||
{{ $url := "" }}
|
{{ $url := "" }}
|
||||||
|
{{ $class := "" }}
|
||||||
{{ $case := true }}
|
{{ $case := true }}
|
||||||
{{ $cue := site.Params.main.externalLinks.cue }}
|
{{ $cue := site.Params.main.externalLinks.cue }}
|
||||||
{{ $tab := site.Params.main.externalLinks.tab }}
|
{{ $tab := site.Params.main.externalLinks.tab }}
|
||||||
|
{{ $text := trim .Inner " \r\n" | .Page.RenderString | safeHTML }}
|
||||||
|
{{- $anchor := "" -}}
|
||||||
|
|
||||||
{{ if .IsNamedParams }}
|
{{ if .IsNamedParams }}
|
||||||
|
{{ $href = .Get "href" }}
|
||||||
{{ $name = .Get "name" }}
|
{{ $name = .Get "name" }}
|
||||||
{{ $url = .Get "url" }}
|
{{ $url = .Get "url" }}
|
||||||
{{ $cue = .Get "cue" | default site.Params.main.externalLinks.cue }}
|
{{ $cue = .Get "cue" | default site.Params.main.externalLinks.cue }}
|
||||||
{{ $tab = .Get "tab" | default site.Params.main.externalLinks.tab }}
|
{{ $tab = .Get "tab" | default site.Params.main.externalLinks.tab }}
|
||||||
{{ $case = .Get "case" | default true }}
|
{{ $case = .Get "case" | default true }}
|
||||||
{{ else if strings.Contains (.Get 0) "/" }}
|
{{- $class := .Get "class" -}}
|
||||||
{{ $url = .Get 0 }}
|
|
||||||
{{ else }}
|
{{ else }}
|
||||||
{{ $name = .Get 0 }}
|
{{ $href = .Get 0 }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if not (or $name $url) }}
|
{{- $href = or (or $href $name) $url -}}
|
||||||
{{ errorf "Expected param 'name' or 'url': %s" .Position -}}
|
{{ if not $href }}
|
||||||
|
{{ errorf "Expected param 'href': %s" .Position -}}
|
||||||
{{ $error = true -}}
|
{{ $error = true -}}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if $name }}
|
{{- if hasPrefix $href "http" -}}
|
||||||
{{ $url = index site.Params.links $name }}
|
{{ $url = $href }}
|
||||||
{{ if not $url }}
|
{{- else if not (strings.Contains $href "/") -}}
|
||||||
{{ errorf "Cannot find link '%s': %s" $name .Position -}}
|
{{ $url = index site.Params.links $href }}
|
||||||
{{ $error = true -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ if not $url }}
|
||||||
|
{{- $href = strings.TrimPrefix "./" $href -}}
|
||||||
|
{{- if strings.Contains $href "#" }}
|
||||||
|
{{ $segments := split $href "#" }}
|
||||||
|
{{- if ne (len $segments) 2 }}
|
||||||
|
{{ errorf "Malformed path, expected one anchor '#' only: '%s' at %s" $href .Position -}}
|
||||||
|
{{ else }}
|
||||||
|
{{- $url = index $segments 0 -}}
|
||||||
|
{{- $anchor = index $segments 1 -}}
|
||||||
|
{{ if not $url }}
|
||||||
|
{{- $url = strings.TrimSuffix "/" .Page.RelPermalink -}}
|
||||||
|
{{- with .Page.Language }}{{ $url = strings.TrimPrefix (path.Join "/" .Lang) $url}}{{ end -}}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ else }}
|
||||||
|
{{- $url = $href -}}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ $text := trim .Inner " \r\n" | markdownify | safeHTML }}
|
{{- $isExternal := ne (urls.Parse (absURL $url)).Host (urls.Parse site.BaseURL).Host -}}
|
||||||
|
{{- if not $isExternal -}}
|
||||||
|
{{- $url = strings.TrimSuffix "/" $url -}}
|
||||||
|
|
||||||
{{- $class := .Get "class" -}}
|
{{- $ref := "" -}}
|
||||||
|
{{- if not $ref -}}
|
||||||
|
{{- $ref = .Page.GetPage $url -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
{{- if not $error -}}
|
{{- if not $ref }}
|
||||||
{{ partial "utilities/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class) }}
|
{{- $segments := split $url "/" -}}
|
||||||
|
{{- if and (hasPrefix $url "/") (gt (len $segments) 1) -}}
|
||||||
|
{{- $prefix := index $segments 1 -}}
|
||||||
|
{{- $page := .Page -}}
|
||||||
|
{{ with index (where site.Sites "Language.Lang" $prefix) 0 }}
|
||||||
|
{{- $path := printf "/%s" (strings.TrimPrefix (printf "/%s/" $prefix) $url) }}
|
||||||
|
{{- $ref = .GetPage $path -}}
|
||||||
|
{{ end }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if not $ref -}}
|
||||||
|
{{- errorf "Cannot find page: '%s' at %s" $href .Position -}}
|
||||||
|
{{- $error = true -}}
|
||||||
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ with $anchor }}
|
||||||
|
{{ $url = printf "%s#%s" $url .}}
|
||||||
|
{{ end }}
|
||||||
|
{{- if not $error -}}
|
||||||
|
{{ partial "utilities/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class "page" .Page) }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -50,5 +50,5 @@
|
|||||||
<div class="tab-pane{{ if $show }} active {{ if $fade}}show{{ end }}{{ end }} {{ if $fade}}fade{{ end }}" id="{{ $parent }}-{{ $id }}"
|
<div class="tab-pane{{ if $show }} active {{ if $fade}}show{{ end }}{{ end }} {{ if $fade}}fade{{ end }}" id="{{ $parent }}-{{ $id }}"
|
||||||
role="tabpanel" aria-labelledby="{{ $parent }}-btn-{{ $id }}" tabindex="0" data-header="{{ $header }}" {{ if $show }}data-show-id="{{ $id }}"{{ end }}
|
role="tabpanel" aria-labelledby="{{ $parent }}-btn-{{ $id }}" tabindex="0" data-header="{{ $header }}" {{ if $show }}data-show-id="{{ $id }}"{{ end }}
|
||||||
data-has-content="{{ gt (len $body) 0 }}" {{ if $disabled }} data-disabled-id="{{ $id }}"{{ end }}>
|
data-has-content="{{ gt (len $body) 0 }}" {{ if $disabled }} data-disabled-id="{{ $id }}"{{ end }}>
|
||||||
{{ $body | markdownify | safeHTML }}
|
{{ $body | .Page.RenderString | safeHTML }}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -30,7 +30,8 @@
|
|||||||
{{ $path := .Get "path" }}
|
{{ $path := .Get "path" }}
|
||||||
{{ $page := .Site.GetPage $path }}
|
{{ $page := .Site.GetPage $path }}
|
||||||
{{ if not $page }}
|
{{ if not $page }}
|
||||||
{{ errorf "Invalid or missing value for param 'page': %s" .Position -}}
|
{{ errorf "Invalid or missing value for param 'path': %s" $path -}}
|
||||||
|
{{ errorf " - Location: %s" .Position -}}
|
||||||
{{ $error = true -}}
|
{{ $error = true -}}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- $title := $version -}}
|
{{- $title := $version -}}
|
||||||
{{- $color := "success" -}}
|
{{- $color := "primary" -}}
|
||||||
{{- if eq $state "deprecated" -}}
|
{{- if eq $state "deprecated" -}}
|
||||||
{{- $color = "secondary" -}}
|
{{- $color = "secondary" -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
{{ $responsive = (slice "table-responsive") -}}
|
{{ $responsive = (slice "table-responsive") -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
{{- $input := .Inner | markdownify }}
|
{{- $input := .Inner | .Page.RenderString }}
|
||||||
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}}
|
{{- $input = replace $input "style=\"text-align:left\"" "class=\"text-start\"" -}}
|
||||||
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}}
|
{{- $input = replace $input "style=\"text-align:center\"" "class=\"text-center\"" -}}
|
||||||
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}}
|
{{- $input = replace $input "style=\"text-align:right\"" "class=\"text-end\"" -}}
|
||||||
|
@@ -79,7 +79,7 @@
|
|||||||
{{ $datestr := (partial "utilities/date.html" (dict "date" $date "format" "long")) -}}
|
{{ $datestr := (partial "utilities/date.html" (dict "date" $date "format" "long")) -}}
|
||||||
<p class="mb-0"><small class="text-body-secondary text-uppercase">{{ $datestr -}}</small></p>
|
<p class="mb-0"><small class="text-body-secondary text-uppercase">{{ $datestr -}}</small></p>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<p class="mt-3 mb-0">{{ $content | markdownify }}</p>
|
<p class="mt-3 mb-0">{{ $content | .Page.RenderString }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Render timeline for smaller devices -->
|
<!-- Render timeline for smaller devices -->
|
||||||
<div class="container p-0 d-block d-md-none {{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
|
<div class="container p-0 d-block d-md-none small{{ with $background }} timeline-bg-{{ . }}{{ end }}{{ with $class }} {{ . }}{{ end }}">
|
||||||
{{ range $index, $item := $entries }}
|
{{ range $index, $item := $entries }}
|
||||||
<div class="row timeline-sm timeline-{{ $item.color }} timeline-dot g-0">
|
<div class="row timeline-sm timeline-{{ $item.color }} timeline-dot g-0">
|
||||||
{{ partial "partials/timeline-icon.html" (dict "icon" $item.icon "direction" "end" "col" 3) }}
|
{{ partial "partials/timeline-icon.html" (dict "icon" $item.icon "direction" "end" "col" 3) }}
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
|
{{ .Count }} {{ if gt .Count 1 }} {{ T "articles" }} {{ else }} {{ T "article" }} {{ end }}
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | markdownify }}</a>
|
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ .Name | .Page.RenderString }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -25,14 +25,16 @@
|
|||||||
{{ $lastYear := $.Scratch.Get "lastYear"}}
|
{{ $lastYear := $.Scratch.Get "lastYear"}}
|
||||||
<div class="row mt-2">
|
<div class="row mt-2">
|
||||||
<div class="d-none d-sm-block col-sm-3 mt-auto text-right">
|
<div class="d-none d-sm-block col-sm-3 mt-auto text-right">
|
||||||
<time class="post-date" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">{{ .Date.Format "Jan 2, 2006" }}</time>
|
<time class="post-date" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">
|
||||||
|
{{ (partial "utilities/date.html" (dict "date" .Date "format" "medium")) }}
|
||||||
|
</time>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
{{ if ne $year $lastYear }}
|
{{ if ne $year $lastYear }}
|
||||||
<p class="text-body-secondary mt-5">{{ $year }}</p>
|
<p class="text-body-secondary mt-5">{{ $year }}</p>
|
||||||
{{ $.Scratch.Set "lastYear" $year }}
|
{{ $.Scratch.Set "lastYear" $year }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | markdownify }}</a>
|
<a href="{{ (path.Join .Page.RelPermalink) | relLangURL }}">{{ if .Draft }}{{ T "draft" | upper }}: {{end}}{{ .Title | .Page.RenderString }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
1777
package-lock.json
generated
1777
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
81
package.json
81
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gethinode/hinode",
|
"name": "@gethinode/hinode",
|
||||||
"version": "0.18.0-beta",
|
"version": "0.18.6",
|
||||||
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"hugo",
|
"hugo",
|
||||||
@@ -17,35 +17,43 @@
|
|||||||
"registry": "https://registry.npmjs.org/"
|
"registry": "https://registry.npmjs.org/"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings",
|
"prestart": "npm run -s mod:vendor",
|
||||||
"start:example": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -s exampleSite",
|
"start": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings",
|
||||||
"start:prod": "hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
|
"start:example": "npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -s exampleSite",
|
||||||
"prebuild": "npm run clean:public && npm run -s mod:install",
|
"start:prod": "npm run -s prestart && hugo server --bind=0.0.0.0 --disableFastRender --printI18nWarnings -e production",
|
||||||
"build": "hugo --gc --minify",
|
"prebuild": "npm run clean:public && npm run -s mod:vendor",
|
||||||
"build:example": "npm run -s prebuild && hugo --gc --minify -s exampleSite",
|
"build": "hugo --gc --minify",
|
||||||
"build:debug": "hugo -e debug --debug",
|
"build:cache": "npm run -s prebuild && hugo config | grep cachedir && hugo --gc --minify -e ci",
|
||||||
"build:preview": "npm run build -D -F",
|
"build:example": "npm run -s prebuild && hugo --gc --minify -s exampleSite",
|
||||||
"clean:public": "rimraf public",
|
"build:example:ci": "npm run -s prebuild && hugo --gc --minify -s exampleSite -e ci",
|
||||||
"clean:install": "rimraf package-lock.json node_modules",
|
"build:debug": "hugo -e debug --debug",
|
||||||
"lint": "npm run -s lint:scripts && npm run -s lint:styles && npm run -s lint:markdown",
|
"build:preview": "npm run build -D -F",
|
||||||
"lint:scripts": "eslint assets/js",
|
"clean:public": "rimraf public exampleSite/public",
|
||||||
"lint:styles": "stylelint \"assets/scss/**/*.{css,sass,scss,sss,less}\"",
|
"clean:install": "rimraf package-lock.json node_modules",
|
||||||
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
|
"lint": "npm-run-all lint:**",
|
||||||
"lint:markdown-fix": "markdownlint-cli2-fix \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
|
"lint:scripts": "eslint assets/js --no-error-on-unmatched-pattern",
|
||||||
"mod:clean": "hugo mod clean",
|
"lint:styles": "stylelint \"assets/scss/**/*.{css,sass,scss,sss,less}\" --allow-empty-input",
|
||||||
"mod:install": "hugo mod get ./... && npm run -s mod:vendor && npm run -s mod:tidy",
|
"lint:markdown": "markdownlint-cli2 \"*.md\" \"content/**/*.md\" \"exampleSite/**/*.md\"",
|
||||||
"mod:update": "hugo mod get -u ./... && npm run -s mod:vendor && npm run -s mod:tidy",
|
"mod:clean": "hugo mod clean",
|
||||||
"mod:tidy": "hugo mod tidy",
|
"mod:update": "rimraf _vendor && hugo mod get -u ./... && hugo mod get -u && npm run -s mod:vendor && npm run -s mod:tidy",
|
||||||
"mod:vendor": "rimraf _vendor && hugo mod vendor",
|
"mod:tidy": "hugo mod tidy && hugo mod tidy -s exampleSite",
|
||||||
"test": "npm run -s lint",
|
"mod:vendor": "rimraf _vendor && hugo mod vendor",
|
||||||
"env": "hugo env",
|
"test": "npm run -s lint",
|
||||||
"precheck": "npm version",
|
"env": "hugo env",
|
||||||
"check": "hugo version",
|
"precheck": "npm version",
|
||||||
"create:syntax": "npm run -s create:syntax-light & npm run -s create:syntax-dark && npm run -s update:syntax-dark",
|
"check": "hugo version",
|
||||||
"create:syntax-light": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
|
"create:syntax": "npm-run-all update:syntax:**",
|
||||||
"create:syntax-dark": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
|
"update:syntax:light1": "hugo gen chromastyles --style=github > ./assets/scss/components/_syntax-light.scss",
|
||||||
"update:syntax-dark": "replace-in-files --string=\"#ffffcc\" --replacement=\"#b8b800\" ./assets/scss/components/_syntax-dark.scss",
|
"update:syntax:light2": "replace-in-files --string=\"#0086b3\" --replacement=\"#006b8f\" ./assets/scss/components/_syntax-light.scss",
|
||||||
"upgrade": "npx npm-check-updates -u && npm run -s mod:update"
|
"update:syntax:light3": "replace-in-files --string=\"#009999\" --replacement=\"#007a7a\" ./assets/scss/components/_syntax-light.scss",
|
||||||
|
"update:syntax:light4": "replace-in-files --string=\"#999988\" --replacement=\"#6d6d5d\" ./assets/scss/components/_syntax-light.scss",
|
||||||
|
"update:syntax:dark1": "hugo gen chromastyles --style=github-dark > ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"update:syntax:dark2": "replace-in-files --string=\"#ffffcc\" --replacement=\"#373700\" ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"update:syntax:dark3": "replace-in-files --string=\"#8b949e\" --replacement=\"#979fa8\" ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"update:syntax:dark4": "replace-in-files --string=\".na { }\" --replacement=\".na { color: #00cccc }\" ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"update:syntax:dark5": "replace-in-files --string=\".nb { }\" --replacement=\".nb { color: #00a2d8 }\" ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"update:syntax:dark6": "replace-in-files --string=\"#6e7681\" --replacement=\"#999fa8\" ./assets/scss/components/_syntax-dark.scss",
|
||||||
|
"upgrade": "npx npm-check-updates -u && npm run -s mod:update"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -59,22 +67,23 @@
|
|||||||
"homepage": "https://gethinode.com",
|
"homepage": "https://gethinode.com",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fullhuman/postcss-purgecss": "^5.0.0",
|
"@fullhuman/postcss-purgecss": "^5.0.0",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.15",
|
||||||
"cssnano": "^6.0.1",
|
"cssnano": "^6.0.1",
|
||||||
"cssnano-preset-advanced": "^6.0.1",
|
"cssnano-preset-advanced": "^6.0.1",
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^8.47.0",
|
||||||
"eslint-config-standard": "^17.1.0",
|
"eslint-config-standard": "^17.1.0",
|
||||||
"eslint-plugin-import": "^2.28.0",
|
"eslint-plugin-import": "^2.28.1",
|
||||||
"eslint-plugin-n": "^16.0.1",
|
"eslint-plugin-n": "^16.0.2",
|
||||||
"eslint-plugin-promise": "^6.1.1",
|
"eslint-plugin-promise": "^6.1.1",
|
||||||
"hugo-bin": "^0.113.0",
|
"hugo-bin": "^0.113.0",
|
||||||
"markdownlint-cli2": "^0.8.1",
|
"markdownlint-cli2": "^0.9.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
"postcss-cli": "^10.1.0",
|
"postcss-cli": "^10.1.0",
|
||||||
"purgecss-whitelister": "^2.4.0",
|
"purgecss-whitelister": "^2.4.0",
|
||||||
"replace-in-files-cli": "^2.2.0",
|
"replace-in-files-cli": "^2.2.0",
|
||||||
"rimraf": "^5.0.1",
|
"rimraf": "^5.0.1",
|
||||||
"shx": "^0.3.4",
|
"shx": "^0.3.4",
|
||||||
"stylelint": "^15.10.2",
|
"stylelint": "^15.10.3",
|
||||||
"stylelint-config-standard-scss": "^10.0.0"
|
"stylelint-config-standard-scss": "^10.0.0"
|
||||||
},
|
},
|
||||||
"hugo-bin": {
|
"hugo-bin": {
|
||||||
|
Reference in New Issue
Block a user