{{!< 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" style="background-image: url({{feature_image}})">
            </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 {{@blog.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({{../primary_tag.feature_image}})"
                    {{else}}
                        {{#if @blog.cover_image}}
                            style="background-image: url({{@blog.cover_image}})"{{/if}}
                    {{/if}}
                >
                    <header class="read-next-card-header">
                        <small class="read-next-card-header-sitetitle">&mdash; {{@blog.title}} &mdash;</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}}
