active_scaffold_clarity 3.0.24.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. data/CHANGELOG +179 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +73 -0
  4. data/frontends/default/images/add.gif +0 -0
  5. data/frontends/default/images/arrow_down.gif +0 -0
  6. data/frontends/default/images/arrow_up.gif +0 -0
  7. data/frontends/default/images/close.gif +0 -0
  8. data/frontends/default/images/close_touch.png +0 -0
  9. data/frontends/default/images/config.png +0 -0
  10. data/frontends/default/images/cross.png +0 -0
  11. data/frontends/default/images/gears.png +0 -0
  12. data/frontends/default/images/indicator-small.gif +0 -0
  13. data/frontends/default/images/indicator.gif +0 -0
  14. data/frontends/default/images/magnifier.png +0 -0
  15. data/frontends/default/javascripts/jquery/active_scaffold.js +1049 -0
  16. data/frontends/default/javascripts/jquery/jquery.editinplace.js +743 -0
  17. data/frontends/default/javascripts/prototype/active_scaffold.js +1031 -0
  18. data/frontends/default/javascripts/prototype/dhtml_history.js +870 -0
  19. data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
  20. data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
  21. data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
  22. data/frontends/default/stylesheets/stylesheet.css +1093 -0
  23. data/frontends/default/views/_action_group.html.erb +24 -0
  24. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  25. data/frontends/default/views/_base_form.html.erb +51 -0
  26. data/frontends/default/views/_create_form.html.erb +8 -0
  27. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  28. data/frontends/default/views/_field_search.html.erb +32 -0
  29. data/frontends/default/views/_form.html.erb +26 -0
  30. data/frontends/default/views/_form_association.html.erb +19 -0
  31. data/frontends/default/views/_form_association_footer.html.erb +47 -0
  32. data/frontends/default/views/_form_attribute.html.erb +20 -0
  33. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  34. data/frontends/default/views/_form_messages.html.erb +5 -0
  35. data/frontends/default/views/_horizontal_subform.html.erb +29 -0
  36. data/frontends/default/views/_horizontal_subform_header.html.erb +11 -0
  37. data/frontends/default/views/_horizontal_subform_record.html.erb +38 -0
  38. data/frontends/default/views/_human_conditions.html.erb +1 -0
  39. data/frontends/default/views/_list.html.erb +18 -0
  40. data/frontends/default/views/_list_actions.html.erb +15 -0
  41. data/frontends/default/views/_list_calculations.html.erb +16 -0
  42. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  43. data/frontends/default/views/_list_header.html.erb +10 -0
  44. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  45. data/frontends/default/views/_list_messages.html.erb +32 -0
  46. data/frontends/default/views/_list_pagination.html.erb +11 -0
  47. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  48. data/frontends/default/views/_list_record.html.erb +14 -0
  49. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  50. data/frontends/default/views/_list_with_header.html.erb +32 -0
  51. data/frontends/default/views/_messages.html.erb +10 -0
  52. data/frontends/default/views/_render_field.js.rjs +14 -0
  53. data/frontends/default/views/_row.html.erb +12 -0
  54. data/frontends/default/views/_search.html.erb +34 -0
  55. data/frontends/default/views/_search_attribute.html.erb +10 -0
  56. data/frontends/default/views/_show.html.erb +8 -0
  57. data/frontends/default/views/_show_columns.html.erb +15 -0
  58. data/frontends/default/views/_update_actions.html.erb +9 -0
  59. data/frontends/default/views/_update_form.html.erb +6 -0
  60. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  61. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  62. data/frontends/default/views/action_confirmation.html.erb +13 -0
  63. data/frontends/default/views/add_existing.js.rjs +17 -0
  64. data/frontends/default/views/add_existing_form.html.erb +5 -0
  65. data/frontends/default/views/create.html.erb +5 -0
  66. data/frontends/default/views/delete.html.erb +13 -0
  67. data/frontends/default/views/destroy.js.rjs +23 -0
  68. data/frontends/default/views/edit_associated.js.rjs +11 -0
  69. data/frontends/default/views/field_search.html.erb +5 -0
  70. data/frontends/default/views/form_messages.js.rjs +1 -0
  71. data/frontends/default/views/list.html.erb +1 -0
  72. data/frontends/default/views/list.js.rjs +1 -0
  73. data/frontends/default/views/on_action_update.js.rjs +10 -0
  74. data/frontends/default/views/on_create.js.rjs +41 -0
  75. data/frontends/default/views/on_mark_all.js.rjs +12 -0
  76. data/frontends/default/views/on_update.js.rjs +28 -0
  77. data/frontends/default/views/render_field.js.rjs +1 -0
  78. data/frontends/default/views/search.html.erb +5 -0
  79. data/frontends/default/views/show.html.erb +5 -0
  80. data/frontends/default/views/update.html.erb +8 -0
  81. data/frontends/default/views/update_column.js.rjs +13 -0
  82. data/frontends/default/views/update_row.js.rjs +1 -0
  83. data/lib/active_scaffold.rb +386 -0
  84. data/lib/active_scaffold/actions/common_search.rb +22 -0
  85. data/lib/active_scaffold/actions/core.rb +191 -0
  86. data/lib/active_scaffold/actions/create.rb +149 -0
  87. data/lib/active_scaffold/actions/delete.rb +75 -0
  88. data/lib/active_scaffold/actions/field_search.rb +82 -0
  89. data/lib/active_scaffold/actions/list.rb +194 -0
  90. data/lib/active_scaffold/actions/mark.rb +75 -0
  91. data/lib/active_scaffold/actions/nested.rb +254 -0
  92. data/lib/active_scaffold/actions/search.rb +47 -0
  93. data/lib/active_scaffold/actions/show.rb +61 -0
  94. data/lib/active_scaffold/actions/subform.rb +27 -0
  95. data/lib/active_scaffold/actions/update.rb +151 -0
  96. data/lib/active_scaffold/active_record_permissions.rb +134 -0
  97. data/lib/active_scaffold/attribute_params.rb +212 -0
  98. data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
  99. data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +39 -0
  100. data/lib/active_scaffold/bridges/bridge.rb +59 -0
  101. data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
  102. data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +83 -0
  103. data/lib/active_scaffold/bridges/cancan/bridge.rb +12 -0
  104. data/lib/active_scaffold/bridges/cancan/lib/cancan_bridge.rb +107 -0
  105. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +9 -0
  106. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +33 -0
  107. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +12 -0
  108. data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +45 -0
  109. data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
  110. data/lib/active_scaffold/bridges/country_helper/bridge.rb +9 -0
  111. data/lib/active_scaffold/bridges/country_helper/lib/country_helper_bridge.rb +358 -0
  112. data/lib/active_scaffold/bridges/date_picker/bridge.rb +24 -0
  113. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +234 -0
  114. data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
  115. data/lib/active_scaffold/bridges/dragonfly/bridge.rb +9 -0
  116. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge.rb +36 -0
  117. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge_helpers.rb +12 -0
  118. data/lib/active_scaffold/bridges/dragonfly/lib/form_ui.rb +27 -0
  119. data/lib/active_scaffold/bridges/dragonfly/lib/list_ui.rb +16 -0
  120. data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
  121. data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
  122. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
  123. data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
  124. data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
  125. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  126. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  127. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  128. data/lib/active_scaffold/bridges/paperclip/bridge.rb +12 -0
  129. data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
  130. data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
  131. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
  132. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
  133. data/lib/active_scaffold/bridges/record_select/bridge.rb +5 -0
  134. data/lib/active_scaffold/bridges/record_select/lib/record_select_bridge.rb +92 -0
  135. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
  136. data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
  137. data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
  138. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
  139. data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +61 -0
  140. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
  141. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
  142. data/lib/active_scaffold/config/base.rb +62 -0
  143. data/lib/active_scaffold/config/core.rb +220 -0
  144. data/lib/active_scaffold/config/create.rb +51 -0
  145. data/lib/active_scaffold/config/delete.rb +34 -0
  146. data/lib/active_scaffold/config/field_search.rb +75 -0
  147. data/lib/active_scaffold/config/form.rb +53 -0
  148. data/lib/active_scaffold/config/list.rb +188 -0
  149. data/lib/active_scaffold/config/mark.rb +35 -0
  150. data/lib/active_scaffold/config/nested.rb +45 -0
  151. data/lib/active_scaffold/config/search.rb +69 -0
  152. data/lib/active_scaffold/config/show.rb +35 -0
  153. data/lib/active_scaffold/config/subform.rb +35 -0
  154. data/lib/active_scaffold/config/update.rb +46 -0
  155. data/lib/active_scaffold/configurable.rb +29 -0
  156. data/lib/active_scaffold/constraints.rb +184 -0
  157. data/lib/active_scaffold/data_structures/action_columns.rb +137 -0
  158. data/lib/active_scaffold/data_structures/action_link.rb +175 -0
  159. data/lib/active_scaffold/data_structures/action_links.rb +185 -0
  160. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  161. data/lib/active_scaffold/data_structures/column.rb +366 -0
  162. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  163. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  164. data/lib/active_scaffold/data_structures/nested_info.rb +123 -0
  165. data/lib/active_scaffold/data_structures/set.rb +62 -0
  166. data/lib/active_scaffold/data_structures/sorting.rb +168 -0
  167. data/lib/active_scaffold/extensions/action_controller_rendering.rb +22 -0
  168. data/lib/active_scaffold/extensions/action_view_rendering.rb +111 -0
  169. data/lib/active_scaffold/extensions/action_view_resolver.rb +7 -0
  170. data/lib/active_scaffold/extensions/active_association_reflection.rb +13 -0
  171. data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
  172. data/lib/active_scaffold/extensions/array.rb +7 -0
  173. data/lib/active_scaffold/extensions/localize.rb +10 -0
  174. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
  175. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
  176. data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
  177. data/lib/active_scaffold/extensions/reverse_associations.rb +62 -0
  178. data/lib/active_scaffold/extensions/routing_mapper.rb +34 -0
  179. data/lib/active_scaffold/extensions/to_label.rb +8 -0
  180. data/lib/active_scaffold/extensions/unsaved_associated.rb +61 -0
  181. data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
  182. data/lib/active_scaffold/extensions/usa_state.rb +46 -0
  183. data/lib/active_scaffold/finder.rb +345 -0
  184. data/lib/active_scaffold/helpers/association_helpers.rb +42 -0
  185. data/lib/active_scaffold/helpers/controller_helpers.rb +87 -0
  186. data/lib/active_scaffold/helpers/form_column_helpers.rb +321 -0
  187. data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
  188. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  189. data/lib/active_scaffold/helpers/list_column_helpers.rb +375 -0
  190. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  191. data/lib/active_scaffold/helpers/search_column_helpers.rb +254 -0
  192. data/lib/active_scaffold/helpers/show_column_helpers.rb +50 -0
  193. data/lib/active_scaffold/helpers/view_helpers.rb +379 -0
  194. data/lib/active_scaffold/locale/de.yml +111 -0
  195. data/lib/active_scaffold/locale/en.yml +115 -0
  196. data/lib/active_scaffold/locale/es.yml +115 -0
  197. data/lib/active_scaffold/locale/fr.yml +118 -0
  198. data/lib/active_scaffold/locale/hu.yml +63 -0
  199. data/lib/active_scaffold/locale/ja.yml +64 -0
  200. data/lib/active_scaffold/locale/ru.yml +119 -0
  201. data/lib/active_scaffold/marked_model.rb +38 -0
  202. data/lib/active_scaffold/paginator.rb +136 -0
  203. data/lib/active_scaffold/responds_to_parent.rb +70 -0
  204. data/lib/active_scaffold/version.rb +10 -0
  205. data/lib/active_scaffold_assets.rb +45 -0
  206. data/lib/active_scaffold_env.rb +13 -0
  207. data/lib/generators/active_scaffold/USAGE +29 -0
  208. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  209. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  210. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
  211. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  212. data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
  213. data/lib/generators/active_scaffold_setup/USAGE +10 -0
  214. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +59 -0
  215. data/public/blank.html +33 -0
  216. data/shoulda_macros/macros.rb +136 -0
  217. data/test/bridges/bridge_test.rb +47 -0
  218. data/test/config/base_test.rb +15 -0
  219. data/test/config/create_test.rb +55 -0
  220. data/test/config/list_test.rb +74 -0
  221. data/test/config/show_test.rb +43 -0
  222. data/test/config/update_test.rb +17 -0
  223. data/test/const_mocker.rb +36 -0
  224. data/test/data_structures/action_columns_test.rb +113 -0
  225. data/test/data_structures/action_link_test.rb +78 -0
  226. data/test/data_structures/action_links_test.rb +78 -0
  227. data/test/data_structures/actions_test.rb +25 -0
  228. data/test/data_structures/association_column_test.rb +42 -0
  229. data/test/data_structures/column_test.rb +185 -0
  230. data/test/data_structures/columns_test.rb +69 -0
  231. data/test/data_structures/error_message_test.rb +28 -0
  232. data/test/data_structures/set_test.rb +86 -0
  233. data/test/data_structures/sorting_test.rb +126 -0
  234. data/test/data_structures/standard_column_test.rb +24 -0
  235. data/test/data_structures/virtual_column_test.rb +23 -0
  236. data/test/extensions/active_record_test.rb +45 -0
  237. data/test/extensions/array_test.rb +12 -0
  238. data/test/helpers/form_column_helpers_test.rb +31 -0
  239. data/test/helpers/list_column_helpers_test.rb +31 -0
  240. data/test/helpers/pagination_helpers_test.rb +55 -0
  241. data/test/misc/active_record_permissions_test.rb +154 -0
  242. data/test/misc/attribute_params_test.rb +110 -0
  243. data/test/misc/configurable_test.rb +96 -0
  244. data/test/misc/constraints_test.rb +193 -0
  245. data/test/misc/finder_test.rb +93 -0
  246. data/test/misc/lang_test.rb +12 -0
  247. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  248. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  249. data/test/mock_app/config/boot.rb +110 -0
  250. data/test/mock_app/config/database.yml +16 -0
  251. data/test/mock_app/config/environment.rb +43 -0
  252. data/test/mock_app/config/environments/development.rb +17 -0
  253. data/test/mock_app/config/environments/production.rb +28 -0
  254. data/test/mock_app/config/environments/test.rb +28 -0
  255. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  256. data/test/mock_app/config/initializers/inflections.rb +10 -0
  257. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  258. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  259. data/test/mock_app/config/initializers/session_store.rb +15 -0
  260. data/test/mock_app/config/locales/en.yml +5 -0
  261. data/test/mock_app/config/routes.rb +43 -0
  262. data/test/mock_app/db/test.sqlite3 +1 -0
  263. data/test/mock_app/public/blank.html +33 -0
  264. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  265. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  266. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  267. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  268. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  269. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  270. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  271. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  272. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  273. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  274. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  275. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  276. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  277. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  278. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  279. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  280. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +842 -0
  281. data/test/model_stub.rb +55 -0
  282. data/test/run_all.rb +8 -0
  283. data/test/test_helper.rb +39 -0
  284. metadata +470 -0
@@ -0,0 +1,12 @@
1
+ options = {:checked => mark_all,
2
+ :include_mark_all => true}
3
+ page << "ActiveScaffold.mark_records('#{active_scaffold_tbody_id}', #{options.to_json});"
4
+ if active_scaffold_config.model.marked.length>0 then
5
+ if active_scaffold_config.model.marked.length < @page.pager.count then
6
+ page.call 'ActiveScaffold.replace_html', active_scaffold_messages_id, active_scaffold_config.model.marked.length.to_s + " records marked. Press <a href=\""+url_for(:action=>"mark_all",:mark_target=>"scope")+"\">here</a> to select all #{@page.pager.count} records.".html_safe
7
+ else
8
+ page.call 'ActiveScaffold.replace_html', active_scaffold_messages_id, "All #{@page.pager.count} records marked"
9
+ end
10
+ else
11
+ page.call 'ActiveScaffold.replace_html', active_scaffold_messages_id, ""
12
+ end
@@ -0,0 +1,28 @@
1
+ form_selector = "#{element_form_id(:action => :update)}"
2
+
3
+ page << "var action_link = ActiveScaffold.find_action_link('#{form_selector}');"
4
+ page << "action_link.update_flash_messages('#{escape_javascript(render(:partial => 'messages').strip)}');"
5
+ if controller.send :successful?
6
+ if render_parent? && controller.respond_to?(:render_component_into_view)
7
+ parent_rendered = controller.send(:render_component_into_view, render_parent_options)
8
+ if nested_singular_association?
9
+ page << "action_link.close('#{escape_javascript(parent_rendered)}');"
10
+ else
11
+ if render_parent_action == :row
12
+ page << "action_link.close('#{escape_javascript(parent_rendered)}');"
13
+ elsif render_parent_action == :index
14
+ page << parent_rendered
15
+ end
16
+ end
17
+ #page.call 'ActiveScaffold.replace', active_scaffold_calculations_id, render(:partial => 'list_calculations') if active_scaffold_config.list.columns.any? {|c| c.calculation?}
18
+ elsif update_refresh_list?
19
+ page.call 'ActiveScaffold.replace_html', active_scaffold_content_id, render(:partial => 'list', :layout => false)
20
+ else
21
+ updated_row = render :partial => 'list_record', :locals => {:record => @record}
22
+ page << "action_link.close('#{escape_javascript(updated_row)}');"
23
+ page.call 'ActiveScaffold.replace', active_scaffold_calculations_id, render(:partial => 'list_calculations') if active_scaffold_config.list.columns.any? {|c| c.calculation?}
24
+ end
25
+ else
26
+ page.call 'ActiveScaffold.replace', form_selector, render(:partial => 'update_form', :locals => {:xhr => true})
27
+ page.call 'ActiveScaffold.scroll_to', form_selector
28
+ end
@@ -0,0 +1 @@
1
+ page << render(:partial => "render_field", :collection => columns, :locals => {:source_id => source_id, :scope => scope})
@@ -0,0 +1,5 @@
1
+ <div class="active-scaffold">
2
+ <div class="search-view <%= "#{params[:controller]}-view" %> view">
3
+ <%= render :partial => 'search' -%>
4
+ </div>
5
+ </div>
@@ -0,0 +1,5 @@
1
+ <div class="active-scaffold">
2
+ <div class="show-view <%= "#{params[:controller]}-view" %> view">
3
+ <%= render :partial => 'show' -%>
4
+ </div>
5
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="active-scaffold">
2
+ <div class="update-view <%= "#{params[:controller]}-view" %> view">
3
+ <% if active_scaffold_config.update.nested_links and active_scaffold_config.action_links.member.empty? -%>
4
+ <%= render :partial => 'update_actions', :locals => {:record => @record, :url_options => params_for(:action => :list, :id => @record.id)} %>
5
+ <% end -%>
6
+ <%= render :partial => 'update_form' -%>
7
+ </div>
8
+ </div>
@@ -0,0 +1,13 @@
1
+ column_span_id ||= element_cell_id(:id => @record.id.to_s, :action => 'update_column', :name => params[:column])
2
+ unless controller.send :successful?
3
+ page.call 'alert', @record.errors.full_messages.join("\n")
4
+ @record.reload
5
+ end
6
+ column = active_scaffold_config.columns[params[:column]]
7
+ if column.inplace_edit
8
+ page.call 'ActiveScaffold.replace_html', column_span_id, format_inplace_edit_column(@record, column)
9
+ else
10
+ formatted_value = get_column_value(@record, column)
11
+ page.call 'ActiveScaffold.replace_html', column_span_id, formatted_value
12
+ end
13
+ page.call 'ActiveScaffold.replace_html', active_scaffold_calculations_id(column), render_column_calculation(column) if column.calculation?
@@ -0,0 +1 @@
1
+ page.call 'ActiveScaffold.update_row', element_row_id(:action => 'list', :id => @record.id), render(:partial => 'list_record', :locals => {:record => @record})
@@ -0,0 +1,386 @@
1
+ unless Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR >= 0
2
+ raise "This version of ActiveScaffold requires Rails 3.0 or higher. Please use an earlier version."
3
+ end
4
+
5
+ begin
6
+ require 'render_component'
7
+ rescue LoadError
8
+ end
9
+ begin
10
+ require 'verification'
11
+ rescue LoadError
12
+ end
13
+
14
+ require 'active_scaffold_assets'
15
+ require 'active_scaffold/active_record_permissions'
16
+ require 'active_scaffold/paginator'
17
+ require 'active_scaffold/responds_to_parent'
18
+
19
+ require 'active_scaffold/version'
20
+
21
+ module ActiveScaffold
22
+ autoload :AttributeParams, 'active_scaffold/attribute_params'
23
+ autoload :Configurable, 'active_scaffold/configurable'
24
+ autoload :Constraints, 'active_scaffold/constraints'
25
+ autoload :Finder, 'active_scaffold/finder'
26
+ autoload :MarkedModel, 'active_scaffold/marked_model'
27
+
28
+ def self.autoload_subdir(dir, mod=self, root = File.dirname(__FILE__))
29
+ Dir["#{root}/active_scaffold/#{dir}/*.rb"].each { |file|
30
+ basename = File.basename(file, ".rb")
31
+ mod.module_eval {
32
+ autoload basename.camelcase.to_sym, "active_scaffold/#{dir}/#{basename}"
33
+ }
34
+ }
35
+ end
36
+
37
+ module Actions
38
+ ActiveScaffold.autoload_subdir('actions', self)
39
+ end
40
+
41
+ module Bridges
42
+ autoload :Bridge, 'active_scaffold/bridges/bridge'
43
+ end
44
+
45
+ module Config
46
+ ActiveScaffold.autoload_subdir('config', self)
47
+ end
48
+
49
+ module DataStructures
50
+ ActiveScaffold.autoload_subdir('data_structures', self)
51
+ end
52
+
53
+ module Helpers
54
+ ActiveScaffold.autoload_subdir('helpers', self)
55
+ end
56
+
57
+ class ControllerNotFound < RuntimeError; end
58
+ class DependencyFailure < RuntimeError; end
59
+ class MalformedConstraint < RuntimeError; end
60
+ class RecordNotAllowed < SecurityError; end
61
+ class ActionNotAllowed < SecurityError; end
62
+ class ReverseAssociationRequired < RuntimeError; end
63
+
64
+ def self.included(base)
65
+ base.extend(ClassMethods)
66
+ base.module_eval do
67
+ # TODO: these should be in actions/core
68
+ before_filter :handle_user_settings
69
+ before_filter :check_input_device
70
+ end
71
+
72
+ base.helper_method :touch_device?
73
+ base.helper_method :hover_via_click?
74
+ end
75
+
76
+ def self.set_defaults(&block)
77
+ ActiveScaffold::Config::Core.configure &block
78
+ end
79
+
80
+ def active_scaffold_config
81
+ self.class.active_scaffold_config
82
+ end
83
+
84
+ def active_scaffold_config_for(klass)
85
+ self.class.active_scaffold_config_for(klass)
86
+ end
87
+
88
+ def active_scaffold_session_storage(id = (params[:eid] || params[:controller]))
89
+ session_index = "as:#{id}"
90
+ session[session_index] ||= {}
91
+ session[session_index]
92
+ end
93
+
94
+ # at some point we need to pass the session and params into config. we'll just take care of that before any particular action occurs by passing those hashes off to the UserSettings class of each action.
95
+ def handle_user_settings
96
+ if self.class.uses_active_scaffold?
97
+ active_scaffold_config.actions.each do |action_name|
98
+ conf_instance = active_scaffold_config.send(action_name) rescue next
99
+ next if conf_instance.class::UserSettings == ActiveScaffold::Config::Base::UserSettings # if it hasn't been extended, skip it
100
+ active_scaffold_session_storage[action_name] ||= {}
101
+ conf_instance.user = conf_instance.class::UserSettings.new(conf_instance, active_scaffold_session_storage[action_name], params)
102
+ end
103
+ end
104
+ end
105
+
106
+ def check_input_device
107
+ if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(iPhone|iPod|iPad)/i]
108
+ session[:input_device_type] = 'TOUCH'
109
+ session[:hover_supported] = false
110
+ else
111
+ session[:input_device_type] = 'MOUSE'
112
+ session[:hover_supported] = true
113
+ end if session[:input_device_type].nil?
114
+ end
115
+
116
+ def touch_device?
117
+ session[:input_device_type] == 'TOUCH'
118
+ end
119
+
120
+ def hover_via_click?
121
+ session[:hover_supported] == false
122
+ end
123
+
124
+ def self.js_framework=(framework)
125
+ @@js_framework = framework
126
+ end
127
+
128
+ def self.js_framework
129
+ @@js_framework ||= :prototype
130
+ end
131
+
132
+ # exclude bridges you do not need
133
+ # name of bridge subdir should be used to exclude it
134
+ # eg
135
+ # ActiveScaffold.exclude_bridges = [:cancan, :ancestry]
136
+ # if you are using Activescaffold as a gem add to initializer
137
+ # if you are using Activescaffold as a plugin add to active_scaffold_env.rb
138
+ def self.exclude_bridges=(bridges)
139
+ @@exclude_bridges = bridges
140
+ end
141
+
142
+ def self.exclude_bridges
143
+ @@exclude_bridges ||= []
144
+ end
145
+
146
+ def self.root
147
+ File.dirname(__FILE__) + "/.."
148
+ end
149
+
150
+ module ClassMethods
151
+ def active_scaffold(model_id = nil, &block)
152
+ # initialize bridges here
153
+ ActiveScaffold::Bridges::Bridge.run_all
154
+
155
+ # converts Foo::BarController to 'bar' and FooBarsController to 'foo_bar' and AddressController to 'address'
156
+ model_id = self.to_s.split('::').last.sub(/Controller$/, '').pluralize.singularize.underscore unless model_id
157
+
158
+ # run the configuration
159
+ @active_scaffold_config = ActiveScaffold::Config::Core.new(model_id)
160
+ @active_scaffold_config_block = block
161
+ self.links_for_associations
162
+
163
+ @active_scaffold_overrides = []
164
+ ActionController::Base.view_paths.each do |dir|
165
+ active_scaffold_overrides_dir = File.join(dir.to_s,"active_scaffold_overrides")
166
+ @active_scaffold_overrides << active_scaffold_overrides_dir if File.exists?(active_scaffold_overrides_dir)
167
+ end
168
+ @active_scaffold_overrides.uniq! # Fix rails duplicating some view_paths
169
+ @active_scaffold_frontends = []
170
+ if active_scaffold_config.frontend.to_sym != :default
171
+ active_scaffold_custom_frontend_path = File.join(ActiveScaffold::Config::Core.plugin_directory, 'frontends', active_scaffold_config.frontend.to_s , 'views')
172
+ @active_scaffold_frontends << active_scaffold_custom_frontend_path
173
+ end
174
+ active_scaffold_default_frontend_path = File.join(ActiveScaffold::Config::Core.plugin_directory, 'frontends', 'default' , 'views')
175
+ @active_scaffold_frontends << active_scaffold_default_frontend_path
176
+ @active_scaffold_custom_paths = []
177
+
178
+ self.active_scaffold_superclasses_blocks.each {|superblock| self.active_scaffold_config.configure &superblock}
179
+ self.active_scaffold_config.sti_children = nil # reset sti_children if set in parent block
180
+ self.active_scaffold_config.configure &block if block_given?
181
+ self.active_scaffold_config._configure_sti unless self.active_scaffold_config.sti_children.nil?
182
+ self.active_scaffold_config._load_action_columns
183
+
184
+ # defines the attribute read methods on the model, so record.send() doesn't find protected/private methods instead
185
+ klass = self.active_scaffold_config.model
186
+ klass.define_attribute_methods unless klass.attribute_methods_generated?
187
+ # include the rest of the code into the controller: the action core and the included actions
188
+ module_eval do
189
+ include ActiveScaffold::Finder
190
+ include ActiveScaffold::Constraints
191
+ include ActiveScaffold::AttributeParams
192
+ include ActiveScaffold::Actions::Core
193
+ active_scaffold_config.actions.each do |mod|
194
+ name = mod.to_s.camelize
195
+ include "ActiveScaffold::Actions::#{name}".constantize
196
+
197
+ # sneak the action links from the actions into the main set
198
+ if link = active_scaffold_config.send(mod).link rescue nil
199
+ if link.is_a? Array
200
+ link.each {|current| active_scaffold_config.action_links.add_to_group(current, active_scaffold_config.send(mod).action_group)}
201
+ elsif link.is_a? ActiveScaffold::DataStructures::ActionLink
202
+ active_scaffold_config.action_links.add_to_group(link, active_scaffold_config.send(mod).action_group)
203
+ end
204
+ end
205
+ end
206
+ end
207
+ active_scaffold_paths.each do |path|
208
+ self.append_view_path(ActionView::ActiveScaffoldResolver.new(path))
209
+ end
210
+ self._add_sti_create_links if self.active_scaffold_config.add_sti_create_links?
211
+ end
212
+
213
+ # To be called after include action modules
214
+ def _add_sti_create_links
215
+ new_action_link = active_scaffold_config.action_links.collection['new']
216
+ unless new_action_link.nil? || active_scaffold_config.sti_children.empty?
217
+ active_scaffold_config.action_links.collection.delete('new')
218
+ active_scaffold_config.sti_children.each do |child|
219
+ new_sti_link = Marshal.load(Marshal.dump(new_action_link)) # deep clone
220
+ new_sti_link.label = child.to_s.camelize.constantize.model_name.human
221
+ new_sti_link.parameters = {:parent_sti => controller_path}
222
+ new_sti_link.controller = Proc.new { active_scaffold_controller_for(child.to_s.camelize.constantize).controller_path }
223
+ active_scaffold_config.action_links.collection.create.add(new_sti_link)
224
+ end
225
+ end
226
+ end
227
+
228
+ # Create the automatic column links. Note that this has to happen when configuration is *done*, because otherwise the Nested module could be disabled. Actually, it could still be disabled later, couldn't it?
229
+ def links_for_associations
230
+ return unless active_scaffold_config.actions.include? :list and active_scaffold_config.actions.include? :nested
231
+ active_scaffold_config.columns.each do |column|
232
+ next unless column.link.nil? and column.autolink?
233
+ #lazy load of action_link, cause it was really slowing down app in dev mode
234
+ #and might lead to trouble cause of cyclic constantization of controllers
235
+ #and might be unnecessary cause it is done before columns are configured
236
+ column.set_link(Proc.new {|col| link_for_association(col)})
237
+ end
238
+ end
239
+
240
+ def active_scaffold_controller_for_column(column, options = {})
241
+ begin
242
+ if column.polymorphic_association?
243
+ :polymorph
244
+ elsif options.include?(:controller)
245
+ "#{options[:controller].to_s.camelize}Controller".constantize
246
+ else
247
+ active_scaffold_controller_for(column.association.klass)
248
+ end
249
+ rescue ActiveScaffold::ControllerNotFound
250
+ nil
251
+ end
252
+ end
253
+
254
+ def link_for_association(column, options = {})
255
+ controller = active_scaffold_controller_for_column(column, options)
256
+
257
+ unless controller.nil?
258
+ options.reverse_merge! :label => column.label, :position => :after, :type => :member, :controller => (controller == :polymorph ? controller : controller.controller_path), :column => column
259
+ options[:parameters] ||= {}
260
+ options[:parameters].reverse_merge! :parent_scaffold => controller_path, :association => column.association.name
261
+ if column.plural_association?
262
+ # note: we can't create nested scaffolds on :through associations because there's no reverse association.
263
+
264
+ ActiveScaffold::DataStructures::ActionLink.new('index', options) #unless column.through_association?
265
+ else
266
+ actions = [:create, :update, :show]
267
+ actions = controller.active_scaffold_config.actions unless controller == :polymorph
268
+ column.actions_for_association_links.delete :new unless actions.include? :create
269
+ column.actions_for_association_links.delete :edit unless actions.include? :update
270
+ column.actions_for_association_links.delete :show unless actions.include? :show
271
+ ActiveScaffold::DataStructures::ActionLink.new(nil, options.merge(:html_options => {:class => column.name}))
272
+ end
273
+ end
274
+ end
275
+
276
+ def link_for_association_as_scope(scope, options = {})
277
+ options.reverse_merge! :label => scope, :position => :after, :type => :member, :controller => controller_path
278
+ options[:parameters] ||= {}
279
+ options[:parameters].reverse_merge! :parent_scaffold => controller_path, :named_scope => scope
280
+ ActiveScaffold::DataStructures::ActionLink.new('index', options)
281
+ end
282
+
283
+ def add_active_scaffold_path(path)
284
+ @active_scaffold_paths = nil # Force active_scaffold_paths to rebuild
285
+ @active_scaffold_custom_paths << path
286
+ end
287
+
288
+ def add_active_scaffold_override_path(path)
289
+ @active_scaffold_paths = nil # Force active_scaffold_paths to rebuild
290
+ @active_scaffold_overrides.unshift path
291
+ end
292
+
293
+ def active_scaffold_paths
294
+ return @active_scaffold_paths unless @active_scaffold_paths.nil?
295
+
296
+ #@active_scaffold_paths = ActionView::PathSet.new
297
+ @active_scaffold_paths = []
298
+ @active_scaffold_paths.concat @active_scaffold_overrides unless @active_scaffold_overrides.nil?
299
+ @active_scaffold_paths.concat @active_scaffold_custom_paths unless @active_scaffold_custom_paths.nil?
300
+ @active_scaffold_paths.concat @active_scaffold_frontends unless @active_scaffold_frontends.nil?
301
+ @active_scaffold_paths
302
+ end
303
+
304
+ def active_scaffold_config
305
+ if @active_scaffold_config.nil?
306
+ self.superclass.active_scaffold_config if self.superclass.respond_to? :active_scaffold_config
307
+ else
308
+ @active_scaffold_config
309
+ end
310
+ end
311
+
312
+ def active_scaffold_config_block
313
+ @active_scaffold_config_block
314
+ end
315
+
316
+ def active_scaffold_superclasses_blocks
317
+ blocks = []
318
+ klass = self.superclass
319
+ while klass.respond_to? :active_scaffold_superclasses_blocks
320
+ blocks << klass.active_scaffold_config_block
321
+ klass = klass.superclass
322
+ end
323
+ blocks.compact.reverse
324
+ end
325
+
326
+ def active_scaffold_config_for(klass)
327
+ begin
328
+ controller = active_scaffold_controller_for(klass)
329
+ rescue ActiveScaffold::ControllerNotFound
330
+ config = ActiveScaffold::Config::Core.new(klass)
331
+ config._load_action_columns
332
+ config
333
+ else
334
+ controller.active_scaffold_config
335
+ end
336
+ end
337
+
338
+ # Tries to find a controller for the given ActiveRecord model.
339
+ # Searches in the namespace of the current controller for singular and plural versions of the conventional "#{model}Controller" syntax.
340
+ # You may override this method to customize the search routine.
341
+ def active_scaffold_controller_for(klass)
342
+ controller_namespace = self.to_s.split('::')[0...-1].join('::') + '::'
343
+ error_message = []
344
+ klass = klass.to_s.singularize.camelize.constantize unless klass.is_a? Class
345
+ [controller_namespace, ''].each do |namespace|
346
+ ["#{klass.to_s.underscore.pluralize}", "#{klass.to_s.underscore.pluralize.singularize}"].each do |controller_name|
347
+ begin
348
+ controller = "#{namespace}#{controller_name.camelize}Controller".constantize
349
+ rescue NameError => error
350
+ # Only rescue NameError associated with the controller constant not existing - not other compile errors
351
+ if error.message["uninitialized constant #{controller}"]
352
+ error_message << "#{namespace}#{controller_name.camelize}Controller"
353
+ next
354
+ else
355
+ raise
356
+ end
357
+ end
358
+ raise ActiveScaffold::ControllerNotFound, "#{controller} missing ActiveScaffold", caller unless controller.uses_active_scaffold?
359
+ raise ActiveScaffold::ControllerNotFound, "ActiveScaffold on #{controller} is not for #{klass} model.", caller unless controller.active_scaffold_config.model == klass
360
+ return controller
361
+ end
362
+ end
363
+ raise ActiveScaffold::ControllerNotFound, "Could not find " + error_message.join(" or "), caller
364
+ end
365
+
366
+ def uses_active_scaffold?
367
+ !active_scaffold_config.nil?
368
+ end
369
+ end
370
+ end
371
+
372
+ require 'active_scaffold_env'
373
+
374
+ ##
375
+ ## Run the install assets script, too, just to make sure
376
+ ## But at least rescue the action in production
377
+ ##
378
+
379
+ Rails::Application.initializer("active_scaffold.install_assets") do
380
+ begin
381
+ ActiveScaffoldAssets.copy_to_public(ActiveScaffold.root, {:clean_up_destination => true})
382
+ rescue
383
+ raise $! unless Rails.env == 'production'
384
+ end
385
+ end
386
+