active_scaffold 3.3.3 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +39 -0
- data/README.md +5 -3
- data/app/assets/images/active_scaffold/refresh.png +0 -0
- data/app/assets/javascripts/jquery/active_scaffold.js +182 -91
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +14 -16
- data/app/assets/javascripts/jquery/draggable_lists.js +33 -26
- data/app/assets/javascripts/jquery/jquery.editinplace.js +3 -3
- data/app/assets/javascripts/prototype/active_scaffold.js +61 -19
- data/app/assets/stylesheets/active_scaffold_colors.css.scss +4 -0
- data/app/assets/stylesheets/active_scaffold_images.css.scss +3 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +23 -2
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +1 -3
- data/app/views/active_scaffold_overrides/_base_form.html.erb +7 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +1 -2
- data/app/views/active_scaffold_overrides/_form.html.erb +6 -4
- data/app/views/active_scaffold_overrides/_form_association.html.erb +4 -3
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +3 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +1 -4
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +8 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +7 -13
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +1 -1
- data/config/locales/de.yml +106 -95
- data/config/locales/en.yml +108 -97
- data/config/locales/es.yml +109 -98
- data/config/locales/fr.yml +108 -97
- data/config/locales/hu.yml +109 -98
- data/config/locales/ja.yml +100 -89
- data/config/locales/ru.yml +115 -104
- data/lib/active_scaffold.rb +18 -294
- data/lib/active_scaffold/actions/common_search.rb +50 -17
- data/lib/active_scaffold/actions/core.rb +93 -22
- data/lib/active_scaffold/actions/create.rb +15 -6
- data/lib/active_scaffold/actions/field_search.rb +68 -60
- data/lib/active_scaffold/actions/list.rb +49 -28
- data/lib/active_scaffold/actions/nested.rb +14 -6
- data/lib/active_scaffold/actions/search.rb +36 -35
- data/lib/active_scaffold/actions/show.rb +9 -4
- data/lib/active_scaffold/actions/subform.rb +1 -1
- data/lib/active_scaffold/actions/update.rb +22 -7
- data/lib/active_scaffold/active_record_permissions.rb +125 -118
- data/lib/active_scaffold/attribute_params.rb +84 -66
- data/lib/active_scaffold/bridges.rb +3 -3
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +10 -5
- data/lib/active_scaffold/bridges/cancan.rb +2 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +13 -2
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -6
- data/lib/active_scaffold/bridges/chosen/helpers.rb +2 -2
- data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +45 -29
- data/lib/active_scaffold/bridges/date_picker/ext.rb +11 -6
- data/lib/active_scaffold/bridges/date_picker/helper.rb +5 -1
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +10 -5
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +12 -11
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +14 -6
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +15 -12
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +7 -8
- data/lib/active_scaffold/bridges/tiny_mce.rb +5 -3
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +4 -5
- data/lib/active_scaffold/config/base.rb +4 -0
- data/lib/active_scaffold/config/core.rb +12 -5
- data/lib/active_scaffold/config/delete.rb +0 -2
- data/lib/active_scaffold/config/field_search.rb +1 -4
- data/lib/active_scaffold/config/form.rb +0 -2
- data/lib/active_scaffold/config/list.rb +31 -1
- data/lib/active_scaffold/config/search.rb +0 -3
- data/lib/active_scaffold/config/show.rb +0 -6
- data/lib/active_scaffold/config/subform.rb +1 -0
- data/lib/active_scaffold/configurable.rb +2 -2
- data/lib/active_scaffold/constraints.rb +11 -14
- data/lib/active_scaffold/core.rb +277 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +18 -2
- data/lib/active_scaffold/data_structures/action_link.rb +25 -6
- data/lib/active_scaffold/data_structures/action_links.rb +9 -4
- data/lib/active_scaffold/data_structures/actions.rb +1 -1
- data/lib/active_scaffold/data_structures/column.rb +6 -6
- data/lib/active_scaffold/data_structures/columns.rb +2 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +5 -1
- data/lib/active_scaffold/data_structures/sorting.rb +15 -5
- data/lib/active_scaffold/delayed_setup.rb +30 -0
- data/lib/active_scaffold/engine.rb +25 -0
- data/lib/active_scaffold/extensions/action_view_rendering.rb +1 -1
- data/lib/active_scaffold/extensions/left_outer_joins.rb +61 -21
- data/lib/active_scaffold/extensions/localize.rb +1 -1
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +13 -8
- data/lib/active_scaffold/extensions/paginator_extensions.rb +5 -1
- data/lib/active_scaffold/extensions/reverse_associations.rb +1 -0
- data/lib/active_scaffold/extensions/routing_mapper.rb +1 -1
- data/lib/active_scaffold/extensions/unsaved_record.rb +4 -6
- data/lib/active_scaffold/finder.rb +79 -27
- data/lib/active_scaffold/helpers/association_helpers.rb +48 -18
- data/lib/active_scaffold/helpers/controller_helpers.rb +19 -10
- data/lib/active_scaffold/helpers/form_column_helpers.rb +185 -87
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +2 -1
- data/lib/active_scaffold/helpers/id_helpers.rb +14 -8
- data/lib/active_scaffold/helpers/list_column_helpers.rb +65 -56
- data/lib/active_scaffold/helpers/pagination_helpers.rb +5 -1
- data/lib/active_scaffold/helpers/search_column_helpers.rb +21 -18
- data/lib/active_scaffold/helpers/view_helpers.rb +102 -64
- data/lib/active_scaffold/responds_to_parent.rb +39 -64
- data/lib/active_scaffold/tableless.rb +129 -10
- data/lib/active_scaffold/version.rb +2 -2
- data/test/bridges/bridge_test.rb +1 -1
- data/test/bridges/date_picker_test.rb +2 -2
- data/test/bridges/paperclip_test.rb +10 -8
- data/test/bridges/tiny_mce_test.rb +2 -2
- data/test/company.rb +22 -10
- data/test/config/base_test.rb +1 -1
- data/test/config/core_test.rb +8 -6
- data/test/config/create_test.rb +6 -6
- data/test/config/delete_test.rb +4 -4
- data/test/config/field_search_test.rb +6 -6
- data/test/config/list_test.rb +7 -7
- data/test/config/nested_test.rb +8 -7
- data/test/config/search_test.rb +7 -7
- data/test/config/show_test.rb +5 -5
- data/test/config/subform_test.rb +1 -1
- data/test/config/update_test.rb +5 -4
- data/test/data_structures/action_columns_test.rb +15 -16
- data/test/data_structures/action_link_test.rb +10 -10
- data/test/data_structures/action_links_test.rb +6 -6
- data/test/data_structures/actions_test.rb +4 -4
- data/test/data_structures/association_column_test.rb +4 -4
- data/test/data_structures/column_test.rb +9 -9
- data/test/data_structures/columns_test.rb +7 -7
- data/test/data_structures/error_message_test.rb +2 -4
- data/test/data_structures/set_test.rb +13 -13
- data/test/data_structures/sorting_test.rb +8 -8
- data/test/data_structures/standard_column_test.rb +2 -2
- data/test/data_structures/validation_reflection_test.rb +8 -8
- data/test/data_structures/virtual_column_test.rb +5 -5
- data/test/extensions/active_record_test.rb +1 -1
- data/test/helpers/form_column_helpers_test.rb +5 -5
- data/test/helpers/list_column_helpers_test.rb +2 -1
- data/test/helpers/pagination_helpers_test.rb +1 -1
- data/test/misc/active_record_permissions_test.rb +23 -4
- data/test/misc/attribute_params_test.rb +304 -136
- data/test/misc/calculation_test.rb +55 -0
- data/test/misc/configurable_test.rb +22 -21
- data/test/misc/constraints_test.rb +10 -7
- data/test/misc/convert_numbers_format_test.rb +149 -0
- data/test/misc/finder_test.rb +17 -13
- data/test/misc/lang_test.rb +1 -1
- data/test/misc/tableless_test.rb +18 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +4 -0
- data/test/mock_app/app/controllers/buildings_controller.rb +4 -0
- data/test/mock_app/app/controllers/cars_controller.rb +4 -0
- data/test/mock_app/app/controllers/contacts_controller.rb +4 -0
- data/test/mock_app/app/controllers/floors_controller.rb +6 -0
- data/test/mock_app/app/controllers/people_controller.rb +4 -0
- data/test/mock_app/app/models/address.rb +3 -0
- data/test/mock_app/app/models/building.rb +8 -0
- data/test/mock_app/app/models/car.rb +3 -0
- data/test/mock_app/app/models/contact.rb +3 -0
- data/test/mock_app/app/models/file_model.rb +19 -0
- data/test/mock_app/app/models/floor.rb +8 -0
- data/test/mock_app/app/models/person.rb +11 -0
- data/test/mock_app/config/application.rb +2 -0
- data/test/mock_app/config/environments/test.rb +1 -1
- data/test/mock_app/config/initializers/secret_token.rb +5 -1
- data/test/mock_app/config/routes.rb +1 -1
- data/test/mock_app/db/schema.rb +51 -0
- data/test/model_stub.rb +3 -3
- data/test/test_helper.rb +15 -12
- metadata +51 -50
- data/lib/active_scaffold/extensions/array.rb +0 -7
- data/lib/active_scaffold/extensions/cache_association.rb +0 -16
- data/lib/active_scaffold/extensions/usa_state.rb +0 -46
- data/lib/active_scaffold_env.rb +0 -13
- data/test/extensions/array_test.rb +0 -12
- data/test/mock_app/public/blank.html +0 -33
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +0 -532
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +0 -867
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +0 -117
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +0 -370
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +0 -35
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +0 -848
@@ -25,8 +25,7 @@ form_tag url_options, options %>
|
|
25
25
|
</ol>
|
26
26
|
<p class="form-footer">
|
27
27
|
<%= submit_tag as_(:search), :class => "submit" %>
|
28
|
-
<%= link_to as_(:reset), url_for(url_options.merge(:search => '')), :class => 'as_cancel', :remote => true, :data => {:refresh => true} %>
|
28
|
+
<%= link_to as_(:reset), url_for(url_options.merge(:search => '')), :class => 'as_cancel reset', :remote => true, :data => {:refresh => true} %>
|
29
29
|
<%= loading_indicator_tag(:action => :search) %>
|
30
30
|
</p>
|
31
31
|
</form>
|
32
|
-
<%= javascript_tag("ActiveScaffold.focus_first_element_of_form('#{element_form_id(:action => 'search')}');") %>
|
@@ -7,20 +7,22 @@
|
|
7
7
|
<% columns.each :for => @record, :crud_type => (:read if show_unauthorized_columns) do |column| %>
|
8
8
|
<% column_css_class = column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc) %>
|
9
9
|
<% renders_as = column_renders_as(column) %>
|
10
|
-
<% authorized = show_unauthorized_columns ? @record.authorized_for?(:crud_type => form_action, :column => column.name) : true
|
10
|
+
<% authorized = show_unauthorized_columns || renders_as == :subsection ? @record.authorized_for?(:crud_type => form_action, :column => column.name) : true %>
|
11
11
|
<% if renders_as == :subsection -%>
|
12
|
+
<% if authorized %>
|
12
13
|
<% subsection_id = sub_section_id(:sub_section => column.label) %>
|
13
14
|
<li class="sub-section <%= column_css_class %>">
|
14
15
|
<h5><%= column.label %></h5>
|
15
16
|
<%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id, :form_action => form_action, :scope => scope } %>
|
16
17
|
<%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
|
17
18
|
</li>
|
19
|
+
<% end %>
|
18
20
|
<% elsif renders_as == :subform and authorized -%>
|
19
|
-
|
21
|
+
<%= content_tag :li, active_scaffold_subform_attributes(column, column_css_class) do %>
|
20
22
|
<%= render_column(column, @record, renders_as, scope) %>
|
21
|
-
|
23
|
+
<% end %>
|
22
24
|
<% else -%>
|
23
|
-
<li class="form-element <%= 'required' if column.required? %> <%= column_css_class %>">
|
25
|
+
<li class="form-element <%= 'required' if column.required? %> <%= column.form_ui %> <%= column_css_class %>">
|
24
26
|
<%= render_column(column, @record, renders_as, scope, !authorized) %>
|
25
27
|
</li>
|
26
28
|
<% end -%>
|
@@ -1,9 +1,10 @@
|
|
1
1
|
<%
|
2
|
+
ActiveSupport::Deprecation.warn "Relying on @record to render form_asssociation partial with no parent_record local variable is deprecated", caller(1) unless local_assigns[:parent_record]
|
2
3
|
parent_record ||= @record # save @record, some partial can change @record TODO remove when changing @record is removed
|
3
4
|
associated = column.singular_association? ? [parent_record.send(column.name)].compact : parent_record.send(column.name).to_a
|
4
|
-
associated = associated.sort_by {|r| r.new_record? ? 99999999999 : r.id} unless column.association.options.has_key?(:order)
|
5
|
+
#associated = associated.sort_by {|r| r.new_record? ? 99999999999 : r.id} unless column.association.options.has_key?(:order)
|
5
6
|
if column.show_blank_record?(associated)
|
6
|
-
show_blank_record = build_associated(column, parent_record)
|
7
|
+
show_blank_record = build_associated(column.association, parent_record)
|
7
8
|
end
|
8
9
|
disable_required_for_new = @disable_required_for_new
|
9
10
|
@disable_required_for_new = !!show_blank_record unless (column.singular_association? && column.required?)
|
@@ -12,7 +13,7 @@ subform_div_id = "#{sub_form_id(:association => column.name, :id => parent_recor
|
|
12
13
|
<h5><%= column.label -%></h5>
|
13
14
|
<div id ="<%= subform_div_id %>" <%= 'style="display: none;"'.html_safe if column.collapsed -%>>
|
14
15
|
<%# HACK to be able to delete all associated records %>
|
15
|
-
<%= hidden_field_tag "#{active_scaffold_input_options(column, scope)[:name]}[0]", '' if column.plural_association? %>
|
16
|
+
<%= hidden_field_tag "#{active_scaffold_input_options(column, scope, :object => parent_record)[:name]}[0]", '' if column.plural_association? %>
|
16
17
|
<%= render :partial => subform_partial_for_column(column), :locals => {:column => column, :parent_record => parent_record, :associated => associated, :show_blank_record => show_blank_record, :scope => scope} %>
|
17
18
|
<%= render :partial => 'form_association_footer', :locals => {:parent_record => parent_record, :column => column, :associated => associated, :scope => scope} -%>
|
18
19
|
</div>
|
@@ -6,15 +6,15 @@ rescue ActiveScaffold::ControllerNotFound
|
|
6
6
|
end
|
7
7
|
@record = parent_record
|
8
8
|
|
9
|
-
show_add_existing = column_show_add_existing(column)
|
10
|
-
show_add_new = column_show_add_new(column, associated,
|
9
|
+
show_add_existing = column_show_add_existing(column, parent_record)
|
10
|
+
show_add_new = column_show_add_new(column, associated, parent_record)
|
11
11
|
|
12
12
|
return unless show_add_new or show_add_existing
|
13
13
|
|
14
14
|
temporary_id = generated_id(parent_record) if parent_record.new_record?
|
15
15
|
controller_path = active_scaffold_controller_for(parent_record.class).controller_path
|
16
|
-
edit_associated_url = params_for(:controller => controller_path, :action => 'edit_associated', :child_association => column.name, :associated_id => '--ID--', :scope => scope, :id => parent_record.
|
17
|
-
add_new_url = params_for(:controller => controller_path, :action => 'edit_associated', :child_association => column.name, :scope => scope, :id => parent_record.
|
16
|
+
edit_associated_url = params_for(:controller => controller_path, :action => 'edit_associated', :child_association => column.name, :associated_id => '--ID--', :scope => scope, :id => parent_record.to_param, :generated_id => temporary_id, :parent_controller => controller.controller_path) if show_add_existing
|
17
|
+
add_new_url = params_for(:controller => controller_path, :action => 'edit_associated', :child_association => column.name, :scope => scope, :id => parent_record.to_param, :generated_id => temporary_id, :parent_controller => controller.controller_path) if show_add_new
|
18
18
|
|
19
19
|
-%>
|
20
20
|
<div class="footer-wrapper">
|
@@ -38,7 +38,7 @@ add_new_url = params_for(:controller => controller_path, :action => 'edit_associ
|
|
38
38
|
<% if remote_controller and remote_controller.respond_to? :uses_record_select? and remote_controller.uses_record_select? -%>
|
39
39
|
<%= link_to_record_select as_(:add_existing), remote_controller.controller_path, :onselect => "ActiveScaffold.record_select_onselect(#{url_for(edit_associated_url).to_json}, #{active_scaffold_id.to_json}, id);" -%>
|
40
40
|
<% else -%>
|
41
|
-
<% select_options = options_from_collection_for_select(sorted_association_options_find(column.association), :
|
41
|
+
<% select_options = options_from_collection_for_select(sorted_association_options_find(column.association, nil, parent_record), :to_param, :to_label)
|
42
42
|
add_existing_id = "#{sub_form_id(:association => column.name, :id => parent_record.id || temporary_id || 99999999999)}-add-existing"
|
43
43
|
add_existing_label = column.plural_association? ? :add_existing : :replace_existing %>
|
44
44
|
<%= select_tag 'associated_id', '<option value="">'.html_safe + as_(:_select_) + '</option>'.html_safe + select_options %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%
|
2
2
|
record_column = column
|
3
|
-
|
3
|
+
ActiveSupport::Deprecation.warn "Relying on @record to render form_asssociation_record partial with no :object is deprecated", caller(1) unless local_assigns[:form_association_record]
|
4
4
|
record = form_association_record ||= @record # TODO remove me, backwards compatibility, no :collection neither object in render
|
5
5
|
@record = record # TODO remove me, backward compatibility, helpers using @record
|
6
6
|
readonly = (record.readonly? or not record.authorized_for?(:crud_type => :update))
|
@@ -9,7 +9,7 @@
|
|
9
9
|
locked ||= false
|
10
10
|
config = active_scaffold_config_for(record.class)
|
11
11
|
scope = column_scope(record_column, scope, record)
|
12
|
-
options = active_scaffold_input_options(config.columns[record.class.primary_key], scope)
|
12
|
+
options = active_scaffold_input_options(config.columns[record.class.primary_key], scope, :object => record)
|
13
13
|
tr_id = "association-#{options[:id]}"
|
14
14
|
|
15
15
|
if config.subform.layout == :vertical
|
@@ -19,7 +19,7 @@
|
|
19
19
|
error_tag ||= :div
|
20
20
|
error_inner_tag ||= nil
|
21
21
|
default_col_class = ['form-element']
|
22
|
-
flatten
|
22
|
+
flatten ||= false
|
23
23
|
else
|
24
24
|
record_tag ||= :tbody
|
25
25
|
row_tag ||= :tr
|
@@ -44,7 +44,7 @@
|
|
44
44
|
<%= content_tag row_tag, :id => tr_id, :class => "association-record#{' association-record-new' if record.new_record?}#{' locked' if locked}" do %>
|
45
45
|
<% config.subform.columns.each :for => record.class, :crud_type => :read, :flatten => flatten do |column| %>
|
46
46
|
<%
|
47
|
-
if column.
|
47
|
+
if column.respond_to? :each
|
48
48
|
columns_groups << column
|
49
49
|
next
|
50
50
|
end
|
@@ -52,8 +52,10 @@
|
|
52
52
|
next unless in_subform?(column, parent_record)
|
53
53
|
columns_length += 1
|
54
54
|
show_actions = true
|
55
|
-
column
|
56
|
-
|
55
|
+
if column.association && column.form_ui.nil?
|
56
|
+
column = column.clone
|
57
|
+
column.form_ui ||= :select
|
58
|
+
end
|
57
59
|
|
58
60
|
col_class = default_col_class.clone
|
59
61
|
col_class << 'required' if column.required?
|
@@ -2,16 +2,17 @@
|
|
2
2
|
<tr>
|
3
3
|
<%
|
4
4
|
active_scaffold_config_for(record_class).subform.columns.each :for => record_class, :crud_type => :read do |column|
|
5
|
-
next
|
5
|
+
next unless column.is_a? ActiveScaffold::DataStructures::Column
|
6
6
|
next unless in_subform?(column, parent_record)
|
7
7
|
hidden = column_renders_as(column) == :hidden
|
8
8
|
-%>
|
9
9
|
<th class="<%= "#{column.name}-column #{'required' if column.required?} #{'hidden' if hidden}" %>">
|
10
|
-
<label><%= column
|
10
|
+
<label><%= subform_label(column, hidden) %></label>
|
11
11
|
<% if column.description.present? -%>
|
12
12
|
<span class="description"><%= column.description %></span>
|
13
13
|
<% end -%>
|
14
14
|
</th>
|
15
15
|
<% end -%>
|
16
|
+
<th></th>
|
16
17
|
</tr>
|
17
18
|
</thead>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<tr>
|
5
5
|
<td class="messages-container">
|
6
6
|
<p class="error-message message server-error" style="display:none;">
|
7
|
-
<%= as_(:internal_error).html_safe
|
7
|
+
<%= as_(:internal_error).html_safe %><span class="error-500"><%= as_(:error_500).html_safe %></span>
|
8
8
|
<a href="#" class="close" title="<%= as_(:close).html_safe %>"><%= as_(:close).html_safe %></a>
|
9
9
|
</p>
|
10
10
|
<div id="<%= active_scaffold_messages_id -%>" class="action-messages">
|
@@ -23,13 +23,15 @@
|
|
23
23
|
</tr>
|
24
24
|
</thead>
|
25
25
|
<%= render :partial => 'list_messages', :locals => {:columns => columns} %>
|
26
|
-
<tbody class="records" id="<%= active_scaffold_tbody_id %>">
|
26
|
+
<tbody class="records" id="<%= active_scaffold_tbody_id %>" data-refresh-record="<%= url_for(params_for(:action => :index, :id => '--ID--')) %>">
|
27
27
|
<% if !@page.empty? -%>
|
28
|
-
<%= render :partial => 'list_record', :collection => @page.items, :locals => {:hidden => false, :columns => columns, :action_links => active_scaffold_config.action_links.member
|
29
|
-
<% end -%>
|
30
|
-
<% if columns.any? {|c| c.calculation?} -%>
|
31
|
-
<%= render :partial => 'list_calculations', :locals => {:columns => columns} %>
|
28
|
+
<%= render :partial => 'list_record', :collection => @page.items, :locals => {:hidden => false, :columns => columns, :action_links => active_scaffold_config.action_links.member} %>
|
32
29
|
<% end -%>
|
33
30
|
</tbody>
|
31
|
+
<% if columns.any? {|c| c.calculation?} -%>
|
32
|
+
<tfoot>
|
33
|
+
<%= render :partial => 'list_calculations', :locals => {:columns => columns} %>
|
34
|
+
</tfoot>
|
35
|
+
<% end -%>
|
34
36
|
</table>
|
35
37
|
<%= render :partial => 'list_pagination' %>
|
@@ -1,12 +1,9 @@
|
|
1
1
|
<%
|
2
2
|
sorting = active_scaffold_config.list.user.sorting
|
3
|
-
sorting_stages = ['reset', 'ASC', 'DESC']
|
4
3
|
default_sorting = active_scaffold_config.list.user.default_sorting
|
5
|
-
default_sorting_stages = ['ASC', 'DESC']
|
6
4
|
-%>
|
7
5
|
<% columns.each do |column| -%>
|
8
|
-
|
9
|
-
<%= render_column_heading(column, sorting, stages.after(sorting.direction_of(column)) || 'ASC') %>
|
6
|
+
<%= render_column_heading(column, sorting, sorting.next_sorting_of(column, default_sorting.sorts_on?(column))) %>
|
10
7
|
<% end -%>
|
11
8
|
<th class="actions">
|
12
9
|
</th>
|
@@ -1,11 +1,11 @@
|
|
1
|
-
<% if active_scaffold_config.list.pagination -%>
|
2
1
|
<div class="active-scaffold-footer">
|
3
|
-
<%
|
2
|
+
<% if active_scaffold_config.list.pagination != :infinite -%>
|
4
3
|
<div class="active-scaffold-found"><span class="active-scaffold-records"><%= @page.pager.count -%></span> <%=as_(:found, :count => @page.pager.count) %></div>
|
5
4
|
<% end -%>
|
6
|
-
|
5
|
+
<% if active_scaffold_config.list.pagination -%>
|
6
|
+
<div class="active-scaffold-pagination<%= " auto-paginate" if active_scaffold_config.list.auto_pagination %>">
|
7
7
|
<%= render :partial => 'list_pagination_links', :locals => { :current_page => @page } if @page.pager.infinite? || @page.pager.number_of_pages > 1 %>
|
8
8
|
</div>
|
9
|
+
<% end -%>
|
9
10
|
<br /><!-- to clear this block -->
|
10
11
|
</div>
|
11
|
-
<% end -%>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% unless current_page.nil? -%>
|
2
|
-
<% url_options =
|
2
|
+
<% url_options = pagination_url_options -%>
|
3
3
|
<% options = {'data-page-history' => controller_id, :remote => true, :method => :get} -%>
|
4
4
|
|
5
5
|
<%= loading_indicator_tag :action => :pagination %>
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<%
|
2
|
-
record = list_record if list_record # compat with render :partial :collection
|
2
|
+
record = list_record if local_assigns[:list_record] # compat with render :partial :collection
|
3
3
|
columns ||= list_columns
|
4
4
|
tr_class = cycle("", "even-record") + ' ' + list_row_class(record)
|
5
5
|
action_links ||= active_scaffold_config.action_links.member
|
6
|
-
data_refresh ||=
|
6
|
+
data_refresh ||= record.to_param
|
7
7
|
-%>
|
8
|
-
<tr class="record <%= tr_class %>" id="<%= element_row_id(:action => :list, :id => record.id) %>" data-refresh="<%= data_refresh
|
8
|
+
<tr class="record <%= tr_class %>" id="<%= element_row_id(:action => :list, :id => record.id) %>" data-refresh="<%= data_refresh %>">
|
9
9
|
<% columns.each do |column| %>
|
10
10
|
<% authorized = record.authorized_for?(:crud_type => :read, :column => column.name) -%>
|
11
11
|
<% column_value = authorized ? get_column_value(record, column) : active_scaffold_config.list.empty_field_text -%>
|
@@ -1,4 +1,11 @@
|
|
1
|
-
<% if
|
1
|
+
<% if @auto_pagination -%>
|
2
|
+
<% if @page.items.present? -%>
|
3
|
+
ActiveScaffold.append('<%= active_scaffold_tbody_id %>', '<%= escape_javascript(render(:partial => 'list_record', :collection => @page.items, :locals => {:hidden => false, :columns => list_columns, :action_links => active_scaffold_config.action_links.member})) %>');
|
4
|
+
<% if @page.pager.infinite? || @page.number < @page.pager.number_of_pages -%>
|
5
|
+
ActiveScaffold.auto_load_page('<%= url_for main_path_to_return %>', {auto_pagination: true, page: <%= @page.number + 1 %>});
|
6
|
+
<% end %>
|
7
|
+
<% end %>
|
8
|
+
<% elsif active_scaffold_config.list.refresh_with_header -%>
|
2
9
|
ActiveScaffold.replace('<%= active_scaffold_id %>', '<%= escape_javascript(render('list_with_header')) %>');
|
3
10
|
<% else -%>
|
4
11
|
ActiveScaffold.replace_html('<%= active_scaffold_content_id %>', '<%= escape_javascript(render('list')) %>');
|
@@ -2,33 +2,27 @@
|
|
2
2
|
<% url_options = params_for(:action => :index).delete_if{|k,v| k == 'search'} -%>
|
3
3
|
<%=
|
4
4
|
options = {:id => element_form_id(:action => 'search'),
|
5
|
-
:class => "as_form search",
|
5
|
+
:class => "as_form search#{' live' if live_search}",
|
6
6
|
:remote => true,
|
7
|
+
:'data-loading' => true,
|
7
8
|
:method => :get}
|
8
|
-
options['data-loading'] = true unless live_search
|
9
9
|
form_tag url_options, options %>
|
10
|
-
<%=
|
11
|
-
<%= submit_tag as_(:search), :class => "submit" %>
|
12
|
-
<%= link_to as_(:reset), url_for(url_options.merge(:search => '')), :class => 'as_cancel', :remote => true, :data => {:refresh => true} %>
|
10
|
+
<%= search_field_tag :search, search_params, :class => 'text-input', :id => search_input_id, :size => 50, :autocomplete => :off, :placeholder => as_(live_search ? :live_search : :search_terms) %>
|
11
|
+
<%= submit_tag as_(:search), :class => "submit", :style => ('display:none;' if live_search) %>
|
12
|
+
<%= link_to as_(:reset), url_for(url_options.merge(:search => '')), :class => 'as_cancel reset', :remote => true, :data => {:refresh => true} %>
|
13
13
|
<%= loading_indicator_tag(:action => :search) %>
|
14
14
|
</form>
|
15
15
|
|
16
|
+
<% if ActiveScaffold.js_framework == :prototype %>
|
16
17
|
<script type="text/javascript">
|
17
18
|
//<![CDATA[
|
18
|
-
<% if ActiveScaffold.js_framework == :prototype %>
|
19
19
|
new TextFieldWithExample('<%= search_input_id %>', '<%= as_(live_search ? :live_search : :search_terms) %>', {focus: true});
|
20
20
|
<% if live_search -%>
|
21
|
-
$(<%= search_input_id.to_json.html_safe %>).next().hide();
|
22
21
|
new Form.Element.DelayedObserver('<%= search_input_id %>', 0.5, function(element, value) {
|
23
22
|
if (!$(element.id)) return false; // because the element may have been destroyed
|
24
23
|
$(element).next().click();
|
25
24
|
});
|
26
25
|
<% end -%>
|
27
|
-
<% elsif live_search && ActiveScaffold.js_framework == :jquery %>
|
28
|
-
jQuery(<%= "##{search_input_id}".to_json.html_safe %>).next().hide();
|
29
|
-
jQuery(<%= "##{search_input_id}".to_json.html_safe %>).delayedObserver(0.5, function() {
|
30
|
-
jQuery(<%= "##{search_input_id}".to_json.html_safe %>).parent().trigger("submit");});
|
31
|
-
<% end -%>
|
32
|
-
ActiveScaffold.focus_first_element_of_form('<%= element_form_id(:action => 'search') %>');
|
33
26
|
//]]>
|
34
27
|
</script>
|
28
|
+
<% end -%>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<dl>
|
2
2
|
<% columns.each :for => @record do |column| %>
|
3
3
|
<dt><%= column.label -%></dt>
|
4
|
-
<% if column.
|
4
|
+
<% if column.respond_to? :each -%>
|
5
5
|
<dd>
|
6
6
|
<%= render :partial => 'show_columns', :locals => {:columns => column} %>
|
7
7
|
<% else -%>
|
@@ -20,7 +20,7 @@ action_link.update_flash_messages('<%= escape_javascript(render(:partial => 'mes
|
|
20
20
|
<% elsif active_scaffold_config.create.refresh_list %>
|
21
21
|
<%= render :partial => 'refresh_list' %>
|
22
22
|
<% elsif params[:parent_controller].nil? %>
|
23
|
-
<% new_row = render :partial => 'list_record', :locals => {:record => @record} %>
|
23
|
+
<% new_row = render :partial => 'list_record', :locals => {:record => @saved_record || @record} %>
|
24
24
|
ActiveScaffold.create_record_row(action_link ? action_link.scaffold() : '<%= active_scaffold_id %>', '<%= escape_javascript(new_row) %>', <%= {:insert_at => insert_at}.to_json.html_safe %>);
|
25
25
|
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
26
26
|
<% end %>
|
@@ -28,13 +28,13 @@ action_link.update_flash_messages('<%= escape_javascript(render(:partial => 'mes
|
|
28
28
|
<% unless render_parent? %>
|
29
29
|
<% if active_scaffold_config.list.always_show_create %>
|
30
30
|
ActiveScaffold.reset_form('<%= form_selector %>');
|
31
|
-
<% elsif
|
32
|
-
|
31
|
+
<% elsif params[:dont_close] %>
|
32
|
+
ActiveScaffold.replace('<%= form_selector %>','<%= escape_javascript(render(:partial => 'create_form', :locals => {:xhr => true})) %>');
|
33
33
|
<% else %>
|
34
34
|
action_link.close();
|
35
35
|
<% end %>
|
36
36
|
<% if (active_scaffold_config.create.action_after_create) %>
|
37
|
-
var link = ActiveScaffold.find_action_link('<%= action_link_id active_scaffold_config.create.action_after_create, @record.id %>');
|
37
|
+
var link = ActiveScaffold.find_action_link('<%= action_link_id active_scaffold_config.create.action_after_create, @record.id || @saved_record.id %>');
|
38
38
|
if (link) (function() { link.open() })<%= '.defer' if ActiveScaffold.js_framework == :prototype %>();
|
39
39
|
<% end %>
|
40
40
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%
|
2
2
|
column = active_scaffold_config.columns[@column.name]
|
3
|
-
options = active_scaffold_input_options(column)
|
3
|
+
options = active_scaffold_input_options(column, nil, :object => @record)
|
4
4
|
options[:class] = "#{options[:class]} inplace_field"
|
5
5
|
-%>
|
6
6
|
<%= active_scaffold_input_for(column, nil, options) %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
ActiveScaffold.update_row('<%= element_row_id(:action => :list) %>', '<%= escape_javascript render('list_record', :record => @record) %>');
|
1
|
+
ActiveScaffold.update_row('<%= element_row_id(:action => :list, :id => @record.try(:id)) %>', '<%= escape_javascript render('list_record', :record => @record) %>');
|
2
2
|
<%= render :partial => 'update_calculations', :formats => [:js] %>
|
data/config/locales/de.yml
CHANGED
@@ -1,126 +1,137 @@
|
|
1
|
-
de:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
de:
|
2
|
+
active_scaffold:
|
3
|
+
? "!="
|
4
|
+
: "!="
|
5
|
+
<: <
|
6
|
+
<=: <=
|
7
|
+
? ">"
|
8
|
+
: ">"
|
9
|
+
? ">="
|
10
|
+
: ">="
|
11
|
+
_select_: "- Auswählen -"
|
12
|
+
_to_: " zu "
|
6
13
|
add: Hinzufügen
|
7
|
-
add_existing: Existierenden Eintrag hinzufügen
|
8
|
-
add_existing_model: Existierende %{model} hinzufügen
|
9
|
-
|
10
|
-
|
14
|
+
add_existing: "Existierenden Eintrag hinzufügen"
|
15
|
+
add_existing_model: "Existierende %{model} hinzufügen"
|
16
|
+
update_apply: Apply
|
17
|
+
create_apply: Create and continue
|
18
|
+
are_you_sure_to_delete: "Sind Sie sicher?"
|
19
|
+
average: Average
|
20
|
+
begins_with: Beginnt
|
21
|
+
between: Zwischen
|
11
22
|
cancel: Abbrechen
|
12
|
-
|
23
|
+
cant_destroy_record: "%{record} kann nicht gelöscht werden"
|
24
|
+
click_to_edit: "Zum Editieren anklicken"
|
13
25
|
click_to_reset: Reset
|
14
26
|
close: Schließen
|
15
27
|
config_list: Konfigurieren
|
16
|
-
config_list_model: Konfiguriere Spalten für %{model}
|
28
|
+
config_list_model: "Konfiguriere Spalten für %{model}"
|
29
|
+
contains: Enthält
|
17
30
|
create: Anlegen
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
31
|
+
create_another: "Weitere anlegen"
|
32
|
+
create_model: "Lege %{model} an"
|
33
|
+
create_new: "Neu anlegen"
|
34
|
+
created_model: "%{model} angelegt"
|
22
35
|
customize: Anpassen
|
36
|
+
date_picker_options:
|
37
|
+
firstDay: 1
|
38
|
+
isRTL: false
|
39
|
+
showMonthAfterYear: false
|
40
|
+
weekHeader: Wo
|
41
|
+
datetime_picker_options:
|
42
|
+
closeText: Schließen
|
43
|
+
currentText: Jetzt
|
44
|
+
timeText: Uhrzeit
|
45
|
+
days: Tage
|
23
46
|
delete: Löschen
|
24
|
-
deleted_model:
|
47
|
+
deleted_model: "%{model} gelöscht"
|
25
48
|
delimiter: Trennzeichen
|
26
49
|
download: Download
|
27
50
|
edit: Bearbeiten
|
51
|
+
ends_with: Endet
|
52
|
+
error_500: "(code 500, Interner Fehler)"
|
53
|
+
errors:
|
54
|
+
template:
|
55
|
+
body: "Bitte überprüfen Sie die folgenden Felder:"
|
56
|
+
header:
|
57
|
+
one: "Konnte %{model} nicht speichern: ein Fehler."
|
58
|
+
other: "Konnte %{model} nicht speichern: %{count} Fehler."
|
28
59
|
export: Exportieren
|
29
|
-
|
30
|
-
|
31
|
-
'false': 'False'
|
60
|
+
? "false"
|
61
|
+
: "False"
|
32
62
|
filtered: (Gefiltert)
|
33
63
|
found: Gefunden
|
34
|
-
|
35
|
-
|
64
|
+
future: Nächsten
|
65
|
+
hide: (Verstecken)
|
66
|
+
hours: Stunden
|
67
|
+
human_conditions:
|
68
|
+
association: "%{column} = %{value}"
|
69
|
+
boolean: "%{column} = %{value}"
|
70
|
+
inplace_edit_handle: "--"
|
71
|
+
internal_error: "Fehler bei der Verarbeitung"
|
36
72
|
live_search: Live-Suche
|
37
73
|
loading: Lade…
|
38
|
-
mark_all_records: Mark all
|
74
|
+
mark_all_records: "Mark all"
|
75
|
+
maximum: Maximum
|
76
|
+
minimum: Minimum
|
77
|
+
minutes: Minuten
|
78
|
+
months: Monate
|
79
|
+
nested_for_model: "%{nested_model} für %{parent_model}"
|
80
|
+
nested_of_model: "%{nested_model} von %{parent_model}"
|
39
81
|
next: Vor
|
40
|
-
|
41
|
-
|
42
|
-
|
82
|
+
next_month: "Nächsten Monat"
|
83
|
+
next_week: "Nächste Woche"
|
84
|
+
next_year: "Nächstes Jahr"
|
85
|
+
no_authorization_for_action: "Keine Berechtigung für Aktion %{action}"
|
86
|
+
no_entries: "Keine Einträge"
|
87
|
+
no_options: "Keine Optionen"
|
88
|
+
not_null: "Nicht Null"
|
89
|
+
? "null"
|
90
|
+
: "Null"
|
91
|
+
omit_header: "Lasse Header weg"
|
92
|
+
optional_attributes: Weitere
|
43
93
|
options: Optionen
|
94
|
+
past: Letzten
|
44
95
|
pdf: PDF
|
96
|
+
prev_month: "Letzten Monat"
|
97
|
+
prev_week: "Letzte Woche"
|
98
|
+
prev_year: "Letztes Jahr"
|
45
99
|
previous: Zurück
|
46
100
|
print: Drucken
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
101
|
+
range: Zeitraum
|
102
|
+
record_not_saved: "Eintrag kann nicht gespeichert werden. Ursache unbekannt."
|
103
|
+
records_marked:
|
104
|
+
one: "1 marked %{model}"
|
105
|
+
other: "%{count} marked %{model}"
|
106
|
+
refresh: "Neu laden"
|
51
107
|
remove: Entfernen
|
52
|
-
remove_file: Entferne oder Ersetze Datei
|
53
|
-
replace_existing: Existierenden ersetzen
|
54
|
-
replace_with_new: Mit Neuer ersetzen
|
55
|
-
revisions_for_model: Revisionen für %{model}
|
108
|
+
remove_file: "Entferne oder Ersetze Datei"
|
109
|
+
replace_existing: "Existierenden ersetzen"
|
110
|
+
replace_with_new: "Mit Neuer ersetzen"
|
56
111
|
reset: Zurücksetzen
|
112
|
+
revisions_for_model: "Revisionen für %{model}"
|
57
113
|
saving: Speichern…
|
58
114
|
search: Suche
|
59
115
|
search_terms: Suchbegriffe
|
60
|
-
|
116
|
+
seconds: Sekunden
|
61
117
|
show: Anzeigen
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
=: =
|
69
|
-
! '>=': ! '>='
|
70
|
-
<=: <=
|
71
|
-
! '>': ! '>'
|
72
|
-
<: <
|
73
|
-
! '!=': ! '!='
|
74
|
-
between: Zwischen
|
75
|
-
contains: Enthält
|
76
|
-
begins_with: Beginnt
|
77
|
-
ends_with: Endet
|
118
|
+
show_block: (Anzeigen)
|
119
|
+
show_model: "Zeige %{model} an"
|
120
|
+
sum: Sum
|
121
|
+
this_month: "Diesen Monat"
|
122
|
+
this_week: "Diese Woche"
|
123
|
+
this_year: "Dieses Jahr"
|
78
124
|
today: Heute
|
79
|
-
yesterday: Gestern
|
80
125
|
tomorrow: Morgen
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
this_year: Dieses Jahr
|
88
|
-
prev_year: Letztes Jahr
|
89
|
-
next_year: Nächstes Jahr
|
90
|
-
past: Letzten
|
91
|
-
future: Nächsten
|
92
|
-
range: Zeitraum
|
93
|
-
seconds: Sekunden
|
94
|
-
minutes: Minuten
|
95
|
-
hours: Stunden
|
96
|
-
days: Tage
|
126
|
+
? "true"
|
127
|
+
: "True"
|
128
|
+
update: Speichern
|
129
|
+
update_model: "Editiere %{model}"
|
130
|
+
updated_model: "%{model} aktualisiert"
|
131
|
+
version_inconsistency: "Inkonsistente Versionen - dieser Eintrag wurde verändert nachdem Sie mit der Bearbeitung begonnen haben."
|
97
132
|
weeks: Wochen
|
98
|
-
months: Monate
|
99
133
|
years: Jahre
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
weekHeader: Wo
|
105
|
-
firstDay: 1
|
106
|
-
isRTL: false
|
107
|
-
showMonthAfterYear: false
|
108
|
-
datetime_picker_options:
|
109
|
-
timeText: Uhrzeit
|
110
|
-
currentText: Jetzt
|
111
|
-
closeText: Schließen
|
112
|
-
human_conditions:
|
113
|
-
boolean: ! '%{column} = %{value}'
|
114
|
-
association: ! '%{column} = %{value}'
|
115
|
-
errors:
|
116
|
-
template:
|
117
|
-
header:
|
118
|
-
one: ! 'Konnte %{model} nicht speichern: ein Fehler.'
|
119
|
-
other: ! 'Konnte %{model} nicht speichern: %{count} Fehler.'
|
120
|
-
body: ! 'Bitte überprüfen Sie die folgenden Felder:'
|
121
|
-
cant_destroy_record: ! '%{record} kann nicht gelöscht werden'
|
122
|
-
internal_error: Fehler bei der Verarbeitung (code 500, Interner Fehler)
|
123
|
-
version_inconsistency: Inkonsistente Versionen - dieser Eintrag wurde verändert nachdem Sie mit der Bearbeitung begonnen haben.
|
124
|
-
record_not_saved: Eintrag kann nicht gespeichert werden. Ursache unbekannt.
|
125
|
-
no_authorization_for_action: Keine Berechtigung für Aktion %{action}
|
126
|
-
'null': 'Null'
|
134
|
+
yesterday: Gestern
|
135
|
+
time:
|
136
|
+
formats:
|
137
|
+
picker: "%d.%m.%Y %H:%M"
|