active_scaffold 3.3.3 → 3.4.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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +39 -0
  3. data/README.md +5 -3
  4. data/app/assets/images/active_scaffold/refresh.png +0 -0
  5. data/app/assets/javascripts/jquery/active_scaffold.js +182 -91
  6. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +14 -16
  7. data/app/assets/javascripts/jquery/draggable_lists.js +33 -26
  8. data/app/assets/javascripts/jquery/jquery.editinplace.js +3 -3
  9. data/app/assets/javascripts/prototype/active_scaffold.js +61 -19
  10. data/app/assets/stylesheets/active_scaffold_colors.css.scss +4 -0
  11. data/app/assets/stylesheets/active_scaffold_images.css.scss +3 -0
  12. data/app/assets/stylesheets/active_scaffold_layout.css +23 -2
  13. data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +1 -3
  14. data/app/views/active_scaffold_overrides/_base_form.html.erb +7 -5
  15. data/app/views/active_scaffold_overrides/_field_search.html.erb +1 -2
  16. data/app/views/active_scaffold_overrides/_form.html.erb +6 -4
  17. data/app/views/active_scaffold_overrides/_form_association.html.erb +4 -3
  18. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +5 -5
  19. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +8 -6
  20. data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +3 -2
  21. data/app/views/active_scaffold_overrides/_list.html.erb +8 -6
  22. data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +1 -4
  23. data/app/views/active_scaffold_overrides/_list_pagination.html.erb +4 -4
  24. data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +1 -1
  25. data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -3
  26. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +8 -1
  27. data/app/views/active_scaffold_overrides/_search.html.erb +7 -13
  28. data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
  29. data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
  30. data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
  31. data/app/views/active_scaffold_overrides/row.js.erb +1 -1
  32. data/config/locales/de.yml +106 -95
  33. data/config/locales/en.yml +108 -97
  34. data/config/locales/es.yml +109 -98
  35. data/config/locales/fr.yml +108 -97
  36. data/config/locales/hu.yml +109 -98
  37. data/config/locales/ja.yml +100 -89
  38. data/config/locales/ru.yml +115 -104
  39. data/lib/active_scaffold.rb +18 -294
  40. data/lib/active_scaffold/actions/common_search.rb +50 -17
  41. data/lib/active_scaffold/actions/core.rb +93 -22
  42. data/lib/active_scaffold/actions/create.rb +15 -6
  43. data/lib/active_scaffold/actions/field_search.rb +68 -60
  44. data/lib/active_scaffold/actions/list.rb +49 -28
  45. data/lib/active_scaffold/actions/nested.rb +14 -6
  46. data/lib/active_scaffold/actions/search.rb +36 -35
  47. data/lib/active_scaffold/actions/show.rb +9 -4
  48. data/lib/active_scaffold/actions/subform.rb +1 -1
  49. data/lib/active_scaffold/actions/update.rb +22 -7
  50. data/lib/active_scaffold/active_record_permissions.rb +125 -118
  51. data/lib/active_scaffold/attribute_params.rb +84 -66
  52. data/lib/active_scaffold/bridges.rb +3 -3
  53. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +10 -5
  54. data/lib/active_scaffold/bridges/cancan.rb +2 -1
  55. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +13 -2
  56. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -6
  57. data/lib/active_scaffold/bridges/chosen/helpers.rb +2 -2
  58. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +45 -29
  59. data/lib/active_scaffold/bridges/date_picker/ext.rb +11 -6
  60. data/lib/active_scaffold/bridges/date_picker/helper.rb +5 -1
  61. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +10 -5
  62. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -1
  63. data/lib/active_scaffold/bridges/file_column/form_ui.rb +12 -11
  64. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +14 -6
  65. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
  66. data/lib/active_scaffold/bridges/record_select/helpers.rb +15 -12
  67. data/lib/active_scaffold/bridges/shared/date_bridge.rb +7 -8
  68. data/lib/active_scaffold/bridges/tiny_mce.rb +5 -3
  69. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +4 -5
  70. data/lib/active_scaffold/config/base.rb +4 -0
  71. data/lib/active_scaffold/config/core.rb +12 -5
  72. data/lib/active_scaffold/config/delete.rb +0 -2
  73. data/lib/active_scaffold/config/field_search.rb +1 -4
  74. data/lib/active_scaffold/config/form.rb +0 -2
  75. data/lib/active_scaffold/config/list.rb +31 -1
  76. data/lib/active_scaffold/config/search.rb +0 -3
  77. data/lib/active_scaffold/config/show.rb +0 -6
  78. data/lib/active_scaffold/config/subform.rb +1 -0
  79. data/lib/active_scaffold/configurable.rb +2 -2
  80. data/lib/active_scaffold/constraints.rb +11 -14
  81. data/lib/active_scaffold/core.rb +277 -0
  82. data/lib/active_scaffold/data_structures/action_columns.rb +18 -2
  83. data/lib/active_scaffold/data_structures/action_link.rb +25 -6
  84. data/lib/active_scaffold/data_structures/action_links.rb +9 -4
  85. data/lib/active_scaffold/data_structures/actions.rb +1 -1
  86. data/lib/active_scaffold/data_structures/column.rb +6 -6
  87. data/lib/active_scaffold/data_structures/columns.rb +2 -2
  88. data/lib/active_scaffold/data_structures/nested_info.rb +5 -1
  89. data/lib/active_scaffold/data_structures/sorting.rb +15 -5
  90. data/lib/active_scaffold/delayed_setup.rb +30 -0
  91. data/lib/active_scaffold/engine.rb +25 -0
  92. data/lib/active_scaffold/extensions/action_view_rendering.rb +1 -1
  93. data/lib/active_scaffold/extensions/left_outer_joins.rb +61 -21
  94. data/lib/active_scaffold/extensions/localize.rb +1 -1
  95. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +13 -8
  96. data/lib/active_scaffold/extensions/paginator_extensions.rb +5 -1
  97. data/lib/active_scaffold/extensions/reverse_associations.rb +1 -0
  98. data/lib/active_scaffold/extensions/routing_mapper.rb +1 -1
  99. data/lib/active_scaffold/extensions/unsaved_record.rb +4 -6
  100. data/lib/active_scaffold/finder.rb +79 -27
  101. data/lib/active_scaffold/helpers/association_helpers.rb +48 -18
  102. data/lib/active_scaffold/helpers/controller_helpers.rb +19 -10
  103. data/lib/active_scaffold/helpers/form_column_helpers.rb +185 -87
  104. data/lib/active_scaffold/helpers/human_condition_helpers.rb +2 -1
  105. data/lib/active_scaffold/helpers/id_helpers.rb +14 -8
  106. data/lib/active_scaffold/helpers/list_column_helpers.rb +65 -56
  107. data/lib/active_scaffold/helpers/pagination_helpers.rb +5 -1
  108. data/lib/active_scaffold/helpers/search_column_helpers.rb +21 -18
  109. data/lib/active_scaffold/helpers/view_helpers.rb +102 -64
  110. data/lib/active_scaffold/responds_to_parent.rb +39 -64
  111. data/lib/active_scaffold/tableless.rb +129 -10
  112. data/lib/active_scaffold/version.rb +2 -2
  113. data/test/bridges/bridge_test.rb +1 -1
  114. data/test/bridges/date_picker_test.rb +2 -2
  115. data/test/bridges/paperclip_test.rb +10 -8
  116. data/test/bridges/tiny_mce_test.rb +2 -2
  117. data/test/company.rb +22 -10
  118. data/test/config/base_test.rb +1 -1
  119. data/test/config/core_test.rb +8 -6
  120. data/test/config/create_test.rb +6 -6
  121. data/test/config/delete_test.rb +4 -4
  122. data/test/config/field_search_test.rb +6 -6
  123. data/test/config/list_test.rb +7 -7
  124. data/test/config/nested_test.rb +8 -7
  125. data/test/config/search_test.rb +7 -7
  126. data/test/config/show_test.rb +5 -5
  127. data/test/config/subform_test.rb +1 -1
  128. data/test/config/update_test.rb +5 -4
  129. data/test/data_structures/action_columns_test.rb +15 -16
  130. data/test/data_structures/action_link_test.rb +10 -10
  131. data/test/data_structures/action_links_test.rb +6 -6
  132. data/test/data_structures/actions_test.rb +4 -4
  133. data/test/data_structures/association_column_test.rb +4 -4
  134. data/test/data_structures/column_test.rb +9 -9
  135. data/test/data_structures/columns_test.rb +7 -7
  136. data/test/data_structures/error_message_test.rb +2 -4
  137. data/test/data_structures/set_test.rb +13 -13
  138. data/test/data_structures/sorting_test.rb +8 -8
  139. data/test/data_structures/standard_column_test.rb +2 -2
  140. data/test/data_structures/validation_reflection_test.rb +8 -8
  141. data/test/data_structures/virtual_column_test.rb +5 -5
  142. data/test/extensions/active_record_test.rb +1 -1
  143. data/test/helpers/form_column_helpers_test.rb +5 -5
  144. data/test/helpers/list_column_helpers_test.rb +2 -1
  145. data/test/helpers/pagination_helpers_test.rb +1 -1
  146. data/test/misc/active_record_permissions_test.rb +23 -4
  147. data/test/misc/attribute_params_test.rb +304 -136
  148. data/test/misc/calculation_test.rb +55 -0
  149. data/test/misc/configurable_test.rb +22 -21
  150. data/test/misc/constraints_test.rb +10 -7
  151. data/test/misc/convert_numbers_format_test.rb +149 -0
  152. data/test/misc/finder_test.rb +17 -13
  153. data/test/misc/lang_test.rb +1 -1
  154. data/test/misc/tableless_test.rb +18 -0
  155. data/test/mock_app/app/controllers/addresses_controller.rb +4 -0
  156. data/test/mock_app/app/controllers/buildings_controller.rb +4 -0
  157. data/test/mock_app/app/controllers/cars_controller.rb +4 -0
  158. data/test/mock_app/app/controllers/contacts_controller.rb +4 -0
  159. data/test/mock_app/app/controllers/floors_controller.rb +6 -0
  160. data/test/mock_app/app/controllers/people_controller.rb +4 -0
  161. data/test/mock_app/app/models/address.rb +3 -0
  162. data/test/mock_app/app/models/building.rb +8 -0
  163. data/test/mock_app/app/models/car.rb +3 -0
  164. data/test/mock_app/app/models/contact.rb +3 -0
  165. data/test/mock_app/app/models/file_model.rb +19 -0
  166. data/test/mock_app/app/models/floor.rb +8 -0
  167. data/test/mock_app/app/models/person.rb +11 -0
  168. data/test/mock_app/config/application.rb +2 -0
  169. data/test/mock_app/config/environments/test.rb +1 -1
  170. data/test/mock_app/config/initializers/secret_token.rb +5 -1
  171. data/test/mock_app/config/routes.rb +1 -1
  172. data/test/mock_app/db/schema.rb +51 -0
  173. data/test/model_stub.rb +3 -3
  174. data/test/test_helper.rb +15 -12
  175. metadata +51 -50
  176. data/lib/active_scaffold/extensions/array.rb +0 -7
  177. data/lib/active_scaffold/extensions/cache_association.rb +0 -16
  178. data/lib/active_scaffold/extensions/usa_state.rb +0 -46
  179. data/lib/active_scaffold_env.rb +0 -13
  180. data/test/extensions/array_test.rb +0 -12
  181. data/test/mock_app/public/blank.html +0 -33
  182. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +0 -2
  183. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  184. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  185. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  186. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  187. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  188. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  189. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  190. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  191. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +0 -2
  192. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +0 -532
  193. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +0 -867
  194. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +0 -117
  195. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +0 -370
  196. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +0 -2
  197. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +0 -35
  198. 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 unless renders_as == :subsection %>
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
- <li class="sub-form <%= active_scaffold_config_for(column.association.klass).subform.layout %>-sub-form <%= column_css_class %> <%=column.name%>-sub-form" id="<%= sub_form_id(:association => column.name) %>">
21
+ <%= content_tag :li, active_scaffold_subform_attributes(column, column_css_class) do %>
20
22
  <%= render_column(column, @record, renders_as, scope) %>
21
- </li>
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, @record)
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.id, :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.id, :generated_id => temporary_id, :parent_controller => controller.controller_path) if show_add_new
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), :id, :to_label)
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
- Rails.logger.warn "Relying on @record to render form_asssociation_record partial with no :object is deprecated, called from #{caller(1).detect {|l| l =~ /\.erb:/ }.gsub(/(.*:\d+):.*/, '\1')}" unless local_assigns[:form_association_record]
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 = true unless local_assigns.has_key? :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.is_a? ActiveScaffold::DataStructures::ActionColumns
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 = column.clone
56
- column.form_ui ||= :select if column.association
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 if column.is_a? ActiveScaffold::DataStructures::ActionColumns
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.label unless hidden %></label>
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, :data_refresh => url_for(params_for(:action => :row, :id => '--ID--', :_method => :get))} %>
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
- <% stages = default_sorting.sorts_on?(column) ? default_sorting_stages : sorting_stages -%>
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
- <% unless @page.pager.infinite? -%>
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
- <div class="active-scaffold-pagination">
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 = params_for(:action => :index) -%>
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 ||= url_for(params_for(:action => :row, :id => '--ID--', :_method => :get))
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.sub('--ID--', record.id.to_s) %>">
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 active_scaffold_config.list.refresh_with_header -%>
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
- <%= text_field_tag :search, search_params, :class => 'text-input', :id => search_input_id, :size => 50, :autocomplete => :off %>
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.is_a? ActiveScaffold::DataStructures::ActionColumns -%>
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 active_scaffold_config.create.persistent %>
32
- action_link.reload();
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] %>
@@ -1,126 +1,137 @@
1
- de:
2
- time:
3
- formats:
4
- picker: ! '%d.%m.%Y %H:%M'
5
- active_scaffold:
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
- apply: Apply
10
- are_you_sure_to_delete: Sind Sie sicher?
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
- click_to_edit: Zum Editieren anklicken
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
- create_model: Lege %{model} an
19
- create_another: Weitere anlegen
20
- created_model: ! '%{model} angelegt'
21
- create_new: Neu anlegen
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: ! '%{model} gelöscht'
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
- nested_for_model: ! '%{nested_model} für %{parent_model}'
30
- nested_of_model: ! '%{nested_model} von %{parent_model}'
31
- 'false': 'False'
60
+ ? "false"
61
+ : "False"
32
62
  filtered: (Gefiltert)
33
63
  found: Gefunden
34
- hide: Verstecken
35
- inplace_edit_handle: --
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
- no_entries: Keine Einträge
41
- no_options: Keine Optionen
42
- omit_header: Lasse Header weg
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
- records_marked:
48
- one: 1 marked %{model}
49
- other: ! '%{count} marked %{model}'
50
- refresh: Neu laden
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
- _select_: ! '- Auswählen -'
116
+ seconds: Sekunden
61
117
  show: Anzeigen
62
- show_model: Zeige %{model} an
63
- _to_: ! ' zu '
64
- 'true': 'True'
65
- update: Speichern
66
- update_model: Editiere %{model}
67
- updated_model: ! '%{model} aktualisiert'
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
- this_week: Diese Woche
82
- prev_week: Letzte Woche
83
- next_week: Nächste Woche
84
- this_month: Diesen Monat
85
- prev_month: Letzten Monat
86
- next_month: Nächsten Monat
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
- optional_attributes: Weitere
101
- :null: 'Null'
102
- not_null: Nicht Null
103
- date_picker_options:
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"