Module: Hanami::Helpers::FormHelper
- Includes:
- HtmlHelper
- Defined in:
- lib/hanami/helpers/form_helper.rb,
lib/hanami/helpers/form_helper/values.rb,
lib/hanami/helpers/form_helper/html_node.rb,
lib/hanami/helpers/form_helper/form_builder.rb
Overview
Form builder
By including Hanami::Helpers::FormHelper
it will inject one public method: form_for
. This is a HTML5 form builder.
To understand the general HTML5 builder syntax of this framework, please consider to have a look at Hanami::Helpers::HtmlHelper
documentation.
This builder is independent from any template engine. This was hard to achieve without a compromise: the form helper should be used in one output block in a template or as a method in a view (see the examples below).
Features:
* Support for complex markup without the need of concatenation
* Auto closing HTML5 tags
* Support for view local variables
* Method override support (PUT/PATCH/DELETE HTTP verbs aren't understood by browsers)
* Automatic generation of HTML attributes for inputs: <tt>id</tt>, <tt>name</tt>, <tt>value</tt>
* Allow to override HTML attributes
* Extract values from request params and fill <tt>value</tt> attributes
* Automatic selection of current value for radio button and select inputs
* Infinite nested fields
Supported tags and inputs:
* <tt>check_box</tt>
* <tt>color_field</tt>
* <tt>date_field</tt>
* <tt>datetime_field</tt>
* <tt>datetime_local_field</tt>
* <tt>email_field</tt>
* <tt>fields_for</tt>
* <tt>file_field</tt>
* <tt>form_for</tt>
* <tt>hidden_field</tt>
* <tt>label</tt>
* <tt>number_field</tt>
* <tt>password_field</tt>
* <tt>radio_button</tt>
* <tt>select</tt>
* <tt>submit</tt>
* <tt>text_area</tt>
* <tt>text_field</tt>
Defined Under Namespace
Classes: Form, FormBuilder, HtmlNode, Values
Constant Summary collapse
- DEFAULT_METHOD =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Default HTTP method for form
'POST'.freeze
- DEFAULT_CHARSET =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Default charset
'utf-8'.freeze
- CSRF_TOKEN =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
CSRF Token session key
This key is shared with
hanamirb
,hanami-controller
. :_csrf_token
Instance Method Summary collapse
-
#csrf_meta_tags ⇒ Hanami::Helpers::HtmlHelper::HtmlBuilder, NilClass
Prints CSRF meta tags for Unobtrusive JavaScript (UJS) purposes.
-
#csrf_token ⇒ String, NilClass
Returns CSRF Protection Token stored in session.
-
#form_for(name, url = nil, options = {}, &blk) ⇒ Hanami::Helpers::FormHelper::FormBuilder
Instantiate a HTML5 form builder.
Instance Method Details
#csrf_meta_tags ⇒ Hanami::Helpers::HtmlHelper::HtmlBuilder, NilClass
Prints CSRF meta tags for Unobtrusive JavaScript (UJS) purposes.
485 486 487 488 489 490 |
# File 'lib/hanami/helpers/form_helper.rb', line 485 def return if csrf_token.nil? html.(name: "csrf-param", content: CSRF_TOKEN) + html.(name: "csrf-token", content: csrf_token) end |
#csrf_token ⇒ String, NilClass
Returns CSRF Protection Token stored in session.
It returns nil
if sessions aren’t enabled or the value is missing.
454 455 456 457 458 459 460 |
# File 'lib/hanami/helpers/form_helper.rb', line 454 def csrf_token if defined?(session) session[CSRF_TOKEN] elsif defined?(locals) && locals[:session] locals[:session][CSRF_TOKEN] end end |
#form_for(name, url, options, &blk) ⇒ Hanami::Helpers::FormHelper::FormBuilder #form_for(form, attributes = {}, &blk) ⇒ Hanami::Helpers::FormHelper::FormBuilder
Instantiate a HTML5 form builder
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/hanami/helpers/form_helper.rb', line 431 def form_for(name, url = nil, = {}, &blk) # rubocop:disable Metrics/MethodLength form = if name.is_a?(Form) = url || {} name else Form.new(name, url, .delete(:values)) end params = .delete(:params) opts = .dup opts[:"data-remote"] = opts.delete(:remote) if opts.key?(:remote) attributes = { action: form.url, method: form.verb, 'accept-charset': DEFAULT_CHARSET, id: "#{form.name}-form" }.merge(opts) FormBuilder.new(form, attributes, self, params, &blk) end |