unfortunately this is the change to the new zola based website

This commit is contained in:
Chris Cochrun 2025-04-13 14:33:35 -05:00
parent 308c4fb9c5
commit fa74bbe4b3
866 changed files with 3737 additions and 118270 deletions

15
templates/404.html Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,20 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-10 px-4">
<h1 class="text-2xl text-bold">
Categories
</h1>
<p class="text-bold text-xl mt-4">{{ terms | length }} categories</p>
<div class="flex flex-wrap sm:flex-row flex-col sm:gap-x-7 gap-y-5 mt-6">
{% for category in terms %}
<a href="{{ category.permalink | safe }}" class="flex items-center space-x-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="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
</svg>
<span class="text-bold">{{category.name}} <sup>{{ category.pages | length }}</sup></span>
</a>
{% endfor %}
</div>
{% endblock content %}

View file

@ -0,0 +1,167 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-10 px-4">
<h1 class="text-2xl text-bold mb-6">
Category : {{ term.name }}
</h1>
<div class="flex flex-col gap-y-6 w-full sm:w-2/3">
{% if paginator %}
{% set pages = paginator.pages %}
{% else %}
{% set pages = term.pages %}
{% endif %}
{% for page in pages %}
<div class="border border-2 border-gray-200 dark:border-black rounded-xl p-5 shadow-2xl transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800">
<div class="flex flex-col py-2 justify-center">
<h2 class="text-2xl text-bold"><a href='{{ page.permalink }}'>{{ page.title }}</a></h2>
<p class="text-bold">{{ page.description }}</p>
</div>
<!-- Read time and word count -->
<div class="flex flex-wrap py-2">
<div class="flex items-center w-1/3">
<div class="flex space-x-3 text-gray-900 dark:text-gray-400">
<span class="flex">
<!-- Icon clock -->
<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="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span class="ml-1">{{ page.reading_time }} min</span>
</span>
<span class="flex">
<!-- Icon pencil -->
<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="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path>
</svg>
<span class="ml-1">{{ page.word_count }} words</span>
</span>
</div>
</div>
<!-- Author and publish date -->
<div class="flex w-2/3 space-x-3 text-gray-900 dark:text-gray-400 justify-end">
<span class="flex items-center">
<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="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
<span class="ml-1"><time datetime="{{ page.date }}">Published on {{ page.date | date(format='%B %d, %Y') }}</time></span>
</span>
<span class="flex items-center">
<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="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path>
</svg>
{% if page.extra.author.name %}
<span class="ml-1">{{ page.extra.author.name }}</span>
{% if page.extra.author.avatar %}
<img class="rounded-full h-9 w-9 ml-1" src="{{ page.extra.author.avatar }}"{% if page.extra.author.avatar_alt %} alt="{{ page.extra.author.avatar_alt }}"{% endif %}>
{% endif %}
{% else %}
<span class="ml-1">{{ config.extra.default_author.name }}</span>
<img class="rounded-full h-9 w-9 ml-1" src="{{ config.extra.default_author.avatar }}" alt="{{ config.extra.default_author.avatar_alt }}">
{% endif %}
</span>
</div>
</div>
<!-- Summary -->
<div class="text-bold mt-2">
{{ page.summary | safe }}
<a class="flex py-2" href='{{ page.permalink }}'>
Read More
<svg class="w-6 h-6 ml-1" 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="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
<!-- Categories and Tags -->
<div class="flex flex-wrap py-2">
<div class="w-2/3">
{% if page.taxonomies.categories %}
<p>
Categories:
{% for category in page.taxonomies.categories %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='categories', name=category) }}">
<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="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
</svg>
<span class="pl-1">{{category}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
<div class="w-1/3">
{% if page.taxonomies.tags %}
<p>
Tags:
{% for tag in page.taxonomies.tags %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='tags', name=tag) }}">
<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 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
</svg>
<span class="pl-1">{{tag}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock content %}
{% block pagination %}
{% if paginator.previous or paginator.next %}
<div class="max-w-7xl px-2 sm:px-6 lg:px-8 mx-auto w-full">
<div class="flex items-center justify-between">
{% if not paginator.previous %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
<svg class="w-7 h-7 mr-2" 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>
Previous
</span>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.previous }}" {% if not paginator.previous %}disabled{% endif %}>
<svg class="w-7 h-7 mr-2" 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>
Previous
</a>
{% endif %}
<ul class="flex gap-x-2">
{% for pager in range(start=1, end=paginator.number_pagers+1) %}
<li class="">
<a class="p-4 border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600 hover:text-white rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 {% if paginator.current_index == pager %}bg-blue-500{% else %}bg-gray-200 dark:bg-gray-800{% endif %}" href="{{ paginator.base_url }}{{pager}}" aria-label="Page {{pager}}">
{{pager}}
</a>
</li>
{% endfor %}
</ul>
{% if not paginator.next %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
Next Page
<svg class="w-7 h-7 ml-2" 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>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.next }}">
Next page
<svg class="w-7 h-7 ml-2" 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>
</a>
{% endif %}
</div>
</div>
{% endif %}
{% endblock %}

81
templates/index.html Normal file
View file

@ -0,0 +1,81 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-16">
<h1 class="text-xl text-bold">
{{ config.extra.index.title }}
</h1>
<img class="rounded-full h-40 w-40" src="{{ config.extra.index.image }}" alt="{{ config.extra.index.image_alt }}">
<div class="flex flex-wrap space-x-4 mt-7">
{% if config.extra.social.codeberg %}
<a href="{{config.extra.social.codeberg}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 24 24" fill="none" stroke="currentColor">
<path d="M11.955.49A12 12 0 0 0 0 12.49a12 12 0 0 0 1.832 6.373L11.838 5.928a.187.14 0 0 1 .324 0l10.006 12.935A12 12 0 0 0 24 12.49a12 12 0 0 0-12-12 12 12 0 0 0-.045 0zm.375 6.467 4.416 16.553a12 12 0 0 0 5.137-4.213z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.github %}
<a href="{{config.extra.social.github}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 24 24" fill="none" stroke="currentColor">
<path d="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.5,4.7,2.2,8.9,6.3,10.5C8.7,21.4,9,21.2,9,20.8v-1.6c0,0-0.4,0.1-0.9,0.1 c-1.4,0-2-1.2-2.1-1.9c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1 c0.4,0,0.7-0.1,0.9-0.2c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6c0-0.4,0-0.9,0.2-1.3 C7.2,6.1,7.4,6,7.5,6c0,0,0.1,0,0.1,0C8.1,6.1,9.1,6.4,10,7.3C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3c0.9-0.9,2-1.2,2.5-1.3 c0,0,0.1,0,0.1,0c0.2,0,0.3,0.1,0.4,0.3C17,6.7,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4c0.7,0.8,1.2,1.8,1.2,3c0,2.2-1.7,3.5-4,4 c0.6,0.5,1,1.4,1,2.3v2.6c0,0.3,0.3,0.6,0.7,0.5c3.7-1.5,6.3-5.1,6.3-9.3C22,6.1,16.9,1.4,10.9,2.1z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.gitlab %}
<a href="{{config.extra.social.gitlab}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 50 50" fill="currentColor" stroke="none">
<path d="M 38.011719 4 C 37.574219 3.996094 37.183594 4.273438 37.046875 4.691406 L 32.074219 20 L 17.925781 20 L 12.953125 4.691406 C 12.820313 4.289063 12.449219 4.011719 12.023438 4 C 11.597656 3.992188 11.214844 4.25 11.0625 4.648438 L 5.070313 20.640625 C 5.066406 20.640625 5.066406 20.644531 5.0625 20.648438 L 2.0625 28.648438 C 1.90625 29.070313 2.046875 29.542969 2.414063 29.808594 L 24.40625 45.800781 L 24.410156 45.808594 C 24.414063 45.808594 24.414063 45.808594 24.414063 45.8125 C 24.425781 45.820313 24.441406 45.828125 24.453125 45.835938 C 24.46875 45.84375 24.480469 45.855469 24.496094 45.863281 C 24.5 45.863281 24.5 45.867188 24.503906 45.867188 C 24.503906 45.867188 24.507813 45.871094 24.511719 45.871094 C 24.515625 45.875 24.519531 45.878906 24.527344 45.878906 C 24.53125 45.882813 24.539063 45.886719 24.542969 45.890625 C 24.5625 45.898438 24.585938 45.910156 24.609375 45.917969 C 24.609375 45.917969 24.609375 45.917969 24.609375 45.921875 C 24.632813 45.929688 24.65625 45.9375 24.675781 45.945313 C 24.679688 45.945313 24.679688 45.945313 24.683594 45.949219 C 24.699219 45.953125 24.714844 45.957031 24.734375 45.964844 C 24.742188 45.964844 24.75 45.96875 24.761719 45.96875 C 24.761719 45.972656 24.761719 45.972656 24.761719 45.96875 C 24.78125 45.976563 24.800781 45.980469 24.820313 45.984375 C 24.847656 45.988281 24.871094 45.992188 24.898438 45.996094 C 24.9375 45.996094 24.980469 46 25.019531 46 C 25.058594 45.996094 25.09375 45.996094 25.128906 45.988281 C 25.144531 45.988281 25.15625 45.988281 25.171875 45.984375 C 25.171875 45.984375 25.175781 45.984375 25.179688 45.984375 C 25.1875 45.980469 25.191406 45.980469 25.199219 45.980469 C 25.203125 45.980469 25.207031 45.976563 25.214844 45.976563 C 25.222656 45.972656 25.234375 45.972656 25.242188 45.96875 C 25.257813 45.964844 25.269531 45.960938 25.28125 45.957031 C 25.289063 45.957031 25.292969 45.957031 25.296875 45.953125 C 25.300781 45.953125 25.304688 45.953125 25.308594 45.953125 C 25.324219 45.945313 25.34375 45.9375 25.359375 45.933594 C 25.378906 45.925781 25.394531 45.917969 25.410156 45.910156 C 25.414063 45.910156 25.414063 45.910156 25.417969 45.90625 C 25.421875 45.90625 25.425781 45.90625 25.429688 45.902344 C 25.4375 45.898438 25.445313 45.894531 25.453125 45.890625 C 25.476563 45.878906 25.496094 45.867188 25.515625 45.855469 C 25.523438 45.851563 25.527344 45.847656 25.53125 45.84375 C 25.535156 45.84375 25.539063 45.839844 25.542969 45.839844 C 25.558594 45.828125 25.574219 45.820313 25.589844 45.808594 L 25.597656 45.796875 L 47.589844 29.808594 C 47.953125 29.542969 48.09375 29.070313 47.9375 28.648438 L 44.945313 20.675781 C 44.941406 20.667969 44.9375 20.65625 44.9375 20.648438 L 38.9375 4.648438 C 38.789063 4.261719 38.425781 4.003906 38.011719 4 Z M 11.933594 8.027344 L 15.824219 20 L 7.445313 20 Z M 38.066406 8.027344 L 42.558594 20 L 34.175781 20 Z M 8.066406 22 L 16.472656 22 L 22.328125 40.015625 Z M 18.578125 22 L 31.421875 22 L 25 41.765625 Z M 33.527344 22 L 41.933594 22 L 27.671875 40.015625 Z M 6.3125 23.007813 L 19.6875 39.902344 L 4.203125 28.640625 Z M 43.6875 23.007813 L 45.796875 28.640625 L 30.3125 39.902344 Z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.twitter %}
<a href="{{config.extra.social.twitter}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 30 30" fill="none" stroke="currentColor">
<path d="M28,6.937c-0.957,0.425-1.985,0.711-3.064,0.84c1.102-0.66,1.947-1.705,2.345-2.951c-1.03,0.611-2.172,1.055-3.388,1.295 c-0.973-1.037-2.359-1.685-3.893-1.685c-2.946,0-5.334,2.389-5.334,5.334c0,0.418,0.048,0.826,0.138,1.215 c-4.433-0.222-8.363-2.346-10.995-5.574C3.351,6.199,3.088,7.115,3.088,8.094c0,1.85,0.941,3.483,2.372,4.439 c-0.874-0.028-1.697-0.268-2.416-0.667c0,0.023,0,0.044,0,0.067c0,2.585,1.838,4.741,4.279,5.23 c-0.447,0.122-0.919,0.187-1.406,0.187c-0.343,0-0.678-0.034-1.003-0.095c0.679,2.119,2.649,3.662,4.983,3.705 c-1.825,1.431-4.125,2.284-6.625,2.284c-0.43,0-0.855-0.025-1.273-0.075c2.361,1.513,5.164,2.396,8.177,2.396 c9.812,0,15.176-8.128,15.176-15.177c0-0.231-0.005-0.461-0.015-0.69C26.38,8.945,27.285,8.006,28,6.937z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.mastodon %}
<a href="{{config.extra.social.mastodon}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="-3 -3 20 20" fill="none" stroke="currentColor">
<path d="M 15.659 9.592 C 15.424 10.72 13.553 11.956 11.404 12.195 C 10.283 12.32 9.18 12.434 8.003 12.384 C 6.079 12.302 4.56 11.956 4.56 11.956 C 4.56 12.13 4.572 12.297 4.595 12.452 C 4.845 14.224 6.478 14.33 8.025 14.379 C 9.586 14.429 10.976 14.02 10.976 14.02 L 11.04 15.337 C 11.04 15.337 9.948 15.884 8.003 15.984 C 6.93 16.039 5.598 15.959 4.047 15.576 C 0.683 14.746 0.104 11.4 0.015 8.006 C -0.012 6.998 0.005 6.048 0.005 5.253 C 0.005 1.782 2.443 0.765 2.443 0.765 C 3.672 0.238 5.782 0.017 7.975 0 L 8.029 0 C 10.221 0.017 12.332 0.238 13.561 0.765 C 13.561 0.765 15.999 1.782 15.999 5.253 C 15.999 5.253 16.03 7.814 15.659 9.592 Z M 13.124 5.522 L 13.124 9.725 L 11.339 9.725 L 11.339 5.646 C 11.339 4.786 10.951 4.35 10.175 4.35 C 9.317 4.35 8.887 4.867 8.887 5.891 L 8.887 8.124 L 7.113 8.124 L 7.113 5.891 C 7.113 4.867 6.683 4.35 5.825 4.35 C 5.049 4.35 4.661 4.786 4.661 5.646 L 4.661 9.725 L 2.876 9.725 L 2.876 5.522 C 2.876 4.663 3.111 3.981 3.582 3.476 C 4.067 2.971 4.703 2.712 5.493 2.712 C 6.406 2.712 7.098 3.039 7.555 3.695 L 8 4.39 L 8.445 3.695 C 8.902 3.039 9.594 2.712 10.507 2.712 C 11.297 2.712 11.933 2.971 12.418 3.476 C 12.889 3.981 13.124 4.663 13.124 5.522 Z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.linkedin %}
<a href="{{config.extra.social.linkedin}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 30 30" fill="none" stroke="currentColor">
<path d="M24,4H6C4.895,4,4,4.895,4,6v18c0,1.105,0.895,2,2,2h18c1.105,0,2-0.895,2-2V6C26,4.895,25.105,4,24,4z M10.954,22h-2.95 v-9.492h2.95V22z M9.449,11.151c-0.951,0-1.72-0.771-1.72-1.72c0-0.949,0.77-1.719,1.72-1.719c0.948,0,1.719,0.771,1.719,1.719 C11.168,10.38,10.397,11.151,9.449,11.151z M22.004,22h-2.948v-4.616c0-1.101-0.02-2.517-1.533-2.517 c-1.535,0-1.771,1.199-1.771,2.437V22h-2.948v-9.492h2.83v1.297h0.04c0.394-0.746,1.356-1.533,2.791-1.533 c2.987,0,3.539,1.966,3.539,4.522V22z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.email %}
<a href="mailto:{{config.extra.social.email}}" target="_blank">
<svg class="h-12 w-12 text-black dark:text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.stackoverflow %}
<a href="{{config.extra.social.stackoverflow}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 30 30" fill="none" stroke="currentColor">
<path d="M18.69 17.58 9.12 15.6 8.79 17.58l9.57 1.98zm2.53-4.29L13.74 7.13l-1.21 1.54 7.48 6.27zm-1.54 1.98L10.88 11.2l-.77 1.76L18.91 17.14zM17.37 3.94l-1.54 1.21 5.83 7.81 1.54-1.21zm.99 16.06h-9.79v1.98h9.79zm1.98 3.96H6.59V18.02h-1.98v7.81h17.6V18.02h-1.98z"></path>
</svg>
</a>
{% endif %}
{% if config.extra.social.telegram %}
<a href="{{config.extra.social.telegram}}" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-black dark:text-white" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M19.35 10.55A8.8 8.8 90 111.75 10.55 8.8 8.8 90 0119.35 10.55ZM10.8657 8.2466C10.0099 8.603 8.2983 9.34 5.7331 10.4576 5.3173 10.6226 5.0984 10.7854 5.0786 10.9438 5.0456 11.2111 5.3811 11.3167 5.8376 11.4608L6.0301 11.5213C6.4789 11.6676 7.0839 11.8381 7.3974 11.8447 7.6834 11.8513 8.0013 11.7347 8.3522 11.4927 10.7491 9.8746 11.9866 9.0573 12.0636 9.0397 12.1186 9.0265 12.1956 9.0111 12.2462 9.0573 12.2979 9.1024 12.2924 9.1893 12.2869 9.2124 12.2539 9.3543 10.9372 10.5775 10.2563 11.2111 10.044 11.4091 9.8933 11.5488 9.8625 11.5807A8.9694 8.9694 90 019.6557 11.7853C9.2377 12.1879 8.9253 12.4893 9.6722 12.9821 10.0319 13.2197 10.3201 13.4144 10.6072 13.6102 10.9196 13.8236 11.232 14.0359 11.6368 14.3021 11.7391 14.3681 11.8381 14.4396 11.9338 14.5078 12.2979 14.7674 12.6268 15.0006 13.0305 14.9632 13.2659 14.9412 13.509 14.7212 13.6322 14.0612 13.9237 12.5025 14.4968 9.1266 14.6288 7.7351A1.5686 1.5686 90 0014.6145 7.3886.3707.3707 90 0014.4891 7.1499.5786.5786 90 0014.1481 7.0476C13.8181 7.0531 13.3088 7.2302 10.8657 8.2466Z"></path>
</svg>
</a>
{% endif %}
</div>
<!-- Content -->
<div class="text-bold mt-2 w-2/3 text-center p-4">
{{ section.content | safe }}
</div>
</div>
{% endblock content %}

325
templates/layout.html Normal file
View file

@ -0,0 +1,325 @@
<!doctype html>
<html lang="{{lang}}">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- FAVICON -->
{% if config.extra.favicon.webmanifest %}
<link href="{{ config.extra.favicon.manifest }}"" rel="manifest" />
{% endif %}
{% if config.extra.favicon.favicon_16x16 %}
<link href='{{ config.extra.favicon.favicon_16x16 }}' rel="icon" sizes="16x16" type="image/png" />
{% endif %}
{% if config.extra.favicon.favicon_32x32 %}
<link href='{{ config.extra.favicon.favicon_32x32 }}' rel="icon" sizes="32x32" type="image/png" />
{% endif %}
{% if config.extra.favicon.android_chrome_512 %}
<link href='{{ config.extra.favicon.android_chrome_512 }}' rel="android-chrome" sizes="512x512" />
{% endif %}
{% if config.extra.favicon.android_chrome_192 %}
<link href='{{ config.extra.favicon.android_chrome_192 }}' rel="android-chrome" sizes="192x192" />
{% endif %}
{% if config.extra.favicon.apple_touch_icon %}
<link href='{{ config.extra.favicon.apple_touch_icon }}' rel="apple-touch-icon" sizes="180x180" />
{% endif %}
{% if config.extra.favicon.apple_touch_icon %}
<link href='{{ config.extra.favicon.apple_touch_icon }}' rel="apple-touch-icon" sizes="180x180" />
{% endif %}
<link href="/css/main.css" rel="stylesheet">
<link id="syntax_highlight" href="#" rel="stylesheet">
<title>
{% block title %}
{{ config.title }}
{% endblock title %}
</title>
</head>
<body class="dark:bg-gray-700 flex flex-col h-screen justify-between">
<!---------------------------------------------------------->
<!------------------------- NAVBAR ------------------------->
<!---------------------------------------------------------->
<nav id="navbar" class="bg-gray-200 dark:bg-gray-800">
<div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
<div class="relative flex items-center justify-between h-16">
<div class="flex items-center sm:hidden">
<!-- Mobile menu button-->
<button id="toggle-mobile-menu" type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
<span class="sr-only">Open main menu</span>
<!--
Icon when menu is closed.
Heroicon name: outline/menu
Menu open: "hidden", Menu closed: "block"
-->
<svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
<!--
Icon when menu is open.
Heroicon name: outline/x
Menu open: "block", Menu closed: "hidden"
-->
<svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<div class="flex-1 flex items-center">
<div class="flex-shrink-0 flex items-center ml-2">
<a href="/" class="text-xl text-gray-800 dark:text-white">{{config.extra.navbar.title}}</a>
<!-- <img class="block lg:hidden h-8 w-auto" src="https://tailwindui.com/img/logos/workflow-mark-indigo-500.svg" alt="Workflow">
<img class="hidden lg:block h-8 w-auto" src="https://tailwindui.com/img/logos/workflow-logo-indigo-500-mark-white-text.svg" alt="Workflow"> -->
</div>
<div class="hidden sm:block sm:ml-6">
<div class="nav-links flex space-x-4">
<!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" -->
{% for item in config.extra.navbar.items %}
{% if lang == item.lang %}
{% for link in item.links %}
<a href="{{ link.url }}" class="text-gray-800 dark:text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">{{ link.name }}</a>
{% endfor %}
{% endif %}
{% endfor %}
{% if config.extra.enable_sidebar %}
<!-- More ... Button (sidebar) -->
<button id="toggle-sidebar">
<svg class="w-7 h-7 text-gray-800 dark:text-gray-300" 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="M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z"></path>
</svg>
</button>
{% endif %}
</div>
</div>
{% if config.extra.enable_search %}
<!-- Search input in navbar -->
<div class="flex ml-auto relative items-center sm:mr-4">
<input id="search" class="rounded-xl border border-black dark:border-gray-200 h-9 text-black dark:text-gray-200 dark:bg-gray-700 w-24 sm:w-full" type="text">
<svg class="w-6 h-6 absolute left-2 text-black dark:text-gray-200" 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="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
</svg>
<span class="absolute right-2 hidden sm:block text-gray-400 text-sm leading-5 py-0.5 px-1.5 border border-gray-300 rounded-md">
<kbd class="font-sans">
<abbr title="Command" class="no-underline"></abbr>
</kbd>
<kbd class="font-sans">K</kbd>
</span>
</div>
<!---------------------------- Search box modal ---------------------------->
<!-- inspired by https://www.tailwindtoolbox.com/components/modal -->
<div id="search-modal" class="modal opacity-0 pointer-events-none fixed w-full h-full top-0 left-0 flex z-10">
<div class="modal-overlay absolute w-full h-full bg-gray-900 opacity-50"></div>
<div class="modal-container text-gray-800 bg-gray-200 dark:bg-gray-800 dark:text-gray-400 w-11/12 md:max-w-md mx-auto rounded-lg shadow-lg z-50 mt-40 sm:mt-32 h-36 border border-2 border-gray-800 dark:border-gray-400">
<div class="modal-close absolute top-0 right-0 cursor-pointer flex flex-col items-center mt-4 mr-4 text-white text-sm z-50">
<svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
<path d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"></path>
</svg>
<span class="text-sm">(Esc)</span>
</div>
<!-- Modal Content-->
<div class="py-4 text-left px-6 flex flex-col">
<!-- Modal Title -->
<div class="flex justify-between items-center pb-3">
<p class="text-2xl font-bold">Search</p>
<div class="modal-close cursor-pointer z-50">
<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="M6 18L18 6M6 6l12 12"></path>
</svg>
</div>
</div>
<!-- Modal Body -->
<input id="search-input" class="rounded-xl border border-black h-12 text-bold text-2xl pl-2 text-black dark:text-gray-200 bg-gray-700" type="text">
<!-- Search results -->
<div id="search-results">
<ul id="results-list" class="flex flex-col justify-center max-h-2xl mt-2 overflow-scroll"></ul>
<!--Footer-->
<!-- <div class="flex justify-end pt-2">
<button class="px-4 bg-transparent p-3 rounded-lg text-indigo-500 hover:bg-gray-100 hover:text-indigo-400 mr-2">Action</button>
<button class="modal-close px-4 bg-indigo-500 p-3 rounded-lg text-white hover:bg-indigo-400">Close</button>
</div> -->
</div>
</div>
</div>
</div>
{% endif %}
<!---------------------------- Sidebar Menu ---------------------------->
{% if config.extra.enable_sidebar %}
<div id="sidebar" class="nav-links -translate-x-full flex flex-col pt-6 p-2 text-2xl text-black dark:text-gray-200 bg-gray-200 dark:bg-gray-900 transform top-0 left-0 w-64 bg-white fixed h-full overflow-auto ease-in-out transition-all duration-300 z-30 shadow-2xl">
{% for item in config.extra.sidebar.items %}
{% if lang == item.lang %}
{% for link in item.links %}
<a href="{{ link.url }}" class="text-gray-800 dark:text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">{{ link.name }}</a>
{% endfor %}
{% endif %}
{% endfor %}
</div>
{% endif %}
{% if config.extra.enable_multilingue %}
<!-- Language change button -->
<div class="flex p-2 ml-4 relative">
<button id="switch-lang" type="button" class="bg-gray-200 text-gray-800 hover:text-gray-900 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-white p-1 rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
<svg class="w-6 h-6 bg-gray-200 text-gray-800 hover:text-gray-900 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-white" 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="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"></path>
</svg>
</button>
<div id="switch-lang-panel" class="hidden absolute top-12 -left-1/2 z-10 p-4 rounded-lg divide-y bg-gray-300 dark:bg-gray-800 text-gray-800 dark:text-gray-400 flex flex-col w-28 ">
<span class="sr-only">Switch Lang</span>
{% for item in config.extra.lang.items %}
{% if lang == item.lang %}
{% for link in item.links %}
<a class="flex justify-center py-2 hover:text-gray-800 dark:hover:text-white" href="{{ link.base_url }}">{{ link.name }}</a>
{% endfor %}
{% endif %}
{% endfor %}
</div>
</div>
{% endif %}
<!-- Theme switch button -->
<div class="flex p-2">
<button id="switch-theme" type="button" class="bg-gray-200 text-gray-800 hover:text-gray-900 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-white p-1 rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
<span class="sr-only">Switch Theme</span>
<!-- Heroicon name: outline/light -->
<svg id="light" 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="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
</svg>
<!-- Heroicon name: outline/dark -->
<svg id="dark" 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="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
</svg>
</button>
<!-- Profile dropdown -->
<!-- <div class="ml-3 relative">
<div>
<button type="button" class="bg-gray-800 flex text-sm rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white" id="user-menu-button" aria-expanded="false" aria-haspopup="true">
<span class="sr-only">Open user menu</span>
<img class="h-8 w-8 rounded-full" src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80" alt="">
</button>
</div> -->
<!--
Dropdown menu, show/hide based on menu state.
Entering: "transition ease-out duration-100"
From: "transform opacity-0 scale-95"
To: "transform opacity-100 scale-100"
Leaving: "transition ease-in duration-75"
From: "transform opacity-100 scale-100"
To: "transform opacity-0 scale-95"
-->
<!-- Active: "bg-gray-100", Not Active: "" -->
<!-- <div class="origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none" role="menu" aria-orientation="vertical" aria-labelledby="user-menu-button" tabindex="-1">
<a href="#" class="block px-4 py-2 text-sm text-gray-700" role="menuitem" tabindex="-1" id="user-menu-item-0">Your Profile</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700" role="menuitem" tabindex="-1" id="user-menu-item-1">Settings</a>
<a href="#" class="block px-4 py-2 text-sm text-gray-700" role="menuitem" tabindex="-1" id="user-menu-item-2">Sign out</a>
</div> -->
</div>
</div>
</div>
</div>
<!----------------------------- Mobile menu ----------------------------->
<div id="mobile-menu" class="sm:hidden fixed z-10 overflow-hidden">
<div class="nav-links flex flex-col space-y-4 items-center w-screen bg-gray-200 dark:bg-gray-800 transition-all ease-out duration-500 h-0">
<!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" -->
{% for item in config.extra.navbar.items %}
{% if lang == item.lang %}
{% for link in item.links %}
<a href="{{ link.url }}" class="text-gray-800 dark:text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">{{ link.name }}</a>
{% endfor %}
{% endif %}
{% endfor %}
{% if config.extra.enable_sidebar %}
{% for item in config.extra.sidebar.items %}
{% if lang == item.lang %}
{% for link in item.links %}
<a href="{{ link.url }}" class="text-gray-800 dark:text-gray-300 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">{{ link.name }}</a>
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
</div>
</div>
</nav>
<!----------------------------------------------------------->
<!------------------------- CONTENT ------------------------->
<!----------------------------------------------------------->
<main class="max-w-7xl mx-auto text-black dark:text-gray-200 w-full mb-auto">
{% block content %}
{% endblock content %}
</main>
<!----------------------------------------------------------->
<!------------------------- PAGINATION ---------------------->
<!----------------------------------------------------------->
{% block pagination %}
{% endblock%}
<!---------------------------------------------------------->
<!------------------------- FOOTER ------------------------->
<!---------------------------------------------------------->
<footer class="max-w-7xl mx-auto relative pt-1 px-2 border-b-2 border-gray-300 dark:border-gray-200 w-full">
<!-- <div class="container mx-auto px-6">
<div class="sm:flex sm:mt-8">
<div class="mt-8 sm:mt-0 sm:w-full sm:px-8 flex flex-col md:flex-row justify-between">
<div class="flex flex-col">
<span class="font-bold text-gray-700 uppercase mb-2">Footer header 1</span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
</div>
<div class="flex flex-col">
<span class="font-bold text-gray-700 uppercase mt-4 md:mt-0 mb-2">Footer header 2</span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
</div>
<div class="flex flex-col">
<span class="font-bold text-gray-700 uppercase mt-4 md:mt-0 mb-2">Footer header 3</span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
<span class="my-2"><a href="#" class="text-blue-700 text-md hover:text-blue-500">link 1</a></span>
</div>
</div>
</div>
</div> -->
<div class="mt-16 border-t-2 border-gray-300 flex flex-col items-center">
<div class="sm:w-2/3 text-center py-6">
<p class="text-sm text-black dark:text-white font-bold mb-2">
{% block content_footer %}
© {{ now() | date(format="%Y") }} A modified <a href="https://www.getzola.org/themes/blow/">blow</a> theme made with <a href="https://tailwindcss.com/" target="_blank">tailwindcss</a> for <a href="https://www.getzola.org/" target="_blank">Zola</a>
{% endblock %}
</p>
</div>
</div>
</footer>
<!------------------------- SCRIPTS ------------------------->
<script defer src="/js/main.js"></script>
{% if config.extra.enable_search %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/elasticlunr/0.9.6/elasticlunr.min.js"></script>
<script src="/search_index.{{lang}}.js"></script>
<script defer src="/js/search.js"></script>
{% endif %}
{% if config.extra.enable_multilingue %}
<script defer src="/js/lang.js"></script>
{% endif %}
{% if config.extra.enable_adsense %}
<script async src="{{ config.extra.adsense_link | safe }}"
crossorigin="anonymous"></script>
{% endif %}
{% block extra_js %}
{% endblock extra_js %}
</body>
</html>

182
templates/page.html Normal file
View file

@ -0,0 +1,182 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex px-4">
<h1 class="text-2xl text-bold my-6 mx-auto">
{{ page.title }}
</h1>
</div>
<div class="flex gap-x-8 p-4 justify-center">
<div class="flex flex-col sm:w-3/4 w-full border border-2 border-gray-200 dark:border-black rounded-xl p-5 shadow-2xl bg-gray-200 dark:bg-gray-800">
<div class="flex flex-col py-2 justify-center">
<!-- <h2 class="text-2xl text-bold"><a href='{{ page.permalink }}'>{{ page.title }}</a></h2> -->
<p class="text-bold">{{ page.description }}</p>
</div>
<!-- Read time and word count -->
<div class="flex flex-wrap py-2">
<div class="flex items-center w-1/3">
<div class="flex flex-col sm:flex-row sm:space-x-3 text-gray-900 dark:text-gray-400">
<span class="flex">
<!-- Icon clock -->
<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="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span class="ml-1">{{ page.reading_time }} min</span>
</span>
<span class="flex">
<!-- Icon pencil -->
<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="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path>
</svg>
<span class="ml-1">{{ page.word_count }} words</span>
</span>
</div>
</div>
<!-- Author and publish date -->
<div class="flex w-2/3 sm:space-x-3 text-gray-900 dark:text-gray-400 justify-end">
<span class="flex items-center">
<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="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
<span class="ml-1"><time datetime="{{ page.date }}">Published on {{ page.date }}</time></span>
</span>
<span class="flex items-center">
<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="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path>
</svg>
{% if page.extra.author.name %}
<span class="ml-1">{{ page.extra.author.name }}</span>
{% if page.extra.author.avatar %}
<img class="rounded-full h-9 w-9 ml-1" src="{{ page.extra.author.avatar }}"{% if page.extra.author.avatar_alt %} alt="{{ page.extra.author.avatar_alt }}"{% endif %}>
{% endif %}
{% else %}
<span class="ml-1">{{ config.extra.default_author.name }}</span>
<img class="rounded-full h-9 w-9 ml-1" src="{{ config.extra.default_author.avatar }}" alt="{{ config.extra.default_author.avatar_alt }}">
{% endif %}
</span>
</div>
</div>
<!-- Categories and Tags -->
<div class="flex flex-wrap py-2">
<div class="w-2/3">
{% if page.taxonomies.categories %}
<p>
Categories:
{% for category in page.taxonomies.categories %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='categories', name=category) }}">
<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="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
</svg>
<span class="pl-1">{{category}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
<div class="w-1/3">
{% if page.taxonomies.tags %}
<p>
Tags:
{% for tag in page.taxonomies.tags %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='tags', name=tag) }}">
<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 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
</svg>
<span class="pl-1">{{tag}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
</div>
<!-- Content -->
<div id="page-content" class="text-bold mt-2">
{{ page.content | safe }}
</div>
</div>
<!-- Table of content -->
{% if page.extra.toc %}
<div class="hidden sm:block sm:w-1/4 sm:flex sm:items-center sm:flex-col sm:mt-10 sm:w-1/5">
<div class="border border-2 border-gray-200 dark:border-black rounded-xl p-5 shadow-2xl bg-gray-200 dark:bg-gray-800 sticky top-12">
<p class="text-bold text-xl">Table of contents</p>
<ul id="toc">
{% for h1 in page.toc %}
<li class="pl-2 my-2">
<a id="link-{{h1.id}}" class="text-md block rounded-lg p-2" href="{{ h1.permalink | safe }}">
- {{ h1.title }}
</a>
{% if h1.children %}
{% for h2 in h1.children %}
<li class="pl-4 my-2">
<a id="link-{{h2.id}}" class="text-sm block rounded-lg p-2" href="{{ h2.permalink | safe }}">
- {{ h2.title }}
</a>
</li>
{% endfor %}
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
</div>
{% endblock %}
{% block pagination %}
{% if page.earlier or page.later or page.lighter or page.heavier %}
<div class="max-w-7xl px-2 sm:px-6 lg:px-8 mx-auto">
<div class="flex items-center space-x-56 mt-4">
{% if page.later %}
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ page.later.permalink }}">
<svg class="w-7 h-7 mr-2" 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>
{{ page.later.title }}
</a>
{% endif %}
{% if page.earlier %}
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ page.earlier.permalink }}">
{{ page.earlier.title }}
<svg class="w-7 h-7 ml-2" 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>
</a>
{% endif %}
{% if page.heavier %}
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ page.heavier.permalink }}">
<svg class="w-7 h-7 mr-2" 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>
{{ page.heavier.title }}
</a>
{% endif %}
{% if page.lighter %}
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ page.lighter.permalink }}">
{{ page.lighter.title }}
<svg class="w-7 h-7 ml-2" 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>
</a>
{% endif %}
</div>
</div>
{% endif %}
{% endblock %}
{% block extra_js %}
<script defer src="/js/page.js"></script>
{% endblock %}

3
templates/robots.txt Normal file
View file

@ -0,0 +1,3 @@
User-agent: *
Allow: /
Sitemap: {{ get_url(path="sitemap.xml") }}

111
templates/section.html Normal file
View file

@ -0,0 +1,111 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-10">
<h1 class="text-2xl text-bold mb-6">
{{ section.title }}
</h1>
<div class="flex flex-col gap-y-6 w-full px-4 sm:w-2/3">
{% if paginator %}
{% set pages = paginator.pages %}
{% else %}
{% set pages = section.pages %}
{% endif %}
{% for page in pages %}
<div class="border border-2 border-gray-200 dark:border-black rounded-xl p-5 shadow-2xl transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800">
<div class="flex flex-col py-2 justify-center">
<h2 class="text-2xl text-bold"><a href='{{ page.permalink }}'>{{ page.title }}</a></h2>
<p class="text-bold">{{ page.description }}</p>
</div>
<!-- Read time and word count -->
<div class="flex flex-wrap py-2">
<div class="flex items-center w-1/3">
<div class="flex space-x-3 text-gray-900 dark:text-gray-400">
<span class="flex">
<!-- Icon clock -->
<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="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span class="ml-1">{{ page.reading_time }} min</span>
</span>
<span class="flex">
<!-- Icon pencil -->
<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="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path>
</svg>
<span class="ml-1">{{ page.word_count }} words</span>
</span>
</div>
</div>
</div>
<!-- Summary -->
<div class="text-bold mt-2">
{{ page.summary | safe }}
<a class="flex py-2" href='{{ page.permalink }}'>
Read More
<svg class="w-6 h-6 ml-1" 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="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock content %}
{% block pagination %}
{% if paginator.previous or paginator.next %}
<div class="max-w-7xl px-2 sm:px-6 lg:px-8 mx-auto w-full">
<div class="flex items-center justify-between">
{% if not paginator.previous %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
<svg class="w-7 h-7 mr-2" 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>
Previous
</span>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.previous }}" {% if not paginator.previous %}disabled{% endif %}>
<svg class="w-7 h-7 mr-2" 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>
Previous
</a>
{% endif %}
<ul class="flex gap-x-2">
{% for pager in range(start=1, end=paginator.number_pagers+1) %}
<li class="">
<a class="p-4 border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600 hover:text-white rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 {% if paginator.current_index == pager %}bg-blue-500{% else %}bg-gray-200 dark:bg-gray-800{% endif %}" href="{{ paginator.base_url }}{{pager}}" aria-label="Page {{pager}}">
{{pager}}
</a>
</li>
{% endfor %}
</ul>
{% if not paginator.next %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
Next Page
<svg class="w-7 h-7 ml-2" 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>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.next }}">
Next page
<svg class="w-7 h-7 ml-2" 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>
</a>
{% endif %}
</div>
</div>
{% endif %}
{% endblock %}

View file

@ -0,0 +1,245 @@
{% set formClasses = "bg-neutral-500 text-neutral-50 placeholder-neutral-300 focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 focus:ring-offset-transparent m-2 p-3 rounded-lg hover:bg-neutral-500 checked:text-neutral-500" -%}
{% set requiredField = "<span class='inline-block text-[#f39] text-sm align-super'>* required</span>" -%}
<div id="mt-form" class="form text-lg w-full">
<form id='form'
hx-post="/api/camp-form"
hx-encoding="multipart/form-data"
autocomplete="on"
method="post"
target="_parent"
class="w-full items-center flex flex-wrap">
<h3 class="basis-full">Camp Form</h3>
<div class="basis-full flex flex-wrap my-4">
<label for="first-name" class="basis-full">What is your first and last name? <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<br/>
<input type="text" id="first-name" name="first-name"
placeholder="First Name" class="peer flex-1 form-input {{ formClasses }}"
required>
<input type="text" id="last-name" name="last-name"
placeholder="Last Name" class="peer flex-1 form-input {{ formClasses }}"
required>
<label for="parent-first-name" class="basis-full mt-2">What is your guardian's first and last name? <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<input type="text" id="parent-first-name" name="parent-first-name"
class="peer flex-1 form-input {{ formClasses }}"
placeholder="First Name" required>
<input type="text" id="parent-last-name" name="parent-last-name"
class="peer flex-1 form-input {{ formClasses }}"
placeholder="Last Name" required>
</div>
<label for="birth-date" class="basis-full">When were you born? <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<input type="date" id="birth-date" name="birth-date"
class="basis-full form-date {{ formClasses }}" required>
<label for="gender" class="basis-full">Gender <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<select id="gender" name="gender" class="basis-full form-select {{ formClasses }}" required>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<div class="basis-full flex flex-wrap my-4">
<label for="street" class="basis-full">What is your address? <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<input type="text" id="street" name="street"
class="basis-full form-input {{ formClasses }}"
placeholder="Street Address" required>
<input type="text" id="city" name="city"
class="flex-auto form-input {{ formClasses }}"
placeholder="City" required>
<input type="text" id="state" name="state"
class="flex-auto form-input {{ formClasses }}"
placeholder="State" required>
<input type="text" id="zip" name="zip"
class="flex-auto form-input {{ formClasses }}"
placeholder="Zip Code" required>
</div>
<div class="basis-full my-4">
<label for="grade" class="">Grade this Fall <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<br/>
<input type="radio" id="grade" name="grade" value="6"
class="form-input {{ formClasses }}" checked>
<label for="grade" class="">6th</label>
<br/>
<input type="radio" id="grade" name="grade" value="7"
class="form-input {{ formClasses }}" checked>
<label for="grade" class="">7th</label>
<br/>
<input type="radio" id="grade" name="grade" value="8"
class="form-input {{ formClasses }}" checked>
<label for="grade" class="">8th</label>
<br/>
<input type="radio" id="grade" name="grade" value="freshman"
class="form-input {{ formClasses }}">
<label for="grade" class="">Freshman</label>
<br/>
<input type="radio" id="grade" name="grade" value="sophomore"
class="form-input {{ formClasses }}">
<label for="grade" class="">Sophomore</label>
<br/>
<input type="radio" id="grade" name="grade" value="junior"
class="form-input {{ formClasses }}">
<label for="grade" class="">Junior</label>
<br/>
<input type="radio" id="grade" name="grade" value="senior"
class="form-input {{ formClasses }}">
<label for="grade" class="">Senior</label>
<br/>
<input type="radio" id="grade" name="grade" value="college-freshman"
class="form-input {{ formClasses }}">
<label for="grade" class="">College Freshman</label>
</div>
<label for="parent-phone" class="basis-full">Guardian's phone <span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<input type="tel" id="parent-phone" name="parent-phone"
class="basis-full peer form-input {{ formClasses }}
invalid:text-[#f39] invalid:ring-[#f39]
focus:invalid:ring-[#f39]
focus:invalid:border-[#f39]"
required pattern="\(?\d{3}\)? ?-?\d{3} ?-?\d{4}"/>
<!-- <div id="warning-phone"
class="invisible flex
rounded-lg h-0
peer-invalid:p-2
peer-invalid:visible
peer-empty:invisible
peer-empty:h-0
peer-empty:mb-0
peer-invalid:basis-full
peer-invalid:mb-32">
<span class="text-[#f39] ltr:pr-3 rtl:pl-3 content-right float-right">
Make sure you have included a valid phone number for your guardian so we can contact them. Numbers are in the format "999-999-9999 or 0123456789". Make sure to include an area code.
</span>
</div>
-->
<div class="basis-full flex flex-wrap">
<label for="parent-email" class="basis-full">Guardian's Email
<span class='inline-block text-[#f39] text-sm align-sub'>* required</span>
</label>
<input type="email" id="parent-email" name="parent-email"
pattern="^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$"
class="basis-full peer form-input
{{ formClasses }}
invalid:text-[#F39]
invalid:ring-[#f39]
focus:invalid:ring-[#f39]
focus:invalid:border-[#f39]">
<div id="warning-email"
class="invisible flex
rounded-lg h-0
peer-invalid:p-2 peer-invalid:visible
peer-invalid:basis-full
peer-invalid:mb-24">
<span class="text-[#f39] ltr:pr-3 rtl:pl-3 content-right float-right">
Make sure you have included an email for your guardian so we can contact them. Emails are in the format "name@website.end".
</span>
</div>
</div>
<label for="allergies" class="basis-full">Do you have any food allergies?</label>
<input type="text" id="allergies" name="allergies"
class="basis-full form-input {{ formClasses }}">
<label for="week" class="basis-full">My Camp Plan (The first week is filled, so if you'd like to be on a waiting list, you'll have to check the second option.)<span class='inline-block text-[#f39] text-sm align-sub'>* required</span></label>
<select id="week" name="week" class="flex-auto form-select {{ formClasses }}">
<option value="week1">Week 1: July 21-25</option>
<option value="week2">Week 2: July 28-Aug 1</option>
<!-- <option value="waiting-list">Week 2: July 29-Aug 2, but on a waiting list for week 1</option> -->
</select>
<label for="shirt" class="basis-full">T-Shirt Size <span class='inline-block text-[#f39] text-sm'>all t-shirts are in adult sizes only</span></label>
<select id="shirt" name="shirt" class="mb-8 flex-auto form-select {{ formClasses }}">
<option value="small">Small</option>
<option value="medium">Medium</option>
<option value="large">Large</option>
<option value="xl">XL</option>
<option value="xxl">2XL</option>
<option value="xxxl">3XL</option>
</select>
<div class="basis-full my-2">
<label for="final-agreement">
I understand that in order to go to camp I need to have this form, a health form, and the total cost paid.
</label>
<div class="my-4">
<input type="radio" value="yes" id="final-agreement" name="final-agreement"
class="form-input {{ formClasses }}" required>
<label for="final-agreement" class="mt-4">
I understand <span class='inline-block text-[#f39] text-sm align-sub'>* required</span>
</label>
</div>
</div>
<label for="health-form" class="basis-full my-2">
Would you like to fill out the health form now or later? Your health form is not required right now, but you cannot go to camp without one.
</label>
<div class="basis-full mt-4">
<input type="radio" value="now" id="health-form" name="health-form"
class="form-input {{ formClasses }}" checked>
<label for="health-form" class="">
Now
</label>
</div>
<div class="basis-full mb-4">
<input type="radio" value="later" id="health-form" name="health-form"
class="form-input {{ formClasses }}">
<label for="health-form" class="">
Later
</label>
</div>
<label for="registration" class="basis-full my-2">
Would you like to pay the registration fee or the full cost now or later?
</label>
<!-- For early bird prices -->
<div class="basis-full mt-4">
<input type="radio" value="now" id="registration" name="registration"
class="form-input {{ formClasses }}" checked>
<label for="registration" class="">
Now - $85
</label>
</div>
<div class="basis-full">
<input type="radio" value="full" id="registration" name="registration"
class="form-input {{ formClasses }}">
<label for="registration" class="">
Full Cost - $185
</label>
</div>
<div class="basis-full mb-4">
<input type="radio" value="later" id="registration" name="registration"
class="form-input {{ formClasses }}">
<label for="registration" class="">
Later - Send $85 or $185 to the TFC Office
</label>
</div>
<!-- For after early bird prices -->
<!-- <div class="basis-full mt-4">
<input type="radio" value="now" id="registration" name="registration"
class="form-input {{ formClasses }}" checked>
<label for="registration" class="">
Now - $100
</label>
</div>
<div class="basis-full">
<input type="radio" value="full" id="registration" name="registration"
class="form-input {{ formClasses }}">
<label for="registration" class="">
Full Cost - $200
</label>
</div>
<div class="basis-full mb-4">
<input type="radio" value="later" id="registration" name="registration"
class="form-input {{ formClasses }}">
<label for="registration" class="">
Later - Send $100 or $200 to the TFC Office
</label>
</div> -->
<div class="basis-full mt-8">
<button type="submit" class="content-right rounded-lg bg-primary-700 h-12 w-24 focus:bg-primary-900 focus:ring focus:ring-primary-700 hover:bg-primary-900 float-right">Submit</button>
</div>
</form>
</div>

View file

@ -0,0 +1,40 @@
<div class="mt-20">
<h1>Disciplemaking</h1>
<div class="mb-8">TFCs core value is to follow the example of Jesus whose strategy of disciplemaking allowed Him to minister to all levels of spiritual interest at all times. These are those levels and where we work to reach teens at those levels. Everything we do is built around a desire to impact lives at each of these levels and help teenagers move forward through them.</div>
<div class="m-4 w-full grid grid-cols-1 gap-12 lg:grid-cols-4 md:grid-cols-2 sm:grid-cols-1">
<div class="p-2">
<div class="text-xl font-extrabold">Lost and Seeking</div>
<ul>
<li>The World</li>
<li>Outreach</li>
<li>Relationship Building</li>
</ul>
</div>
<div class="p-2">
<div class="text-xl font-extrabold">Come and Grow</div>
<ul>
<li>Growing Believers</li>
<li>Building Faith</li>
<li>Jesus Started Here</li>
</ul>
</div>
<div class="p-2">
<div class="text-xl font-extrabold">Come and Follow</div>
<ul>
<li>Workers</li>
<li>Equipping</li>
<li>Jesus Invited Some</li>
</ul>
</div>
<div class="p-2">
<div class="text-xl font-extrabold">Come and Go</div>
<ul>
<li>Leadership</li>
<li>Multiplication</li>
<li>Jesus Sent Some</li>
</ul>
</div>
</div>
</div>

View file

@ -0,0 +1,22 @@
<style>
#v-frame {
background-color: #1e293b;
}
</style>
<iframe class="h-screen" id="v-frame" width="100%" frameborder="0" allow="clipboard-write" src=https://secure.myvanco.com/L-Z772 scrolling="yes"></iframe>
<!-- <script type="application/javascript"> -->
<!-- window.onmessage=(e=>{const n=document.getElementById("v-frame");https:\/\/secure.myvanco.com===e.origin&&e.data.height&&(n.height=e.data.height,n.overflow="hidden")}); -->
<!-- </script> -->
<!-- <script type="application/javascript"> -->
<!-- var x = document.getElementById("v-frame"); -->
<!-- console.log("AHHHHHHHHHHHHHH!"); -->
<!-- var y = (x.contentWindow || x.contentDocument); -->
<!-- if (y.document) -->
<!-- y = y.document; -->
<!-- console.log(y.body.style.backgroundColor); -->
<!-- y.body.style.backgroundColor = "#1e293b"; -->
<!-- console.log(y.body.root.style.backgroundColor); -->
<!-- </script> -->

View file

@ -0,0 +1,4 @@
<div style="display: flex;" class="{% if width %} {{ width }} {% else %} w-full {% endif %}">
<iframe class="pt-vid flex-auto {% if aspect %} {{ aspect }} {% else %} aspect-video {% endif %} {% if width %} {{ width }} {% else %} w-24 {% endif %}" sandbox="allow-same-origin allow-scripts allow-popups" src="{{ src }}?warningTitle=0" frameborder="0" allowfullscreen></iframe>
</div>

View file

@ -0,0 +1 @@
<div class="{% if height %}{{ height }} {% else %} h-24 {% endif %}"></div>

20
templates/tags/list.html Normal file
View file

@ -0,0 +1,20 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-10 px-4">
<h1 class="text-2xl text-bold">
Tags
</h1>
<p class="text-bold text-xl mt-4">{{ terms | length }} tags</p>
<div class="flex flex-wrap sm:flex-row flex-col sm:gap-x-7 gap-y-5 mt-6">
{% for tag in terms %}
<a href="{{ tag.permalink | safe }}" class="flex items-center space-x-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 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
</svg>
<span class="text-bold">{{tag.name}} <sup>{{ tag.pages | length }}</sup></span>
</a>
{% endfor %}
</div>
{% endblock content %}

167
templates/tags/single.html Normal file
View file

@ -0,0 +1,167 @@
{% extends "layout.html" %}
{% block content %}
<div class="flex items-center flex-col mt-10 px-4">
<h1 class="text-2xl text-bold mb-6">
Tag : {{ term.name }}
</h1>
<div class="flex flex-col gap-y-6 w-full sm:w-2/3">
{% if paginator %}
{% set pages = paginator.pages %}
{% else %}
{% set pages = term.pages %}
{% endif %}
{% for page in pages %}
<div class="border border-2 border-gray-200 dark:border-black rounded-xl p-5 shadow-2xl transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800">
<div class="flex flex-col py-2 justify-center">
<h2 class="text-2xl text-bold"><a href='{{ page.permalink }}'>{{ page.title }}</a></h2>
<p class="text-bold">{{ page.description }}</p>
</div>
<!-- Read time and word count -->
<div class="flex flex-wrap py-2">
<div class="flex items-center w-1/3">
<div class="flex space-x-3 text-gray-900 dark:text-gray-400">
<span class="flex">
<!-- Icon clock -->
<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="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span class="ml-1">{{ page.reading_time }} min</span>
</span>
<span class="flex">
<!-- Icon pencil -->
<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="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path>
</svg>
<span class="ml-1">{{ page.word_count }} words</span>
</span>
</div>
</div>
<!-- Author and publish date -->
<div class="flex w-2/3 space-x-3 text-gray-900 dark:text-gray-400 justify-end">
<span class="flex items-center">
<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="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
<span class="ml-1"><time datetime="{{ page.date }}">Published on {{ page.date | date(format='%B %d, %Y') }}</time></span>
</span>
<span class="flex items-center">
<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="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path>
</svg>
{% if page.extra.author.name %}
<span class="ml-1">{{ page.extra.author.name }}</span>
{% if page.extra.author.avatar %}
<img class="rounded-full h-9 w-9 ml-1" src="{{ page.extra.author.avatar }}"{% if page.extra.author.avatar_alt %} alt="{{ page.extra.author.avatar_alt }}"{% endif %}>
{% endif %}
{% else %}
<span class="ml-1">{{ config.extra.default_author.name }}</span>
<img class="rounded-full h-9 w-9 ml-1" src="{{ config.extra.default_author.avatar }}" alt="{{ config.extra.default_author.avatar_alt }}">
{% endif %}
</span>
</div>
</div>
<!-- Summary -->
<div class="text-bold mt-2">
{{ page.summary | safe }}
<a class="flex py-2" href='{{ page.permalink }}'>
Read More
<svg class="w-6 h-6 ml-1" 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="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
</a>
</div>
<!-- Categories and Tags -->
<div class="flex flex-wrap py-2">
<div class="w-2/3">
{% if page.taxonomies.categories %}
<p>
Categories:
{% for category in page.taxonomies.categories %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='categories', name=category) }}">
<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="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
</svg>
<span class="pl-1">{{category}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
<div class="w-1/3">
{% if page.taxonomies.tags %}
<p>
Tags:
{% for tag in page.taxonomies.tags %}
<a class="text-gray-900 dark:text-gray-400 flex py-1 items-center" href="{{ get_taxonomy_url(kind='tags', name=tag) }}">
<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 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
</svg>
<span class="pl-1">{{tag}}</span>
</a>
{% endfor %}
</p>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock content %}
{% block pagination %}
{% if paginator.previous or paginator.next %}
<div class="max-w-7xl px-2 sm:px-6 lg:px-8 mx-auto w-full">
<div class="flex items-center justify-between">
{% if not paginator.previous %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
<svg class="w-7 h-7 mr-2" 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>
Previous
</span>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 dark:hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.previous }}" {% if not paginator.previous %}disabled{% endif %}>
<svg class="w-7 h-7 mr-2" 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>
Previous
</a>
{% endif %}
<ul class="flex gap-x-2">
{% for pager in range(start=1, end=paginator.number_pagers+1) %}
<li class="">
<a class="p-4 border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 hover:bg-gray-300 dark:hover:bg-gray-600 hover:text-white rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 {% if paginator.current_index == pager %}bg-blue-500{% else %}bg-gray-200 dark:bg-gray-800{% endif %}" href="{{ paginator.base_url }}{{pager}}" aria-label="Page {{pager}}">
{{pager}}
</a>
</li>
{% endfor %}
</ul>
{% if not paginator.next %}
<!-- Disabled -->
<span class="flex items-center border border-gray-400 dark:border-black rounded-lg px-3 py-4 bg-gray-400 text-gray-200">
Next Page
<svg class="w-7 h-7 ml-2" 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>
{% else %}
<!-- Active -->
<a class="flex items-center border border-gray-400 dark:border-black rounded-lg text-gray-800 dark:text-gray-300 dark:bg-gray-800 hover:bg-gray-300 dark:hover:bg-gray-600 hover:text-white px-3 py-4 rounded-md text-sm font-medium transform transition duration-500 hover:scale-105 bg-gray-200 dark:bg-gray-800" href="{{ paginator.next }}">
Next page
<svg class="w-7 h-7 ml-2" 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>
</a>
{% endif %}
</div>
</div>
{% endif %}
{% endblock %}