bsky descriptions with newlines
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user