@@ -40,7 +40,7 @@ export default function Sponsors() {
4040 </ div >
4141 < div className = "sponsors-container" >
4242 < h2 > Acode's Sponsors</ h2 >
43- < div className = "sponsors-list" >
43+ < div className = "sponsors-list" onclick = { handleLinkClick } >
4444 < div className = "tier" >
4545 < div className = "tier-name" >
4646 < span className = "tier-icon titanium" > </ span > Titanium
@@ -159,21 +159,33 @@ function SponsorCard({ name, image, website, tier, tagline }) {
159159 return (
160160 < div
161161 attr-role = "button"
162+ data-website = { website }
162163 className = { `sponsor-card ${ tier } ` }
163- onclick = { ( ) => {
164- if ( ! website ) return ;
165- if ( ! website . startsWith ( "http" ) ) {
166- website = "http://" + website ;
167- }
168- system . openInBrowser ( website ) ;
169- } }
170164 >
171- < div className = "sponsor-avatar" >
172- < img src = { `https://acode.app/sponsor/image/${ image } ` } />
173- </ div >
165+ { image && (
166+ < div className = "sponsor-avatar" >
167+ < img src = { `https://acode.app/sponsor/image/${ image } ` } />
168+ </ div >
169+ ) }
174170 < div className = "sponsor-name" > { name } </ div >
175- < div className = "sponsor-tagline" > { tagline } </ div >
171+ { tagline && < div className = "sponsor-tagline" > { tagline } </ div > }
176172 { website && < small className = "sponsor-website" > { website } </ small > }
177173 </ div >
178174 ) ;
179175}
176+
177+ /**
178+ * Handle link click
179+ * @param {MouseEvent } e
180+ * @returns
181+ */
182+ function handleLinkClick ( e ) {
183+ const target = e . target . closest ( ".sponsor-card" ) ;
184+ if ( ! target ) return ;
185+ const { website } = target . dataset ;
186+ if ( ! website ) return ;
187+ if ( ! website . startsWith ( "http" ) ) {
188+ website = "http://" + website ;
189+ }
190+ system . openInBrowser ( website ) ;
191+ }
0 commit comments