class ActionText::Content
Action Text Content¶ ↑
The ActionText::Content
class wraps an HTML fragment to add support for parsing, rendering and serialization. It can be used to extract links and attachments, convert the fragment to plain text, or serialize the fragment to the database.
The ActionText::RichText record serializes the ‘body` attribute as ActionText::Content
.
class Message < ActiveRecord::Base has_rich_text :content end message = Message.create!(content: "<h1>Funny times!</h1>") body = message.content.body # => #<ActionText::Content "<div class=\"trix-conte..."> body.to_s # => "<h1>Funny times!</h1>" body.to_plain_text # => "Funny times!"
Attributes
fragment[R]
Public Class Methods
fragment_by_canonicalizing_content(content)
click to toggle source
# File lib/action_text/content.rb, line 30 def fragment_by_canonicalizing_content(content) fragment = ActionText::Attachment.fragment_by_canonicalizing_attachments(content) fragment = ActionText::AttachmentGallery.fragment_by_canonicalizing_attachment_galleries(fragment) fragment end
new(content = nil, options = {})
click to toggle source
# File lib/action_text/content.rb, line 37 def initialize(content = nil, options = {}) options.with_defaults! canonicalize: true if options[:canonicalize] @fragment = self.class.fragment_by_canonicalizing_content(content) else @fragment = ActionText::Fragment.wrap(content) end end
Public Instance Methods
==(other)
click to toggle source
# File lib/action_text/content.rb, line 145 def ==(other) if self.class == other.class to_html == other.to_html elsif other.is_a?(self.class) to_s == other.to_s end end
append_attachables(attachables)
click to toggle source
# File lib/action_text/content.rb, line 90 def append_attachables(attachables) attachments = ActionText::Attachment.from_attachables(attachables) self.class.new([self.to_s.presence, *attachments].compact.join("\n")) end
as_json(*)
click to toggle source
# File lib/action_text/content.rb, line 137 def as_json(*) to_html end
attachables()
click to toggle source
Extracts +ActionText::Attachable+s from the HTML fragment:
attachable = ActiveStorage::Blob.first html = %Q(<action-text-attachment sgid="#{attachable.attachable_sgid}" caption="Captioned"></action-text-attachment>) content = ActionText::Content.new(html) content.attachables # => [attachable]
# File lib/action_text/content.rb, line 84 def attachables @attachables ||= attachment_nodes.map do |node| ActionText::Attachable.from_node(node) end end
attachment_galleries()
click to toggle source
# File lib/action_text/content.rb, line 68 def attachment_galleries @attachment_galleries ||= attachment_gallery_nodes.map do |node| attachment_gallery_for_node(node) end end
attachments()
click to toggle source
Extracts +ActionText::Attachment+s from the HTML fragment:
attachable = ActiveStorage::Blob.first html = %Q(<action-text-attachment sgid="#{attachable.attachable_sgid}" caption="Captioned"></action-text-attachment>) content = ActionText::Content.new(html) content.attachments # => [#<ActionText::Attachment attachable=#<ActiveStorage::Blob...
# File lib/action_text/content.rb, line 62 def attachments @attachments ||= attachment_nodes.map do |node| attachment_for_node(node) end end
gallery_attachments()
click to toggle source
# File lib/action_text/content.rb, line 74 def gallery_attachments @gallery_attachments ||= attachment_galleries.flat_map(&:attachments) end
inspect()
click to toggle source
# File lib/action_text/content.rb, line 141 def inspect "#<#{self.class.name} #{to_html.truncate(25).inspect}>" end
links()
click to toggle source
Extracts links from the HTML fragment:
html = '<a href="http://example.com/">Example</a>' content = ActionText::Content.new(html) content.links # => ["http://example.com/"]
# File lib/action_text/content.rb, line 52 def links @links ||= fragment.find_all("a[href]").map { |a| a["href"] }.uniq end
render_attachment_galleries(&block)
click to toggle source
# File lib/action_text/content.rb, line 102 def render_attachment_galleries(&block) content = ActionText::AttachmentGallery.fragment_by_replacing_attachment_gallery_nodes(fragment) do |node| block.call(attachment_gallery_for_node(node)) end self.class.new(content, canonicalize: false) end
render_attachments(**options, &block)
click to toggle source
# File lib/action_text/content.rb, line 95 def render_attachments(**options, &block) content = fragment.replace(ActionText::Attachment.tag_name) do |node| block.call(attachment_for_node(node, **options)) end self.class.new(content, canonicalize: false) end
to_html()
click to toggle source
# File lib/action_text/content.rb, line 121 def to_html fragment.to_html end
to_partial_path()
click to toggle source
# File lib/action_text/content.rb, line 129 def to_partial_path "action_text/contents/content" end
to_plain_text()
click to toggle source
Returns the content as plain text with all HTML tags removed.
content = ActionText::Content.new("<h1>Funny times!</h1>") content.to_plain_text # => "Funny times!"
# File lib/action_text/content.rb, line 113 def to_plain_text render_attachments(with_full_attributes: false, &:to_plain_text).fragment.to_plain_text end
to_rendered_html_with_layout()
click to toggle source
# File lib/action_text/content.rb, line 125 def to_rendered_html_with_layout render layout: "action_text/contents/content", partial: to_partial_path, formats: :html, locals: { content: self } end
to_s()
click to toggle source
# File lib/action_text/content.rb, line 133 def to_s to_rendered_html_with_layout end
to_trix_html()
click to toggle source
# File lib/action_text/content.rb, line 117 def to_trix_html render_attachments(&:to_trix_attachment).to_html end
Private Instance Methods
attachment_for_node(node, with_full_attributes: true)
click to toggle source
# File lib/action_text/content.rb, line 162 def attachment_for_node(node, with_full_attributes: true) attachment = ActionText::Attachment.from_node(node) with_full_attributes ? attachment.with_full_attributes : attachment end
attachment_gallery_for_node(node)
click to toggle source
# File lib/action_text/content.rb, line 167 def attachment_gallery_for_node(node) ActionText::AttachmentGallery.from_node(node) end
attachment_gallery_nodes()
click to toggle source
# File lib/action_text/content.rb, line 158 def attachment_gallery_nodes @attachment_gallery_nodes ||= ActionText::AttachmentGallery.find_attachment_gallery_nodes(fragment) end
attachment_nodes()
click to toggle source
# File lib/action_text/content.rb, line 154 def attachment_nodes @attachment_nodes ||= fragment.find_all(ActionText::Attachment.tag_name) end