Module: SampleFilter::ActionViewExtension
- Defined in:
- lib/sample_filter/action_view_extension.rb
Constant Summary collapse
- FORM_DEFAULT_AS =
:sample_filter
- TRANSLATE_PREFIX =
'sample_filter'
Instance Method Summary collapse
- #form_for_filter(filter_class, options = {}, &block) ⇒ Object
- #sort_link(filter_class, sorting_field, form_as = FORM_DEFAULT_AS) ⇒ Object
Instance Method Details
#form_for_filter(filter_class, options = {}, &block) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sample_filter/action_view_extension.rb', line 6 def form_for_filter(filter_class, = {}, &block) [:as] ||= FORM_DEFAULT_AS [:block] ||= :after [:html] ||= {} [:html][:method] ||= :get [:html][:id] ||= :sample_filter [:url] ||= url_for( :controller => controller.controller_name, :action => controller.action_name ) filter_params_set = filter_class.filter_params_set filter_params_set.update_attributes(params[[:as]]) prefix = filter_class.to_s.underscore content_tag :div, id: 'sample-filter__wrap' do form_for(filter_params_set, ) do |form| buffer = ActiveSupport::SafeBuffer.new buffer << capture(&block) if block_given? && [:block].eql?(:before) filter_params_set.fields.each do |field| buffer << if filter_params_set.hidden_input?(field) form.hidden_field field else type = filter_params_set.type_of(field) content_tag(:div, class: "sample-filter__form-item #{field}") do content_tag(:div, form.label(field, sft(prefix, :fields, field)), class: 'sample-filter__form-label') + content_tag(:div, send("#{type}_tag", form, prefix, filter_params_set, field), class: 'sample-filter__form-input-wrap') end end end buffer << capture(&block) if block_given? && [:block].eql?(:after) buffer + (prefix) end end end |
#sort_link(filter_class, sorting_field, form_as = FORM_DEFAULT_AS) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/sample_filter/action_view_extension.rb', line 43 def sort_link(filter_class, sorting_field, form_as = FORM_DEFAULT_AS) sorting_field = sorting_field.to_s filter_params_set = filter_class.filter_params_set sorting_key = filter_params_set.sorting_key values = filter_params_set.values_for(sorting_key) return unless values.include?(sorting_field) default_value = filter_params_set.default_value_for(sorting_key) query_param = params[form_as] if query_param && query_param[sorting_key] query_param_sort_key = query_param[sorting_key][/\A(.*)_(asc|desc)\z/, 1] param_set = params.require(form_as).permit! if query_param_sort_key == sorting_field sort_direction = query_param[sorting_key][/\A(.*)_(asc|desc)\z/, 2] if sort_direction == 'asc' link_to('', url_for(form_as => param_set.merge({sorting_key => "#{sorting_field}_desc"})), class: 'sample_filter__sort_link asc') else link_to('', url_for(form_as => param_set.merge({sorting_key => "#{sorting_field}_asc"})), class: 'sample_filter__sort_link desc') end else link_to('', url_for(form_as => param_set.merge({sorting_key => "#{sorting_field}_desc"})), class: 'sample_filter__sort_link neutral') end else default_field = default_value[/\A(.*)_(asc|desc)\z/, 1] if default_value if sorting_field == default_field sort_direction = default_value[/\A(.*)_(asc|desc)\z/, 2] if sort_direction == 'asc' link_to('', url_for(form_as => {sorting_key => "#{sorting_field}_desc"}), class: 'sample_filter__sort_link asc') else link_to('', url_for(form_as => {sorting_key => "#{sorting_field}_asc"}), class: 'sample_filter__sort_link desc') end else link_to('', url_for(form_as => {sorting_key => "#{sorting_field}_desc"}), class: 'sample_filter__sort_link neutral') end end end |