mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
97 lines
5.0 KiB
HTML
97 lines
5.0 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Кандидаты{% endblock %}
|
|
{% block content %}
|
|
<h4 class="mb-3">Кандидаты</h4>
|
|
|
|
{% if error %}<div class="alert alert-danger py-2">❌ {{ error }}</div>{% endif %}
|
|
|
|
<form class="row g-2 mb-3" method="get" action="/candidates">
|
|
<div class="col-auto">
|
|
<select name="direction" class="form-select" onchange="this.form.submit()">
|
|
<option value="">Все направления</option>
|
|
{% for d in directions %}
|
|
<option value="{{ d }}" {% if direction == d %}selected{% endif %}>{{ d }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-auto">
|
|
<select name="status" class="form-select" onchange="this.form.submit()">
|
|
<option value="new" {% if status=='new' %}selected{% endif %}>Черновики (new)</option>
|
|
<option value="rejected" {% if status=='rejected' %}selected{% endif %}>Отклонённые</option>
|
|
<option value="published" {% if status=='published' %}selected{% endif %}>Опубликованные</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-auto">
|
|
<select name="own" class="form-select" onchange="this.form.submit()">
|
|
<option value="" {% if own=='' %}selected{% endif %}>Все посты</option>
|
|
<option value="1" {% if own=='1' %}selected{% endif %}>⭐ Только свои</option>
|
|
<option value="0" {% if own=='0' %}selected{% endif %}>Только внешние</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-auto">
|
|
<button class="btn btn-sm btn-outline-secondary" type="submit">Применить</button>
|
|
</div>
|
|
</form>
|
|
|
|
<div id="post-list">
|
|
{% for p in posts %}
|
|
<div class="card mb-3" id="post-{{ p.id }}">
|
|
<div class="card-body">
|
|
<div class="d-flex justify-content-between">
|
|
<span class="badge bg-secondary">{{ p.direction or '?' }}</span>
|
|
<small class="text-muted">{{ p.source_name }} · {{ p.published_at | dt }}</small>
|
|
</div>
|
|
<div class="post-text mt-2">{{ (p.text or '')[:2000] | markdown }}</div>
|
|
{% if p.is_own %}<span class="badge bg-warning text-dark">⭐ СВОЙ</span>{% endif %}
|
|
{% if p.relevance %}<span class="badge bg-{{ 'success' if p.relevance=='critical' else 'info' }}">{{ p.relevance }}</span>{% endif %}
|
|
{% if p.interest %}<span class="badge bg-warning text-dark">interest {{ p.interest }}</span>{% endif %}
|
|
<small class="text-muted ms-2">👁 {{ p.views }} 💬 {{ p.reactions_total }}</small>
|
|
{% if p.media_path %}
|
|
<span class="badge bg-light text-dark ms-2">🖼 медиа</span>
|
|
{% set media_src = '/media/' ~ p.media_path.split('/')[-1] %}
|
|
{% set media_ext = p.media_path.lower().rsplit('.', 1)[-1] if '.' in p.media_path else '' %}
|
|
{% if media_ext in ['jpg','jpeg','png','gif','webp'] %}
|
|
<a href="{{ media_src }}" target="_blank" title="Открыть полноразмер">
|
|
<img src="{{ media_src }}" class="img-fluid rounded mt-2 d-block" style="max-height:180px" alt="медиа поста">
|
|
</a>
|
|
{% elif media_ext in ['mp4','webm','mov'] %}
|
|
<video src="{{ media_src }}" controls class="mt-2 d-block" style="max-height:180px"></video>
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if p.fwd_from_channel_id %}<span class="badge bg-light text-dark ms-2">↩︎ форвард</span>{% endif %}
|
|
<div class="mt-2">
|
|
{% if p.status == 'new' %}
|
|
<form class="d-inline" method="post" action="/posts/{{ p.id }}/approve">
|
|
<div class="mb-2">
|
|
<textarea class="form-control form-control-sm" name="comment" rows="2"
|
|
placeholder="Комментарий к посту (по желанию) — будет первым в канале"></textarea>
|
|
</div>
|
|
{% if p.is_own %}
|
|
<div class="mb-2">
|
|
<small class="text-muted">Рассылка (fan-out):</small>
|
|
{% for d in directions %}
|
|
<div class="form-check form-check-inline">
|
|
<input class="form-check-input" type="checkbox" name="dirs" value="{{ d }}" id="dir-{{ p.id }}-{{ d }}"
|
|
{% if d == (p.direction or 'linux') %}checked{% endif %}>
|
|
<label class="form-check-label" for="dir-{{ p.id }}-{{ d }}">{{ d }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
<button class="btn btn-sm btn-success" type="submit">✅ Опубликовать</button>
|
|
</form>
|
|
<form class="d-inline" method="post" action="/posts/{{ p.id }}/reject">
|
|
<button class="btn btn-sm btn-outline-danger" type="submit">🚫 Отклонить</button>
|
|
</form>
|
|
{% elif p.status == 'rejected' %}
|
|
<span class="text-danger">Отклонён</span>
|
|
{% endif %}
|
|
<a class="btn btn-sm btn-outline-secondary" href="{{ p.url }}" target="_blank">Исходник</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<div class="alert alert-info">Нет постов</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endblock %} |