Class: Alchemy::Forms::Builder

Inherits:
SimpleForm::FormBuilder
  • Object
show all
Defined in:
lib/alchemy/forms/builder.rb

Instance Method Summary collapse

Instance Method Details

#datepicker(attribute_name, options = {}) ⇒ Object

Renders a simple_form input that displays a datepicker



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/alchemy/forms/builder.rb', line 30

def datepicker(attribute_name, options = {})
  type = options[:as] || :date
  value = options.fetch(:input_html, {}).delete(:value)
  date = value || object.send(attribute_name.to_sym).presence
  date = Time.zone.parse(date) if date.is_a?(String)

  input_options = {
    type: :text,
    class: type,
    value: date&.iso8601
  }.merge(options[:input_html] || {})

  date_field = input attribute_name, as: :string, input_html: input_options
  template.("alchemy-datepicker", date_field, "input-type" => type)
end

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

Renders a simple_form input, but uses input alchemy_wrapper



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/alchemy/forms/builder.rb', line 8

def input(attribute_name, options = {}, &block)
  options[:wrapper] = :alchemy

  if object.respond_to?(:attribute_fixed?) && object.attribute_fixed?(attribute_name)
    tooltip_options = {
      content: Alchemy.t(:attribute_fixed, attribute: attribute_name),
      class: "like-hint-tooltip",
      placement: "bottom-start"
    }
    template.(:div, class: "input") do
      label(attribute_name) +
        template.("sl-tooltip", tooltip_options) do
          input_field(attribute_name, disabled: true)
        end
    end
  else
    super
  end
end

#richtext(attribute_name, options = {}) ⇒ Object

Renders a simple_form input that displays a richtext editor



48
49
50
51
# File 'lib/alchemy/forms/builder.rb', line 48

def richtext(attribute_name, options = {})
  text_area = input(attribute_name, options.merge(as: :text))
  template.("alchemy-tinymce", text_area)
end

#submit(label, options = {}) ⇒ Object

Renders a button tag wrapped in a div with ‘submit’ class.



55
56
57
58
59
60
61
62
63
# File 'lib/alchemy/forms/builder.rb', line 55

def submit(label, options = {})
  options = {
    wrapper_html: {class: "submit"},
    input_html: {is: "alchemy-button"}
  }.update(options)
  template.("div", options.delete(:wrapper_html)) do
    template.button_tag(label, options.delete(:input_html))
  end
end