diff --git a/assets/js/lang.js b/assets/js/lang.js index 264a25c..faef307 100644 --- a/assets/js/lang.js +++ b/assets/js/lang.js @@ -7,11 +7,32 @@ const optionsElement = switcher.nextElementSibling; optionsElement.classList.toggle('hx:hidden'); - // Calculate position of language options element + // Calculate the position of a language options element. const switcherRect = switcher.getBoundingClientRect(); - const translateY = switcherRect.top - window.innerHeight - 15; - optionsElement.style.transform = `translate3d(${switcherRect.left}px, ${translateY}px, 0)`; + + // Must be called before optionsElement.clientWidth. optionsElement.style.minWidth = `${Math.max(switcherRect.width, 50)}px`; + + const isOnTop = switcher.dataset.location === 'top'; + const isRTL = document.body.dir === 'rtl' + + // Stuck on the left side of the switcher. + let translateX = switcherRect.left; + + if (isOnTop && !isRTL || !isOnTop && isRTL) { + // Stuck on the right side of the switcher. + translateX = switcherRect.right - optionsElement.clientWidth; + } + + // Stuck on the top of the switcher. + let translateY = switcherRect.top - window.innerHeight - 15; + + if (isOnTop) { + // Stuck on the bottom of the switcher. + translateY = switcherRect.top - window.innerHeight + 180; + } + + optionsElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`; }); }); diff --git a/exampleSite/content/docs/guide/configuration.fa.md b/exampleSite/content/docs/guide/configuration.fa.md index 56dd74b..0d938f6 100644 --- a/exampleSite/content/docs/guide/configuration.fa.md +++ b/exampleSite/content/docs/guide/configuration.fa.md @@ -69,6 +69,15 @@ menu: - name: Theme Toggle params: type: theme-toggle + label: true # optional, default is false + ``` +6. مُبدِّل اللغة + ```yaml + - name: مُبدِّل اللغة + params: + type: language-switch + label: true # optional, default is false + icon: "globe-alt" # optional, default is "translate" ``` این آیتمهای منو را میتوان با تنظیم پارامتر `weight` مرتب کرد. diff --git a/exampleSite/content/docs/guide/configuration.ja.md b/exampleSite/content/docs/guide/configuration.ja.md index b34e1c6..493b0dd 100644 --- a/exampleSite/content/docs/guide/configuration.ja.md +++ b/exampleSite/content/docs/guide/configuration.ja.md @@ -69,6 +69,15 @@ menu: - name: Theme Toggle params: type: theme-toggle + label: true # optional, default is false + ``` +6. 言語スイッチャー + ```yaml + - name: 言語スイッチャー + params: + type: language-switch + label: true # optional, default is false + icon: "globe-alt" # optional, default is "translate" ``` これらのメニュー項目は `weight` パラメータを設定することで並べ替えられます。 diff --git a/exampleSite/content/docs/guide/configuration.md b/exampleSite/content/docs/guide/configuration.md index a452c33..6dcd4b5 100644 --- a/exampleSite/content/docs/guide/configuration.md +++ b/exampleSite/content/docs/guide/configuration.md @@ -69,6 +69,15 @@ There are different types of menu items: - name: Theme Toggle params: type: theme-toggle + label: true # optional, default is false + ``` +6. Language Switcher + ```yaml + - name: Language Switcher + params: + type: language-switch + label: true # optional, default is false + icon: "globe-alt" # optional, default is "translate" ``` These menu items can be sorted by setting the `weight` parameter. diff --git a/exampleSite/content/docs/guide/configuration.zh-cn.md b/exampleSite/content/docs/guide/configuration.zh-cn.md index 02b4f9f..983bbe5 100644 --- a/exampleSite/content/docs/guide/configuration.zh-cn.md +++ b/exampleSite/content/docs/guide/configuration.zh-cn.md @@ -69,6 +69,15 @@ menu: - name: Theme Toggle params: type: theme-toggle + label: true # optional, default is false + ``` +6. 语言切换器 + ```yaml + - name: 语言切换器 + params: + type: language-switch + label: true # optional, default is false + icon: "globe-alt" # optional, default is "translate" ``` 通过设置 `weight` 参数可以调整菜单项的排序。 diff --git a/layouts/_partials/language-switch.html b/layouts/_partials/language-switch.html index 202088e..ff0e9c4 100644 --- a/layouts/_partials/language-switch.html +++ b/layouts/_partials/language-switch.html @@ -1,4 +1,9 @@ {{- $page := .context -}} +{{- $iconName := .iconName | default "globe-alt" -}} +{{- $iconHeight := .iconHeight | default 12 -}} +{{- $location := .location -}} + +{{- $class := .class | default "hx:h-7 hx:px-2 hx:text-xs hx:text-gray-600 hx:transition-colors hx:dark:text-gray-400 hx:hover:bg-gray-100 hx:hover:text-gray-900 hx:dark:hover:bg-primary-100/5 hx:dark:hover:text-gray-50" -}} {{- $grow := .grow -}} {{- $hideLabel := .hideLabel | default false -}} @@ -10,12 +15,13 @@ diff --git a/layouts/_partials/navbar.html b/layouts/_partials/navbar.html index c69b8ae..16c6417 100644 --- a/layouts/_partials/navbar.html +++ b/layouts/_partials/navbar.html @@ -7,6 +7,7 @@ {{ end -}} {{- end -}} +{{- $page := . -}} {{- $iconHeight := 24 -}}