From 30443121286c3bb970d4d24bf7f24472498e9633 Mon Sep 17 00:00:00 2001 From: Javan Makhmali Date: Wed, 3 Oct 2018 14:41:47 -0400 Subject: [PATCH] Move attachment rendering to a helper Fixes #5 --- app/helpers/action_text/content_helper.rb | 24 +++++++++++++++++++ .../action_text/content/_layout.html.erb | 2 +- app/views/active_storage/blobs/_blob.html.erb | 5 ++-- lib/action_text/content.rb | 17 +------------ lib/action_text/engine.rb | 4 ++-- 5 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 app/helpers/action_text/content_helper.rb diff --git a/app/helpers/action_text/content_helper.rb b/app/helpers/action_text/content_helper.rb new file mode 100644 index 0000000000..6d00eee648 --- /dev/null +++ b/app/helpers/action_text/content_helper.rb @@ -0,0 +1,24 @@ +module ActionText + module ContentHelper + def render_action_text_content(content) + content = content.render_attachments do |attachment| + unless attachment.in?(content.gallery_attachments) + attachment.node.tap do |node| + node.inner_html = render(attachment, in_gallery: false).chomp + end + end + end + + content = content.render_attachment_galleries do |attachment_gallery| + render(layout: attachment_gallery, object: attachment_gallery) do + attachment_gallery.attachments.map do |attachment| + attachment.node.inner_html = render(attachment, in_gallery: true).chomp + attachment.to_html + end.join("").html_safe + end.chomp + end + + content.to_html + end + end +end diff --git a/app/views/action_text/content/_layout.html.erb b/app/views/action_text/content/_layout.html.erb index b8c8ab6fc6..60d65cd0d5 100644 --- a/app/views/action_text/content/_layout.html.erb +++ b/app/views/action_text/content/_layout.html.erb @@ -1,3 +1,3 @@
- <%= sanitize document %> + <%= sanitize render_action_text_content(content) %>
diff --git a/app/views/active_storage/blobs/_blob.html.erb b/app/views/active_storage/blobs/_blob.html.erb index c7c70c110e..6e4105d5cf 100644 --- a/app/views/active_storage/blobs/_blob.html.erb +++ b/app/views/active_storage/blobs/_blob.html.erb @@ -1,8 +1,9 @@ +<% transformations = { resize: local_assigns[:in_gallery] ? "800x600>" : "1024x768>" } %>
attachment--<%= blob.filename.extension %>"> <% if blob.variable? %> - <%= image_tag blob.variant(resize: "1024x768>") %> + <%= image_tag blob.variant(transformations) %> <% elsif blob.previewable? %> - <%= image_tag blob.preview(resize: "1024x768>") %> + <%= image_tag blob.preview(transformations) %> <% end %>
diff --git a/lib/action_text/content.rb b/lib/action_text/content.rb index 71d9e98657..4061613e35 100644 --- a/lib/action_text/content.rb +++ b/lib/action_text/content.rb @@ -81,23 +81,8 @@ module ActionText fragment.to_html end - def to_rendered_html - render_attachments do |attachment| - attachment.node.tap do |node| - node.inner_html = ActionText.renderer.render(attachment) - end - end.render_attachment_galleries do |attachment_gallery| - ActionText.renderer.render(layout: attachment_gallery, object: attachment_gallery, formats: "html") do - attachment_gallery.attachments.map do |attachment| - attachment.node.inner_html = ActionText.renderer.render(attachment) - attachment.to_html - end.join("").html_safe - end - end.to_html - end - def to_rendered_html_with_layout - ActionText.renderer.render(partial: "action_text/content/layout", locals: { document: to_rendered_html }) + ActionText.renderer.render(partial: "action_text/content/layout", locals: { content: self }) end def to_s diff --git a/lib/action_text/engine.rb b/lib/action_text/engine.rb index 71db6d6a26..4055bbbb29 100644 --- a/lib/action_text/engine.rb +++ b/lib/action_text/engine.rb @@ -25,7 +25,7 @@ module ActionText initializer "action_text.helper" do ActiveSupport.on_load(:action_controller_base) do - helper ActionText::TagHelper + helper ActionText::Engine.helpers end end @@ -33,7 +33,7 @@ module ActionText config.after_initialize do |app| ActionText.renderer ||= ApplicationController.renderer - # FIXME: ApplicationController should have a per-request specific renderer + # FIXME: ApplicationController should have a per-request specific renderer # that's been set with the request.env env, and ActionText should just piggyback off # that by default rather than doing this work directly. ApplicationController.before_action do