Module: ViteRailsLegacy::TagHelpers

Defined in:
lib/vite_rails_legacy/tag_helpers.rb

Overview

Public: Allows to render HTML tags for scripts and styles processed by Vite.

Instance Method Summary collapse

Instance Method Details

#vite_asset_path(name, **options) ⇒ Object

Public: Resolves the path for the specified Vite asset.

Example:

<%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"


21
22
23
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 21

def vite_asset_path(name, **options)
  path_to_asset vite_manifest.path_for(name, **options)
end

#vite_asset_url(name, **options) ⇒ Object

Public: Resolves the url for the specified Vite asset.

Example:

<%= vite_asset_url 'calendar.css' %> # => "https://example.com/vite/assets/calendar-1016838bab065ae1e122.css"


29
30
31
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 29

def vite_asset_url(name, **options)
  url_to_asset vite_manifest.path_for(name, **options)
end

#vite_client_tagObject

Public: Renders a script tag for vite/client to enable HMR in development.



6
7
8
9
10
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 6

def vite_client_tag
  return unless src = vite_manifest.vite_client_src

  "<script#{tag_options({src: src, type: "module"}, escape: true)}></script>".html_safe
end

#vite_image_tag(name, **options) ⇒ Object

Public: Renders an <img> tag for the specified Vite asset.



61
62
63
64
65
66
67
68
69
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 61

def vite_image_tag(name, **options)
  if options[:srcset] && !options[:srcset].is_a?(String)
    options[:srcset] = options[:srcset].map do |src_name, size|
      "#{vite_asset_path(src_name)} #{size}"
    end.join(", ")
  end

  image_tag(vite_asset_path(name), options)
end

#vite_javascript_tag(*names, type: "module", asset_type: :javascript, skip_preload_tags: false, skip_style_tags: false, crossorigin: "anonymous", media: "screen", **options) ⇒ Object

Public: Renders a <script> tag for the specified Vite entrypoints.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 34

def vite_javascript_tag(*names,
  type: "module",
  asset_type: :javascript,
  skip_preload_tags: false,
  skip_style_tags: false,
  crossorigin: "anonymous",
  media: "screen",
  **options)
  entries = vite_manifest.resolve_entries(*names, type: asset_type)
  tags = javascript_include_tag(*entries.fetch(:scripts), crossorigin: crossorigin, type: type, extname: false, **options)
  tags << vite_preload_tag(*entries.fetch(:imports), crossorigin: crossorigin, **options) unless skip_preload_tags
  tags << stylesheet_link_tag(*entries.fetch(:stylesheets), media: media, crossorigin: crossorigin, **options) unless skip_style_tags
  tags
end

#vite_react_refresh_tagObject

Public: Renders a script tag to enable HMR with React Refresh.



13
14
15
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 13

def vite_react_refresh_tag
  vite_manifest.react_refresh_preamble&.html_safe
end

#vite_stylesheet_tag(*names, **options) ⇒ Object

Public: Renders a <link> tag for the specified Vite entrypoints.



55
56
57
58
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 55

def vite_stylesheet_tag(*names, **options)
  style_paths = names.map { |name| vite_asset_path(name, type: :stylesheet) }
  stylesheet_link_tag(*style_paths, **options)
end

#vite_typescript_tag(*names, **options) ⇒ Object

Public: Renders a <script> tag for the specified Vite entrypoints.



50
51
52
# File 'lib/vite_rails_legacy/tag_helpers.rb', line 50

def vite_typescript_tag(*names, **options)
  vite_javascript_tag(*names, asset_type: :typescript, **options)
end