модуль ActionView::Helpers::AssetTagHelper
Помощники тегов ресурсов Action View
Этот модуль предоставляет методы для создания HTML-кода, связывающего представления с ресурсами, такими как изображения, JavaScript, таблицы стилей и ленты. Эти методы не проверяют, существуют ли ресурсы, прежде чем создавать на них ссылки:
image_tag("rails.png")
# => <img src="/assets/rails.png" />
stylesheet_link_tag("application")
# => <link href="/assets/application.css?body=1" rel="stylesheet" />
Общедоступные методы экземпляра
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 612
def audio_tag(*sources)
multiple_sources_tag_builder("audio", sources)
end Возвращает HTML-тег audio для sources. Если sources — строка, будет возвращен один тег audio. Если sources — массив, будет возвращен тег audio с вложенными тегами source для каждого источника. sources могут быть полными путями, файлами из общедоступного каталога аудио или вложениями Active Storage.
Если последний параметр — хеш, с его помощью можно добавить атрибуты HTML.
audio_tag("sound")
# => <audio src="/audios/sound"></audio>
audio_tag("sound.wav")
# => <audio src="/audios/sound.wav"></audio>
audio_tag("sound.wav", autoplay: true, controls: true)
# => <audio autoplay="autoplay" controls="controls" src="/audios/sound.wav"></audio>
audio_tag("sound.wav", "sound.mid")
# => <audio><source src="/audios/sound.wav" /><source src="/audios/sound.mid" /></audio>
Блобы Active Storage (аудиофайлы, загруженные пользователями вашего приложения):
audio_tag(user.name_pronunciation_audio) # => <audio src="/rails/active_storage/blobs/.../name_pronunciation_audio.mp3"></audio>
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 279
def auto_discovery_link_tag(type = :rss, url_options = {}, tag_options = {})
if !(type == :rss || type == :atom || type == :json) && tag_options[:type].blank?
raise ArgumentError.new("You should pass :type tag_option key explicitly, because you have passed #{type} type other than :rss, :atom, or :json.")
end
tag(
"link",
"rel" => tag_options[:rel] || "alternate",
"type" => tag_options[:type] || Template::Types[type].to_s,
"title" => tag_options[:title] || type.to_s.upcase,
"href" => url_options.is_a?(Hash) ? url_for(url_options.merge(only_path: false)) : url_options
)
end Возвращает тег ссылки, который браузеры и программы для чтения лент могут использовать для автоматического обнаружения ленты RSS, Atom или JSON. type может быть :rss (по умолчанию), :atom или :json. Настройте параметры ссылки в формате url_for с помощью url_options. Сам тег LINK можно настроить через tag_options.
Параметры
-
:rel— задает отношение этой ссылки, по умолчанию «alternate» -
:type— заменяет автоматически сгенерированный MIME-тип -
:title— задает заголовок ссылки, по умолчанию используетсяtype
Примеры
auto_discovery_link_tag
# => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/controller/action" />
auto_discovery_link_tag(:atom)
# => <link rel="alternate" type="application/atom+xml" title="ATOM" href="http://www.currenthost.com/controller/action" />
auto_discovery_link_tag(:json)
# => <link rel="alternate" type="application/json" title="JSON" href="http://www.currenthost.com/controller/action" />
auto_discovery_link_tag(:rss, {action: "feed"})
# => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/controller/feed" />
auto_discovery_link_tag(:rss, {action: "feed"}, {title: "My RSS"})
# => <link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.currenthost.com/controller/feed" />
auto_discovery_link_tag(:rss, {controller: "news", action: "feed"})
# => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/news/feed" />
auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", {title: "Example RSS"})
# => <link rel="alternate" type="application/rss+xml" title="Example RSS" href="http://www.example.com/feed.rss" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 320
def favicon_link_tag(source = "favicon.ico", options = {})
tag("link", {
rel: "icon",
type: "image/x-icon",
href: path_to_image(source, skip_pipeline: options.delete(:skip_pipeline))
}.merge!(options.symbolize_keys))
end Возвращает тег ссылки на favicon, управляемый конвейером ресурсов.
Если на странице нет ссылки, подобной той, что создает этот помощник, браузеры автоматически запрашивают /favicon.ico и кэшируют файл, если запрос выполнен успешно. Если favicon изменится, обновить его будет сложно.
Для более гибкого управления приложения могут поручить конвейеру ресурсов управление favicon, сохранив файл в app/assets/images и используя этот помощник для создания соответствующего тега ссылки.
Помощник принимает имя файла favicon в качестве первого аргумента (по умолчанию «favicon.ico»), а также поддерживает параметры :rel и :type для переопределения значений по умолчанию — «icon» и «image/x-icon» соответственно:
favicon_link_tag # => <link href="/assets/favicon.ico" rel="icon" type="image/x-icon" /> favicon_link_tag 'myicon.ico' # => <link href="/assets/myicon.ico" rel="icon" type="image/x-icon" />
Mobile Safari ищет другой тег ссылки, указывающий на изображение, которое будет использоваться, если добавить страницу на главный экран устройства iOS. Следующий вызов создаст такой тег:
favicon_link_tag 'mb-icon.png', rel: 'apple-touch-icon', type: 'image/png' # => <link href="/assets/mb-icon.png" rel="apple-touch-icon" type="image/png" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 449
def image_tag(source, options = {})
options = options.symbolize_keys
check_for_image_tag_errors(options)
skip_pipeline = options.delete(:skip_pipeline)
options[:src] = resolve_asset_source("image", source, skip_pipeline)
if options[:srcset] && !options[:srcset].is_a?(String)
options[:srcset] = options[:srcset].map do |src_path, size|
src_path = path_to_image(src_path, skip_pipeline: skip_pipeline)
"#{src_path} #{size}"
end.join(", ")
end
options[:width], options[:height] = extract_dimensions(options.delete(:size)) if options[:size]
options[:loading] ||= image_loading if image_loading
options[:decoding] ||= image_decoding if image_decoding
tag("img", options)
end Возвращает HTML-тег изображения для source. source может быть полным путем, файлом или вложением Active Storage.
Параметры
Атрибуты HTML можно добавить с помощью options. Для удобства и соответствия стандартам options поддерживает дополнительные ключи:
-
:size— задается как"#{width}x#{height}"или"#{number}", поэтому"30x45"становитсяwidth="30" height="45", а"50"становитсяwidth="50" height="50".:sizeбудет проигнорирован, если значение имеет неправильный формат. -
:srcset— если задан как хеш или массив пар[source, descriptor], перед формированием строки для каждого пути изображения будет выполнено раскрытие.
Примеры
Ресурсы (изображения, входящие в состав приложения):
image_tag("icon")
# => <img src="/assets/icon" />
image_tag("icon.png")
# => <img src="/assets/icon.png" />
image_tag("icon.png", size: "16x10", alt: "Edit Entry")
# => <img src="/assets/icon.png" width="16" height="10" alt="Edit Entry" />
image_tag("/icons/icon.gif", size: "16")
# => <img src="/icons/icon.gif" width="16" height="16" />
image_tag("/icons/icon.gif", height: '32', width: '32')
# => <img height="32" src="/icons/icon.gif" width="32" />
image_tag("/icons/icon.gif", class: "menu_icon")
# => <img class="menu_icon" src="/icons/icon.gif" />
image_tag("/icons/icon.gif", data: { title: 'Rails Application' })
# => <img data-title="Rails Application" src="/icons/icon.gif" />
image_tag("icon.png", srcset: { "icon_2x.png" => "2x", "icon_4x.png" => "4x" })
# => <img src="/assets/icon.png" srcset="/assets/icon_2x.png 2x, /assets/icon_4x.png 4x">
image_tag("pic.jpg", srcset: [["pic_1024.jpg", "1024w"], ["pic_1980.jpg", "1980w"]], sizes: "100vw")
# => <img src="/assets/pic.jpg" srcset="/assets/pic_1024.jpg 1024w, /assets/pic_1980.jpg 1980w" sizes="100vw">
Блобы Active Storage (изображения, загруженные пользователями вашего приложения):
image_tag(user.avatar) # => <img src="/rails/active_storage/blobs/.../tiger.jpg" /> image_tag(user.avatar.variant(resize_to_limit: [100, 100])) # => <img src="/rails/active_storage/representations/.../tiger.jpg" /> image_tag(user.avatar.variant(resize_to_limit: [100, 100]), size: '100') # => <img width="100" height="100" src="/rails/active_storage/representations/.../tiger.jpg" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 115
def javascript_include_tag(*sources)
options = sources.extract_options!.stringify_keys
path_options = options.extract!("protocol", "extname", "host", "skip_pipeline").symbolize_keys
preload_links = []
use_preload_links_header = options["preload_links_header"].nil? ? preload_links_header : options.delete("preload_links_header")
nopush = options["nopush"].nil? || options.delete("nopush")
crossorigin = options.delete("crossorigin")
crossorigin = "anonymous" if crossorigin == true
integrity = options["integrity"]
rel = options["type"] == "module" || options["type"] == :module ? "modulepreload" : "preload"
sources_tags = sources.uniq.map { |source|
href = path_to_javascript(source, path_options)
if use_preload_links_header && !options["defer"] && href.present? && !href.start_with?("data:")
preload_link = "<#{href}>; rel=#{rel}; as=script"
preload_link += "; crossorigin=#{crossorigin}" unless crossorigin.nil?
preload_link += "; integrity=#{integrity}" unless integrity.nil?
preload_link += "; nonce=#{content_security_policy_nonce}" if options["nonce"] == true
preload_link += "; nopush" if nopush
preload_links << preload_link
end
tag_options = {
"src" => href,
"crossorigin" => crossorigin
}.merge!(options)
if tag_options["nonce"] == true || (!tag_options.key?("nonce") && auto_include_nonce_for_scripts)
tag_options["nonce"] = content_security_policy_nonce
elsif tag_options["nonce"] == false
tag_options.delete("nonce")
end
content_tag("script", "", tag_options)
}.join("\n").html_safe
if use_preload_links_header
send_preload_links_header(preload_links)
end
sources_tags
end Возвращает HTML-тег script для каждого из указанных sources.
В качестве источников можно указать пути к файлам JavaScript. Относительные пути считаются относительно assets/javascripts, а полные пути — относительно корня документа. Используйте относительные пути, как принято; абсолютные пути — только при необходимости.
При передаче путей расширение «.js» указывать необязательно. Если не нужно добавлять «.js» к пути, в параметрах можно задать extname: false.
Атрибуты HTML тега script можно изменить, передав хеш в качестве последнего аргумента.
Если включен конвейер ресурсов, в качестве источника можно передать имя манифеста и добавить в него другие файлы JavaScript или CoffeeScript.
Если сервер поддерживает HTTP Early Hints и параметр defer не включен, Rails отправит ответ 103 Early Hints со ссылками на ресурсы.
Параметры
Если последний параметр — хеш, с его помощью можно добавить атрибуты HTML. Среди прочих поддерживаются следующие параметры:
-
:extname— добавляет расширение к созданному URL, если оно еще не указано. Применяется только к относительным URL. -
:protocol— задает протокол созданного URL. Этот параметр применяется только при наличии относительного URL и параметровhost. -
:host— при указании относительного URL добавляет хост к этому пути. -
:skip_pipeline— если задано значение true, этот параметр позволяет обойти конвейер ресурсов. -
:nonce— если задано значение true, добавляет автоматически сгенерированное значение nonce, если включена политика безопасности содержимого. -
:async— если задано значениеtrue, добавляет атрибут HTMLasync, позволяя загружать скрипт параллельно и анализировать и выполнять его как можно раньше. -
:defer— если задано значениеtrue, добавляет атрибут HTMLdefer, указывающий браузеру, что скрипт следует выполнить после анализа документа. Кроме того, это предотвращает отправку заголовка Preload Links. -
:nopush— указывает, что для скрипта не следует использовать отправку данных сервером. По умолчанию —true.
Все остальные указанные параметры будут рассматриваться как атрибуты HTML для тега script.
Подробнее о влиянии параметров :async и :defer на тег <script> см. в документации MDN.
Примеры
javascript_include_tag "xmlhr" # => <script src="/assets/xmlhr.debug-1284139606.js"></script> javascript_include_tag "xmlhr", host: "localhost", protocol: "https" # => <script src="https://localhost/assets/xmlhr.debug-1284139606.js"></script> javascript_include_tag "template.jst", extname: false # => <script src="/assets/template.debug-1284139606.jst"></script> javascript_include_tag "xmlhr.js" # => <script src="/assets/xmlhr.debug-1284139606.js"></script> javascript_include_tag "common.javascript", "/elsewhere/cools" # => <script src="/assets/common.javascript.debug-1284139606.js"></script> # <script src="/elsewhere/cools.debug-1284139606.js"></script> javascript_include_tag "http://www.example.com/xmlhr" # => <script src="http://www.example.com/xmlhr"></script> javascript_include_tag "http://www.example.com/xmlhr.js" # => <script src="http://www.example.com/xmlhr.js"></script> javascript_include_tag "http://www.example.com/xmlhr.js", nonce: true # => <script src="http://www.example.com/xmlhr.js" nonce="..."></script> javascript_include_tag "http://www.example.com/xmlhr.js", async: true # => <script src="http://www.example.com/xmlhr.js" async="async"></script> javascript_include_tag "http://www.example.com/xmlhr.js", defer: true # => <script src="http://www.example.com/xmlhr.js" defer="defer"></script>
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 510
def picture_tag(*sources, &block)
sources.flatten!
options = sources.extract_options!.symbolize_keys
image_options = options.delete(:image) || {}
skip_pipeline = options.delete(:skip_pipeline)
content_tag("picture", options) do
if block.present?
capture(&block).html_safe
elsif sources.size <= 1
image_tag(sources.last, image_options)
else
source_tags = sources.map do |source|
tag("source",
srcset: resolve_asset_source("image", source, skip_pipeline),
type: Template::Types[File.extname(source)[1..]]&.to_s)
end
safe_join(source_tags << image_tag(sources.last, image_options))
end
end
end Возвращает HTML-тег picture для sources. Если sources — строка, будет возвращен один тег picture. Если sources — массив, будет возвращен тег picture с вложенными тегами source для каждого источника. sources могут быть полными путями, файлами из общедоступного каталога изображений или вложениями Active Storage. Поскольку тег picture требует тег img, последний переданный элемент будет использован для тега img. Для полного контроля над тегом picture можно передать блок, который соответствующим образом задаст содержимое тега.
Параметры
Если последний параметр — хеш, с его помощью можно добавить атрибуты HTML. Помимо всех поддерживаемых параметров HTML, поддерживаются следующие:
Примеры
picture_tag("picture.webp")
# => <picture><img src="/images/picture.webp" /></picture>
picture_tag("gold.png", :image => { :size => "20" })
# => <picture><img height="20" src="/images/gold.png" width="20" /></picture>
picture_tag("gold.png", :image => { :size => "45x70" })
# => <picture><img height="70" src="/images/gold.png" width="45" /></picture>
picture_tag("picture.webp", "picture.png")
# => <picture><source srcset="/images/picture.webp" /><source srcset="/images/picture.png" /><img src="/images/picture.png" /></picture>
picture_tag("picture.webp", "picture.png", :image => { alt: "Image" })
# => <picture><source srcset="/images/picture.webp" /><source srcset="/images/picture.png" /><img alt="Image" src="/images/picture.png" /></picture>
picture_tag(["picture.webp", "picture.png"], :image => { alt: "Image" })
# => <picture><source srcset="/images/picture.webp" /><source srcset="/images/picture.png" /><img alt="Image" src="/images/picture.png" /></picture>
picture_tag(:class => "my-class") { tag(:source, :srcset => image_path("picture.webp")) + image_tag("picture.png", :alt => "Image") }
# => <picture class="my-class"><source srcset="/images/picture.webp" /><img alt="Image" src="/images/picture.png" /></picture>
picture_tag { tag(:source, :srcset => image_path("picture-small.webp"), :media => "(min-width: 600px)") + tag(:source, :srcset => image_path("picture-big.webp")) + image_tag("picture.png", :alt => "Image") }
# => <picture><source srcset="/images/picture-small.webp" media="(min-width: 600px)" /><source srcset="/images/picture-big.webp" /><img alt="Image" src="/images/picture.png" /></picture>
Блобы Active Storage (изображения, загруженные пользователями вашего приложения):
picture_tag(user.profile_picture) # => <picture><img src="/rails/active_storage/blobs/.../profile_picture.webp" /></picture>
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 363
def preload_link_tag(source, options = {})
href = path_to_asset(source, skip_pipeline: options.delete(:skip_pipeline))
extname = File.extname(source).downcase.delete(".")
mime_type = options.delete(:type) || Template::Types[extname]&.to_s
as_type = options.delete(:as) || resolve_link_as(extname, mime_type)
crossorigin = options.delete(:crossorigin)
crossorigin = "anonymous" if crossorigin == true || (crossorigin.blank? && as_type == "font")
integrity = options[:integrity]
fetchpriority = options.delete(:fetchpriority)
nopush = options.delete(:nopush) || false
rel = mime_type == "module" || mime_type == :module ? "modulepreload" : "preload"
add_nonce = content_security_policy_nonce &&
respond_to?(:request) &&
request.content_security_policy_nonce_directives&.include?("#{as_type}-src")
if add_nonce
options[:nonce] = content_security_policy_nonce
end
link_tag = tag.link(
rel: rel,
href: href,
as: as_type,
type: mime_type,
crossorigin: crossorigin,
fetchpriority: fetchpriority,
**options.symbolize_keys)
preload_link = "<#{href}>; rel=#{rel}; as=#{as_type}"
preload_link += "; type=#{mime_type}" if mime_type
preload_link += "; crossorigin=#{crossorigin}" if crossorigin
preload_link += "; fetchpriority=#{fetchpriority}" if fetchpriority
preload_link += "; integrity=#{integrity}" if integrity
preload_link += "; nonce=#{content_security_policy_nonce}" if add_nonce
preload_link += "; nopush" if nopush
send_preload_links_header([preload_link])
link_tag
end Возвращает тег ссылки, который браузеры могут использовать для предварительной загрузки source. source может быть путем к ресурсу, управляемому конвейером ресурсов, полным путем или URI.
Параметры
-
:type— переопределяет автоматически сгенерированный MIME-тип; по умолчанию используется MIME-тип для расширенияsource. -
:as— переопределяет автоматически сгенерированное значение атрибута as, вычисляемое по расширению и MIME-типуsource. -
:crossorigin— задает атрибут crossorigin, необходимый для загрузки ресурсов с другого источника. -
:nopush— указывает, что для ресурса не следует использовать отправку данных сервером. По умолчанию —false. -
:integrity— задает атрибут integrity.
Примеры
preload_link_tag("custom_theme.css")
# => <link rel="preload" href="/assets/custom_theme.css" as="style" type="text/css" />
preload_link_tag("/videos/video.webm")
# => <link rel="preload" href="/videos/video.mp4" as="video" type="video/webm" />
preload_link_tag(post_path(format: :json), as: "fetch")
# => <link rel="preload" href="/posts.json" as="fetch" type="application/json" />
preload_link_tag("worker.js", as: "worker")
# => <link rel="preload" href="/assets/worker.js" as="worker" type="text/javascript" />
preload_link_tag("//example.com/font.woff2")
# => <link rel="preload" href="//example.com/font.woff2" as="font" type="font/woff2" crossorigin="anonymous"/>
preload_link_tag("//example.com/font.woff2", crossorigin: "use-credentials")
# => <link rel="preload" href="//example.com/font.woff2" as="font" type="font/woff2" crossorigin="use-credentials" />
preload_link_tag("/media/audio.ogg", nopush: true)
# => <link rel="preload" href="/media/audio.ogg" as="audio" type="audio/ogg" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 207
def stylesheet_link_tag(*sources)
options = sources.extract_options!.stringify_keys
path_options = options.extract!("protocol", "extname", "host", "skip_pipeline").symbolize_keys
use_preload_links_header = options["preload_links_header"].nil? ? preload_links_header : options.delete("preload_links_header")
preload_links = []
crossorigin = options.delete("crossorigin")
crossorigin = "anonymous" if crossorigin == true
nopush = options["nopush"].nil? || options.delete("nopush")
integrity = options["integrity"]
sources_tags = sources.uniq.map { |source|
href = path_to_stylesheet(source, path_options)
if use_preload_links_header && href.present? && !href.start_with?("data:")
preload_link = "<#{href}>; rel=preload; as=style"
preload_link += "; crossorigin=#{crossorigin}" unless crossorigin.nil?
preload_link += "; integrity=#{integrity}" unless integrity.nil?
preload_link += "; nonce=#{content_security_policy_nonce}" if options["nonce"] == true
preload_link += "; nopush" if nopush
preload_links << preload_link
end
tag_options = {
"rel" => "stylesheet",
"crossorigin" => crossorigin,
"href" => href
}.merge!(options)
if tag_options["nonce"] == true || (!tag_options.key?("nonce") && auto_include_nonce_for_styles && respond_to?(:content_security_policy_nonce))
tag_options["nonce"] = content_security_policy_nonce
elsif tag_options["nonce"] == false
tag_options.delete("nonce")
end
if apply_stylesheet_media_default && tag_options["media"].blank?
tag_options["media"] = "screen"
end
tag(:link, tag_options)
}.join("\n").html_safe
if use_preload_links_header
send_preload_links_header(preload_links)
end
sources_tags
end Возвращает тег ссылки на таблицу стилей для источников, указанных в аргументах.
При передаче путей расширение .css указывать необязательно. Если расширение не указано, оно будет добавлено автоматически: .css. Если не нужно добавлять .css к пути, задайте extname: false в параметрах. Атрибуты ссылки можно изменить, передав хеш в качестве последнего аргумента.
Если сервер поддерживает HTTP Early Hints, Rails отправит ответ 103 Early Hints со ссылками на ресурсы.
Параметры
-
:extname— добавляет расширение к созданному URL, если оно еще не указано. Применяется только к относительным URL. -
:protocol— задает протокол созданного URL. Этот параметр применяется только при наличии относительного URL и параметровhost. -
:host— при указании относительного URL добавляет хост к этому пути. -
:skip_pipeline— если задано значение true, этот параметр позволяет обойти конвейер ресурсов. -
:nonce— если задано значение true, добавляет автоматически сгенерированное значение nonce, если включена политика безопасности содержимого. -
:nopush— указывает, что для таблицы стилей не следует использовать отправку данных сервером. По умолчанию —true.
Примеры
stylesheet_link_tag "style" # => <link href="/assets/style.css" rel="stylesheet" /> stylesheet_link_tag "style.css" # => <link href="/assets/style.css" rel="stylesheet" /> stylesheet_link_tag "http://www.example.com/style.css" # => <link href="http://www.example.com/style.css" rel="stylesheet" /> stylesheet_link_tag "style.less", extname: false, skip_pipeline: true, rel: "stylesheet/less" # => <link href="/stylesheets/style.less" rel="stylesheet/less"> stylesheet_link_tag "style", media: "all" # => <link href="/assets/style.css" media="all" rel="stylesheet" /> stylesheet_link_tag "style", media: "print" # => <link href="/assets/style.css" media="print" rel="stylesheet" /> stylesheet_link_tag "random.styles", "/css/stylish" # => <link href="/assets/random.styles" rel="stylesheet" /> # <link href="/css/stylish.css" rel="stylesheet" /> stylesheet_link_tag "style", nonce: true # => <link href="/assets/style.css" rel="stylesheet" nonce="..." />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 580
def video_tag(*sources)
options = sources.extract_options!.symbolize_keys
public_poster_folder = options.delete(:poster_skip_pipeline)
sources << options
multiple_sources_tag_builder("video", sources) do |tag_options|
tag_options[:poster] = path_to_image(tag_options[:poster], skip_pipeline: public_poster_folder) if tag_options[:poster]
tag_options[:width], tag_options[:height] = extract_dimensions(tag_options.delete(:size)) if tag_options[:size]
end
end Возвращает HTML-тег video для sources. Если sources — строка, будет возвращен один тег video. Если sources — массив, будет возвращен тег video с вложенными тегами source для каждого источника. sources могут быть полными путями, файлами из общедоступного каталога видео или вложениями Active Storage.
Параметры
Если последний параметр — хеш, с его помощью можно добавить атрибуты HTML. Поддерживаются следующие параметры:
-
:poster— задает изображение (например, снимок экрана), которое будет отображаться до загрузки видео. Путь вычисляется так же, какsrcвimage_tag. -
:size— задается как"#{width}x#{height}"или"#{number}", поэтому"30x45"становитсяwidth="30" height="45", а"50"становитсяwidth="50" height="50".:sizeбудет проигнорирован, если значение имеет неправильный формат. -
:poster_skip_pipelineпозволяет обойти конвейер ресурсов при использовании параметра:posterи вместо этого использовать ресурс из общедоступной папки.
Примеры
video_tag("trailer")
# => <video src="/videos/trailer"></video>
video_tag("trailer.ogg")
# => <video src="/videos/trailer.ogg"></video>
video_tag("trailer.ogg", controls: true, preload: 'none')
# => <video preload="none" controls="controls" src="/videos/trailer.ogg"></video>
video_tag("trailer.m4v", size: "16x10", poster: "screenshot.png")
# => <video src="/videos/trailer.m4v" width="16" height="10" poster="/assets/screenshot.png"></video>
video_tag("trailer.m4v", size: "16x10", poster: "screenshot.png", poster_skip_pipeline: true)
# => <video src="/videos/trailer.m4v" width="16" height="10" poster="screenshot.png"></video>
video_tag("/trailers/hd.avi", size: "16x16")
# => <video src="/trailers/hd.avi" width="16" height="16"></video>
video_tag("/trailers/hd.avi", size: "16")
# => <video height="16" src="/trailers/hd.avi" width="16"></video>
video_tag("/trailers/hd.avi", height: '32', width: '32')
# => <video height="32" src="/trailers/hd.avi" width="32"></video>
video_tag("trailer.ogg", "trailer.flv")
# => <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
video_tag(["trailer.ogg", "trailer.flv"])
# => <video><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
video_tag(["trailer.ogg", "trailer.flv"], size: "160x120")
# => <video height="120" width="160"><source src="/videos/trailer.ogg" /><source src="/videos/trailer.flv" /></video>
Блобы Active Storage (видео, загруженные пользователями вашего приложения):
video_tag(user.intro_video) # => <video src="/rails/active_storage/blobs/.../intro_video.mp4"></video>
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.