/
index.html.haml
140 lines (131 loc) · 7.36 KB
/
index.html.haml
1
2
3
4
5
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
42
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
:ruby
require 'rails_admin/config/fields/types/datetime.rb'
query = params[:query]
params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export, :_pjax)
params.delete(:query) if params[:query].blank?
params.delete(:sort_reverse) unless params[:sort_reverse] == 'true'
sort_reverse = params[:sort_reverse]
sort = params[:sort]
params.delete(:sort) if params[:sort] == @model_config.list.sort_by.to_s
export_action = RailsAdmin::Config::Actions.find(:export, { :controller => self.controller, :abstract_model => @abstract_model })
export_action = export_action && authorized?(export_action.authorization_key, @abstract_model) ? export_action : nil
properties = @model_config.list.with(:view => self, :object => @abstract_model.model.new).visible_fields
# columns paginate
@filterable_fields = @model_config.list.fields.select(&:filterable?)
sets = get_column_sets(properties)
properties = sets[params[:set].to_i] || []
other_left = ((params[:set].to_i - 1) >= 0) && sets[params[:set].to_i - 1].present?
other_right = sets[params[:set].to_i + 1].present?
@index = 0
@ordered_filters = (params[:f] || @model_config.list.filters).inject({}) { |memo, filter|
field_name = filter.is_a?(Array) ? filter.first : filter
(filter.is_a?(Array) ? filter.last : { (@index += 1) => { "value" => '' } }) .each do |index, filter_hash|
unless filter_hash['disabled']
memo[index] = { field_name => filter_hash }
else
params[:f].delete(field_name)
end
end
memo
}.to_a.sort_by(&:first)
@ordered_filter_string = @ordered_filters.map do |duplet|
filter_index = duplet[0]
filter_for_field = duplet[1]
filter_name = filter_for_field.keys.first
filter_hash = filter_for_field.values.first
field = @filterable_fields.find{ |field| field.name == filter_name.to_sym }
field_options = case field.type
when :enum
options_for_select(field.with(:object => @abstract_model.model.new).enum, filter_hash['v'])
else
''
end
%{
$.filters.append(#{field.label.to_json}, #{field.name.to_json}, #{field.type.to_json}, #{filter_hash['v'].to_json}, #{filter_hash['o'].to_json}, #{field_options.to_json}, #{filter_index.to_json});
}
end.join.html_safe if @ordered_filters
= content_for :contextual_tabs do
= bulk_menu
- if @filterable_fields.present?
%li.dropdown{:style => 'float:right'}
%a.dropdown-toggle{:href => '#', :'data-toggle' => "dropdown"}
= t('admin.misc.add_filter')
%b.caret
%ul.dropdown-menu#filters{:style => 'left:auto; right:0;'}
- @filterable_fields.each do |field|
- field_options = case field.type
- when :enum
- options_for_select(field.with(:object => @abstract_model.model.new).enum)
- else
- ''
%li
%a{:href => '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-type" => field.type, :"data-field-value" => ""}= field.label
#list
%script
jQuery(function($) {
$.filters.options.regional = {
datePicker: {
dateFormat: #{raw I18n.t("admin.misc.filter_date_format", :default => I18n.t("admin.misc.filter_date_format", :locale => :en)).to_json},
dayNames: #{raw RailsAdmin::Config::Fields::Types::Datetime.day_names.to_json},
dayNamesShort: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_day_names.to_json},
dayNamesMin: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_day_names.to_json},
firstDay: "1",
monthNames: #{raw RailsAdmin::Config::Fields::Types::Datetime.month_names.to_json},
monthNamesShort: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_month_names.to_json},
}
}
= @ordered_filter_string
});
%style
- properties.select{ |p| p.column_width.present? }.each do |property|
= "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }"
= "#list td.#{property.css_class} { max-width: #{property.column_width}px; }"
= form_tag(index_path(params.except(*%w[page f query])), :method => :get, :class => "pjax-form form-inline") do
.well
%span#filters_box
%hr.filters_box{:style => "display:#{@ordered_filters.empty? ? 'none' : 'block'}"}
%input.input-small{:name => "query", :type => "search", :value => query, :placeholder => t("admin.misc.filter")}
%button.btn.btn-primary{:type => "submit", :'data-disable-with' => "<i class='icon-white icon-refresh'></i> ".html_safe + t("admin.misc.refresh")}
%i.icon-white.icon-refresh
= t("admin.misc.refresh")
- if export_action
%span{:style => 'float:right'}= link_to wording_for(:link, export_action), export_path(params.except('set').except('page')), :class => 'btn btn-info'
= form_tag bulk_action_path(:model_name => @abstract_model.to_param), :method => :post, :id => "bulk_form", :class => "form" do
= hidden_field_tag :bulk_action
%table.table.table-condensed.table-striped
%thead
%tr
%th.shrink
%input.toggle{:type => "checkbox"}
- if other_left
%th.other.left.shrink= "..."
- properties.each do |property|
- selected = (sort == property.name.to_s)
- if property.sortable
- sort_location = index_path params.except('sort_reverse').except('page').merge(:sort => property.name).merge(selected && sort_reverse != "true" ? {:sort_reverse => "true"} : {})
- sort_direction = selected ? (sort_reverse == 'true' ? "headerSortUp" : "headerSortDown") : nil
%th{:class => "#{property.sortable && "header pjax" || nil} #{property.sortable && sort_direction ? sort_direction : nil} #{property.css_class} #{property.type_css_class}", :'data-href' => (property.sortable && sort_location)}= property.label
- if other_right
%th.other.right.shrink= "..."
%th.last.shrink
%tbody
- @objects.each do |object|
%tr
%td
= check_box_tag "bulk_ids[]", object.id, false
- if @other_left_link ||= other_left && index_path(params.except('set').merge(params[:set].to_i != 1 ? {:set => (params[:set].to_i - 1)} : {}))
%td.other.left= link_to "...", @other_left_link, :class => 'pjax'
- properties.map{ |property| property.bind(:object, object) }.each do |property|
- value = property.pretty_value
%td{:class => "#{property.css_class} #{property.type_css_class}", :title => strip_tags(value)}= value
- if @other_right_link ||= other_right && index_path(params.merge(:set => (params[:set].to_i + 1)))
%td.other.right= link_to "...", @other_right_link, :class => 'pjax'
%td.last.links
%ul.inline= menu_for :member, @abstract_model, object, true
- if @objects.respond_to?(:total_count)
- total_count = @objects.total_count.to_i
= paginate(@objects, :theme => 'twitter-bootstrap', :remote => true)
= link_to(t("admin.misc.show_all"), index_path(params.merge(:all => true)), :class => "show-all btn clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
.clearfix.total-count= "#{total_count} #{@model_config.label_plural.downcase}"
- else
.clearfix.total-count= "#{@objects.size} #{@model_config.label_plural.downcase}"