summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-12-30 10:48:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-12-30 10:48:11 +0000
commit66420fe4b7ece872c992a91e935a79258482068b (patch)
tree97079d769d5f0b1cb9b805e9f4d62702fbb8c405 /lib
parent5bc7dc77e24a947a005625971c42d20d6bdf8e5b (diff)
downloadredmine-66420fe4b7ece872c992a91e935a79258482068b.tar.gz
redmine-66420fe4b7ece872c992a91e935a79258482068b.zip
TabularFormBuilder moved out of application_helper.rb
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1028 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r--lib/tabular_form_builder.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/tabular_form_builder.rb b/lib/tabular_form_builder.rb
new file mode 100644
index 000000000..5b331fe3f
--- /dev/null
+++ b/lib/tabular_form_builder.rb
@@ -0,0 +1,51 @@
+# redMine - project management software
+# Copyright (C) 2006-2007 Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+require 'action_view/helpers/form_helper'
+
+class TabularFormBuilder < ActionView::Helpers::FormBuilder
+ include GLoc
+
+ def initialize(object_name, object, template, options, proc)
+ set_language_if_valid options.delete(:lang)
+ @object_name, @object, @template, @options, @proc = object_name, object, template, options, proc
+ end
+
+ (field_helpers - %w(radio_button hidden_field) + %w(date_select)).each do |selector|
+ src = <<-END_SRC
+ def #{selector}(field, options = {})
+ return super if options.delete :no_label
+ label_text = l(options[:label]) if options[:label]
+ label_text ||= l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym)
+ label_text << @template.content_tag("span", " *", :class => "required") if options.delete(:required)
+ label = @template.content_tag("label", label_text,
+ :class => (@object && @object.errors[field] ? "error" : nil),
+ :for => (@object_name.to_s + "_" + field.to_s))
+ label + super
+ end
+ END_SRC
+ class_eval src, __FILE__, __LINE__
+ end
+
+ def select(field, choices, options = {}, html_options = {})
+ label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
+ label = @template.content_tag("label", label_text,
+ :class => (@object && @object.errors[field] ? "error" : nil),
+ :for => (@object_name.to_s + "_" + field.to_s))
+ label + super
+ end
+end