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

feat: lazy load images and heavy resources #5870

Closed
wants to merge 61 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
ddb9aa1
implement lazy loading for feature images
VriaA Sep 3, 2024
7a62efb
implement lazy loading for hompage playground section images
VriaA Sep 3, 2024
1b2c8da
implement lazing loading in `caseStudyBanner`
VriaA Sep 3, 2024
99d1be9
implement lazy loading in footer
VriaA Sep 4, 2024
9e3c428
implement lazy loading for meshmode images
VriaA Sep 4, 2024
8d3dd18
implement lazy loading in meshmap section & Inline-quotes component
VriaA Sep 4, 2024
6220263
implement lazy loading for images in `meshmap-catalog`
VriaA Sep 4, 2024
a987a49
implement lazy loading for the iframe in sign-up section
VriaA Sep 4, 2024
e80ea31
implement lazy loading for meshmap platform images
VriaA Sep 4, 2024
3cb6181
implement lazy loading for Customers component user picture
VriaA Sep 4, 2024
0cccd91
implement lazy loading for social icon images
VriaA Sep 4, 2024
3a3eb1c
Implement lazy loading for feature images on Developer-defined Infras…
VriaA Sep 4, 2024
a767468
implement lazy loading for feature images on Cloud Native Deployments…
VriaA Sep 4, 2024
127e494
Implement lazy loading for feature images on Kubernetes Multi-cluster…
VriaA Sep 4, 2024
929b8cf
implement lazy loading for feature images on GitOps page
VriaA Sep 4, 2024
fbb39ed
implement lazy loading in comparison section of pricing page
VriaA Sep 4, 2024
6d8b057
implement lazy loading in collaborative gitops page
VriaA Sep 4, 2024
71b178f
implement lazy loading for images on products page
VriaA Sep 4, 2024
0c0e6ff
implement lazy loading for images on meshery page
VriaA Sep 4, 2024
fb9b5e4
implement lazy loading for images in the meshery catalog section
VriaA Sep 4, 2024
772d2e3
implement lazy loading for images on cloud native catalog section
VriaA Sep 4, 2024
547da25
implement lazy loading for images in meshmap cta section
VriaA Sep 4, 2024
cf9e720
implement lazy loading for images in playground features section
VriaA Sep 4, 2024
f9ed110
implement lazy loading for svg image in Image component
VriaA Sep 5, 2024
4dd00e7
implement lazy loading for icons on connect with us page
VriaA Sep 5, 2024
411191b
implement lazy loading for images in the community handbook
VriaA Sep 5, 2024
78e9ea2
implement lazy loading for member page social link images
VriaA Sep 5, 2024
c1e4b6c
Implement lazy loading for arrow image in newcomers page
VriaA Sep 5, 2024
d820dd3
Implement lazy loading for images on meshmates page
VriaA Sep 5, 2024
fafaf33
implement lazy loading for sistent project images
VriaA Sep 6, 2024
23bfa36
implement lazy loading for images in ServiceMeshTimeline
VriaA Sep 6, 2024
8261b0f
implement lazy loading for images in Nighthawk project page
VriaA Sep 6, 2024
17172bd
implement lazy loading for images on Image Hub project page
VriaA Sep 6, 2024
eb31d02
implement lazy loading for images on how meshery works page
VriaA Sep 6, 2024
a57eb36
implement lazy loading for images on run meshery page
VriaA Sep 6, 2024
4c705d5
implement lazy loading for images on meshmap page
VriaA Sep 6, 2024
d7cbfa3
implement lazy loading for images on meshery operator page
VriaA Sep 6, 2024
ea78574
implement lazy loading for images on architecture diagram page
VriaA Sep 6, 2024
6677a95
implement lazy loading for `CTA_Bottom` image
VriaA Sep 6, 2024
c2ffabd
implement lazy loading for images on snapshot page
VriaA Sep 6, 2024
d739224
implement lazy loading for images on Cloud Native Workshops page
VriaA Sep 6, 2024
e30a7eb
implement lazy loading for images on brand kits page
VriaA Sep 6, 2024
4adb549
implement lazy loading for icon on how to apply section
VriaA Sep 7, 2024
215f030
implement lazy loading for images on who are we section
VriaA Sep 7, 2024
7d73d71
implement lazy loading for images in partners page
VriaA Sep 7, 2024
1698b42
implement lazy loading for logo on contact form
VriaA Sep 7, 2024
e0533ea
Implement lazy loading for images on individual integrations page
VriaA Sep 7, 2024
8e944b4
implement lazy loading for image in `RelatedPicks`
VriaA Sep 7, 2024
7840dd9
implement lazy loading for images on service mesh interface page
VriaA Sep 7, 2024
0d407dc
implement lazy loading for images in `TwoColLayout`
VriaA Sep 7, 2024
05c611e
implement lazy loading to images in `MeshmapMobileSwiper` section
VriaA Sep 8, 2024
6ddac3b
Merge branch 'layer5io:master' into feat/lazy-load-images
VriaA Sep 8, 2024
7890528
implement lazy loading to images in `CTA_FullWidth`
VriaA Sep 8, 2024
5ef154f
implement lazy loading for images in Press section
VriaA Sep 8, 2024
6a8402d
implement lazy loading for images on service mesh patterns page table
VriaA Sep 8, 2024
d6bd1d6
implement lazy loading for images in `SocialLinks`
VriaA Sep 8, 2024
caa3be5
implement lazy loading for images on performance management page
VriaA Sep 8, 2024
19706eb
implement lazy loading for images on landscape page
VriaA Sep 8, 2024
cf34d61
implement lazy loading for images on learn page
VriaA Sep 8, 2024
6716f03
implement lazy loading for images on workshops page
VriaA Sep 8, 2024
90909e5
implement lazy loading for images on integration page cards
VriaA Sep 8, 2024
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
2 changes: 1 addition & 1 deletion src/collections/careers/how-to-apply.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const PositionApply = () => {
<PositionApplyWrapper>
<div className="apply-now">
<div className="apply">
<img src={job_icon} alt="job-icon" className="pos-logo"/>
<img src={job_icon} alt="job-icon" className="pos-logo" loading="lazy" />
<h5>How to Apply</h5>
</div>
<p>Submit your resume and a short cover letter to:
Expand Down
2 changes: 1 addition & 1 deletion src/components/Call-To-Actions/CTA_Bottom/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const CTA_Bottom = ({ alt, button_text, category, content, external_link, image,
)}
<Button primary title={category ? Categories[category]["Button_Text"] : (button_text ? button_text : "Join Us")} url={category ? Categories[category]["Link"] : (url ? url : defaultURL)} external={category ? Categories[category]["Link_external"] : (external_link ? true : false)} />
</div>
<img src={category ? Categories[category]["Image"] : (image ? image : image_src)} alt={category ? Categories[category]["Image_Alt"] : (alt ? alt : "Alt Text")} />
<img src={category ? Categories[category]["Image"] : (image ? image : image_src)} alt={category ? Categories[category]["Image_Alt"] : (alt ? alt : "Alt Text")} loading="lazy" />
</CTA_BottomWrapper>
);
};
Expand Down
4 changes: 2 additions & 2 deletions src/components/Call-To-Actions/CTA_FullWidth/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ const CTA_FullWidth = ({ alt, button_text, category, content, external_link, ima
<CTA_FullWidthWrapper {...props}>
{ category ? (
<>
<img src={Categories[category]["Image"]} alt={Categories[category]["Image_Alt"]} />
<img src={Categories[category]["Image"]} alt={Categories[category]["Image_Alt"]} loading="lazy" />
<div className="cta-content">
<div>
<h3>{Categories[category]["Heading"]}</h3>
Expand All @@ -113,7 +113,7 @@ const CTA_FullWidth = ({ alt, button_text, category, content, external_link, ima
</>
) : (
<>
<img src={image ? image : image_src} alt={alt ? alt : "Alt Text"} />
<img src={image ? image : image_src} alt={alt ? alt : "Alt Text"} loading="lazy" />
<div className="cta-content">
<div>
<h3>{heading ? heading : defaultHeading}</h3>
Expand Down
6 changes: 3 additions & 3 deletions src/components/Case-study-banner/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,12 +215,12 @@ const CaseStudyBanner = () => {
<h2>Discover how HPE uses Meshery to manage SPIRE</h2>
</div>
<div className="meshery-and-spire">
<img src={MesheryAndSpire} alt="meshery-and-spire" />
<img src={MesheryAndSpire} alt="meshery-and-spire" loading="lazy" />
</div>
</div>
<div className="large-screen">
<div className={`left-img ${hover ? "scale-on-hover" : ""}`} onMouseEnter={handleHover} onMouseLeave={handleLeave}>
<img src={MesheryLogo} alt="meshery-logo" />
<img src={MesheryLogo} alt="meshery-logo" loading="lazy" />
</div>
<div className={`desc ${hover ? "desc-hover" : ""}`} onMouseEnter={handleHover} onMouseLeave={handleLeave}>
<h2>Discover how HPE uses Meshery to manage SPIRE</h2>
Expand All @@ -229,7 +229,7 @@ const CaseStudyBanner = () => {
</div>
</div>
<div className={`right-img ${hover ? "scale-on-hover" : ""}`} onMouseEnter={handleHover} onMouseLeave={handleLeave}>
<img src={SpireLogo} alt="spire-logo" />
<img src={SpireLogo} alt="spire-logo" loading="lazy" />
</div>
</div>
</BannerWrapper>
Expand Down
2 changes: 1 addition & 1 deletion src/components/ContactForm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const ContactForm = () => {
>
<Form className="form" method="post">
<div className="title">
<img className="layer5-logo" src={logo} alt="Layer5 Logo" />
<img className="layer5-logo" src={logo} alt="Layer5 Logo" loading="lazy" />
</div>
<label htmlFor="firstname" className="form-name">
First Name <span className="required-sign">*</span>
Expand Down
2 changes: 1 addition & 1 deletion src/components/FeatureUseCard/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const FeatureUseCard = (props) => {
<Col sm={props.sm} md={props.md} lg={props.lg} className={"display-container"}>
<FeatureUseCardWrapper >
<div className={"image-container"}>
<img src={props.data.image} alt={""}/>
<img src={props.data.image} alt={""} loading="lazy" />
</div>
<div className={"feature-info-container"}>
<p className={"feature-title"}>{props.data.heading}</p>
Expand Down
10 changes: 5 additions & 5 deletions src/components/Features/TwoColLayout.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,29 +66,29 @@ const TwoColLayout = ({ containerRefs, contentRefs }) => {
<Container ref={(el) => (containerRefs.current[0] = el)}>
<ImageWrapper>
<Link to="/solutions/architecture-diagram">
<img src={isDark ? DiagrammingImageDark : DiagrammingImageLight} alt="image" />
<img src={isDark ? DiagrammingImageDark : DiagrammingImageLight} alt="image" loading="lazy" />
</Link>
</ImageWrapper>
<ContentWrapper ref={(el) => (contentRefs.current[0] = el)}>
<h2>Visualize and Simplify Platform Engineering</h2>
<p className="text">Incorporate AWS, GCP and Kubernetes components into Meshery designs for comprehensive and intuitive system mapping, documentation, and orchestration.</p>
<div className="small-card-container">
<Link aria-label="aws" className="small-card" to="/cloud-native-management/generate-aws-architecture-diagram">
<img alt="aws" src={isDark ? AWSLogoDark : AWSLogoLight} width={40} />
<img alt="aws" src={isDark ? AWSLogoDark : AWSLogoLight} width={40} loading="lazy" />
</Link>
<Link aria-label="gcp" className="small-card" to="/cloud-native-management/generate-gcp-architecture-diagram">
<img alt="gcp" src={GCPLogo} width={40} />
<img alt="gcp" src={GCPLogo} width={40} loading="lazy" />
</Link>
<Link aria-label="kubernetes" className="small-card" to="/cloud-native-management/generate-kubernetes-architecture-diagram">
<img alt="kubernetes" src={KubernetesLogo} width={40} />
<img alt="kubernetes" src={KubernetesLogo} width={40} loading="lazy" />
</Link>
</div>
</ContentWrapper>
</Container>
<Container ref={(el) => (containerRefs.current[1] = el)}>
<ImageWrapper>
<Link to="/orchestration-management">
<img src={isDark ? OrchestrationDark : OrchestrationLight} alt="image" />
<img src={isDark ? OrchestrationDark : OrchestrationLight} alt="image" loading="lazy" />
</Link>
</ImageWrapper>
<ContentWrapper ref={(el) => (contentRefs.current[1] = el)}>
Expand Down
16 changes: 9 additions & 7 deletions src/components/Features/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ const Features = (props) => {
: (<div className="small-card-container">
{props.redirectLinkWithImage.map((item) => (
<Link key={item.text} className="small-card" to={item.redirect}>
<img src={item.image} width={40} />
<img src={item.image} width={40} loading="lazy" />
<span>{item.text}</span>
</Link>
))}
Expand All @@ -113,18 +113,19 @@ const Features = (props) => {
alt=""
style={{ position: "absolute" }}
className="waveAnimation"
loading="lazy"
/>
)}
<img src={getPerson(props.cursor * 2)} alt="" />
<img src={getPerson(props.cursor * 2)} alt="" loading="lazy" />
</SvgRandomWrapper>
<SvgRandomWrapper
className="person2"
style={{ display: props.cursor ? "none" : "" }}
>
<img src={getPerson(props.cursor * 2 + 1)} alt="" />
<img src={getPerson(props.cursor * 2 + 1)} alt="" loading="lazy" />
</SvgRandomWrapper>
<Link to={props.redirectLink ? props.redirectLink : props.redirectLinkWithImage[0].redirect}>
<img src={props.imgLink} alt="image" />
<img src={props.imgLink} alt="image" loading="lazy" />
</Link>
</ImageWrapper>
) : (
Expand All @@ -139,18 +140,19 @@ const Features = (props) => {
alt=""
style={{ position: "absolute" }}
className="waveAnimation"
loading="lazy"
/>
)}
<img src={getPerson(props.cursor * 2)} alt="" />
<img src={getPerson(props.cursor * 2)} alt="" loading="lazy" />
</SvgRandomWrapper>
<SvgRandomWrapper
className="person2"
style={{ display: props.cursor ? "none" : "" }}
>
<img src={getPerson(props.cursor * 2 + 1)} alt="" />
<img src={getPerson(props.cursor * 2 + 1)} alt="" loading="lazy" />
</SvgRandomWrapper>
<Link to={props.redirectLink ? props.redirectLink : props.redirectLinkWithImage[0].redirect}>
<img src={props.imgLink} alt="image" />
<img src={props.imgLink} alt="image" loading="lazy" />
</Link>
</ImageWrapperTwo>
)}
Expand Down
2 changes: 1 addition & 1 deletion src/components/Inline-quotes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ const InlineQuotes = ({ person, title, quote,image }) => {
{(image || person || title) && <hr />}
{
image &&
<img src={image}></img>
<img src={image} loading="lazy"></img>
}
<div className="quote-source">
<h5>{person}</h5>
Expand Down
2 changes: 1 addition & 1 deletion src/components/Logo-List/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const LogoList = ({ logos, className }) => {
<ul>
{logos.map((logo) => (
<li key={logo.url}>
<img src={logo.url} alt={logo.alt} />
<img src={logo.url} alt={logo.alt} loading="lazy" />
</li>
))}
</ul>
Expand Down
2 changes: 1 addition & 1 deletion src/components/RelatedPicks/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const Card = ({ title, imgSrc, redirectLink }) => {
<Link to={redirectLink}>
<CardWrapper>
<CardImageContainer>
<Image src={imgSrc} alt="gcp architecture diagram" />
<Image src={imgSrc} alt="gcp architecture diagram" loading="lazy" />
</CardImageContainer>
<CardTitle>{title}</CardTitle>
</CardWrapper>
Expand Down
11 changes: 7 additions & 4 deletions src/components/SocialLinks-Color/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@ const SocialLinksColor = () => {
<Col xs={12}>
<Row className="social_icons">
<a href="https://discuss.layer5.io" target="_blank" rel="noreferrer">
<img height="30px" src={forum_icon} alt="forum" />
<img height="30px" src={forum_icon} alt="forum" loading="lazy" />
</a>
<a
className="mail_icon"
href="mailto:[email protected]"
target="_blank"
rel="noreferrer"
>
<img height="30px" src={mail_icon} alt="mail" />
<img height="30px" src={mail_icon} alt="mail" loading="lazy" />
</a>
<a href="https://slack.layer5.io/" target="_blank" rel="noreferrer">
<img className="slack" height="30px" src={slack_icon} alt="slack" />
<img className="slack" height="30px" src={slack_icon} alt="slack" loading="lazy" />
</a>
<a
href="https://twitter.com/layer5"
Expand All @@ -43,7 +43,7 @@ const SocialLinksColor = () => {
rel="noreferrer"
className="github"
>
<img height="30px" src={github_icon} alt="github" />
<img height="30px" src={github_icon} alt="github" loading="lazy" />
</a>
<a
href="https://www.linkedin.com/company/layer5"
Expand All @@ -55,6 +55,7 @@ const SocialLinksColor = () => {
height="30px"
src={linkedin_icon}
alt="linkedin"
loading="lazy"
/>
</a>
<a
Expand All @@ -68,6 +69,7 @@ const SocialLinksColor = () => {
height="30px"
src={youtube_icon}
alt="youtube"
loading="lazy"
/>
</a>
<a
Expand All @@ -81,6 +83,7 @@ const SocialLinksColor = () => {
height="30px"
src={docker_icon}
alt="docker"
loading="lazy"
/>
</a>
</Row>
Expand Down
12 changes: 6 additions & 6 deletions src/components/SocialLinks/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,43 +19,43 @@ const SocialLinks = () => {
target="_blank"
rel="noreferrer"
>
<img height="40 px" src={mail_icon} alt="mail" />
<img height="40 px" src={mail_icon} alt="mail" loading="lazy" />
</a>
<a
href="https://slack.layer5.io/"
target="_blank" rel="noreferrer"
>
<img className="slack" height="40 px" src={slack_icon} alt="slack" />
<img className="slack" height="40 px" src={slack_icon} alt="slack" loading="lazy" />
</a>
<a
href="https://twitter.com/layer5"
target="_blank"
rel="noreferrer"
>
<img className="twitter" height="40 px" src={twitter_icon} alt="twitter" />
<img className="twitter" height="40 px" src={twitter_icon} alt="twitter" loading="lazy" />
</a>
<a
href="https://github.com/layer5io"
target="_blank"
rel="noreferrer"
>
<img className="github" height="40 px" src={github_icon} alt="github" />
<img className="github" height="40 px" src={github_icon} alt="github" loading="lazy" />
</a>
<a
className="youtube_icon"
href="https://www.youtube.com/c/Layer5io?sub_confirmation=1"
target="_blank"
rel="noreferrer"
>
<img className="youtube" height="40 px" src={youtube_icon} alt="youtube" />
<img className="youtube" height="40 px" src={youtube_icon} alt="youtube" loading="lazy" />
</a>
<a
className="docker_icon"
href="https://hub.docker.com/u/layer5/"
target="_blank"
rel="noreferrer"
>
<img className="docker" height="40 px" src={docker_icon} alt="docker" />
<img className="docker" height="40 px" src={docker_icon} alt="docker" loading="lazy" />
</a>
</Row>
</Col>
Expand Down
2 changes: 1 addition & 1 deletion src/components/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const Image = ({ childImageSharp, extension, publicURL, alt, ...rest }) => {
if (!childImageSharp && extension === "svg") {
return (
<div className="old-gatsby-image-wrapper">
<img src={publicURL} alt={alt} />
<img src={publicURL} alt={alt} loading="lazy" />
</div>
);
}
Expand Down
6 changes: 3 additions & 3 deletions src/components/service-mesh-patterns-Table/Table.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ const Table = () => {
<span {...column.getSortByToggleProps()}>
{column.isSorted
? column.isSortedDesc
? <img className="service-mesh-icon" src={downicon} alt="down icon" />
: <img className="service-mesh-icon" src={upicon} alt="up icon" />
: <img className="service-mesh-icon" src={alphaicon} alt="alpha icon" />}
? <img className="service-mesh-icon" src={downicon} alt="down icon" loading="lazy" />
: <img className="service-mesh-icon" src={upicon} alt="up icon" loading="lazy" />
: <img className="service-mesh-icon" src={alphaicon} alt="alpha icon" loading="lazy" />}
</span>
: <>
</>}
Expand Down
12 changes: 6 additions & 6 deletions src/components/specs/data-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,31 +49,31 @@ const DataCard = () => {
<Col className="col-1" sm={6} lg={6}>
<ul>
<li>
<img src={List_Icon} alt="Performance Icon" />
<img src={List_Icon} alt="Performance Icon" loading="lazy"/>
<h5>Extensive library of integrations</h5>
</li>
<li>
<img src={List_Icon} alt="Configuration Icon" />
<img src={List_Icon} alt="Configuration Icon" loading="lazy"/>
<h5>Infrastructure orchestration</h5>
</li>
<li>
<img src={List_Icon} alt="Performance Icon" />
<img src={List_Icon} alt="Performance Icon" loading="lazy"/>
<h5>Multi-player editing</h5>
</li>
</ul>
</Col>
<Col className="col-1" sm={6} lg={6}>
<ul>
<li>
<img src={List_Icon} alt="Performance Icon" />
<img src={List_Icon} alt="Performance Icon" loading="lazy"/>
<h5>Ready-to-use templates</h5>
</li>
<li>
<img src={List_Icon} alt="Configuration Icon" />
<img src={List_Icon} alt="Configuration Icon" loading="lazy"/>
<h5>Visual drag & drop</h5>
</li>
<li>
<img src={List_Icon} alt="Performance Icon" />
<img src={List_Icon} alt="Performance Icon" loading="lazy"/>
<h5>Operate with No Code</h5>
</li>
</ul>
Expand Down
6 changes: 3 additions & 3 deletions src/reusecore/Blockquote/Blockquote-image/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const Customers = (props) => {
<section className="bq-section">
<div className="type-one-wrapper type-one-wrapper-boxed">
<div className="bq-quote type-one-quote">
<div className="type-one-quote-userpic"><img src={props.image}></img></div>
<div className="type-one-quote-userpic"><img src={props.image} loading="lazy"></img></div>
<div className="type-one-quote-qmark">
&#10077;
</div>
Expand Down Expand Up @@ -41,7 +41,7 @@ const Customers = (props) => {
</div>
</div>

<div className="type-two-quote-userpic"><img src={props.image}></img></div>
<div className="type-two-quote-userpic"><img src={props.image} loading="lazy"></img></div>

<div className="type-two-quote-base">
<blockquote className="type-two-quote-text">
Expand Down Expand Up @@ -71,7 +71,7 @@ const Customers = (props) => {
{props.quote}
</blockquote>
<div className="type-three-quote-meta">
<div className="type-three-quote-userpic"><img src={props.image}></img></div>
<div className="type-three-quote-userpic"><img src={props.image} loading="lazy"></img></div>
<div className="type-three-quote-meta-info">
<div className="type-three-quote-author"><cite>{props.person ? props.person : ""}</cite></div>
<div className="type-three-quote-source"><span>{props.title ? props.title : ""}</span></div>
Expand Down
Loading
Loading