active_scaffold 3.1.20 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/javascripts/jquery/active_scaffold.js +4 -1
- data/app/assets/javascripts/prototype/active_scaffold.js +4 -1
- data/app/assets/stylesheets/{active_scaffold.scss~ → active_scaffold.css.scss} +5 -2
- data/app/assets/stylesheets/{active_scaffold_colors.scss → active_scaffold_colors.css.scss} +4 -0
- data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -0
- data/app/assets/stylesheets/active_scaffold_images.css.scss +43 -0
- data/lib/active_scaffold/actions/core.rb +1 -0
- data/lib/active_scaffold/actions/nested.rb +0 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +1 -1
- data/lib/active_scaffold/helpers/form_column_helpers.rb +1 -0
- data/lib/active_scaffold/version.rb +2 -2
- data/test/mock_app/.gitignore +2 -0
- metadata +86 -164
- data/app/assets/javascripts/active_scaffold.js.erb~ +0 -16
- data/app/assets/javascripts/jquery/active_scaffold.js~ +0 -1053
- data/app/assets/javascripts/jquery/draggable_lists.js~ +0 -27
- data/app/assets/javascripts/prototype/active_scaffold.js~ +0 -1037
- data/app/assets/stylesheets/active_scaffold.css.erb +0 -11
- data/app/assets/stylesheets/active_scaffold.css.erb~ +0 -11
- data/app/assets/stylesheets/active_scaffold.css.scss.erb~ +0 -1120
- data/app/assets/stylesheets/active_scaffold.css.scss~ +0 -11
- data/app/assets/stylesheets/active_scaffold.css~ +0 -11
- data/app/assets/stylesheets/active_scaffold_colors.css +0 -244
- data/app/assets/stylesheets/active_scaffold_colors.css.scss~ +0 -481
- data/app/assets/stylesheets/active_scaffold_default.css.erb +0 -47
- data/app/assets/stylesheets/active_scaffold_default.css.erb~ +0 -57
- data/app/assets/stylesheets/active_scaffold_default.css.scss~ +0 -1092
- data/app/assets/stylesheets/active_scaffold_default.css~ +0 -923
- data/app/assets/stylesheets/active_scaffold_layout.css~ +0 -922
- data/app/assets/stylesheets/blue-theme.css~ +0 -1150
- data/config/locales/es.yml~ +0 -120
- data/frontends/default/views/_action_group.html.erb~ +0 -24
- data/frontends/default/views/_base_form.html.erb~ +0 -42
- data/frontends/default/views/_form.html.erb~ +0 -26
- data/frontends/default/views/_form_association.html.erb~ +0 -19
- data/frontends/default/views/_form_association_footer.html.erb~ +0 -48
- data/frontends/default/views/_horizontal_subform.html.erb~ +0 -32
- data/frontends/default/views/_horizontal_subform_header.html.erb~ +0 -11
- data/frontends/default/views/_horizontal_subform_record.html.erb~ +0 -38
- data/frontends/default/views/_list_actions.html.erb~ +0 -15
- data/frontends/default/views/_list_inline_adapter.html.erb~ +0 -10
- data/frontends/default/views/_list_messages.html.erb~ +0 -30
- data/frontends/default/views/_list_pagination.html.erb~ +0 -11
- data/frontends/default/views/_list_pagination_links.html.erb~ +0 -0
- data/frontends/default/views/_list_with_header.html.erb~ +0 -36
- data/frontends/default/views/_render_field.js.erb~ +0 -23
- data/frontends/default/views/_row.html.erb~ +0 -6
- data/frontends/default/views/_show.html.erb~ +0 -8
- data/frontends/default/views/_update_form.html.erb~ +0 -6
- data/frontends/default/views/_vertical_subform.html.erb~ +0 -12
- data/frontends/default/views/add_existing.js.erb~ +0 -18
- data/frontends/default/views/add_existing_form.html.erb~ +0 -5
- data/frontends/default/views/create.html.erb~ +0 -5
- data/frontends/default/views/edit_associated.js.erb~ +0 -13
- data/frontends/default/views/on_create.js.erb~ +0 -45
- data/frontends/default/views/on_update.js.erb~ +0 -31
- data/frontends/default/views/render_field.js.erb~ +0 -1
- data/frontends/default/views/search.html.erb~ +0 -5
- data/frontends/default/views/show.html.erb~ +0 -5
- data/frontends/default/views/update.html.erb~ +0 -8
- data/frontends/default/views/update_column.js.erb~ +0 -16
- data/lib/active_scaffold.rb~ +0 -373
- data/lib/active_scaffold/actions/core.rb~ +0 -203
- data/lib/active_scaffold/actions/create.rb~ +0 -148
- data/lib/active_scaffold/actions/list.rb~ +0 -196
- data/lib/active_scaffold/actions/nested.rb~ +0 -247
- data/lib/active_scaffold/actions/search.rb~ +0 -49
- data/lib/active_scaffold/actions/subform.rb~ +0 -27
- data/lib/active_scaffold/actions/update.rb~ +0 -150
- data/lib/active_scaffold/attribute_params.rb~ +0 -203
- data/lib/active_scaffold/bridges/date_picker/helper.rb~ +0 -180
- data/lib/active_scaffold/bridges/record_select/helpers.rb~ +0 -86
- data/lib/active_scaffold/bridges/shared/date_bridge.rb~ +0 -209
- data/lib/active_scaffold/config/base.rb~ +0 -72
- data/lib/active_scaffold/config/list.rb~ +0 -195
- data/lib/active_scaffold/config/nested.rb~ +0 -41
- data/lib/active_scaffold/config/search.rb~ +0 -74
- data/lib/active_scaffold/constraints.rb~ +0 -186
- data/lib/active_scaffold/data_structures/action_columns.rb~ +0 -140
- data/lib/active_scaffold/data_structures/action_link.rb~ +0 -179
- data/lib/active_scaffold/data_structures/nested_info.rb~ +0 -147
- data/lib/active_scaffold/extensions/action_controller_rendering.rb~ +0 -22
- data/lib/active_scaffold/extensions/action_view_rendering.rb~ +0 -120
- data/lib/active_scaffold/extensions/active_association_reflection.rb~ +0 -22
- data/lib/active_scaffold/extensions/cache_association.rb~ +0 -12
- data/lib/active_scaffold/extensions/reverse_associations.rb~ +0 -64
- data/lib/active_scaffold/extensions/routing_mapper.rb~ +0 -48
- data/lib/active_scaffold/extensions/unsaved_associated.rb~ +0 -62
- data/lib/active_scaffold/finder.rb~ +0 -370
- data/lib/active_scaffold/helpers/controller_helpers.rb~ +0 -92
- data/lib/active_scaffold/helpers/form_column_helpers.rb~ +0 -320
- data/lib/active_scaffold/helpers/id_helpers.rb~ +0 -123
- data/lib/active_scaffold/helpers/list_column_helpers.rb~ +0 -370
- data/lib/active_scaffold/helpers/search_column_helpers.rb~ +0 -263
- data/lib/active_scaffold/helpers/view_helpers.rb~ +0 -350
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
module ActiveScaffold
|
|
2
|
-
module Bridges
|
|
3
|
-
module Shared
|
|
4
|
-
module DateBridge
|
|
5
|
-
module SearchColumnHelpers
|
|
6
|
-
def active_scaffold_search_date_bridge(column, options)
|
|
7
|
-
current_search = {'from' => nil, 'to' => nil, 'opt' => 'BETWEEN',
|
|
8
|
-
'number' => 1, 'unit' => 'DAYS', 'range' => nil}
|
|
9
|
-
current_search.merge!(options[:value]) unless options[:value].nil?
|
|
10
|
-
tags = []
|
|
11
|
-
tags << active_scaffold_search_date_bridge_comparator_tag(column, options, current_search)
|
|
12
|
-
tags << active_scaffold_search_date_bridge_trend_tag(column, options, current_search)
|
|
13
|
-
tags << active_scaffold_search_date_bridge_numeric_tag(column, options, current_search)
|
|
14
|
-
tags << active_scaffold_search_date_bridge_range_tag(column, options, current_search)
|
|
15
|
-
tags.join(" ").html_safe
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def active_scaffold_search_date_bridge_comparator_options(column)
|
|
19
|
-
select_options = ActiveScaffold::Finder::DateComparators.collect {|comp| [as_(comp.downcase.to_sym), comp]}
|
|
20
|
-
select_options + ActiveScaffold::Finder::NumericComparators.collect {|comp| [as_(comp.downcase.to_sym), comp]}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def active_scaffold_search_date_bridge_comparator_tag(column, options, current_search)
|
|
24
|
-
select_tag("#{options[:name]}[opt]", options_for_select(active_scaffold_search_date_bridge_comparator_options(column),current_search['opt']), :id => "#{options[:id]}_opt", :class => "as_search_range_option as_search_date_time_option")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def active_scaffold_search_date_bridge_numeric_tag(column, options, current_search)
|
|
28
|
-
numeric_controls = "" <<
|
|
29
|
-
active_scaffold_search_date_bridge_calendar_control(column, options, current_search, 'from') <<
|
|
30
|
-
content_tag(:span, (" - " + active_scaffold_search_date_bridge_calendar_control(column, options, current_search, 'to')).html_safe,
|
|
31
|
-
:id => "#{options[:id]}_between", :class => "as_search_range_between", :style => "display:#{current_search['opt'] == 'BETWEEN' ? '' : 'none'}")
|
|
32
|
-
content_tag("span", numeric_controls.html_safe, :id => "#{options[:id]}_numeric", :style => "display:#{ActiveScaffold::Finder::NumericComparators.include?(current_search['opt']) ? '' : 'none'}")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def active_scaffold_search_date_bridge_trend_tag(column, options, current_search)
|
|
36
|
-
active_scaffold_date_bridge_trend_tag(column, options,
|
|
37
|
-
{:name_prefix => 'search',
|
|
38
|
-
:number_value => current_search['number'],
|
|
39
|
-
:unit_value => current_search["unit"],
|
|
40
|
-
:show => (current_search['opt'] == 'PAST' || current_search['opt'] == 'FUTURE')})
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def active_scaffold_date_bridge_trend_tag(column, options, trend_options)
|
|
44
|
-
trend_controls = text_field_tag("#{trend_options[:name_prefix]}[#{column.name}][number]", trend_options[:number_value], :class => 'text-input', :size => 10, :autocomplete => 'off') << " " <<
|
|
45
|
-
select_tag("#{trend_options[:name_prefix]}[#{column.name}][unit]",
|
|
46
|
-
options_for_select(active_scaffold_search_date_bridge_trend_units(column), trend_options[:unit_value]),
|
|
47
|
-
:class => 'text-input')
|
|
48
|
-
content_tag("span", trend_controls.html_safe, :id => "#{options[:id]}_trend", :style => "display:#{trend_options[:show] ? '' : 'none'}")
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def active_scaffold_search_date_bridge_trend_units(column)
|
|
52
|
-
options = ActiveScaffold::Finder::DateUnits.collect{|unit| [as_(unit.downcase.to_sym), unit]}
|
|
53
|
-
options = ActiveScaffold::Finder::TimeUnits.collect{|unit| [as_(unit.downcase.to_sym), unit]} + options if column_datetime?(column)
|
|
54
|
-
options
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def active_scaffold_search_date_bridge_range_tag(column, options, current_search)
|
|
58
|
-
range_controls = select_tag("search[#{column.name}][range]",
|
|
59
|
-
options_for_select( ActiveScaffold::Finder::DateRanges.collect{|range| [as_(range.downcase.to_sym), range]}, current_search["range"]),
|
|
60
|
-
:class => 'text-input')
|
|
61
|
-
content_tag("span", range_controls.html_safe, :id => "#{options[:id]}_range", :style => "display:#{(current_search['opt'] == 'RANGE') ? '' : 'none'}")
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def column_datetime?(column)
|
|
65
|
-
(!column.column.nil? && [:datetime, :time].include?(column.column.type))
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
module HumanConditionHelpers
|
|
70
|
-
def active_scaffold_human_condition_date_bridge(column, value)
|
|
71
|
-
case value[:opt]
|
|
72
|
-
when 'RANGE'
|
|
73
|
-
range_type, range = value[:range].downcase.split('_')
|
|
74
|
-
format = active_scaffold_human_condition_date_bridge_range_format(range_type, range)
|
|
75
|
-
from, to = controller.class.date_bridge_from_to(column, value)
|
|
76
|
-
"#{column.active_record_class.human_attribute_name(column.name)} = #{as_(value[:range].downcase).downcase} (#{I18n.l(from, :format => format)})"
|
|
77
|
-
when 'PAST', 'FUTURE'
|
|
78
|
-
from, to = controller.class.date_bridge_from_to(column, value)
|
|
79
|
-
"#{column.active_record_class.human_attribute_name(column.name)} #{as_('BETWEEN'.downcase).downcase} #{I18n.l(from)} - #{I18n.l(to)}"
|
|
80
|
-
else
|
|
81
|
-
from, to = controller.class.date_bridge_from_to(column, value)
|
|
82
|
-
"#{column.active_record_class.human_attribute_name(column.name)} #{as_(value[:opt].downcase).downcase} #{I18n.l(from)} #{value[:opt] == 'BETWEEN' ? '- ' + I18n.l(to) : ''}"
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def active_scaffold_human_condition_date_bridge_range_format(range_type, range)
|
|
87
|
-
case range
|
|
88
|
-
when 'week'
|
|
89
|
-
first_day_of_week = I18n.translate 'active_scaffold.date_picker_options.firstDay'
|
|
90
|
-
if first_day_of_week == 1
|
|
91
|
-
'%W %Y'
|
|
92
|
-
else
|
|
93
|
-
'%U %Y'
|
|
94
|
-
end
|
|
95
|
-
when 'month'
|
|
96
|
-
'%b %Y'
|
|
97
|
-
when 'year'
|
|
98
|
-
'%Y'
|
|
99
|
-
else
|
|
100
|
-
I18n.translate 'date.formats.default'
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
module Finder
|
|
106
|
-
module ClassMethods
|
|
107
|
-
def condition_for_date_bridge_type(column, value, like_pattern)
|
|
108
|
-
operator = ActiveScaffold::Finder::NumericComparators.include?(value[:opt]) && value[:opt] != 'BETWEEN' ? value[:opt] : nil
|
|
109
|
-
from_value, to_value = date_bridge_from_to(column, value)
|
|
110
|
-
|
|
111
|
-
if column.search_sql.is_a? Proc
|
|
112
|
-
column.search_sql.call(from_value, to_value, operator)
|
|
113
|
-
else
|
|
114
|
-
unless operator.nil?
|
|
115
|
-
["#{column.search_sql} #{value[:opt]} ?", from_value.to_s(:db)] unless from_value.nil?
|
|
116
|
-
else
|
|
117
|
-
["#{column.search_sql} BETWEEN ? AND ?", from_value.to_s(:db), to_value.to_s(:db)] unless from_value.nil? && to_value.nil?
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def date_bridge_from_to(column, value)
|
|
123
|
-
conversion = column.column.type == :date ? :to_date : :to_time
|
|
124
|
-
case value[:opt]
|
|
125
|
-
when 'RANGE'
|
|
126
|
-
date_bridge_from_to_for_range(column, value).collect(&conversion)
|
|
127
|
-
when 'PAST', 'FUTURE'
|
|
128
|
-
date_bridge_from_to_for_trend(column, value).collect(&conversion)
|
|
129
|
-
else
|
|
130
|
-
['from', 'to'].collect { |field| condition_value_for_datetime(value[field], conversion)}
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def date_bridge_now
|
|
135
|
-
Time.zone.now
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def date_bridge_from_to_for_trend(column, value)
|
|
139
|
-
case value['opt']
|
|
140
|
-
when "PAST"
|
|
141
|
-
trend_number = [value['number'].to_i, 1].max
|
|
142
|
-
now = date_bridge_now
|
|
143
|
-
if date_bridge_column_date?(column)
|
|
144
|
-
from = now.beginning_of_day.ago((trend_number).send(value['unit'].downcase.singularize.to_sym))
|
|
145
|
-
to = now.end_of_day
|
|
146
|
-
else
|
|
147
|
-
from = now.ago((trend_number).send(value['unit'].downcase.singularize.to_sym))
|
|
148
|
-
to = now
|
|
149
|
-
end
|
|
150
|
-
return from, to
|
|
151
|
-
when "FUTURE"
|
|
152
|
-
trend_number = [value['number'].to_i, 1].max
|
|
153
|
-
now = date_bridge_now
|
|
154
|
-
if date_bridge_column_date?(column)
|
|
155
|
-
from = now.beginning_of_day
|
|
156
|
-
to = now.end_of_day.in((trend_number).send(value['unit'].downcase.singularize.to_sym))
|
|
157
|
-
else
|
|
158
|
-
from = now
|
|
159
|
-
to = now.in((trend_number).send(value['unit'].downcase.singularize.to_sym))
|
|
160
|
-
end
|
|
161
|
-
return from, to
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def date_bridge_from_to_for_range(column, value)
|
|
166
|
-
case value[:range]
|
|
167
|
-
when 'TODAY'
|
|
168
|
-
return date_bridge_now.beginning_of_day, date_bridge_now.end_of_day
|
|
169
|
-
when 'YESTERDAY'
|
|
170
|
-
return date_bridge_now.ago(1.day).beginning_of_day, date_bridge_now.ago(1.day).end_of_day
|
|
171
|
-
when 'TOMORROW'
|
|
172
|
-
return date_bridge_now.in(1.day).beginning_of_day, date_bridge_now.in(1.day).end_of_day
|
|
173
|
-
else
|
|
174
|
-
range_type, range = value[:range].downcase.split('_')
|
|
175
|
-
raise ArgumentError unless ['week', 'month', 'year'].include?(range)
|
|
176
|
-
case range_type
|
|
177
|
-
when 'this'
|
|
178
|
-
return date_bridge_now.send("beginning_of_#{range}".to_sym), date_bridge_now.send("end_of_#{range}")
|
|
179
|
-
when 'prev'
|
|
180
|
-
return date_bridge_now.ago(1.send(range.to_sym)).send("beginning_of_#{range}".to_sym), date_bridge_now.ago(1.send(range.to_sym)).send("end_of_#{range}".to_sym)
|
|
181
|
-
when 'next'
|
|
182
|
-
return date_bridge_now.in(1.send(range.to_sym)).send("beginning_of_#{range}".to_sym), date_bridge_now.in(1.send(range.to_sym)).send("end_of_#{range}".to_sym)
|
|
183
|
-
else
|
|
184
|
-
return nil, nil
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
def date_bridge_column_date?(column)
|
|
190
|
-
if [:date_picker, :datetime_picker].include? column.form_ui
|
|
191
|
-
column.form_ui == :date_picker
|
|
192
|
-
else
|
|
193
|
-
(!column.column.nil? && [:date].include?(column.column.type))
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
ActiveScaffold::Finder.const_set('DateComparators', ["PAST", "FUTURE", "RANGE"])
|
|
204
|
-
ActiveScaffold::Finder.const_set('DateUnits', ["DAYS", "WEEKS", "MONTHS", "YEARS"])
|
|
205
|
-
ActiveScaffold::Finder.const_set('TimeUnits', ["SECONDS", "MINUTES", "HOURS"])
|
|
206
|
-
ActiveScaffold::Finder.const_set('DateRanges', ["TODAY", "YESTERDAY", "TOMORROW",
|
|
207
|
-
"THIS_WEEK", "PREV_WEEK", "NEXT_WEEK",
|
|
208
|
-
"THIS_MONTH", "PREV_MONTH", "NEXT_MONTH",
|
|
209
|
-
"THIS_YEAR", "PREV_YEAR", "NEXT_YEAR"])
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
module ActiveScaffold::Config
|
|
2
|
-
class Base
|
|
3
|
-
include ActiveScaffold::Configurable
|
|
4
|
-
extend ActiveScaffold::Configurable
|
|
5
|
-
|
|
6
|
-
def initialize(core_config)
|
|
7
|
-
@core = core_config
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.inherited(subclass)
|
|
11
|
-
class << subclass
|
|
12
|
-
# the crud type of the action. possible values are :create, :read, :update, :delete, and nil.
|
|
13
|
-
# this is not a setting for the developer. it's self-description for the actions.
|
|
14
|
-
def crud_type; @crud_type; end
|
|
15
|
-
|
|
16
|
-
protected
|
|
17
|
-
|
|
18
|
-
def crud_type=(val)
|
|
19
|
-
raise ArgumentError, "unknown CRUD type #{val}" unless [:create, :read, :update, :delete].include?(val.to_sym)
|
|
20
|
-
@crud_type = val.to_sym
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# delegate
|
|
26
|
-
def crud_type; self.class.crud_type end
|
|
27
|
-
|
|
28
|
-
def label(model = nil)
|
|
29
|
-
model ||= @core.label(:count => 1)
|
|
30
|
-
@label.nil? ? model : as_(@label, :model => model)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# the user property gets set to the instantiation of the local UserSettings class during the automatic instantiation of this class.
|
|
34
|
-
attr_accessor :user
|
|
35
|
-
|
|
36
|
-
# define a default action_group for this action
|
|
37
|
-
# e.g. 'members.crud'
|
|
38
|
-
class_attribute :action_group
|
|
39
|
-
|
|
40
|
-
# action_group this action should belong to
|
|
41
|
-
attr_accessor :action_group
|
|
42
|
-
|
|
43
|
-
class UserSettings
|
|
44
|
-
def initialize(conf, storage, params)
|
|
45
|
-
# the session hash relevant to this action
|
|
46
|
-
@session = storage
|
|
47
|
-
debugger
|
|
48
|
-
# all the request params
|
|
49
|
-
@params = params
|
|
50
|
-
# the configuration object for this action
|
|
51
|
-
@conf = conf
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def formats
|
|
56
|
-
@formats ||= []
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def formats=(val)
|
|
60
|
-
@formats=val
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
private
|
|
64
|
-
|
|
65
|
-
def columns=(val)
|
|
66
|
-
@columns = ActiveScaffold::DataStructures::ActionColumns.new(*val)
|
|
67
|
-
@columns.action = self
|
|
68
|
-
@columns.set_columns(@core.columns) if @columns.respond_to?(:set_columns)
|
|
69
|
-
@columns
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
module ActiveScaffold::Config
|
|
2
|
-
class List < Base
|
|
3
|
-
self.crud_type = :read
|
|
4
|
-
|
|
5
|
-
def initialize(core_config)
|
|
6
|
-
super
|
|
7
|
-
# inherit from global scope
|
|
8
|
-
# full configuration path is: defaults => global table => local table
|
|
9
|
-
@per_page = self.class.per_page
|
|
10
|
-
@page_links_window = self.class.page_links_window
|
|
11
|
-
|
|
12
|
-
# originates here
|
|
13
|
-
@sorting = ActiveScaffold::DataStructures::Sorting.new(@core.columns)
|
|
14
|
-
@sorting.set_default_sorting(@core.model)
|
|
15
|
-
|
|
16
|
-
# inherit from global scope
|
|
17
|
-
@empty_field_text = self.class.empty_field_text
|
|
18
|
-
@association_join_text = self.class.association_join_text
|
|
19
|
-
@pagination = self.class.pagination
|
|
20
|
-
@show_search_reset = true
|
|
21
|
-
@mark_records = self.class.mark_records
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# global level configuration
|
|
25
|
-
# --------------------------
|
|
26
|
-
# how many records to show per page
|
|
27
|
-
cattr_accessor :per_page
|
|
28
|
-
@@per_page = 15
|
|
29
|
-
|
|
30
|
-
# how many page links around current page to show
|
|
31
|
-
cattr_accessor :page_links_window
|
|
32
|
-
@@page_links_window = 2
|
|
33
|
-
|
|
34
|
-
# what string to use when a field is empty
|
|
35
|
-
cattr_accessor :empty_field_text
|
|
36
|
-
@@empty_field_text = '-'
|
|
37
|
-
|
|
38
|
-
# what string to use to join records from plural associations
|
|
39
|
-
cattr_accessor :association_join_text
|
|
40
|
-
@@association_join_text = ', '
|
|
41
|
-
|
|
42
|
-
# What kind of pagination to use:
|
|
43
|
-
# * true: The usual pagination
|
|
44
|
-
# * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
|
|
45
|
-
# * false: Disable pagination
|
|
46
|
-
cattr_accessor :pagination
|
|
47
|
-
@@pagination = true
|
|
48
|
-
|
|
49
|
-
# Add a checkbox in front of each record to mark them and use them with a batch action later
|
|
50
|
-
cattr_accessor :mark_records
|
|
51
|
-
|
|
52
|
-
# instance-level configuration
|
|
53
|
-
# ----------------------------
|
|
54
|
-
|
|
55
|
-
# provides access to the list of columns specifically meant for the Table to use
|
|
56
|
-
def columns
|
|
57
|
-
self.columns = @core.columns._inheritable unless @columns # lazy evaluation
|
|
58
|
-
@columns
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
public :columns=
|
|
62
|
-
|
|
63
|
-
# how many rows to show at once
|
|
64
|
-
attr_accessor :per_page
|
|
65
|
-
|
|
66
|
-
# how many page links around current page to show
|
|
67
|
-
attr_accessor :page_links_window
|
|
68
|
-
|
|
69
|
-
# What kind of pagination to use:
|
|
70
|
-
# * true: The usual pagination
|
|
71
|
-
# * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
|
|
72
|
-
# * false: Disable pagination
|
|
73
|
-
attr_accessor :pagination
|
|
74
|
-
|
|
75
|
-
# what string to use when a field is empty
|
|
76
|
-
attr_accessor :empty_field_text
|
|
77
|
-
|
|
78
|
-
# what string to use to join records from plural associations
|
|
79
|
-
attr_accessor :association_join_text
|
|
80
|
-
|
|
81
|
-
# show a link to reset the search next to filtered message
|
|
82
|
-
attr_accessor :show_search_reset
|
|
83
|
-
|
|
84
|
-
# Add a checkbox in front of each record to mark them and use them with a batch action later
|
|
85
|
-
attr_accessor :mark_records
|
|
86
|
-
|
|
87
|
-
# the default sorting. should be an array of hashes of {column_name => direction}, e.g. [{:a => 'desc'}, {:b => 'asc'}]. to just sort on one column, you can simply provide a hash, though, e.g. {:a => 'desc'}.
|
|
88
|
-
def sorting=(val)
|
|
89
|
-
val = [val] if val.is_a? Hash
|
|
90
|
-
sorting.clear
|
|
91
|
-
val.each { |clause| sorting.add *Array(clause).first }
|
|
92
|
-
end
|
|
93
|
-
def sorting
|
|
94
|
-
@sorting ||= ActiveScaffold::DataStructures::Sorting.new(@core.columns)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# overwrite the includes used for the count sql query
|
|
98
|
-
attr_accessor :count_includes
|
|
99
|
-
|
|
100
|
-
# the label for this List action. used for the header.
|
|
101
|
-
attr_writer :label
|
|
102
|
-
def label
|
|
103
|
-
@label ? as_(@label, :count => 2) : @core.label(:count => 2)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
attr_writer :no_entries_message
|
|
107
|
-
def no_entries_message
|
|
108
|
-
@no_entries_message ? @no_entries_message : :no_entries
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
attr_writer :filtered_message
|
|
112
|
-
def filtered_message
|
|
113
|
-
@filtered_message ? @filtered_message : :filtered
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
attr_writer :always_show_search
|
|
117
|
-
def always_show_search
|
|
118
|
-
@always_show_search && !search_partial.blank?
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def search_partial
|
|
122
|
-
return "search" if @core.actions.include?(:search)
|
|
123
|
-
return "field_search" if @core.actions.include?(:field_search)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
# always show create
|
|
127
|
-
attr_writer :always_show_create
|
|
128
|
-
def always_show_create
|
|
129
|
-
@always_show_create && @core.actions.include?(:create)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# if list view is nested hide nested_column
|
|
133
|
-
attr_writer :hide_nested_column
|
|
134
|
-
def hide_nested_column
|
|
135
|
-
@hide_nested_column.nil? ? true : @hide_nested_column
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# might be set to open nested_link automatically in view
|
|
139
|
-
# conf.nested.add_link(:players)
|
|
140
|
-
# conf.list.nested_auto_open = {:players => 2}
|
|
141
|
-
# will open nested players view if there are 2 or less records in parent
|
|
142
|
-
attr_accessor :nested_auto_open
|
|
143
|
-
|
|
144
|
-
class UserSettings < UserSettings
|
|
145
|
-
# This label has alread been localized.
|
|
146
|
-
def label
|
|
147
|
-
@session[:label] ? @session[:label] : @conf.label
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def per_page
|
|
151
|
-
@session['per_page'] = @params['limit'].to_i if @params.has_key? 'limit'
|
|
152
|
-
@session['per_page'] || @conf.per_page
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
def page
|
|
156
|
-
@session['page'] = @params['page'] if @params.has_key? 'page'
|
|
157
|
-
@session['page'] || 1
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def page=(value = nil)
|
|
161
|
-
@session['page'] = value
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
attr_reader :nested_default_sorting
|
|
165
|
-
|
|
166
|
-
def nested_default_sorting=(options)
|
|
167
|
-
@nested_default_sorting ||= @conf.sorting.clone
|
|
168
|
-
@nested_default_sorting.set_nested_sorting(options[:table_name], options[:default_sorting])
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def default_sorting
|
|
172
|
-
nested_default_sorting.nil? ? @conf.sorting : nested_default_sorting
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def sorting
|
|
176
|
-
# we want to store as little as possible in the session, but we want to return a Sorting data structure. so we recreate it each page load based on session data.
|
|
177
|
-
debugger
|
|
178
|
-
@session['sort'] = [@params['sort'], @params['sort_direction']] if @params['sort'] and @params['sort_direction']
|
|
179
|
-
@session['sort'] = nil if @params['sort_direction'] == 'reset'
|
|
180
|
-
|
|
181
|
-
if @session['sort']
|
|
182
|
-
sorting = @conf.sorting.clone
|
|
183
|
-
sorting.set(*@session['sort'])
|
|
184
|
-
return sorting
|
|
185
|
-
else
|
|
186
|
-
return default_sorting
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def count_includes
|
|
191
|
-
@conf.count_includes
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
end
|