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