microblog.pub/templates/utils.html

331 lines
13 KiB
HTML
Raw Normal View History

2018-06-23 10:01:31 +00:00
{% macro display_actor_inline(follower, size=50) -%}
2018-07-22 10:53:09 +00:00
{% if follower and follower.id %}
2018-07-22 10:42:36 +00:00
<a class="actor-box" href="{{follower | url_or_id | get_url }}" style="clear:both;">
<span style="float:left;padding-right:15px;">
{% if not follower.icon %}
2018-06-23 10:01:31 +00:00
<img class="actor-icon" src="/static/nopic.png" style="width:{{ size }}px">
{% else %}
2018-07-04 23:08:39 +00:00
<img class="actor-icon" src="{{ follower.icon.url | get_actor_icon_url(size) }}" style="width:{{ size }}px;">{% endif %}
</span>
2018-06-22 07:35:18 +00:00
<div class="actor-inline">
<div style="font-weight:bold">{{ follower.name or follower.preferredUsername }}</div>
2018-07-22 10:42:36 +00:00
<small class="lcolor">@{{ follower.preferredUsername }}@{{ follower | url_or_id | get_url | domain }}</small>
</div>
</a>
2018-07-22 10:53:09 +00:00
{% endif %}
{%- endmacro %}
2018-07-01 10:49:16 +00:00
{% macro display_note(obj, perma=False, ui=False, likes=[], shares=[], meta={}, no_color=False) -%}
2019-04-15 19:20:14 +00:00
2018-07-19 23:12:02 +00:00
{% if meta.actor %}
2019-04-15 19:20:14 +00:00
{% set actor = meta.actor %}
2018-07-19 23:12:02 +00:00
{% else %}
2019-04-15 19:20:14 +00:00
{% set actor = obj.attributedTo | get_actor %}
2018-07-19 23:12:02 +00:00
{% endif %}
2018-07-29 18:24:46 +00:00
2019-04-14 17:17:54 +00:00
{% if session.logged_in %}
2019-04-15 19:20:14 +00:00
{% set perma_id = obj.id | permalink_id %}
2019-04-14 17:17:54 +00:00
2019-04-15 19:20:14 +00:00
{% if request.args.get('older_than') %}
{% set redir = request.path + "?older_than=" + request.args.get('older_than') + "#activity-" + perma_id %}
{% elif request.args.get('newer_than') %}
{% set redir = request.path + "?newer_than=" + request.args.get('newer_than') + "#activity-" + perma_id %}
{% else %}
{% set redir = request.path + "#activity-" + perma_id %}
{% endif %}
2019-04-14 17:17:54 +00:00
2019-04-15 19:20:14 +00:00
{% set aid = obj.id | quote_plus %}
{% endif %}
2019-04-14 17:17:54 +00:00
{% set real_end_time = obj.closed or obj.endTime %}
2019-04-14 17:17:54 +00:00
2018-07-21 21:16:40 +00:00
<div class="note-box">
2018-06-29 20:16:26 +00:00
<div class="note h-entry" id="activity-{{ obj.id | permalink_id }}">
2018-05-18 18:41:41 +00:00
<div class="h-card p-author">
2018-07-22 10:42:36 +00:00
<a class="u-url u-uid no-hover" href="{{ actor | url_or_id | get_url }}"><img class="u-photo" src="{% if not actor.icon %}/static/nopic.png{% else %}{{ actor.icon.url | get_actor_icon_url(50) }}{% endif %}">
2018-05-18 18:41:41 +00:00
</a>
<data class="p-name" value="{{ actor.name or actor.preferredUsername }}"></data>
2018-05-18 18:41:41 +00:00
</div>
<div class="note-wrapper">
2018-07-29 18:24:46 +00:00
<div style="clear:both;height:20px;">
2018-07-29 17:38:59 +00:00
<a href="{{ actor | url_or_id | get_url }}" style="margin:0;text-decoration:none;margin: 0;text-decoration: none;display: block;width: 80%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;float: left;" class="no-hover"><strong>{{ actor.name or actor.preferredUsername }}</strong>
2018-09-02 17:51:40 +00:00
<span class="l">@{% if not no_color and obj.id | is_from_outbox %}<span class="pcolor">{{ actor.preferredUsername }}</span>{% else %}{{ actor.preferredUsername }}{% endif %}@{% if not no_color and obj.id | is_from_outbox %}<span class="pcolor">{{ actor | url_or_id | get_url | domain }}</span>{% else %}{{ actor | url_or_id | get_url | domain }}{% endif %}</span></a>
2018-05-18 18:41:41 +00:00
{% if not perma %}
2018-07-29 17:38:59 +00:00
<span style="float:right;width: 20%;text-align: right;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;display: block;">
<i class="fe fe-unlock" title="Public" style="font-size:1em;padding-right:5px;"></i>
2018-07-30 07:41:04 +00:00
<a rel="noopener" class="u-url u-uid note-permalink l" href="{{ obj | url_or_id | get_url }}">
2018-06-29 20:16:26 +00:00
<time class="dt-published" title="{{ obj.published }}" datetime="{{ obj.published }}">{{ obj.published | format_timeago }}</time></a>
2018-05-18 18:41:41 +00:00
</span>
{% endif %}
2018-07-29 18:24:46 +00:00
</div>
2019-04-15 19:20:14 +00:00
2019-07-05 07:49:49 +00:00
{% if obj.summary %}<p class="p-summary">{{ obj.summary | clean | safe }}</p>{% endif %}
2018-09-02 17:43:09 +00:00
{% if obj | has_type('Video') %}
<div class="note-video">
<video controls preload="metadata" src="{{ obj.url | get_video_link }}" width="480">
</video>
</div>
{% endif %}
2019-04-15 19:20:14 +00:00
<div class="note-container{% if perma %} perma{%endif%} p-name e-content">
2019-04-18 22:33:59 +00:00
{% if obj | has_type(['Article', 'Page']) %}
2019-04-15 19:20:14 +00:00
{{ obj.name }} <a href="{{ obj | url_or_id | get_url }}">{{ obj | url_or_id | get_url }}</a>
{% elif obj | has_type('Question') %}
2019-04-15 19:20:14 +00:00
{{ obj.content | clean | safe }}
2019-07-04 21:22:38 +00:00
2019-04-15 19:20:14 +00:00
<ul style="list-style:none;padding:0;">
2019-07-02 20:25:07 +00:00
{% set total_votes = obj | get_total_answers_count(meta) %}
2019-04-15 19:20:14 +00:00
{% for oneOf in obj.oneOf %}
{% set pct = 0 %}
{% if total_votes > 0 %}
2019-07-02 20:25:07 +00:00
{% set cnt = oneOf.name | get_answer_count(obj, meta) %}
2019-04-15 19:20:14 +00:00
{% set pct = cnt * 100.0 / total_votes %}
{% endif %}
<li class="answer">
2019-07-04 22:29:51 +00:00
{% if session.logged_in and not meta.voted_for and not (real_end_time | gtnow) and not (obj.id | is_from_outbox) %}
2019-07-04 21:22:38 +00:00
<span><form action="/api/vote" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="choice" value="{{ oneOf.name }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">vote</button>
</form></span>{% endif %}
2019-04-15 19:20:14 +00:00
<span class="answer-bar color-menu-background" style="width:{{pct}}%;"></span>
<span class="answer-text">
<span>{{ '%0.0f'| format(pct) }}%</span>
2019-07-04 21:22:38 +00:00
{{ oneOf.name }} {% if oneOf.name == meta.voted_for %}(your vote){% endif %}
2019-04-15 19:20:14 +00:00
</span>
</li>
{% endfor %}
2019-04-14 17:17:54 +00:00
</ul>
<p><small>
{% if real_end_time | gtnow %}
2019-07-02 20:25:07 +00:00
Ended {{ real_end_time | format_timeago }} with <strong>{{ total_votes }}</strong> vote{% if total_votes | gtone %}s{% endif %}.
2019-04-14 17:17:54 +00:00
{% else %}
2019-07-02 20:25:07 +00:00
Ends {{ real_end_time | format_timeago }} (<strong>{{ total_votes }}</strong> vote{% if total_votes | gtone %}s{% endif %} as of now).
2019-04-14 17:17:54 +00:00
{% endif %}
</small></p>
2018-07-29 18:24:46 +00:00
{% else %}
2018-06-29 20:16:26 +00:00
{{ obj.content | clean | safe }}
2018-07-29 18:24:46 +00:00
{% endif %}
2018-05-18 18:41:41 +00:00
</div>
2018-07-29 18:24:46 +00:00
{% if obj.attachment and obj | has_type('Note') %}
2018-05-18 18:41:41 +00:00
<div style="padding:20px 0;">
2018-06-29 20:16:26 +00:00
{% if obj.attachment | not_only_imgs %}
2018-09-02 17:43:09 +00:00
<h3 class="l">Attachments</h3>
<ul style="padding:0;">
2018-05-18 18:41:41 +00:00
{% endif %}
2018-06-29 20:16:26 +00:00
{% for a in obj.attachment %}
{% if (a.mediaType and a.mediaType.startswith("image/")) or (a.type and a.type == 'Image') %}
<a href="{{ a.url | get_attachment_url(None) }}"><img src="{{a.url | get_attachment_url(720) }}" class="img-attachment"></a>
2018-09-02 17:43:09 +00:00
{% elif (a.mediaType and a.mediaType.startswith("video/")) %}
<li><video controls preload="metadata" src="{{ a.url }}" width="480"></video></li>
2018-05-18 18:41:41 +00:00
{% else %}
2018-07-23 21:56:22 +00:00
<li><a href="{{a.url }}" class="l">{% if a.filename %}{{ a.filename }}{% else %}{{ a.url }}{% endif %}</a></li>
2018-05-18 18:41:41 +00:00
{% endif %}
{% endfor %}
2018-06-29 20:16:26 +00:00
{% if obj.attachment | not_only_imgs %}
2018-05-18 18:41:41 +00:00
</ul>
{% endif %}
</div>
{% endif %}
2018-07-21 21:16:40 +00:00
2018-07-29 18:24:46 +00:00
{% if meta and meta.og_metadata and obj | has_type('Note') %}
2018-07-21 21:16:40 +00:00
{% for og in meta.og_metadata %}
2018-08-05 11:55:48 +00:00
{% if og.url %}
2018-07-21 21:16:40 +00:00
<a href="{{ og.url }}" class="og-link" style="margin:30px 0;clear:both;display: flex;">
<div>
<img style="width:100px;border-radius:3px;" src="{{ og.image | get_og_image_url }}">
</div>
<div style="padding:0 20px;">
<strong>{{ og.title }}</strong>
<p>{{ og.description | truncate(80) }}</p>
<small>{{ og.site_name }}</small>
</div>
</a>
2018-08-05 11:55:48 +00:00
{% endif %}
2018-07-21 21:16:40 +00:00
{% endfor %}
{% endif %}
2018-05-18 18:41:41 +00:00
<div class="bottom-bar">
2019-07-04 22:29:51 +00:00
{% if perma %}
<span class="perma-item" style="float:left;padding:5px;">{{ obj.published | format_time }}</span>
2018-07-15 19:33:59 +00:00
{% if not (obj.id | is_from_outbox) %}
<a class="bar-icon" href="{{ obj | url_or_id | get_url }}">
<i class="fe fe-link-external"></i>
</a>
2018-07-15 19:12:57 +00:00
{% endif %}
2018-07-15 19:33:59 +00:00
{% else %}
<a class="bar-icon" style="font-size:1.5em;" href="{{ obj | url_or_id | get_url }}">
<i class="fe fe-link-external"></i>
</a>
2018-07-15 19:12:57 +00:00
{% endif %}
2018-07-15 19:12:57 +00:00
{% if meta.count_reply and obj.id | is_from_outbox %}<a class ="bar-item" href="{{ obj.url | get_url }}"><strong>{{ meta.count_reply }}</strong> replies</a>
2018-07-14 10:29:46 +00:00
{% elif meta.count_reply and session.logged_in %}
<a class ="bar-item" href="/admin/thread?oid={{aid}}"><strong>{{ meta.count_reply }}</strong> replies</a>{% endif %}
{% if not perma and meta.count_boost and obj.id | is_from_outbox %}<a class ="bar-item" href="{{ obj.url | get_url }}"><strong>{{ meta.count_boost }}</strong> boosts</a>{% endif %}
{% if not perma and meta.count_like and obj.id | is_from_outbox %}<a class ="bar-item" href="{{ obj.url | get_url }}"><strong>{{ meta.count_like }}</strong> likes</a>{% endif %}
2018-07-14 10:29:46 +00:00
{% if session.logged_in %}
{% if ui%}
2018-07-14 10:14:08 +00:00
2018-06-29 20:16:26 +00:00
{% if meta.boosted %}
<form action="/api/undo" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="id" value="{{ meta.boosted }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">unboost</button>
</form>
2018-05-18 18:41:41 +00:00
{% else %}
<form action="/api/boost" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-icon" style="font-size:1.5em;">
<i class="fe fe-share" title="Public"></i>
</button>
</form>
2018-05-18 18:41:41 +00:00
{% endif %}
2018-06-29 20:16:26 +00:00
{% if meta.liked %}
<form action="/api/undo" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="id" value="{{ meta.liked }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">unlike</button>
</form>
2018-05-18 18:41:41 +00:00
{% else %}
<form action="/api/like" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">like</button>
</form>
2018-05-18 18:41:41 +00:00
{% endif %}
2019-07-10 21:32:48 +00:00
{% if meta.bookmarked or request.path == url_for("admin_bookmarks") %}
<form action="/api/bookmark" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="undo" value="yes">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">unbookmark</button>
</form>
{% else %}
<form action="/api/bookmark" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">bookmark</button>
</form>
{% endif %}
2018-05-18 18:41:41 +00:00
{% endif %}
2018-06-04 16:53:44 +00:00
2018-06-29 20:16:26 +00:00
{% if obj.id | is_from_outbox %}
2018-06-04 16:53:44 +00:00
<form action="/api/note/delete" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="id" value="{{ obj.id }}">
2018-06-04 16:53:44 +00:00
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">delete</button>
</form>
{% if meta.pinned %}
<form action="/api/note/unpin" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">unpin</button>
</form>
{% else %}
<form action="/api/note/pin" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
<input type="hidden" name="id" value="{{ obj.id }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">pin</button>
</form>
{% endif %}
2018-06-04 16:53:44 +00:00
{% else %}
<form action="/api/block" class="action-form" method="POST">
<input type="hidden" name="redirect" value="{{ redir }}">
2018-06-29 20:16:26 +00:00
<input type="hidden" name="actor" value="{{ actor.id }}">
2018-06-04 16:53:44 +00:00
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="bar-item">block</button>
</form>
{% endif %}
<a class="bar-item" href="/admin/new?reply={{ aid }}">reply</a>
2018-06-04 16:53:44 +00:00
{% endif %}
2018-05-18 18:41:41 +00:00
</div>
2018-06-03 21:36:16 +00:00
{% if likes or shares %}
<div style="padding-top:20px;" class="pure-g">
{% if likes %}
2018-06-03 21:36:16 +00:00
<div class="pure-u-1-2">
2018-08-28 20:14:48 +00:00
<h4 style="font-weight:normal"><strong>{{ likes|length }}</strong> likes</h4>{% for like in likes %}
{{ display_actor_inline(like) }}
{% endfor %}
</div>
{% endif %}
2018-06-03 21:36:16 +00:00
{% if shares %}
<div class="pure-u-1-2">
2018-08-28 20:14:48 +00:00
<h4 style="font-weight:normal"><strong>{{ shares|length }}</strong> boosts</h4>{% for boost in shares %}
2018-06-03 21:36:16 +00:00
{{ display_actor_inline(boost) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
</div>
</div>
2018-07-21 21:16:40 +00:00
</div>
2018-05-18 18:41:41 +00:00
{%- endmacro %}
2018-06-03 19:28:06 +00:00
2018-06-03 21:36:16 +00:00
{% macro display_thread(thread, likes=[], shares=[]) -%}
2018-06-03 19:28:06 +00:00
{% for reply in thread %}
{% if reply._requested %}
2018-06-29 20:16:26 +00:00
{{ display_note(reply.activity.object, perma=True, ui=False, likes=likes, shares=shares, meta=reply.meta) }}
2018-06-03 19:28:06 +00:00
{% else %}
2018-06-29 20:16:26 +00:00
{{ display_note(reply.activity.object, perma=False, ui=True, meta=reply.meta) }}
2018-06-03 19:28:06 +00:00
{% endif %}
{% endfor %}
{% endmacro -%}
2018-07-06 21:53:33 +00:00
{% macro display_pagination(older_than, newer_than) -%}
<div class="clear">
{% if older_than %}
2018-07-24 21:44:16 +00:00
<a href="{{ config.BASE_URL }}{{ request.path }}?older_than={{older_than}}{% if request.args.get('limit') %}&limit={{request.args.get('limit')}}{% endif %}" rel="next" class="older-link lcolor"><span class="pcolor">🡨</span> Older</a>
2018-07-06 21:53:33 +00:00
{% endif %}
{% if newer_than %}
2018-07-24 21:44:16 +00:00
<a href="{{ config.BASE_URL }}{{ request.path }}?newer_than={{newer_than}}{% if request.args.get('limit') %}&limit={{request.args.get('limit')}}{% endif %}" rel="prev" class="newer-link lcolor">Newer <span class="pcolor">🡪</span></a>
2018-07-06 21:53:33 +00:00
{% endif %}
</div>
{% endmacro -%}
{% macro display_pagination_links(older_than, newer_than) -%}
{% if older_than %}<link rel="next" href="{{ config.BASE_URL }}{{ request.path }}?older_than={{older_than}}">{% endif %}
{% if newer_than %}<link rel="prev" href="{{ config.BASE_URL }}{{ request.path }}?newer_than={{newer_than}}">{% endif %}
{% endmacro -%}