Class: ActiveAdmin::SimpleForm::SimpleFormBuilder

Inherits:
SimpleForm::FormBuilder
  • Object
show all
Includes:
Formtastic::Helpers::InputsHelper, MethodOrProcHelper
Defined in:
lib/activeadmin/simple_form/engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#already_in_an_inputs_blockObject

Returns the value of attribute already_in_an_inputs_block.



17
18
19
# File 'lib/activeadmin/simple_form/engine.rb', line 17

def already_in_an_inputs_block
  @already_in_an_inputs_block
end

Instance Method Details

#action(method, options = {}) ⇒ Object

def initialize(*)

raise Exception.new( 'define a "inputs_container" simple_form wrapper' ) unless ::SimpleForm.wrappers['inputs_container']
::SimpleForm.wrappers['inputs_container'] ||= ::SimpleForm::Wrappers::Root.new [], tag: :li
super

end



25
26
27
28
29
30
31
32
33
34
# File 'lib/activeadmin/simple_form/engine.rb', line 25

def action(method, options = {})  # -> Formtastic::Helpers::ActionHelper
  case method
  when :button, :reset
    button :button, options[:label], type: method
  when :submit
    button :submit, options[:label]
  else
    template.link_to options[:label], options[:url]
  end
end

#assoc_heading(assoc) ⇒ Object

-> ActiveAdmin::FormBuilder



36
37
38
39
# File 'lib/activeadmin/simple_form/engine.rb', line 36

def assoc_heading(assoc)  # -> ActiveAdmin::FormBuilder
  object.class.reflect_on_association(assoc).klass.model_name.
    human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
end

-> ActiveAdmin::FormBuilder



41
42
43
44
45
# File 'lib/activeadmin/simple_form/engine.rb', line 41

def cancel_link(url = {action: "index"}, html_options = {}, li_attrs = {})  # -> ActiveAdmin::FormBuilder
  li_attrs[:class] ||= "cancel"
  li_content = template.link_to ::I18n.t('active_admin.cancel'), url, html_options
  template.(:li, li_content, li_attrs)
end

#has_many(assoc, options = {}, &block) ⇒ Object

-> ActiveAdmin::FormBuilder



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/activeadmin/simple_form/engine.rb', line 47

def has_many(assoc, options = {}, &block)  # -> ActiveAdmin::FormBuilder
  # remove options that should not render as attributes
  custom_settings = :new_record, :allow_destroy, :heading, :sortable, :sortable_start
  builder_options = {new_record: true}.merge! options.slice  *custom_settings
  options         = {for: assoc      }.merge! options.except *custom_settings
  options[:class] = [options[:class], "inputs has_many_fields"].compact.join(' ')
  sortable_column = builder_options[:sortable]
  sortable_start  = builder_options.fetch(:sortable_start, 0)

  if sortable_column
    options[:for] = [assoc, sorted_children(assoc, sortable_column)]
  end

  html = "".html_safe
  unless builder_options.key?(:heading) && !builder_options[:heading]
    html << template.(:h3) do
      builder_options[:heading] || assoc_heading(assoc)
    end
  end

  html << template.capture do
    form_block = proc do |has_many_form|
      index    = parent_child_index options[:parent] if options[:parent]
      block_contents = template.capture do
        block.call(has_many_form, index)
      end
      template.concat(block_contents)
      template.concat has_many_actions(has_many_form, builder_options, "".html_safe)
    end

    template.assigns[:has_many_block] = true
    contents = without_wrapper { inputs(options, &form_block) } || "".html_safe

    if builder_options[:new_record]
      contents << js_for_has_many(assoc, form_block, template, builder_options[:new_record], options[:class])
    else
      contents
    end
  end

  tag = @already_in_an_inputs_block ? :li : :div
  html = template.(tag, html, class: "has_many_container #{assoc}", 'data-sortable' => sortable_column, 'data-sortable-start' => sortable_start)
  template.concat(html) if template.output_buffer
  html
end

#input(attribute_name, options = {}, &block) ⇒ Object

-> SimpleForm::FormBuilder



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/activeadmin/simple_form/engine.rb', line 93

def input(attribute_name, options = {}, &block)  # -> SimpleForm::FormBuilder
  options = @defaults ? @defaults.deep_dup.deep_merge(options) : options.dup
  options[:wrapper] = :inputs_container if @already_in_an_inputs_block && !options[:wrapper] && ::SimpleForm.wrappers['inputs_container']
  options[:wrapper_html] ||= {}

  input = find_input(attribute_name, options, &block)
  unless options[:wrapper_html][:class]
    case input.input_type
    when :date, :datetime, :time
      options[:wrapper_html][:class] = 'fragment'
    end
  end
  wrapper = find_wrapper(input.input_type, options)

  html = wrapper.render input
  template.concat(html) if template.output_buffer && template.assigns[:has_many_block]
  html
end