Skip to content

Commit

Permalink
Footer image intial concept
Browse files Browse the repository at this point in the history
  • Loading branch information
jemgillam committed Dec 16, 2024
1 parent 18edfa6 commit 77cc16c
Show file tree
Hide file tree
Showing 13 changed files with 126,436 additions and 0 deletions.
11 changes: 11 additions & 0 deletions utils/website/src/theme/Footer/Copyright/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import React from 'react';
export default function FooterCopyright({copyright}) {
return (
<div
className="footer__copyright"
// Developer provided the HTML, so assume it's safe.
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{__html: copyright}}
/>
);
}
26 changes: 26 additions & 0 deletions utils/website/src/theme/Footer/Layout/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import React from "react";
import clsx from "clsx";
import styles from "../index.module.css";
export default function FooterLayout({ style, links, logo, copyright }) {
return (
<div>
<div className={styles.footerImage}></div>

<footer
className={clsx("footer", {
"footer--dark": style === "dark",
})}
>
<div className="container container-fluid">
{links}
{(logo || copyright) && (
<div className="footer__bottom text--center">
{logo && <div className="margin-bottom--sm">{logo}</div>}
{copyright}
</div>
)}
</div>
</footer>
</div>
);
}
25 changes: 25 additions & 0 deletions utils/website/src/theme/Footer/LinkItem/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import React from 'react';
import Link from '@docusaurus/Link';
import useBaseUrl from '@docusaurus/useBaseUrl';
import isInternalUrl from '@docusaurus/isInternalUrl';
import IconExternalLink from '@theme/Icon/ExternalLink';
export default function FooterLinkItem({item}) {
const {to, href, label, prependBaseUrlToHref, ...props} = item;
const toUrl = useBaseUrl(to);
const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
return (
<Link
className="footer__link-item"
{...(href
? {
href: prependBaseUrlToHref ? normalizedHref : href,
}
: {
to: toUrl,
})}
{...props}>
{label}
{href && !isInternalUrl(href) && <IconExternalLink />}
</Link>
);
}
37 changes: 37 additions & 0 deletions utils/website/src/theme/Footer/Links/MultiColumn/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import React from 'react';
import LinkItem from '@theme/Footer/LinkItem';
function ColumnLinkItem({item}) {
return item.html ? (
<li
className="footer__item"
// Developer provided the HTML, so assume it's safe.
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{__html: item.html}}
/>
) : (
<li key={item.href ?? item.to} className="footer__item">
<LinkItem item={item} />
</li>
);
}
function Column({column}) {
return (
<div className="col footer__col">
<div className="footer__title">{column.title}</div>
<ul className="footer__items clean-list">
{column.items.map((item, i) => (
<ColumnLinkItem key={i} item={item} />
))}
</ul>
</div>
);
}
export default function FooterLinksMultiColumn({columns}) {
return (
<div className="row footer__links">
{columns.map((column, i) => (
<Column key={i} column={column} />
))}
</div>
);
}
31 changes: 31 additions & 0 deletions utils/website/src/theme/Footer/Links/Simple/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import React from 'react';
import LinkItem from '@theme/Footer/LinkItem';
function Separator() {
return <span className="footer__link-separator">·</span>;
}
function SimpleLinkItem({item}) {
return item.html ? (
<span
className="footer__link-item"
// Developer provided the HTML, so assume it's safe.
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{__html: item.html}}
/>
) : (
<LinkItem item={item} />
);
}
export default function FooterLinksSimple({links}) {
return (
<div className="footer__links text--center">
<div className="footer__links">
{links.map((item, i) => (
<React.Fragment key={i}>
<SimpleLinkItem item={item} />
{links.length !== i + 1 && <Separator />}
</React.Fragment>
))}
</div>
</div>
);
}
11 changes: 11 additions & 0 deletions utils/website/src/theme/Footer/Links/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import React from 'react';
import {isMultiColumnFooterLinks} from '@docusaurus/theme-common';
import FooterLinksMultiColumn from '@theme/Footer/Links/MultiColumn';
import FooterLinksSimple from '@theme/Footer/Links/Simple';
export default function FooterLinks({links}) {
return isMultiColumnFooterLinks(links) ? (
<FooterLinksMultiColumn columns={links} />
) : (
<FooterLinksSimple links={links} />
);
}
35 changes: 35 additions & 0 deletions utils/website/src/theme/Footer/Logo/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import React from 'react';
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import {useBaseUrlUtils} from '@docusaurus/useBaseUrl';
import ThemedImage from '@theme/ThemedImage';
import styles from './styles.module.css';
function LogoImage({logo}) {
const {withBaseUrl} = useBaseUrlUtils();
const sources = {
light: withBaseUrl(logo.src),
dark: withBaseUrl(logo.srcDark ?? logo.src),
};
return (
<ThemedImage
className={clsx('footer__logo', logo.className)}
alt={logo.alt}
sources={sources}
width={logo.width}
height={logo.height}
style={logo.style}
/>
);
}
export default function FooterLogo({logo}) {
return logo.href ? (
<Link
href={logo.href}
className={styles.footerLogoLink}
target={logo.target}>
<LogoImage logo={logo} />
</Link>
) : (
<LogoImage logo={logo} />
);
}
9 changes: 9 additions & 0 deletions utils/website/src/theme/Footer/Logo/styles.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.footerLogoLink {
opacity: 0.5;
transition: opacity var(--ifm-transition-fast)
var(--ifm-transition-timing-default);
}

.footerLogoLink:hover {
opacity: 1;
}
22 changes: 22 additions & 0 deletions utils/website/src/theme/Footer/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import React from 'react';
import {useThemeConfig} from '@docusaurus/theme-common';
import FooterLinks from '@theme/Footer/Links';
import FooterLogo from '@theme/Footer/Logo';
import FooterCopyright from '@theme/Footer/Copyright';
import FooterLayout from '@theme/Footer/Layout';
function Footer() {
const {footer} = useThemeConfig();
if (!footer) {
return null;
}
const {copyright, links, logo, style} = footer;
return (
<FooterLayout
style={style}
links={links && links.length > 0 && <FooterLinks links={links} />}
logo={logo && <FooterLogo logo={logo} />}
copyright={copyright && <FooterCopyright copyright={copyright} />}
/>
);
}
export default React.memo(Footer);
10 changes: 10 additions & 0 deletions utils/website/src/theme/Footer/index.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.footerImage {
background-position: center center;
background-repeat: repeat;
background-image: url("/img/trees.svg");
height: 200px;
}
Loading

0 comments on commit 77cc16c

Please sign in to comment.