module SiteHelper
|
|
def frontend_javascript_importmap_tags(only_use = %w[application])
|
|
only_use = Array(only_use)
|
|
importmap_json = JSON.parse(Rails.application.importmap.to_json(resolver: self))["imports"].select { |k, v| only_use.include?(k) }
|
|
safe_join [
|
|
javascript_inline_importmap_tag(JSON.pretty_generate({ "imports" => importmap_json })),
|
|
javascript_module_preload_tag(*importmap_json.map { |v| v[1] }),
|
|
javascript_import_module_tag(only_use[0])
|
|
], "\n"
|
|
end
|
|
|
|
|
|
def node_title(node)
|
|
parts = [ node.page_title.blank? ? node.title : node.page_title ]
|
|
parts << t(:client_name)
|
|
parts.uniq.join(" - ")
|
|
rescue
|
|
t(:client_name)
|
|
end
|
|
|
|
|
|
def render_responsive_picture(asset = nil, alt: "", lazy: false, fetchpriority: nil)
|
|
return unless asset
|
|
|
|
widths = [ 800, 1600, 2400 ]
|
|
metadata = asset.file.metadata
|
|
|
|
image_tag(rails_storage_proxy_path(asset.file.variant(resize_to_limit: [ 1600, nil ], format: "webp")),
|
|
alt: alt,
|
|
srcset: responsive_srcset(asset, widths),
|
|
sizes: "100vw",
|
|
width: metadata[:width],
|
|
height: metadata[:height],
|
|
loading: ("lazy" if lazy),
|
|
fetchpriority: fetchpriority,
|
|
decoding: "async")
|
|
end
|
|
|
|
|
|
def responsive_srcset(asset, widths)
|
|
widths.map { |w|
|
|
"#{rails_storage_proxy_path(asset.file.variant(resize_to_limit: [ w, nil ], format: "webp"))} #{w}w"
|
|
}.join(", ")
|
|
end
|
|
end
|