diff options
Diffstat (limited to 'templates/blog_article.html')
-rwxr-xr-x | templates/blog_article.html | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/templates/blog_article.html b/templates/blog_article.html new file mode 100755 index 0000000..6f96847 --- /dev/null +++ b/templates/blog_article.html @@ -0,0 +1,206 @@ +{% extends 'base.html' %} + +{% block title %} + {{ page.title }} | Garage blog +{% endblock %} + +{% block content %} +<section id="blogpost-section" class="section"> + <div class="mx-auto max-w-7xl"> + <div class="grid grid-cols-5 gap-x-12"> + <div class="{% if page.extra.toc %}col-span-4{% else %}col-span-full{% endif %}"> + <article class="box my-12"> + <div class="flex flex-col bg-gray-50"> + <div class="flex flex-col border-l-4 border-garage-orange py-2 pl-4 relative"> + <h1 class="title leading-10 text-3xl text-garage-orange font-semibold"> + {{ page.title }} + </h1> + {% if page.description %} + <p class="subtitle my-2 text-gray-600 italic text-sm">{{ page.description }}</p> + {% endif %} + <a id="back-to-blog-posts" class="absolute top-0 -left-12" href="/blog/" + title="Back to blog posts"> + <div class="w-10 overflow-hidden inline-block group"> + <div + class="h-16 bg-garage-gray group-hover:bg-garage-orange transform -rotate-45 origin-top-right"> + </div> + </div> + </a> + </div> + <div + class="w-full text-garage-gray text-sm grid grid-cols-1 md:grid-cols-2 bg-gradient-to-r from-gray-100 to-transparent p-3 border-l-4 border-gray-300"> + <div class="flex items-center justify-start md:justify-start"> + {{ macros::page_publish_metadata(page=page) }} + </div> + <div class="flex items-center justify-start md:justify-end"> + {{ macros::page_content_metadata(page=page) }} + </div> + <div> + {% if page.taxonomies.categories %} + {{ macros::render_categories(categories=page.taxonomies.categories) }} + {% endif %} + </div> + <div> + {% if page.taxonomies.tags %} + {{ macros::render_tags(tags=page.taxonomies.tags) }} + {% endif %} + </div> + </div> + </div> + <div class="page-content max-w-4xl text-justify mt-12 px-5 md:px-12"> + {{ page.content | safe }} + </div> + </article> + </div> + {% if page.extra.toc %} + <div + class="col-span-1 my-12 is-hidden-mobile bg-gradient-to-b from-yellow-100 to-transparent rounded shadow-inner"> + <aside class="menu" style="position:sticky;top:0"> + <p class="bg-yellow-200 uppercase text-xs font-light p-1 text-center text-gray-600">Contents</p> + <ul class="menu-list p-2 text-gray-800"> + {% for h1 in page.toc %} + <li class="flex flex-col h-full"> + <a id="link-{{h1.id}}" + class="toc text-sm text-gray-600 bg-transparent hover:text-orange-600 font-semibold {% if loop.first %}is-active{% endif %}" + href="{{ h1.permalink | safe }}"> + {{ h1.title }} + </a> + {% if h1.children %} + <ul> + {% for h2 in h1.children %} + <li class="hover:text-orange-600 border-l border-orange-400"> + <a id="link-{{h2.id}}" class="toc pl-2 text-xs" href="{{ h2.permalink | safe }}"> + {{ h2.title }} + </a> + </li> + {% endfor %} + </ul> + {% endif %} + </li> + {% endfor %} + </ul> + </aside> + </div> + {% endif %} + </div> + </div> +</section> +{% endblock %} + +{% block pagination %} +{% if page.earlier or page.later or page.lighter or page.heavier %} +<section class="w-full"> + <div class="container py-20"> + <div class="mx-auto max-w-4xl"> + <div class="column is-8"> + <nav class="flex space-x-8 items-center justify-center"> + {% if page.later %} + <div> + <a class="flex items-center space-x-1 hover:text-garage-orange font-semibold text-gray-800" + href="{{ page.later.permalink }}"> + <span class="icon mr-2"> + <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" + d="M7 16l-4-4m0 0l4-4m-4 4h18"></path> + </svg> + </span> + <span>{{ page.later.title }}</span> + </a> + </div> + {% endif %} {% if page.earlier %} + <div> + <a class="flex items-center space-x-1 hover:text-garage-orange font-semibold text-gray-800" + href="{{ page.earlier.permalink }}"> + {{ page.earlier.title }}<span class="icon ml-2"> + <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" + d="M17 8l4 4m0 0l-4 4m4-4H3"></path> + </svg> + </span> + </a> + </div> + {% endif %} {% if page.heavier %} + <div> + <a class="flex items-center space-x-1 hover:text-garage-orange font-semibold text-gray-800" + href="{{ page.heavier.permalink }}"> + <span class="icon mr-2"> + <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" + d="M7 16l-4-4m0 0l4-4m-4 4h18"></path> + </svg> + </span> + <span>{{ page.heavier.title }}</span> + </a> + </div> + {% endif %} {% if page.lighter %} + <div> + <a class="flex items-center space-x-1 hover:text-garage-orange font-semibold text-gray-800" + href="{{ page.lighter.permalink }}"> + {{ page.lighter.title }}<span class="icon ml-2"> + <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" + d="M17 8l4 4m0 0l-4 4m4-4H3"></path> + </svg> + </span> + </a> + </div> + {% endif %} + </nav> + </div> + </div> + </div> +</section> +{% endif %} +{% endblock %} + +{% block custom_js %} +{% if page.extra.toc %} +<script type="text/javascript"> + const menuBarHeight = document.querySelector("nav.navbar").clientHeight; + const tocItems = document.querySelectorAll(".toc"); + const navSections = new Array(tocItems.length); + + tocItems.forEach((el, i) => { + let id = el.getAttribute("id").substring(5); + navSections[i] = document.getElementById(id); + }) + + function isVisible(tocIndex) { + const current = navSections[tocIndex]; + const next = tocIndex < tocItems.length - 1 ? navSections[tocIndex + 1] + : document.querySelectorAll("section.section").item(1); + + const c = current.getBoundingClientRect(); + const n = next.getBoundingClientRect(); + const h = (window.innerHeight || document.documentElement.clientHeight); + + return (c.top <= h) && (n.top - menuBarHeight >= 0); + } + + function activateIfVisible() { + for (b = true, i = 0; i < tocItems.length; i++) { + if (b && isVisible(i)) { + tocItems[i].classList.add('is-active'); + b = false; + } else + tocItems[i].classList.remove('is-active'); + } + } + + var isTicking = null; + window.addEventListener('scroll', () => { + if (!isTicking) { + window.requestAnimationFrame(() => { + activateIfVisible(); + isTicking = false; + }); + isTicking = true; + } + }, false); +</script> +{% endif %} +{% endblock %} |