Skip to content
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

Web release 3 #655

Open
wants to merge 59 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
7c5c331
Standardize List Display with Card Component (#433) (#460)
Michael-Obele Mar 11, 2024
3c3c5f6
feat: added Faq section (#534)
Akshaybagai52 Mar 16, 2024
46a922b
Fix faq
benjagm Mar 20, 2024
ee6bfdf
Added Case Studies page in Overview Section (#473)
TamannaVerma99 Mar 20, 2024
023a3c0
feat: added resource section (#509)
Akshaybagai52 Mar 20, 2024
8cb617e
Feat: Add the Newsletter feature to the website. (#489)
ayushnau Mar 20, 2024
8a32db3
Added welcome page (#566)
TamannaVerma99 Mar 21, 2024
3647457
Added Use-cases page (#589)
VivekJaiswal18 Apr 8, 2024
2cda0bc
Change docs link
benjagm Apr 8, 2024
f45b548
fix: spacing between buttons (#575)
Akshaybagai52 Apr 8, 2024
a22a799
community-page (#646)
officeneerajsaini Apr 15, 2024
abbcc0a
Merge branch 'main' into web-release-3
benjagm Apr 15, 2024
fb98b60
Update Sidebar.tsx
benjagm Apr 15, 2024
3958b6d
Add resources file
benjagm Apr 15, 2024
c8599e0
Update Sidebar.tsx
benjagm Apr 15, 2024
373f64e
Update case-studies.json
benjagm Apr 15, 2024
f7e6fd5
Text colours for dark theme
benjagm Apr 15, 2024
7995844
New version of the implementers page
benjagm Apr 19, 2024
c04d577
Feat: Replacing Axios to fs fetching in resources page (#657)
DhairyaMajmudar Apr 23, 2024
886ee85
Improve Case Studies and Use Cases welcome messages
benjagm May 20, 2024
ee91a74
adding codeowners
DhairyaMajmudar May 21, 2024
69a1eae
Fixing bugs and adding back lost files
DhairyaMajmudar May 22, 2024
989ded0
fix sidebar dropdown for FAQ
benjagm May 22, 2024
290e4de
community page major changes and faq bug fix
DhairyaMajmudar May 22, 2024
515f95c
community page bug fixes and responsive issues in several pages
DhairyaMajmudar May 23, 2024
d8ef58c
Update index.page.tsx (#684)
kwennB May 23, 2024
3991da0
Feat: Removing resources and newletter from web-release-3 branch (#698)
DhairyaMajmudar May 23, 2024
15a1ca8
case-studies bug fix and hover delay fix
DhairyaMajmudar May 23, 2024
2927056
adding ts comment
DhairyaMajmudar May 23, 2024
56a54d3
Small corrections
benjagm May 23, 2024
52c7c5a
Update blogs link
benjagm May 23, 2024
d66d2d5
Ambassadors button aligned to the left
benjagm May 23, 2024
0b7946c
Feat: Fixing responsive bugs from community page
DhairyaMajmudar May 26, 2024
6caf9c0
community page bug fixes
DhairyaMajmudar May 26, 2024
2ad9a42
Added uses cases texts
benjagm May 27, 2024
3de5ecb
Last changes to use-cases
benjagm May 27, 2024
71a8630
Add html to the use cases definition
benjagm May 27, 2024
7049fc7
feat:adding html parser for use-cases page
DhairyaMajmudar May 27, 2024
c400a71
removing links from images
DhairyaMajmudar May 28, 2024
f155ea9
improved FAQ description text (#709)
kwennB May 28, 2024
e8dc9bc
Improvement for case studies
benjagm May 28, 2024
2954b0c
Merge branch 'web-release-3' of https://github.com/json-schema-org/we…
benjagm May 28, 2024
a00c819
merge confilts
DhairyaMajmudar May 28, 2024
7b13f8e
removing merge conflicts
DhairyaMajmudar May 28, 2024
c3f2a06
Fix:community card gap
DhairyaMajmudar May 28, 2024
5c4acaa
Align with main branch
benjagm May 30, 2024
0898f7b
Align with main branch
benjagm May 30, 2024
3af14b5
Align with main branch
benjagm May 30, 2024
647d52c
Update pages/overview/what-is-jsonschema.md
DhairyaMajmudar May 30, 2024
ae04e43
Remove welcome data file
benjagm May 30, 2024
46e4dcd
Merge branch 'main' into web-release-3
benjagm Jun 1, 2024
1f56a4a
Move welcome outside overview section
benjagm Jun 1, 2024
73aec68
Change welcome text
benjagm Jun 1, 2024
b1e68ad
Feat: Replaced axios with fetch
DhairyaMajmudar Jun 1, 2024
4a53960
moved path to function
DhairyaMajmudar Jun 2, 2024
0b0fb2d
Updating community filters
DhairyaMajmudar Jun 2, 2024
6b51f02
Update pages/community/index.page.tsx
DhairyaMajmudar Jun 2, 2024
0662ac9
Fix the menu links
benjagm Jun 2, 2024
c3478f4
Update the JSON Schema calendar link
benjagm Jun 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
38 changes: 0 additions & 38 deletions .github/workflows/greet_on_first_merge.yml
Relequestual marked this conversation as resolved.
Show resolved Hide resolved

This file was deleted.

94 changes: 94 additions & 0 deletions components/Accordion.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import React, { useState, useEffect } from 'react';
import { useRouter } from 'next/router';

interface AccordionItem {
question: string;
answer: string;
id: number;
}

interface AccordionProps {
items: AccordionItem[];
}

const Accordion: React.FC<AccordionProps> = ({ items }) => {
const [activeIndex, setActiveIndex] = useState<number | null>(null);
const router = useRouter();

const handleToggle = (index: number) => {
setActiveIndex((prevIndex) => (prevIndex === index ? null : index));
};

useEffect(() => {
const hash = router.asPath.split('#')[1];
if (hash) {
const id = parseInt(hash, 10);
const index = items.findIndex((item) => item.id === id);
if (index !== -1) {
setActiveIndex(index);

setTimeout(() => {
const element = document.getElementById(hash);
if (element) {
const navbarHeight = 150;
const offset = element.offsetTop - navbarHeight;
window.scrollTo({ top: offset, behavior: 'smooth' });
}
}, 0);
}
}
}, [items, router.asPath]);

const handleLinkClick = (id: number) => {
const index = items.findIndex((item) => item.id === id);
setActiveIndex(index);

const newUrl = `#${id}`;
router.push(newUrl, undefined, { shallow: true });
};

return (
<div>
{items.map((item, index) => (
<div
key={item.id || index}
className={`overflow-hidden transition-max-height border-t-2 ${
activeIndex === index ? 'max-h-96' : 'max-h-20'
} ${index === items.length - 1 ? 'border-b-2' : ''}`}
>
<div className='flex justify-between p-4 pl-2 cursor-pointer'>
<div className='text-[20px]'>
<a
href={`#${item.id}`}
onClick={(e) => {
e.preventDefault();
handleLinkClick(item.id);
}}
>
{item.question}
</a>
</div>
<div
className={`transform transition-transform duration-200 max-h-7 text-[20px] ${
activeIndex === index ? 'rotate-45' : ''
}`}
onClick={() => handleToggle(index)}
>
&#43;
</div>
</div>
{activeIndex === index && (
<div
id={`${item.id}`}
className='p-2 text-gray-500 dark:text-slate-200 pb-4'
>
{item.answer}
</div>
)}
</div>
))}
</div>
);
};

export default Accordion;
70 changes: 20 additions & 50 deletions components/CarbonsAds.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
import React, { useEffect, useRef } from 'react';
import { useRouter } from 'next/router';

declare global {
interface Window {
_carbonads: {
refresh: () => void;
reload: (where: string, force_serve: boolean) => void;
remove: (el: HTMLElement) => void;
srv: () => void;
};
}
}

type Props = {
className?: string;
variant?: 'sidebar';
Expand All @@ -22,41 +11,28 @@ function CarbonAds({ className, variant = 'sidebar' }: Props) {
const router = useRouter();

useEffect(() => {
const mobileMediaQuery = window.matchMedia('(max-width: 1023px)');
if (!mobileMediaQuery.matches) {
const hasCarbonAds = document.querySelector('#carbonads');
// Check if another ad is present to refresh
if (hasCarbonAds) {
window._carbonads.refresh();
return;
} else {
// Check if the script is present (ad is not yet present) so that duplicate requests are not made to carbon ads
const hasCarbonAdsScript = document.querySelector('#_carbonads_js');
if (!hasCarbonAdsScript) {
const carbonAdsScript = document.createElement('script');
carbonAdsScript.id = '_carbonads_js';
carbonAdsScript.type = 'text/javascript';
carbonAdsScript.async = true;
document
.querySelector('#carbonads-container')
?.appendChild(carbonAdsScript);
carbonAdsScript.src = `//cdn.carbonads.com/carbon.js?serve=CE7I627Y&placement=json-schemaorg&rnd=${Math.random()}`;
}
}
const hasCarbonAdsScript = document.querySelector('#_carbonads_js');
if (!hasCarbonAdsScript) {
const carbonAdsScript = document.createElement('script');
carbonAdsScript.id = '_carbonads_js';
carbonAdsScript.type = 'text/javascript';
carbonAdsScript.async = true;
document
.querySelector('#carbonads-container')
?.appendChild(carbonAdsScript);
carbonAdsScript.src = `//cdn.carbonads.com/carbon.js?serve=CE7I627Y&placement=json-schemaorg&rnd=${Math.random()}`;
}

const existingStyleSheet = document.querySelector('#_carbonads_css');
if (existingStyleSheet) {
existingStyleSheet.innerHTML = CarbonAds.stylesheet[variant];
} else {
const carbonAdsStyleSheet = document.createElement('style');
carbonAdsStyleSheet.id = '_carbonads_css';
carbonAdsStyleSheet.innerHTML = CarbonAds.stylesheet[variant];
document
.querySelector('#carbonads-container')
?.appendChild(carbonAdsStyleSheet);
}
const existingStyleSheet = document.querySelector('#_carbonads_css');
if (existingStyleSheet) {
existingStyleSheet.innerHTML = CarbonAds.stylesheet[variant];
} else {
(carbonRef.current as HTMLElement).style.display = 'none';
const carbonAdsStyleSheet = document.createElement('style');
carbonAdsStyleSheet.id = '_carbonads_css';
carbonAdsStyleSheet.innerHTML = CarbonAds.stylesheet[variant];
document
.querySelector('#carbonads-container')
?.appendChild(carbonAdsStyleSheet);
}
}, [router.asPath]);

Expand Down Expand Up @@ -115,12 +91,6 @@ CarbonAds.stylesheet = {
margin-top: 4px;
color: rgb(100 116 139);
}

@media (max-width: 1023px) {
#carbonads-container {
display: none;
}
}
`,
};

Expand Down
113 changes: 113 additions & 0 deletions components/Card.tsx
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cards are the Call to Action in many cases. Having "read more" hidden until hover is not good. Users need to know it's clickable.

In many cases, we want to make the CTA more prominent, such as on the case studies page.

Consider a comparison with that of CNCF. Their case study CTAs are clear and strong.
We don't need to copy them with the layout, but our design should cause people to be drawn to the CTA.

Screenshot 2024-05-30 at 12 27 58

Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import React from 'react';
import Link from 'next/link';
import TextTruncate from 'react-text-truncate';
interface CardProps {
title: string;
body: string;
icon?: string;
link?: string;
image?: string;
extended?: boolean;
headerSize?: 'small' | 'medium' | 'large';
bodyTextSize?: 'small' | 'medium' | 'large';
}

const CardBody = ({
title,
body,
icon,
link,
image,
extended,
headerSize,
bodyTextSize,
}: CardProps) => {
const headerSizeClasses: Record<string, string> = {
small: 'text-[0.9rem]',
medium: 'text-[1.3rem]',
large: 'text-[2rem]',
};
const bodyTextSizeClasses: Record<string, string> = {
small: 'text-[0.85rem]',
medium: 'text-[1rem]',
large: 'text-[1.5rem]',
};
return (
<div className='group relative h-full w-full rounded-lg border border-gray-200 bg-white p-6 px-12 shadow-3xl dark:shadow-2xl dark:shadow-slate-900 transition-colors ease-in-out hover:bg-slate-100 dark:bg-slate-800 hover:dark:bg-slate-900/30'>
<div className='flex justify-center '>
{image && <img src={image} className='h-32 p-2' />}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is better to use Next.js prebuilt Image Component. It does some optimization under the hood.

https://nextjs.org/learn-pages-router/seo/improve/images
https://nextjs.org/docs/pages/building-your-application/optimizing/images

</div>
<div className='flex flex-row items-start mb-6'>
{icon && (
<span className='mr-6 flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-lg border bg-blue-200 px-3 text-gray-900 dark:text-white'>
<img src={icon} alt={title} className='h-full w-full' />
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to use Next.js prebuilt Image Component.

</span>
)}
<p
className={`mb-1 mt-1 items-center font-bold text-gray-900 dark:text-white ${headerSizeClasses[headerSize || 'medium']}`}
>
{title}
</p>
</div>
<hr className='mb-4 mt-3.5 h-px border-0 bg-gray-400' />
<p
className={`mb-8 text-black mt-5 dark:text-white ${bodyTextSizeClasses[bodyTextSize || 'medium']} `}
>
{extended && <span dangerouslySetInnerHTML={{ __html: body }} />}
{!extended && <TextTruncate element='span' line={3} text={body} />}
</p>
{link && (
<p className='absolute bottom-3 right-5 font-medium opacity-0 transition-opacity delay-150 ease-in-out group-hover:opacity-100 text-black dark:text-white '>
Read More
</p>
)}
</div>
);
};

const Card: React.FC<CardProps> = ({
title,
body,
icon,
link,
image,
extended,
headerSize,
bodyTextSize,
}) => {
return (
<>
{link ? (
<Link href={link}>
<CardBody
{...{
title,
body,
icon,
link,
image,
extended,
headerSize,
bodyTextSize,
}}
/>
</Link>
) : (
<CardBody
{...{
title,
body,
icon,
link,
image,
extended,
headerSize,
bodyTextSize,
}}
/>
)}
</>
);
};

export default Card;
2 changes: 1 addition & 1 deletion components/DarkModeToggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export default function DarkModeToggle() {
return (
<button
onClick={toggleDarkMode}
className='dark-mode-toggle rounded-md dark:hover:bg-gray-700 p-1.5 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none transition duration-150'
className='dark-mode-toggle min-w-[2rem] rounded-md dark:hover:bg-gray-700 md:p-1.5 pr-2 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none transition duration-150'
disabled={!isClickable}
>
<img src={img} alt='Dark Mode' width={25} height={25} />
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to use Next.js prebuilt Image Component.

Expand Down
18 changes: 18 additions & 0 deletions components/Faq.tsx
benjagm marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import React from 'react';
import faqData from '../data/faq.json';
import Accordion from '~/components/Accordion';

export default function Faq({ category }: { category: string }) {
const filteredFAQs = faqData.filter((item) => item.category === category);

return (
<section>
<div className='max-w-screen-md mx-auto p-8 px-0 ml-0'>
<h2 className='text-2xl font-bold text-[24px] mb-4'>
{category.toUpperCase()}
</h2>
<Accordion items={filteredFAQs} />
</div>
</section>
);
}