mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-12 13:13:45 +01:00
* Remove icons folder * Create folders for badge, button, and dropdown components * Remove Bootstrap 5 from test * Rename `getBootstrap5Breakpoint` to `getBootstrapBreakpoint` * Cleanup and update BS 5 comments * Move components to the shared folder * Rename `tooltips-bs5` to `tooltip` * Remove `-bs5` suffix * Fix path * Delete BS3 version file * Rename `_form_marketing-bootstrap-5` to `_form_marketing` * Delete BS3 version file * Rename `_contact_general_modal-marketing-bootstrap-5` to `_contact_general_modal-marketing` * Delete BS3 version file * Rename `_contact_modal-marketing-bootstrap-5` to `_contact_modal-marketing` * Delete BS3 version file * Rename `thin-footer-bootstrap-5` to `thin-footer` * Delete BS3 version file * Rename `language-picker-bootstrap-5` to `language-picker` * Rename `fat-footer-react-bootstrap-5` to `fat-footer-react` * Delete BS3 version file * Rename `navbar-marketing-bootstrap-5` to `navbar-marketing` * Rename `navbar-marketing-react-bootstrap-5` to `navbar-marketing-react` * Delete BS3 version file * Rename `layout-website-redesign-cms-bootstrap-5` to `layout-website-redesign-cms` * Source format * Fix path GitOrigin-RevId: cf0f5db7c84cf545c69213dcc271d9ff17fe5db7
95 lines
2.2 KiB
TypeScript
95 lines
2.2 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'
|
|
|
|
function FooterItemLi({
|
|
text,
|
|
translatedText,
|
|
url: href,
|
|
class: className,
|
|
label,
|
|
}: FooterItem) {
|
|
const textToDisplay = translatedText || text
|
|
|
|
if (!href) {
|
|
return <li>{textToDisplay}</li>
|
|
}
|
|
|
|
const linkProps = {
|
|
href,
|
|
className,
|
|
'aria-label': label,
|
|
}
|
|
|
|
return (
|
|
<li>
|
|
<a {...linkProps} dangerouslySetInnerHTML={{ __html: textToDisplay }} />
|
|
</li>
|
|
)
|
|
}
|
|
|
|
function Separator() {
|
|
return (
|
|
<li role="separator" className="text-muted">
|
|
<strong>|</strong>
|
|
</li>
|
|
)
|
|
}
|
|
|
|
function ThinFooter({
|
|
showPoweredBy,
|
|
subdomainLang,
|
|
leftItems,
|
|
rightItems,
|
|
}: FooterMetadata) {
|
|
const showLanguagePicker = Boolean(
|
|
subdomainLang && Object.keys(subdomainLang).length > 1
|
|
)
|
|
|
|
const hasCustomLeftNav = Boolean(leftItems && leftItems.length > 0)
|
|
|
|
return (
|
|
<footer className="site-footer">
|
|
<div className="site-footer-content d-print-none">
|
|
<OLRow>
|
|
<ul className="site-footer-items col-lg-9">
|
|
{showPoweredBy ? (
|
|
<>
|
|
<li>
|
|
{/* year of Server Pro release, static */}© 2025{' '}
|
|
<a href="https://www.overleaf.com/for/enterprises">
|
|
Powered by Overleaf
|
|
</a>
|
|
</li>
|
|
{showLanguagePicker || hasCustomLeftNav ? <Separator /> : null}
|
|
</>
|
|
) : null}
|
|
{showLanguagePicker ? (
|
|
<>
|
|
<li>
|
|
<LanguagePicker showHeader />
|
|
</li>
|
|
{hasCustomLeftNav ? <Separator /> : null}
|
|
</>
|
|
) : null}
|
|
{leftItems?.map(item => (
|
|
<FooterItemLi key={item.text} {...item} />
|
|
))}
|
|
</ul>
|
|
<ul className="site-footer-items col-lg-3 text-end">
|
|
{rightItems?.map(item => (
|
|
<FooterItemLi key={item.text} {...item} />
|
|
))}
|
|
</ul>
|
|
</OLRow>
|
|
</div>
|
|
</footer>
|
|
)
|
|
}
|
|
|
|
export default ThinFooter
|