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.
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"