Spec-Zone.ru › Ruby on Rails 8.1

модуль ActionView::Helpers::AssetTagHelper

Подключенные модули:
ActionView::Helpers::AssetUrlHelper, ActionView::Helpers::TagHelper

Помощники тегов ресурсов 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" />

Общедоступные методы экземпляра

audio_tag (*sources) Показать исходный код
# 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>
auto_discovery_link_tag (type = :rss, url_options = {}, tag_options = {}) Показать исходный код
# 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" />
favicon_link_tag (source = "favicon.ico", options = {}) Показать исходный код
# 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" />
image_tag (source, options = {}) Показать исходный код
# 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" />
javascript_include_tag (*sources) Показать исходный код
# 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, добавляет атрибут HTML async, позволяя загружать скрипт параллельно и анализировать и выполнять его как можно раньше.

  • :defer — если задано значение true, добавляет атрибут HTML defer, указывающий браузеру, что скрипт следует выполнить после анализа документа. Кроме того, это предотвращает отправку заголовка 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>
picture_tag (*sources, &block) Показать исходный код
# 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, поддерживаются следующие:

  • :image — Hash параметров, передаваемых непосредственно помощнику image_tag.

Примеры

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>
preload_link_tag (source, options = {}) Показать исходный код
# 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" />
stylesheet_link_tag (*sources) Показать исходный код
# 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="..." />
video_tag (*sources) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API