| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2017-06-25 08:40:31 +00:00
										 |  |  | # Copyright (C) 2006-2017  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # 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. | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  | # 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. | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  | # 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' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 18:45:38 +00:00
										 |  |  | class Redmine::Views::LabelledFormBuilder < ActionView::Helpers::FormBuilder | 
					
						
							| 
									
										
										
										
											2009-02-21 11:04:50 +00:00
										 |  |  |   include Redmine::I18n | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-21 20:19:39 +00:00
										 |  |  |   (field_helpers.map(&:to_s) - %w(radio_button hidden_field fields_for check_box label) + | 
					
						
							| 
									
										
										
										
											2011-11-26 01:39:20 +00:00
										 |  |  |         %w(date_select)).each do |selector| | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  |     src = <<-END_SRC
 | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  |     def #{selector}(field, options = {}) | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |       label_for_field(field, options) + super(field, options.except(:label)).html_safe | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  |     end | 
					
						
							|  |  |  |     END_SRC | 
					
						
							|  |  |  |     class_eval src, __FILE__, __LINE__ | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 08:22:43 +00:00
										 |  |  |   def check_box(field, options={}, checked_value="1", unchecked_value="0") | 
					
						
							|  |  |  |     label_for_field(field, options) + super(field, options.except(:label), checked_value, unchecked_value).html_safe | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  |   def select(field, choices, options = {}, html_options = {}) | 
					
						
							| 
									
										
										
										
											2012-04-25 17:17:49 +00:00
										 |  |  |     label_for_field(field, options) + super(field, choices, options, html_options.except(:label)).html_safe | 
					
						
							| 
									
										
										
										
											2009-01-07 20:03:33 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2011-09-20 02:11:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-01 13:38:03 +00:00
										 |  |  |   def time_zone_select(field, priority_zones = nil, options = {}, html_options = {}) | 
					
						
							| 
									
										
										
										
											2014-03-11 09:59:40 +00:00
										 |  |  |     label_for_field(field, options) + super(field, priority_zones, options, html_options.except(:label)).html_safe | 
					
						
							| 
									
										
										
										
											2012-06-01 13:38:03 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-18 14:17:11 +00:00
										 |  |  |   # A field for entering hours value | 
					
						
							|  |  |  |   def hours_field(field, options={}) | 
					
						
							|  |  |  |     # display the value before type cast when the entered value is not valid | 
					
						
							| 
									
										
										
										
											2017-06-01 21:30:39 +00:00
										 |  |  |     if @object.errors[field].blank? | 
					
						
							| 
									
										
										
										
											2016-11-18 14:17:11 +00:00
										 |  |  |       options = options.merge(:value => format_hours(@object.send field)) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     text_field field, options | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-07 20:03:33 +00:00
										 |  |  |   # Returns a label tag for the given field | 
					
						
							|  |  |  |   def label_for_field(field, options = {}) | 
					
						
							| 
									
										
										
										
											2014-03-11 09:59:56 +00:00
										 |  |  |     return ''.html_safe if options.delete(:no_label) | 
					
						
							|  |  |  |     text = options[:label].is_a?(Symbol) ? l(options[:label]) : options[:label] | 
					
						
							| 
									
										
										
										
											2018-06-04 02:26:48 +00:00
										 |  |  |     text ||= @object.class.human_attribute_name(field) | 
					
						
							| 
									
										
										
										
											2014-03-11 09:59:56 +00:00
										 |  |  |     text += @template.content_tag("span", " *", :class => "required") if options.delete(:required) | 
					
						
							|  |  |  |     @template.content_tag("label", text.html_safe, | 
					
						
							|  |  |  |                                    :class => (@object && @object.errors[field].present? ? "error" : nil), | 
					
						
							|  |  |  |                                    :for => (@object_name.to_s + "_" + field.to_s)) | 
					
						
							| 
									
										
										
										
											2007-12-30 10:48:11 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end |