active_scaffold 3.4.43 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +39 -0
  3. data/{LICENSE → LICENSE.md} +1 -1
  4. data/README.md +27 -19
  5. data/app/assets/javascripts/active_scaffold.js.erb +1 -1
  6. data/app/assets/javascripts/jquery/active_scaffold.js +95 -43
  7. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +30 -6
  8. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +11 -1
  9. data/app/assets/stylesheets/active_scaffold_colors.scss +2 -2
  10. data/app/assets/stylesheets/active_scaffold_layout.css +36 -28
  11. data/app/views/active_scaffold_overrides/_base_form.html.erb +2 -3
  12. data/app/views/active_scaffold_overrides/_field_search.html.erb +8 -7
  13. data/app/views/active_scaffold_overrides/_form_association.html.erb +9 -9
  14. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +6 -6
  15. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +52 -50
  16. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +1 -1
  17. data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +1 -1
  18. data/app/views/active_scaffold_overrides/_human_conditions.html.erb +3 -1
  19. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +1 -1
  20. data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +2 -0
  21. data/app/views/active_scaffold_overrides/_list_messages.html.erb +5 -3
  22. data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -1
  23. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +9 -9
  24. data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
  25. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +18 -10
  26. data/app/views/active_scaffold_overrides/_render_field.js.erb +3 -3
  27. data/app/views/active_scaffold_overrides/_search.html.erb +7 -6
  28. data/app/views/active_scaffold_overrides/_show_actions.html.erb +14 -0
  29. data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
  30. data/app/views/active_scaffold_overrides/_update_actions.html.erb +6 -2
  31. data/app/views/active_scaffold_overrides/_update_column.js.erb +1 -1
  32. data/app/views/active_scaffold_overrides/_update_form.html.erb +1 -1
  33. data/app/views/active_scaffold_overrides/destroy.js.erb +2 -3
  34. data/app/views/active_scaffold_overrides/edit_associated.js.erb +4 -3
  35. data/app/views/active_scaffold_overrides/on_action_update.js.erb +5 -3
  36. data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
  37. data/app/views/active_scaffold_overrides/on_update.js.erb +6 -6
  38. data/app/views/active_scaffold_overrides/show.html.erb +6 -0
  39. data/app/views/active_scaffold_overrides/update.html.erb +1 -1
  40. data/app/views/active_scaffold_overrides/update_column.js.erb +1 -1
  41. data/config/brakeman.ignore +26 -0
  42. data/config/brakeman.yml +3 -0
  43. data/config/i18n-tasks.yml +121 -0
  44. data/config/locales/de.yml +81 -70
  45. data/config/locales/en.yml +83 -74
  46. data/config/locales/es.yml +82 -73
  47. data/config/locales/fr.yml +86 -75
  48. data/config/locales/hu.yml +81 -70
  49. data/config/locales/ja.yml +71 -60
  50. data/config/locales/ru.yml +85 -74
  51. data/lib/active_scaffold.rb +3 -0
  52. data/lib/active_scaffold/actions/common_search.rb +11 -7
  53. data/lib/active_scaffold/actions/core.rb +119 -47
  54. data/lib/active_scaffold/actions/create.rb +1 -1
  55. data/lib/active_scaffold/actions/delete.rb +11 -8
  56. data/lib/active_scaffold/actions/field_search.rb +104 -6
  57. data/lib/active_scaffold/actions/list.rb +25 -21
  58. data/lib/active_scaffold/actions/mark.rb +12 -4
  59. data/lib/active_scaffold/actions/nested.rb +26 -26
  60. data/lib/active_scaffold/actions/search.rb +2 -2
  61. data/lib/active_scaffold/actions/show.rb +4 -5
  62. data/lib/active_scaffold/actions/subform.rb +9 -7
  63. data/lib/active_scaffold/actions/update.rb +20 -13
  64. data/lib/active_scaffold/active_record_permissions.rb +24 -5
  65. data/lib/active_scaffold/attribute_params.rb +68 -49
  66. data/lib/active_scaffold/bridges.rb +1 -1
  67. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +15 -19
  68. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  69. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +10 -14
  70. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -7
  71. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +19 -22
  72. data/lib/active_scaffold/bridges/cancan.rb +4 -3
  73. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +11 -21
  74. data/lib/active_scaffold/bridges/carrierwave.rb +2 -1
  75. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +2 -6
  76. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +6 -39
  77. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +1 -1
  78. data/lib/active_scaffold/bridges/chosen.rb +4 -1
  79. data/lib/active_scaffold/bridges/chosen/helpers.rb +3 -2
  80. data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +2 -2
  81. data/lib/active_scaffold/bridges/date_picker.rb +3 -0
  82. data/lib/active_scaffold/bridges/date_picker/ext.rb +43 -38
  83. data/lib/active_scaffold/bridges/date_picker/helper.rb +24 -23
  84. data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
  85. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +3 -7
  86. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +3 -25
  87. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +2 -2
  88. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +6 -8
  89. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +1 -1
  90. data/lib/active_scaffold/bridges/file_column/form_ui.rb +0 -2
  91. data/lib/active_scaffold/bridges/file_column/list_ui.rb +2 -1
  92. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +1 -1
  93. data/lib/active_scaffold/bridges/paper_trail/actions.rb +1 -1
  94. data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -2
  95. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +3 -7
  96. data/lib/active_scaffold/bridges/paperclip.rb +1 -1
  97. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +3 -28
  98. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
  99. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +3 -7
  100. data/lib/active_scaffold/bridges/record_select.rb +2 -0
  101. data/lib/active_scaffold/bridges/record_select/helpers.rb +14 -18
  102. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +4 -8
  103. data/lib/active_scaffold/bridges/shared/date_bridge.rb +20 -20
  104. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +7 -22
  105. data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +14 -14
  106. data/lib/active_scaffold/config/base.rb +9 -6
  107. data/lib/active_scaffold/config/core.rb +30 -21
  108. data/lib/active_scaffold/config/create.rb +2 -1
  109. data/lib/active_scaffold/config/delete.rb +2 -2
  110. data/lib/active_scaffold/config/field_search.rb +9 -3
  111. data/lib/active_scaffold/config/form.rb +4 -4
  112. data/lib/active_scaffold/config/list.rb +27 -23
  113. data/lib/active_scaffold/config/nested.rb +4 -4
  114. data/lib/active_scaffold/config/search.rb +6 -6
  115. data/lib/active_scaffold/config/show.rb +11 -1
  116. data/lib/active_scaffold/config/subform.rb +1 -1
  117. data/lib/active_scaffold/config/update.rb +4 -2
  118. data/lib/active_scaffold/constraints.rb +39 -36
  119. data/lib/active_scaffold/core.rb +36 -15
  120. data/lib/active_scaffold/data_structures/action_columns.rb +14 -9
  121. data/lib/active_scaffold/data_structures/action_link.rb +4 -5
  122. data/lib/active_scaffold/data_structures/action_links.rb +5 -4
  123. data/lib/active_scaffold/data_structures/actions.rb +2 -2
  124. data/lib/active_scaffold/data_structures/association.rb +8 -0
  125. data/lib/active_scaffold/data_structures/association/abstract.rb +147 -0
  126. data/lib/active_scaffold/data_structures/association/active_mongoid.rb +42 -0
  127. data/lib/active_scaffold/data_structures/association/active_record.rb +94 -0
  128. data/lib/active_scaffold/data_structures/association/mongoid.rb +45 -0
  129. data/lib/active_scaffold/data_structures/bridge.rb +3 -6
  130. data/lib/active_scaffold/data_structures/column.rb +100 -82
  131. data/lib/active_scaffold/data_structures/columns.rb +21 -3
  132. data/lib/active_scaffold/data_structures/nested_info.rb +22 -37
  133. data/lib/active_scaffold/data_structures/set.rb +4 -4
  134. data/lib/active_scaffold/data_structures/sorting.rb +29 -15
  135. data/lib/active_scaffold/engine.rb +3 -1
  136. data/lib/active_scaffold/extensions/action_controller_rendering.rb +10 -5
  137. data/lib/active_scaffold/extensions/action_view_rendering.rb +65 -59
  138. data/lib/active_scaffold/extensions/left_outer_joins.rb +48 -53
  139. data/lib/active_scaffold/extensions/localize.rb +3 -4
  140. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +7 -11
  141. data/lib/active_scaffold/extensions/paginator_extensions.rb +20 -18
  142. data/lib/active_scaffold/extensions/routing_mapper.rb +104 -40
  143. data/lib/active_scaffold/extensions/to_label.rb +1 -1
  144. data/lib/active_scaffold/extensions/unsaved_associated.rb +4 -13
  145. data/lib/active_scaffold/extensions/unsaved_record.rb +12 -1
  146. data/lib/active_scaffold/finder.rb +200 -134
  147. data/lib/active_scaffold/helpers/action_link_helpers.rb +398 -0
  148. data/lib/active_scaffold/helpers/association_helpers.rb +12 -30
  149. data/lib/active_scaffold/helpers/controller_helpers.rb +74 -24
  150. data/lib/active_scaffold/helpers/form_column_helpers.rb +205 -112
  151. data/lib/active_scaffold/helpers/human_condition_helpers.rb +21 -11
  152. data/lib/active_scaffold/helpers/id_helpers.rb +1 -1
  153. data/lib/active_scaffold/helpers/list_column_helpers.rb +117 -39
  154. data/lib/active_scaffold/helpers/pagination_helpers.rb +11 -14
  155. data/lib/active_scaffold/helpers/search_column_helpers.rb +69 -32
  156. data/lib/active_scaffold/helpers/show_column_helpers.rb +9 -3
  157. data/lib/active_scaffold/helpers/view_helpers.rb +41 -426
  158. data/lib/active_scaffold/orm_checks.rb +109 -0
  159. data/lib/active_scaffold/paginator.rb +1 -1
  160. data/lib/active_scaffold/responds_to_parent.rb +12 -10
  161. data/lib/active_scaffold/tableless.rb +81 -43
  162. data/lib/active_scaffold/version.rb +2 -2
  163. data/lib/generators/active_scaffold/controller_generator.rb +49 -0
  164. data/lib/generators/active_scaffold/install_generator.rb +45 -0
  165. data/lib/generators/active_scaffold/resource_generator.rb +56 -0
  166. data/lib/generators/{active_scaffold_controller/templates → templates}/controller.rb +0 -0
  167. data/lib/generators/{active_scaffold_controller/templates → templates}/helper.rb +0 -0
  168. data/shoulda_macros/macros.rb +3 -3
  169. data/test/active_scaffold_config_mock.rb +33 -0
  170. data/test/bridges/bridge_test.rb +9 -9
  171. data/test/bridges/date_picker_test.rb +3 -1
  172. data/test/bridges/paper_trail_test.rb +2 -3
  173. data/test/bridges/paperclip_test.rb +21 -10
  174. data/test/bridges/tiny_mce_test.rb +20 -21
  175. data/test/class_with_finder.rb +42 -0
  176. data/test/company.rb +6 -4
  177. data/test/config/core_test.rb +1 -1
  178. data/test/config/create_test.rb +1 -1
  179. data/test/config/list_test.rb +3 -3
  180. data/test/config/update_test.rb +3 -3
  181. data/test/data_structures/action_columns_test.rb +3 -3
  182. data/test/data_structures/association_column_test.rb +5 -5
  183. data/test/data_structures/column_test.rb +14 -14
  184. data/test/data_structures/columns_test.rb +2 -2
  185. data/test/data_structures/set_test.rb +2 -2
  186. data/test/data_structures/sorting_test.rb +6 -4
  187. data/test/extensions/active_record_test.rb +1 -1
  188. data/test/extensions/routing_mapper_test.rb +64 -13
  189. data/test/helpers/form_column_helpers_test.rb +6 -6
  190. data/test/helpers/list_column_helpers_test.rb +9 -5
  191. data/test/helpers/pagination_helpers_test.rb +1 -0
  192. data/test/misc/active_record_permissions_test.rb +18 -1
  193. data/test/misc/attribute_params_test.rb +26 -17
  194. data/test/misc/calculation_test.rb +8 -31
  195. data/test/misc/configurable_test.rb +3 -2
  196. data/test/misc/constraints_test.rb +33 -22
  197. data/test/misc/convert_numbers_format_test.rb +28 -10
  198. data/test/misc/finder_test.rb +6 -29
  199. data/test/misc/parse_datetime_test.rb +160 -0
  200. data/test/misc/render_test.rb +1 -1
  201. data/test/misc/tableless_test.rb +24 -0
  202. data/test/mock_app/app/models/building.rb +2 -1
  203. data/test/mock_app/config.ru +1 -1
  204. data/test/mock_app/config/environments/test.rb +1 -1
  205. data/test/mock_app/config/routes.rb +11 -3
  206. data/test/model_stub.rb +11 -6
  207. data/test/run_all.rb +1 -1
  208. data/test/test_helper.rb +19 -4
  209. metadata +42 -23
  210. data/lib/active_scaffold/data_structures/error_message.rb +0 -22
  211. data/lib/active_scaffold/extensions/reverse_associations.rb +0 -119
  212. data/lib/generators/active_scaffold/USAGE +0 -29
  213. data/lib/generators/active_scaffold/active_scaffold_generator.rb +0 -21
  214. data/lib/generators/active_scaffold_controller/USAGE +0 -19
  215. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +0 -29
  216. data/test/data_structures/error_message_test.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c89a2575bfac755ce70fde2774b15e2a4ee4290
4
- data.tar.gz: 47f69051b49d59a150b04c81c74d151452d1c629
3
+ metadata.gz: 0a7eb8fad2b071936f60422993e7edd163d60f7b
4
+ data.tar.gz: b2ed33ac963964127a633ec19547874e350d1c9d
5
5
  SHA512:
6
- metadata.gz: b8ac30db93e48681891cea00067f401ac8327f7ec139c38d8e5cccebbb493a7e5bbc535a5c1536d0666c768e60032de15f604b7c98274e02df0716c2d49f8304
7
- data.tar.gz: f0f0300ea76e0a5c78e8839d2d3a18eb47f99f076319988f187992c95f05c1a40e4b0e3e8dbe46ab9861a34c97c4dffbbf488959ca085289370a56fe30e283ca
6
+ metadata.gz: 81f8a0cb3b77d49ed1771b02993a02a470a8bbf697d54c27e70649661148b461b4155c89533728305e738ca1dfe227470709590f46e63a76cd7a8280214f4a3c
7
+ data.tar.gz: 3b6b906a0db4738963ff2bf63504928d2348cc42cbe1d9a3227b3d31d4deb7754fb64f5690b8da044fb408514cac196fb41d6fae93d94f144057126fccf55190
data/CHANGELOG CHANGED
@@ -1,3 +1,42 @@
1
+ = 3.5.0
2
+ - add basic support for Mongoid
3
+ - add support for associations between Mongoid and ActiveRecord with ActiveMongoid
4
+ - use concerns for routes, deprecate as_routes method
5
+ - add install generator
6
+ - rails 5.0 support and turbolinks 5.0 support, without jquery.turbolinks
7
+ - rename active_scaffold generator as active_scaffold:resource
8
+ - rename active_scaffold_controller generator as active_scaffold:controller
9
+ - remove deprecations from 3.4.x (active_scaffold_includes and using @record in helpers)
10
+ - check create authorized for create on list (config.list.always_show_create)
11
+ - allow to disable inplace_edit for column when update form is enabled
12
+ - add support for aggregated lists to field_search (config.field_search.group_options)
13
+ - add support for range conditions in url params for date and datetime columns
14
+ - add :color form_ui with "No color" checkbox to disable if column may be null
15
+ - add inline_links config to show action, display member links in show action loaded in page
16
+ - add :telephone list_ui displaying formatted phone number with tel: link
17
+ - add global config option to display reason for disabled action, authorized methods must return string with reason, and string is interpreted as not authorized
18
+ - stop saving embedded scaffolds info into session, so no more CookieOverflow errors caused by loading many embedded scaffolds
19
+ - add add_association_columns method to config.columns, so columns from has_one or belongs_to association can be added as delegated columns (for list, show, field_search and update_column only)
20
+ - support has_many through singular associations (belongs_to or has_one) in forms
21
+ - remove onsubmit tag in forms and move tinymce related JS to assets
22
+ - use html5 history api when listing is refreshed
23
+ - use date, datetime-local and time html5 inputs for date, datetime and time columns without form_ui
24
+ - add month and week form_ui using html5 inputs
25
+ - avoid browser mixes html and xhr cache for listing requests, using vary header
26
+ - improve in_subform? check for subforms, so only reverse association is hidden (needed when subform class has multiple associations to main form's class)
27
+ - fix select of existing record for nested subform
28
+ - fix apply constraints to parent (fix update columns on subform on embedded scaffold)
29
+ - fix for override form field and subform partials on AS controllers which are parent class for AS controllers, so they are shared by children classes
30
+ - fix translation for ActiveRecord enums
31
+ - fix do_refresh_list on actions with GET route, it used :id and :action from request for sorting and pagination links
32
+ - fix enabling draggable lists and sliders on new subform records
33
+ - fix updating column and changing from :hidden form_ui to different one
34
+ - fix searching with :multi_chosen search_ui
35
+ - fix human conditions for :chosen and :multi_chosen search_ui
36
+ - fix display of association in list when association_limit is nil
37
+ - fix conversion of i18n date and datetime value, some abbr day and month may be equal in some languages
38
+ - fix hidden form_ui for collection associations (has_many, habtm)
39
+
1
40
  = 3.4.43
2
41
  - Fix human conditions for date and datetime columns, not using date picker
3
42
 
@@ -1,4 +1,4 @@
1
- Copyright © 2006—2016 Richard White, Sergio Cambra and contributors
1
+ Copyright © 2006—2017 Richard White, Sergio Cambra and contributors
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -8,11 +8,13 @@ Overview
8
8
  [![Inline docs](https://inch-ci.org/github/activescaffold/active_scaffold.svg?branch=master)](https://inch-ci.org/github/activescaffold/active_scaffold)
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
10
10
 
11
- ActiveScaffold provides a quick and powerful user interfaces for CRUD (create, read, update, delete) operations for Rails applications. It offers additonal features including searching, pagination & layout control. Rails 3.2 and 4.x are supported, ruby >= 1.9 required. For rails 4 is recommended >= 4.0.5.
11
+ ActiveScaffold provides a quick and powerful user interfaces for CRUD (create, read, update, delete) operations for Rails applications. It offers additonal features including searching, pagination & layout control. Rails >= 4.0.5 is supported, ruby >= 2.1 supported, although it should work with ruby >= 2.0.0, it's too old and not tested. Ruby < 2.0.0 won't work.
12
12
 
13
13
  Branch Details
14
14
  --------------
15
- rails-3.2 branch on Github supports Rails 3.1 & 3.2, and is the current source of the 3.2.x line of gems. The master branch (3.3.x) has dropped support for Rails 3.1
15
+ 3-4-stable supports rails >= 3.2.x and ruby >= 1.9.3
16
+ 3-3-stable supports rails >= 3.2.x and ruby >= 1.8
17
+ rails-3.2 supports Rails 3.1 & 3.2, and is the current source of the 3.2.x line of gems.
16
18
 
17
19
  Quick Start
18
20
  -----------
@@ -25,32 +27,26 @@ Added to Gemfile
25
27
  Run the following commands
26
28
 
27
29
  bundle install
30
+ rails g active_scaffold:install
28
31
  bundle exec rake db:create
29
- rails g active_scaffold User name:string
32
+ rails g active_scaffold:resource User name:string
30
33
  bundle exec rake db:migrate
34
+
35
+ Commands for Rails 5
31
36
 
32
- Add the following line to app/assets/javascripts/application.js
33
-
34
- //= require active_scaffold
35
-
36
- Add the following line to /app/assets/stylesheets/application.css
37
-
38
- *= require active_scaffold
37
+ bundle install
38
+ rails g active_scaffold:install
39
+ rails db:create
40
+ rails g active_scaffold:resource User name:string
41
+ rails db:migrate
42
+
39
43
 
40
- Run the app and visit localhost:3000/users
44
+ Run the app and visit localhost:3000/users
41
45
 
42
46
  Configuration
43
47
  -------------
44
48
  See Wiki for instructions on customising ActiveScaffold and to find the full API details.
45
49
 
46
- Compatibility Issues
47
- --------------------
48
- jQuery 1.9 deprecates some methods that rails-3.2 branch still uses (NB: jQuery 1.9 is supported in 3.3.x, the master branch). You'll therefore need to ensure you use jQuery 1.8. You can do this by fixing version in your Gemfile:
49
-
50
- gem 'jquery-rails', '2.1.4'
51
-
52
- active_scaffold_batch plugin gem (versions 3.2.x) require 3.3.x (master branch). Therefore if you wish to try using active_scaffold_batch with this branch, you'll need to fork the project and edit the runtime dependency in the gemspec file (use at your own discretion)
53
-
54
50
  Credits
55
51
  -------
56
52
  ActiveScaffold grew out of a project named Ajaxscaffold dating back to 2006. It has had numerous contributors including:
@@ -73,3 +69,15 @@ http://github.com/scambra/recordselect/
73
69
  License
74
70
  =======
75
71
  Released under the MIT license (included)
72
+
73
+ ---
74
+
75
+ A ruby translation project managed on [Locale](http://www.localeapp.com/) that's open to all!
76
+
77
+ ## Contributing to active_scaffold
78
+
79
+ - Edit the translations directly on the [active_scaffold](http://www.localeapp.com/projects/public?search=active_scaffold) project on Locale.
80
+ - **That's it!**
81
+ - The maintainer will then pull translations from the Locale project and push to Github.
82
+
83
+ Happy translating!
@@ -7,7 +7,7 @@
7
7
  require_asset "jquery-ui"
8
8
  elsif Jquery.const_defined? 'Ui'
9
9
  jquery_ui_prefix = Jquery::Ui::Rails::VERSION < '5.0.0' ? 'jquery.ui.' : 'jquery-ui/'
10
- jquery_ui_widgets_prefix = Jquery::Ui::Rails::VERSION >= '6.0.0' ? '/widgets/' : ''
10
+ jquery_ui_widgets_prefix = Jquery::Ui::Rails::VERSION >= '6.0.0' ? 'widgets/' : ''
11
11
  require_asset "#{jquery_ui_prefix}core"
12
12
  require_asset "#{jquery_ui_prefix}effect"
13
13
  require_asset "#{jquery_ui_prefix}effects/effect-highlight" if Jquery::Ui::Rails::VERSION >= '6.0.0'
@@ -57,6 +57,9 @@ jQuery(document).ready(function($) {
57
57
  jQuery(document).on('ajax:complete', 'form.live', function(event) {
58
58
  ActiveScaffold.focus_first_element_of_form(jQuery(this).closest("form"));
59
59
  });
60
+ jQuery(document).on('keyup keypress', 'form.search.live input', function(e) {
61
+ if (e.keyCode == 13) e.preventDefault();
62
+ });
60
63
  jQuery(document).on('ajax:error', 'form.as_form', function(event, xhr, status, error) {
61
64
  var as_div = jQuery(this).closest("div.active-scaffold");
62
65
  if (as_div.length) {
@@ -88,6 +91,7 @@ jQuery(document).ready(function($) {
88
91
  if (action_link.position) {
89
92
  action_link.insert(response);
90
93
  if (action_link.hide_target) action_link.target.hide();
94
+ if (action_link.hide_content) action_link.content.hide();
91
95
  } else {
92
96
  if (action_link.tag.hasClass('toggle')) {
93
97
  action_link.tag.closest('.action_group,.actions').find('.toggle.active').removeClass('active');
@@ -143,8 +147,6 @@ jQuery(document).ready(function($) {
143
147
  });
144
148
  jQuery(document).on('ajax:before', 'a.as_sort', function(event) {
145
149
  var as_sort = jQuery(this);
146
- var history_controller_id = as_sort.data('page-history');
147
- if (history_controller_id) addActiveScaffoldPageToHistory(as_sort.attr('href'), history_controller_id);
148
150
  as_sort.closest('th').addClass('loading');
149
151
  return true;
150
152
  });
@@ -173,8 +175,6 @@ jQuery(document).ready(function($) {
173
175
  });
174
176
  jQuery(document).on('ajax:before', 'a.as_paginate',function(event) {
175
177
  var as_paginate = jQuery(this);
176
- var history_controller_id = as_paginate.data('page-history');
177
- if (history_controller_id) addActiveScaffoldPageToHistory(as_paginate.attr('href'), history_controller_id);
178
178
  as_paginate.prevAll('img.loading-indicator').css('visibility','visible');
179
179
  return true;
180
180
  });
@@ -205,9 +205,10 @@ jQuery(document).ready(function($) {
205
205
 
206
206
  jQuery(document).on('change', 'input.update_form:not(.recordselect), textarea.update_form, select.update_form, .checkbox-list.update_form input:checkbox', function(event) {
207
207
  var element = jQuery(this);
208
- var form_element = element.closest('.checkbox-list');
208
+ var form_element;
209
209
  var value, additional_params;
210
- if (form_element.is(".checkbox-list")) {
210
+ if (element.is(".checkbox-list input:checkbox")) {
211
+ form_element = element.closest('.checkbox-list')
211
212
  value = form_element.find(':checked').map(function(item){return $(this).val();}).toArray();
212
213
  additional_params = (element.is(':checked') ? '_added=' : '_removed=') + element.val();
213
214
  } else {
@@ -290,34 +291,51 @@ jQuery(document).ready(function($) {
290
291
  e.preventDefault();
291
292
  });
292
293
 
293
- /* setup some elements on page/form load */
294
- ActiveScaffold.load_embedded(document);
295
- ActiveScaffold.enable_js_form_buttons(document);
296
- ActiveScaffold.live_search(document);
297
- ActiveScaffold.auto_paginate(document);
298
- ActiveScaffold.draggable_lists('.draggable-lists', document);
299
- ActiveScaffold.sliders(document);
294
+ jQuery(document).on('click', 'form.as_form .no-color', function() {
295
+ var color_field = jQuery(this).parent().next(':input');
296
+ color_field.attr('type', jQuery(this).prop('checked') ? 'hidden' : 'color');
297
+ if (jQuery(this).prop('checked')) color_field.val('');
298
+ });
299
+
300
+ jQuery(document).on('turbolinks:before-visit', function() {
301
+ if (history.state.active_scaffold) {
302
+ history.replaceState({turbolinks: true, url: document.location.href}, '', document.location.href);
303
+ }
304
+ });
305
+
306
+ jQuery(window).on('popstate', function(e) {
307
+ var state = e.originalEvent.state;
308
+ if (!state || !state.active_scaffold) return;
309
+ jQuery.ajax({
310
+ url: document.location.href,
311
+ data: jQuery.extend({'_popstate': true}, state.active_scaffold),
312
+ dataType: 'script',
313
+ cache: true
314
+ });
315
+ jQuery('.active-scaffold:first th .as_sort:first').closest('th').addClass('loading');
316
+ });
317
+
318
+ // call setup on document.ready if Turbolinks not enabled
319
+ if (typeof(Turbolinks) == 'undefined' || !Turbolinks.supported) {
320
+ ActiveScaffold.setup_history_state();
321
+ ActiveScaffold.setup(document);
322
+ }
300
323
  if (ActiveScaffold.config.warn_changes) ActiveScaffold.setup_warn_changes();
301
- jQuery(document).on('as:element_updated', function(e) {
302
- ActiveScaffold.load_embedded(e.target);
303
- ActiveScaffold.enable_js_form_buttons(e.target);
304
- ActiveScaffold.live_search(e.target);
305
- ActiveScaffold.draggable_lists('.draggable-lists', e.target);
306
- ActiveScaffold.sliders(e.target);
324
+ jQuery(document).on('as:element_updated as:element_created', function(e, action_link) {
325
+ ActiveScaffold.setup(e.target);
326
+ });
327
+ jQuery(document).on('as:action_success', 'a.as_action', function(e, action_link) {
328
+ ActiveScaffold.setup(action_link.adapter);
307
329
  });
308
330
  jQuery(document).on('as:element_updated', '.active-scaffold', function(e) {
309
331
  if (e.target != this) return;
310
332
  var search = $(this).find('form.search');
311
333
  if (search.length) ActiveScaffold.focus_first_element_of_form(search);
312
334
  });
313
- jQuery(document).on('as:action_success', 'a.as_action', function(e, action_link) {
314
- ActiveScaffold.load_embedded(action_link.adapter);
315
- ActiveScaffold.enable_js_form_buttons(action_link.adapter);
316
- ActiveScaffold.live_search(action_link.adapter);
317
- ActiveScaffold.auto_paginate(action_link.adapter);
318
- ActiveScaffold.draggable_lists('.draggable-lists', action_link.adapter);
319
- ActiveScaffold.sliders(action_link.adapter);
320
- });
335
+ });
336
+
337
+ jQuery(document).on('turbolinks:load', function($) {
338
+ ActiveScaffold.setup(document);
321
339
  });
322
340
 
323
341
 
@@ -401,7 +419,7 @@ if (typeof(jQuery.fn.delayedObserver) === 'undefined') {
401
419
  var el = $(this);
402
420
  var op = options || {};
403
421
  el.data('oldval', el.val())
404
- .data('delay', delay || 0.5)
422
+ .data('delay', delay === 0 ? delay : (delay || 0.5))
405
423
  .data('condition', op.condition || function() { return ($(this).data('oldval') == $(this).val()); })
406
424
  .data('callback', callback)
407
425
  [(op.event||'keyup')](function(){
@@ -428,6 +446,31 @@ if (typeof(jQuery.fn.delayedObserver) === 'undefined') {
428
446
 
429
447
  var ActiveScaffold = {
430
448
  last_focus: null,
449
+ setup: function(container) {
450
+ /* setup some elements on page/form load */
451
+ ActiveScaffold.load_embedded(container);
452
+ ActiveScaffold.enable_js_form_buttons(container);
453
+ ActiveScaffold.live_search(container);
454
+ ActiveScaffold.auto_paginate(container);
455
+ ActiveScaffold.draggable_lists('.draggable-lists', container);
456
+ ActiveScaffold.sliders(container);
457
+ },
458
+ setup_history_state: function() {
459
+ var data = {}, current_search_item = jQuery('.active-scaffold .filtered-message[data-search]');
460
+ if (current_search_item.length) {
461
+ // store user settings enabled, update state with current page, search and sorting
462
+ var sorted_columns = jQuery('th.sorted');
463
+ data.page = jQuery('.active-scaffold-pagination .current').text();
464
+ data.search = current_search_item.data('search');
465
+ if (sorted_columns.length == 1) {
466
+ data.sort = sorted_columns.attr('class').match(/(.+)-column/)[1];
467
+ data.sort_direction = sorted_columns.hasClass('asc') ? 'asc' : 'desc';
468
+ } else { // default search
469
+ jQuery.extend(data, {sort: '', sort_direction: ''});
470
+ }
471
+ }
472
+ ActiveScaffold.add_to_history(document.location.href, data, true);
473
+ },
431
474
  live_search: function(element) {
432
475
  jQuery('form.search.live input[type=search]', element).delayedObserver(function() {
433
476
  jQuery(this).parent().trigger("submit");
@@ -449,7 +492,7 @@ var ActiveScaffold = {
449
492
  sliders: function(element) {
450
493
  jQuery('.as-slider', element).each(function() {
451
494
  var opts = $(this).data('slider');
452
- jQuery(this).slider(opts);
495
+ jQuery(this).slider(opts);
453
496
  if (opts.disabled) jQuery(this).find('.ui-slider-handle').hide();
454
497
  });
455
498
  },
@@ -517,6 +560,12 @@ var ActiveScaffold = {
517
560
  element.removeClass("desc");
518
561
  });
519
562
  },
563
+ add_to_history: function(url, data, replace) {
564
+ if (!history || !history.pushState) return;
565
+ data = {active_scaffold: data};
566
+ if (replace) history.replaceState(data, null, url);
567
+ else history.pushState(data, null, url);
568
+ },
520
569
  decrement_record_count: function(scaffold) {
521
570
  // decrement the last record count, firsts record count are in nested lists
522
571
  if (typeof(scaffold) == 'string') scaffold = '#' + scaffold;
@@ -821,6 +870,10 @@ var ActiveScaffold = {
821
870
 
822
871
  if (element.length) {
823
872
  if (options.is_subform == false) {
873
+ if (typeof(options.hidden) != 'undefined') {
874
+ var li = element.closest('li');
875
+ li[options.hidden ? 'addClass' : 'removeClass'].call(li, 'hidden')
876
+ }
824
877
  this.replace(element.closest('dl'), content);
825
878
  } else {
826
879
  this.replace_html(element, content);
@@ -1029,23 +1082,15 @@ var ActiveScaffold = {
1029
1082
  });
1030
1083
  window.onbeforeunload = function() {
1031
1084
  if (jQuery('form.need-confirm').length) return unload_message;
1032
- }
1085
+ };
1086
+ jQuery(document).on('turbolinks:before-visit', function(e) {
1087
+ if (jQuery('form.need-confirm').length) {
1088
+ if (!window.confirm(unload_message)) e.preventDefault();
1089
+ }
1090
+ });
1033
1091
  }
1034
1092
  }
1035
1093
 
1036
- /*
1037
- * DHTML history tie-in
1038
- */
1039
- function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
1040
- if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
1041
-
1042
- var array = url.split('?');
1043
- var qs = new Querystring(array[1]);
1044
- var sort = qs.get('sort')
1045
- var dir = qs.get('sort_direction')
1046
- var page = qs.get('page')
1047
- if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+":"+page+":"+sort+":"+dir, url);
1048
- }
1049
1094
 
1050
1095
  /*
1051
1096
  * URL modification support. Incomplete functionality.
@@ -1126,6 +1171,7 @@ ActiveScaffold.ActionLink.Abstract = Class.extend({
1126
1171
  this.url = this.tag.attr('href');
1127
1172
  this.method = this.tag.data('method') || 'get';
1128
1173
  this.target = target;
1174
+ this.content = target.closest('.active-scaffold').find('.as_content:first');
1129
1175
  this.loading_indicator = loading_indicator;
1130
1176
  this.hide_target = false;
1131
1177
  this.position = this.tag.data('position');
@@ -1149,6 +1195,7 @@ ActiveScaffold.ActionLink.Abstract = Class.extend({
1149
1195
  ActiveScaffold.remove(this.adapter, function() {
1150
1196
  link.enable();
1151
1197
  if (link.hide_target) link.target.show();
1198
+ if (link.hide_content) link.content.show();
1152
1199
  if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(link.target.attr('id'), ActiveScaffold.config.scroll_on_close == 'checkInViewport');
1153
1200
  });
1154
1201
  }
@@ -1314,6 +1361,11 @@ ActiveScaffold.Actions.Table = ActiveScaffold.Actions.Abstract.extend({
1314
1361
 
1315
1362
  ActiveScaffold.ActionLink.Table = ActiveScaffold.ActionLink.Abstract.extend({
1316
1363
  insert: function(content) {
1364
+ if (this.position == 'replace') {
1365
+ this.position = 'top';
1366
+ this.hide_content = true;
1367
+ }
1368
+
1317
1369
  if (this.position == 'top') {
1318
1370
  this.target.prepend(content);
1319
1371
  this.set_adapter(this.target.children().first());
@@ -1,7 +1,31 @@
1
- var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
2
- ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
3
- jQuery(this.adapter).find('textarea.mceEditor').each(function(index, elem) {
4
- tinyMCE.execCommand('mceRemoveEditor', false, jQuery(elem).attr('id'));
1
+ (function() {
2
+ var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
3
+ ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
4
+ jQuery(this.adapter).find('textarea.mceEditor').each(function(index, elem) {
5
+ tinyMCE.remove('#' + jQuery(elem).attr('id'));
6
+ });
7
+ action_link_close.apply(this);
8
+ };
9
+
10
+ function loadTinyMCE() {
11
+ var settings = jQuery(this).data('tinymce');
12
+ if (settings) tinyMCE.settings = settings;
13
+ tinyMCE.execCommand('mceAddEditor', false, jQuery(this).attr('id'));
14
+ }
15
+
16
+ jQuery(document).on('submit', 'form.as_form', function() {
17
+ tinymce.triggerSave();
18
+ jQuery('textarea.mceEditor', this).each(function() { tinymce.remove('#'+jQuery(this).attr('id')); });
5
19
  });
6
- action_link_close.apply(this);
7
- };
20
+ /* for persistent update forms */
21
+ jQuery(document).on('ajax:complete', 'form.as_form', function() {
22
+ jQuery('textarea.mceEditor', this).each(loadTinyMCE);
23
+ });
24
+ /* enable tinymce textarea after form open */
25
+ jQuery(document).on('as:action_success', 'a.as_action', function(event) {
26
+ var action_link = ActiveScaffold.ActionLink.get(jQuery(this));
27
+ if (action_link && action_link.adapter) {
28
+ jQuery(action_link.adapter).find('textarea.mceEditor').each(loadTinyMCE);
29
+ }
30
+ });
31
+ })();
@@ -1,7 +1,17 @@
1
1
  var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
2
2
  ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
3
3
  this.adapter.select('textarea.mceEditor').each(function(elem) {
4
- tinyMCE.execCommand('mceRemoveEditor', false, elem.id);
4
+ tinymce.remove('#'+elem.id);
5
5
  });
6
6
  action_link_close.apply(this);
7
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
+ });