bsky descriptions with newlines

This commit is contained in:
Dylan Knutson
2025-08-12 21:31:59 +00:00
parent 171ddd430b
commit 2de7f85a99
3 changed files with 170 additions and 6 deletions

View File

@@ -6,6 +6,11 @@ module Domain::BlueskyPostHelper
include ActionView::Helpers::UrlHelper
include HelpersInterface
class FacetPart < T::Struct
const :type, Symbol
const :value, String
end
sig do
params(text: String, facets: T.nilable(T::Array[T.untyped])).returns(
T.nilable(String),
@@ -22,7 +27,7 @@ module Domain::BlueskyPostHelper
return text
end
result_parts = []
result_parts = T.let([], T::Array[FacetPart])
last_end = 0
# Sort facets by start position to handle them in order
@@ -40,7 +45,9 @@ module Domain::BlueskyPostHelper
# Add text before this facet
if facet.byteStart > last_end
before_text = text.byteslice(last_end, facet.byteStart - last_end)
result_parts << before_text if before_text
if before_text
result_parts << FacetPart.new(type: :text, value: before_text)
end
end
# Extract the facet text using byteslice for accurate character extraction
@@ -50,7 +57,7 @@ module Domain::BlueskyPostHelper
# Process the facet
rendered_facet = render_facet(facet, facet_text)
result_parts << rendered_facet
result_parts << FacetPart.new(type: :facet, value: rendered_facet)
last_end = facet.byteEnd
end
@@ -58,10 +65,22 @@ module Domain::BlueskyPostHelper
# Add remaining text after the last facet
if last_end < text.bytesize
remaining_text = text.byteslice(last_end, text.bytesize - last_end)
result_parts << remaining_text if remaining_text
if remaining_text
result_parts << FacetPart.new(type: :text, value: remaining_text)
end
end
result_parts.join.html_safe
result_parts
.map do |part|
case part.type
when :text
part.value.gsub("\n", "<br />")
when :facet
part.value
end
end
.join
.html_safe
end
private

View File

@@ -1,4 +1,4 @@
<span class="flex items-center gap-1 text-slate-500 hover:text-slate-700">
<span class="inline-block items-center gap-1 text-slate-500 hover:text-slate-700">
<%= link_to(
local_assigns[:url],
target: "_blank",