module SortableHelper
Constants
- DEFAULT_GROUP
Public Instance Methods
sortable_filter_tag(column_name, options_list, opts = {})
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 6 def sortable_filter_tag(column_name, options_list, opts = {}) opts = {:raw_sql=>false, :group=>DEFAULT_GROUP}.merge(opts) srtbl = get_sortable opts sel_val = opts.delete(:selected) sel_val_id = nil opts[:class] = "#{opts[:class]} sortable-filter" filter_id = srtbl.filters.length options = [] new_options_list = [] options_list.each_with_index do |val,key| unless val.is_a?(Array) val = [val,val] end key_val = val[1] sel_val_id = options.length if( !sel_val.nil? && sel_val == key_val) new_options_list<<[val[0],options.length] options<<key_val end options_list = new_options_list filter = {:id=>filter_id,:column_name=>column_name,:options=>options,:raw_sql=>opts.delete(:raw_sql)} srtbl.add_filter filter opts['data-filter-key'] = filter_id opts['data-group-id'] = opts.delete(:group); name = "filters[#{column_name}]" option_tags = options_for_select(options_list, sel_val_id) #TODO build default list from column maybe ...IE User.all.map{username, id} select_tag(name, option_tags, opts) end
sortable_table_tag(base_query, columns=[], opts={})
click to toggle source
table options
- items_per_page - disable_backtrace - group - external_filters
col options
- sort_field - display_method - path_method - title - no_display - td_class - link_item - disabled
# File lib/sortable_skima/helpers/sortable_helper.rb, line 59 def sortable_table_tag base_query, columns=[], opts={} default_opts = { :default_order=>nil, :class =>'sortable-list', :items_per_page=>10, :disable_backtrace=>false, :paginate=>true, :group=>DEFAULT_GROUP, :external_filters=>nil #query conditions that should not affect the table id } opts ||= {} default_opts[:class] = "#{opts[:class]} #{default_opts[:class]}" #any parameter added classes plus 'sortableList' opts = default_opts.merge opts do_paginate = opts.delete(:paginate) #opts[:items_per_page] disable_backtrace = opts.delete(:disable_backtrace) srtbl = get_sortable opts srtbl.base_query = base_query srtbl.external_filters = opts.delete(:external_filters) srtbl.add_option :default_order, opts.delete(:default_order) srtbl.add_option :per_page, opts[:items_per_page] if opts[:items_per_page] srtbl.add_option :disable_backtrace, disable_backtrace srtbl.add_option :paginate, do_paginate out = '' thead = process_columns columns, srtbl tbody = content_tag('tbody','') out = ( thead + tbody).html_safe srtbl.save opts['data-sortable-query'] = srtbl.id opts['data-per-page'] = opts.delete(:items_per_page) opts['data-table-token'] = srtbl.token opts['data-group-id'] = opts.delete(:group) opts['data-initialize-on-client'] = disable_backtrace out = content_tag 'table', out, opts if do_paginate out += content_tag 'div','',:class=>'paginate-container','data-group-id'=>opts['data-group-id'] end out end
Private Instance Methods
build_headers(columns, num_subcols)
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 148 def build_headers columns, num_subcols thead = '' sub_cols = [] columns.each do |col| col_depth = col.delete(:depth) if col[:sub_columns].blank? unless col[:no_display] #column is not shown on front table but is still passed to js col['rowspan'] = num_subcols if num_subcols > 1 thead += content_tag( 'th', col['col-title'], col).html_safe end else new_sub_cols = col.delete :sub_columns master_col_opts = {'rowspan'=> num_subcols - col_depth + 1 }.merge(col) thead += content_tag( 'th', col['col-title'], master_col_opts).html_safe sub_cols += new_sub_cols end end sub_head = '' sub_head = build_headers(sub_cols, num_subcols - 1) unless sub_cols.blank? content_tag('tr',thead.html_safe) + sub_head end
get_sortable(opts)
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 107 def get_sortable opts @sortable_groups ||= {} srtbl = @sortable_groups[opts[:group]] unless srtbl srtbl = Sortable.new srtbl.token = "#{controller_name}_#{action_name}" @sortable_groups[opts[:group]] = srtbl end srtbl end
get_subcols_depth(columns, depth = 0)
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 171 def get_subcols_depth columns, depth = 0 depth += 1 num_cols = 0 columns.each do |col| unless col[:sub_columns].blank? col_depth, num_sub_cols = get_subcols_depth(col[:sub_columns],depth) col[:depth] = col_depth col[:colspan] = num_sub_cols num_cols += num_sub_cols depth = [depth, col_depth].max else num_cols += 1 end end return depth, num_cols end
process_columns(columns, srtbl)
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 118 def process_columns columns, srtbl num_head_rows, num_sub_cols = get_subcols_depth(columns) save_columns columns, srtbl thead = build_headers columns, num_head_rows content_tag('thead',thead.html_safe) end
save_columns(columns, srtbl)
click to toggle source
# File lib/sortable_skima/helpers/sortable_helper.rb, line 127 def save_columns columns, srtbl new_sub_cols = [] columns.each do |col| sort_field = col.delete(:sort_field) display_method = col.delete(:display_method) || sort_field col_title = (col.delete(:title) || sort_field).html_safe path_method = col.delete(:path_method) col['col-title']=col_title if col[:sub_columns].blank? col['sort-field'] = srtbl.add_column(sort_field,display_method, path_method) unless col[:no_display] #column is not shown on front table but is still passed to js col['data-class']=col.delete(:td_class) col['data-link-item']=col.delete(:link_item) end else new_sub_cols += col[:sub_columns] end end save_columns(new_sub_cols, srtbl) unless new_sub_cols.empty? end