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!"
- #
- A
- F
- G
- I
- L
- N
- R
- T
Attributes
| [R] | fragment |
Class Public methods
fragment_by_canonicalizing_content(content) Link
Source: show
# File actiontext/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 = {}) Link
Source: show
# File actiontext/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
Instance Public methods
==(other) Link
Source: show
# File actiontext/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) Link
Source: show
# File actiontext/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(*) Link
Source: show
# File actiontext/lib/action_text/content.rb, line 137 def as_json(*) to_html end
attachables() Link
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]
Source: show
# File actiontext/lib/action_text/content.rb, line 84 def attachables @attachables ||= attachment_nodes.map do |node| ActionText::Attachable.from_node(node) end end
attachment_galleries() Link
Source: show
# File actiontext/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() Link
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...
Source: show
# File actiontext/lib/action_text/content.rb, line 62 def attachments @attachments ||= attachment_nodes.map do |node| attachment_for_node(node) end end
gallery_attachments() Link
Source: show
# File actiontext/lib/action_text/content.rb, line 74 def gallery_attachments @gallery_attachments ||= attachment_galleries.flat_map(&:attachments) end
inspect() Link
Source: show
# File actiontext/lib/action_text/content.rb, line 141 def inspect "#<#{self.class.name} #{to_html.truncate(25).inspect}>" end
links() Link
Extracts links from the HTML fragment:
html = '<a href="http://example.com/">Example</a>'
content = ActionText::Content.new(html)
content.links # => ["http://example.com/"]
Source: show
# File actiontext/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) Link
Source: show
# File actiontext/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) Link
Source: show
# File actiontext/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() Link
Source: show
# File actiontext/lib/action_text/content.rb, line 121 def to_html fragment.to_html end
to_partial_path() Link
Source: show
# File actiontext/lib/action_text/content.rb, line 129 def to_partial_path "action_text/contents/content" end
to_plain_text() Link
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!"
Source: show
# File actiontext/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() Link
Source: show
# File actiontext/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