{% extends "core/base.html" %} {% load lyric_extras %} {% block title_text %}Billpost{% endblock title_text %} {% block header_text %}Billpost{% endblock header_text %} {% block content %} {# Hidden owner span — preserves the existing FT contract that reads the #} {# post owner via #id_post_owner. Visible owner attribution moved into the #} {# self line ("just me, …" / "& me, …") below. #}
{% if viewer_is_owner %} {# Owner viewing — owner-centric "shared between … & me" prose, via the #} {# shared header (also used by the room game-views POST chat). #} {% include "apps/billboard/_partials/_post_header.html" with header_title=post.title other_recipients=other_recipients self_user=post.owner %} {% else %} {# Invitee viewing — "shared with" prose centred on the viewer #} {# (request.user). Sole invitee collapses to a single line; the #} {# "created by …" line attributes the post to its founder. Bespoke #} {# (the shared header is owner-style), but reuses the chip partial. #}

{{ post.title }}

{% if other_recipients %}

shared with {% for r in other_recipients %}{% include "apps/billboard/_partials/_post_recipient.html" with r=r %}{% if not forloop.last %}, {% endif %}{% endfor %}

& me, {{ request.user|at_handle }} the {{ request.user.active_title_display }}

{% else %}

shared with me, {{ request.user|at_handle }} the {{ request.user.active_title_display }}

{% endif %}

created by {{ post.owner|at_handle }} the {{ post.owner.active_title_display }}

{% endif %} {# @mailman invite Lines have no in-line OK/BYE block — the Line's prose #} {# embeds a post-attribution anchor (see apps.billboard.mail. #} {# INVITE_TEMPLATE) routing to the owner's bud page, where clicking the #} {# glowing sea sub-btn accepts the invite on visit. No explicit accept/ #} {# decline surface. Per-line markup lives in _post_line.html (shared w. #} {# the room game-views carousel POST view + epic:room_post AJAX append). #} {# System-author Posts (note unlocks, tax ledger) — input is read-only:#} {# the user can't respond, and the placeholder calls that out. View_ #} {# post hard-rejects POSTs to these kinds; the post_save Line signal #} {# is the safety net for ORM-level / API writes that bypass the view. #} {% if post.kind == 'note_unlock' or post.kind == 'tax_ledger' or post.kind == 'mail_acceptance' %}
{% else %}
{% csrf_token %}
{% if form.errors %}
{{ form.errors.text.0 }}
{% endif %}
{% endif %} {# Bud btn (bottom-left) + slide-out recipient field — async share. #} {# Suppressed on system-author Posts (note unlock + tax ledger threads) #} {# since friend-invites don't apply to system-authored threads. #} {% if post.kind != 'note_unlock' and post.kind != 'tax_ledger' and post.kind != 'mail_acceptance' %} {% include "apps/billboard/_partials/_bud_panel.html" %} {% endif %} {# Gear btn (bottom-right) + menu — NVM always; DEL (owner) / BYE #} {# (invitee) gated to user-Posts. #} {% include "apps/billboard/_partials/_post_gear.html" %}
{% endblock content %} {% block scripts %} {% include "apps/dashboard/_partials/_scripts.html" %} {% endblock scripts %}