_includes/resources/author/AuthorsLayout.11ty.tsx (60 lines of code) (raw):

import { ReferenceLayout, ReferenceLayoutProps, } from "../../layouts/ReferenceLayout.11y"; import { Author } from "./AuthorModels"; import { LayoutContext } from "../../../src/models"; export function AuthorsLayout( this: LayoutContext, data: ReferenceLayoutProps, ): JSX.Element { const { content } = data; const authors = this.getResources({ resourceTypes: ["author"], }) as Author[]; authors.sort((a, b) => { const aTitle = a.title.toLowerCase(); const bTitle = b.title.toLowerCase(); return aTitle < bTitle ? -1 : bTitle < aTitle ? 1 : 0; }); const listing = ( <section class="section"> <div class="container"> <div class="columns is-multiline"> {authors.map((author) => { return ( <div class="column is-6 is-4-desktop mb-5"> <div class="is-flex"> <span class="mr-4"> <a href={author.url}> <figure class="image is-1by1 is-128x128"> {author.isGuest && ( <span class={"guest-author-badge"}>Community</span> )} <img src={author.thumbnail} alt={author.title} /> </figure> </a> </span> <div> <a href={author.url} aria-label={`Author`} class="is-size-5 has-text-weight-bold mb-2 title" > {author.title} </a> {author.subtitle && ( <p class="has-text-grey-dark">{author.subtitle}</p> )} </div> </div> </div> ); })} </div> </div> </section> ); return <ReferenceLayout {...data} listing={listing} content={content} />; } export const render = AuthorsLayout;