active_scaffold-sequel 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. data/CHANGELOG +179 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +36 -0
  4. data/app/assets/images/active_scaffold/add.gif +0 -0
  5. data/app/assets/images/active_scaffold/arrow_down.gif +0 -0
  6. data/app/assets/images/active_scaffold/arrow_up.gif +0 -0
  7. data/app/assets/images/active_scaffold/close.gif +0 -0
  8. data/app/assets/images/active_scaffold/close_touch.png +0 -0
  9. data/app/assets/images/active_scaffold/config.png +0 -0
  10. data/app/assets/images/active_scaffold/cross.png +0 -0
  11. data/app/assets/images/active_scaffold/gears.png +0 -0
  12. data/app/assets/images/active_scaffold/indicator-small.gif +0 -0
  13. data/app/assets/images/active_scaffold/indicator.gif +0 -0
  14. data/app/assets/images/active_scaffold/magnifier.png +0 -0
  15. data/app/assets/javascripts/active_scaffold.js.erb +19 -0
  16. data/app/assets/javascripts/jquery/active_scaffold.js +1057 -0
  17. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +24 -0
  18. data/app/assets/javascripts/jquery/draggable_lists.js +27 -0
  19. data/app/assets/javascripts/jquery/jquery.editinplace.js +743 -0
  20. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +7 -0
  21. data/app/assets/javascripts/prototype/active_scaffold.js +1052 -0
  22. data/app/assets/javascripts/prototype/dhtml_history.js +870 -0
  23. data/app/assets/javascripts/prototype/form_enhancements.js +117 -0
  24. data/app/assets/javascripts/prototype/rico_corner.js +370 -0
  25. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +7 -0
  26. data/app/assets/stylesheets/active_scaffold-ie.css +35 -0
  27. data/app/assets/stylesheets/active_scaffold.css.scss +14 -0
  28. data/app/assets/stylesheets/active_scaffold_colors.css.scss +395 -0
  29. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -0
  30. data/app/assets/stylesheets/active_scaffold_images.css.scss +43 -0
  31. data/app/assets/stylesheets/active_scaffold_layout.css +912 -0
  32. data/app/assets/stylesheets/blue-theme.css +74 -0
  33. data/config/locales/de.yml +114 -0
  34. data/config/locales/en.yml +118 -0
  35. data/config/locales/es.yml +120 -0
  36. data/config/locales/fr.yml +121 -0
  37. data/config/locales/hu.yml +74 -0
  38. data/config/locales/ja.yml +73 -0
  39. data/config/locales/ru.yml +123 -0
  40. data/frontends/default/views/_action_group.html.erb +24 -0
  41. data/frontends/default/views/_add_existing_form.html.erb +30 -0
  42. data/frontends/default/views/_base_form.html.erb +51 -0
  43. data/frontends/default/views/_create_form.html.erb +8 -0
  44. data/frontends/default/views/_create_form_on_list.html.erb +6 -0
  45. data/frontends/default/views/_field_search.html.erb +32 -0
  46. data/frontends/default/views/_form.html.erb +24 -0
  47. data/frontends/default/views/_form_association.html.erb +15 -0
  48. data/frontends/default/views/_form_association_footer.html.erb +47 -0
  49. data/frontends/default/views/_form_attribute.html.erb +20 -0
  50. data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
  51. data/frontends/default/views/_form_messages.html.erb +5 -0
  52. data/frontends/default/views/_horizontal_subform.html.erb +28 -0
  53. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  54. data/frontends/default/views/_horizontal_subform_header.html.erb +11 -0
  55. data/frontends/default/views/_horizontal_subform_record.html.erb +38 -0
  56. data/frontends/default/views/_human_conditions.html.erb +1 -0
  57. data/frontends/default/views/_list.html.erb +18 -0
  58. data/frontends/default/views/_list_actions.html.erb +15 -0
  59. data/frontends/default/views/_list_calculations.html.erb +16 -0
  60. data/frontends/default/views/_list_column_headings.html.erb +12 -0
  61. data/frontends/default/views/_list_header.html.erb +10 -0
  62. data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
  63. data/frontends/default/views/_list_messages.html.erb +30 -0
  64. data/frontends/default/views/_list_pagination.html.erb +11 -0
  65. data/frontends/default/views/_list_pagination_links.html.erb +9 -0
  66. data/frontends/default/views/_list_record.html.erb +14 -0
  67. data/frontends/default/views/_list_record_columns.html.erb +8 -0
  68. data/frontends/default/views/_list_with_header.html.erb +36 -0
  69. data/frontends/default/views/_messages.html.erb +10 -0
  70. data/frontends/default/views/_render_field.js.erb +20 -0
  71. data/frontends/default/views/_row.html.erb +6 -0
  72. data/frontends/default/views/_search.html.erb +34 -0
  73. data/frontends/default/views/_search_attribute.html.erb +10 -0
  74. data/frontends/default/views/_show.html.erb +8 -0
  75. data/frontends/default/views/_show_columns.html.erb +15 -0
  76. data/frontends/default/views/_update_actions.html.erb +9 -0
  77. data/frontends/default/views/_update_form.html.erb +6 -0
  78. data/frontends/default/views/_vertical_subform.html.erb +12 -0
  79. data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
  80. data/frontends/default/views/action_confirmation.html.erb +13 -0
  81. data/frontends/default/views/add_existing.js.erb +18 -0
  82. data/frontends/default/views/add_existing_form.html.erb +5 -0
  83. data/frontends/default/views/create.html.erb +5 -0
  84. data/frontends/default/views/delete.html.erb +13 -0
  85. data/frontends/default/views/destroy.js.erb +24 -0
  86. data/frontends/default/views/edit_associated.js.erb +12 -0
  87. data/frontends/default/views/field_search.html.erb +5 -0
  88. data/frontends/default/views/form_messages.js.erb +1 -0
  89. data/frontends/default/views/list.html.erb +1 -0
  90. data/frontends/default/views/on_action_update.js.erb +13 -0
  91. data/frontends/default/views/on_create.js.erb +47 -0
  92. data/frontends/default/views/on_mark_all.js.erb +12 -0
  93. data/frontends/default/views/on_update.js.erb +31 -0
  94. data/frontends/default/views/refresh_list.js.erb +1 -0
  95. data/frontends/default/views/render_field.js.erb +1 -0
  96. data/frontends/default/views/search.html.erb +5 -0
  97. data/frontends/default/views/show.html.erb +5 -0
  98. data/frontends/default/views/update.html.erb +8 -0
  99. data/frontends/default/views/update_column.js.erb +16 -0
  100. data/frontends/default/views/update_row.js.erb +1 -0
  101. data/lib/active_scaffold/actions/common_search.rb +25 -0
  102. data/lib/active_scaffold/actions/core.rb +197 -0
  103. data/lib/active_scaffold/actions/create.rb +148 -0
  104. data/lib/active_scaffold/actions/delete.rb +76 -0
  105. data/lib/active_scaffold/actions/field_search.rb +82 -0
  106. data/lib/active_scaffold/actions/list.rb +196 -0
  107. data/lib/active_scaffold/actions/mark.rb +75 -0
  108. data/lib/active_scaffold/actions/nested.rb +245 -0
  109. data/lib/active_scaffold/actions/search.rb +48 -0
  110. data/lib/active_scaffold/actions/show.rb +61 -0
  111. data/lib/active_scaffold/actions/subform.rb +23 -0
  112. data/lib/active_scaffold/actions/update.rb +150 -0
  113. data/lib/active_scaffold/active_record_permissions.rb +136 -0
  114. data/lib/active_scaffold/attribute_params.rb +208 -0
  115. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +39 -0
  116. data/lib/active_scaffold/bridges/ancestry.rb +5 -0
  117. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +67 -0
  118. data/lib/active_scaffold/bridges/calendar_date_select.rb +24 -0
  119. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +107 -0
  120. data/lib/active_scaffold/bridges/cancan.rb +15 -0
  121. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +31 -0
  122. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +10 -0
  123. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +45 -0
  124. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +17 -0
  125. data/lib/active_scaffold/bridges/carrierwave.rb +12 -0
  126. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +358 -0
  127. data/lib/active_scaffold/bridges/country_helper.rb +9 -0
  128. data/lib/active_scaffold/bridges/date_picker/ext.rb +45 -0
  129. data/lib/active_scaffold/bridges/date_picker/helper.rb +180 -0
  130. data/lib/active_scaffold/bridges/date_picker.rb +23 -0
  131. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +34 -0
  132. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +10 -0
  133. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +27 -0
  134. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +16 -0
  135. data/lib/active_scaffold/bridges/dragonfly.rb +9 -0
  136. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +48 -0
  137. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +57 -0
  138. data/lib/active_scaffold/bridges/file_column/form_ui.rb +34 -0
  139. data/lib/active_scaffold/bridges/file_column/list_ui.rb +26 -0
  140. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
  141. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
  142. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
  143. data/lib/active_scaffold/bridges/file_column.rb +11 -0
  144. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +27 -0
  145. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +16 -0
  146. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +36 -0
  147. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +24 -0
  148. data/lib/active_scaffold/bridges/paperclip.rb +12 -0
  149. data/lib/active_scaffold/bridges/record_select/helpers.rb +86 -0
  150. data/lib/active_scaffold/bridges/record_select.rb +11 -0
  151. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +20 -0
  152. data/lib/active_scaffold/bridges/semantic_attributes.rb +5 -0
  153. data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
  154. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +46 -0
  155. data/lib/active_scaffold/bridges/tiny_mce.rb +17 -0
  156. data/lib/active_scaffold/bridges.rb +61 -0
  157. data/lib/active_scaffold/config/base.rb +71 -0
  158. data/lib/active_scaffold/config/core.rb +219 -0
  159. data/lib/active_scaffold/config/create.rb +44 -0
  160. data/lib/active_scaffold/config/delete.rb +33 -0
  161. data/lib/active_scaffold/config/field_search.rb +76 -0
  162. data/lib/active_scaffold/config/form.rb +48 -0
  163. data/lib/active_scaffold/config/list.rb +196 -0
  164. data/lib/active_scaffold/config/mark.rb +35 -0
  165. data/lib/active_scaffold/config/nested.rb +42 -0
  166. data/lib/active_scaffold/config/search.rb +73 -0
  167. data/lib/active_scaffold/config/show.rb +32 -0
  168. data/lib/active_scaffold/config/subform.rb +35 -0
  169. data/lib/active_scaffold/config/update.rb +41 -0
  170. data/lib/active_scaffold/configurable.rb +29 -0
  171. data/lib/active_scaffold/constraints.rb +170 -0
  172. data/lib/active_scaffold/data_structures/action_columns.rb +140 -0
  173. data/lib/active_scaffold/data_structures/action_link.rb +179 -0
  174. data/lib/active_scaffold/data_structures/action_links.rb +185 -0
  175. data/lib/active_scaffold/data_structures/actions.rb +45 -0
  176. data/lib/active_scaffold/data_structures/bridge.rb +22 -0
  177. data/lib/active_scaffold/data_structures/column.rb +389 -0
  178. data/lib/active_scaffold/data_structures/columns.rb +75 -0
  179. data/lib/active_scaffold/data_structures/error_message.rb +24 -0
  180. data/lib/active_scaffold/data_structures/nested_info.rb +130 -0
  181. data/lib/active_scaffold/data_structures/set.rb +57 -0
  182. data/lib/active_scaffold/data_structures/sorting.rb +172 -0
  183. data/lib/active_scaffold/engine.rb +4 -0
  184. data/lib/active_scaffold/extensions/action_controller_rendering.rb +22 -0
  185. data/lib/active_scaffold/extensions/action_view_rendering.rb +115 -0
  186. data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
  187. data/lib/active_scaffold/extensions/array.rb +7 -0
  188. data/lib/active_scaffold/extensions/cache_association.rb +16 -0
  189. data/lib/active_scaffold/extensions/localize.rb +10 -0
  190. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
  191. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
  192. data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
  193. data/lib/active_scaffold/extensions/routing_mapper.rb +48 -0
  194. data/lib/active_scaffold/extensions/to_label.rb +8 -0
  195. data/lib/active_scaffold/extensions/unsaved_associated.rb +60 -0
  196. data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
  197. data/lib/active_scaffold/extensions/usa_state.rb +46 -0
  198. data/lib/active_scaffold/finder.rb +372 -0
  199. data/lib/active_scaffold/helpers/association_helpers.rb +48 -0
  200. data/lib/active_scaffold/helpers/controller_helpers.rb +88 -0
  201. data/lib/active_scaffold/helpers/form_column_helpers.rb +321 -0
  202. data/lib/active_scaffold/helpers/human_condition_helpers.rb +62 -0
  203. data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
  204. data/lib/active_scaffold/helpers/list_column_helpers.rb +340 -0
  205. data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
  206. data/lib/active_scaffold/helpers/search_column_helpers.rb +267 -0
  207. data/lib/active_scaffold/helpers/show_column_helpers.rb +50 -0
  208. data/lib/active_scaffold/helpers/view_helpers.rb +342 -0
  209. data/lib/active_scaffold/marked_model.rb +38 -0
  210. data/lib/active_scaffold/paginator.rb +136 -0
  211. data/lib/active_scaffold/responds_to_parent.rb +70 -0
  212. data/lib/active_scaffold/version.rb +9 -0
  213. data/lib/active_scaffold.rb +368 -0
  214. data/lib/active_scaffold_env.rb +11 -0
  215. data/lib/generators/active_scaffold/USAGE +29 -0
  216. data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
  217. data/lib/generators/active_scaffold_controller/USAGE +19 -0
  218. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
  219. data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
  220. data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
  221. data/public/blank.html +33 -0
  222. data/shoulda_macros/macros.rb +136 -0
  223. data/test/bridges/active_scaffold_dependent_protect_test.rb +34 -0
  224. data/test/bridges/bridge_test.rb +90 -0
  225. data/test/bridges/company.rb +81 -0
  226. data/test/bridges/paperclip_test.rb +68 -0
  227. data/test/bridges/tiny_mce_test.rb +27 -0
  228. data/test/bridges/unobtrusive_date_picker_test.rb +49 -0
  229. data/test/bridges/validation_reflection_test.rb +57 -0
  230. data/test/config/base_test.rb +15 -0
  231. data/test/config/core_test.rb +58 -0
  232. data/test/config/create_test.rb +58 -0
  233. data/test/config/delete_test.rb +33 -0
  234. data/test/config/field_search_test.rb +47 -0
  235. data/test/config/list_test.rb +129 -0
  236. data/test/config/nested_test.rb +62 -0
  237. data/test/config/search_test.rb +60 -0
  238. data/test/config/show_test.rb +43 -0
  239. data/test/config/subform_test.rb +17 -0
  240. data/test/config/update_test.rb +40 -0
  241. data/test/const_mocker.rb +36 -0
  242. data/test/data_structures/action_columns_test.rb +113 -0
  243. data/test/data_structures/action_link_test.rb +78 -0
  244. data/test/data_structures/action_links_test.rb +78 -0
  245. data/test/data_structures/actions_test.rb +25 -0
  246. data/test/data_structures/association_column_test.rb +42 -0
  247. data/test/data_structures/column_test.rb +185 -0
  248. data/test/data_structures/columns_test.rb +69 -0
  249. data/test/data_structures/error_message_test.rb +28 -0
  250. data/test/data_structures/set_test.rb +86 -0
  251. data/test/data_structures/sorting_test.rb +126 -0
  252. data/test/data_structures/standard_column_test.rb +24 -0
  253. data/test/data_structures/virtual_column_test.rb +23 -0
  254. data/test/extensions/active_record_test.rb +45 -0
  255. data/test/extensions/array_test.rb +12 -0
  256. data/test/helpers/form_column_helpers_test.rb +31 -0
  257. data/test/helpers/list_column_helpers_test.rb +42 -0
  258. data/test/helpers/pagination_helpers_test.rb +59 -0
  259. data/test/misc/active_record_permissions_test.rb +154 -0
  260. data/test/misc/attribute_params_test.rb +146 -0
  261. data/test/misc/configurable_test.rb +96 -0
  262. data/test/misc/constraints_test.rb +193 -0
  263. data/test/misc/finder_test.rb +92 -0
  264. data/test/misc/lang_test.rb +11 -0
  265. data/test/mock_app/app/controllers/application_controller.rb +10 -0
  266. data/test/mock_app/app/helpers/application_helper.rb +3 -0
  267. data/test/mock_app/config/boot.rb +110 -0
  268. data/test/mock_app/config/database.yml +16 -0
  269. data/test/mock_app/config/environment.rb +43 -0
  270. data/test/mock_app/config/environments/development.rb +17 -0
  271. data/test/mock_app/config/environments/production.rb +28 -0
  272. data/test/mock_app/config/environments/test.rb +28 -0
  273. data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
  274. data/test/mock_app/config/initializers/inflections.rb +10 -0
  275. data/test/mock_app/config/initializers/mime_types.rb +5 -0
  276. data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
  277. data/test/mock_app/config/initializers/session_store.rb +15 -0
  278. data/test/mock_app/config/locales/en.yml +5 -0
  279. data/test/mock_app/config/routes.rb +43 -0
  280. data/test/mock_app/db/test.sqlite3 +1 -0
  281. data/test/mock_app/public/blank.html +33 -0
  282. data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
  283. data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
  284. data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
  285. data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
  286. data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
  287. data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
  288. data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
  289. data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
  290. data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
  291. data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
  292. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
  293. data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
  294. data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
  295. data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
  296. data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
  297. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
  298. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +848 -0
  299. data/test/model_stub.rb +55 -0
  300. data/test/run_all.rb +8 -0
  301. data/test/test_helper.rb +39 -0
  302. data/vendor/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  303. data/vendor/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  304. data/vendor/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
  305. data/vendor/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  306. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  307. data/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  308. data/vendor/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  309. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  310. data/vendor/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  311. data/vendor/assets/images/ui-icons_222222_256x240.png +0 -0
  312. data/vendor/assets/images/ui-icons_228ef1_256x240.png +0 -0
  313. data/vendor/assets/images/ui-icons_ef8c08_256x240.png +0 -0
  314. data/vendor/assets/images/ui-icons_ffd27a_256x240.png +0 -0
  315. data/vendor/assets/images/ui-icons_ffffff_256x240.png +0 -0
  316. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +1276 -0
  317. data/vendor/assets/stylesheets/jquery-ui.css +568 -0
  318. metadata +502 -0
@@ -0,0 +1,50 @@
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_name(column, class_prefix = false)
29
+ "#{clean_class_name(column.active_record_class.name) + '_' if class_prefix}#{clean_column_name(column.name)}_show_column"
30
+ end
31
+
32
+ def show_column_override(column)
33
+ method_with_class = show_column_override_name(column, true)
34
+ return method_with_class if respond_to?(method_with_class)
35
+ method = show_column_override_name(column)
36
+ method if respond_to?(method)
37
+ end
38
+ alias_method :show_column_override?, :show_column_override
39
+
40
+ def override_show_column_ui?(list_ui)
41
+ respond_to?(override_show_column_ui(list_ui))
42
+ end
43
+
44
+ # the naming convention for overriding show types with helpers
45
+ def override_show_column_ui(list_ui)
46
+ "active_scaffold_show_#{list_ui}"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,342 @@
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::HumanConditionHelpers
14
+
15
+ ##
16
+ ## Delegates
17
+ ##
18
+
19
+ # access to the configuration variable
20
+ def active_scaffold_config
21
+ controller.class.active_scaffold_config
22
+ end
23
+
24
+ def active_scaffold_config_for(*args)
25
+ controller.class.active_scaffold_config_for(*args)
26
+ end
27
+
28
+ def active_scaffold_controller_for(*args)
29
+ controller.class.active_scaffold_controller_for(*args)
30
+ end
31
+
32
+ ##
33
+ ## Uncategorized
34
+ ##
35
+
36
+ def controller_path_for_activerecord(klass)
37
+ begin
38
+ controller = active_scaffold_controller_for(klass)
39
+ controller.controller_path
40
+ rescue ActiveScaffold::ControllerNotFound
41
+ controller = nil
42
+ end
43
+ end
44
+
45
+ # This is the template finder logic, keep it updated with however we find stuff in rails
46
+ # currently this very similar to the logic in ActionBase::Base.render for options file
47
+ def template_exists?(template_name, partial = false)
48
+ lookup_context.exists? template_name, '', partial
49
+ end
50
+
51
+ def generate_temporary_id
52
+ (Time.now.to_f*1000).to_i.to_s
53
+ end
54
+
55
+ # Turns [[label, value]] into <option> tags
56
+ # Takes optional parameter of :include_blank
57
+ def option_tags_for(select_options, options = {})
58
+ select_options.insert(0,[as_(:_select_),nil]) if options[:include_blank]
59
+ select_options.collect do |option|
60
+ label, value = option[0], option[1]
61
+ value.nil? ? "<option value="">#{label}</option>" : "<option value=\"#{value}\">#{label}</option>"
62
+ end
63
+ end
64
+
65
+ # Should this column be displayed in the subform?
66
+ def in_subform?(column, parent_record)
67
+ # A column shouldn't be in the subform if it's the reverse association to the parent
68
+ not (column.association and column.association.associated_class == parent_record.class)
69
+ end
70
+
71
+ def form_remote_upload_tag(url_for_options = {}, options = {})
72
+ options[:target] = action_iframe_id(url_for_options)
73
+ options[:multipart] ||= true
74
+ options[:class] = "#{options[:class]} as_remote_upload".strip
75
+ output=""
76
+ output << form_tag(url_for_options, options)
77
+ (output << "<iframe id='#{action_iframe_id(url_for_options)}' name='#{action_iframe_id(url_for_options)}' style='display:none'></iframe>").html_safe
78
+ end
79
+
80
+ # a general-use loading indicator (the "stuff is happening, please wait" feedback)
81
+ def loading_indicator_tag(options)
82
+ image_tag(active_scaffold_config.class.asset_path('indicator.gif'), :style => "visibility:hidden;", :id => loading_indicator_id(options), :alt => "loading indicator", :class => "loading-indicator")
83
+ end
84
+
85
+ # Creates a javascript-based link that toggles the visibility of some element on the page.
86
+ # 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")'.
87
+ # You may also flag whether the other element is visible by default or not, and the initial text will adjust accordingly.
88
+ def link_to_visibility_toggle(id, options = {})
89
+ options[:default_visible] = true if options[:default_visible].nil?
90
+ options[:hide_label] = as_(:hide)
91
+ options[:show_label] = as_(:show)
92
+ javascript_tag("ActiveScaffold.create_visibility_toggle('#{id}', #{options.to_json});")
93
+ end
94
+
95
+ def skip_action_link(link, *args)
96
+ (!link.ignore_method.nil? && controller.respond_to?(link.ignore_method) && controller.send(link.ignore_method, *args)) || ((link.security_method_set? or controller.respond_to? link.security_method) and !controller.send(link.security_method, *args))
97
+ end
98
+
99
+ def render_action_link(link, url_options, record = nil, html_options = {})
100
+ url_options = action_link_url_options(link, url_options, record)
101
+ html_options = action_link_html_options(link, url_options, record, html_options)
102
+ action_link_html(link, url_options, html_options, record)
103
+ end
104
+
105
+ def render_group_action_link(link, url_options, options, record = nil)
106
+ if link.type == :member && !options[:authorized]
107
+ action_link_html(link, nil, {:class => "disabled #{link.action}#{link.html_options[:class].blank? ? '' : (' ' + link.html_options[:class])}"}, record)
108
+ else
109
+ render_action_link(link, url_options, record)
110
+ end
111
+ end
112
+
113
+ def action_link_url_options(link, url_options, record, options = {})
114
+ url_options = url_options.clone
115
+ url_options[:action] = link.action
116
+ url_options[:controller] = link.controller.to_s if link.controller
117
+ url_options.delete(:search) if link.controller and link.controller.to_s != params[:controller]
118
+ url_options.merge! link.parameters if link.parameters
119
+ @link_record = record
120
+ url_options.merge! self.instance_eval(&(link.dynamic_parameters)) if link.dynamic_parameters.is_a?(Proc)
121
+ @link_record = nil
122
+ url_options_for_nested_link(link.column, record, link, url_options, options) if link.nested_link?
123
+ url_options_for_sti_link(link.column, record, link, url_options, options) unless record.nil? || active_scaffold_config.sti_children.nil?
124
+ url_options[:_method] = link.method if !link.confirm? && link.inline? && link.method != :get
125
+ url_options
126
+ end
127
+
128
+ def action_link_html_options(link, url_options, record, html_options)
129
+ link_id = get_action_link_id(url_options, record, link.column)
130
+ html_options.reverse_merge! link.html_options.merge(:class => link.action.to_s)
131
+
132
+ # Needs to be in html_options to as the adding _method to the url is no longer supported by Rails
133
+ html_options[:method] = link.method if link.method != :get
134
+
135
+ html_options[:class] += ' as_action' if link.inline?
136
+ html_options[:data] = {}
137
+ html_options[:data][:confirm] = link.confirm(record.try(:to_label)) if link.confirm?
138
+ html_options[:data][:position] = link.position if link.position and link.inline?
139
+ html_options[:data][:action] = link.action if link.inline?
140
+ if link.popup?
141
+ html_options[:data][:popup] = true
142
+ html_options[:target] = '_blank'
143
+ end
144
+ html_options[:id] = link_id
145
+ html_options[:remote] = true unless link.page? || link.popup?
146
+ if link.dhtml_confirm?
147
+ html_options[:class] += ' as_action' if !link.inline?
148
+ html_options[:page_link] = 'true' if !link.inline?
149
+ html_options[:dhtml_confirm] = link.dhtml_confirm.value
150
+ html_options[:onclick] = link.dhtml_confirm.onclick_function(controller, link_id)
151
+ end
152
+ html_options[:class] += " #{link.html_options[:class]}" unless link.html_options[:class].blank?
153
+ html_options
154
+ end
155
+
156
+ def get_action_link_id(url_options, record = nil, column = nil)
157
+ id = url_options[:id] || url_options[:parent_id]
158
+ id = "#{column.association[:name]}-#{record.id}" if column && column.plural_association?
159
+ if record.try(column.association[:name]).present?
160
+ id = "#{column.association[:name]}-#{record.send(column.association[:name]).id}-#{record.id}"
161
+ else
162
+ id = "#{column.association[:name]}-#{record.id}" unless record.nil?
163
+ end if column && column.singular_association?
164
+ id = "#{id}-#{url_options[:batch_scope].downcase}" if url_options[:batch_scope]
165
+ action_id = "#{id_from_controller(url_options[:controller]) + '-' if url_options[:parent_controller]}#{url_options[:action].to_s}"
166
+ action_link_id(action_id, id)
167
+ end
168
+
169
+ def action_link_html(link, url, html_options, record)
170
+ # issue 260, use url_options[:link] if it exists. This prevents DB data from being localized.
171
+ label = url.delete(:link) if url.is_a?(Hash)
172
+ label ||= link.label
173
+ if link.image.nil?
174
+ html = link_to(label, url, html_options)
175
+ else
176
+ html = link_to(image_tag(link.image[:name] , :size => link.image[:size], :alt => label), url, html_options)
177
+ end
178
+ # if url is nil we would like to generate an anchor without href attribute
179
+ url.nil? ? html.sub(/href=".*?"/, '').html_safe : html.html_safe
180
+ end
181
+
182
+ def url_options_for_nested_link(column, record, link, url_options, options = {})
183
+ if column && column.association
184
+ url_options[column.association[:model].name.foreign_key.to_sym] = url_options.delete(:id)
185
+ url_options[:id] = record.send(column.association[:name]).id if column.singular_association? && record.send(column.association[:name]).present?
186
+ elsif link.parameters && link.parameters[:named_scope]
187
+ url_options[active_scaffold_config.model.name.foreign_key.to_sym] = url_options.delete(:id)
188
+ end
189
+ end
190
+
191
+ def url_options_for_sti_link(column, record, link, url_options, options = {})
192
+ #need to find out controller of current record type
193
+ #and set parameters
194
+ # its quite difficult to detect an sti link
195
+ # if link.column.nil? we are sure that it is nt an singular association inline autolink
196
+ # howver that will not work if a sti parent is an singular association inline autolink
197
+ if link.column.nil?
198
+ sti_controller_path = controller_path_for_activerecord(record.class)
199
+ if sti_controller_path
200
+ url_options[:controller] = sti_controller_path
201
+ url_options[:parent_sti] = controller_path
202
+ end
203
+ end
204
+ end
205
+
206
+ def column_class(column, column_value, record)
207
+ classes = []
208
+ classes << "#{column.name}-column"
209
+ if column.css_class.is_a?(Proc)
210
+ css_class = column.css_class.call(column_value, record)
211
+ classes << css_class unless css_class.nil?
212
+ else
213
+ classes << column.css_class
214
+ end unless column.css_class.nil?
215
+
216
+ classes << 'empty' if column_empty? column_value
217
+ classes << 'sorted' if active_scaffold_config.list.user.sorting.sorts_on?(column)
218
+ classes << 'numeric' if column.number?
219
+ classes.join(' ').rstrip
220
+ end
221
+
222
+ def column_heading_class(column, sorting)
223
+ classes = []
224
+ classes << "#{column.name}-column_heading"
225
+ classes << "sorted #{sorting.direction_of(column).downcase}" if sorting.sorts_on? column
226
+ classes << column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc)
227
+ classes.join(' ')
228
+ end
229
+
230
+ def as_main_div_class
231
+ classes = ["active-scaffold", "active-scaffold-#{controller_id}", "#{id_from_controller params[:controller]}-view", "#{active_scaffold_config.theme}-theme"]
232
+ classes << "as_touch" if touch_device?
233
+ classes.join(' ')
234
+ end
235
+
236
+ def column_empty?(column_value)
237
+ empty = column_value.nil?
238
+ empty ||= column_value.blank? if column_value.respond_to? :blank?
239
+ empty ||= ['&nbsp;', active_scaffold_config.list.empty_field_text].include? column_value if String === column_value
240
+ return empty
241
+ end
242
+
243
+ def column_calculation(column)
244
+ unless column.calculate.instance_of? Proc
245
+ conditions = controller.send(:all_conditions)
246
+ includes = active_scaffold_config.list.count_includes
247
+ includes ||= controller.send(:active_scaffold_includes) unless conditions.nil?
248
+ calculation = beginning_of_chain.calculate(column.calculate, column.name, :conditions => conditions,
249
+ :joins => controller.send(:joins_for_collection), :include => includes)
250
+ else
251
+ column.calculate.call(@records)
252
+ end
253
+ end
254
+
255
+ def render_column_calculation(column)
256
+ calculation = column_calculation(column)
257
+ override_formatter = "render_#{column.name}_#{column.calculate.is_a?(Proc) ? :calculate : column.calculate}"
258
+ calculation = send(override_formatter, calculation) if respond_to? override_formatter
259
+
260
+ "#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
261
+ end
262
+
263
+ def column_show_add_existing(column)
264
+ (column.allow_add_existing and options_for_association_count(column.association) > 0)
265
+ end
266
+
267
+ def column_show_add_new(column, associated, record)
268
+ value = column.plural_association? || (column.singular_association? and associated.empty?)
269
+ value = false unless column.association.associated_class.authorized_for?(:crud_type => :create)
270
+ value
271
+ end
272
+
273
+ def clean_column_name(name)
274
+ name.to_s.gsub('?', '')
275
+ end
276
+
277
+ def clean_class_name(name)
278
+ name.underscore.gsub('/', '_')
279
+ end
280
+
281
+ def active_scaffold_error_messages_for(*params)
282
+ options = params.extract_options!.symbolize_keys
283
+ options.reverse_merge!(:container_tag => :div, :list_type => :ul)
284
+
285
+ objects = Array.wrap(options.delete(:object) || params).map do |object|
286
+ object = instance_variable_get("@#{object}") unless object.respond_to?(:to_model)
287
+ object = convert_to_model(object)
288
+
289
+ if object.class.respond_to?(:model_name)
290
+ options[:object_name] ||= object.class.model_name.human.downcase
291
+ end
292
+
293
+ object
294
+ end
295
+
296
+ objects.compact!
297
+ count = objects.inject(0) {|sum, object| sum + object.errors.count }
298
+
299
+ unless count.zero?
300
+ html = {}
301
+ [:id, :class].each do |key|
302
+ if options.include?(key)
303
+ value = options[key]
304
+ html[key] = value unless value.blank?
305
+ else
306
+ html[key] = 'errorExplanation'
307
+ end
308
+ end
309
+ options[:object_name] ||= params.first
310
+
311
+ header_message = if options.include?(:header_message)
312
+ options[:header_message]
313
+ else
314
+ as_('errors.template.header', :count => count, :model => options[:object_name].to_s.gsub('_', ' '))
315
+ end
316
+
317
+ message = options.include?(:message) ? options[:message] : as_('errors.template.body')
318
+
319
+ error_messages = objects.sum do |object|
320
+ object.errors.full_messages.map do |msg|
321
+ options[:list_type] != :br ? content_tag(:li, msg) : msg
322
+ end
323
+ end
324
+ error_messages = if options[:list_type] == :br
325
+ error_messages.join('<br/>').html_safe
326
+ else
327
+ content_tag(options[:list_type], error_messages.join.html_safe)
328
+ end
329
+
330
+ contents = []
331
+ contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
332
+ contents << content_tag(:p, message) unless message.blank?
333
+ contents << error_messages
334
+ contents = contents.join.html_safe
335
+ options[:container_tag] ? content_tag(options[:container_tag], contents, html) : contents
336
+ else
337
+ ''
338
+ end
339
+ end
340
+ end
341
+ end
342
+ end
@@ -0,0 +1,38 @@
1
+ module ActiveScaffold
2
+ module MarkedModel
3
+ # This is a module aimed at making the make session_stored marked_records available to ActiveRecord models
4
+
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.scope :marked, lambda {{:conditions => {:id => base.marked_records.to_a}}}
8
+ end
9
+
10
+ def marked
11
+ marked_records.include?(self.id)
12
+ end
13
+
14
+ def marked=(value)
15
+ value = [true, 'true', 1, '1', 'T', 't'].include?(value.class == String ? value.downcase : value)
16
+ if value == true
17
+ marked_records << self.id if !marked
18
+ else
19
+ marked_records.delete(self.id)
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def marked_records
25
+ Thread.current[:marked_records] ||= Set.new
26
+ end
27
+
28
+ def marked_records=(marked)
29
+ Thread.current[:marked_records] = marked
30
+ end
31
+ end
32
+
33
+ # Instance-level access to the marked_records
34
+ def marked_records
35
+ self.class.marked_records
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,136 @@
1
+ require 'forwardable'
2
+
3
+ class ActiveScaffold::Paginator
4
+
5
+ VERSION = '1.0.9'
6
+
7
+ class ArgumentError < ::ArgumentError; end
8
+ class MissingCountError < ArgumentError; end
9
+ class MissingSelectError < ArgumentError; end
10
+
11
+ attr_reader :per_page, :count
12
+
13
+ # Instantiate a new Paginator object
14
+ #
15
+ # Provide:
16
+ # * A total count of the number of objects to paginate
17
+ # * The number of objects in each page
18
+ # * A block that returns the array of items
19
+ # * The block is passed the item offset
20
+ # (and the number of items to show per page, for
21
+ # convenience, if the arity is 2)
22
+ def initialize(count, per_page, &select)
23
+ @count, @per_page = count, per_page
24
+ unless select
25
+ raise MissingSelectError, "Must provide block to select data for each page"
26
+ end
27
+ @select = select
28
+ end
29
+
30
+ # Total number of pages
31
+ def number_of_pages
32
+ (@count / @per_page).to_i + (@count % @per_page > 0 ? 1 : 0)
33
+ end
34
+
35
+ # First page object
36
+ def first
37
+ page 1
38
+ end
39
+
40
+ # Last page object
41
+ def last
42
+ page number_of_pages
43
+ end
44
+
45
+ # Iterate through pages
46
+ def each
47
+ each_with_index do |item, index|
48
+ yield item
49
+ end
50
+ end
51
+
52
+ # Iterate through pages with indices
53
+ def each_with_index
54
+ 1.upto(number_of_pages) do |number|
55
+ yield(page(number), number - 1)
56
+ end
57
+ end
58
+
59
+ # Retrieve page object by number
60
+ def page(number)
61
+ number = (n = number.to_i) > 0 ? n : 1
62
+ Page.new(self, number, lambda {
63
+ offset = (number - 1) * @per_page
64
+ args = [offset]
65
+ args << @per_page if @select.arity == 2
66
+ @select.call(*args)
67
+ })
68
+ end
69
+
70
+ # Page object
71
+ #
72
+ # Retrieves items for a page and provides metadata about the position
73
+ # of the page in the paginator
74
+ class Page
75
+
76
+ extend Forwardable
77
+ def_delegator :@pager, :first, :first
78
+ def_delegator :@pager, :last, :last
79
+ def_delegator :items, :each
80
+ def_delegator :items, :each_with_index
81
+
82
+ attr_reader :number, :pager
83
+
84
+ def initialize(pager, number, select) #:nodoc:
85
+ @pager, @number = pager, number
86
+ @offset = (number - 1) * pager.per_page
87
+ @select = select
88
+ end
89
+
90
+ # Retrieve the items for this page
91
+ # * Caches
92
+ def items
93
+ @items ||= @select.call
94
+ end
95
+
96
+ # Checks to see if there's a page before this one
97
+ def prev?
98
+ @number > 1
99
+ end
100
+
101
+ # Get previous page (if possible)
102
+ def prev
103
+ @pager.page(@number - 1) if prev?
104
+ end
105
+
106
+ # Checks to see if there's a page after this one
107
+ def next?
108
+ @number < @pager.number_of_pages
109
+ end
110
+
111
+ # Get next page (if possible)
112
+ def next
113
+ @pager.page(@number + 1) if next?
114
+ end
115
+
116
+ # The "item number" of the first item on this page
117
+ def first_item_number
118
+ 1 + @offset
119
+ end
120
+
121
+ # The "item number" of the last item on this page
122
+ def last_item_number
123
+ if next?
124
+ @offset + @pager.per_page
125
+ else
126
+ @pager.count
127
+ end
128
+ end
129
+
130
+ def ==(other) #:nodoc:
131
+ @pager == other.pager && self.number == other.number
132
+ end
133
+
134
+ end
135
+
136
+ end
@@ -0,0 +1,70 @@
1
+ # Copyright (c) 2006 Sean Treadway
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+
23
+ # Module containing the methods useful for child IFRAME to parent window communication
24
+ module ActiveScaffold::RespondsToParent
25
+
26
+ # Executes the response body as JavaScript in the context of the parent window.
27
+ # Use this method of you are posting a form to a hidden IFRAME or if you would like
28
+ # to use IFRAME base RPC.
29
+ def responds_to_parent(&block)
30
+ yield
31
+
32
+ if performed?
33
+ # We're returning HTML instead of JS or XML now
34
+ response.headers['Content-Type'] = 'text/html; charset=UTF-8'
35
+
36
+ # Either pull out a redirect or the request body
37
+ script = if response.headers['Location']
38
+ #TODO: erase_redirect_results is missing in rails 3.0 has to be implemented
39
+ #erase redirect
40
+ "document.location.href = #{location.to_s.inspect}"
41
+ else
42
+ response.body
43
+ end
44
+
45
+ # Escape quotes, linebreaks and slashes, maintaining previously escaped slashes
46
+ # Suggestions for improvement?
47
+ script = (script || '').
48
+ gsub('\\', '\\\\\\').
49
+ gsub(/\r\n|\r|\n/, '\\n').
50
+ gsub(/['"]/, '\\\\\&').
51
+ gsub('</script>','</scr"+"ipt>')
52
+
53
+ # Clear out the previous render to prevent double render
54
+ response.request.env['action_controller.instance'].instance_variable_set(:@_response_body, nil)
55
+
56
+ # Eval in parent scope and replace document location of this frame
57
+ # so back button doesn't replay action on targeted forms
58
+ # loc = document.location to be set after parent is updated for IE
59
+ # with(window.parent) - pull in variables from parent window
60
+ # setTimeout - scope the execution in the windows parent for safari
61
+ # window.eval - legal eval for Opera
62
+ render :text => "<html><body><script type='text/javascript' charset='utf-8'>
63
+ var loc = document.location;
64
+ with(window.parent) { setTimeout(function() { window.eval('#{script}'); if (typeof(loc) !== 'undefined') loc.replace('about:blank'); }, 1) };
65
+ </script></body></html>".html_safe
66
+ end
67
+ end
68
+ alias respond_to_parent responds_to_parent
69
+ end
70
+
@@ -0,0 +1,9 @@
1
+ module ActiveScaffold
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 3
5
+ PATCH = 0
6
+
7
+ STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end