{{!< default}} {{!-- The tag above means: insert everything in this file into the {body} of the default.hbs template --}} <header class="site-header outer"> <div class="inner"> {{> "site-nav"}} </div> </header> {{!-- Everything inside the #post tags pulls data from the post --}} {{#post}} <main id="site-main" class="site-main outer"> <div class="inner"> <article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}"> <header class="post-full-header"> <section class="post-full-meta"> <time class="post-full-meta-date" datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMMM YYYY"}}</time> {{#primary_tag}} <span class="date-divider">/</span> <a href="{{url}}">{{name}}</a> {{/primary_tag}} </section> <h1 class="post-full-title">{{title}}</h1> </header> {{#if feature_image}} <figure class="post-full-image"> {{!-- This is a responsive image, it loads different sizes depending on device https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}} <img srcset="{{img_url feature_image size="s"}} 300w, {{img_url feature_image size="m"}} 600w, {{img_url feature_image size="l"}} 1000w, {{img_url feature_image size="xl"}} 2000w" sizes="(max-width: 800px) 400px, (max-width: 1170px) 700px, 1400px" src="{{img_url feature_image size="xl"}}" alt="{{title}}" /> </figure> {{/if}} <section class="post-full-content"> <div class="post-content"> {{content}} </div> </section> {{!-- Email subscribe form at the bottom of the page --}} {{#if @labs.subscribers}} <section class="subscribe-form"> <h3 class="subscribe-form-title">Subscribe to {{@site.title}}</h3> <p>Get the latest posts delivered right to your inbox</p> {{subscribe_form placeholder="youremail@example.com"}} </section> {{/if}} <footer class="post-full-footer"> {{!-- There are two options for how we display the byline/author-info. If the post has more than one author, we load a specific template from includes/byline-multiple.hbs, otherwise, we just use the default byline. --}} {{#has author="count:>1"}} {{> "byline-multiple"}} {{else}} {{> "byline-single"}} {{/has}} </footer> {{!-- <section class="post-full-comments"> If you want to embed comments, this is a good place to do it! </section> --}} </article> </div> </main> {{!-- Links to Previous/Next posts --}} <aside class="read-next outer"> <div class="inner"> <div class="read-next-feed"> {{#if primary_tag}} {{#get "posts" filter="tags:{{primary_tag.slug}}+id:-{{id}}" limit="3" as |related_posts|}} {{#if related_posts}} <article class="read-next-card" {{#if ../primary_tag.feature_image}} style="background-image: url({{img_url ../primary_tag.feature_image size="m"}})" {{else}} {{#if @site.cover_image}} style="background-image: url({{img_url @site.cover_image size="m"}})"{{/if}} {{/if}} > <header class="read-next-card-header"> <small class="read-next-card-header-sitetitle">— {{@site.title}} —</small> {{#../primary_tag}} <h3 class="read-next-card-header-title"><a href="{{url}}">{{name}}</a></h3> {{/../primary_tag}} </header> <div class="read-next-divider">{{> "icons/infinity"}}</div> <div class="read-next-card-content"> <ul> {{#foreach related_posts}} <li><a href="{{url}}">{{title}}</a></li> {{/foreach}} </ul> </div> <footer class="read-next-card-footer"> <a href="{{#../primary_tag}}{{url}}{{/../primary_tag}}">{{plural meta.pagination.total empty='No posts' singular='% post' plural='See all % posts'}} →</a> </footer> </article> {{/if}} {{/get}} {{/if}} {{!-- If there's a next post, display it using the same markup included from - partials/post-card.hbs --}} {{#next_post}} {{> "post-card"}} {{/next_post}} {{!-- If there's a previous post, display it using the same markup included from - partials/post-card.hbs --}} {{#prev_post}} {{> "post-card"}} {{/prev_post}} </div> </div> </aside> {{!-- Floating header which appears on-scroll, included from includes/floating-header.hbs --}} {{> floating-header}} {{/post}} {{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}} {{#contentFor "scripts"}} <script> // NOTE: Scroll performance is poor in Safari // - this appears to be due to the events firing much more slowly in Safari. // Dropping the scroll event and using only a raf loop results in smoother // scrolling but continuous processing even when not scrolling $(document).ready(function () { // Start fitVids var $postContent = $(".post-full-content"); $postContent.fitVids(); // End fitVids var progressBar = document.querySelector('#reading-progress'); var header = document.querySelector('.floating-header'); var title = document.querySelector('.post-full-title'); var lastScrollY = window.scrollY; var lastWindowHeight = window.innerHeight; var lastDocumentHeight = $(document).height(); var ticking = false; function onScroll() { lastScrollY = window.scrollY; requestTick(); } function onResize() { lastWindowHeight = window.innerHeight; lastDocumentHeight = $(document).height(); requestTick(); } function requestTick() { if (!ticking) { requestAnimationFrame(update); } ticking = true; } function update() { var trigger = title.getBoundingClientRect().top + window.scrollY; var triggerOffset = title.offsetHeight + 35; var progressMax = lastDocumentHeight - lastWindowHeight; // show/hide floating header if (lastScrollY >= trigger + triggerOffset) { header.classList.add('floating-active'); } else { header.classList.remove('floating-active'); } progressBar.setAttribute('max', progressMax); progressBar.setAttribute('value', lastScrollY); ticking = false; } window.addEventListener('scroll', onScroll, {passive: true}); window.addEventListener('resize', onResize, false); update(); }); </script> {{/contentFor}}