active_scaffold 3.7.12 → 4.0.0.rc1

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 (303) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +9 -23
  3. data/README.md +3 -2
  4. data/app/assets/config/active_scaffold_manifest.js +3 -0
  5. data/app/assets/javascripts/active_scaffold.js.erb +24 -34
  6. data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
  7. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
  8. data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
  9. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
  10. data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
  11. data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
  12. data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
  13. data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
  14. data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
  15. data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
  16. data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
  17. data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
  18. data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
  19. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
  20. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
  21. data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
  22. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
  23. data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
  24. data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
  25. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
  26. data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
  27. data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
  28. data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
  29. data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
  30. data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
  31. data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
  32. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
  33. data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
  34. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
  35. data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
  36. data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
  37. data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
  38. data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
  39. data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
  40. data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
  41. data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
  42. data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
  43. data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
  44. data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
  45. data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
  46. data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
  47. data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
  48. data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
  49. data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
  50. data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
  51. data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
  52. data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
  53. data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
  54. data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
  55. data/app/views/active_scaffold_overrides/create.html.erb +1 -1
  56. data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
  57. data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
  58. data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
  59. data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
  60. data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
  61. data/app/views/active_scaffold_overrides/list.html.erb +1 -1
  62. data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
  63. data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
  64. data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
  65. data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
  66. data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
  67. data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
  68. data/app/views/active_scaffold_overrides/row.js.erb +2 -2
  69. data/app/views/active_scaffold_overrides/search.html.erb +1 -1
  70. data/app/views/active_scaffold_overrides/show.html.erb +3 -3
  71. data/app/views/active_scaffold_overrides/update.html.erb +2 -2
  72. data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
  73. data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
  74. data/lib/active_scaffold/actions/common_search.rb +5 -3
  75. data/lib/active_scaffold/actions/core.rb +57 -32
  76. data/lib/active_scaffold/actions/create.rb +19 -17
  77. data/lib/active_scaffold/actions/delete.rb +10 -12
  78. data/lib/active_scaffold/actions/field_search.rb +28 -13
  79. data/lib/active_scaffold/actions/list.rb +34 -34
  80. data/lib/active_scaffold/actions/mark.rb +5 -5
  81. data/lib/active_scaffold/actions/nested.rb +64 -56
  82. data/lib/active_scaffold/actions/search.rb +2 -2
  83. data/lib/active_scaffold/actions/show.rb +5 -5
  84. data/lib/active_scaffold/actions/subform.rb +15 -4
  85. data/lib/active_scaffold/actions/update.rb +20 -20
  86. data/lib/active_scaffold/active_record_permissions.rb +4 -3
  87. data/lib/active_scaffold/attribute_params.rb +51 -50
  88. data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
  89. data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
  90. data/lib/active_scaffold/bridges/active_storage.rb +1 -1
  91. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
  92. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
  93. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  94. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
  95. data/lib/active_scaffold/bridges/cancan.rb +8 -8
  96. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
  97. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
  98. data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
  99. data/lib/active_scaffold/bridges/chosen.rb +1 -5
  100. data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
  101. data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
  102. data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
  103. data/lib/active_scaffold/bridges/date_picker.rb +1 -4
  104. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
  105. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
  106. data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
  107. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
  108. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
  109. data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
  110. data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
  111. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
  112. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
  113. data/lib/active_scaffold/bridges/file_column.rb +1 -0
  114. data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
  115. data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
  116. data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
  117. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
  118. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
  119. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
  120. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
  121. data/lib/active_scaffold/bridges/paperclip.rb +2 -1
  122. data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
  123. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
  124. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
  125. data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
  126. data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
  127. data/lib/active_scaffold/bridges.rb +7 -5
  128. data/lib/active_scaffold/config/base.rb +20 -24
  129. data/lib/active_scaffold/config/core.rb +27 -39
  130. data/lib/active_scaffold/config/create.rb +1 -1
  131. data/lib/active_scaffold/config/delete.rb +9 -9
  132. data/lib/active_scaffold/config/field_search.rb +4 -9
  133. data/lib/active_scaffold/config/form.rb +3 -1
  134. data/lib/active_scaffold/config/list.rb +19 -15
  135. data/lib/active_scaffold/config/nested.rb +2 -2
  136. data/lib/active_scaffold/config/search.rb +5 -5
  137. data/lib/active_scaffold/config/show.rb +1 -1
  138. data/lib/active_scaffold/config/subform.rb +1 -1
  139. data/lib/active_scaffold/config/update.rb +4 -5
  140. data/lib/active_scaffold/configurable.rb +2 -1
  141. data/lib/active_scaffold/constraints.rb +16 -11
  142. data/lib/active_scaffold/core.rb +25 -27
  143. data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
  144. data/lib/active_scaffold/data_structures/action_link.rb +19 -9
  145. data/lib/active_scaffold/data_structures/action_links.rb +20 -26
  146. data/lib/active_scaffold/data_structures/actions.rb +3 -3
  147. data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
  148. data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
  149. data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
  150. data/lib/active_scaffold/data_structures/column.rb +368 -327
  151. data/lib/active_scaffold/data_structures/columns.rb +3 -2
  152. data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
  153. data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
  154. data/lib/active_scaffold/data_structures/set.rb +7 -4
  155. data/lib/active_scaffold/data_structures/sorting.rb +21 -12
  156. data/lib/active_scaffold/engine.rb +12 -12
  157. data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
  158. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
  159. data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
  160. data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
  161. data/lib/active_scaffold/extensions/localize.rb +2 -2
  162. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
  163. data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
  164. data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
  165. data/lib/active_scaffold/finder.rb +71 -78
  166. data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
  167. data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
  168. data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
  169. data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
  170. data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
  171. data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
  172. data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
  173. data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
  174. data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
  175. data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
  176. data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
  177. data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
  178. data/lib/active_scaffold/marked_model.rb +1 -2
  179. data/lib/active_scaffold/orm_checks.rb +6 -4
  180. data/lib/active_scaffold/paginator.rb +3 -2
  181. data/lib/active_scaffold/registry.rb +5 -0
  182. data/lib/active_scaffold/tableless.rb +24 -14
  183. data/lib/active_scaffold/version.rb +4 -4
  184. data/lib/active_scaffold.rb +8 -34
  185. data/lib/generators/active_scaffold/controller_generator.rb +20 -20
  186. data/lib/generators/active_scaffold/install_generator.rb +4 -8
  187. data/lib/generators/active_scaffold/resource_generator.rb +31 -31
  188. data/lib/tasks/brakeman.rake +1 -1
  189. data/shoulda_macros/macros.rb +14 -14
  190. metadata +11 -232
  191. data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
  192. data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
  193. data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
  194. data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
  195. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
  196. data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
  197. data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
  198. data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
  199. data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
  200. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
  201. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
  202. data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
  203. data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
  204. data/test/active_scaffold_config_mock.rb +0 -33
  205. data/test/bridges/bridge_test.rb +0 -88
  206. data/test/bridges/date_picker_test.rb +0 -31
  207. data/test/bridges/paper_trail_test.rb +0 -16
  208. data/test/bridges/paperclip_test.rb +0 -85
  209. data/test/bridges/tiny_mce_test.rb +0 -61
  210. data/test/class_with_finder.rb +0 -42
  211. data/test/company.rb +0 -97
  212. data/test/config/base_test.rb +0 -17
  213. data/test/config/core_test.rb +0 -66
  214. data/test/config/create_test.rb +0 -72
  215. data/test/config/delete_test.rb +0 -35
  216. data/test/config/field_search_test.rb +0 -49
  217. data/test/config/list_test.rb +0 -134
  218. data/test/config/nested_test.rb +0 -55
  219. data/test/config/search_test.rb +0 -62
  220. data/test/config/show_test.rb +0 -45
  221. data/test/config/subform_test.rb +0 -19
  222. data/test/config/update_test.rb +0 -52
  223. data/test/const_mocker.rb +0 -32
  224. data/test/data_structures/action_columns_test.rb +0 -112
  225. data/test/data_structures/action_link_test.rb +0 -79
  226. data/test/data_structures/action_links_test.rb +0 -78
  227. data/test/data_structures/actions_test.rb +0 -25
  228. data/test/data_structures/association_column_test.rb +0 -41
  229. data/test/data_structures/column_test.rb +0 -186
  230. data/test/data_structures/columns_test.rb +0 -68
  231. data/test/data_structures/set_test.rb +0 -84
  232. data/test/data_structures/sorting_test.rb +0 -148
  233. data/test/data_structures/standard_column_test.rb +0 -23
  234. data/test/data_structures/validation_reflection_test.rb +0 -69
  235. data/test/data_structures/virtual_column_test.rb +0 -23
  236. data/test/extensions/action_view_rendering_test.rb +0 -20
  237. data/test/extensions/active_record_test.rb +0 -44
  238. data/test/extensions/routing_mapper_test.rb +0 -73
  239. data/test/helpers/form_column_helpers_test.rb +0 -34
  240. data/test/helpers/list_column_helpers_test.rb +0 -53
  241. data/test/helpers/pagination_helpers_test.rb +0 -65
  242. data/test/helpers/search_column_helpers_test.rb +0 -15
  243. data/test/misc/active_record_permissions_test.rb +0 -193
  244. data/test/misc/attribute_params_test.rb +0 -460
  245. data/test/misc/calculation_test.rb +0 -39
  246. data/test/misc/configurable_test.rb +0 -97
  247. data/test/misc/constraints_test.rb +0 -209
  248. data/test/misc/convert_numbers_format_test.rb +0 -171
  249. data/test/misc/finder_test.rb +0 -124
  250. data/test/misc/lang_test.rb +0 -10
  251. data/test/misc/parse_datetime_test.rb +0 -159
  252. data/test/misc/render_test.rb +0 -9
  253. data/test/misc/tableless_test.rb +0 -56
  254. data/test/mock_app/.gitignore +0 -2
  255. data/test/mock_app/Rakefile +0 -7
  256. data/test/mock_app/app/assets/config/manifest.js +0 -0
  257. data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
  258. data/test/mock_app/app/controllers/application_controller.rb +0 -10
  259. data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
  260. data/test/mock_app/app/controllers/cars_controller.rb +0 -5
  261. data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
  262. data/test/mock_app/app/controllers/floors_controller.rb +0 -6
  263. data/test/mock_app/app/controllers/people_controller.rb +0 -8
  264. data/test/mock_app/app/controllers/roles_controller.rb +0 -4
  265. data/test/mock_app/app/helpers/application_helper.rb +0 -3
  266. data/test/mock_app/app/models/address.rb +0 -3
  267. data/test/mock_app/app/models/building.rb +0 -9
  268. data/test/mock_app/app/models/car.rb +0 -3
  269. data/test/mock_app/app/models/contact.rb +0 -3
  270. data/test/mock_app/app/models/file_model.rb +0 -31
  271. data/test/mock_app/app/models/floor.rb +0 -8
  272. data/test/mock_app/app/models/person.rb +0 -12
  273. data/test/mock_app/app/models/role.rb +0 -3
  274. data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
  275. data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
  276. data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
  277. data/test/mock_app/app/views/people/_form.html.erb +0 -2
  278. data/test/mock_app/app/views/people/list.html.erb +0 -2
  279. data/test/mock_app/config/application.rb +0 -14
  280. data/test/mock_app/config/boot.rb +0 -7
  281. data/test/mock_app/config/database.yml +0 -16
  282. data/test/mock_app/config/environment.rb +0 -6
  283. data/test/mock_app/config/environments/development.rb +0 -24
  284. data/test/mock_app/config/environments/production.rb +0 -49
  285. data/test/mock_app/config/environments/test.rb +0 -34
  286. data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
  287. data/test/mock_app/config/initializers/inflections.rb +0 -10
  288. data/test/mock_app/config/initializers/mime_types.rb +0 -5
  289. data/test/mock_app/config/initializers/secret_token.rb +0 -11
  290. data/test/mock_app/config/initializers/session_store.rb +0 -8
  291. data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
  292. data/test/mock_app/config/locales/en.yml +0 -5
  293. data/test/mock_app/config/routes.rb +0 -17
  294. data/test/mock_app/config.ru +0 -4
  295. data/test/mock_app/db/schema.rb +0 -68
  296. data/test/mock_app/db/test.sqlite3 +0 -1
  297. data/test/model_stub.rb +0 -64
  298. data/test/performance/list_cars_performance_test.rb +0 -34
  299. data/test/performance/list_people_performance_test.rb +0 -31
  300. data/test/performance_test_help.rb +0 -3
  301. data/test/run_all.rb +0 -6
  302. data/test/test_helper.rb +0 -71
  303. data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -1,117 +0,0 @@
1
-
2
- // TODO Change to dropping the name property off the input element when in example mode
3
- TextFieldWithExample = Class.create();
4
- TextFieldWithExample.prototype = {
5
- initialize: function(inputElementId, defaultText, options) {
6
- this.setOptions(options);
7
-
8
- this.input = $(inputElementId);
9
- this.name = this.input.name;
10
- this.defaultText = defaultText;
11
- this.createHiddenInput();
12
-
13
- if (options.focus) this.input.focus();
14
- this.checkAndShowExample();
15
- if (options.focus) {
16
- this.input.selectionStart = 0;
17
- this.input.selectionEnd = 0;
18
- }
19
-
20
- Event.observe(this.input, "blur", this.onBlur.bindAsEventListener(this));
21
- Event.observe(this.input, "focus", this.onFocus.bindAsEventListener(this));
22
- Event.observe(this.input, "select", this.onFocus.bindAsEventListener(this));
23
- Event.observe(this.input, "keydown", this.onKeyPress.bindAsEventListener(this));
24
- Event.observe(this.input, "click", this.onClick.bindAsEventListener(this));
25
- },
26
- createHiddenInput: function() {
27
- this.hiddenInput = document.createElement("input");
28
- this.hiddenInput.type = "hidden";
29
- this.hiddenInput.value = "";
30
- this.input.parentNode.appendChild(this.hiddenInput);
31
- },
32
- setOptions: function(options) {
33
- this.options = { exampleClassName: 'example' };
34
- Object.extend(this.options, options || {});
35
- },
36
- onKeyPress: function(event) {
37
- if (!event) var event = window.event;
38
- var code = (event.which) ? event.which : event.keyCode
39
- if (this.isAlphanumeric(code)) {
40
- this.removeExample();
41
- }
42
- },
43
- onBlur: function(event) {
44
- this.checkAndShowExample();
45
- },
46
- onFocus: function(event) {
47
- this.removeExample();
48
- },
49
- onClick: function(event) {
50
- this.removeExample();
51
- },
52
- isAlphanumeric: function(keyCode) {
53
- return keyCode >= 40 && keyCode <= 90;
54
- },
55
- checkAndShowExample: function() {
56
- if (this.input.value == '') {
57
- this.input.value = this.defaultText;
58
- this.input.name = null;
59
- this.hiddenInput.name = this.name;
60
- Element.addClassName(this.input, this.options.exampleClassName);
61
- }
62
- },
63
- removeExample: function() {
64
- if (this.exampleShown()) {
65
- this.input.value = '';
66
- this.input.name = this.name;
67
- this.hiddenInput.name = null;
68
- Element.removeClassName(this.input, this.options.exampleClassName);
69
- }
70
- },
71
- exampleShown: function() {
72
- return Element.hasClassName(this.input, this.options.exampleClassName);
73
- }
74
- }
75
-
76
- Form.disable = function(form) {
77
- var elements = this.getElements(form);
78
- for (var i = 0; i < elements.length; i++) {
79
- var element = elements[i];
80
- try { element.blur(); } catch (e) {}
81
- element.disabled = 'disabled';
82
- Element.addClassName(element, 'disabled');
83
- }
84
- }
85
- Form.enable = function(form) {
86
- var elements = this.getElements(form);
87
- for (var i = 0; i < elements.length; i++) {
88
- var element = elements[i];
89
- element.disabled = '';
90
- Element.removeClassName(element, 'disabled');
91
- }
92
- }
93
-
94
- DraggableLists = Class.create({
95
- initialize: function(list) {
96
- list = $(list).addClassName('draggable-list');
97
- var list_selected = list.cloneNode(false).addClassName('selected');
98
- list_selected.id += '_seleted';
99
- list.select('input[type=checkbox]').each(function(item) {
100
- var li = item.up('li');
101
- li.down('label').htmlFor = null;
102
- new Draggable(li, {revert: 'failure', ghosting: true});
103
- if (item.checked) list_selected.insert(li.remove());
104
- });
105
- list.insert({after: list_selected});
106
- Droppables.add(list, {hoverclass: 'hover', containment: list_selected.id, onDrop: this.drop_to_list});
107
- Droppables.add(list_selected, {hoverclass: 'hover', containment: list.id, onDrop: this.drop_to_list});
108
- list.undoPositioned(); // undo positioned to fix dragging from elements with overflow auto
109
- list_selected.undoPositioned();
110
- },
111
-
112
- drop_to_list: function(draggable, droppable, event) {
113
- droppable.insert(draggable.remove());
114
- draggable.setStyle({left: '0px', top: '0px'});
115
- draggable.down('input').checked = droppable.hasClassName('selected');
116
- }
117
- });
@@ -1,17 +0,0 @@
1
- var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
2
- ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
3
- this.adapter.select('textarea.mceEditor').each(function(elem) {
4
- tinymce.remove('#'+elem.id);
5
- });
6
- action_link_close.apply(this);
7
- };
8
- document.on('submit', 'form.as_form', function() {
9
- tinymce.triggerSave();
10
- this.select('textarea.mceEditor').each(function(elem) { tinymce.remove('#'+elem.id); });
11
- });
12
- /* for persistent update forms */
13
- document.on('ajax:complete', 'form.as_form', function(event) {
14
- this.select('textarea.mceEditor').each(function(elem) {
15
- tinyMCE.execCommand('mceAddEditor', false, elem.id);
16
- });
17
- });
@@ -1,8 +0,0 @@
1
- <p class="error-message message server-error" style="display:none;">
2
- <%= as_(:internal_error).html_safe %>
3
- <span class="error-500"><%= as_(:error_500).html_safe %></span>
4
- <a href="#" class="close" title="<%= as_(:close).html_safe %>"><%= as_(:close).html_safe %></a>
5
- </p>
6
- <div id="<%= active_scaffold_messages_id -%>" class="action-messages">
7
- <%= render 'messages' %>
8
- </div>
@@ -1,15 +0,0 @@
1
- <% if render_parent? %>
2
- <% if nested_singular_association? %>
3
- if (action_link) action_link.close(true);
4
- <% elsif params[:parent_sti] && render_parent_action == :row %>
5
- ActiveScaffold.create_record_row_from_url(action_link, '<%= url_for(render_parent_options) %>', <%= {insert_at: insert_at}.to_json.html_safe %>);
6
- <% else %>
7
- ActiveScaffold.reload('<%= url_for render_parent_options %>');
8
- <% end %>
9
- <% elsif active_scaffold_config.create.refresh_list %>
10
- <%= render 'refresh_list', no_history: true %>
11
- <% elsif params[:parent_controller].nil? %>
12
- <% new_row = render list_record_view, record: @saved_record || @record %>
13
- ActiveScaffold.create_record_row(action_link ? action_link.scaffold() : '<%= active_scaffold_id %>', '<%= escape_javascript(new_row) %>', <%= {insert_at: insert_at}.to_json.html_safe %>);
14
- <%= render 'update_calculations' %>
15
- <% end %>
@@ -1,20 +0,0 @@
1
- <%# nested_id, allows us to remove a nested scaffold programmatically %>
2
- <div class="active-scaffold" id="<%= nested_id = element_row_id action: :nested %>">
3
- <% if successful? %>
4
- <div class="<%= "#{params[:action]}-view" if params[:action] %> <%= "#{nested? ? nested.name : id_from_controller(params[:controller])}-view" %> view">
5
- <%= payload -%>
6
- </div>
7
- <% end %>
8
- <%= javascript_tag do %>
9
- setTimeout(function() {
10
- var action_link = ActiveScaffold.ActionLink.get('<%= nested_id %>');
11
- if (action_link) {
12
- action_link.update_flash_messages('<%= escape_javascript(render('messages').strip) %>');
13
- <% unless successful? %>
14
- action_link.close();
15
- ActiveScaffold.scroll_to(action_link.scaffold(), ActiveScaffold.config.scroll_on_close == "checkInViewport");
16
- <% end %>
17
- }
18
- }, 10);
19
- <% end %>
20
- </div>
@@ -1,12 +0,0 @@
1
- <% if always_show_create %>
2
- ActiveScaffold.reset_form('<%= form_selector %>');
3
- <% elsif params[:dont_close] %>
4
- ActiveScaffold.replace('<%= form_selector %>','<%= escape_javascript(render('create_form', xhr: true)) %>');
5
- ActiveScaffold.focus_first_element_of_form('<%= form_selector %>');
6
- <% else %>
7
- if (action_link) action_link.close();
8
- <% end %>
9
- <% if active_scaffold_config.create.action_after_create %>
10
- var link = ActiveScaffold.find_action_link('<%= action_link_id active_scaffold_config.create.action_after_create, @record.id || @saved_record.id %>');
11
- if (link) (function() { link.open() })<%= '.defer' if ActiveScaffold.js_framework == :prototype %>();
12
- <% end %>
@@ -1,58 +0,0 @@
1
- module ActiveScaffold
2
- module Bridges
3
- class CalendarDateSelect
4
- module CalendarDateSelectBridge
5
- def initialize(model_id)
6
- initialize_without_calendar_date_select(model_id)
7
-
8
- calendar_date_select_fields = _columns.collect { |c| c.name.to_sym if %i[date datetime].include?(c.type) }.compact
9
- # check to see if file column was used on the model
10
- return if calendar_date_select_fields.empty?
11
-
12
- # automatically set the forum_ui to a file column
13
- calendar_date_select_fields.each { |field| columns[field].form_ui = :calendar_date_select }
14
- end
15
- end
16
-
17
- # Helpers that assist with the rendering of a Form Column
18
- module FormColumnHelpers
19
- def active_scaffold_input_calendar_date_select(column, options, ui_options: column.options)
20
- options[:class] = "#{options[:class]} text-input".strip
21
- calendar_date_select('record', column.name, options.merge(ui_options))
22
- end
23
- end
24
-
25
- module SearchColumnHelpers
26
- def active_scaffold_search_calendar_date_select_field(column, options, current_search, name, ui_options: column.options)
27
- value =
28
- if current_search.is_a? Hash
29
- controller.class.condition_value_for_datetime(column, current_search[name], column.column_type == :date ? :to_date : :to_time)
30
- else
31
- current_search
32
- end
33
- calendar_date_select(
34
- 'record', column.name,
35
- :name => "#{options[:name]}[#{name}]",
36
- :value => (value ? l(value) : nil),
37
- :class => 'text-input',
38
- :id => "#{options[:id]}_#{name}",
39
- :time => column_datetime?(column) ? true : false,
40
- :style => ('display: none' if options[:show] == false) # hide only if asked to hide
41
- )
42
- end
43
- end
44
- end
45
- end
46
- end
47
-
48
- ActionView::Base.class_eval do
49
- include ActiveScaffold::Bridges::CalendarDateSelect::FormColumnHelpers
50
- alias_method :active_scaffold_search_calendar_date_select, :active_scaffold_search_datetime
51
- alias_method :active_scaffold_human_condition_calendar_date_select, :active_scaffold_human_condition_datetime
52
- include ActiveScaffold::Bridges::CalendarDateSelect::SearchColumnHelpers
53
- end
54
-
55
- ActiveScaffold::Finder::ClassMethods.module_eval do
56
- alias_method :condition_for_calendar_date_select_type, :condition_for_datetime
57
- end
58
- ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::CalendarDateSelect::CalendarDateSelectBridge
@@ -1,17 +0,0 @@
1
- class ActiveScaffold::Bridges::CalendarDateSelect < ActiveScaffold::DataStructures::Bridge
2
- def self.install
3
- require File.join(File.dirname(__FILE__), 'calendar_date_select/as_cds_bridge.rb')
4
- end
5
-
6
- def self.install?
7
- super && ActiveScaffold.js_framework == :prototype
8
- end
9
-
10
- def self.stylesheets
11
- calendar_date_select_stylesheets
12
- end
13
-
14
- def self.javascripts
15
- calendar_date_select_javascripts
16
- end
17
- end
@@ -1,13 +0,0 @@
1
- class ActionLinkSeparator
2
- def initialize(weight)
3
- @weight = weight
4
- end
5
-
6
- attr_reader :weight
7
-
8
- def ==(other)
9
- other == :separator
10
- end
11
-
12
- def name_to_cache; end # :nodoc:
13
- end
@@ -1,102 +0,0 @@
1
- require 'cow_proxy'
2
-
3
- module CowProxy
4
- module ActiveScaffold
5
- module DataStructures
6
- class Column < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::Column)
7
- # readonly and called many times in list action
8
- delegate :name, :cache_key, :delegated_association, :association, to: :__getobj__
9
-
10
- def link
11
- return @link if defined?(@link)
12
- if __getobj__.frozen?
13
- link_var = __getobj__.instance_variable_get(:@link)
14
- if link_var.is_a?(Proc)
15
- @link = link_var.call self
16
- return @link
17
- end
18
- end
19
- super
20
- end
21
- end
22
-
23
- class Set < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::Set)
24
- protected
25
-
26
- # Copy wrapped values to duplicated wrapped object
27
- # @see CowProxy::Base#__copy_on_write__
28
- # @return duplicated wrapped object
29
- def __copy_on_write__(*)
30
- super.tap do
31
- new_set = __getobj__.instance_variable_get(:@set).dup
32
- __getobj__.instance_variable_set(:@set, new_set)
33
- end
34
- end
35
- end
36
-
37
- class ActionColumns < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::ActionColumns)
38
- def each_column(options = {})
39
- __getobj__.each_column(options.reverse_merge(core_columns: action.core.columns)) do |column|
40
- if column.is_a?(::ActiveScaffold::DataStructures::ActionColumns)
41
- yield ::CowProxy.wrap(column).tap { |group| group.action = action }
42
- else
43
- yield column
44
- end
45
- end
46
- end
47
- end
48
-
49
- class ActionLinks < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::ActionLinks)
50
- def method_missing(name, *args, &block)
51
- CowProxy.debug { "method missing #{name} in #{__getobj__.name}" }
52
- return super if name.match?(/[!?]$/)
53
- subgroup =
54
- if _instance_variable_defined?("@#{name}")
55
- _instance_variable_get("@#{name}")
56
- else
57
- __copy_on_write__ if __getobj__.frozen?
58
- group = __getobj__.subgroup(name, args.first)
59
- if group.frozen?
60
- group = __wrap__(group)
61
- else
62
- CowProxy.debug { "created subgroup #{group.name}" }
63
- end
64
- _instance_variable_set("@#{name}", group)
65
- end
66
- yield subgroup if block
67
- subgroup
68
- end
69
-
70
- def respond_to_missing?(name, *)
71
- name !~ /[!?]$/
72
- end
73
-
74
- def each(options = {}, &block)
75
- super(options) do |item|
76
- item = __wrap__(item) || item unless item.is_a?(ActiveScaffold::DataStructures::ActionLinks)
77
- if options[:include_set]
78
- yield item, __getobj__.instance_variable_get(:@set)
79
- else
80
- yield item
81
- end
82
- end
83
- end
84
-
85
- protected
86
-
87
- # Copy wrapped values to duplicated wrapped object
88
- # @see CowProxy::Base#__copy_on_write__
89
- # @return duplicated wrapped object
90
- def __copy_on_write__(*)
91
- index = @parent_proxy.instance_variable_get(:@set).index(__getobj__) if @parent_proxy
92
- super.tap do
93
- CowProxy.debug { "replace #{index} with proxy obj in parent #{@parent_proxy.name}" } if index
94
- @parent_proxy.instance_variable_get(:@set)[index] = self if index
95
- new_set = __getobj__.instance_variable_get(:@set).dup
96
- __getobj__.instance_variable_set(:@set, new_set)
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
@@ -1,33 +0,0 @@
1
- module ActiveScaffoldConfigMock
2
- module ClassMethods
3
- class Config
4
- def active_record?
5
- @type == :active_record
6
- end
7
-
8
- def mongoid?
9
- @type == :mongoid
10
- end
11
-
12
- def initialize(type = :active_record)
13
- @type = type
14
- end
15
-
16
- def primary_key
17
- mongoid? ? '_id' : 'id'
18
- end
19
- end
20
-
21
- def active_scaffold_config
22
- @active_scaffold_config ||= Config.new
23
- end
24
- end
25
-
26
- def self.included(klass)
27
- klass.extend ClassMethods
28
- end
29
-
30
- def active_scaffold_config
31
- self.class.active_scaffold_config
32
- end
33
- end
@@ -1,88 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BridgeTest < Minitest::Test
4
- def setup
5
- @const_store = {}
6
- end
7
-
8
- def teardown; end
9
-
10
- def test__shouldnt_throw_errors
11
- ActiveScaffold::Bridges.run_all
12
- end
13
-
14
- def test__cds_bridge
15
- with_js_framework :prototype do
16
- ConstMocker.mock('CalendarDateSelect') do |cm|
17
- cm.remove
18
- assert(!bridge_will_be_installed('CalendarDateSelect'))
19
- cm.declare
20
- assert(bridge_will_be_installed('CalendarDateSelect'))
21
- end
22
- end
23
- end
24
-
25
- def test__file_column_bridge
26
- ConstMocker.mock('FileColumn') do |cm|
27
- cm.remove
28
- assert(!bridge_will_be_installed('FileColumn'))
29
- cm.declare
30
- assert(bridge_will_be_installed('FileColumn'))
31
- end
32
- end
33
-
34
- def test__paperclip_bridge
35
- ConstMocker.mock('Paperclip') do |cm|
36
- cm.remove
37
- assert(!bridge_will_be_installed('Paperclip'))
38
- cm.declare
39
- assert(bridge_will_be_installed('Paperclip'))
40
- end
41
- end
42
-
43
- def test__date_picker_bridge
44
- ConstMocker.mock('Jquery') do |jquery|
45
- jquery.declare
46
- ConstMocker.mock('Rails', jquery.const) do |rails|
47
- rails.declare
48
- ConstMocker.mock('Ui', jquery.const) do |cm|
49
- cm.remove
50
- assert(!bridge_will_be_installed('DatePicker'))
51
- cm.declare
52
- assert(bridge_will_be_installed('DatePicker'))
53
- end
54
- end
55
- end
56
- ActiveScaffold.js_framework = nil
57
- end
58
-
59
- def test__semantic_attributes_bridge
60
- ConstMocker.mock('SemanticAttributes') do |cm|
61
- cm.remove
62
- assert(!bridge_will_be_installed('SemanticAttributes'))
63
- cm.declare
64
- assert(bridge_will_be_installed('SemanticAttributes'))
65
- end
66
- end
67
-
68
- def test__paper_trail_bridge
69
- ConstMocker.mock('PaperTrail') do |cm|
70
- cm.remove
71
- assert(!bridge_will_be_installed('PaperTrail'))
72
- cm.declare
73
- assert(bridge_will_be_installed('PaperTrail'))
74
- end
75
- end
76
-
77
- protected
78
-
79
- def find_bridge(name)
80
- ActiveScaffold::Bridges[name.to_s.underscore.to_sym]
81
- end
82
-
83
- def bridge_will_be_installed(name)
84
- assert bridge = find_bridge(name), "No bridge found matching #{name}"
85
-
86
- bridge.install?
87
- end
88
- end
@@ -1,31 +0,0 @@
1
- require 'test_helper'
2
- require 'active_scaffold_config_mock'
3
- require File.expand_path('../../lib/active_scaffold/bridges/date_picker/ext', __dir__)
4
-
5
- class DatePickerTest < ActionView::TestCase
6
- include ActiveScaffold::Helpers::ViewHelpers
7
- include ActiveScaffold::Bridges::DatePicker::Helper::FormColumnHelpers
8
- include ActiveScaffold::Bridges::DatePicker::Helper::DatepickerColumnHelpers
9
-
10
- def setup
11
- @controller.class.class_eval do
12
- include ActiveScaffoldConfigMock
13
- include ActiveScaffold::Finder
14
- end
15
- end
16
-
17
- def test_set_form_ui
18
- config = ActiveScaffold::Config::Core.new(:company)
19
- assert_nil config.columns[:name].form_ui, 'form_ui for name'
20
- assert_equal :date_picker, config.columns[:date].form_ui, 'form_ui for date'
21
- assert_equal :datetime_picker, config.columns[:datetime].form_ui, 'form_ui for datetime'
22
- end
23
-
24
- def test_form_ui
25
- config = ActiveScaffold::Config::Core.new(:company)
26
- @record = Company.new
27
- opts = {object: @record}
28
- assert active_scaffold_input_date_picker(config.columns[:date], opts.merge(id: 'record_date', name: 'record[date]'))
29
- assert active_scaffold_input_date_picker(config.columns[:datetime], opts.merge(id: 'record_date', name: 'record[datetime]'))
30
- end
31
- end
@@ -1,16 +0,0 @@
1
- require 'test_helper'
2
- ActiveScaffold::Bridges::PaperTrail.prepare
3
-
4
- class PaperTrailTest < ActionController::TestCase
5
- tests AddressesController
6
-
7
- def test_deleted_route
8
- with_routing do |map|
9
- map.draw do
10
- concern :active_scaffold, ActiveScaffold::Routing::Basic.new
11
- resources :addresses, concerns: :active_scaffold
12
- end
13
- assert_routing '/addresses/deleted', :controller => 'addresses', :action => 'deleted'
14
- end
15
- end
16
- end
@@ -1,85 +0,0 @@
1
- require 'test_helper'
2
- require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge', __dir__)
3
- require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers', __dir__)
4
- require File.expand_path('../../lib/active_scaffold/bridges/paperclip/form_ui', __dir__)
5
- require File.expand_path('../../lib/active_scaffold/bridges/paperclip/list_ui', __dir__)
6
-
7
- class PaperclipCore < ActiveScaffold::Config::Core
8
- include ActiveScaffold::Bridges::Paperclip::PaperclipBridge
9
- end
10
-
11
- class PaperclipTest < ActionView::TestCase
12
- include ActiveScaffold::Helpers::ViewHelpers
13
-
14
- def test_initialization_without_paperclip
15
- Company.expects(:attachment_definitions)
16
- config = PaperclipCore.new(:company)
17
- refute config.create.multipart?
18
- refute config.update.multipart?
19
- refute(config.columns.any? { |column| column.form_ui == :paperclip })
20
- end
21
-
22
- def test_initialization
23
- config = PaperclipCore.new(:company)
24
- assert config.create.multipart?
25
- assert config.update.multipart?
26
- assert_equal :paperclip, config.columns[:logo].form_ui
27
- assert_equal [:delete_logo], config.columns[:logo].params.to_a
28
- %w[logo_file_name logo_file_size logo_updated_at logo_content_type].each do |attr|
29
- refute config.columns._inheritable.include?(attr.to_sym)
30
- end
31
- assert Company.method_defined?(:delete_logo)
32
- assert Company.method_defined?(:'delete_logo=')
33
- end
34
-
35
- def test_delete
36
- PaperclipCore.new(:company)
37
- company = Company.new
38
- company.expects(:logo=).never
39
- company.delete_logo = 'false'
40
-
41
- company.expects(:logo).returns(stub(:dirty? => false))
42
- company.expects(:logo=)
43
- company.delete_logo = 'true' # rubocop:disable Lint/UselessSetterCall
44
- end
45
-
46
- def test_list_ui
47
- config = PaperclipCore.new(:company)
48
- company = Company.new
49
-
50
- company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
51
- assert_dom_equal '<a href="/system/file" target="_blank">file</a>', active_scaffold_column_paperclip(company, config.columns[:logo])
52
-
53
- company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => {:thumbnail => '40x40'}))
54
- assert_dom_equal '<a href="/system/file" target="_blank"><img src="/system/file" border="0"/></a>', active_scaffold_column_paperclip(company, config.columns[:logo])
55
- end
56
-
57
- def test_form_ui
58
- with_js_framework :jquery do
59
- config = PaperclipCore.new(:company)
60
- @record = Company.new
61
- opts = {name: 'record[logo]', id: 'record_logo', object: @record}
62
-
63
- @record.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
64
- click_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
65
- change_js = "jQuery(this).parents('div.paperclip_controls').find('input.remove_file').val('false'); return false;"
66
- @document = Nokogiri::HTML::Document.parse(active_scaffold_input_paperclip(config.columns[:logo], opts))
67
- assert_select 'div.paperclip_controls input[type=file]' do |match|
68
- assert_equal match[0]['onchange'], change_js
69
- end
70
- assert_select 'div.paperclip_controls a[href="#"][onclick]' do |match|
71
- assert_equal match[0]['onclick'], click_js
72
- end
73
- assert_select 'div.paperclip_controls input.remove_file[type=hidden][value=false]'
74
-
75
- @record.stubs(:logo).returns(stub(:file? => false))
76
- assert_dom_equal '<input name="record[logo]" class="text-input" autocomplete="off" type="file" id="record_logo" />', active_scaffold_input_paperclip(config.columns[:logo], opts)
77
- end
78
- end
79
-
80
- protected
81
-
82
- def document_root_element
83
- @document.root
84
- end
85
- end