web/wp-content/themes/mozilla-builders/templates/pages/article.twig (93 lines of code) (raw):

{% extends "layouts/base.twig" %} {% block pageBody %} {% include "components/articles/toppers/topper--" ~ (post.topper_type|default('text_only')) ~ ".twig" %} <article x-headings> {% include "components/articles/byline.twig" %} <div class="md:pt-12 grid grid-site centered-page"> <div class="col-span-full md:hidden border-b border-content max-md:pt-2.5 max-md:pb-2"> <div class="text-sm flex gap-6 justify-between items-baseline"> <p class="uppercase leading-tight">Share</p> {% include "components/articles/share-tools.twig" %} </div> </div> {% if post.authors is not empty %} <div class="col-span-full flex flex-col gap-4 pt-6 md:hidden"> {% for author in post.authors %} <div class="flex items-start gap-4"> <div class="relative size-20 aspect-square overflow-hidden [&>*]:absolute [&>*]:top-1/2 [&>*]:-translate-y-1/2 [&>*]:w-full"> {% if author.thumbnail.id %} {% include "components/lazy-img.twig" with { img: get_image(author.thumbnail), aspectRatio: 1 } %} {% endif %} </div> <p class="flex-1 text-sm leading-tight uppercase"> <a href="{{ author.link }}" class="underline">{{ author.name }}</a> {% if author.short_bio %}is {{ author.short_bio }}{% endif %} </p> </div> {% endfor %} </div> {% endif %} <div class="col-start-center col-span-full md:col-span-18 lg:col-span-12 2xl:col-span-10 max-md:mt-8 md:mb-8 sticky top-wp-admin-bar pt-4 z-50" x-accordion @click.outside="openItems.clear()" hidden :hidden="headings.length === 0"> <div x-accordion:item class="relative w-full bg-main border border-content"> <div class="flex px-4 py-3 gap-3 sticky top-0 bg-main z-10"> <div class="flex-2"> <p class="text-xs uppercase">In this article</p> </div> <div class="flex-2 overflow-hidden"> <p aria-hidden="true" class="text-xs" x-text="(activeIndex + 1).toString().padStart(2, '0')"></p> <p class="text-sm uppercase font-bold truncate" x-text="headings[activeIndex].text"></p> </div> <button x-accordion:trigger data-state="closed" class="group before:absolute before:inset-0"> <svg class="size-4 group-data-open:hidden" aria-hidden="true" viewBox="0 0 24 24"> <use href="#plus" /> </svg> <svg class="size-4 group-data-closed:hidden" aria-hidden="true" viewBox="0 0 24 24"> <use href="#minus" /> </svg> <span class="sr-only">View all headings</span> </button> <div class="absolute inset-x-4 -bottom-px border-t border-content"></div> </div> <div x-accordion:content data-state="closed" class="data-closed:hidden absolute -inset-x-px bottom-0 translate-y-full"> <div class="flex px-4 py-3 gap-3 bg-main border-x border-b border-content"> <div class="flex-2"></div> <nav class="flex-2"> <ul class="flex flex-col gap-1"> <template x-for="(heading, index) in headings"> <li class="flex relative gap-3"> <p aria-hidden="true" class="text-sm" x-text="(index + 1).toString().padStart(2, '0')"></p> <a class="text-sm upppercase" :href="heading.href" :data-state="activeIndex === index ? 'active' : 'inactive'" @click="openItems.clear()" > <span :class="activeIndex === index ? 'font-bold' : ''" x-text="heading.text"></span> </a> </li> </template> </ul> </nav> <div class="size-4"></div> </div> </div> </div> </div> <div x-headings:content x-hang-punc class="max-md:pt-12 col-span-full gutenberg article {{ post.has_lede_paragraph ? 'lede' }} grid grid-cols-site gap-x-grid-site-gutter centered-page"> {{ post.content }} </div> <div class="max-md:hidden md:col-span-4 lg:col-span-3 3xl:col-span-2 md:col-start-end md:sticky md:bottom-4 text-sm md:h-0"> <div class="max-md:flex max-md:gap-6 max-md:justify-between md:-translate-y-full"> <p class="uppercase leading-tight text-right">Share</p> {% include "components/articles/share-tools.twig" %} </div> </div> </div> {% include "components/articles/article-footer.twig" %} {% include 'components/article-recirculation.twig' with { posts: post.related_articles } %} </article> {% endblock %}