Question/poll support

This commit is contained in:
Thomas Sileo
2019-04-14 19:17:54 +02:00
parent 4c0e81224f
commit be7648c9ed
7 changed files with 361 additions and 41 deletions

View File

@@ -12,9 +12,13 @@
<h3 style="padding-bottom: 30px">Replying to {{ content }}</h3>
{{ utils.display_thread(thread) }}
{% else %}
<h3 style="padding-bottom:20px;">New note</h3>
{% if request.args.get("question") == "1" %}
<h3 style="padding-bottom:20px;">New question <small><a href="/admin/new">make it a note?</a></small></h3>
{% else %}
<h3 style="padding-bottom:20px;">New note <small><a href="/admin/new?question=1">make it a question?</a></small></h3>
{% endif %}
<form action="/api/new_note" method="POST" enctype="multipart/form-data">
{% endif %}
<form action="/api/new_{% if request.args.get("question") == "1" %}question{%else%}note{%endif%}" method="POST" enctype="multipart/form-data">
<input type="hidden" name="redirect" value="/">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if reply %}<input type="hidden" name="reply" value="{{reply}}">{% endif %}
@@ -27,7 +31,32 @@
<textarea name="content" rows="10" cols="50" autofocus="autofocus" designMode="on">{{ content }}</textarea>
<input type="file" name="file">
{% if request.args.get("question") == "1" %}
<div style="margin-top:20px;">
<p>Open for: <select name="open_for">
<option value="30">30 minutes</option>
<option value="60">1 hour</option>
<option value="360">6 hour</option>
<option value="1440" selected>1 day</option>
<option value="4320">3 days</option>
<option value="10080">7 days</option>
</select></p>
<input type="hidden" name="of" value="oneOf" />
<!--
<p><select name="of">
<option value="oneOf">Single choice</option>
<option value="anyOf">Multiple choices</option>
</select></p>-->
{% for i in range(4) %}
<p><input type="text" name="answer{{i}}" placeholder="Answer #{{i+1}}"></p>
{% endfor %}
</div>
{% endif %}
<input type="submit" value="post">
</div>
</form>

View File

@@ -15,8 +15,6 @@
{% endif %}
{%- endmacro %}
{% macro display_note(obj, perma=False, ui=False, likes=[], shares=[], meta={}, no_color=False) -%}
{% if meta.actor %}
{% set actor = meta.actor %}
@@ -24,6 +22,20 @@
{% set actor = obj.attributedTo | get_actor %}
{% endif %}
{% if session.logged_in %}
{% set perma_id = obj.id | permalink_id %}
{% 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 %}
<div class="note-box">
<div class="note h-entry" id="activity-{{ obj.id | permalink_id }}">
@@ -58,11 +70,67 @@
{{ obj.name }} <a href="{{ obj | url_or_id | get_url }}">{{ obj | url_or_id | get_url }}</a>
{% elif obj | has_type('Question') %}
{{ obj.content | clean | safe }}
<ul>
{% if obj.id | is_from_outbox %}
<ul style="list-style:none;padding:0;">
{% set total_votes = [0] %}
{% for oneOf in obj.oneOf %}
<li>{{ oneOf.name }} ({{ oneOf.replies.totalItems }})</li>
{% if oneOf.replies %}
{% if total_votes.append(total_votes.pop() + oneOf.replies.totalItems) %}{% endif %}
{% endif %}
{% endfor %}
{% for oneOf in obj.oneOf %}
{% set pct = 0 %}
{% if total_votes[0] > 0 and oneOf.replies %}
{% set pct = oneOf.replies.totalItems * 100.0 / total_votes[0] %}
{% endif %}
<li class="answer">
<span class="answer-bar color-menu-background" style="width:{{pct}}%;"></span>
<span class="answer-text">
<span>{{ '%0.0f'| format(pct) }}%</span>
{{ oneOf.name }}
</span>
</li>
{% endfor %}
</ul>
<p><small>
{% if obj.closed %}
Ended {{ obj.endTime | format_timeago }} with <strong>{{ total_votes[0] }}</strong> vote{% if total_votes[0] | gtone %}s{% endif %}.
{% else %}
Ends {{ obj.endTime | format_timeago }} (<strong>{{ total_votes[0] }}</strong> vote{% if total_votes[0] | gtone %}s{% endif %} as of now).
{% endif %}
</small></p>
{% else %}
<ul style="list-style:none;padding:0;">
{% for oneOf in obj.oneOf %}
<li class="answer">
<span class="answer-text">
{% if not meta.voted_for and not obj.endTime | gtnow %}
<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>
{% else %}
<span>???</span>
{% endif %}
{{ oneOf.name }} {% if oneOf.name == meta.voted_for %}(your vote){% endif %}
</span>
</li>
{% endfor %}
<p><small>{% if obj.endTime | gtnow %}This question ended {{ obj.endTime | format_timeago }}.</small></p>
{% else %}This question ends {{ obj.endTime | format_timeago }}{% endif %}
</small></p>
</ul>
{% endif %}
{% else %}
{{ obj.content | clean | safe }}
{% endif %}
@@ -120,17 +188,6 @@
<a class ="bar-item" href="{{ obj | url_or_id | get_url }}">permalink</a>
{% endif %}
{% if session.logged_in %}
{% set perma_id = obj.id | permalink_id %}
{% 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 %}
{% set aid = obj.id | quote_plus %}
{% endif %}