File: bootstrap.rb

package info (click to toggle)
ruby-bootstrap-form 5.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 512 kB
  • sloc: ruby: 1,350; makefile: 4
file content (103 lines) | stat: -rw-r--r-- 2,875 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
92
93
94
95
96
97
98
99
100
101
102
103
module BootstrapForm
  module Helpers
    module Bootstrap
      include ActionView::Helpers::OutputSafetyHelper

      def alert_message(title, options={})
        css = options[:class] || "alert alert-danger"
        return unless object.respond_to?(:errors) && object.errors.full_messages.any?

        tag.div class: css do
          if options[:error_summary] == false
            title
          else
            tag.p(title) + error_summary
          end
        end
      end

      def error_summary
        return unless object.errors.any?

        tag.ul(class: "rails-bootstrap-forms-error-summary") do
          object.errors.full_messages.reduce(ActiveSupport::SafeBuffer.new) do |acc, error|
            acc << tag.li(error)
          end
        end
      end

      def errors_on(name, options={})
        return unless error?(name)

        hide_attribute_name = options[:hide_attribute_name] || false
        custom_class = options[:custom_class] || false

        tag.div class: custom_class || "invalid-feedback" do
          errors = if hide_attribute_name
                     object.errors[name]
                   else
                     object.errors.full_messages_for(name)
                   end
          safe_join(errors, ", ")
        end
      end

      def static_control(*args)
        options = args.extract_options!
        name = args.first

        static_options = options.merge(
          readonly: true,
          control_class: [options[:control_class], static_class].compact
        )

        static_options[:value] = object.send(name) unless static_options.key?(:value)

        text_field_with_bootstrap(name, static_options)
      end

      def custom_control(*args, &block)
        options = args.extract_options!
        name = args.first

        form_group_builder(name, options, &block)
      end

      def prepend_and_append_input(name, options, &block)
        options = options.extract!(:prepend, :append, :input_group_class).compact

        input = capture(&block) || ActiveSupport::SafeBuffer.new

        input = attach_input(options, :prepend) + input + attach_input(options, :append)
        input << generate_error(name)
        options.present? &&
          input = tag.div(input, class: ["input-group", options[:input_group_class]].compact)
        input
      end

      def input_with_error(name, &block)
        input = capture(&block)
        input << generate_error(name)
      end

      def input_group_content(content)
        return content if content.include?("btn")

        tag.span(content, class: "input-group-text")
      end

      def static_class
        "form-control-plaintext"
      end

      private

      def attach_input(options, key)
        tags = [*options[key]].map do |item|
          input_group_content(item)
        end
        safe_join(tags)
      end
    end
  end
end