lib/interface_builder/view_builder.rb in rails-ext-0.3.25 vs lib/interface_builder/view_builder.rb in rails-ext-0.3.27
- old
+ new
@@ -24,11 +24,20 @@
#
# Template methods
#
- PROXY_METHODS = %w{render themed_partial themed_resource content_for capture concat}
+ PROXY_METHODS = %w{
+ capture
+ concat
+ content_for
+ content_tag
+ render
+ themed_partial
+ themed_partial_exist?
+ themed_resource
+ }
PROXY_METHODS.each do |m|
delegate m, :to => :template
end
@@ -53,14 +62,16 @@
def form *args, &block
b = FormBuilders::ThemedFormTagBuilder.new self.template
options = {}.to_openobject
prepare_form! options, *args
-
- concat render(:partial => themed_partial('forms/begin'), :object => options)
- concat capture(b, &block)
- concat render(:partial => themed_partial('forms/end'), :object => options)
+
+ wrap_theme 'forms/begin', true do
+ concat render(:partial => themed_partial('forms/begin'), :object => options)
+ concat capture(b, &block)
+ concat render(:partial => themed_partial('forms/end'), :object => options)
+ end
end
def form_for(record_or_name_or_array, *args, &proc)
raise ArgumentError, "Missing block" unless block_given?
@@ -83,37 +94,58 @@
end
# Rendering Form
renderer_options = {}.to_openobject
prepare_form! renderer_options, options.delete(:url) || {}, options.delete(:html) || {}
+
+ wrap_theme 'forms/begin', true do
+ concat render(:partial => themed_partial('forms/begin'), :object => renderer_options)
- concat render(:partial => themed_partial('forms/begin'), :object => renderer_options)
-
- options[:builder] = FormBuilders::ThemedFormBuilder
- self.template.fields_for(object_name, *(args << options), &proc)
+ options[:builder] = FormBuilders::ThemedFormBuilder
+ self.template.fields_for(object_name, *(args << options), &proc)
- concat render(:partial => themed_partial('forms/end'), :object => renderer_options)
+ concat render(:partial => themed_partial('forms/end'), :object => renderer_options)
+ end
end
private
+ # We need to wrap top-level default templates (for non-existing templates for current theme) inside '_d' div.
+ def wrap_theme partial, concat = false, &block
+ unless themed_partial_exist? partial
+
+ # we don't need _theme_wrapper for dialog and popup, it should be invisible
+ classes = if InterfaceBuilder.dont_wrap_into_placeholder.include? partial
+ "_d"
+ else
+ "_d _theme_wrapper"
+ end
+
+ if concat
+ self.concat %{<div class="#{classes}">}
+ block.call
+ self.concat %{</div>}
+ else
+ html = block.call
+ content_tag :div, html, :class => classes
+ end
+ else
+ block.call
+ end
+ end
+
def render_haml_builder folder, template, *args, &block
opt = args.extract_options!
args.size.should! :be_in, 0..1
opt[:content] = args.first if args.size == 1
- if block
- if block.arity <= 0
- opt[:content] ||= self.template.capture &block
- else
- b = HamlBuilder.new self.template
- block.call b
- opt = opt.merge b.get_value
- end
+ opt = HamlBuilder.get_input self.template, opt, &block
+
+ partial = "#{folder}/#{template}"
+
+ html = wrap_theme partial do
+ render :partial => themed_partial(partial), :object => opt
end
-
- opt = opt.to_openobject
- html = render :partial => themed_partial("#{folder}/#{template}"), :object => opt
block ? self.concat(html) : html
end
def prepare_form! options, *args
\ No newline at end of file