class Decidim::Admin::FormBuilder
This custom FormBuilder
extends the FormBuilder
present in core with fields only used in admin.
Public Instance Methods
autocomplete_select(attribute, selected = nil, options = {}, prompt_options = {}) { |selected| ... }
click to toggle source
Generates a select field with autocompletion using ajax
@param [Symbol] attribute
The name of the object's attribute (usually something like user_id)
@param [Object] selected
An instance of the selected value
@param [Hash] options
A optional set of options to render the field: - :label (boolean|string) (optional) You can disable the creation of the input label passing false, or override the default label passing a string (default: name of the input) - :name (string) You can provide a custom name for the field to be submitted - :class (string) You can provide custom class name for the container (ex. autocomplete-field--results-inline)
@param [Hash] prompt_options
Prompt configuration. A hash with options: - :url (String) The url where the ajax endpoint to fill the select - :placeholder (String) Text to use as placeholder - :no_results (String) (optional) Text to use when there are no matching results (default: No results found) - :search_prompt (String) (optional) Text to prompt for search input (default: Type at least three characters to search)
@yield [resource]
It should receive a block that returns a Hash for the selected option with: - value: This will be the value of the option select. - label: This will be the label of the option select.
@example How to use it
<% prompt_options = { url: users_url, text: t(".select_user") } options = { label: t(".user") } %> <%= form.autocomplete_select(:user_id, form.object.user.presence, options, prompt_options) do |user| { value: user.id, label: "#{user.name} (#{user.nickname})" } end %>
@return [String]
The HTML ready to output in the view
# File lib/decidim/admin/form_builder.rb, line 42 def autocomplete_select(attribute, selected = nil, options = {}, prompt_options = {}) selected = yield(selected) if selected template = "" template += label(attribute, (options[:label] || label_for(attribute)) + required_for_attribute(attribute)) unless options[:label] == false template += content_tag(:div, nil, class: options[:class], data: { autocomplete: { name: options[:name] || "#{@object_name}[#{attribute}]", options: (options[:default_options].to_a + [selected]).compact, placeholder: prompt_options[:placeholder], searchURL: prompt_options[:url], changeURL: prompt_options[:change_url], selected: selected ? selected[:value] : "", searchPromptText: options[:search_prompt] || I18n.t("autocomplete.search_prompt", scope: "decidim.admin"), noResultsText: options[:no_results] || I18n.t("autocomplete.no_results", scope: "decidim.admin") }, autocomplete_for: attribute, plugin: "autocomplete" }) template += error_for(attribute, options) if error?(attribute) template.html_safe end
editor(name, options = {})
click to toggle source
Calls Decidim::FormBuilder#editor with default options for admin.
Calls superclass method
# File lib/decidim/admin/form_builder.rb, line 65 def editor(name, options = {}) super(name, { toolbar: :full, lines: 25 }.merge(options)) end