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!"
Methods
- #
- A
- F
- G
- I
- L
- N
- R
- T
Attributes
[R] | fragment |
Class Public methods
fragment_by_canonicalizing_content(content) Link
# File actiontext/lib/action_text/content.rb, line 33 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
# File actiontext/lib/action_text/content.rb, line 40 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
append_attachables(attachables) Link
as_json(*) Link
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]
attachment_galleries() Link
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...
gallery_attachments() Link
inspect() Link
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/"]
render_attachment_galleries(&block) Link
# File actiontext/lib/action_text/content.rb, line 109 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
# File actiontext/lib/action_text/content.rb, line 98 def render_attachments(**options, &block) content = fragment.replace(ActionText::Attachment.tag_name) do |node| if node.key?("content") sanitized_content = sanitize_content_attachment(node.remove_attribute("content").to_s) node["content"] = sanitized_content if sanitized_content.present? end block.call(attachment_for_node(node, **options)) end self.class.new(content, canonicalize: false) end
to_html() Link
to_partial_path() Link
to_plain_text() Link
Returns a plain-text version of the markup contained by the content, with tags removed but HTML entities encoded.
content = ActionText::Content.new("<h1>Funny times!</h1>")
content.to_plain_text # => "Funny times!"
content = ActionText::Content.new("<div onclick='action()'>safe<script>unsafe</script></div>")
content.to_plain_text # => "safeunsafe"
NOTE: that the returned string is not HTML safe and should not be rendered in browsers.
content = ActionText::Content.new("<script>alert()</script>")
content.to_plain_text # => "<script>alert()</script>"