Compare commits

...

21 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
e56169291c Initial plan 2025-10-20 15:30:21 +00:00
Keith Stockdale
3551a56b8c feat: support GoatCounter analytics (#814)
* feat: support GoatCounter analytics

* docs: add docs for GoatCounter analytics

refactor: move analytics documentation into its own section since there are now 4 supported analytics solutions

* fix: addressing issues raised in PR

* refactor: simplifying goat counter setting logic.
refactor: simplify error handling with goat counter

* fix: fixing goat counter erroring when a code is provided

* fix: Applying suggested fixes

* Update layouts/_partials/components/analytics/goat-counter.html

---------

Co-authored-by: Xin <5097752+imfing@users.noreply.github.com>
2025-10-13 22:50:19 +01:00
Bubbler
bfeae19076 docs(details): change details shortcode calls to angle brackets (#855)
Co-authored-by: Xin <5097752+imfing@users.noreply.github.com>
2025-10-12 23:07:24 +01:00
Paul Marrapese
b7f4bffce6 feat(shortcode): added markdown attribute support for headers (#851)
docs: added "no-step-marker" example for steps
2025-10-11 23:13:04 +01:00
Kowyo
708358de80 fix: enhance table readability (#826)
* feat: enhance table readability

* use v0.9.0 table style

* Update table styles

---------

Co-authored-by: Xin <xin@imfing.com>
2025-09-15 21:59:05 +01:00
ghac101
8699deb1dd fix(analytics): change default umami analytics file to script.js (#835)
Co-authored-by: Xin <5097752+imfing@users.noreply.github.com>
2025-09-15 21:28:27 +01:00
Ludovic Fernandez
a03dbf463f fix(docs): menu main duplicate field (#837) 2025-09-15 21:23:27 +01:00
Ludovic Fernandez
1c06ae5580 chore(scripts): generic way to build scripts (#829)
* chore: move core scripts

* chore: extract head scripts
2025-09-11 20:29:18 +01:00
Ludovic Fernandez
ccb63d60f1 feat(tabs): revamp tabs (#815) 2025-09-10 23:54:27 +01:00
Keith Stockdale
3bc454bbf6 feat: support hiding the main sidebar in desktop site (#778)
* feat: Remove the main sidebar entirely to free up more space for the main content of the page

* fix: ensure that the footer switches are still visible when the main sidebar has been disabled

* refactor: Repurpose Params.sidebar.hide to disable the main sidebar and disable the placeholder rather than adding a new front matter parameter

* fix: change wording from "disable" to "hide" in the documentation for hiding the sidebar

* fix: using incorrect hidden class in sidebar.html broke mobile navigation. Fixed this

---------

Co-authored-by: Xin <5097752+imfing@users.noreply.github.com>
2025-09-10 22:45:12 +01:00
Xin
1b536e27a5 chore(build): update MAIN_VERSION to v0.11.1 and change source directory to docs 2025-09-06 14:03:29 +01:00
Xin
0e919e77f8 fix(build): update version source directory for v0.10.2 to exampleSite 2025-09-06 11:17:38 +00:00
Xin
83f3b5052e chore(docs): rename exampleSite to docs and create examples (#813)
* chore(docs): rename `exampleSite` to `docs` and create `examples`

* chore(build): update build script to support new version format and source directories; add v0.10 to documentation menu
2025-09-06 12:06:26 +01:00
Kowyo
f8eae96c11 docs: update file paths for hugo new template system (#821) 2025-09-04 19:17:28 +01:00
Ludovic Fernandez
ec97808b69 feat(opengraph): update the partial (#819)
* chore: update opengraph partial

* docs: improve Open Grapth section
2025-09-03 21:46:30 +01:00
Ludovic Fernandez
334158af7a chore: replace .Scratch with .Store (#818) 2025-09-03 15:37:18 +01:00
Ludovic Fernandez
184ee25011 fix(analytics): Matomo analytics (#817)
* fix: Matomo analytics

* chore: use with

* Revert "chore: use with"

This reverts commit 1d86e6fa0f.

---------

Co-authored-by: Xin <xin@imfing.com>
2025-09-03 10:53:27 +01:00
Xin
cc5884dd2a fix(banner): update link formats (#816)
* fix(banner): update link formats

* fix(banner): correct link format in localized messages for v0.11 announcement
2025-09-02 23:54:40 +01:00
Xin
493cfba523 fix(tags): update tag link to use the correct tag title instead of page title (#812) 2025-08-31 12:47:52 +01:00
Xin
5846274db7 chore: update thumbnail image tn.jpg 2025-08-30 14:05:31 +01:00
Xin
4635bdc846 chore: update main version to v0.11.0 in build script 2025-08-30 13:53:52 +01:00
192 changed files with 628 additions and 364 deletions

View File

@@ -31,7 +31,7 @@ Use [Conventional Commits][conventional commits] message to make it easier to un
Similar to contributing code, you can also contribute to the documentation by submitting a pull request.
The documentation site is located in the [`exampleSite`](../exampleSite/) folder.
The documentation site is located in the [`docs`](../docs/) folder.
You can make changes to the documentation and create a pull request. A preview of the new documentation will be automatically generated and displayed in the pull request comment via [Netlify][netlify deploy preview].
### 💬 GitHub Discussions
@@ -71,7 +71,7 @@ npm i
- [`assets`](../assets/): CSS styles and JavaScript files.
- [`data`](../data/): The theme data files. Now only contains the `icons.yaml` file.
- [`exampleSite`](../exampleSite/): The documentation site for the theme.
- [`docs`](../docs/): The documentation site for the theme.
- [`i18n`](../i18n/): The theme translation files.
- [`layouts`](../layouts/): The theme layouts.
- [`static`](../static/): The static files for the theme. For example, the favicon and the site logo.
@@ -84,7 +84,7 @@ Please refer to the [Hugo documentation][hugo] for more information.
npm run dev:theme
```
It will start the Hugo server on `http://localhost:1313/` for the `exampleSite` content.
It starts the Hugo server on `http://localhost:1313/` for the `docs` content.
### Compile the styles

View File

@@ -84,12 +84,12 @@ assets/
### Example Site Development
The `exampleSite/` directory serves as both documentation and testing ground:
The `docs/` directory serves as both documentation and testing ground:
- Test new features here before releasing
- Configuration examples in `exampleSite/hugo.yaml` showing multi-language setup
- Configuration examples in `docs/hugo.yaml` showing multi-language setup
- Content examples demonstrate all theme capabilities
- Run from exampleSite with: `hugo server --themesDir=../..`
- Run from docs with: `hugo server --themesDir=../..`
### CSS Development Workflow
@@ -115,7 +115,7 @@ The `exampleSite/` directory serves as both documentation and testing ground:
### Key Configuration Files
- `exampleSite/hugo.yaml` - Example Hugo configuration with multi-language setup
- `docs/hugo.yaml` - Example Hugo configuration with multi-language setup
- `postcss.config.mjs` - PostCSS configuration for CSS processing
- `package.json` - Node.js dependencies and build scripts
- `taskfile.yaml` - Task runner configuration
@@ -155,7 +155,7 @@ The `exampleSite/` directory serves as both documentation and testing ground:
### Testing & Quality Assurance
- Test all changes in `exampleSite/` before releasing
- Test all changes in `docs/` before releasing
- Use `npm run dev:theme` for theme development with hot reloading
- Format code with `npx prettier --write .` before committing
- Verify multi-language functionality across supported languages

File diff suppressed because one or more lines are too long

View File

@@ -33,19 +33,19 @@
@apply hx:border-black/4 hx:bg-black/3 hx:break-words hx:rounded-md hx:border hx:py-0.5 hx:px-[.25em] hx:text-[.9em] hx:dark:border-white/10 hx:dark:bg-white/10;
}
:where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) {
@apply hx:block hx:overflow-x-auto hx:my-6 hx:p-0 hx:first:mt-0 hx:w-full hx:text-sm hx:leading-5;
@apply hx:block hx:overflow-x-auto hx:my-6 hx:p-0 hx:first:mt-0 hx:w-full hx:text-sm hx:leading-5 hx:border-collapse;
thead {
@apply hx:border-b hx:border-gray-200 hx:dark:border-neutral-800;
@apply hx:bg-gray-50 hx:dark:bg-gray-600/20;
}
tbody tr {
@apply hx:m-0 hx:border-b hx:border-gray-100 hx:dark:border-neutral-800/50;
tr {
@apply hx:m-0 hx:border-t hx:border-gray-300 hx:p-0 hx:dark:border-gray-600;
}
th {
@apply hx:m-0 hx:p-2 hx:font-semibold hx:first:pl-0 hx:last:pr-0;
@apply hx:m-0 hx:border hx:border-gray-300 hx:p-2 hx:font-semibold hx:dark:border-gray-600;
}
td {
@apply hx:m-0 hx:p-2 hx:first:pl-0 hx:last:pr-0;
@apply hx:m-0 hx:border hx:border-gray-300 hx:p-2 hx:dark:border-gray-600;
}
}
:where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) {

6
assets/js/head/banner.js Normal file
View File

@@ -0,0 +1,6 @@
// The section must not be in the banner.js (body) file because it can create a quick flash.
if (localStorage.getItem('{{ site.Params.banner.key | default `banner-closed` }}')) {
document.documentElement.style.setProperty("--hextra-banner-height", "0px");
document.documentElement.classList.add("hextra-banner-hidden");
}

14
assets/js/head/theme.js Normal file
View File

@@ -0,0 +1,14 @@
// The section must not be in the theme.js (body) file because it can create a quick flash (switch between light and dark).
function setTheme(theme) {
document.documentElement.classList.remove("light", "dark");
if (theme !== "light" && theme !== "dark") {
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
document.documentElement.classList.add(theme);
document.documentElement.style.colorScheme = theme;
}
setTheme("color-theme" in localStorage ? localStorage.getItem("color-theme") : '{{ site.Params.theme.default | default `system`}}')

View File

@@ -7,16 +7,17 @@ BASE_URL=${1:-"http://localhost:1313"}
echo "Using base URL: $BASE_URL"
# Version configuration - modify these arrays to specify versions to build
# Format: "ref:display_name" (ref can be tag, branch, or commit hash, display name is what will appear in URL)
MAIN_VERSION="v0.10.1:latest"
# MAIN_VERSION format: "ref:display_name:source_dir"
# VERSIONS format: "ref:display_name:source_dir" where source_dir is either "docs" or "exampleSite"
MAIN_VERSION="v0.11.1:latest:docs"
VERSIONS=(
"main:latest" # latest version always builds from main
"v0.9.6:v0.9"
"v0.8.6:v0.8"
"main:latest:docs" # latest version always builds from main
"v0.10.2:v0.10:exampleSite"
"v0.9.6:v0.9:exampleSite"
)
# Parse main version
IFS=':' read -r MAIN_REF MAIN_NAME <<< "$MAIN_VERSION"
IFS=':' read -r MAIN_REF MAIN_NAME MAIN_DIR <<< "$MAIN_VERSION"
# Ensure clean public directory
rm -rf public
@@ -29,13 +30,13 @@ GIT_HASH=$(git rev-parse --short HEAD)
echo "Building main site from $MAIN_REF (commit: $GIT_HASH)"
hugo \
--minify \
--themesDir=../.. --source=exampleSite \
--themesDir=../.. --source=$MAIN_DIR \
--baseURL "$BASE_URL/" \
--destination=../public
# Build all versions
for VERSION in "${VERSIONS[@]}"; do
IFS=':' read -r REF NAME <<< "$VERSION"
IFS=':' read -r REF NAME DIR <<< "$VERSION"
git checkout $REF
GIT_HASH=$(git rev-parse --short HEAD)
@@ -44,7 +45,7 @@ for VERSION in "${VERSIONS[@]}"; do
mkdir -p "public/versions/$NAME"
hugo \
--minify \
--themesDir=../.. --source=exampleSite \
--themesDir=../.. --source=$DIR \
--baseURL "$BASE_URL/versions/$NAME/" \
--destination="../public/versions/$NAME"
done

View File

@@ -1,4 +1,4 @@
# Theme development config for exampleSite
# Theme development config for documentation site
# https://gohugo.io/configuration/build/#cache-busters
[build]
[build.buildStats]

View File

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 168 KiB

View File

@@ -221,14 +221,14 @@ hugo gen chromastyles --style=github
می‌توانید اسکریپت‌های سفارشی را به انتهای head برای هر صفحه با افزودن فایل زیر اضافه کنید:
```
layouts/partials/custom/head-end.html
layouts/_partials/custom/head-end.html
```
## بخش اضافی سفارشی در پاورقی
می‌توانید بخش اضافی در پاورقی با ایجاد یک فایل `layouts/partials/custom/footer.html` در سایت خود اضافه کنید.
می‌توانید بخش اضافی در پاورقی با ایجاد یک فایل `layouts/_partials/custom/footer.html` در سایت خود اضافه کنید.
```html {filename="layouts/partials/custom/footer.html"}
```html {filename="layouts/_partials/custom/footer.html"}
<!-- عنصر پاورقی شما اینجا -->
```

View File

@@ -221,14 +221,14 @@ hugo gen chromastyles --style=github
すべてのページのheadの終わりにカスタムスクリプトを追加するには、以下のファイルを作成します:
```
layouts/partials/custom/head-end.html
layouts/_partials/custom/head-end.html
```
## フッターへのカスタムセクション追加
フッターに追加セクションを追加するには、サイト内に`layouts/partials/custom/footer.html`ファイルを作成します。
フッターに追加セクションを追加するには、サイト内に`layouts/_partials/custom/footer.html`ファイルを作成します。
```html {filename="layouts/partials/custom/footer.html"}
```html {filename="layouts/_partials/custom/footer.html"}
<!-- ここにフッター要素を追加 -->
```

View File

@@ -221,14 +221,14 @@ To override the default syntax highlighting theme, we can add the generated styl
You may add custom scripts to the end of the head for every page by adding the following file:
```
layouts/partials/custom/head-end.html
layouts/_partials/custom/head-end.html
```
## Custom Extra Section in Footer
You can add extra section in the footer by creating a file `layouts/partials/custom/footer.html` in your site.
You can add extra section in the footer by creating a file `layouts/_partials/custom/footer.html` in your site.
```html {filename="layouts/partials/custom/footer.html"}
```html {filename="layouts/_partials/custom/footer.html"}
<!-- Your footer element here -->
```

View File

@@ -221,14 +221,14 @@ hugo gen chromastyles --style=github
您可以通过添加以下文件在每个页面的 head 末尾添加自定义脚本:
```
layouts/partials/custom/head-end.html
layouts/_partials/custom/head-end.html
```
## 自定义页脚额外部分
您可以通过在站点中创建 `layouts/partials/custom/footer.html` 文件来添加页脚的额外部分。
您可以通过在站点中创建 `layouts/_partials/custom/footer.html` 文件来添加页脚的额外部分。
```html {filename="layouts/partials/custom/footer.html"}
```html {filename="layouts/_partials/custom/footer.html"}
<!-- 您的页脚元素放在这里 -->
```

View File

@@ -7,7 +7,7 @@ tags:
Hugo تنظیمات خود را از فایل `hugo.yaml` در ریشه سایت شما می‌خواند.
فایل پیکربندی جایی است که می‌توانید تمام جنبه‌های سایت خود را تنظیم کنید.
برای آشنایی جامع با تنظیمات موجود و بهترین روش‌ها، فایل پیکربندی این سایت [`exampleSite/hugo.yaml`](https://github.com/imfing/hextra/blob/main/exampleSite/hugo.yaml) را در GitHub بررسی کنید.
برای آشنایی جامع با تنظیمات موجود و بهترین روش‌ها، فایل پیکربندی این سایت [`docs/hugo.yaml`](https://github.com/imfing/hextra/blob/main/docs/hugo.yaml) را در GitHub بررسی کنید.
<!--more-->
@@ -416,4 +416,4 @@ outputs:
سایر ویژگی‌های Open Graph می‌توانند فقط یک مقدار داشته باشند.
به عنوان مثال، این صفحه یک تگ `og:image` (که تصویری برای پیش‌نمایش در اشتراک‌گذاری‌های اجتماعی پیکربندی می‌کند) و یک تگ `og:audio` دارد.
```yaml {filename
```yaml {filename

View File

@@ -7,7 +7,7 @@ tags:
Hugo はサイトのルートにある `hugo.yaml` から設定を読み込みます。
この設定ファイルであなたのサイトのあらゆる側面を設定できます。
利用可能な設定項目とベストプラクティスを網羅的に理解するには、GitHub 上のこのサイトの設定ファイル [`exampleSite/hugo.yaml`](https://github.com/imfing/hextra/blob/main/exampleSite/hugo.yaml) を参照してください。
利用可能な設定項目とベストプラクティスを網羅的に理解するには、GitHub 上のこのサイトの設定ファイル [`docs/hugo.yaml`](https://github.com/imfing/hextra/blob/main/docs/hugo.yaml) を参照してください。
<!--more-->
@@ -422,4 +422,4 @@ params:
images:
- "/img/config-image.jpg"
audio: "config-talk.mp3"
```
```

View File

@@ -7,7 +7,7 @@ tags:
Hugo reads its configuration from `hugo.yaml` in the root of your Hugo site.
The config file is where you can configure all aspects of your site.
Check out the config file for this site [`exampleSite/hugo.yaml`](https://github.com/imfing/hextra/blob/main/exampleSite/hugo.yaml) on GitHub to get a comprehensive idea of available settings and best practices.
Check out the config file for this site [`docs/hugo.yaml`](https://github.com/imfing/hextra/blob/main/docs/hugo.yaml) on GitHub to get a comprehensive idea of available settings and best practices.
<!--more-->
@@ -164,6 +164,21 @@ menu:
weight: 3
```
### Hiding
Hiding the sidebar can be done using front matter:
```yaml {filename="content/docs/guide/configuration.md"}
---
title: Configuration
sidebar:
hide: true
---
```
This will hide the main sidebar from the page, freeing up space for the main content of the page.
## Right Sidebar
### Table of Contents
@@ -368,16 +383,6 @@ excludeSearch: true
---
```
### Google Analytics
To enable [Google Analytics](https://marketingplatform.google.com/about/analytics/), set `services.googleAnalytics.ID` flag in `hugo.yaml`:
```yaml {filename="hugo.yaml"}
services:
googleAnalytics:
ID: G-MEASUREMENT_ID
```
### Google Search Index
To [block Google Search](https://developers.google.com/search/docs/crawling-indexing/block-indexing) from indexing a page, set `noindex` to true in your page frontmatter:
@@ -394,7 +399,25 @@ To exclude an entire directory, use the [`cascade`](https://gohugo.io/configurat
> To block search crawlers, you can make a [`robots.txt` template](https://gohugo.io/templates/robots/).
> However, `robots.txt` instructions do not necessarily keep a page out of Google search results.
### Umami Analytics
### Analytics
Hextra has support for several different analytics solutions. Hextra only supports analytics in production environments. This is to ensure that you do not accidentally send analytic events when working locally. If, however, you do want to test analytics locally, you can run a production server using:
```
hugo server --environment production
```
#### Google Analytics
To enable [Google Analytics](https://marketingplatform.google.com/about/analytics/), set `services.googleAnalytics.ID` flag in `hugo.yaml`:
```yaml {filename="hugo.yaml"}
services:
googleAnalytics:
ID: G-MEASUREMENT_ID
```
#### Umami Analytics
To enable [Umami](https://umami.is/docs/), set `params.analytics.umami.serverURL` and `params.analytics.umami.websiteID` flag in `hugo.yaml`:
@@ -404,7 +427,7 @@ params:
umami:
serverURL: "https://example.com"
websiteID: "94db1cb1-74f4-4a40-ad6c-962362670409"
# scriptName: "umami.js" # optional (default: umami.js)
# scriptName: "script.js" # optional (default: script.js)
# https://umami.is/docs/tracker-configuration#data-host-url
# hostURL: "http://stats.example.org" # optional
# https://umami.is/docs/tracker-configuration#data-auto-track
@@ -421,7 +444,7 @@ params:
# doNotTrack: "true" # optional
```
### Matomo Analytics
#### Matomo Analytics
To enable [Matomo](https://matomo.org/), set `params.analytics.matomo.URL` and `params.analytics.matomo.ID` flag in `hugo.yaml`:
@@ -433,6 +456,32 @@ params:
websiteID: "94db1cb1-74f4-4a40-ad6c-962362670409"
```
#### GoatCounter Analytics
To enable [GoatCounter](https://www.goatcounter.com/), set `params.analytics.goatCounter.code` in `hugo.yaml`
All settings available here are mirrors of the settings described in GoatCounter [settings](https://www.goatcounter.com/help/js#settings-44186)
```yaml {filename="hugo.yaml"}
params:
analytics:
goatCounter:
code: "ABCDE"
# Optional Settings
#------------------
# disables automatic collection of data
# noOnload: true
# disables event binding. See more here https://www.goatcounter.com/help/events
# noEvents: true
# allows data collection from local addresses. Use this with a production environment to test locally
# allowLocal: true
# Allow data collection when a page is loaded in a frame or iframe
# allowFrame: true
```
### LLMS.txt Support
To enable [llms.txt](https://llmstxt.org/) output format for your site, which provides a structured text outline for [large language models](https://en.wikipedia.org/wiki/Large_language_model) and AI agents, add the `llms` output format to your site's `hugo.yaml`:
@@ -456,19 +505,41 @@ The llms.txt file is automatically generated from your content structure and mak
### Open Graph
To add [Open Graph](https://ogp.me/) metadata to a page, add values in the frontmatter params.
To add [Open Graph](https://ogp.me/) metadata, you can:
- add values in the front-matter params of a page
- or add values in the Hugo configuration file
As a page can have multiple `image` and `video` tags, place their values in an array.
Other Open Graph properties can have only one value.
For example, this page has an `og:image` tag (which configures an image to preview on social shares) and an `og:audio` tag.
```yaml {filename="content/docs/guide/configuration.md"}
title: "Configuration"
{{< tabs items="Page Level, Global Level" >}}
{{< tab >}}
```md {filename="mypage.md"}
---
title: "My Page"
params:
images:
- "/img/config-image.jpg"
audio: "config-talk.mp3"
- "/images/image01.jpg"
audio: "podcast02.mp3"
videos:
- "video01.mp4"
---
Page content.
```
{{< /tab >}}
{{< tab >}}
```yaml {filename="hugo.yaml"}
params:
images:
- "/images/image01.jpg"
audio: "podcast02.mp3"
videos:
- "video01.mp4"
```
{{< /tab >}}
{{< /tabs >}}
### Banner

View File

@@ -7,7 +7,7 @@ tags:
Hugo 从站点根目录的 `hugo.yaml` 读取配置。
配置文件可用来调整站点的所有方面。
查看本网站的示例配置文件 [`exampleSite/hugo.yaml`](https://github.com/imfing/hextra/blob/main/exampleSite/hugo.yaml) 以全面了解可用设置和最佳实践。
查看本网站的示例配置文件 [`docs/hugo.yaml`](https://github.com/imfing/hextra/blob/main/docs/hugo.yaml) 以全面了解可用设置和最佳实践。
<!--more-->
@@ -422,4 +422,4 @@ params:
images:
- "/img/config-image.jpg"
audio: "config-talk.mp3"
```
```

Some files were not shown because too many files have changed in this diff Show More