Files
nairobi/app/helpers/application_helper.rb
Javi Martín 8e6df7f5d9 Use Active Storage to render custom images
Just like we did with regular attachments, we're moving the logic to
generate URLs out of the model.

Note we're changing the `image_path_for` helper method in order to
return a `polymorphic_path` because sometimes it's used in combination
with `favicon_link_tag`, and `favicon_link_tag` doesn't automatically
generate a polymorphic URL when given an `ActiveStorage::Attachment`
record.
2022-02-23 18:21:38 +01:00

83 lines
2.5 KiB
Ruby

module ApplicationHelper
# if current path is /debates current_path_with_query_params(foo: "bar") returns /debates?foo=bar
# notice: if query_params have a param which also exist in current path,
# it "overrides" (query_params is merged last)
def current_path_with_query_params(query_parameters)
url_for(request.query_parameters.merge(query_parameters).merge(only_path: true))
end
def rtl?
%i[ar fa he].include?(I18n.locale)
end
def markdown(text)
return text if text.blank?
# See https://github.com/vmg/redcarpet for options
render_options = {
filter_html: false,
hard_wrap: true,
link_attributes: { target: "_blank" }
}
renderer = Redcarpet::Render::HTML.new(render_options)
extensions = {
autolink: true,
fenced_code_blocks: true,
lax_spacing: true,
no_intra_emphasis: true,
strikethrough: true,
superscript: true
}
AdminLegislationSanitizer.new.sanitize(Redcarpet::Markdown.new(renderer, extensions).render(text))
end
def wysiwyg(text)
WYSIWYGSanitizer.new.sanitize(text)
end
def author_of?(authorable, user)
return false if authorable.blank? || user.blank?
authorable.author_id == user.id
end
def back_link_to(destination = :back, text = t("shared.back"))
link_to destination, class: "back" do
tag.span(class: "icon-angle-left") + text
end
end
def image_path_for(filename)
image = SiteCustomization::Image.image_for(filename)
if image
polymorphic_path(image)
else
filename
end
end
def content_block(name, locale = I18n.locale)
SiteCustomization::ContentBlock.block_for(name, locale)
end
def self.asset_data_base64(path)
asset = (Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application))
.find_asset(path)
throw "Could not find asset '#{path}'" if asset.nil?
base64 = Base64.encode64(asset.to_s).gsub(/\s+/, "")
"data:#{asset.content_type};base64,#{Rack::Utils.escape(base64)}"
end
def render_custom_partial(partial_name)
controller_action = @virtual_path.split("/").last
custom_partial_path = "custom/#{@virtual_path.remove(controller_action)}#{partial_name}"
render custom_partial_path if lookup_context.exists?(custom_partial_path, [], true)
end
def management_controller?
controller.class.to_s.include?("Management")
end
end