active_scaffold_vho 3.0.6

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 (279) hide show
  1. data/.autotest +27 -0
  2. data/.document +5 -0
  3. data/CHANGELOG +179 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +20 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README +63 -0
  8. data/Rakefile +53 -0
  9. data/frontends/default/images/add.gif +0 -0
  10. data/frontends/default/images/arrow_down.gif +0 -0
  11. data/frontends/default/images/arrow_up.gif +0 -0
  12. data/frontends/default/images/close.gif +0 -0
  13. data/frontends/default/images/config.png +0 -0
  14. data/frontends/default/images/cross.png +0 -0
  15. data/frontends/default/images/gears.png +0 -0
  16. data/frontends/default/images/indicator-small.gif +0 -0
  17. data/frontends/default/images/indicator.gif +0 -0
  18. data/frontends/default/images/magnifier.png +0 -0
  19. data/frontends/default/javascripts/jquery/active_scaffold.js +957 -0
  20. data/frontends/default/javascripts/jquery/jquery.editinplace.js +743 -0
  21. data/frontends/default/javascripts/prototype/active_scaffold.js +957 -0
  22. data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
  23. data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
  24. data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
  25. data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  26. data/frontends/default/stylesheets/stylesheet.css +964 -0
  27. data/frontends/default/views/_action_group.html.erb +20 -0
  28. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  29. data/frontends/default/views/_base_form.html.erb +45 -0
  30. data/frontends/default/views/_create_form.html.erb +8 -0
  31. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  32. data/frontends/default/views/_field_search.html.erb +32 -0
  33. data/frontends/default/views/_form.html.erb +24 -0
  34. data/frontends/default/views/_form_association.html.erb +14 -0
  35. data/frontends/default/views/_form_association_footer.html.erb +40 -0
  36. data/frontends/default/views/_form_attribute.html.erb +15 -0
  37. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  38. data/frontends/default/views/_form_messages.html.erb +5 -0
  39. data/frontends/default/views/_horizontal_subform.html.erb +19 -0
  40. data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
  41. data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
  42. data/frontends/default/views/_human_conditions.html.erb +1 -0
  43. data/frontends/default/views/_list.html.erb +18 -0
  44. data/frontends/default/views/_list_actions.html.erb +15 -0
  45. data/frontends/default/views/_list_calculations.html.erb +16 -0
  46. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  47. data/frontends/default/views/_list_header.html.erb +10 -0
  48. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  49. data/frontends/default/views/_list_messages.html.erb +32 -0
  50. data/frontends/default/views/_list_pagination.html.erb +11 -0
  51. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  52. data/frontends/default/views/_list_record.html.erb +14 -0
  53. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  54. data/frontends/default/views/_list_with_header.html.erb +32 -0
  55. data/frontends/default/views/_messages.html.erb +10 -0
  56. data/frontends/default/views/_render_field.js.rjs +13 -0
  57. data/frontends/default/views/_row.html.erb +12 -0
  58. data/frontends/default/views/_search.html.erb +34 -0
  59. data/frontends/default/views/_search_attribute.html.erb +10 -0
  60. data/frontends/default/views/_show.html.erb +8 -0
  61. data/frontends/default/views/_show_columns.html.erb +15 -0
  62. data/frontends/default/views/_update_actions.html.erb +9 -0
  63. data/frontends/default/views/_update_form.html.erb +6 -0
  64. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  65. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  66. data/frontends/default/views/action_confirmation.html.erb +13 -0
  67. data/frontends/default/views/add_existing.js.rjs +17 -0
  68. data/frontends/default/views/add_existing_form.html.erb +5 -0
  69. data/frontends/default/views/create.html.erb +5 -0
  70. data/frontends/default/views/delete.html.erb +13 -0
  71. data/frontends/default/views/destroy.js.rjs +11 -0
  72. data/frontends/default/views/edit_associated.js.rjs +11 -0
  73. data/frontends/default/views/field_search.html.erb +5 -0
  74. data/frontends/default/views/form_messages.js.rjs +1 -0
  75. data/frontends/default/views/list.html.erb +1 -0
  76. data/frontends/default/views/list.js.rjs +1 -0
  77. data/frontends/default/views/on_action_update.js.rjs +8 -0
  78. data/frontends/default/views/on_create.js.rjs +41 -0
  79. data/frontends/default/views/on_update.js.rjs +28 -0
  80. data/frontends/default/views/search.html.erb +5 -0
  81. data/frontends/default/views/show.html.erb +5 -0
  82. data/frontends/default/views/update.html.erb +8 -0
  83. data/frontends/default/views/update_column.js.rjs +13 -0
  84. data/frontends/default/views/update_row.js.rjs +1 -0
  85. data/init.rb +9 -0
  86. data/lib/active_record_permissions.rb +134 -0
  87. data/lib/active_scaffold/actions/common_search.rb +22 -0
  88. data/lib/active_scaffold/actions/core.rb +170 -0
  89. data/lib/active_scaffold/actions/create.rb +145 -0
  90. data/lib/active_scaffold/actions/delete.rb +75 -0
  91. data/lib/active_scaffold/actions/field_search.rb +82 -0
  92. data/lib/active_scaffold/actions/list.rb +184 -0
  93. data/lib/active_scaffold/actions/mark.rb +50 -0
  94. data/lib/active_scaffold/actions/nested.rb +250 -0
  95. data/lib/active_scaffold/actions/search.rb +47 -0
  96. data/lib/active_scaffold/actions/show.rb +61 -0
  97. data/lib/active_scaffold/actions/subform.rb +17 -0
  98. data/lib/active_scaffold/actions/update.rb +141 -0
  99. data/lib/active_scaffold/attribute_params.rb +207 -0
  100. data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
  101. data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +39 -0
  102. data/lib/active_scaffold/bridges/bridge.rb +52 -0
  103. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
  104. data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +79 -0
  105. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +7 -0
  106. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +38 -0
  107. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +26 -0
  108. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +35 -0
  109. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
  110. data/lib/active_scaffold/bridges/date_picker/bridge.rb +22 -0
  111. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
  112. data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
  113. data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
  114. data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
  115. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
  116. data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
  117. data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
  118. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  119. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  120. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  121. data/lib/active_scaffold/bridges/paperclip/bridge.rb +10 -0
  122. data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
  123. data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
  124. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
  125. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
  126. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
  127. data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
  128. data/lib/active_scaffold/bridges/shared/date_bridge.rb +187 -0
  129. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
  130. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +45 -0
  131. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
  132. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
  133. data/lib/active_scaffold/config/base.rb +62 -0
  134. data/lib/active_scaffold/config/core.rb +220 -0
  135. data/lib/active_scaffold/config/create.rb +51 -0
  136. data/lib/active_scaffold/config/delete.rb +34 -0
  137. data/lib/active_scaffold/config/field_search.rb +75 -0
  138. data/lib/active_scaffold/config/form.rb +47 -0
  139. data/lib/active_scaffold/config/list.rb +174 -0
  140. data/lib/active_scaffold/config/mark.rb +22 -0
  141. data/lib/active_scaffold/config/nested.rb +44 -0
  142. data/lib/active_scaffold/config/search.rb +69 -0
  143. data/lib/active_scaffold/config/show.rb +35 -0
  144. data/lib/active_scaffold/config/subform.rb +35 -0
  145. data/lib/active_scaffold/config/update.rb +46 -0
  146. data/lib/active_scaffold/configurable.rb +29 -0
  147. data/lib/active_scaffold/constraints.rb +184 -0
  148. data/lib/active_scaffold/data_structures/action_columns.rb +133 -0
  149. data/lib/active_scaffold/data_structures/action_link.rb +171 -0
  150. data/lib/active_scaffold/data_structures/action_links.rb +175 -0
  151. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  152. data/lib/active_scaffold/data_structures/column.rb +351 -0
  153. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  154. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  155. data/lib/active_scaffold/data_structures/nested_info.rb +123 -0
  156. data/lib/active_scaffold/data_structures/set.rb +62 -0
  157. data/lib/active_scaffold/data_structures/sorting.rb +168 -0
  158. data/lib/active_scaffold/finder.rb +333 -0
  159. data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
  160. data/lib/active_scaffold/helpers/controller_helpers.rb +82 -0
  161. data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
  162. data/lib/active_scaffold/helpers/form_column_helpers.rb +347 -0
  163. data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
  164. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  165. data/lib/active_scaffold/helpers/list_column_helpers.rb +361 -0
  166. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  167. data/lib/active_scaffold/helpers/search_column_helpers.rb +243 -0
  168. data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
  169. data/lib/active_scaffold/helpers/view_helpers.rb +356 -0
  170. data/lib/active_scaffold/locale/de.rb +120 -0
  171. data/lib/active_scaffold/locale/en.rb +119 -0
  172. data/lib/active_scaffold/locale/es.yml +115 -0
  173. data/lib/active_scaffold/locale/fr.rb +116 -0
  174. data/lib/active_scaffold/locale/hu.yml +63 -0
  175. data/lib/active_scaffold/locale/ja.yml +64 -0
  176. data/lib/active_scaffold/locale/ru.yml +119 -0
  177. data/lib/active_scaffold/marked_model.rb +38 -0
  178. data/lib/active_scaffold/version.rb +9 -0
  179. data/lib/active_scaffold.rb +345 -0
  180. data/lib/active_scaffold_assets.rb +45 -0
  181. data/lib/dhtml_confirm.rb +54 -0
  182. data/lib/environment.rb +14 -0
  183. data/lib/extensions/action_controller_rendering.rb +20 -0
  184. data/lib/extensions/action_view_rendering.rb +113 -0
  185. data/lib/extensions/action_view_resolver.rb +7 -0
  186. data/lib/extensions/active_association_reflection.rb +13 -0
  187. data/lib/extensions/active_record_offset.rb +12 -0
  188. data/lib/extensions/array.rb +7 -0
  189. data/lib/extensions/localize.rb +10 -0
  190. data/lib/extensions/name_option_for_datetime.rb +12 -0
  191. data/lib/extensions/nil_id_in_url_params.rb +7 -0
  192. data/lib/extensions/paginator_extensions.rb +26 -0
  193. data/lib/extensions/reverse_associations.rb +62 -0
  194. data/lib/extensions/routing_mapper.rb +34 -0
  195. data/lib/extensions/to_label.rb +8 -0
  196. data/lib/extensions/unsaved_associated.rb +61 -0
  197. data/lib/extensions/unsaved_record.rb +20 -0
  198. data/lib/extensions/usa_state.rb +46 -0
  199. data/lib/generators/active_scaffold/USAGE +29 -0
  200. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  201. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  202. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +28 -0
  203. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  204. data/lib/generators/active_scaffold_setup/USAGE +10 -0
  205. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +53 -0
  206. data/lib/paginator.rb +136 -0
  207. data/lib/responds_to_parent.rb +70 -0
  208. data/public/blank.html +33 -0
  209. data/shoulda_macros/macros.rb +136 -0
  210. data/test/bridges/bridge_test.rb +47 -0
  211. data/test/config/base_test.rb +15 -0
  212. data/test/config/create_test.rb +55 -0
  213. data/test/config/list_test.rb +74 -0
  214. data/test/config/show_test.rb +43 -0
  215. data/test/config/update_test.rb +17 -0
  216. data/test/const_mocker.rb +36 -0
  217. data/test/data_structures/action_columns_test.rb +113 -0
  218. data/test/data_structures/action_link_test.rb +78 -0
  219. data/test/data_structures/action_links_test.rb +78 -0
  220. data/test/data_structures/actions_test.rb +25 -0
  221. data/test/data_structures/association_column_test.rb +42 -0
  222. data/test/data_structures/column_test.rb +185 -0
  223. data/test/data_structures/columns_test.rb +69 -0
  224. data/test/data_structures/error_message_test.rb +28 -0
  225. data/test/data_structures/set_test.rb +86 -0
  226. data/test/data_structures/sorting_test.rb +126 -0
  227. data/test/data_structures/standard_column_test.rb +24 -0
  228. data/test/data_structures/virtual_column_test.rb +23 -0
  229. data/test/extensions/active_record_test.rb +45 -0
  230. data/test/extensions/array_test.rb +12 -0
  231. data/test/helpers/form_column_helpers_test.rb +31 -0
  232. data/test/helpers/list_column_helpers_test.rb +31 -0
  233. data/test/helpers/pagination_helpers_test.rb +55 -0
  234. data/test/misc/active_record_permissions_test.rb +154 -0
  235. data/test/misc/attribute_params_test.rb +110 -0
  236. data/test/misc/configurable_test.rb +96 -0
  237. data/test/misc/constraints_test.rb +193 -0
  238. data/test/misc/finder_test.rb +93 -0
  239. data/test/misc/lang_test.rb +12 -0
  240. data/test/mock_app/.gitignore +2 -0
  241. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  242. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  243. data/test/mock_app/config/boot.rb +110 -0
  244. data/test/mock_app/config/database.yml +16 -0
  245. data/test/mock_app/config/environment.rb +43 -0
  246. data/test/mock_app/config/environments/development.rb +17 -0
  247. data/test/mock_app/config/environments/production.rb +28 -0
  248. data/test/mock_app/config/environments/test.rb +28 -0
  249. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  250. data/test/mock_app/config/initializers/inflections.rb +10 -0
  251. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  252. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  253. data/test/mock_app/config/initializers/session_store.rb +15 -0
  254. data/test/mock_app/config/locales/en.yml +5 -0
  255. data/test/mock_app/config/routes.rb +43 -0
  256. data/test/mock_app/db/test.sqlite3 +1 -0
  257. data/test/mock_app/public/blank.html +33 -0
  258. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  259. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  260. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  261. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  262. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  263. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  264. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  265. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  266. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  267. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  268. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  269. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  270. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  271. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  272. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  273. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  274. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +839 -0
  275. data/test/model_stub.rb +55 -0
  276. data/test/run_all.rb +8 -0
  277. data/test/test_helper.rb +39 -0
  278. data/uninstall.rb +13 -0
  279. metadata +492 -0
@@ -0,0 +1,46 @@
1
+ module ActiveScaffold
2
+ module Helpers
3
+ # Helpers that assist with the rendering of a List Column
4
+ module ShowColumnHelpers
5
+ def show_column_value(record, column)
6
+ # check for an override helper
7
+ if show_column_override? column
8
+ # we only pass the record as the argument. we previously also passed the formatted_value,
9
+ # but mike perham pointed out that prohibited the usage of overrides to improve on the
10
+ # performance of our default formatting. see issue #138.
11
+ send(show_column_override(column), record)
12
+ # second, check if the dev has specified a valid list_ui for this column
13
+ elsif column.list_ui and override_show_column_ui?(column.list_ui)
14
+ send(override_show_column_ui(column.list_ui), column, record)
15
+ else
16
+ if column.column and override_show_column_ui?(column.column.type)
17
+ send(override_show_column_ui(column.column.type), column, record)
18
+ else
19
+ get_column_value(record, column)
20
+ end
21
+ end
22
+ end
23
+
24
+ def active_scaffold_show_text(column, record)
25
+ simple_format(clean_column_value(record.send(column.name)))
26
+ end
27
+
28
+ def show_column_override(column)
29
+ "#{column.name.to_s.gsub('?', '')}_show_column" # parse out any question marks (see issue 227)
30
+ end
31
+
32
+ def show_column_override?(column)
33
+ respond_to?(show_column_override(column))
34
+ end
35
+
36
+ def override_show_column_ui?(list_ui)
37
+ respond_to?(override_show_column_ui(list_ui))
38
+ end
39
+
40
+ # the naming convention for overriding show types with helpers
41
+ def override_show_column_ui(list_ui)
42
+ "active_scaffold_show_#{list_ui}"
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,356 @@
1
+ module ActiveScaffold
2
+ module Helpers
3
+ # All extra helpers that should be included in the View.
4
+ # Also a dumping ground for uncategorized helpers.
5
+ module ViewHelpers
6
+ include ActiveScaffold::Helpers::IdHelpers
7
+ include ActiveScaffold::Helpers::AssociationHelpers
8
+ include ActiveScaffold::Helpers::PaginationHelpers
9
+ include ActiveScaffold::Helpers::ListColumnHelpers
10
+ include ActiveScaffold::Helpers::ShowColumnHelpers
11
+ include ActiveScaffold::Helpers::FormColumnHelpers
12
+ include ActiveScaffold::Helpers::SearchColumnHelpers
13
+ include ActiveScaffold::Helpers::CountryHelpers
14
+ include ActiveScaffold::Helpers::HumanConditionHelpers
15
+
16
+ ##
17
+ ## Delegates
18
+ ##
19
+
20
+ # access to the configuration variable
21
+ def active_scaffold_config
22
+ controller.class.active_scaffold_config
23
+ end
24
+
25
+ def active_scaffold_config_for(*args)
26
+ controller.class.active_scaffold_config_for(*args)
27
+ end
28
+
29
+ def active_scaffold_controller_for(*args)
30
+ controller.class.active_scaffold_controller_for(*args)
31
+ end
32
+
33
+ ##
34
+ ## Uncategorized
35
+ ##
36
+
37
+ def controller_path_for_activerecord(klass)
38
+ begin
39
+ controller = active_scaffold_controller_for(klass)
40
+ controller.controller_path
41
+ rescue ActiveScaffold::ControllerNotFound
42
+ controller = nil
43
+ end
44
+ end
45
+
46
+ def generate_temporary_id
47
+ (Time.now.to_f*1000).to_i.to_s
48
+ end
49
+
50
+ # Turns [[label, value]] into <option> tags
51
+ # Takes optional parameter of :include_blank
52
+ def option_tags_for(select_options, options = {})
53
+ select_options.insert(0,[as_(:_select_),nil]) if options[:include_blank]
54
+ select_options.collect do |option|
55
+ label, value = option[0], option[1]
56
+ value.nil? ? "<option value="">#{label}</option>" : "<option value=\"#{value}\">#{label}</option>"
57
+ end
58
+ end
59
+
60
+ # Should this column be displayed in the subform?
61
+ def in_subform?(column, parent_record)
62
+ return true unless column.association
63
+
64
+ # Polymorphic associations can't appear because they *might* be the reverse association, and because you generally don't assign an association from the polymorphic side ... I think.
65
+ return false if column.polymorphic_association?
66
+
67
+ # A column shouldn't be in the subform if it's the reverse association to the parent
68
+ return false if column.association.reverse_for?(parent_record.class)
69
+
70
+ return true
71
+ end
72
+
73
+ def form_remote_upload_tag(url_for_options = {}, options = {})
74
+ options[:target] = action_iframe_id(url_for_options)
75
+ options[:multipart] ||= true
76
+ options[:class] = "#{options[:class]} as_remote_upload".strip
77
+ output=""
78
+ output << form_tag(url_for_options, options)
79
+ (output << "<iframe id='#{action_iframe_id(url_for_options)}' name='#{action_iframe_id(url_for_options)}' style='display:none'></iframe>").html_safe
80
+ end
81
+
82
+ # Provides list of javascripts to include with +javascript_include_tag+
83
+ # You can use this with your javascripts like
84
+ # <%= javascript_include_tag :defaults, 'your_own_cool_script', active_scaffold_javascripts, :cache => true %>
85
+ def active_scaffold_javascripts(frontend = :default)
86
+ ActiveScaffold::Config::Core.javascripts(frontend).collect do |name|
87
+ ActiveScaffold::Config::Core.asset_path(name, frontend)
88
+ end
89
+ end
90
+
91
+ # Provides stylesheets to include with +stylesheet_link_tag+
92
+ def active_scaffold_stylesheets(frontend = :default)
93
+ [ActiveScaffold::Config::Core.asset_path("stylesheet.css", frontend)]
94
+ end
95
+
96
+ # Provides stylesheets for IE to include with +stylesheet_link_tag+
97
+ def active_scaffold_ie_stylesheets(frontend = :default)
98
+ [ActiveScaffold::Config::Core.asset_path("stylesheet-ie.css", frontend)]
99
+ end
100
+
101
+ # easy way to include ActiveScaffold assets
102
+ def active_scaffold_includes(*args)
103
+ frontend = args.first.is_a?(Symbol) ? args.shift : :default
104
+ options = args.first.is_a?(Hash) ? args.shift : {}
105
+ js = javascript_include_tag(*active_scaffold_javascripts(frontend).push(options))
106
+
107
+ css = stylesheet_link_tag(*active_scaffold_stylesheets(frontend).push(options))
108
+ options[:cache] += '_ie' if options[:cache].is_a? String
109
+ options[:concat] += '_ie' if options[:concat].is_a? String
110
+ ie_css = stylesheet_link_tag(*active_scaffold_ie_stylesheets(frontend).push(options))
111
+
112
+ js + "\n" + css + "\n<!--[if IE]>".html_safe + ie_css + "<![endif]-->\n".html_safe
113
+ end
114
+
115
+ # a general-use loading indicator (the "stuff is happening, please wait" feedback)
116
+ def loading_indicator_tag(options)
117
+ image_tag "/images/active_scaffold/default/indicator.gif", :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator"
118
+ end
119
+
120
+ # Creates a javascript-based link that toggles the visibility of some element on the page.
121
+ # By default, it toggles the visibility of the sibling after the one it's nested in. You may pass custom javascript logic in options[:of] to change that, though. For example, you could say :of => '$("my_div_id")'.
122
+ # You may also flag whether the other element is visible by default or not, and the initial text will adjust accordingly.
123
+ def link_to_visibility_toggle(id, options = {})
124
+ options[:default_visible] = true if options[:default_visible].nil?
125
+ options[:hide_label] = as_(:hide)
126
+ options[:show_label] = as_(:show)
127
+ javascript_tag("ActiveScaffold.create_visibility_toggle('#{id}', #{options.to_json});")
128
+ end
129
+
130
+ def skip_action_link(link, *args)
131
+ (!link.ignore_method.nil? and controller.try(link.ignore_method, *args)) || ((link.security_method_set? or controller.respond_to? link.security_method) and !controller.send(link.security_method, *args))
132
+ end
133
+
134
+ def render_action_link(link, url_options, record = nil, html_options = {})
135
+ url_options = action_link_url_options(link, url_options, record)
136
+ html_options = action_link_html_options(link, url_options, record, html_options)
137
+ action_link_html(link, url_options, html_options)
138
+ end
139
+
140
+ def render_group_action_link(link, url_options, options, record = nil)
141
+ if link.type == :member && !options[:authorized]
142
+ action_link_html(link, nil, {:class => "disabled #{link.action}#{link.html_options[:class].blank? ? '' : (' ' + link.html_options[:class])}"})
143
+ else
144
+ render_action_link(link, url_options, record)
145
+ end
146
+ end
147
+
148
+ def action_link_url_options(link, url_options, record, options = {})
149
+ url_options = url_options.clone
150
+ url_options[:action] = link.action
151
+ url_options[:controller] = link.controller if link.controller
152
+ url_options.delete(:search) if link.controller and link.controller.to_s != params[:controller]
153
+ url_options.merge! link.parameters if link.parameters
154
+ url_options_for_nested_link(link.column, record, link, url_options, options) if link.nested_link?
155
+ url_options_for_sti_link(link.column, record, link, url_options, options) unless record.nil? || active_scaffold_config.sti_children.nil?
156
+ url_options[:_method] = link.method if !link.confirm? && link.inline? && link.method != :get
157
+ url_options
158
+ end
159
+
160
+ def action_link_html_options(link, url_options, record, html_options)
161
+ link_id = get_action_link_id(url_options, record, link.column)
162
+ html_options.reverse_merge! link.html_options.merge(:class => link.action)
163
+
164
+ # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
165
+ html_options[:method] = link.method if link.method != :get
166
+
167
+ html_options['data-confirm'] = link.confirm(record.try(:to_label)) if link.confirm?
168
+ html_options['data-position'] = link.position if link.position and link.inline?
169
+ html_options[:class] += ' as_action' if link.inline?
170
+ if link.popup?
171
+ html_options['data-popup'] = true
172
+ html_options[:target] = '_blank'
173
+ end
174
+ html_options[:id] = link_id
175
+ html_options[:remote] = true unless link.page? || link.popup?
176
+ if link.dhtml_confirm?
177
+ html_options[:class] += ' as_action' if !link.inline?
178
+ html_options[:page_link] = 'true' if !link.inline?
179
+ html_options[:dhtml_confirm] = link.dhtml_confirm.value
180
+ html_options[:onclick] = link.dhtml_confirm.onclick_function(controller, link_id)
181
+ end
182
+ html_options[:class] += " #{link.html_options[:class]}" unless link.html_options[:class].blank?
183
+ html_options
184
+ end
185
+
186
+ def get_action_link_id(url_options, record = nil, column = nil)
187
+ id = url_options[:id] || url_options[:parent_id]
188
+ id = "#{column.association.name}-#{record.id}" if column && column.plural_association?
189
+ if record.try(column.association.name.to_sym).present?
190
+ id = "#{column.association.name}-#{record.send(column.association.name).id}"
191
+ else
192
+ id = "#{column.association.name}-#{record.id}" unless record.nil?
193
+ end if column && column.singular_association?
194
+ action_id = "#{id_from_controller(url_options[:controller]) + '-' if url_options[:parent_controller]}#{url_options[:action].to_s}"
195
+ action_link_id(action_id, id)
196
+ end
197
+
198
+ def action_link_html(link, url, html_options)
199
+ # issue 260, use url_options[:link] if it exists. This prevents DB data from being localized.
200
+ label = url.delete(:link) if url.is_a?(Hash)
201
+ label ||= link.label
202
+ if link.image.nil?
203
+ html = link_to(label, url, html_options)
204
+ else
205
+ html = link_to(image_tag(link.image[:name] , :size => link.image[:size], :alt => label), url, html_options)
206
+ end
207
+ # if url is nil we would like to generate an anchor without href attribute
208
+ url.nil? ? html.sub(/href=".*?"/, '') : html
209
+ end
210
+
211
+ def url_options_for_nested_link(column, record, link, url_options, options = {})
212
+ if column && column.association
213
+ url_options[:assoc_id] = url_options.delete(:id)
214
+ url_options[:id] = record.send(column.association.name).id if column.singular_association? && record.send(column.association.name).present?
215
+ link.eid = "#{controller_id.from(3)}_#{record.id}_#{column.association.name}" unless options.has_key?(:reuse_eid)
216
+ url_options[:eid] = link.eid
217
+ elsif link.parameters && link.parameters[:named_scope]
218
+ url_options[:assoc_id] = url_options.delete(:id)
219
+ link.eid = "#{controller_id.from(3)}_#{record.id}_#{link.parameters[:named_scope]}" unless options.has_key?(:reuse_eid)
220
+ url_options[:eid] = link.eid
221
+ end
222
+ end
223
+
224
+ def url_options_for_sti_link(column, record, link, url_options, options = {})
225
+ #need to find out controller of current record type
226
+ #and set parameters
227
+ sti_controller_path = controller_path_for_activerecord(record.class)
228
+ if sti_controller_path
229
+ url_options[:controller] = sti_controller_path
230
+ url_options[:parent_sti] = controller_path
231
+ end
232
+ end
233
+
234
+ def column_class(column, column_value, record)
235
+ classes = []
236
+ classes << "#{column.name}-column"
237
+ if column.css_class.is_a?(Proc)
238
+ css_class = column.css_class.call(column_value, record)
239
+ classes << css_class unless css_class.nil?
240
+ else
241
+ classes << column.css_class
242
+ end unless column.css_class.nil?
243
+
244
+ classes << 'empty' if column_empty? column_value
245
+ classes << 'sorted' if active_scaffold_config.list.user.sorting.sorts_on?(column)
246
+ classes << 'numeric' if column.column and [:decimal, :float, :integer].include?(column.column.type)
247
+ classes.join(' ').rstrip
248
+ end
249
+
250
+ def column_heading_class(column, sorting)
251
+ classes = []
252
+ classes << "#{column.name}-column_heading"
253
+ classes << "sorted #{sorting.direction_of(column).downcase}" if sorting.sorts_on? column
254
+ classes << column.css_class unless column.css_class.nil?
255
+ classes.join(' ')
256
+ end
257
+
258
+ def column_empty?(column_value)
259
+ empty = column_value.nil?
260
+ empty ||= column_value.empty? if column_value.respond_to? :empty?
261
+ empty ||= ['&nbsp;', active_scaffold_config.list.empty_field_text].include? column_value if String === column_value
262
+ return empty
263
+ end
264
+
265
+ def column_calculation(column)
266
+ unless column.calculate.instance_of? Proc
267
+ conditions = controller.send(:all_conditions)
268
+ includes = active_scaffold_config.list.count_includes
269
+ includes ||= controller.send(:active_scaffold_includes) unless conditions.nil?
270
+ calculation = beginning_of_chain.calculate(column.calculate, column.name, :conditions => conditions,
271
+ :joins => controller.send(:joins_for_collection), :include => includes)
272
+ else
273
+ column.calculate.call(@records)
274
+ end
275
+ end
276
+
277
+ def render_column_calculation(column)
278
+ calculation = column_calculation(column)
279
+ override_formatter = "render_#{column.name}_#{column.calculate}"
280
+ calculation = send(override_formatter, calculation) if respond_to? override_formatter
281
+
282
+ "#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
283
+ end
284
+
285
+ def column_show_add_existing(column)
286
+ (column.allow_add_existing and options_for_association_count(column.association) > 0)
287
+ end
288
+
289
+ def column_show_add_new(column, associated, record)
290
+ value = column.plural_association? || (column.singular_association? and not associated.empty?)
291
+ value = false unless record.class.authorized_for?(:crud_type => :create)
292
+ value
293
+ end
294
+
295
+ def active_scaffold_error_messages_for(*params)
296
+ options = params.extract_options!.symbolize_keys
297
+ options.reverse_merge!(:container_tag => :div, :list_type => :ul)
298
+
299
+ objects = Array.wrap(options.delete(:object) || params).map do |object|
300
+ object = instance_variable_get("@#{object}") unless object.respond_to?(:to_model)
301
+ object = convert_to_model(object)
302
+
303
+ if object.class.respond_to?(:model_name)
304
+ options[:object_name] ||= object.class.model_name.human.downcase
305
+ end
306
+
307
+ object
308
+ end
309
+
310
+ objects.compact!
311
+ count = objects.inject(0) {|sum, object| sum + object.errors.count }
312
+
313
+ unless count.zero?
314
+ html = {}
315
+ [:id, :class].each do |key|
316
+ if options.include?(key)
317
+ value = options[key]
318
+ html[key] = value unless value.blank?
319
+ else
320
+ html[key] = 'errorExplanation'
321
+ end
322
+ end
323
+ options[:object_name] ||= params.first
324
+
325
+ header_message = if options.include?(:header_message)
326
+ options[:header_message]
327
+ else
328
+ as_('errors.template.header', :count => count, :model => options[:object_name].to_s.gsub('_', ' '))
329
+ end
330
+
331
+ message = options.include?(:message) ? options[:message] : as_('errors.template.body')
332
+
333
+ error_messages = objects.sum do |object|
334
+ object.errors.full_messages.map do |msg|
335
+ options[:list_type] != :br ? content_tag(:li, msg) : msg
336
+ end
337
+ end
338
+ error_messages = if options[:list_type] == :br
339
+ error_messages.join('<br/>').html_safe
340
+ else
341
+ content_tag(options[:list_type], error_messages.join.html_safe)
342
+ end
343
+
344
+ contents = []
345
+ contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
346
+ contents << content_tag(:p, message) unless message.blank?
347
+ contents << error_messages
348
+ contents = contents.join.html_safe
349
+ options[:container_tag] ? content_tag(options[:container_tag], contents, html) : contents
350
+ else
351
+ ''
352
+ end
353
+ end
354
+ end
355
+ end
356
+ end
@@ -0,0 +1,120 @@
1
+ {
2
+ :'de' => {
3
+ :active_scaffold => {
4
+ :add => 'Hinzufügen',
5
+ :add_existing => 'Existierenden Eintrag hinzufügen',
6
+ :add_existing_model => 'Existierende %{model} hinzufügen',
7
+ :are_you_sure_to_delete => 'Sind Sie sicher?',
8
+ :cancel => 'Abbrechen',
9
+ :click_to_edit => 'Zum Editieren anklicken',
10
+ :click_to_reset => 'Reset',
11
+ :close => 'Schliessen',
12
+ :config_list => 'Konfigurieren',
13
+ :config_list_model => 'Konfiguriere Spalten für %{model}',
14
+ :create => 'Anlegen',
15
+ :create_model => 'Lege %{model} an',
16
+ :create_another => 'Weitere anlegen',
17
+ :created_model => '%{model} angelegt',
18
+ :create_new => 'Neu anlegen',
19
+ :customize => 'Anpassen',
20
+ :delete => 'Löschen',
21
+ :deleted_model => '%{model} gelöscht',
22
+ :delimiter => 'Trennzeichen',
23
+ :download => 'Download',
24
+ :edit => 'Bearbeiten',
25
+ :export => 'Exportieren',
26
+ :nested_for_model => '%{nested_model} für %{parent_model}',
27
+ :nested_of_model => '%{nested_model} von %{parent_model}',
28
+ :filtered => '(Gefiltert)',
29
+ :found => 'Gefunden',
30
+ :hide => 'Verstecken',
31
+ :live_search => 'Live-Suche',
32
+ :loading => 'Lade…',
33
+ :next => 'Vorwärts',
34
+ :no_entries => 'Keine Einträge',
35
+ :no_options => 'Keine Optionen',
36
+ :omit_header => 'Lasse Header weg',
37
+ :options => 'Optionen',
38
+ :pdf => 'PDF',
39
+ :previous => 'Zurück',
40
+ :print => 'Drucken',
41
+ :refresh => 'Neu laden',
42
+ :remove => 'Entfernen',
43
+ :remove_file => 'Entferne oder Ersetze Datei',
44
+ :replace_with_new => 'Mit Neuer ersetzen',
45
+ :revisions_for_model => 'Revisionen für %{model}',
46
+ :reset => 'Zurücksetzen',
47
+ :saving => 'Speichern…',
48
+ :search => 'Suche',
49
+ :search_terms => 'Suchbegriffe',
50
+ :_select_ => '- Auswählen -',
51
+ :show => 'Anzeigen',
52
+ :show_model => 'Zeige %{model} an',
53
+ :_to_ => ' zu ',
54
+ :update => 'Speichern',
55
+ :update_model => 'Editiere %{model}',
56
+ :updated_model => '%{model} aktualisiert',
57
+ :'=' => '=',
58
+ :'>=' => '>=',
59
+ :'<=' => '<=',
60
+ :'>' => '>',
61
+ :'<' => '<',
62
+ :'!=' => '!=',
63
+ :between => 'Zwischen',
64
+ :contains => 'Enthält',
65
+ :begins_with => 'Beginnt',
66
+ :ends_with => 'Ended',
67
+ :today => 'Heute',
68
+ :yesterday => 'Gestern',
69
+ :tomorrow => 'Morgen',
70
+ :this_week => 'Diese Woche',
71
+ :prev_week => 'Letzte Woche',
72
+ :next_week => 'Nächste Woche',
73
+ :this_month => 'Diesen Monat',
74
+ :prev_month => 'Letzten Monat',
75
+ :next_month => 'Nächsten Monat',
76
+ :this_year => 'Dieses Jahr',
77
+ :prev_year => 'Letztes Jahr',
78
+ :next_year => 'Nächstes Jahr',
79
+ :past => 'Letzten',
80
+ :future => 'Nächsten',
81
+ :range => 'Zeitraum',
82
+ :seconds => 'Sekunden',
83
+ :minutes => 'Minuten',
84
+ :hours => 'Stunden',
85
+ :days => 'Tage',
86
+ :weeks => 'Wochen',
87
+ :months => 'Monate',
88
+ :years => 'Jahre',
89
+ :optional_attributes => 'Weitere',
90
+ :null => 'Null',
91
+ :not_null => 'Nicht Null',
92
+ :date_picker_options => {
93
+ :weekHeader => 'Wo',
94
+ :firstDay => 1,
95
+ :isRTL => false,
96
+ :showMonthAfterYear => false
97
+ },
98
+ :datetime_picker_options => {
99
+ :timeText => 'Uhrzeit',
100
+ :currentText => 'Jetzt',
101
+ :closeText => 'Schließen'
102
+ },
103
+ :errors => {
104
+ :template => {
105
+ :header => {
106
+ :one => "Konnte %{model} nicht speichern: ein Fehler.",
107
+ :other => "Konnte %{model} nicht speichern: %{count} Fehler."
108
+ },
109
+ :body => "Bitte überprüfen Sie die folgenden Felder:"
110
+ }
111
+ },
112
+ # error_messages
113
+ :cant_destroy_record => "%{record} kann nicht gelöscht werden",
114
+ :internal_error => 'Fehler bei der Verarbeitung (code 500, Interner Fehler)',
115
+ :version_inconsistency => 'Inkonsistente Versionen - dieser Eintrag wurde verändert nachdem Sie mit der Bearbeitung begonnen haben.',
116
+ :record_not_saved => 'Eintrag kann nicht gespeichert werden. Ursache unbekannt.',
117
+ :no_authorization_for_action => "Keine Berechtigung für Aktion %{action}"
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ :'en' => {
3
+ :active_scaffold => {
4
+ :add => 'Add',
5
+ :add_existing => 'Add Existing',
6
+ :add_existing_model => 'Add Existing %{model}',
7
+ :are_you_sure_to_delete => 'Are you sure you want to delete %{label}?',
8
+ :cancel => 'Cancel',
9
+ :click_to_edit => 'Click to edit',
10
+ :click_to_reset => 'Click to reset',
11
+ :close => 'Close',
12
+ :config_list => 'Configure',
13
+ :config_list_model => 'Configure Columns for %{model}',
14
+ :create => 'Create',
15
+ :create_model => 'Create %{model}',
16
+ :create_another => 'Create Another %{model}',
17
+ :created_model => 'Created %{model}',
18
+ :create_new => 'Create New',
19
+ :customize => 'Customize',
20
+ :delete => 'Delete',
21
+ :deleted_model => 'Deleted %{model}',
22
+ :delimiter => 'Delimiter',
23
+ :download => 'Download',
24
+ :edit => 'Edit',
25
+ :export => 'Export',
26
+ :nested_for_model => '%{nested_model} for %{parent_model}',
27
+ :nested_of_model => '%{nested_model} of %{parent_model}',
28
+ :false => 'False',
29
+ :filtered => '(Filtered)',
30
+ :found => 'Found',
31
+ :hide => 'Hide',
32
+ :live_search => 'Live Search',
33
+ :loading => 'Loading…',
34
+ :next => 'Next',
35
+ :no_entries => 'No Entries',
36
+ :no_options => 'no options',
37
+ :omit_header => 'Omit Header',
38
+ :options => 'Options',
39
+ :pdf => 'PDF',
40
+ :previous => 'Previous',
41
+ :print => 'Print',
42
+ :refresh => 'Refresh',
43
+ :remove => 'Remove',
44
+ :remove_file => 'Remove or Replace file',
45
+ :replace_with_new => 'Replace With New',
46
+ :revisions_for_model => 'Revisions for %{model}',
47
+ :reset => 'Reset',
48
+ :saving => 'Saving…',
49
+ :search => 'Search',
50
+ :search_terms => 'Search Terms',
51
+ :_select_ => '- select -',
52
+ :show => 'Show',
53
+ :show_model => 'Show %{model}',
54
+ :_to_ => ' to ',
55
+ :true => 'True',
56
+ :update => 'Update',
57
+ :update_model => 'Update %{model}',
58
+ :updated_model => 'Updated %{model}',
59
+ :'=' => '=',
60
+ :'>=' => '>=',
61
+ :'<=' => '<=',
62
+ :'>' => '>',
63
+ :'<' => '<',
64
+ :'!=' => '!=',
65
+ :between => 'Between',
66
+ :contains => 'Contains',
67
+ :begins_with => 'Begins with',
68
+ :ends_with => 'Ends with',
69
+ :today => 'Today',
70
+ :yesterday => 'Yesterday',
71
+ :tomorrow => 'Tommorrow',
72
+ :this_week => 'This Week',
73
+ :prev_week => 'Last Week',
74
+ :next_week => 'Next Week',
75
+ :this_month => 'This Month',
76
+ :prev_month => 'Last Month',
77
+ :next_month => 'Next Month',
78
+ :this_year => 'This Year',
79
+ :prev_year => 'Last Year',
80
+ :next_year => 'Next Year',
81
+ :past => 'Past',
82
+ :future => 'Future',
83
+ :range => 'Range',
84
+ :seconds => 'Seconds',
85
+ :minutes => 'Minutes',
86
+ :hours => 'Hours',
87
+ :days => 'Days',
88
+ :weeks => 'Weeks',
89
+ :months => 'Months',
90
+ :years => 'Years',
91
+ :optional_attributes => 'Further Options',
92
+ :null => 'Null',
93
+ :not_null => 'Not Null',
94
+ :date_picker_options => {
95
+ :weekHeader => 'Wk',
96
+ :firstDay => 0,
97
+ :isRTL => false,
98
+ :showMonthAfterYear => false
99
+ },
100
+ :datetime_picker_options => {
101
+ },
102
+ :errors => {
103
+ :template => {
104
+ :header => {
105
+ :one => "1 error prohibited this %{model} from being saved.",
106
+ :other => "%{count} errors prohibited this %{model} from being saved"
107
+ },
108
+ :body => "There were problems with the following fields:"
109
+ }
110
+ },
111
+ # error_messages
112
+ :cant_destroy_record => "%{record} can't be destroyed",
113
+ :internal_error => 'Request Failed (code 500, Internal Error)',
114
+ :version_inconsistency => 'Version inconsistency - this record has been modified since you started editing it.',
115
+ :record_not_saved => 'Failed to save record cause of an unknown error',
116
+ :no_authorization_for_action => "No Authorization for action %{action}"
117
+ }
118
+ }
119
+ }