модуль ActionView::Helpers::AssetTagHelper
Этот модуль предоставляет методы для создания HTML-ссылок, связывающих представления с ресурсами, такими как изображения, JavaScript, таблицы стилей и ленты. Эти методы не проверяют существование ресурсов перед их связыванием:
image_tag("rails.png")
# => <img alt="Rails" src="/assets/rails.png" />
stylesheet_link_tag("application")
# => <link href="/assets/application.css?body=1" media="screen" rel="stylesheet" />
Открытые методы экземпляров
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 327
def audio_tag(*sources)
multiple_sources_tag_builder("audio", sources)
end Возвращает HTML-тег аудио для source. Путь к source может быть полным или указывать на файл, существующий в вашем каталоге public audios.
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>
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 149
def auto_discovery_link_tag(type = :rss, url_options = {}, tag_options = {})
if !(type == :rss || type == :atom) && tag_options[:type].blank?
raise ArgumentError.new("You should pass :type tag_option key explicitly, because you have passed #{type} type other than :rss or :atom.")
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. type может быть :rss (по умолчанию) или :atom. Управление параметрами ссылки в формате 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(: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 190
def favicon_link_tag(source = "favicon.ico", options = {})
tag("link", {
rel: "shortcut icon",
type: "image/x-icon",
href: path_to_image(source, skip_pipeline: options.delete(:skip_pipeline))
}.merge!(options.symbolize_keys))
end Возвращает тег ссылки для значка сайта, управляемого системой ресурсов.
Если на странице нет ссылки, генерируемой этим помощником, браузеры автоматически запрашивают /favicon.ico, и кэшируют файл, если запрос успешен. Сложно обновить значок при его изменении.
Для лучшего контроля приложения могут позволить системе управления ресурсами управлять своим значком, сохраняя файл в app/assets/images, и использовать этот помощник для генерации соответствующего тега ссылки.
Помощник получает имя файла значка сайта в качестве первого аргумента, по умолчанию «favicon.ico», и также поддерживает :rel и :type параметры для переопределения их значений по умолчанию, «shortcut icon» и «image/x-icon» соответственно:
favicon_link_tag # => <link href="/assets/favicon.ico" rel="shortcut icon" type="image/x-icon" /> favicon_link_tag 'myicon.ico' # => <link href="/assets/myicon.ico" rel="shortcut 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 259
def image_alt(src)
File.basename(src, ".*".freeze).sub(/-[[:xdigit:]]{32,64}\z/, "".freeze).tr("-_".freeze, " ".freeze).capitalize
end Возвращает строку, подходящую для атрибута alt тега HTML изображения. Аргумент src предназначен для пути к файлу изображения. Метод удаляет имя файла из пути и хэш, если таковой имеется. Он также удаляет дефисы и подчеркивания из имён файлов и заменяет их пробелами, возвращая отформатированную строку через пробел.
Примеры
image_alt('rails.png')
# => Rails
image_alt('hyphenated-file-name.png')
# => Hyphenated file name
image_alt('underscored_file_name.png')
# => Underscored file name
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 228
def image_tag(source, options = {})
options = options.symbolize_keys
check_for_image_tag_errors(options)
src = options[:src] = path_to_image(source, skip_pipeline: options.delete(:skip_pipeline))
unless src.start_with?("cid:") || src.start_with?("data:") || src.blank?
options[:alt] = options.fetch(:alt) { image_alt(src) }
end
options[:width], options[:height] = extract_dimensions(options.delete(:size)) if options[:size]
tag("img", options)
end Возвращает HTML-тег изображения для source. source может быть полным путем или файлом.
Параметры
Вы можете добавить HTML-атрибуты с помощью options. options поддерживает два дополнительных ключа для удобства и соответствия:
-
:alt— Если текст alt не задан, используется имя файла изsource(заглавные буквы без расширения) -
:size— Задаётся как «{Ширина}x{Высота}» или «{Число}», например, «30x45» становится width="30" и height="45", а «50» становится width="50" и height="50".:sizeбудет проигнорирован, если значение не в правильном формате.
Примеры
image_tag("icon")
# => <img alt="Icon" src="/assets/icon" />
image_tag("icon.png")
# => <img alt="Icon" 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" alt="Icon" />
image_tag("/icons/icon.gif", height: '32', width: '32')
# => <img alt="Icon" height="32" src="/icons/icon.gif" width="32" />
image_tag("/icons/icon.gif", class: "menu_icon")
# => <img alt="Icon" 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" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 75
def javascript_include_tag(*sources)
options = sources.extract_options!.stringify_keys
path_options = options.extract!("protocol", "extname", "host", "skip_pipeline").symbolize_keys
sources.uniq.map { |source|
tag_options = {
"src" => path_to_javascript(source, path_options)
}.merge!(options)
content_tag("script".freeze, "", tag_options)
}.join("\n").html_safe
end Возвращает HTML-тег script для каждого из указанных sources.
Пути могут указывать на файлы JavaScript. Относительные пути считаются относительно assets/javascripts, полные пути — относительно корня документа. Относительные пути предпочтительны, используйте абсолютные пути только в необходимых случаях.
При передаче путей расширение «.js» необязательно. Если вы не хотите добавлять «.js» к пути, extname: false может быть установлен в параметрах.
Вы можете изменить атрибуты HTML тега script, передав хеш в качестве последнего аргумента.
При включённом Asset Pipeline, вы можете передать имя манифеста в качестве источника и включить другие файлы JavaScript или CoffeeScript внутри манифеста.
Параметры
Когда последний параметр — хеш, вы можете добавить HTML-атрибуты с помощью этого параметра. Поддерживаются следующие параметры:
-
:extname— Добавляет расширение к сгенерированному URL, если оно ещё не существует. Это относится только к относительным URL. -
:protocol— Устанавливает протокол сгенерированного URL, этот параметр применяется только для относительных URL иhostпараметра. -
:host— При использовании относительного URL хост добавляется к этому пути. -
:skip_pipeline— Этот параметр используется для обхода системы управления ресурсами при установке его в значение true.
Примеры
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>
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 111
def stylesheet_link_tag(*sources)
options = sources.extract_options!.stringify_keys
path_options = options.extract!("protocol", "host", "skip_pipeline").symbolize_keys
sources.uniq.map { |source|
tag_options = {
"rel" => "stylesheet",
"media" => "screen",
"href" => path_to_stylesheet(source, path_options)
}.merge!(options)
tag(:link, tag_options)
}.join("\n").html_safe
end Возвращает тег ссылки для таблиц стилей для указанных источников. Если вы не укажете расширение, .css будет автоматически добавлено. Вы можете изменить атрибуты ссылки, передав хеш в качестве последнего аргумента. По историческим причинам атрибут «media» всегда присутствует и по умолчанию равен «screen», поэтому вы должны явно установить его в «all», чтобы таблицы стилей применялись ко всем типам носителей.
stylesheet_link_tag "style" # => <link href="/assets/style.css" media="screen" rel="stylesheet" /> stylesheet_link_tag "style.css" # => <link href="/assets/style.css" media="screen" rel="stylesheet" /> stylesheet_link_tag "http://www.example.com/style.css" # => <link href="http://www.example.com/style.css" media="screen" rel="stylesheet" /> 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" media="screen" rel="stylesheet" /> # <link href="/css/stylish.css" media="screen" rel="stylesheet" />
# File actionview/lib/action_view/helpers/asset_tag_helper.rb, line 305
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-тег видео для sources. Если sources — строка, возвращается единственный тег видео. Если sources — массив, возвращается тег видео с вложенными тегами источника для каждого источника. sources могут быть полными путями или файлами, существующими в вашем каталоге public videos.
Параметры
Вы можете добавить HTML-атрибуты с помощью options. options поддерживает два дополнительных ключа для удобства и соответствия:
-
:poster— Установить изображение (например, скриншот), которое будет отображаться до загрузки видео. Путь рассчитывается какsrcдляimage_tag. -
:size— Задаётся как «{Ширина}x{Высота}» или «{Число}», например, «30x45» становится width="30" и height="45", а «50» становится width="50" и height="50".:sizeбудет проигнорирован, если значение не в правильном формате. -
:poster_skip_pipelineбудет обходить систему управления ресурсами, когда используется:posterпараметр, вместо использования ресурса в каталоге public.
Примеры
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>
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.