intent/templates/comments/history.html
Alec Perkins 604c2bbf91
Some checks failed
ci / test (push) Failing after 1m6s
ci / deploy (push) Failing after 0s
Harden for launch: limits, CSP, moderation, admin 2FA (Phase 5)
- Rate limits in the shared cache for comments, issues, uploads and
  invites; a limited HTMX reply keeps the draft.
- Content-Security-Policy (self only, no inline script or style, bucket
  origin for images and frames) and Permissions-Policy on every page.
  htmx configured not to inject styles or eval.
- Moderation: deactivating a user ends their sessions and keeps their
  content; deleted accounts show as "ghost"; reserved usernames; the
  admin won't delete an org's last owner.
- Admin requires a TOTP code (django-otp), with add_admin_totp to enrol.
- Email provider chosen by environment through django-anymail.
- Playwright browser tests: axe WCAG 2.1 AA on every page in light and
  dark, no CSP violations, keyboard walkthrough, theme toggle. Explicit
  Canvas/CanvasText on :root fixes dark-mode contrast detection.
- bin/start creates the data dir if missing; docs/operations.md runbook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 10:51:06 -04:00

26 lines
1.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "projects/base.html" %}
{% block page_title %}Comment history{% endblock %}
{% block project_content %}
<p><a href="{{ back }}">Back to the comment</a></p>
<h1>Edits to {{ comment.author.username|default:"ghost" }}’s comment</h1>
{% if comment.is_deleted %}
<p>This comment was deleted, along with its history.</p>
{% else %}
<section aria-labelledby="current-heading">
<h2 id="current-heading">Current, edited <time datetime="{{ comment.edited_at|date:'c' }}">{{ comment.edited_at|date:"j M Y, H:i" }}</time></h2>
<pre class="quote">{{ comment.body }}</pre>
</section>
{% for version in versions reversed %}
<section aria-labelledby="version-{{ version.pk }}">
<h2 id="version-{{ version.pk }}">
{% if forloop.last %}Original{% else %}Earlier version{% endif %},
replaced <time datetime="{{ version.created_at|date:'c' }}">{{ version.created_at|date:"j M Y, H:i" }}</time>
</h2>
<pre class="quote">{{ version.body }}</pre>
</section>
{% endfor %}
{% endif %}
{% endblock %}