7 Commits

Author SHA1 Message Date
Xin
14036ffea6 feat: enhance FlexSearch encoding for CJK support (#553)
- Added support for CJK (Chinese, Japanese, Korean) languages in FlexSearch encoding.
- Introduced `isCJK` function to detect language and select appropriate encoding method.
- Implemented `encodeCJK` and `encodeDefault` functions for different tokenization strategies.
2025-01-18 18:54:54 +00:00
Jan Zerfowski
a1232ecf9f fix: skip image process on svgs and remote images (#551) 2025-01-18 17:05:13 +00:00
Nikolay Dubina
a933f464f5 docs: fix wrong param footer (#543)
it has changed 709a407b2e/layouts/partials/footer.html (L40C40-L40C56)
2025-01-07 10:51:00 +00:00
Xin
709a407b2e feat: add tags support (#542)
* feat: basic tags support

* feat: add term page

* chore: update css
2025-01-05 20:33:56 +00:00
Xin
876eb3abff chore(docs): remove redundant backticks 2025-01-05 19:03:13 +00:00
Jan Zerfowski
a27f6eef5e refactor: use generic .Process for card processing and allow bundled images (#538)
* Change processing method to more generic hugo .Process and allow resources from local .Page.Resources as well as global resources

* Add comments

* Fix double curly brackets error

Co-authored-by: Xin <fuxin1997@gmail.com>

* Maintain backward compatibility by using defaulting $process to $methd $options

https://github.com/imfing/hextra/pull/538#discussion_r1903250264

* Use printf instead of delimit

Co-authored-by: Xin <fuxin1997@gmail.com>

---------

Co-authored-by: Xin <fuxin1997@gmail.com>
2025-01-05 19:00:00 +00:00
stoic-hugo
323f4c4b44 i18n: update sw.yaml (#541) 2025-01-05 18:59:20 +00:00
9 changed files with 109 additions and 21 deletions

View File

@@ -839,6 +839,9 @@ video {
-moz-appearance: none; -moz-appearance: none;
appearance: none; appearance: none;
} }
.hx-grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.hx-flex-col { .hx-flex-col {
flex-direction: column; flex-direction: column;
} }
@@ -3427,6 +3430,10 @@ body:is(html[class~="dark"] *) {
flex-shrink: 0; flex-shrink: 0;
} }
.md\:hx-grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.md\:hx-justify-start { .md\:hx-justify-start {
justify-content: flex-start; justify-content: flex-start;
} }
@@ -3456,11 +3463,21 @@ body:is(html[class~="dark"] *) {
font-size: .875rem; font-size: .875rem;
} }
} }
@media (min-width: 1024px) {
.lg\:hx-grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
@media (min-width: 1280px) { @media (min-width: 1280px) {
.xl\:hx-block { .xl\:hx-block {
display: block; display: block;
} }
.xl\:hx-grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
} }
.ltr\:hx-right-1\.5:where([dir="ltr"], [dir="ltr"] *) { .ltr\:hx-right-1\.5:where([dir="ltr"], [dir="ltr"] *) {
right: 0.375rem; right: 0.375rem;

View File

@@ -195,8 +195,19 @@ document.addEventListener("DOMContentLoaded", function () {
*/ */
async function preloadIndex() { async function preloadIndex() {
const tokenize = '{{- site.Params.search.flexsearch.tokenize | default "forward" -}}'; const tokenize = '{{- site.Params.search.flexsearch.tokenize | default "forward" -}}';
const isCJK = () => {
const lang = document.documentElement.lang || "en";
return lang.startsWith("zh") || lang.startsWith("ja") || lang.startsWith("ko");
}
const encodeCJK = (str) => str.replace(/[\x00-\x7F]/g, "").split("");
const encodeDefault = (str) => (""+str).toLocaleLowerCase().split(/[\p{Z}\p{S}\p{P}\p{C}]+/u);
const encodeFunction = isCJK() ? encodeCJK : encodeDefault;
window.pageIndex = new FlexSearch.Document({ window.pageIndex = new FlexSearch.Document({
tokenize, tokenize,
encode: encodeFunction,
cache: 100, cache: 100,
document: { document: {
id: 'id', id: 'id',
@@ -207,6 +218,7 @@ document.addEventListener("DOMContentLoaded", function () {
window.sectionIndex = new FlexSearch.Document({ window.sectionIndex = new FlexSearch.Document({
tokenize, tokenize,
encode: encodeFunction,
cache: 100, cache: 100,
document: { document: {
id: 'id', id: 'id',

View File

@@ -38,4 +38,3 @@ Hextra 是一个现代、快速且功能齐全的 [Hugo][hugo] 主题,基于 [
[hugo]: https://gohugo.io/ [hugo]: https://gohugo.io/
[flex-search]: https://github.com/nextapps-de/flexsearch [flex-search]: https://github.com/nextapps-de/flexsearch
[tailwind-css]: https://tailwindcss.com/ [tailwind-css]: https://tailwindcss.com/
```

View File

@@ -195,7 +195,7 @@ You can add extra section in the footer by creating a file `layouts/partials/cus
The added section will be added before the copyright section in the footer. The added section will be added before the copyright section in the footer.
You can use [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) and [Hugo template syntax](https://gohugo.io/templates/) to add your own content. You can use [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) and [Hugo template syntax](https://gohugo.io/templates/) to add your own content.
Hugo variables available in the footer section are: `.switchesVisible` and `.copyrightVisible`. Hugo variables available in the footer section are: `.switchesVisible` and `.displayCopyright`.
## Custom Layouts ## Custom Layouts

View File

@@ -333,6 +333,7 @@
"hx-gap-x-1.5", "hx-gap-x-1.5",
"hx-gap-y-2", "hx-gap-y-2",
"hx-grid", "hx-grid",
"hx-grid-cols-1",
"hx-group", "hx-group",
"hx-group/code", "hx-group/code",
"hx-group/copybtn", "hx-group/copybtn",
@@ -545,6 +546,7 @@
"language-options", "language-options",
"language-switcher", "language-switcher",
"last-of-type:hx-mb-0", "last-of-type:hx-mb-0",
"lg:hx-grid-cols-3",
"lntable", "lntable",
"lntd", "lntd",
"ltr:before:hx-left-0", "ltr:before:hx-left-0",
@@ -577,6 +579,7 @@
"max-sm:hx-grid-cols-1", "max-sm:hx-grid-cols-1",
"max-xl:hx-hidden", "max-xl:hx-hidden",
"md:hx-aspect-[1.1/1]", "md:hx-aspect-[1.1/1]",
"md:hx-grid-cols-2",
"md:hx-h-[calc(100vh-var(--navbar-height)-var(--menu-height))]", "md:hx-h-[calc(100vh-var(--navbar-height)-var(--menu-height))]",
"md:hx-hidden", "md:hx-hidden",
"md:hx-inline-block", "md:hx-inline-block",
@@ -640,7 +643,8 @@
"subheading-anchor", "subheading-anchor",
"success-icon", "success-icon",
"theme-toggle", "theme-toggle",
"xl:hx-block" "xl:hx-block",
"xl:hx-grid-cols-4"
], ],
"ids": null "ids": null
} }

View File

@@ -5,7 +5,7 @@ copyright: "© 2024 Hextra Project."
dark: "Meusi" dark: "Meusi"
editThisPage: "Hariri ukurasa huu kwenye GitHub →" editThisPage: "Hariri ukurasa huu kwenye GitHub →"
lastUpdated: "Ilisasishwa mwisho" lastUpdated: "Ilisasishwa mwisho"
light: "Nuru" light: "Meupe"
noResultsFound: "Hakuna matokeo yalipopatikana." noResultsFound: "Hakuna matokeo yalipopatikana."
onThisPage: "Kwenye ukurasa huu" onThisPage: "Kwenye ukurasa huu"
poweredBy: "Inaendeshwa na Hextra" poweredBy: "Inaendeshwa na Hextra"

View File

@@ -0,0 +1,30 @@
{{ define "main" }}
<div class='hx-mx-auto hx-flex {{ partial "utils/page-width" . }}'>
{{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }}
{{ partial "toc.html" (dict "Params" (dict "toc" false)) }}
<article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]">
<main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12">
<br class="hx-mt-1.5 hx-text-sm" />
{{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }}
<div class="hx-mb-16"></div>
<div class="content">
{{ .Content }}
</div>
<div class="hx-grid hx-grid-cols-1 md:hx-grid-cols-2 lg:hx-grid-cols-3 xl:hx-grid-cols-4 hx-gap-4">
{{ range .Data.Terms }}
<div class="hx-w-full">
<a
href="{{ .Page.RelPermalink }}"
title="{{ .Page.LinkTitle }}"
class="hx-font-medium hover:hx-text-primary-600"
>
{{- .Page.LinkTitle -}}
<span class="hx-text-sm hx-text-gray-500">&nbsp;{{ .Count }}</span>
</a>
</div>
{{ end }}
</div>
</main>
</article>
</div>
{{ end }}

View File

@@ -0,0 +1,33 @@
{{ define "main" }}
<div class='hx-mx-auto hx-flex {{ partial "utils/page-width" . }}'>
{{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }}
{{ partial "toc.html" (dict "Params" (dict "toc" false)) }}
<article class="hx-w-full hx-break-words hx-flex hx-min-h-[calc(100vh-var(--navbar-height))] hx-min-w-0 hx-justify-center hx-pb-8 hx-pr-[calc(env(safe-area-inset-right)-1.5rem)]">
<main class="hx-w-full hx-min-w-0 hx-max-w-6xl hx-px-6 hx-pt-4 md:hx-px-12">
<br class="hx-mt-1.5 hx-text-sm" />
{{ if .Title }}<h1 class="hx-text-center hx-mt-2 hx-text-4xl hx-font-bold hx-tracking-tight hx-text-slate-900 dark:hx-text-slate-100">{{ .Title }}</h1>{{ end }}
<div class="hx-mb-16"></div>
<div class="content">
{{ .Content }}
</div>
<div>
{{- range .Pages -}}
<div>
<h3>
<a
style="color: inherit; text-decoration: none;"
class="hx-block hx-font-semibold hx-mt-8 hx-text-2xl"
href="{{ .RelPermalink }}"
title="{{ .LinkTitle }}"
>
{{ .Title }}
</a>
</h3>
<p class="hx-opacity-50 hx-text-sm hx-leading-7">{{ partial "utils/format-date" .Date }}</p>
</div>
{{- end -}}
</div>
</main>
</article>
</div>
{{ end }}

View File

@@ -13,26 +13,19 @@
{{/* Image processing options */}} {{/* Image processing options */}}
{{- $method := .Get "method" | default "Resize" | humanize -}} {{- $method := .Get "method" | default "Resize" | humanize -}}
{{- $options := .Get "options" | default "800x webp q80" -}} {{- $options := .Get "options" | default "800x webp q80" -}}
{{- $process := .Get "process" | default (printf "%s %s" $method $options) -}}
{{- if and $image (not (urls.Parse $image).Scheme) -}} {{- if and $image (not (urls.Parse $image).Scheme) -}}
{{/* Process images in assets */}} {{- with or (.Page.Resources.Get $image) (resources.Get $image) -}}
{{- with resources.Get $image -}} {{/* .Process does not work on svgs */}}
{{- $processed := "" -}} {{- if (not (eq .MediaType.SubType "svg")) -}}
{{- if eq $method "Resize" -}} {{/* Retrieve the $image resource from local or global resources */}}
{{- $processed = (.Resize $options) -}} {{- $processed := .Process $process -}}
{{- else if eq $method "Fit" -}} {{- $width = $processed.Width -}}
{{- $processed = (.Fit $options) -}} {{- $height = $processed.Height -}}
{{- else if eq $method "Fill" -}} {{- $image = $processed.RelPermalink -}}
{{- $processed = (.Fill $options) -}}
{{- else if eq $method "Crop" -}}
{{- $processed = (.Crop $options) -}}
{{- else -}}
{{- errorf "Invalid image processing command: Must be one of Crop, Fit, Fill or Resize." -}}
{{- end -}} {{- end -}}
{{- $width = $processed.Width -}} {{ else }}
{{- $height = $processed.Height -}}
{{- $image = $processed.RelPermalink -}}
{{- else -}}
{{/* Otherwise, use relative link of the image */}} {{/* Otherwise, use relative link of the image */}}
{{- if hasPrefix $image "/" -}} {{- if hasPrefix $image "/" -}}
{{- $image = relURL (strings.TrimPrefix "/" $image) -}} {{- $image = relURL (strings.TrimPrefix "/" $image) -}}