Files
Verso/services/web/frontend/js/shared/components/footer/thin-footer.tsx
T
claude 319ccc32ee
Build and Deploy Verso / deploy (push) Successful in 18m46s
feat: add language picker to logged-in footer and editor settings
- Rewrites LanguagePicker to use availableLanguages from ol-footer meta
  instead of subdomainLang (which is always empty in single-domain setup)
- Passes availableLanguages through layout-react.pug → ol-footer meta so
  React footer picks it up
- Adds InterfaceLanguageSetting component to the editor settings modal
  ("Spelling and language" tab) for use when no footer is present
- Adds interface_language key to all five locale files (en/fr/de/es/it)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 12:22:55 +00:00

121 lines
2.9 KiB
TypeScript

import type {
FooterItem,
FooterMetadata,
} from '@/shared/components/types/footer-metadata'
import OLRow from '@/shared/components/ol/ol-row'
import LanguagePicker from '@/shared/components/language-picker'
import React from 'react'
import { useTranslation } from 'react-i18next'
function FooterItemLi({
text,
translatedText,
url: href,
class: className,
label,
}: FooterItem) {
const textToDisplay = translatedText || text
if (!href) {
return <li dangerouslySetInnerHTML={{ __html: textToDisplay }} />
}
const linkProps = {
href,
className,
'aria-label': label,
}
return (
<li>
<a {...linkProps}>{textToDisplay}</a>
</li>
)
}
function Separator() {
return (
<li role="separator" className="text-muted">
<strong>|</strong>
</li>
)
}
function ThinFooter({
availableLanguages,
leftItems,
rightItems,
}: FooterMetadata) {
const { t } = useTranslation()
const showLanguagePicker = (availableLanguages?.length ?? 0) > 1
return (
<footer className="site-footer">
<div className="site-footer-content d-print-none">
<OLRow>
<ul className="site-footer-items col-lg-9">
<li>
© {new Date().getFullYear()}{' '}
<a
href="https://alocoq.fr"
target="_blank"
rel="noopener noreferrer"
>
Aloïs Coquillard
</a>
</li>
<Separator />
<li>
{t('built_on')}{' '}
<a
href="https://github.com/overleaf/overleaf"
target="_blank"
rel="noopener noreferrer"
>
Overleaf
</a>
</li>
{showLanguagePicker ? (
<>
<Separator />
<li>
<LanguagePicker showHeader />
</li>
</>
) : null}
{leftItems?.map(item => (
<FooterItemLi key={item.text} {...item} />
))}
</ul>
<ul className="site-footer-items col-lg-3 text-end">
<li>
<a
href="https://git.alocoq.fr/alois/verso/src/branch/main/LICENSE"
target="_blank"
rel="noopener noreferrer"
>
{t('agpl_licence')}
</a>
</li>
<Separator />
<li>
<a
href="https://git.alocoq.fr/alois/verso"
target="_blank"
rel="noopener noreferrer"
>
{t('source_code')}
</a>
</li>
{rightItems?.map(item => (
<FooterItemLi key={item.text} {...item} />
))}
</ul>
</OLRow>
</div>
</footer>
)
}
export default ThinFooter