2018-05-13 17:19:23 +00:00
|
|
|
{% macro post_card(article) %}
|
2018-05-13 20:33:21 +00:00
|
|
|
<div class="card">
|
2018-10-31 10:43:56 +00:00
|
|
|
{% if article.cover %}
|
|
|
|
<div class="cover" style="background-image: url('{{ article.cover.url }}')"></div>
|
|
|
|
{% endif %}
|
2018-05-13 17:19:23 +00:00
|
|
|
<h3><a href="{{ article.url }}">{{ article.post.title }}</a></h3>
|
2018-09-06 21:32:02 +00:00
|
|
|
<main>
|
2018-09-04 11:26:13 +00:00
|
|
|
<p>
|
|
|
|
{% if article.post.subtitle | length > 0 %}
|
|
|
|
{{ article.post.subtitle }}
|
|
|
|
{% else %}
|
|
|
|
{{ article.post.content | safe | striptags | truncate(length=200) }}
|
|
|
|
{% endif %}
|
|
|
|
</p>
|
2018-06-12 11:57:30 +00:00
|
|
|
</main>
|
|
|
|
<p class="author">
|
2018-06-26 15:58:11 +00:00
|
|
|
{{ "By {{ link_1 }}{{ link_2 }}{{ link_3 }}{{ name | escape }}{{ link_4 }}" | _(
|
2018-06-17 19:54:59 +00:00
|
|
|
link_1='<a href="/@/',
|
|
|
|
link_2=article.author.fqn,
|
|
|
|
link_3='/">',
|
2018-07-26 14:36:19 +00:00
|
|
|
name=article.author.name,
|
2018-06-17 19:54:59 +00:00
|
|
|
link_4="</a>")
|
|
|
|
}}
|
2018-09-10 18:38:19 +00:00
|
|
|
{% if article.post.published %}⋅ {{ article.date | date(format="%B %e") }}{% endif %}
|
2018-07-26 17:00:23 +00:00
|
|
|
⋅ <a href="/~/{{ article.blog.fqn }}/">{{ article.blog.title }}</a>
|
2018-09-10 18:38:19 +00:00
|
|
|
{% if not article.post.published %}⋅ {{ "Draft" | _ }}{% endif %}
|
2018-06-12 11:57:30 +00:00
|
|
|
</p>
|
2018-05-13 17:19:23 +00:00
|
|
|
</div>
|
|
|
|
{% endmacro post_card %}
|
2018-09-11 18:34:47 +00:00
|
|
|
{% macro input(name, label, errors, form, type="text", props="", optional=false, default='', details=' ') %}
|
2018-07-19 09:14:44 +00:00
|
|
|
<label for="{{ name }}">
|
|
|
|
{{ label | _ }}
|
|
|
|
{% if optional %}
|
|
|
|
<small>{{ "Optional" | _ }}</small>
|
|
|
|
{% endif %}
|
2018-09-11 18:33:16 +00:00
|
|
|
<small>{{ details | _ }}</small>
|
2018-07-19 09:14:44 +00:00
|
|
|
</label>
|
2018-07-06 17:29:36 +00:00
|
|
|
{% if errors is defined and errors[name] %}
|
|
|
|
{% for err in errors[name] %}
|
2018-07-07 20:57:53 +00:00
|
|
|
<p class="error">{{ err.message | default(value="Unknown error") | _ }}</p>
|
2018-07-06 17:29:36 +00:00
|
|
|
{% endfor %}
|
|
|
|
{% endif %}
|
2018-07-27 17:05:36 +00:00
|
|
|
{% set default = default[name] | default(value="") %}
|
|
|
|
<input type="{{ type }}" id="{{ name }}" name="{{ name }}" value="{{ form[name] | default(value=default) }}" {{ props | safe }}/>
|
2018-07-06 17:29:36 +00:00
|
|
|
{% endmacro input %}
|
2018-07-25 12:29:34 +00:00
|
|
|
{% macro paginate(page, total, previous="Previous page", next="Next page") %}
|
|
|
|
<div class="pagination">
|
|
|
|
{% if page != 1 %}
|
|
|
|
<a href="?page={{ page - 1 }}">{{ previous | _ }}</a>
|
|
|
|
{% endif %}
|
|
|
|
{% if page < total %}
|
|
|
|
<a href="?page={{ page + 1 }}">{{ next | _ }}</a>
|
|
|
|
{% endif %}
|
|
|
|
</div>
|
|
|
|
{% endmacro %}
|
2018-07-25 16:18:41 +00:00
|
|
|
{% macro comment(comm) %}
|
|
|
|
<div class="comment" id="comment-{{ comm.id }}">
|
2018-07-26 16:37:13 +00:00
|
|
|
<a class="author" href="/@/{{ comm.author.fqn }}/">
|
2018-09-09 20:41:55 +00:00
|
|
|
{{ macros::avatar(user=comm.author, pad=true) }}
|
2018-07-26 14:36:19 +00:00
|
|
|
<span class="display-name">{{ comm.author.name }}</span>
|
2018-09-03 14:18:54 +00:00
|
|
|
<small>@{{ comm.author.fqn }}</small>
|
2018-07-25 16:18:41 +00:00
|
|
|
</a>
|
2018-11-07 14:57:31 +00:00
|
|
|
<div class="text">
|
|
|
|
{% if comm.sensitive %}
|
|
|
|
<details>
|
|
|
|
<summary>{{ comm.spoiler_text }}</summary>
|
|
|
|
{% endif %}
|
|
|
|
{{ comm.content | safe }}
|
|
|
|
{% if comm.sensitive %}
|
|
|
|
</details>
|
|
|
|
{% endif %}
|
|
|
|
</div>
|
2018-09-04 16:09:31 +00:00
|
|
|
<a class="button icon icon-message-circle" href="?responding_to={{ comm.id }}">{{ "Respond" | _ }}</a>
|
2018-07-25 16:18:41 +00:00
|
|
|
{% for res in comm.responses %}
|
|
|
|
{{ self::comment(comm=res) }}
|
|
|
|
{% endfor %}
|
|
|
|
</div>
|
|
|
|
{% endmacro %}
|
2018-09-05 15:19:57 +00:00
|
|
|
{% macro tabs(links, titles, selected) %}
|
|
|
|
<div class="tabs">
|
|
|
|
{% for link in links %}
|
|
|
|
{% set idx = loop.index0 %}
|
|
|
|
<a href="{{ link }}" {% if loop.index == selected %}class="selected"{% endif %}>{{ titles[idx] | _ }}</a>
|
|
|
|
{% endfor %}
|
|
|
|
</div>
|
2018-09-05 16:03:30 +00:00
|
|
|
{% endmacro %}
|
2018-09-04 16:09:31 +00:00
|
|
|
{% macro feather(name) %}
|
|
|
|
<svg class="feather">
|
|
|
|
<use xlink:href="/static/images/feather-sprite.svg#{{ name }}"/>
|
|
|
|
</svg>
|
2018-09-05 15:19:57 +00:00
|
|
|
{% endmacro %}
|
2018-09-05 17:03:02 +00:00
|
|
|
{% macro home_feed(title, link, articles) %}
|
2018-09-05 17:28:23 +00:00
|
|
|
{% if articles | length > 0 %}
|
|
|
|
<h2>{{ title | _ }} — <a href="{{ link }}">{{ "View all" | _ }}</a></h2>
|
|
|
|
<div class="cards spaced">
|
|
|
|
{% for article in articles %}
|
|
|
|
{{ macros::post_card(article=article) }}
|
|
|
|
{% endfor %}
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2018-09-05 17:03:02 +00:00
|
|
|
{% endmacro %}
|
2018-09-09 20:41:55 +00:00
|
|
|
{% macro avatar(user, size="small", pad=true) %}
|
2018-09-29 17:29:22 +00:00
|
|
|
<div
|
2018-09-09 20:41:55 +00:00
|
|
|
class="avatar {{ size }} {% if pad %}padded{% endif %}"
|
|
|
|
style="background-image: url('{{ user.avatar }}');"
|
|
|
|
title="{{ "{{ name }}'s avatar" | _(name=user.name) }}"
|
|
|
|
aria-label="{{ "{{ name }}'s avatar" | _(name=user.name) }}"
|
2018-09-29 17:29:22 +00:00
|
|
|
></div>
|
2018-09-09 20:41:55 +00:00
|
|
|
{% endmacro %}
|