Files
once-campfire/app/views/messages/_message.html.erb
T
Jeremy Daer 6ba5d2ece3 Link URLs only in a message's text
auto_link finds URLs and email addresses with regular expressions over
the rendered html, which can't tell an attribute value from text, so it
could put a link inside an attribute. Hand it each text node on its own,
escaped the way the serializer writes text, after the final sanitize, so
links only ever land between tags. Write the result with
preserve_newline so a code block keeps its leading blank lines.

Bump the presentation cache version so nothing rendered the old way is
served again.

Backport of 7ea05e1, 4e29c6e and 9b271d0 from #364. 1.5.2 has no
plain-text fragment cache, so only the message partial's version moves.
2026-10-17 00:46:37 -07:00

35 lines
1.8 KiB
ERB

<%# Be sure to check/update messages/_template.html.erb when changing this file %>
<%# Bump this version when the message presentation filters change what they emit. Editing this line changes the template digest, which busts BOTH this fragment cache and the collection cache that keys on this partial's digest (helper Ruby changes alone don't). %>
<% cache [ message, "presentation-v7" ] do %>
<%= message_tag message do %>
<h2 class="message__day-separator"><%= local_datetime_tag message.created_at, style: :date %></h2>
<figure class="avatar message__avatar">
<%= avatar_tag message.creator %>
</figure>
<turbo-frame id="<%= dom_id(message, :edit) %>">
<div class="message__body">
<div class="message__body-content">
<div class="message__meta">
<h3 class="message__heading">
<span class="message__author" title="<%= message.creator.title %>">
<strong data-reply-target="author"><%= message.creator.name %></strong>
</span>
<%= link_to message_timestamp(message, class: "message__timestamp"), room_at_message_path(message.room, message), target: "_top",
class: "message__permalink" %>
<span class="message__room">
<%= link_to room_display_name(message.room, for_user: nil), room_at_message_path(message.room, message), target: "_top", data: { reply_target: "link" } %>
</span>
</h3>
<%= render "messages/actions", message: message, url: room_at_message_url(message.room, message) %>
</div>
<%= render "messages/presentation", message: message %>
<%= render "messages/boosts/boosts", message: message %>
</div>
</div>
</turbo-frame>
<% end %>
<% end %>