{% macro render_thread(thread, current_user) -%} <ul class="comments mt-4 mb-0"> {% for r in thread.replies %} <li class="row my-2 mx-0"> <div class="col-md-1 p-1"> <a href="{{ url_for('users.profile', username=r.author.username) }}"> <img class="img-responsive user-photo img-thumbnail img-thumbnail-1" src="{{ r.author.getProfilePicURL() }}"> </a> </div> <div class="col pr-0"> <div class="card"> <div class="card-header"> <a class="author {{ r.author.rank.name }}" href="{{ url_for('users.profile', username=r.author.username) }}"> {{ r.author.display_name }} </a> <a name="reply-{{ r.id }}" class="text-muted float-right" href="{{ url_for('threads.view', id=thread.id) }}#reply-{{ r.id }}"> {{ r.created_at | datetime }} </a> </div> <div class="card-body"> {% if r.checkPerm(current_user, "DELETE_REPLY") %} <a class="float-right btn btn-secondary btn-sm ml-2" href="{{ url_for('threads.delete_reply', id=thread.id, reply=r.id) }}"> <i class="fas fa-trash"></i> </a> {% endif %} {% if current_user == thread.author and thread.review and thread.replies[0] == r %} <a class="float-right btn btn-primary btn-sm ml-2" href="{{ thread.review.package.getReviewURL() }}"> <i class="fas fa-edit"></i> </a> {% elif r.checkPerm(current_user, "EDIT_REPLY") %} <a class="float-right btn btn-primary btn-sm ml-2" href="{{ url_for('threads.edit_reply', id=thread.id, reply=r.id) }}"> <i class="fas fa-edit"></i> </a> {% endif %} {{ r.comment | markdown }} </div> </div> </div> </li> {% endfor %} </ul> {% if thread.locked %} <p class="my-0 py-4 text-center"> <i class="fas fa-lock mr-3"></i> {{ _("This thread has been locked by a moderator.") }} </p> {% endif %} {% if current_user.is_authenticated %} <div class="row mt-0 mb-4 comments mx-0"> <div class="col-md-1 p-1"> <img class="img-responsive user-photo img-thumbnail img-thumbnail-1" src="{{ current_user.getProfilePicURL() }}"> </div> <div class="col"> <div class="card"> <div class="card-header {{ current_user.rank.name }}"> {{ current_user.display_name }} <a name="reply"></a> </div> {% if not current_user.canCommentRL() %} <div class="card-body"> <textarea class="form-control" readonly disabled>{{ _("Please wait before commenting again.") }}</textarea><br /> <input class="btn btn-primary" type="submit" disabled value="Comment" /> </div> {% elif not thread.checkPerm(current_user, "COMMENT_THREAD") %} <div class="card-body"> {% if thread.locked %} <textarea class="form-control" readonly disabled>{{ _("This thread has been locked.") }}</textarea><br /> {% else %} <textarea class="form-control" readonly disabled>{{ _("You don't have permission to post.") }}</textarea><br /> {% endif %} <input class="btn btn-primary" type="submit" disabled value="Comment" /> </div> {% else %} <form method="post" action="{{ url_for('threads.view', id=thread.id)}}" class="card-body"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" /> <textarea class="form-control markdown" required maxlength=2000 name="comment"></textarea><br /> <input class="btn btn-primary" type="submit" value="Comment" /> </form> {% endif %} </div> </div> </div> {% endif %} {% endmacro %} {% macro render_threadlist(threads, compact=False) -%} {% for t in threads %} <a class="list-group-item list-group-item-action" href="{{ url_for('threads.view', id=t.id) }}"> {% if compact %} {% if t.private %}🔒 {% endif %} <strong>{{ t.title }}</strong> by {{ t.author.display_name }} {% else %} <div class="row"> <div class="col-sm"> <span class="mr-3"> {% if not t.review and t.private %} <i class="fas fa-lock" style="color:#ffac33;"></i> {% elif not t.review %} <i class="fas fa-comment-alt" style="color:#666;"></i> {% elif t.review.recommends %} <i class="fas fa-thumbs-up" style="color:#6f6;"></i> {% else %} <i class="fas fa-thumbs-down" style="color:#f66;"></i> {% endif %} </span> <strong>{{ t.title }}</strong> by {{ t.author.display_name }} </div> <div class="col-sm"> {% if t.package %} {{ _("%(title)s by %(author)s", title="<b>" | safe + t.package.title + "</b>" | safe, author=t.package.author.display_name) }} {% endif %} </div> <div class="col-sm-auto text-muted text-right"> {{ t.created_at | datetime }} </div> </div> {% endif %} </a> {% else %} <p class="list-group-item"><i>No threads found</i></p> {% endfor %} {% endmacro %}