Spec-Zone.ru › Ruby on Rails 7.2

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

Включенные модули:
ActionView::Helpers::CaptureHelper, ActionView::Helpers::OutputSafetyHelper

Методы Action View для тегов

Предоставляет методы для программирования HTML-тегов как в современном стиле построения, совместимом с HTML5, так и в устаревшем стиле, совместимом с XHTML.

Константы

ARIA_PREFIXES
ЛОГИЧЕСКИЕ_АТРИБУТЫ
DATA_ПРЕФИКСЫ
СТРОКИ_ПРЕДВАРИТЕЛЬНОГО_СОДЕРЖИМОГО
ТИПЫ_ТЕГОВ

Публичные методы класса

build_tag_values(*args) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 593
def build_tag_values(*args)
  tag_values = []

  args.each do |tag_value|
    case tag_value
    when Hash
      tag_value.each do |key, val|
        tag_values << key.to_s if val && key.present?
      end
    when Array
      tag_values.concat build_tag_values(*tag_value)
    else
      tag_values << tag_value.to_s if tag_value.present?
    end
  end

  tag_values
end
ensure_valid_html5_tag_name(name) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 588
def ensure_valid_html5_tag_name(name)
  raise ArgumentError, "Invalid HTML5 tag name: #{name.inspect}" unless /\A[a-zA-Z][^\s\/>]*\z/.match?(name)
end

Публичные методы экземпляра

cdata_section(content) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 571
def cdata_section(content)
  splitted = content.to_s.gsub(/\]\]>/, "]]]]><![CDATA[>")
  "<![CDATA[#{splitted}]]>".html_safe
end

Возвращает раздел CDATA с заданным content. Разделы CDATA используются для экранирования блоков текста, содержащих символы, которые в противном случае распознавались бы как разметка. Разделы CDATA начинаются со строки <![CDATA[ и заканчиваются (и не могут содержать) строкой ]]>.

cdata_section("<hello world>")
# => <![CDATA[<hello world>]]>

cdata_section(File.read("hello_world.txt"))
# => <![CDATA[<hello from a text file]]>

cdata_section("hello]]>world")
# => <![CDATA[hello]]]]><![CDATA[>world]]>
class_names(*args)
Псевдоним для: token_list
content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 529
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
  ensure_valid_html5_tag_name(name)

  if block_given?
    options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
    tag_builder.content_tag_string(name, capture(&block), options, escape)
  else
    tag_builder.content_tag_string(name, content_or_options_with_block, options, escape)
  end
end

Возвращает HTML-тег блока типа name вокруг content. Добавьте атрибуты HTML, передав хеш атрибутов в options. Вместо передачи содержимого в качестве аргумента, вы также можете использовать блок, в этом случае вы передаёте ваше options в качестве второго параметра. Установите escape в false, чтобы отключить экранирование. Примечание: это устаревшая синтаксическая конструкция, см. описание метода tag для подробностей.

Параметры

Хеш options может использоваться с атрибутами без значения, такими как (disabled и readonly), которые вы можете задать значением true в хеше options. Вы можете использовать символы или строки для имён атрибутов.

Примеры

content_tag(:p, "Hello world!")
 # => <p>Hello world!</p>
content_tag(:div, content_tag(:p, "Hello world!"), class: "strong")
 # => <div class="strong"><p>Hello world!</p></div>
content_tag(:div, "Hello world!", class: ["strong", "highlight"])
 # => <div class="strong highlight">Hello world!</div>
content_tag(:div, "Hello world!", class: ["strong", { highlight: current_user.admin? }])
 # => <div class="strong highlight">Hello world!</div>
content_tag("select", options, multiple: true)
 # => <select multiple="multiple">...options...</select>

<%= content_tag :div, class: "strong" do -%>
  Hello world!
<% end -%>
 # => <div class="strong">Hello world!</div>
escape_once(html) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 583
def escape_once(html)
  ERB::Util.html_escape_once(html)
end

Возвращает экранированную версию html без изменения существующих экранированных сущностей.

escape_once("1 < 2 &amp; 3")
# => "1 &lt; 2 &amp; 3"

escape_once("&lt;&lt; Accept & Checkout")
# => "&lt;&lt; Accept &amp; Checkout"
tag(name = nil, options = nil, open = false, escape = true) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 492
def tag(name = nil, options = nil, open = false, escape = true)
  if name.nil?
    tag_builder
  else
    ensure_valid_html5_tag_name(name)
    "<#{name}#{tag_builder.tag_options(options, escape) if options}#{open ? ">" : " />"}".html_safe
  end
end

Возвращает HTML-тег.

Создание HTML-тегов

Создаёт HTML5-совместимые теги с помощью прокси-тега. Каждый тег можно создать с помощью:

tag.<tag name>(optional content, options)

где имя тега может быть, например, br, div, section, article или любым другим тегом.

Передача содержимого

Tags может передать содержимое для вставки в него:

tag.h1 'All titles fit to print' # => <h1>All titles fit to print</h1>

tag.div tag.p('Hello world!')  # => <div><p>Hello world!</p></div>

Содержимое также можно получить с помощью блока, что полезно в шаблонах:

<%= tag.p do %>
  The next great American novel starts here.
<% end %>
# => <p>The next great American novel starts here.</p>

Параметры

Используйте параметры с символами в качестве ключей, чтобы добавить атрибуты к созданному тегу.

tag.section class: %w( kitties puppies )
# => <section class="kitties puppies"></section>

tag.section id: dom_id(@post)
# => <section id="<generated dom id>"></section>

Передайте true для любых атрибутов, которые могут отображаться без значений, таких как disabled и readonly.

tag.input type: 'text', disabled: true
# => <input type="text" disabled="disabled">

Атрибуты HTML5 data-* и aria-* можно задать с помощью одного data или aria ключа, указывающего на хеш под-атрибутов.

Для совместимости с JavaScript-конвенциями, под-атрибуты передаются с дефисами.

tag.article data: { user_id: 123 }
# => <article data-user-id="123"></article>

Таким образом, data-user-id можно получить как dataset.userId.

Значения атрибутов данных кодируются в JSON, за исключением строк, символов и BigDecimals. Это может быть полезно при использовании функции .data() из jQuery, которая понимает HTML5, начиная с версии 1.4.3.

tag.div data: { city_state: %w( Chicago IL ) }
# => <div data-city-state="[&quot;Chicago&quot;,&quot;IL&quot;]"></div>

Созданные имена тегов и атрибуты по умолчанию экранируются. Это можно отключить, используя escape.

tag.img src: 'open & shut.png'
# => <img src="open &amp; shut.png">

tag.img src: 'open & shut.png', escape: false
# => <img src="open & shut.png">

Генератор тегов уважает HTML5-пустые теги, если содержимое не передаётся, и опускает закрывающие теги для этих элементов.

# A standard element:
tag.div # => <div></div>

# A void element:
tag.br  # => <br>

Обратите внимание, что при использовании блока параметры должны быть заключены в скобки.

<%= tag.a(href: "/about", class: "font-bold") do %>
  About the author
<% end %>
# => <a href="/about" class="font-bold">About the author</a>

Создание атрибутов HTML

Преобразует Hash в атрибуты HTML, готовые к интерполяции в ERB. Включает или исключает логические атрибуты, основываясь на их истинности. Преобразует ключи, вложенные в объекты aria: или data: в aria- и data- префиксные атрибуты:

<input <%= tag.attributes(type: :text, aria: { label: "Search" }) %>>
# => <input type="text" aria-label="Search">

<button <%= tag.attributes id: "call-to-action", disabled: false, aria: { expanded: false } %> class="primary">Get Started!</button>
# => <button id="call-to-action" aria-expanded="false" class="primary">Get Started!</button>

Устаревший синтаксис

Следующий формат поддерживает устаревший синтаксис. Он будет устаревшим в будущих версиях Rails.

tag(name, options = nil, open = false, escape = true)

Возвращает пустой HTML-тег типа name, который по умолчанию соответствует XHTML. Установите open в true, чтобы создать открывающий тег, совместимый с HTML 4.0 и ниже. Добавьте атрибуты HTML, передав хеш атрибутов в options. Установите escape в false, чтобы отключить экранирование значений атрибутов.

Параметры

Вы можете использовать символы или строки для имён атрибутов.

Используйте true с логическими атрибутами, которые могут отображаться без значения, такими как disabled и readonly.

Атрибуты HTML5 data-* можно задать с помощью одного data ключа, указывающего на хеш под-атрибутов.

Примеры

tag("br")
# => <br />

tag("br", nil, true)
# => <br>

tag("input", type: 'text', disabled: true)
# => <input type="text" disabled="disabled" />

tag("input", type: 'text', class: ["strong", "highlight"])
# => <input class="strong highlight" type="text" />

tag("img", src: "open & shut.png")
# => <img src="open &amp; shut.png" />

tag("img", { src: "open &amp; shut.png" }, false, false)
# => <img src="open &amp; shut.png" />

tag("div", data: { name: 'Stephen', city_state: %w(Chicago IL) })
# => <div data-name="Stephen" data-city-state="[&quot;Chicago&quot;,&quot;IL&quot;]" />

tag("div", class: { highlight: current_user.admin? })
# => <div class="highlight" />
token_list(*args) Показать исходный код
# File actionview/lib/action_view/helpers/tag_helper.rb, line 551
def token_list(*args)
  tokens = build_tag_values(*args).flat_map { |value| CGI.unescape_html(value.to_s).split(/\s+/) }.uniq

  safe_join(tokens, " ")
end

Возвращает строку маркеров, созданных из args.

Примеры

token_list("foo", "bar")
 # => "foo bar"
token_list("foo", "foo bar")
 # => "foo bar"
token_list({ foo: true, bar: false })
 # => "foo"
token_list(nil, false, 123, "", "foo", { bar: true })
 # => "123 foo bar"
Также использует псевдоним: class_names

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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