Sha256: bd0200c8990eacd6fe4f276ed55ee319b5ee4e186b6ee6d406aab4b92d48063c

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

module Trestle
  module FormHelper
    IDENTITY_FIELD_ERROR_PROC = Proc.new { |html_tag, instance| html_tag }
    DEFAULT_FORM_CONTROLLERS = %w(keyboard-submit form-loading form-error)

    def trestle_form_for(instance, options={}, &block)
      options[:builder] ||= Form::Builder
      options[:as] ||= admin.parameter_name

      options[:data] ||= {}
      options[:data][:controller] = (DEFAULT_FORM_CONTROLLERS + Array(options[:data][:controller])).join(" ")

      form_for(instance, options) do |f|
        with_identity_field_error_proc do
          with_form(f) { yield f }
        end
      end
    end

    def with_form(form)
      @_trestle_form = form
      yield form if block_given?
    ensure
      @_trestle_form = nil
    end

    def with_identity_field_error_proc
      original_field_error_proc = ::ActionView::Base.field_error_proc
      ::ActionView::Base.field_error_proc = IDENTITY_FIELD_ERROR_PROC

      yield if block_given?
    ensure
      ::ActionView::Base.field_error_proc = original_field_error_proc
    end

    def form
      @_trestle_form
    end

    def sidebar(&block)
      content_for(:sidebar, &block)
    end

    def render_sidebar_as_tab?
      modal_request? && content_for?(:sidebar)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
trestle-0.10.0 app/helpers/trestle/form_helper.rb
trestle-0.10.0.pre2 app/helpers/trestle/form_helper.rb
trestle-0.10.0.pre app/helpers/trestle/form_helper.rb