From 3bc81cb294d1453326d6e8fc86183ba651c5307c Mon Sep 17 00:00:00 2001 From: Luc Donnet Date: Wed, 20 Aug 2014 11:25:58 +0200 Subject: Fix css for time in access_link and access_point --- .../plugins/bootstrap_timepicker_activation.coffee | 12 ++- app/inputs/check_boxes_input.rb | 17 ++++ app/inputs/extended_time_picker_input.rb | 12 +++ app/views/access_links/_form.html.erb | 26 ++---- app/views/access_points/_form.html.erb | 4 +- app/views/connection_links/_form.erb | 8 +- config/initializers/formtastic.rb | 96 +++++++++++++++++----- 7 files changed, 128 insertions(+), 47 deletions(-) create mode 100644 app/inputs/check_boxes_input.rb create mode 100644 app/inputs/extended_time_picker_input.rb diff --git a/app/assets/javascripts/plugins/bootstrap_timepicker_activation.coffee b/app/assets/javascripts/plugins/bootstrap_timepicker_activation.coffee index bfa7c5587..9945022bc 100644 --- a/app/assets/javascripts/plugins/bootstrap_timepicker_activation.coffee +++ b/app/assets/javascripts/plugins/bootstrap_timepicker_activation.coffee @@ -1,8 +1,16 @@ jQuery -> if(!(Modernizr.inputtypes && Modernizr.inputtypes.time)) - $('input[type="time"]').timepicker( + $('.timepicker_basic').timepicker( template: false, showInputs: false, minuteStep: 1, showMeridian: false, - ) \ No newline at end of file + ) + $('.timepicker_seconds').timepicker( + template: false, + showInputs: false, + minuteStep: 1, + secondStep: 1, + showMeridian: false, + showSeconds: true + ) \ No newline at end of file diff --git a/app/inputs/check_boxes_input.rb b/app/inputs/check_boxes_input.rb new file mode 100644 index 000000000..83137c224 --- /dev/null +++ b/app/inputs/check_boxes_input.rb @@ -0,0 +1,17 @@ +class CheckBoxesInput < Formtastic::Inputs::CheckBoxesInput + + def selected_values + if object.respond_to?(method) + selected_items = [object.send(method)].compact.flatten + + # FIX for ids only + return selected_items.map(&:to_s).compact if selected_items.all?{ |i| i.is_a? Integer} + + [*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact + else + [] + end + end + +end + diff --git a/app/inputs/extended_time_picker_input.rb b/app/inputs/extended_time_picker_input.rb new file mode 100644 index 000000000..46b5bbdb4 --- /dev/null +++ b/app/inputs/extended_time_picker_input.rb @@ -0,0 +1,12 @@ +class ExtendedTimePickerInput < Formtastic::Inputs::TimePickerInput + + def value + return options[:input_html][:value] if options[:input_html] && options[:input_html].key?(:value) + val = object.send(method) + return "00:00:00" if val.is_a?(Date) + return val.strftime("%H:%M:%S") if val.is_a?(Time) + return val if val.nil? + val.to_s + end + +end diff --git a/app/views/access_links/_form.html.erb b/app/views/access_links/_form.html.erb index a5145adc7..4de6e8e85 100644 --- a/app/views/access_links/_form.html.erb +++ b/app/views/access_links/_form.html.erb @@ -6,29 +6,17 @@ <%= form.input :name %> <%= form.input :access_link_type, :as => :select, :collection => Chouette::AccessLink.access_link_types, :include_blank => false, :member_label => Proc.new { |type| t("connection_link_types.label.#{type}") } %> <%= form.input :comment %> - <%= form.input :link_distance %> - <%= form.inputs :name => t('access_links.show.durations') do %> - <%= form.input "default_duration(1i)", :as => :hidden ,:input_html => { :value => "2000" } %> - <%= form.input "default_duration(2i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input "default_duration(3i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input :default_duration, :ignore_date=>true,:include_seconds=>true, :label => @access_link.human_attribute_name("default_duration")%> - <%= form.input "frequent_traveller_duration(1i)", :as => :hidden ,:input_html => { :value => "2000" } %> - <%= form.input "frequent_traveller_duration(2i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input "frequent_traveller_duration(3i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input :frequent_traveller_duration, :ignore_date=>true,:include_seconds=>true, :label => @access_link.human_attribute_name("frequent_traveller_duration")%> - <%= form.input "occasional_traveller_duration(1i)", :as => :hidden ,:input_html => { :value => "2000" } %> - <%= form.input "occasional_traveller_duration(2i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input "occasional_traveller_duration(3i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input :occasional_traveller_duration, :ignore_date=>true,:include_seconds=>true, :label => @access_link.human_attribute_name("occasional_traveller_duration")%> - <%= form.input "mobility_restricted_traveller_duration(1i)", :as => :hidden ,:input_html => { :value => "2000" } %> - <%= form.input "mobility_restricted_traveller_duration(2i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input "mobility_restricted_traveller_duration(3i)", :as => :hidden ,:input_html => { :value => "1" } %> - <%= form.input :mobility_restricted_traveller_duration, :ignore_date=>true,:include_seconds=>true, :label => @access_link.human_attribute_name("mobility_restricted_traveller_duration")%> - <% end %> + <%= form.input :link_distance %> <%= form.input :mobility_restricted_suitability,:as => :boolean %> <%= form.input :stairs_availability,:as => :boolean %> <%= form.input :lift_availability,:as => :boolean %> <%= form.input :objectid, :required => !@access_link.new_record? %> + <%= form.inputs :name => t('access_links.show.durations') do %> + <%= form.input :default_duration, :as => :extended_time_picker, :size => 8, :step => :seconds, :label => @access_link.human_attribute_name("default_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :frequent_traveller_duration, :as => :extended_time_picker, :size => 8, :step => :seconds, :include_seconds => true, :label => @access_link.human_attribute_name("frequent_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :occasional_traveller_duration, :as => :extended_time_picker, :size => 8, :include_seconds => true, :label => @access_link.human_attribute_name("occasional_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :mobility_restricted_traveller_duration, :as => :extended_time_picker, :include_seconds => true, :label => @access_link.human_attribute_name("mobility_restricted_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <% end %> <% end %> <%= form.actions do %> <%= form.action :submit, :as => :button %> diff --git a/app/views/access_points/_form.html.erb b/app/views/access_points/_form.html.erb index b124f9237..e25379d8f 100644 --- a/app/views/access_points/_form.html.erb +++ b/app/views/access_points/_form.html.erb @@ -10,8 +10,8 @@ <%= form.input :street_name %> <%= form.input :country_code %> <%= form.input :comment %> - <%= form.input :openning_time, :as => :time_picker, :input_html => { :class => "form-control input-sm dateselect-time"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> - <%= form.input :closing_time, :as => :time_picker, :input_html => { :class => "form-control input-sm dateselect-time"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :openning_time, :as => :time_picker, :input_html => { :class => "form-control input-sm timepicker_basic"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :closing_time, :as => :time_picker, :input_html => { :class => "form-control input-sm timepicker_basic"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> <%= form.input :mobility_restricted_suitability,:as => :boolean %> <%= form.input :stairs_availability,:as => :boolean %> <%= form.input :lift_availability,:as => :boolean %> diff --git a/app/views/connection_links/_form.erb b/app/views/connection_links/_form.erb index 52f49d852..41eef1480 100644 --- a/app/views/connection_links/_form.erb +++ b/app/views/connection_links/_form.erb @@ -12,10 +12,10 @@ <%= form.input :objectid, :required => !@connection_link.new_record? %> <% end %> <%= form.inputs :name => t('connection_links.show.durations') do %> - <%= form.input :default_duration, :as => :time_select, :size => 8, :include_seconds=>true, :label => @connection_link.human_attribute_name("default_duration"), :input_html => { :placeholder => "HH:MM" } %> - <%= form.input :frequent_traveller_duration, :as => :time_select, :size => 8, :include_seconds=>true, :label => @connection_link.human_attribute_name("frequent_traveller_duration"), :input_html => { :placeholder => "HH:MM:SS" } %> - <%= form.input :occasional_traveller_duration, :as => :time_select, :size => 8, :include_seconds=>true, :label => @connection_link.human_attribute_name("occasional_traveller_duration"), :input_html => { :placeholder => "HH:MM:SS" } %> - <%= form.input :mobility_restricted_traveller_duration, :as => :time_select, :include_seconds=>true, :label => @connection_link.human_attribute_name("mobility_restricted_traveller_duration"), :input_html => { :placeholder => "HH:MM:SS" } %> + <%= form.input :default_duration, :as => :extended_time_picker, :size => 8, :step => :seconds, :label => @connection_link.human_attribute_name("default_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :frequent_traveller_duration, :as => :extended_time_picker, :size => 8, :step => :seconds, :include_seconds => true, :label => @connection_link.human_attribute_name("frequent_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :occasional_traveller_duration, :as => :extended_time_picker, :size => 8, :include_seconds => true, :label => @connection_link.human_attribute_name("occasional_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> + <%= form.input :mobility_restricted_traveller_duration, :as => :extended_time_picker, :include_seconds => true, :label => @connection_link.human_attribute_name("mobility_restricted_traveller_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %> <% end %> <%= form.actions do %> diff --git a/config/initializers/formtastic.rb b/config/initializers/formtastic.rb index c1f7f972f..c20f77e40 100644 --- a/config/initializers/formtastic.rb +++ b/config/initializers/formtastic.rb @@ -1,20 +1,76 @@ - Formtastic::FormBuilder.i18n_lookups_by_default = true - -module Formtastic - module Inputs - class CheckBoxesInput - def selected_values - if object.respond_to?(method) - selected_items = [object.send(method)].compact.flatten - - # FIX for ids only - return selected_items.map(&:to_s).compact if selected_items.all?{ |i| i.is_a? Integer} - - [*selected_items.map { |o| send_or_call_or_object(value_method, o) }].compact - else - [] - end - end - end - end -end +# encoding: utf-8 + +# Set the default text field size when input is a string. Default is nil. +Formtastic::FormBuilder.default_text_field_size = 50 + +# Set the default text area height when input is a text. Default is 20. +# Formtastic::FormBuilder.default_text_area_height = 5 + +# Set the default text area width when input is a text. Default is nil. +# Formtastic::FormBuilder.default_text_area_width = 50 + +# Should all fields be considered "required" by default? +# Defaults to true. +# Formtastic::FormBuilder.all_fields_required_by_default = true + +# Should select fields have a blank option/prompt by default? +# Defaults to true. +# Formtastic::FormBuilder.include_blank_for_select_by_default = true + +# Set the string that will be appended to the labels/fieldsets which are required +# It accepts string or procs and the default is a localized version of +# '*'. In other words, if you configure formtastic.required +# in your locale, it will replace the abbr title properly. But if you don't want to use +# abbr tag, you can simply give a string as below +# Formtastic::FormBuilder.required_string = "(required)" + +# Set the string that will be appended to the labels/fieldsets which are optional +# Defaults to an empty string ("") and also accepts procs (see required_string above) +# Formtastic::FormBuilder.optional_string = "(optional)" + +# Set the way inline errors will be displayed. +# Defaults to :sentence, valid options are :sentence, :list, :first and :none +# Formtastic::FormBuilder.inline_errors = :sentence +# Formtastic uses the following classes as default for hints, inline_errors and error list + +# If you override the class here, please ensure to override it in your stylesheets as well +# Formtastic::FormBuilder.default_hint_class = "inline-hints" +# Formtastic::FormBuilder.default_inline_error_class = "inline-errors" +# Formtastic::FormBuilder.default_error_list_class = "errors" + +# Set the method to call on label text to transform or format it for human-friendly +# reading when formtastic is used without object. Defaults to :humanize. +# Formtastic::FormBuilder.label_str_method = :humanize + +# Set the array of methods to try calling on parent objects in :select and :radio inputs +# for the text inside each @