Sha256: 51f6391586772653810e80a1230d68e221157606b2251dd8519ab15b45887e45

Contents?: true

Size: 1.78 KB

Versions: 6

Compression:

Stored size: 1.78 KB

Contents

# -*- encoding: utf-8 -*-
# -*- frozen_string_literal: true -*-
# -*- warn_indent: true -*-

module RailsBootstrapForm
  module InputGroupBuilder
    extend ActiveSupport::Concern

    def self.included(base_class)
      def input_group_wrapper(attribute, bootstrap_options, &block)
        input = capture(&block) || ActiveSupport::SafeBuffer.new

        if input_group_required?(bootstrap_options)
          prepend = attach_input(bootstrap_options, :prepend)
          append = attach_input(bootstrap_options, :append)

          input = prepend + input + append
          input += generate_error(attribute)

          input = tag.div(input, class: input_group_classes(attribute, bootstrap_options))
        else
          input += generate_error(attribute)
        end

        input
      end

      def input_group_classes(attribute, bootstrap_options)
        classes = ["input-group", bootstrap_options.additional_input_group_class]
        # Require `has-validation` class if field has errors.
        classes << "has-validation" if is_invalid?(attribute)
        classes.flatten.compact
      end

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

        ActiveSupport::SafeBuffer.new(tags.join)
      end

      def input_group_content(content)
        return content if /button|submit/.match?(content)

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

      def input_group_required?(bootstrap_options)
        [
          bootstrap_options.prepend,
          bootstrap_options.append
        ].any?(&:present?)
      end

      private :input_group_wrapper, :input_group_classes, :attach_input,
              :input_group_content, :input_group_required?
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rails_bootstrap_form-0.5.1 lib/rails_bootstrap_form/input_group_builder.rb
rails_bootstrap_form-0.5.0 lib/rails_bootstrap_form/input_group_builder.rb
rails_bootstrap_form-0.4.2 lib/rails_bootstrap_form/input_group_builder.rb
rails_bootstrap_form-0.4.1 lib/rails_bootstrap_form/input_group_builder.rb
rails_bootstrap_form-0.4.0 lib/rails_bootstrap_form/input_group_builder.rb
rails_bootstrap_form-0.3.1 lib/rails_bootstrap_form/input_group_builder.rb