Skip to content

Moved JDKs page from docs to separate card-style page with details pages #93

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,11 @@ const config: Config = {
],
],

plugins: ['docusaurus-plugin-sass', './src/plugins/google-fonts.ts'],
plugins: [
'docusaurus-plugin-sass',
'./src/plugins/google-fonts.ts',
'./src/plugins/jdks-details.ts',
],

themeConfig: {
metadata: [
Expand Down
3 changes: 1 addition & 2 deletions preprocessing/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import generateJDKs from './jdks';
import generateSDKs from './sdks';

async function run() {
try {
await Promise.all([generateJDKs(), generateSDKs()]);
await generateSDKs();
} catch (err) {
console.error(err);
}
Expand Down
63 changes: 0 additions & 63 deletions preprocessing/src/jdks/index.ts

This file was deleted.

1 change: 0 additions & 1 deletion sidebars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const sidebars: SidebarsConfig = {
'install',
'usage',
'vendors',
{ type: 'doc', label: 'JDKs', id: 'jdks' },
{ type: 'doc', label: 'SDKs', id: 'sdks' },
],
};
Expand Down
85 changes: 85 additions & 0 deletions src/components/plugins-pages/JDKDetailsPage/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { Redirect, useLocation } from '@docusaurus/router';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Link from '@docusaurus/Link';
import CodeBlock from '@theme/CodeBlock';
import Heading from '@theme/Heading';
import Layout from '@theme/Layout';
import PageCarbonAds from '@site/src/components/sections/PageCarbonAds';
import clsx from 'clsx';
import styles from './styles.module.scss';

import jdks from '@site/src/data/jdks';
import { getNameFromPath } from '@site/src/lib/utils';

export default function JDKDetailsPage() {
const { siteConfig } = useDocusaurusContext();
const location = useLocation();
const JDKId = getNameFromPath(location.pathname, siteConfig.baseUrl);

if (!JDKId.length) {
return <Redirect to="/jdks/" />;
}

const JDK = jdks.find((item) => item.id === JDKId);

if (!JDK) {
return <Redirect to="/404/" />;
}

return (
<Layout title={`${JDK.distribution} (${JDK.vendor})`}>
<PageCarbonAds />

<div className={clsx('container', styles.page)}>
<Heading as="h1">{`${JDK.distribution} (${JDK.vendor})`}</Heading>

<div className={styles.pageContent}>
<div>
<p>{JDK.description}</p>

<div>
<Heading as="h2">Installation</Heading>

<CodeBlock language="shell">
sdk install java x.y.z-{JDK.id}
</CodeBlock>
</div>
</div>

<div className={clsx('card', styles.card)}>
<div className="card__header">
<div className="card__title">Details</div>
</div>

<div className={clsx('card__body', styles.cardBody)}>
<Link href={JDK.url}>Website</Link>

{JDK.os?.icons && (
<div className={styles.cardIcons}>
{JDK.os.icons.map((OsIcon, idx) => (
<OsIcon
key={`jdk-os-icon-${JDK.id}-${idx}`}
className={styles.cardOsIcon}
/>
))}
</div>
)}

{JDK.architecture?.long && (
<div>
<div className={styles.cardSubtitle}>Architectures:</div>

<ul>
{JDK.architecture?.long.map((arch, idx) => (
<li key={`arch-${JDK.id}-${idx}`}>{arch}</li>
))}
</ul>
</div>
)}
</div>
</div>
</div>
</div>
</Layout>
);
}
48 changes: 48 additions & 0 deletions src/components/plugins-pages/JDKDetailsPage/styles.module.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
@use '@site/src/scss/breakpoints' as *;

.page {
margin-top: 4rem;
padding-top: 5rem;
padding-bottom: 5rem;

&Content {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
}

.card {
height: fit-content;

&Subtitle {
margin-bottom: 0.5rem;
}

&Body {
display: flex;
flex-direction: column;
gap: 0.75rem;
}

&Icons {
display: flex;
align-items: center;
gap: 0.5rem;
}

&OsIcon {
width: 1.25rem;
height: 1.25rem;
}
}

@media (min-width: $lg-screen) {
.page {
margin-top: 0;

&Content {
grid-template-columns: 1fr 250px;
}
}
}
44 changes: 44 additions & 0 deletions src/components/sections/JDKList/JDKCard/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import Link from '@docusaurus/Link';
import clsx from 'clsx';
import styles from './styles.module.scss';

import { JDK } from '@site/src/types/jdk';

type Props = {
item: JDK;
};

export default function JDKCard({ item }: Props) {
return (
<Link className={clsx('card', styles.card)} href={`/jdks/${item.id}`}>
<div className="card__header">
<h2 className="card__title">
{item.distribution} ({item.vendor})
</h2>
</div>

<div className="card__body">
<div className={styles.cardBody}>
{item.os?.icons && (
<div className={styles.cardSide}>
{item.os.icons.map((OsIcon, idx) => (
<OsIcon
key={`jdk-os-icon-${item.id}-${idx}`}
className={styles.cardOsIcon}
/>
))}
</div>
)}

{item.architecture?.short && (
<div className={styles.cardSide}>
<span className={styles.cardArch}>
{item.architecture.short.join(' / ')}
</span>
</div>
)}
</div>
</div>
</Link>
);
}
30 changes: 30 additions & 0 deletions src/components/sections/JDKList/JDKCard/styles.module.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
.card {
color: inherit;

&:hover {
text-decoration: none;
color: inherit;
}

&Body {
display: flex;
align-items: center;
justify-content: space-between;
}

&Side {
display: flex;
align-items: center;
gap: 0.75rem;
}

&OsIcon {
width: 1.25rem;
height: 1.25rem;
}

&Arch {
font-size: 0.625rem;
font-weight: 700;
}
}
52 changes: 52 additions & 0 deletions src/components/sections/JDKList/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import Admonition from '@theme/Admonition';
import Heading from '@theme/Heading';
import Link from '@docusaurus/Link';
import JDKCard from './JDKCard';
import styles from './styles.module.scss';

import jdks from '@site/src/data/jdks';

export default function JDKList() {
return (
<section className={styles.section}>
<div className="container">
<Heading className={styles.sectionTitle} as="h1">
JDK Distributions
</Heading>

<Admonition
className={styles.sectionNote}
type="info"
title={
<>
Why is <Link href="/jdks/tem">Temurin</Link> the default JDK?
</>
}
>
<p>
We've chosen Eclipse Temurin as our default JDK because it's widely
recognized as the de facto standard for OpenJDK distributions.
Trusted for its reliability, stability, and performance, Temurin is
ideal for production-grade development. We ensure our default
version aligns with the latest stable release, so you're equipped
with the best tools for your JVM projects.
</p>

<p>
Looking ahead, we plan to give you the flexibility to track the
latest JDK releases from individual vendors, such as Oracle or
Amazon Corretto. While this isn't available yet, we're working to
make it easier for you to stay on top of the specific distributions
you rely on.
</p>
</Admonition>

<div className={styles.sectionList}>
{jdks.map((JDK) => (
<JDKCard item={JDK} />
))}
</div>
</div>
</section>
);
}
Loading