forked from 4ducky/4ducky
Same design, layout, URLs and features as the PHP version: browse grid, image view with AJAX comments, BBCode, likes, uploads (file, URL and bookmarklet), quicktagger, profile, block list, inbox, invites, Hall of Ducks, Truhe, abuse reports and the admin tools. - Parameterized SQL, escaped templates (askama), argon2 passwords, server-side sessions, CSRF tokens on every write, strict script CSP - SSRF-safe remote image fetching, magic-byte upload checks - Self-hosted captcha replaces reCAPTCHA v1; analytics/social widgets removed - Vanilla JS replaces jQuery and its plugins with the same DOM behaviour - Reverse proxy support (frontend_path, trust_proxy, secure_cookies) - Admin CLI: admin, settings, invites See README.md for running it and the full list of changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
84 lines
2.3 KiB
HTML
84 lines
2.3 KiB
HTML
{% include "header.html" %}
|
|
|
|
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
|
<tr>
|
|
<td width="50%" valign="top">
|
|
<h2>Newest Comments:</h2>
|
|
<div style="width:100%">
|
|
{%- for c in comments %}
|
|
<div class="comment">
|
|
<div class="commentHead">
|
|
<img class="avatarSmall" width="16" height="16" src="/{{ c.avatar }}"/>
|
|
<a href="/user/{{ c.name_enc }}">{{ c.name }}</a>
|
|
at {{ c.date }}
|
|
[bild:<a href="/all/view/{{ c.keyword }}">{{ c.keyword }}</a>]
|
|
<div style="float:right;" id="del">
|
|
<a href="#" data-delcomment="{{ c.id }}">[x]</a>
|
|
</div>
|
|
</div>
|
|
{{ c.content }}
|
|
</div>
|
|
{%- endfor %}
|
|
</div></td>
|
|
|
|
<td width="50%" valign="top">
|
|
{%- if !spammers.is_empty() %}
|
|
<h2 style="margin:5px;" >Newest Spammer:</h2>
|
|
{%- for u in spammers %}
|
|
|
|
<div class="userInfo" style="margin:5px;">
|
|
<img class="avatar" width="40" height="40" src="/{{ u.avatar }}"/>
|
|
<div class="name">
|
|
<strong>
|
|
<a href="/user/{{ u.name_enc }}">{{ u.name }}</a>
|
|
</strong>
|
|
</div>
|
|
<div class="info">
|
|
ID: <strong>{{ u.id }}</strong> /
|
|
Images: <strong>{{ u.images }}</strong>
|
|
{%- if let Some(w) = u.website %}/
|
|
Website: <strong><a href="{{ w }}" target="_blank">
|
|
{{ w }}
|
|
</a></strong>
|
|
{%- endif %}
|
|
</div>
|
|
<div style="clear:both;"></div>
|
|
</div>
|
|
|
|
{%- endfor %}
|
|
{%- else %}
|
|
<h2 style="margin:5px;" >No Spammer</h2>
|
|
{%- endif %}
|
|
|
|
{%- if !abuses.is_empty() %}
|
|
<h2 style="margin:5px;" >Newest Abuses:</h2>
|
|
{%- for a in abuses %}
|
|
{%- if let Some(t) = a.thumb %}
|
|
|
|
<div class="userInfo" style="margin:5px;">
|
|
<img style="float:left; margin:2px;" width="64" height="64" src="{{ t }}"/>
|
|
|
|
<div class="info">
|
|
Reason: <strong>{{ a.reason }}</strong> /
|
|
Email: <strong>{{ a.email }}</strong>
|
|
</div>
|
|
<div class="info">
|
|
<strong><a href="/all/view/{{ a.keyword }}" > >> Thread</a> </strong>
|
|
</div>
|
|
<div style="clear:both;"></div>
|
|
</div>
|
|
|
|
{%- else %}
|
|
<div class="userInfo" style="padding:5px;">{% if let Some(h) = a.imagelink_href %}<a href="{{ h }}" rel="nofollow noopener">{{ a.imagelink }}</a>{% else %}{{ a.imagelink }}{% endif %}<br>Reason: <strong>{{ a.reason }}</strong> /
|
|
Email: <strong>{{ a.email }}</strong></div>
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
{%- else %}
|
|
<h2 style="margin:5px;" >No Abuses</h2>
|
|
{%- endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
{% include "footer.html" %}
|