1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionview/CHANGELOG.md
Sean Doyle 59ca21c011 Declare ActionView::Helpers::FormBuilder#id
`ActionView::Helpers::FormBuilder#id`
---

Generate an HTML `id` attribute value.

Return the [`<form>` element's][mdn-form] `id` attribute.

```html+erb
<%= form_for @post do |f| %>
  <%# ... %>

  <% content_for :sticky_footer do %>
    <%= form.button(form: f.id) %>
  <% end %>
<% end %>
```

In the example above, the `:sticky_footer` content area will exist
outside of the `<form>` element. [By declaring the `form` HTML
attribute][mdn-button-attr-form], we hint to the browser that the
generated `<button>` element should be treated as the `<form>` element's
submit button, regardless of where it exists in the DOM.

[A similar pattern could be used for `<input>`
elements][mdn-input-attr-form] (or other form controls) that do not
descend from the `<form>` element.

`ActionView::Helpers::FormBuilder#field_id`
---

Generate an HTML <tt>id</tt> attribute value for the given field

Return the value generated by the <tt>FormBuilder</tt> for the given
attribute name.

```html+erb
<%= form_for @post do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title, aria: { describedby: form.field_id(:title, :error) } %>
  <span id="<%= f.field_id(:title, :error) %>">is blank</span>
<% end %>
```

In the example above, the <tt><input type="text"></tt> element built by
the call to <tt>FormBuilder#text_field</tt> declares an
<tt>aria-describedby</tt> attribute referencing the <tt><span></tt>
element, sharing a common <tt>id</tt> root (<tt>post_title</tt>, in this
case).

This method is powered by the `field_id` helper declared in
`action_view/helpers/form_tag_helper`, which is made available for
general template calls, separate from a `FormBuilder` instance.

[mdn-form]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form
[mdn-button-attr-form]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-form
[mdn-input-attr-form]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-form
[mdn-aria-describedby]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute
[w3c-wai]: https://www.w3.org/WAI/tutorials/forms/notifications/#listing-errors
2020-11-30 18:47:49 -05:00

293 lines
8.8 KiB
Markdown

* `ActionView::Helpers::FormBuilder#id` returns the value
of the `<form>` element's `id` attribute. With a `method` argument, returns
the `id` attribute for a form field with that name.
<%= form_for @post do |f| %>
<%# ... %>
<% content_for :sticky_footer do %>
<%= form.button(form: f.id) %>
<% end %>
<% end %>
*Sean Doyle*
* `ActionView::Helpers::FormBuilder#field_id` returns the value generated by
the FormBuilder for the given attribute name.
<%= form_for @post do |f| %>
<%= f.label :title %>
<%= f.text_field :title, aria: { describedby: f.field_id(:title, :error) } %>
<%= tag.span("is blank", id: f.field_id(:title, :error) %>
<% end %>
*Sean Doyle*
* Add `tag.attributes` to transform a Hash into HTML Attributes, ready to be
interpolated into ERB.
<input <%= tag.attributes(type: :text, aria: { label: "Search" }) %> >
# => <input type="text" aria-label="Search">
*Sean Doyle*
## Rails 6.1.0.rc1 (November 02, 2020) ##
* Yield translated strings to calls of `ActionView::FormBuilder#button`
when a block is given.
*Sean Doyle*
* Alias `ActionView::Helpers::Tags::Label::LabelBuilder#translation` to
`#to_s` so that `form.label` calls can yield that value to their blocks.
*Sean Doyle*
* Rename the new `TagHelper#class_names` method to `TagHelper#token_list`,
and make the original available as an alias.
token_list("foo", "foo bar")
# => "foo bar"
*Sean Doyle*
* ARIA Array and Hash attributes are treated as space separated `DOMTokenList`
values. This is useful when declaring lists of label text identifiers in
`aria-labelledby` or `aria-describedby`.
tag.input type: 'checkbox', name: 'published', aria: {
invalid: @post.errors[:published].any?,
labelledby: ['published_context', 'published_label'],
describedby: { published_errors: @post.errors[:published].any? }
}
#=> <input
type="checkbox" name="published" aria-invalid="true"
aria-labelledby="published_context published_label"
aria-describedby="published_errors"
>
*Sean Doyle*
* Remove deprecated `escape_whitelist` from `ActionView::Template::Handlers::ERB`.
*Rafael Mendonça França*
* Remove deprecated `find_all_anywhere` from `ActionView::Resolver`.
*Rafael Mendonça França*
* Remove deprecated `formats` from `ActionView::Template::HTML`.
*Rafael Mendonça França*
* Remove deprecated `formats` from `ActionView::Template::RawFile`.
*Rafael Mendonça França*
* Remove deprecated `formats` from `ActionView::Template::Text`.
*Rafael Mendonça França*
* Remove deprecated `find_file` from `ActionView::PathSet`.
*Rafael Mendonça França*
* Remove deprecated `rendered_format` from `ActionView::LookupContext`.
*Rafael Mendonça França*
* Remove deprecated `find_file` from `ActionView::ViewPaths`.
*Rafael Mendonça França*
* Require that `ActionView::Base` subclasses implement `#compiled_method_container`.
*Rafael Mendonça França*
* Remove deprecated support to pass an object that is not a `ActionView::LookupContext` as the first argument
in `ActionView::Base#initialize`.
*Rafael Mendonça França*
* Remove deprecated `format` argument `ActionView::Base#initialize`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#refresh`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#original_encoding`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#variants`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#formats`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#virtual_path=`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template#updated_at`.
*Rafael Mendonça França*
* Remove deprecated `updated_at` argument required on `ActionView::Template#initialize`.
*Rafael Mendonça França*
* Make `locals` argument required on `ActionView::Template#initialize`.
*Rafael Mendonça França*
* Remove deprecated `ActionView::Template.finalize_compiled_template_methods`.
*Rafael Mendonça França*
* Remove deprecated `config.action_view.finalize_compiled_template_methods`
*Rafael Mendonça França*
* Remove deprecated support to calling `ActionView::ViewPaths#with_fallback` with a block.
*Rafael Mendonça França*
* Remove deprecated support to passing absolute paths to `render template:`.
*Rafael Mendonça França*
* Remove deprecated support to passing relative paths to `render file:`.
*Rafael Mendonça França*
* Remove support to template handlers that don't accept two arguments.
*Rafael Mendonça França*
* Remove deprecated pattern argument in `ActionView::Template::PathResolver`.
*Rafael Mendonça França*
* Remove deprecated support to call private methods from object in some view helpers.
*Rafael Mendonça França*
* `ActionView::Helpers::TranslationHelper#translate` accepts a block, yielding
the translated text and the fully resolved translation key:
<%= translate(".relative_key") do |translation, resolved_key| %>
<span title="<%= resolved_key %>"><%= translation %></span>
<% end %>
*Sean Doyle*
* Ensure cache fragment digests include all relevant template dependencies when
fragments are contained in a block passed to the render helper. Remove the
virtual_path keyword arguments found in CacheHelper as they no longer possess
any function following 1581cab.
Fixes #38984.
*Aaron Lipman*
* Deprecate `config.action_view.raise_on_missing_translations` in favor of
`config.i18n.raise_on_missing_translations`.
New generalized configuration option now determines whether an error should be raised
for missing translations in controllers and views.
*fatkodima*
* Instrument layout rendering in `TemplateRenderer#render_with_layout` as `render_layout.action_view`,
and include (when necessary) the layout's virtual path in notification payloads for collection and partial renders.
*Zach Kemp*
* `ActionView::Base.annotate_rendered_view_with_filenames` annotates HTML output with template file names.
*Joel Hawksley*, *Aaron Patterson*
* `ActionView::Helpers::TranslationHelper#translate` returns nil when
passed `default: nil` without a translation matching `I18n#translate`.
*Stefan Wrobel*
* `OptimizedFileSystemResolver` prefers template details in order of locale,
formats, variants, handlers.
*Iago Pimenta*
* Added `class_names` helper to create a CSS class value with conditional classes.
*Joel Hawksley*, *Aaron Patterson*
* Add support for conditional values to TagBuilder.
*Joel Hawksley*
* `ActionView::Helpers::FormOptionsHelper#select` should mark option for `nil` as selected.
```ruby
@post = Post.new
@post.category = nil
# Before
select("post", "category", none: nil, programming: 1, economics: 2)
# =>
# <select name="post[category]" id="post_category">
# <option value="">none</option>
# <option value="1">programming</option>
# <option value="2">economics</option>
# </select>
# After
select("post", "category", none: nil, programming: 1, economics: 2)
# =>
# <select name="post[category]" id="post_category">
# <option selected="selected" value="">none</option>
# <option value="1">programming</option>
# <option value="2">economics</option>
# </select>
```
*bogdanvlviv*
* Log lines for partial renders and started template renders are now
emitted at the `DEBUG` level instead of `INFO`.
Completed template renders are still logged at the `INFO` level.
*DHH*
* ActionView::Helpers::SanitizeHelper: support rails-html-sanitizer 1.1.0.
*Juanito Fatas*
* Added `phone_to` helper method to create a link from mobile numbers.
*Pietro Moro*
* annotated_source_code returns an empty array so TemplateErrors without a
template in the backtrace are surfaced properly by DebugExceptions.
*Guilherme Mansur*, *Kasper Timm Hansen*
* Add autoload for SyntaxErrorInTemplate so syntax errors are correctly raised by DebugExceptions.
*Guilherme Mansur*, *Gannon McGibbon*
* `RenderingHelper` supports rendering objects that `respond_to?` `:render_in`.
*Joel Hawksley*, *Natasha Umer*, *Aaron Patterson*, *Shawn Allen*, *Emily Plummer*, *Diana Mounter*, *John Hawthorn*, *Nathan Herald*, *Zaid Zawaideh*, *Zach Ahn*
* Fix `select_tag` so that it doesn't change `options` when `include_blank` is present.
*Younes SERRAJ*
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionview/CHANGELOG.md) for previous changes.