Sha256: ca3df829133b8a5ecf6ed8c24c954e4cfa380e856daa1713d2da786144f2d8ea

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Phlexi
  module Form
    module Components
      class Checkbox < Input
        def view_template
          input(type: :hidden, name: attributes[:name], value: @unchecked_value, autocomplete: "off", hidden: true) if include_hidden?
          input(**attributes, value: @checked_value)
        end

        protected

        def build_input_attributes
          attributes[:type] = :checkbox
          super

          @include_hidden = attributes.delete(:include_hidden)
          @checked_value = (attributes.key?(:checked_value) ? attributes.delete(:checked_value) : "1").to_s
          @unchecked_value = (attributes.key?(:unchecked_value) ? attributes.delete(:unchecked_value) : "0").to_s

          attributes[:value] = @checked_value
          attributes[:checked] = attributes.fetch(:checked) { checked? }
        end

        def include_hidden?
          @include_hidden != false
        end

        def checked?
          return false if field.dom.value == @unchecked_value

          if @checked_value == "1" # using default values
            # handle nils, numbers and booleans
            !["", "0", "false"].include?(field.dom.value)
          else # custom value, so explicit match
            field.dom.value == @checked_value
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
phlexi-form-0.2.0 lib/phlexi/form/components/checkbox.rb