active_scaffold 3.0.5 → 3.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/Gemfile +11 -2
- data/Gemfile.lock +20 -0
- data/Rakefile +33 -4
- data/active_scaffold.gemspec +378 -17
- data/frontends/default/images/config.png +0 -0
- data/frontends/default/images/gears.png +0 -0
- data/frontends/default/javascripts/jquery/active_scaffold.js +34 -33
- data/frontends/default/javascripts/jquery/jquery.editinplace.js +21 -4
- data/frontends/default/javascripts/prototype/active_scaffold.js +43 -38
- data/frontends/default/stylesheets/stylesheet.css +110 -35
- data/frontends/default/views/_action_group.html.erb +20 -0
- data/frontends/default/views/_base_form.html.erb +7 -3
- data/frontends/default/views/_create_form.html.erb +5 -3
- data/frontends/default/views/_create_form_on_list.html.erb +2 -1
- data/frontends/default/views/_field_search.html.erb +2 -2
- data/frontends/default/views/_form.html.erb +2 -2
- data/frontends/default/views/_form_messages.html.erb +1 -1
- data/frontends/default/views/_horizontal_subform.html.erb +1 -1
- data/frontends/default/views/_list_actions.html.erb +6 -14
- data/frontends/default/views/_list_header.html.erb +4 -6
- data/frontends/default/views/_list_with_header.html.erb +2 -2
- data/frontends/default/views/_messages.html.erb +2 -2
- data/frontends/default/views/_search.html.erb +2 -2
- data/frontends/default/views/_show.html.erb +1 -1
- data/frontends/default/views/_update_form.html.erb +2 -1
- data/frontends/default/views/_vertical_subform.html.erb +1 -1
- data/frontends/default/views/action_confirmation.html.erb +13 -0
- data/frontends/default/views/add_existing.js.rjs +1 -1
- data/frontends/default/views/destroy.js.rjs +21 -3
- data/frontends/default/views/on_action_update.js.rjs +1 -1
- data/frontends/default/views/on_create.js.rjs +30 -13
- data/frontends/default/views/on_update.js.rjs +19 -6
- data/init.rb +6 -0
- data/lib/active_scaffold/actions/core.rb +32 -12
- data/lib/active_scaffold/actions/create.rb +4 -11
- data/lib/active_scaffold/actions/delete.rb +16 -13
- data/lib/active_scaffold/actions/list.rb +58 -2
- data/lib/active_scaffold/actions/mark.rb +1 -1
- data/lib/active_scaffold/actions/nested.rb +24 -15
- data/lib/active_scaffold/actions/show.rb +10 -3
- data/lib/active_scaffold/actions/update.rb +10 -3
- data/lib/{active_record_permissions.rb → active_scaffold/active_record_permissions.rb} +0 -0
- data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/bridge.rb +1 -1
- data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +8 -4
- data/lib/active_scaffold/bridges/carrierwave/bridge.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/bridge.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +1 -1
- data/lib/active_scaffold/config/base.rb +8 -0
- data/lib/active_scaffold/config/core.rb +2 -15
- data/lib/active_scaffold/config/create.rb +8 -0
- data/lib/active_scaffold/config/delete.rb +10 -1
- data/lib/active_scaffold/config/field_search.rb +1 -0
- data/lib/active_scaffold/config/form.rb +2 -1
- data/lib/active_scaffold/config/nested.rb +3 -2
- data/lib/active_scaffold/config/search.rb +1 -0
- data/lib/active_scaffold/config/show.rb +1 -0
- data/lib/active_scaffold/config/update.rb +8 -0
- data/lib/active_scaffold/constraints.rb +9 -4
- data/lib/active_scaffold/data_structures/action_columns.rb +1 -1
- data/lib/active_scaffold/data_structures/action_link.rb +10 -1
- data/lib/active_scaffold/data_structures/action_links.rb +62 -22
- data/lib/active_scaffold/data_structures/column.rb +17 -13
- data/lib/active_scaffold/data_structures/nested_info.rb +21 -6
- data/lib/active_scaffold/finder.rb +2 -1
- data/lib/active_scaffold/helpers/association_helpers.rb +2 -2
- data/lib/active_scaffold/helpers/controller_helpers.rb +57 -10
- data/lib/active_scaffold/helpers/form_column_helpers.rb +12 -8
- data/lib/active_scaffold/helpers/id_helpers.rb +5 -9
- data/lib/active_scaffold/helpers/list_column_helpers.rb +26 -28
- data/lib/active_scaffold/helpers/search_column_helpers.rb +8 -3
- data/lib/active_scaffold/helpers/view_helpers.rb +60 -19
- data/lib/active_scaffold/locale/de.rb +13 -6
- data/lib/active_scaffold/locale/en.rb +2 -1
- data/lib/active_scaffold/locale/es.yml +3 -0
- data/lib/active_scaffold/locale/fr.rb +5 -2
- data/lib/active_scaffold/locale/ru.yml +77 -20
- data/lib/active_scaffold/marked_model.rb +5 -5
- data/lib/{paginator.rb → active_scaffold/paginator.rb} +0 -0
- data/lib/{responds_to_parent.rb → active_scaffold/responds_to_parent.rb} +0 -0
- data/lib/active_scaffold/version.rb +9 -0
- data/lib/active_scaffold.rb +60 -84
- data/lib/active_scaffold_assets.rb +45 -0
- data/lib/active_scaffold_env.rb +14 -0
- data/lib/active_scaffold_vho.rb +2 -0
- data/lib/extensions/active_association_reflection.rb +13 -0
- data/lib/extensions/paginator_extensions.rb +1 -1
- data/lib/extensions/routing_mapper.rb +1 -1
- data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +12 -4
- metadata +85 -68
- data/lib/dhtml_confirm.rb +0 -54
@@ -2,7 +2,7 @@ module ActiveScaffold
|
|
2
2
|
module Helpers
|
3
3
|
module ControllerHelpers
|
4
4
|
def self.included(controller)
|
5
|
-
controller.class_eval { helper_method :params_for, :main_path_to_return }
|
5
|
+
controller.class_eval { helper_method :params_for, :main_path_to_return, :render_parent?, :render_parent_options, :render_parent_action, :nested_singular_association?}
|
6
6
|
end
|
7
7
|
|
8
8
|
include ActiveScaffold::Helpers::IdHelpers
|
@@ -26,16 +26,63 @@ module ActiveScaffold
|
|
26
26
|
# ActiveScaffold is used as a component on another controllers
|
27
27
|
# page)
|
28
28
|
def main_path_to_return
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
parameters
|
29
|
+
if params[:return_to]
|
30
|
+
params[:return_to]
|
31
|
+
else
|
32
|
+
parameters = {}
|
33
|
+
if params[:parent_controller]
|
34
|
+
parameters[:controller] = params[:parent_controller]
|
35
|
+
parameters[:eid] = params[:parent_controller]
|
36
|
+
end
|
37
|
+
if nested?
|
38
|
+
parameters[:controller] = nested.parent_scaffold.controller_path
|
39
|
+
parameters[:eid] = nil
|
40
|
+
end
|
41
|
+
if params[:parent_sti]
|
42
|
+
parameters[:controller] = params[:parent_sti]
|
43
|
+
parameters[:eid] = nil
|
44
|
+
end
|
45
|
+
parameters[:parent_column] = nil
|
46
|
+
parameters[:parent_id] = nil
|
47
|
+
parameters[:action] = "index"
|
48
|
+
parameters[:id] = nil
|
49
|
+
parameters[:associated_id] = nil
|
50
|
+
parameters[:utf8] = nil
|
51
|
+
params_for(parameters)
|
33
52
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
53
|
+
end
|
54
|
+
|
55
|
+
def nested_singular_association?
|
56
|
+
nested? && (nested.belongs_to? || nested.has_one?)
|
57
|
+
end
|
58
|
+
|
59
|
+
def render_parent?
|
60
|
+
nested_singular_association? || params[:parent_sti]
|
61
|
+
end
|
62
|
+
|
63
|
+
def render_parent_options
|
64
|
+
if nested_singular_association?
|
65
|
+
{:controller => nested.parent_scaffold.controller_path, :action => :row, :id => nested.parent_id}
|
66
|
+
elsif params[:parent_sti]
|
67
|
+
options = {:controller => params[:parent_sti], :action => render_parent_action(params[:parent_sti])}
|
68
|
+
if render_parent_action(params[:parent_sti]) == :index
|
69
|
+
options.merge(params.slice(:eid))
|
70
|
+
else
|
71
|
+
options.merge({:id => @record.id})
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def render_parent_action(controller_path = nil)
|
77
|
+
begin
|
78
|
+
@parent_action = :row
|
79
|
+
parent_controller = "#{controller_path.to_s.camelize}Controller".constantize
|
80
|
+
@parent_action = :index if action_name == 'create' && parent_controller.active_scaffold_config.actions.include?(:create) && parent_controller.active_scaffold_config.create.refresh_list == true
|
81
|
+
@parent_action = :index if action_name == 'update' && parent_controller.active_scaffold_config.actions.include?(:update) && parent_controller.active_scaffold_config.update.refresh_list == true
|
82
|
+
@parent_action = :index if action_name == 'destroy' && parent_controller.active_scaffold_config.actions.include?(:delete) && parent_controller.active_scaffold_config.delete.refresh_list == true
|
83
|
+
rescue ActiveScaffold::ControllerNotFound
|
84
|
+
end if @parent_action.nil?
|
85
|
+
@parent_action
|
39
86
|
end
|
40
87
|
end
|
41
88
|
end
|
@@ -139,19 +139,23 @@ module ActiveScaffold
|
|
139
139
|
[(text.is_a?(Symbol) ? column.active_record_class.human_attribute_name(text) : text), value]
|
140
140
|
end
|
141
141
|
|
142
|
+
def active_scaffold_input_enum(column, html_options)
|
143
|
+
options = { :selected => @record.send(column.name) }
|
144
|
+
options_for_select = column.options[:options].collect do |text, value|
|
145
|
+
active_scaffold_translated_option(column, text, value)
|
146
|
+
end
|
147
|
+
html_options.update(column.options[:html_options] || {})
|
148
|
+
options.update(column.options)
|
149
|
+
select(:record, column.name, options_for_select, options, html_options)
|
150
|
+
end
|
151
|
+
|
142
152
|
def active_scaffold_input_select(column, html_options)
|
143
153
|
if column.singular_association?
|
144
154
|
active_scaffold_input_singular_association(column, html_options)
|
145
155
|
elsif column.plural_association?
|
146
156
|
active_scaffold_input_plural_association(column, html_options)
|
147
157
|
else
|
148
|
-
|
149
|
-
options_for_select = column.options[:options].collect do |text, value|
|
150
|
-
active_scaffold_translated_option(column, text, value)
|
151
|
-
end
|
152
|
-
html_options.update(column.options[:html_options] || {})
|
153
|
-
options.update(column.options)
|
154
|
-
select(:record, column.name, options_for_select, options, html_options)
|
158
|
+
active_scaffold_input_enum(column, html_options)
|
155
159
|
end
|
156
160
|
end
|
157
161
|
|
@@ -160,7 +164,7 @@ module ActiveScaffold
|
|
160
164
|
column.options[:options].inject('') do |html, (text, value)|
|
161
165
|
text, value = active_scaffold_translated_option(column, text, value)
|
162
166
|
html << content_tag(:label, radio_button(:record, column.name, value, html_options.merge(:id => html_options[:id] + '-' + value.to_s)) + text)
|
163
|
-
end
|
167
|
+
end.html_safe
|
164
168
|
end
|
165
169
|
|
166
170
|
# requires RecordSelect plugin to be installed and configured.
|
@@ -6,8 +6,8 @@ module ActiveScaffold
|
|
6
6
|
controller.to_s.gsub("/", "__")
|
7
7
|
end
|
8
8
|
|
9
|
-
def controller_id
|
10
|
-
controller_id ||= 'as_' + id_from_controller(
|
9
|
+
def controller_id(controller = (params[:eid] || params[:parent_controller] || params[:controller]))
|
10
|
+
controller_id ||= 'as_' + id_from_controller(controller)
|
11
11
|
end
|
12
12
|
|
13
13
|
def active_scaffold_id
|
@@ -22,8 +22,8 @@ module ActiveScaffold
|
|
22
22
|
"#{controller_id}-tbody"
|
23
23
|
end
|
24
24
|
|
25
|
-
def active_scaffold_messages_id
|
26
|
-
"#{controller_id}-messages"
|
25
|
+
def active_scaffold_messages_id(options = {})
|
26
|
+
"#{options[:controller_id] || controller_id}-messages"
|
27
27
|
end
|
28
28
|
|
29
29
|
def active_scaffold_calculations_id(column = nil)
|
@@ -38,10 +38,6 @@ module ActiveScaffold
|
|
38
38
|
"#{controller_id}-search-container"
|
39
39
|
end
|
40
40
|
|
41
|
-
def search_form_id
|
42
|
-
"#{controller_id}-search-form"
|
43
|
-
end
|
44
|
-
|
45
41
|
def search_input_id
|
46
42
|
"#{controller_id}-search-input"
|
47
43
|
end
|
@@ -63,7 +59,7 @@ module ActiveScaffold
|
|
63
59
|
options[:action] ||= params[:action]
|
64
60
|
options[:id] ||= params[:id]
|
65
61
|
options[:id] ||= params[:parent_id]
|
66
|
-
clean_id "#{controller_id}-#{options[:action]}-#{options[:id]}-row"
|
62
|
+
clean_id "#{options[:controller_id] || controller_id}-#{options[:action]}-#{options[:id]}-row"
|
67
63
|
end
|
68
64
|
|
69
65
|
def element_cell_id(options = {})
|
@@ -43,23 +43,11 @@ module ActiveScaffold
|
|
43
43
|
url_options[:link] = as_(:create_new) if link.crud_type == :create
|
44
44
|
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
associated_for_authorized = if associated.nil? || (associated.respond_to?(:empty?) && associated.empty?)
|
49
|
-
column.association.klass
|
50
|
-
elsif column.plural_association?
|
51
|
-
associated.first
|
52
|
-
else
|
53
|
-
associated
|
54
|
-
end
|
55
|
-
authorized = associated_for_authorized.authorized_for?(:crud_type => link.crud_type)
|
56
|
-
authorized = authorized and record.authorized_for?(:crud_type => :update, :column => column.name) if link.crud_type == :create
|
46
|
+
if column_link_authorized?(link, column, record, associated)
|
47
|
+
render_action_link(link, url_options, record)
|
57
48
|
else
|
58
|
-
|
49
|
+
"<a class='disabled'>#{text}</a>".html_safe
|
59
50
|
end
|
60
|
-
# to make html render properly
|
61
|
-
return "<a class='disabled'>#{text}</a>".html_safe unless authorized
|
62
|
-
render_action_link(link, url_options, record)
|
63
51
|
else
|
64
52
|
text = active_scaffold_inplace_edit(record, column, {:formatted_column => text}) if inplace_edit?(record, column)
|
65
53
|
text
|
@@ -70,36 +58,46 @@ module ActiveScaffold
|
|
70
58
|
def action_link_to_inline_form(column, record, associated)
|
71
59
|
link = column.link.clone
|
72
60
|
if column.polymorphic_association?
|
73
|
-
polymorphic_controller =
|
61
|
+
polymorphic_controller = controller_path_for_activerecord(record.send(column.association.name).class)
|
74
62
|
return link if polymorphic_controller.nil?
|
75
63
|
link.controller = polymorphic_controller
|
76
64
|
end
|
65
|
+
configure_column_link(link, associated, column.actions_for_association_links)
|
66
|
+
end
|
77
67
|
|
68
|
+
def configure_column_link(link, associated, actions)
|
78
69
|
if column_empty?(associated) # if association is empty, we only can link to create form
|
79
|
-
if
|
70
|
+
if actions.include?(:new)
|
80
71
|
link.action = 'new'
|
81
72
|
link.crud_type = :create
|
82
73
|
end
|
83
|
-
elsif
|
74
|
+
elsif actions.include?(:edit)
|
84
75
|
link.action = 'edit'
|
85
76
|
link.crud_type = :update
|
86
|
-
elsif
|
77
|
+
elsif actions.include?(:show)
|
87
78
|
link.action = 'show'
|
88
79
|
link.crud_type = :read
|
89
|
-
elsif
|
90
|
-
link.parameters[:id] = record.send(column.association.name).id
|
80
|
+
elsif actions.include?(:list)
|
91
81
|
link.action = 'index'
|
92
82
|
link.crud_type = :read
|
93
83
|
end
|
94
84
|
link
|
95
85
|
end
|
96
86
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
87
|
+
def column_link_authorized?(link, column, record, associated)
|
88
|
+
if column.association
|
89
|
+
associated_for_authorized = if associated.nil? || (associated.respond_to?(:empty?) && associated.empty?)
|
90
|
+
column.association.klass
|
91
|
+
elsif [:has_many, :has_and_belongs_to_many].include? column.association.macro
|
92
|
+
associated.first
|
93
|
+
else
|
94
|
+
associated
|
95
|
+
end
|
96
|
+
authorized = associated_for_authorized.authorized_for?(:crud_type => link.crud_type)
|
97
|
+
authorized = authorized and record.authorized_for?(:crud_type => :update, :column => column.name) if link.crud_type == :create
|
98
|
+
authorized
|
99
|
+
else
|
100
|
+
record.authorized_for?(:crud_type => link.crud_type)
|
103
101
|
end
|
104
102
|
end
|
105
103
|
|
@@ -347,7 +345,7 @@ module ActiveScaffold
|
|
347
345
|
|
348
346
|
def render_nested_view(action_links, url_options, record)
|
349
347
|
rendered = []
|
350
|
-
action_links.each do |link|
|
348
|
+
action_links.member.each do |link|
|
351
349
|
if link.nested_link? && link.column && @nested_auto_open[link.column.name] && @records.length <= @nested_auto_open[link.column.name] && respond_to?(:render_component)
|
352
350
|
link_url_options = {:adapter => '_list_inline_adapter', :format => :js}.merge(action_link_url_options(link, url_options, record, options = {:reuse_eid => true}))
|
353
351
|
link_id = get_action_link_id(link_url_options, record, link.column)
|
@@ -123,8 +123,13 @@ module ActiveScaffold
|
|
123
123
|
|
124
124
|
def active_scaffold_search_range(column, options)
|
125
125
|
opt_value, from_value, to_value = field_search_params_range_values(column)
|
126
|
+
|
127
|
+
text_field_size = 10
|
126
128
|
select_options = ActiveScaffold::Finder::NumericComparators.collect {|comp| [as_(comp.downcase.to_sym), comp]}
|
127
|
-
|
129
|
+
if column.column && column.column.text?
|
130
|
+
select_options.unshift *ActiveScaffold::Finder::StringComparators.collect {|title, comp| [as_(title), comp]}
|
131
|
+
text_field_size = 15
|
132
|
+
end
|
128
133
|
from_value = controller.class.condition_value_for_numeric(column, from_value)
|
129
134
|
to_value = controller.class.condition_value_for_numeric(column, to_value)
|
130
135
|
from_value = format_number_value(from_value, column.options) if from_value.is_a?(Numeric)
|
@@ -133,9 +138,9 @@ module ActiveScaffold
|
|
133
138
|
options_for_select(select_options, opt_value),
|
134
139
|
:id => "#{options[:id]}_opt",
|
135
140
|
:class => "as_search_range_option")
|
136
|
-
html << ' ' << text_field_tag("#{options[:name]}[from]", from_value, active_scaffold_input_text_options(:id => options[:id], :size =>
|
141
|
+
html << ' ' << text_field_tag("#{options[:name]}[from]", from_value, active_scaffold_input_text_options(:id => options[:id], :size => text_field_size))
|
137
142
|
html << ' ' << content_tag(:span, (' - ' + text_field_tag("#{options[:name]}[to]", to_value,
|
138
|
-
active_scaffold_input_text_options(:id => "#{options[:id]}_to", :size =>
|
143
|
+
active_scaffold_input_text_options(:id => "#{options[:id]}_to", :size => text_field_size))).html_safe,
|
139
144
|
:id => "#{options[:id]}_between", :class => "as_search_range_between", :style => "display:#{(opt_value == 'BETWEEN') ? '' : 'none'}")
|
140
145
|
html
|
141
146
|
end
|
@@ -34,6 +34,15 @@ module ActiveScaffold
|
|
34
34
|
## Uncategorized
|
35
35
|
##
|
36
36
|
|
37
|
+
def controller_path_for_activerecord(klass)
|
38
|
+
begin
|
39
|
+
controller = active_scaffold_controller_for(klass)
|
40
|
+
controller.controller_path
|
41
|
+
rescue ActiveScaffold::ControllerNotFound
|
42
|
+
controller = nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
37
46
|
def generate_temporary_id
|
38
47
|
(Time.now.to_f*1000).to_i.to_s
|
39
48
|
end
|
@@ -128,6 +137,14 @@ module ActiveScaffold
|
|
128
137
|
action_link_html(link, url_options, html_options)
|
129
138
|
end
|
130
139
|
|
140
|
+
def render_group_action_link(link, url_options, options, record = nil)
|
141
|
+
if link.type == :member && !options[:authorized]
|
142
|
+
action_link_html(link, nil, {:class => "disabled #{link.action}#{link.html_options[:class].blank? ? '' : (' ' + link.html_options[:class])}"})
|
143
|
+
else
|
144
|
+
render_action_link(link, url_options, record)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
131
148
|
def action_link_url_options(link, url_options, record, options = {})
|
132
149
|
url_options = url_options.clone
|
133
150
|
url_options[:action] = link.action
|
@@ -135,7 +152,8 @@ module ActiveScaffold
|
|
135
152
|
url_options.delete(:search) if link.controller and link.controller.to_s != params[:controller]
|
136
153
|
url_options.merge! link.parameters if link.parameters
|
137
154
|
url_options_for_nested_link(link.column, record, link, url_options, options) if link.nested_link?
|
138
|
-
|
155
|
+
url_options_for_sti_link(link.column, record, link, url_options, options) unless record.nil? || active_scaffold_config.sti_children.nil?
|
156
|
+
url_options[:_method] = link.method if !link.confirm? && link.inline? && link.method != :get
|
139
157
|
url_options
|
140
158
|
end
|
141
159
|
|
@@ -144,14 +162,17 @@ module ActiveScaffold
|
|
144
162
|
html_options.reverse_merge! link.html_options.merge(:class => link.action)
|
145
163
|
|
146
164
|
# Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
|
147
|
-
html_options[:method] = link.method if
|
165
|
+
html_options[:method] = link.method if link.method != :get
|
148
166
|
|
149
167
|
html_options['data-confirm'] = link.confirm(record.try(:to_label)) if link.confirm?
|
150
168
|
html_options['data-position'] = link.position if link.position and link.inline?
|
151
169
|
html_options[:class] += ' as_action' if link.inline?
|
152
|
-
|
170
|
+
if link.popup?
|
171
|
+
html_options['data-popup'] = true
|
172
|
+
html_options[:target] = '_blank'
|
173
|
+
end
|
153
174
|
html_options[:id] = link_id
|
154
|
-
html_options[:remote] = true unless link.page?
|
175
|
+
html_options[:remote] = true unless link.page? || link.popup?
|
155
176
|
if link.dhtml_confirm?
|
156
177
|
html_options[:class] += ' as_action' if !link.inline?
|
157
178
|
html_options[:page_link] = 'true' if !link.inline?
|
@@ -161,6 +182,7 @@ module ActiveScaffold
|
|
161
182
|
html_options[:class] += " #{link.html_options[:class]}" unless link.html_options[:class].blank?
|
162
183
|
html_options
|
163
184
|
end
|
185
|
+
|
164
186
|
def get_action_link_id(url_options, record = nil, column = nil)
|
165
187
|
id = url_options[:id] || url_options[:parent_id]
|
166
188
|
id = "#{column.association.name}-#{record.id}" if column && column.plural_association?
|
@@ -199,6 +221,16 @@ module ActiveScaffold
|
|
199
221
|
end
|
200
222
|
end
|
201
223
|
|
224
|
+
def url_options_for_sti_link(column, record, link, url_options, options = {})
|
225
|
+
#need to find out controller of current record type
|
226
|
+
#and set parameters
|
227
|
+
sti_controller_path = controller_path_for_activerecord(record.class)
|
228
|
+
if sti_controller_path
|
229
|
+
url_options[:controller] = sti_controller_path
|
230
|
+
url_options[:parent_sti] = controller_path
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
202
234
|
def column_class(column, column_value, record)
|
203
235
|
classes = []
|
204
236
|
classes << "#{column.name}-column"
|
@@ -219,7 +251,7 @@ module ActiveScaffold
|
|
219
251
|
classes = []
|
220
252
|
classes << "#{column.name}-column_heading"
|
221
253
|
classes << "sorted #{sorting.direction_of(column).downcase}" if sorting.sorts_on? column
|
222
|
-
classes << column.css_class unless column.css_class.nil?
|
254
|
+
classes << column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc)
|
223
255
|
classes.join(' ')
|
224
256
|
end
|
225
257
|
|
@@ -231,11 +263,15 @@ module ActiveScaffold
|
|
231
263
|
end
|
232
264
|
|
233
265
|
def column_calculation(column)
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
266
|
+
unless column.calculate.instance_of? Proc
|
267
|
+
conditions = controller.send(:all_conditions)
|
268
|
+
includes = active_scaffold_config.list.count_includes
|
269
|
+
includes ||= controller.send(:active_scaffold_includes) unless conditions.nil?
|
270
|
+
calculation = beginning_of_chain.calculate(column.calculate, column.name, :conditions => conditions,
|
271
|
+
:joins => controller.send(:joins_for_collection), :include => includes)
|
272
|
+
else
|
273
|
+
column.calculate.call(@records)
|
274
|
+
end
|
239
275
|
end
|
240
276
|
|
241
277
|
def render_column_calculation(column)
|
@@ -243,7 +279,7 @@ module ActiveScaffold
|
|
243
279
|
override_formatter = "render_#{column.name}_#{column.calculate}"
|
244
280
|
calculation = send(override_formatter, calculation) if respond_to? override_formatter
|
245
281
|
|
246
|
-
"#{as_(column.calculate)}: #{format_column_value nil, column, calculation}"
|
282
|
+
"#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
|
247
283
|
end
|
248
284
|
|
249
285
|
def column_show_add_existing(column)
|
@@ -256,8 +292,9 @@ module ActiveScaffold
|
|
256
292
|
value
|
257
293
|
end
|
258
294
|
|
259
|
-
def
|
295
|
+
def active_scaffold_error_messages_for(*params)
|
260
296
|
options = params.extract_options!.symbolize_keys
|
297
|
+
options.reverse_merge!(:container_tag => :div, :list_type => :ul)
|
261
298
|
|
262
299
|
objects = Array.wrap(options.delete(:object) || params).map do |object|
|
263
300
|
object = instance_variable_get("@#{object}") unless object.respond_to?(:to_model)
|
@@ -295,17 +332,21 @@ module ActiveScaffold
|
|
295
332
|
|
296
333
|
error_messages = objects.sum do |object|
|
297
334
|
object.errors.full_messages.map do |msg|
|
298
|
-
content_tag(:li, msg)
|
335
|
+
options[:list_type] != :br ? content_tag(:li, msg) : msg
|
299
336
|
end
|
300
|
-
end
|
337
|
+
end
|
338
|
+
error_messages = if options[:list_type] == :br
|
339
|
+
error_messages.join('<br/>').html_safe
|
340
|
+
else
|
341
|
+
content_tag(options[:list_type], error_messages.join.html_safe)
|
342
|
+
end
|
301
343
|
|
302
|
-
contents =
|
344
|
+
contents = []
|
303
345
|
contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
|
304
346
|
contents << content_tag(:p, message) unless message.blank?
|
305
|
-
contents <<
|
306
|
-
|
307
|
-
content_tag(:
|
308
|
-
|
347
|
+
contents << error_messages
|
348
|
+
contents = contents.join.html_safe
|
349
|
+
options[:container_tag] ? content_tag(options[:container_tag], contents, html) : contents
|
309
350
|
else
|
310
351
|
''
|
311
352
|
end
|
@@ -7,13 +7,14 @@
|
|
7
7
|
:are_you_sure_to_delete => 'Sind Sie sicher?',
|
8
8
|
:cancel => 'Abbrechen',
|
9
9
|
:click_to_edit => 'Zum Editieren anklicken',
|
10
|
+
:click_to_reset => 'Reset',
|
10
11
|
:close => 'Schliessen',
|
11
12
|
:config_list => 'Konfigurieren',
|
12
13
|
:config_list_model => 'Konfiguriere Spalten für %{model}',
|
13
14
|
:create => 'Anlegen',
|
14
15
|
:create_model => 'Lege %{model} an',
|
15
16
|
:create_another => 'Weitere anlegen',
|
16
|
-
:created_model => '%{model}
|
17
|
+
:created_model => '%{model} angelegt',
|
17
18
|
:create_new => 'Neu anlegen',
|
18
19
|
:customize => 'Anpassen',
|
19
20
|
:delete => 'Löschen',
|
@@ -60,6 +61,9 @@
|
|
60
61
|
:'<' => '<',
|
61
62
|
:'!=' => '!=',
|
62
63
|
:between => 'Zwischen',
|
64
|
+
:contains => 'Enthält',
|
65
|
+
:begins_with => 'Beginnt',
|
66
|
+
:ends_with => 'Ended',
|
63
67
|
:today => 'Heute',
|
64
68
|
:yesterday => 'Gestern',
|
65
69
|
:tomorrow => 'Morgen',
|
@@ -74,7 +78,7 @@
|
|
74
78
|
:next_year => 'Nächstes Jahr',
|
75
79
|
:past => 'Letzten',
|
76
80
|
:future => 'Nächsten',
|
77
|
-
:range => '
|
81
|
+
:range => 'Zeitraum',
|
78
82
|
:seconds => 'Sekunden',
|
79
83
|
:minutes => 'Minuten',
|
80
84
|
:hours => 'Stunden',
|
@@ -83,8 +87,8 @@
|
|
83
87
|
:months => 'Monate',
|
84
88
|
:years => 'Jahre',
|
85
89
|
:optional_attributes => 'Weitere',
|
86
|
-
:null => '
|
87
|
-
:not_null => '
|
90
|
+
:null => 'Null',
|
91
|
+
:not_null => 'Nicht Null',
|
88
92
|
:date_picker_options => {
|
89
93
|
:weekHeader => 'Wo',
|
90
94
|
:firstDay => 1,
|
@@ -92,7 +96,9 @@
|
|
92
96
|
:showMonthAfterYear => false
|
93
97
|
},
|
94
98
|
:datetime_picker_options => {
|
95
|
-
:timeText => 'Uhrzeit'
|
99
|
+
:timeText => 'Uhrzeit',
|
100
|
+
:currentText => 'Jetzt',
|
101
|
+
:closeText => 'Schließen'
|
96
102
|
},
|
97
103
|
:errors => {
|
98
104
|
:template => {
|
@@ -107,7 +113,8 @@
|
|
107
113
|
:cant_destroy_record => "%{record} kann nicht gelöscht werden",
|
108
114
|
:internal_error => 'Fehler bei der Verarbeitung (code 500, Interner Fehler)',
|
109
115
|
:version_inconsistency => 'Inkonsistente Versionen - dieser Eintrag wurde verändert nachdem Sie mit der Bearbeitung begonnen haben.',
|
110
|
-
:record_not_saved => 'Eintrag kann nicht gespeichert werden. Ursache unbekannt.'
|
116
|
+
:record_not_saved => 'Eintrag kann nicht gespeichert werden. Ursache unbekannt.',
|
117
|
+
:no_authorization_for_action => "Keine Berechtigung für Aktion %{action}"
|
111
118
|
}
|
112
119
|
}
|
113
120
|
}
|
@@ -112,7 +112,8 @@
|
|
112
112
|
:cant_destroy_record => "%{record} can't be destroyed",
|
113
113
|
:internal_error => 'Request Failed (code 500, Internal Error)',
|
114
114
|
:version_inconsistency => 'Version inconsistency - this record has been modified since you started editing it.',
|
115
|
-
:record_not_saved => 'Failed to save record cause of an unknown error'
|
115
|
+
:record_not_saved => 'Failed to save record cause of an unknown error',
|
116
|
+
:no_authorization_for_action => "No Authorization for action %{action}"
|
116
117
|
}
|
117
118
|
}
|
118
119
|
}
|
@@ -99,6 +99,8 @@ es:
|
|
99
99
|
showMonthAfterYear: false
|
100
100
|
datetime_picker_options:
|
101
101
|
timeText: 'Hora'
|
102
|
+
currentText: 'Ahora'
|
103
|
+
closeText: 'Cerrar'
|
102
104
|
errors:
|
103
105
|
template:
|
104
106
|
header:
|
@@ -110,3 +112,4 @@ es:
|
|
110
112
|
cant_destroy_record: "No se pudo borrar %{record}"
|
111
113
|
internal_error: 'Petición fallida (código 500, error interno)'
|
112
114
|
version_inconsistency: 'Inconsistencia de versiones - este registro se ha modificado después de que empezó a editarlo.'
|
115
|
+
no_authorization_for_action: "No Authorization for action %{action}"
|
@@ -92,7 +92,9 @@
|
|
92
92
|
:showMonthAfterYear => false,
|
93
93
|
},
|
94
94
|
:datetime_picker_options => {
|
95
|
-
:timeText => 'Heure'
|
95
|
+
:timeText => 'Heure',
|
96
|
+
:currentText => 'Maintenant',
|
97
|
+
:closeText => 'Fermer'
|
96
98
|
},
|
97
99
|
:errors => {
|
98
100
|
:template => {
|
@@ -107,7 +109,8 @@
|
|
107
109
|
:cant_destroy_record => "%{record} can't be destroyed",
|
108
110
|
:internal_error => 'Erreur de la requête (code 500, Erreur interne)',
|
109
111
|
:version_inconsistency => "Version incomplète - Cet enregistrement a été modifié depuis que vous avez commencé à l'éditer.",
|
110
|
-
:record_not_saved => 'Failed to save record cause of an unknown error'
|
112
|
+
:record_not_saved => 'Failed to save record cause of an unknown error',
|
113
|
+
:no_authorization_for_action => "No Authorization for action %{action}"
|
111
114
|
}
|
112
115
|
}
|
113
116
|
}
|