module GameHelper 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