alchemy_cms 6.1.10 → 7.0.0.pre.a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +0 -3
  3. data/.gitignore +1 -6
  4. data/CHANGELOG.md +19 -44
  5. data/Gemfile +1 -1
  6. data/Rakefile +14 -9
  7. data/alchemy_cms.gemspec +2 -3
  8. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +1 -1
  9. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +18 -32
  10. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +2 -2
  11. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +2 -2
  12. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +27 -29
  13. data/app/assets/stylesheets/alchemy/elements.scss +16 -35
  14. data/app/assets/stylesheets/alchemy/forms.scss +0 -4
  15. data/app/assets/stylesheets/alchemy/node-select.scss +2 -2
  16. data/app/controllers/alchemy/admin/attachments_controller.rb +0 -1
  17. data/app/controllers/alchemy/admin/elements_controller.rb +7 -32
  18. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  19. data/app/controllers/alchemy/admin/pictures_controller.rb +1 -1
  20. data/app/controllers/alchemy/admin/resources_controller.rb +1 -18
  21. data/app/controllers/alchemy/api/elements_controller.rb +0 -2
  22. data/app/controllers/alchemy/api/pages_controller.rb +8 -4
  23. data/app/controllers/alchemy/messages_controller.rb +9 -9
  24. data/app/controllers/alchemy/pages_controller.rb +23 -18
  25. data/app/decorators/alchemy/element_editor.rb +10 -30
  26. data/app/helpers/alchemy/admin/elements_helper.rb +0 -2
  27. data/app/helpers/alchemy/elements_block_helper.rb +5 -42
  28. data/app/helpers/alchemy/elements_helper.rb +3 -11
  29. data/app/helpers/alchemy/pages_helper.rb +0 -4
  30. data/app/models/alchemy/attachment.rb +6 -3
  31. data/app/models/alchemy/base_record.rb +2 -0
  32. data/app/models/alchemy/eager_loading.rb +0 -1
  33. data/app/models/alchemy/element/element_ingredients.rb +1 -8
  34. data/app/models/alchemy/element/presenters.rb +9 -25
  35. data/app/models/alchemy/element.rb +2 -18
  36. data/app/models/alchemy/ingredient.rb +17 -6
  37. data/app/models/alchemy/ingredients/audio.rb +2 -0
  38. data/app/models/alchemy/ingredients/datetime.rb +3 -1
  39. data/app/models/alchemy/ingredients/file.rb +7 -0
  40. data/app/models/alchemy/ingredients/headline.rb +6 -0
  41. data/app/models/alchemy/ingredients/link.rb +2 -0
  42. data/app/models/alchemy/ingredients/node.rb +2 -0
  43. data/app/models/alchemy/ingredients/page.rb +2 -0
  44. data/app/models/alchemy/ingredients/picture.rb +11 -0
  45. data/app/models/alchemy/ingredients/richtext.rb +6 -0
  46. data/app/models/alchemy/ingredients/select.rb +1 -0
  47. data/app/models/alchemy/ingredients/text.rb +8 -0
  48. data/app/models/alchemy/ingredients/video.rb +2 -0
  49. data/app/models/alchemy/node.rb +9 -6
  50. data/app/models/alchemy/page/page_elements.rb +5 -26
  51. data/app/models/alchemy/page/page_layouts.rb +0 -14
  52. data/app/models/alchemy/page/page_natures.rb +0 -10
  53. data/app/models/alchemy/page.rb +0 -10
  54. data/app/models/alchemy/picture/transformations.rb +0 -30
  55. data/app/models/alchemy/picture/url.rb +1 -1
  56. data/app/models/alchemy/picture.rb +14 -13
  57. data/app/models/alchemy/picture_thumb/create.rb +7 -18
  58. data/app/models/alchemy/picture_thumb/file_store.rb +33 -0
  59. data/app/models/alchemy/picture_thumb.rb +10 -10
  60. data/app/models/concerns/alchemy/picture_thumbnails.rb +2 -6
  61. data/app/serializers/alchemy/element_serializer.rb +1 -6
  62. data/app/services/alchemy/delete_elements.rb +1 -7
  63. data/app/services/alchemy/duplicate_element.rb +1 -6
  64. data/app/views/alchemy/admin/elements/_element.html.erb +5 -22
  65. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  66. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  67. data/app/views/alchemy/admin/elements/order.js.erb +1 -1
  68. data/app/views/alchemy/admin/elements/update.js.erb +1 -2
  69. data/app/views/alchemy/admin/pages/_external_link.html.erb +2 -2
  70. data/app/views/alchemy/admin/pages/_file_link.html.erb +2 -2
  71. data/app/views/alchemy/admin/pages/_internal_link.html.erb +2 -2
  72. data/app/views/alchemy/admin/pages/_table.html.erb +0 -6
  73. data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +3 -6
  74. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  75. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -3
  76. data/app/views/alchemy/admin/pictures/_infos.html.erb +4 -6
  77. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
  78. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
  79. data/app/views/alchemy/ingredients/_headline_editor.html.erb +1 -1
  80. data/app/views/alchemy/ingredients/_html_editor.html.erb +1 -1
  81. data/app/views/alchemy/ingredients/_node_editor.html.erb +1 -1
  82. data/app/views/alchemy/ingredients/_picture_editor.html.erb +4 -4
  83. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -2
  84. data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
  85. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +3 -3
  86. data/app/views/alchemy/pages/_meta_data.html.erb +0 -1
  87. data/app/views/layouts/alchemy/admin.html.erb +5 -1
  88. data/config/alchemy/config.yml +6 -6
  89. data/config/brakeman.ignore +56 -57
  90. data/config/locales/alchemy.en.yml +99 -113
  91. data/config/routes.rb +1 -16
  92. data/db/migrate/20230121212637_alchemy_six_point_one.rb +248 -0
  93. data/lib/alchemy/cache_digests/template_tracker.rb +6 -7
  94. data/lib/alchemy/config.rb +2 -2
  95. data/lib/alchemy/deprecation.rb +1 -1
  96. data/lib/alchemy/errors.rb +0 -11
  97. data/lib/alchemy/hints.rb +10 -10
  98. data/lib/alchemy/permissions.rb +4 -17
  99. data/lib/alchemy/routing_constraints.rb +3 -3
  100. data/lib/alchemy/searchable_resource.rb +38 -0
  101. data/lib/alchemy/seeder.rb +2 -8
  102. data/lib/alchemy/tasks/tidy.rb +0 -38
  103. data/lib/alchemy/test_support/capybara_helpers.rb +69 -0
  104. data/lib/alchemy/test_support/factories/element_factory.rb +0 -6
  105. data/lib/alchemy/test_support/factories/ingredient_factory.rb +1 -1
  106. data/lib/alchemy/test_support/factories/page_factory.rb +4 -2
  107. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +0 -20
  108. data/lib/alchemy/test_support/shared_dom_ids_examples.rb +1 -1
  109. data/lib/alchemy/test_support/shared_ingredient_examples.rb +1 -1
  110. data/lib/alchemy/tinymce.rb +1 -18
  111. data/lib/alchemy/upgrader/seven_point_zero.rb +45 -0
  112. data/lib/alchemy/upgrader/tasks/.keep +0 -0
  113. data/lib/alchemy/upgrader.rb +8 -3
  114. data/lib/alchemy/version.rb +1 -1
  115. data/lib/alchemy.rb +0 -19
  116. data/lib/alchemy_cms.rb +1 -2
  117. data/lib/generators/alchemy/elements/elements_generator.rb +0 -1
  118. data/lib/generators/alchemy/elements/templates/view.html.erb +1 -10
  119. data/lib/generators/alchemy/elements/templates/view.html.haml +1 -9
  120. data/lib/generators/alchemy/elements/templates/view.html.slim +1 -9
  121. data/lib/generators/alchemy/install/files/alchemy.en.yml +7 -8
  122. data/lib/generators/alchemy/install/files/application.html.erb +1 -1
  123. data/lib/generators/alchemy/install/install_generator.rb +18 -34
  124. data/lib/generators/alchemy/install/templates/elements.yml.tt +12 -12
  125. data/lib/non_stupid_digest_assets.rb +1 -1
  126. data/lib/tasks/alchemy/thumbnails.rake +2 -21
  127. data/lib/tasks/alchemy/tidy.rake +1 -12
  128. data/lib/tasks/alchemy/upgrade.rake +10 -47
  129. data/package/dist/admin.js +16 -0
  130. data/package/dist/admin.js.map +7 -0
  131. data/package.json +5 -3
  132. metadata +18 -147
  133. data/app/controllers/alchemy/admin/contents_controller.rb +0 -21
  134. data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -30
  135. data/app/controllers/alchemy/admin/essence_files_controller.rb +0 -31
  136. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +0 -43
  137. data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -34
  138. data/app/controllers/alchemy/api/contents_controller.rb +0 -52
  139. data/app/decorators/alchemy/content_editor.rb +0 -119
  140. data/app/helpers/alchemy/admin/contents_helper.rb +0 -42
  141. data/app/helpers/alchemy/admin/essences_helper.rb +0 -31
  142. data/app/models/alchemy/content/factory.rb +0 -143
  143. data/app/models/alchemy/content.rb +0 -247
  144. data/app/models/alchemy/element/element_contents.rb +0 -200
  145. data/app/models/alchemy/element/element_essences.rb +0 -133
  146. data/app/models/alchemy/essence_audio.rb +0 -13
  147. data/app/models/alchemy/essence_boolean.rb +0 -20
  148. data/app/models/alchemy/essence_date.rb +0 -25
  149. data/app/models/alchemy/essence_file.rb +0 -49
  150. data/app/models/alchemy/essence_headline.rb +0 -41
  151. data/app/models/alchemy/essence_html.rb +0 -23
  152. data/app/models/alchemy/essence_link.rb +0 -21
  153. data/app/models/alchemy/essence_node.rb +0 -19
  154. data/app/models/alchemy/essence_page.rb +0 -17
  155. data/app/models/alchemy/essence_picture.rb +0 -67
  156. data/app/models/alchemy/essence_picture_view.rb +0 -90
  157. data/app/models/alchemy/essence_richtext.rb +0 -44
  158. data/app/models/alchemy/essence_select.rb +0 -19
  159. data/app/models/alchemy/essence_text.rb +0 -23
  160. data/app/models/alchemy/essence_video.rb +0 -13
  161. data/app/serializers/alchemy/content_serializer.rb +0 -17
  162. data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -10
  163. data/app/serializers/alchemy/essence_date_serializer.rb +0 -10
  164. data/app/serializers/alchemy/essence_file_serializer.rb +0 -13
  165. data/app/serializers/alchemy/essence_html_serializer.rb +0 -10
  166. data/app/serializers/alchemy/essence_link_serializer.rb +0 -13
  167. data/app/serializers/alchemy/essence_picture_serializer.rb +0 -28
  168. data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -11
  169. data/app/serializers/alchemy/essence_select_serializer.rb +0 -10
  170. data/app/serializers/alchemy/essence_text_serializer.rb +0 -22
  171. data/app/views/alchemy/admin/contents/create.js.erb +0 -21
  172. data/app/views/alchemy/admin/essence_audios/edit.html.erb +0 -7
  173. data/app/views/alchemy/admin/essence_files/edit.html.erb +0 -21
  174. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +0 -5
  175. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +0 -30
  176. data/app/views/alchemy/admin/essence_pictures/save_link.js.erb +0 -3
  177. data/app/views/alchemy/admin/essence_pictures/update.js.erb +0 -8
  178. data/app/views/alchemy/admin/essence_videos/edit.html.erb +0 -12
  179. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -4
  180. data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -15
  181. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +0 -11
  182. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +0 -2
  183. data/app/views/alchemy/essences/_essence_date_editor.html.erb +0 -16
  184. data/app/views/alchemy/essences/_essence_date_view.html.erb +0 -10
  185. data/app/views/alchemy/essences/_essence_file_editor.html.erb +0 -54
  186. data/app/views/alchemy/essences/_essence_file_view.html.erb +0 -18
  187. data/app/views/alchemy/essences/_essence_headline_editor.html.erb +0 -36
  188. data/app/views/alchemy/essences/_essence_headline_view.html.erb +0 -10
  189. data/app/views/alchemy/essences/_essence_html_editor.html.erb +0 -10
  190. data/app/views/alchemy/essences/_essence_html_view.html.erb +0 -2
  191. data/app/views/alchemy/essences/_essence_link_editor.html.erb +0 -30
  192. data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -10
  193. data/app/views/alchemy/essences/_essence_node_editor.html.erb +0 -27
  194. data/app/views/alchemy/essences/_essence_node_view.html.erb +0 -1
  195. data/app/views/alchemy/essences/_essence_page_editor.html.erb +0 -26
  196. data/app/views/alchemy/essences/_essence_page_view.html.erb +0 -5
  197. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +0 -59
  198. data/app/views/alchemy/essences/_essence_picture_view.html.erb +0 -6
  199. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +0 -14
  200. data/app/views/alchemy/essences/_essence_richtext_view.html.erb +0 -4
  201. data/app/views/alchemy/essences/_essence_select_editor.html.erb +0 -28
  202. data/app/views/alchemy/essences/_essence_select_view.html.erb +0 -2
  203. data/app/views/alchemy/essences/_essence_text_editor.html.erb +0 -29
  204. data/app/views/alchemy/essences/_essence_text_view.html.erb +0 -17
  205. data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -4
  206. data/app/views/alchemy/essences/_essence_video_view.html.erb +0 -19
  207. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +0 -59
  208. data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +0 -20
  209. data/app/views/alchemy/pages/show.rss.builder +0 -21
  210. data/db/migrate/20200226213334_alchemy_four_point_four.rb +0 -313
  211. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +0 -11
  212. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +0 -28
  213. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +0 -8
  214. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +0 -27
  215. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +0 -6
  216. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +0 -24
  217. data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +0 -22
  218. data/db/migrate/20200907111332_remove_tri_state_booleans.rb +0 -33
  219. data/db/migrate/20201207131309_create_page_versions.rb +0 -19
  220. data/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +0 -76
  221. data/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb +0 -10
  222. data/db/migrate/20210326105046_add_sanitized_body_to_alchemy_essence_richtexts.rb +0 -7
  223. data/db/migrate/20210406093436_add_alchemy_essence_headlines.rb +0 -12
  224. data/db/migrate/20210506135919_create_essence_audios.rb +0 -19
  225. data/db/migrate/20210506140258_create_essence_videos.rb +0 -23
  226. data/db/migrate/20210508091432_create_alchemy_ingredients.rb +0 -22
  227. data/db/migrate/20220514072456_restrict_on_delete_page_id_foreign_key_from_alchemy_nodes.rb +0 -13
  228. data/db/migrate/20220622130905_add_playsinline_to_alchemy_essence_videos.rb +0 -9
  229. data/lib/alchemy/essence.rb +0 -250
  230. data/lib/alchemy/tasks/usage.rb +0 -34
  231. data/lib/alchemy/test_support/essence_shared_examples.rb +0 -271
  232. data/lib/alchemy/test_support/factories/content_factory.rb +0 -20
  233. data/lib/alchemy/test_support/factories/essence_audio_factory.rb +0 -7
  234. data/lib/alchemy/test_support/factories/essence_file_factory.rb +0 -7
  235. data/lib/alchemy/test_support/factories/essence_page_factory.rb +0 -7
  236. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +0 -11
  237. data/lib/alchemy/test_support/factories/essence_text_factory.rb +0 -7
  238. data/lib/alchemy/test_support/factories/essence_video_factory.rb +0 -7
  239. data/lib/alchemy/upgrader/five_point_zero.rb +0 -41
  240. data/lib/alchemy/upgrader/six_point_zero.rb +0 -21
  241. data/lib/alchemy/upgrader/tasks/add_page_versions.rb +0 -33
  242. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +0 -34
  243. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +0 -29
  244. data/lib/alchemy/upgrader/tasks/ingredients_migrator.rb +0 -73
  245. data/lib/generators/alchemy/essence/essence_generator.rb +0 -49
  246. data/lib/generators/alchemy/essence/templates/editor.html.erb +0 -17
  247. data/lib/generators/alchemy/essence/templates/view.html.erb +0 -2
  248. data/lib/generators/alchemy/install/files/babel.config.js +0 -64
  249. data/lib/tasks/alchemy/usage.rake +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce51fd15f81d2687ad1836dc8ee9afddad2864304d2e5306b06513145b37b921
4
- data.tar.gz: ae782a4d9044f4a9ae0e996ab6e4cabf0c8e12f0181bde99459a75dfef797dd3
3
+ metadata.gz: 6b458227c38affbfe51743916b5d726410371bc82d1aecdaec6f587df2fef882
4
+ data.tar.gz: 14626367bd1b8cb8f891518514915273ebb95f320e9a91e5815108a2109854f3
5
5
  SHA512:
6
- metadata.gz: c4d5c04accf616f6d709fc72e01402d92c00299fffcefe5e1d9f1ef9acb59111c202ebbf95f5b956cfe04f5acac02aa56bdb986a9f0a80b31a3a6172ce5f2367
7
- data.tar.gz: 70c89a614cf5b039c74c869ced699f422f71c4fae5781b714469ef016ace6703a5ff4176003dafb83a386f48b3a80fab419b2abfe2a2978b00a92789f1c34b2b
6
+ metadata.gz: '068c0aac56cf25bc3bb88a2c1114db7028f5a1177e71e8763d2f7cd0124cfecbf984aa3b62c75267077af051f5032c18ec779d354a61a6c082b6b96d4d0bc706'
7
+ data.tar.gz: 6cd013283061060f7d97c0222c474d67e1748b8865c03872cdd00f2c6583d6f3c3c6918d69dff069bd60392e2c0814c0cf1a00cb79ad75f7be49ec6f1032be41
@@ -82,9 +82,6 @@ jobs:
82
82
  sudo apt update -qq
83
83
  sudo apt install -qq --fix-missing libmysqlclient-dev -o dir::cache::archives="/home/runner/apt/cache"
84
84
  sudo chown -R runner /home/runner/apt/cache
85
- - uses: actions/setup-node@v3
86
- with:
87
- node-version: 16
88
85
  - name: Restore node modules cache
89
86
  id: yarn-cache
90
87
  uses: actions/cache@v2.1.3
data/.gitignore CHANGED
@@ -9,14 +9,9 @@ pkg
9
9
  tmp
10
10
  log
11
11
  .sass-cache
12
- spec/dummy/.browserslistrc
12
+ spec/dummy/app/assets/builds/*.js*
13
13
  spec/dummy/app/javascript/
14
- spec/dummy/babel.config.js
15
- spec/dummy/bin/webpack
16
- spec/dummy/bin/webpack-dev-server
17
14
  spec/dummy/config/alchemy/config.yml
18
- spec/dummy/config/webpack/
19
- spec/dummy/config/webpacker.yml
20
15
  spec/dummy/db/*.sqlite3*
21
16
  spec/dummy/package.json
22
17
  spec/dummy/postcss.config.js
data/CHANGELOG.md CHANGED
@@ -1,52 +1,27 @@
1
1
  # Changelog
2
2
 
3
- ## 6.1.10 (2024-08-21)
4
-
5
- - [6.1-stable] Fix combining search filters and pagination [#2983](https://github.com/AlchemyCMS/alchemy_cms/pull/2983) ([tvdeyen](https://github.com/tvdeyen))
6
- - [6.1-stable] Merge pull request #2556 from mamhoff/fix-nan-ratio-error [#2581](https://github.com/AlchemyCMS/alchemy_cms/pull/2581) ([alchemycms-bot](https://github.com/alchemycms-bot))
7
-
8
- ## 6.1.9 (2023-08-29)
9
-
10
- - [6.1-stable] Merge pull request #2571 from tvdeyen/fix-non-stupid-digest-assets [#2573](https://github.com/AlchemyCMS/alchemy_cms/pull/2573) ([github-actions](https://github.com/apps/github-actions))
11
- - [6.1] Show if element is using contents or ingredients [#2568](https://github.com/AlchemyCMS/alchemy_cms/pull/2568) ([tvdeyen](https://github.com/tvdeyen))
12
-
13
- ## 6.1.8 (2023-07-31)
14
-
15
- - [v6.1] Use selenium-webdriver instead of webdrivers gem [#2531](https://github.com/AlchemyCMS/alchemy_cms/pull/2531) ([mamhoff](https://github.com/mamhoff))
16
- - [v6.1] Bugfix: Init PagePublicationFields on Pages Table [#2530](https://github.com/AlchemyCMS/alchemy_cms/pull/2530) ([mamhoff](https://github.com/mamhoff))
17
-
18
- ## 6.1.7 (2023-07-07)
19
-
20
- - [6.1] Add task(s) to visualize element and page usage [#2514](https://github.com/AlchemyCMS/alchemy_cms/pull/2514) ([tvdeyen](https://github.com/tvdeyen))
21
-
22
- ## 6.1.6 (2023-06-30)
23
-
24
- - [6.1] Allow to create element with warning in definition [#2508](https://github.com/AlchemyCMS/alchemy_cms/pull/2508) ([tvdeyen](https://github.com/tvdeyen))
25
- - [6.1] Allow authors to link to all pages again [#2505](https://github.com/AlchemyCMS/alchemy_cms/pull/2505) ([tvdeyen](https://github.com/tvdeyen))
26
- - install generator: Add option to force patched babel config [#2495](https://github.com/AlchemyCMS/alchemy_cms/pull/2495) ([tvdeyen](https://github.com/tvdeyen))
27
- - Remove memory leak in ingredients migrator [#2493](https://github.com/AlchemyCMS/alchemy_cms/pull/2493) ([tvdeyen](https://github.com/tvdeyen))
28
-
29
- ## 6.1.5 (2023-05-26)
30
-
31
- - [6.1] Fix page seeder [#2482](https://github.com/AlchemyCMS/alchemy_cms/pull/2482) ([tvdeyen](https://github.com/tvdeyen))
32
-
33
- ## 6.1.4 (2023-05-18)
34
-
35
- - [6.1] Revert "Preload related objects in Alchemy::PagesController" [#2473](https://github.com/AlchemyCMS/alchemy_cms/pull/2473) ([tvdeyen](https://github.com/tvdeyen))
36
-
37
- ## 6.1.3 (2023-03-29)
3
+ ## 7.0.0 (unreleased)
38
4
 
5
+ - Remove deprecations [#2450](https://github.com/AlchemyCMS/alchemy_cms/pull/2450) ([tvdeyen](https://github.com/tvdeyen))
6
+ - Fix respond_to? overwrite in ElementEditor [#2449](https://github.com/AlchemyCMS/alchemy_cms/pull/2449) ([tvdeyen](https://github.com/tvdeyen))
39
7
  - Fix installer: Add seeds file if not exists [#2446](https://github.com/AlchemyCMS/alchemy_cms/pull/2446) ([tvdeyen](https://github.com/tvdeyen))
8
+ - Make CapybaraHelpers requireable [#2445](https://github.com/AlchemyCMS/alchemy_cms/pull/2445) ([tvdeyen](https://github.com/tvdeyen))
9
+ - Do not install webpacker tag for fresh apps [#2444](https://github.com/AlchemyCMS/alchemy_cms/pull/2444) ([tvdeyen](https://github.com/tvdeyen))
10
+ - Re-add Webpacker support. [#2443](https://github.com/AlchemyCMS/alchemy_cms/pull/2443) ([tvdeyen](https://github.com/tvdeyen))
11
+ - Add support for more link tabs [#2442](https://github.com/AlchemyCMS/alchemy_cms/pull/2442) ([tvdeyen](https://github.com/tvdeyen))
12
+ - Add support for Ransack 4 [#2438](https://github.com/AlchemyCMS/alchemy_cms/pull/2438) ([tvdeyen](https://github.com/tvdeyen))
13
+ - Fix non_stupid_digest_assets [#2436](https://github.com/AlchemyCMS/alchemy_cms/pull/2436) ([tvdeyen](https://github.com/tvdeyen))
14
+ - Add PictureThumb.storage_class [#2435](https://github.com/AlchemyCMS/alchemy_cms/pull/2435) ([tvdeyen](https://github.com/tvdeyen))
15
+ - Fix thumbnail writing for multi-concurrent and multi-db setups [#2433](https://github.com/AlchemyCMS/alchemy_cms/pull/2433) ([tvdeyen](https://github.com/tvdeyen))
40
16
  - Integrate non_stupid_digest_assets gem [#2430](https://github.com/AlchemyCMS/alchemy_cms/pull/2430) ([afdev82](https://github.com/afdev82))
41
-
42
- ## 6.1.2 (2023-02-27)
43
-
44
- - [6.1] Fix thumbnail writing for multi-concurrent and multi-db setups [#2434](https://github.com/AlchemyCMS/alchemy_cms/pull/2434) ([tvdeyen](https://github.com/tvdeyen))
45
-
46
- ## 6.1.1 (2023-01-23)
47
-
48
- - Re-introduce deleted methods [#2422](https://github.com/AlchemyCMS/alchemy_cms/pull/2422) ([tvdeyen](https://github.com/tvdeyen))
49
- - Add searchable field to page (Alchemy 6.1) [#2420](https://github.com/AlchemyCMS/alchemy_cms/pull/2420) ([kulturbande](https://github.com/kulturbande))
17
+ - Define allowed settings in ingredients [#2425](https://github.com/AlchemyCMS/alchemy_cms/pull/2425) ([tvdeyen](https://github.com/tvdeyen))
18
+ - Remove webpacker [#2424](https://github.com/AlchemyCMS/alchemy_cms/pull/2424) ([tvdeyen](https://github.com/tvdeyen))
19
+ - Remove deprecated methods [#2421](https://github.com/AlchemyCMS/alchemy_cms/pull/2421) ([tvdeyen](https://github.com/tvdeyen))
20
+ - Remove 6.0 upgrade tasks [#2418](https://github.com/AlchemyCMS/alchemy_cms/pull/2418) ([tvdeyen](https://github.com/tvdeyen))
21
+ - Compress 6.1 migrations [#2417](https://github.com/AlchemyCMS/alchemy_cms/pull/2417) ([tvdeyen](https://github.com/tvdeyen))
22
+ - Remove all content/essence related code [#2416](https://github.com/AlchemyCMS/alchemy_cms/pull/2416) ([tvdeyen](https://github.com/tvdeyen))
23
+ - Remove RSS Feed feature [#2415](https://github.com/AlchemyCMS/alchemy_cms/pull/2415) ([tvdeyen](https://github.com/tvdeyen))
24
+ - Add searchable field to page [#2414](https://github.com/AlchemyCMS/alchemy_cms/pull/2414) ([kulturbande](https://github.com/kulturbande))
50
25
 
51
26
  ## 6.1.0 (2023-01-19)
52
27
 
data/Gemfile CHANGED
@@ -19,7 +19,7 @@ group :development, :test do
19
19
  # in our case the culprit is `handlebars-assets`. The changes between 2.7.0 and 2.8.0 are
20
20
  # minimal, but breaking.
21
21
  gem "execjs", "= 2.8.1"
22
- gem "selenium-webdriver", "< 4.9.1" # until https://github.com/teamcapybara/capybara/pull/2665 got merged
22
+ gem "jsbundling-rails", "~> 1.1"
23
23
 
24
24
  if ENV["GITHUB_ACTIONS"]
25
25
  # Necessary because GH Actions gem cache does not have this "Bundled with Ruby" gem installed
data/Rakefile CHANGED
@@ -44,13 +44,14 @@ namespace :alchemy do
44
44
  yarn install && \
45
45
  yarn link && \
46
46
  cd spec/dummy && \
47
+ yarn link @alchemy_cms/admin && \
47
48
  export RAILS_ENV=test && \
48
49
  bin/rake db:create && \
49
50
  bin/rake db:environment:set && \
50
51
  bin/rake db:migrate:reset && \
51
- bin/rails g alchemy:install --skip --skip-demo-files --auto-accept --skip-db-create --force-babel-config && \
52
- yarn link @alchemy_cms/admin && \
53
- RAILS_ENV=test bin/webpack && \
52
+ bin/rails javascript:install:esbuild && \
53
+ bin/rails g alchemy:install --skip --skip-demo-files --auto-accept --skip-db-create && \
54
+ bin/rails javascript:build && \
54
55
  cd -
55
56
  BASH
56
57
  ) || fail
@@ -63,13 +64,17 @@ namespace :alchemy do
63
64
  original_file = "./CHANGELOG.md"
64
65
  new_file = original_file + ".new"
65
66
  backup = original_file + ".old"
66
- changes = `git rev-list v#{ENV["PREVIOUS_VERSION"]}..HEAD | bundle exec github_fast_changelog AlchemyCMS/alchemy_cms`
67
- File.open(new_file, "w") do |fo|
68
- fo.puts changes
69
- File.foreach(original_file) do |li|
70
- fo.puts li
67
+ changes = `git rev-list v#{ENV["PREVIOUS_VERSION"]}..HEAD | bundle exec github_fast_changelog AlchemyCMS/alchemy_cms`.split("\n")
68
+ changelog = File.read(original_file)
69
+ File.open(new_file, "w") do |file|
70
+ changes.each do |change|
71
+ next if changelog.include?(change)
72
+ file.puts change
73
+ end
74
+ File.foreach(original_file) do |line|
75
+ file.puts line
71
76
  end
72
- fo.puts ""
77
+ file.puts ""
73
78
  end
74
79
  File.rename(original_file, backup)
75
80
  File.rename(new_file, original_file)
data/alchemy_cms.gemspec CHANGED
@@ -45,14 +45,13 @@ Gem::Specification.new do |gem|
45
45
  gem.add_runtime_dependency "jquery-ui-rails", ["~> 6.0"]
46
46
  gem.add_runtime_dependency "kaminari", ["~> 1.1"]
47
47
  gem.add_runtime_dependency "originator", ["~> 3.1"]
48
- gem.add_runtime_dependency "ransack", [">= 1.8", "< 4.0"]
48
+ gem.add_runtime_dependency "ransack", [">= 1.8", "< 5.0"]
49
49
  gem.add_runtime_dependency "request_store", ["~> 1.2"]
50
50
  gem.add_runtime_dependency "responders", [">= 2.0", "< 4.0"]
51
51
  gem.add_runtime_dependency "sassc-rails", ["~> 2.1"]
52
52
  gem.add_runtime_dependency "simple_form", [">= 4.0", "< 6"]
53
53
  gem.add_runtime_dependency "sprockets", [">= 3.0", "< 5"]
54
54
  gem.add_runtime_dependency "turbolinks", [">= 2.5"]
55
- gem.add_runtime_dependency "webpacker", [">= 4.0", "< 6"]
56
55
 
57
56
  gem.add_development_dependency "capybara", ["~> 3.0"]
58
57
  gem.add_development_dependency "capybara-screenshot", ["~> 1.0"]
@@ -62,7 +61,7 @@ Gem::Specification.new do |gem|
62
61
  gem.add_development_dependency "rspec-activemodel-mocks", ["~> 1.0"]
63
62
  gem.add_development_dependency "rspec-rails", [">= 4.0.0.beta2"]
64
63
  gem.add_development_dependency "simplecov", ["~> 0.20"]
65
- gem.add_development_dependency "selenium-webdriver", ["~> 4.10"]
64
+ gem.add_development_dependency "webdrivers", ["~> 5.0"]
66
65
  gem.add_development_dependency "webmock", ["~> 3.3"]
67
66
  gem.add_development_dependency "shoulda-matchers", ["~> 5.0"]
68
67
  gem.add_development_dependency "timecop", ["~> 0.9"]
@@ -20,7 +20,7 @@ $.extend Alchemy,
20
20
  setElementClean: (element) ->
21
21
  $element = $(element)
22
22
  $element.removeClass('dirty')
23
- $element.find('> .element-content .dirty').removeClass('dirty')
23
+ $element.find('> .element-body .dirty').removeClass('dirty')
24
24
  window.onbeforeunload = undefined
25
25
 
26
26
  isPageDirty: ->
@@ -15,7 +15,7 @@ Alchemy.ElementEditors =
15
15
  init: ->
16
16
  @element_area = $("#element_area")
17
17
  @bindEvents()
18
- @expandContentGroups()
18
+ @expandIngredientGroups()
19
19
  return
20
20
 
21
21
  # Binds click events on several DOM elements from element editors
@@ -29,27 +29,25 @@ Alchemy.ElementEditors =
29
29
  @onDoubleClickElement(e)
30
30
  @element_area.on "click", "[data-element-toggle]", (e) =>
31
31
  @onClickToggle(e)
32
- @element_area.on "click", '[data-create-missing-content]', (e) =>
33
- @onClickMissingContent(e)
34
32
  # Binds the custom FocusElementEditor event
35
33
  @element_area.on "FocusElementEditor.Alchemy", '.element-editor', (e) =>
36
34
  @onFocusElement(e)
37
35
  # Binds the custom SaveElement event
38
36
  @element_area.on "SaveElement.Alchemy", '.element-editor', (e, data) =>
39
37
  @onSaveElement(e, data)
40
- @element_area.on "click", '[data-toggle-content-group]', (e) =>
41
- @onToggleContentGroup(e)
38
+ @element_area.on "click", '[data-toggle-ingredient-group]', (e) =>
39
+ @onToggleIngredientGroup(e)
42
40
  # Listen to postMessage messages from the preview frame
43
41
  window.addEventListener 'message', (e) =>
44
42
  @onMessage(e.data)
45
43
  true
46
44
  return
47
45
 
48
- # Expands content groups that are stored in sessionStorage as expanded
49
- expandContentGroups: ->
50
- if $expanded_content_groups = sessionStorage.getItem('Alchemy.expanded_content_groups')
51
- for header_id in JSON.parse($expanded_content_groups) then do (header_id) =>
52
- $('#' + header_id).closest('.content-group').addClass('expanded');
46
+ # Expands ingredient groups that are stored in sessionStorage as expanded
47
+ expandIngredientGroups: ->
48
+ if $expanded_ingredient_groups = sessionStorage.getItem('Alchemy.expanded_ingredient_groups')
49
+ for header_id in JSON.parse($expanded_ingredient_groups) then do (header_id) =>
50
+ $('#' + header_id).closest('.ingredient-group').addClass('expanded');
53
51
 
54
52
  # Selects and scrolls to element with given id in the preview window.
55
53
  #
@@ -179,21 +177,21 @@ Alchemy.ElementEditors =
179
177
  Alchemy.Buttons.enable($element)
180
178
  true
181
179
 
182
- # Toggle visibility of the content fields in the group
183
- onToggleContentGroup: (event) ->
184
- $group_div = $(event.currentTarget).closest('.content-group');
180
+ # Toggle visibility of the ingredient fields in the group
181
+ onToggleIngredientGroup: (event) ->
182
+ $group_div = $(event.currentTarget).closest('.ingredient-group');
185
183
  $group_div.toggleClass('expanded');
186
184
 
187
- $expanded_content_groups = JSON.parse(sessionStorage.getItem('Alchemy.expanded_content_groups') || '[]');
188
- # Add or remove depending on whether this content group is expanded
185
+ $expanded_ingredient_groups = JSON.parse(sessionStorage.getItem('Alchemy.expanded_ingredient_groups') || '[]');
186
+ # Add or remove depending on whether this ingredient group is expanded
189
187
  if $group_div.hasClass('expanded')
190
- if $expanded_content_groups.indexOf(event.currentTarget.id) == -1
191
- $expanded_content_groups.push(event.currentTarget.id);
188
+ if $expanded_ingredient_groups.indexOf(event.currentTarget.id) == -1
189
+ $expanded_ingredient_groups.push(event.currentTarget.id);
192
190
  else
193
- $expanded_content_groups = $expanded_content_groups.filter (value) ->
191
+ $expanded_ingredient_groups = $expanded_ingredient_groups.filter (value) ->
194
192
  value != event.currentTarget.id
195
193
 
196
- sessionStorage.setItem('Alchemy.expanded_content_groups', JSON.stringify($expanded_content_groups))
194
+ sessionStorage.setItem('Alchemy.expanded_ingredient_groups', JSON.stringify($expanded_ingredient_groups))
197
195
  false
198
196
 
199
197
  # Event handlers
@@ -248,22 +246,10 @@ Alchemy.ElementEditors =
248
246
  e.stopPropagation()
249
247
  false
250
248
 
251
- # Handles the missing content button click events.
252
- #
253
- # Ensures that the links query string is converted into post body and send
254
- # the request via a real ajax post to server, to allow long query strings.
255
- #
256
- onClickMissingContent: (e) ->
257
- link = e.target
258
- url = link.pathname
259
- querystring = link.search.replace(/\?/, '')
260
- $.post(url, querystring)
261
- false
262
-
263
249
  # private
264
250
 
265
251
  _shouldUpdateTitle: (element, event) ->
266
- editors = element.find('> .element-content .element-content-editors, > .element-content .element-ingredient-editors').children()
252
+ editors = element.find('> .element-body .element-ingredient-editors').children()
267
253
  if @_hasParents(element)
268
254
  editors.length != 0
269
255
  else if @_isParent(element) && @_isFirstChild $(event.target)
@@ -50,8 +50,8 @@ Alchemy.ElementsWindow =
50
50
  $.get @url, (data) =>
51
51
  @element_area.html data
52
52
  Alchemy.GUI.init(@element_area)
53
- Alchemy.fileEditors(@element_area.find(".essence_file, .essence_video, .essence_audio, .ingredient-editor.file, .ingredient-editor.audio, .ingredient-editor.video").selector)
54
- Alchemy.pictureEditors(@element_area.find(".essence_picture, .ingredient-editor.picture").selector)
53
+ Alchemy.fileEditors(@element_area.find(".ingredient-editor.file, .ingredient-editor.audio, .ingredient-editor.video").selector)
54
+ Alchemy.pictureEditors(@element_area.find(".ingredient-editor.picture").selector)
55
55
  if @callback
56
56
  @callback.call()
57
57
  .fail (xhr, status, error) =>
@@ -23,5 +23,5 @@ Alchemy.GUI =
23
23
  Alchemy.ElementDirtyObserver($el)
24
24
  Alchemy.GUI.init($el && $el.selector)
25
25
  Alchemy.ImageLoader($el[0])
26
- Alchemy.fileEditors($el.find(".essence_file, .essence_video, .essence_audio, .ingredient-editor.file, .ingredient-editor.audio, .ingredient-editor.video").selector)
27
- Alchemy.pictureEditors($el.find(".essence_picture, .ingredient-editor.picture").selector)
26
+ Alchemy.fileEditors($el.find(".ingredient-editor.file, .ingredient-editor.audio, .ingredient-editor.video").selector)
27
+ Alchemy.pictureEditors($el.find(".ingredient-editor.picture").selector)
@@ -1,5 +1,5 @@
1
1
  # Represents the link Dialog that appears, if a user clicks the link buttons
2
- # in TinyMCE or on an Essence that has links enabled (e.g. EssencePicture)
2
+ # in TinyMCE or on an Ingredient that has links enabled (e.g. Picture)
3
3
  #
4
4
  class window.Alchemy.LinkDialog extends Alchemy.Dialog
5
5
 
@@ -25,37 +25,29 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
25
25
  # attach events we handle
26
26
  @attachEvents()
27
27
  # Store some jQuery objects for further reference
28
- @$page_urlname = $('#page_urlname', @dialog_body)
28
+ @$internal_link = $('#internal_link', @dialog_body)
29
29
  @$element_anchor = $('#element_anchor', @dialog_body)
30
30
  @$anchor_link = $('#anchor_link', @dialog_body)
31
- @$external_url = $('#external_url', @dialog_body)
32
- @$public_filename = $('#public_filename', @dialog_body)
31
+ @$external_link = $('#external_link', @dialog_body)
32
+ @$file_link = $('#file_link', @dialog_body)
33
33
  @$overlay_tabs = $('#overlay_tabs', @dialog_body)
34
34
  @$page_container = $('#page_selector_container')
35
+ @initAnchorLinks()
35
36
  # if we edit an existing link
36
37
  if @link_object
37
38
  # we select the correct tab
38
39
  @selectTab()
39
40
  @initPageSelect()
40
- @initAnchorLinks()
41
+ return
41
42
 
42
43
  # Attaches click events to several buttons in the link dialog.
43
44
  attachEvents: ->
44
45
  # The ok buttons
45
46
  $('.create-link.button', @dialog_body).click (e) =>
46
47
  @link_type = $(e.target).data('link-type')
47
- switch @link_type
48
- # get stored url for link type
49
- when 'external'
50
- url = @$external_url.val()
51
- when 'file'
52
- url = @$public_filename.val()
53
- when 'anchor'
54
- url = @$anchor_link.val()
55
- else
56
- url = @$page_urlname.val()
57
- if @$element_anchor.val() != ''
58
- url += "##{@$element_anchor.val()}"
48
+ url = $("##{@link_type}_link").val()
49
+ if @link_type == 'internal' && @$element_anchor.val() != ''
50
+ url += "##{@$element_anchor.val()}"
59
51
  # Create the link
60
52
  @createLink
61
53
  url: url
@@ -67,7 +59,7 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
67
59
  initPageSelect: ->
68
60
  pageTemplate = HandlebarsTemplates.page
69
61
  element_anchor_placeholder = @$element_anchor.attr('placeholder')
70
- @$page_urlname.select2
62
+ @$internal_link.select2
71
63
  placeholder: Alchemy.t('Search page')
72
64
  allowClear: true
73
65
  minimumInputLength: 3
@@ -142,7 +134,7 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
142
134
  @setLink(options.url, options.title, options.target)
143
135
  @close()
144
136
 
145
- # Sets the link either in TinyMCE or on an Essence.
137
+ # Sets the link either in TinyMCE or on an Ingredient.
146
138
  setLink: (url, title, target) ->
147
139
  Alchemy.setElementDirty(@$link_object.closest('.element-editor'))
148
140
  if @link_object.editor
@@ -162,7 +154,7 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
162
154
  editor.selection.collapse()
163
155
  true
164
156
 
165
- # Sets a link on an Essence (e.g. EssencePicture).
157
+ # Sets a link on an Ingredient (e.g. Picture).
166
158
  setLinkFields: (url, title, target) ->
167
159
  @link_value_field.value = url
168
160
  @link_value_field.dispatchEvent(new Event("change"))
@@ -176,10 +168,10 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
176
168
 
177
169
  # Selects the correct tab for link type and fills all fields.
178
170
  selectTab: ->
179
- # Creating an temporary anchor node if we are linking an EssencePicture or EssenceText.
171
+ # Creating an temporary anchor node if we are linking an Picture Ingredient.
180
172
  if (@link_object.nodeType)
181
173
  @$link = @createTempLink()
182
- # Restoring the bookmarked selection inside the TinyMCE of an EssenceRichtext.
174
+ # Restoring the bookmarked selection inside the TinyMCE of an Richtext.
183
175
  else if (@link_object.node.nodeName == 'A')
184
176
  @$link = $(@link_object.node)
185
177
  @link_object.selection.moveToBookmark(@link_object.bookmark)
@@ -192,27 +184,33 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
192
184
  if @$link.hasClass('external')
193
185
  # Handles an external link.
194
186
  tab = $('#overlay_tab_external_link')
195
- @$external_url.val(@$link.attr('href'))
187
+ @$external_link.val(@$link.attr('href'))
196
188
  else if @$link.hasClass('file')
197
189
  # Handles a file link.
198
190
  tab = $('#overlay_tab_file_link')
199
- @$public_filename.select2('val', @$link[0].pathname + @$link[0].search)
191
+ @$file_link.select2('val', @$link[0].pathname + @$link[0].search)
200
192
  else if @$link.attr('href').match(/^#/)
201
193
  # Handles an anchor link.
202
194
  tab = $('#overlay_tab_anchor_link')
203
195
  @$anchor_link.select2('val', @$link.attr('href'))
204
- else
196
+ else if @$link.hasClass('internal')
205
197
  # Handles an internal link.
206
198
  tab = $('#overlay_tab_internal_link')
207
199
  @initInternalLinkTab()
208
- # activate the tab jquery ui 1.10 style o.O
209
- @$overlay_tabs.tabs('option', 'active', $('#overlay_tabs > div').index(tab))
200
+ else
201
+ # Emit an event to allow extensions hook into the link overlay.
202
+ @$overlay_tabs.trigger 'SelectLinkTab.Alchemy',
203
+ link: @$link
204
+ if tab
205
+ # activate the tab jquery ui 1.10 style o.O
206
+ @$overlay_tabs.tabs('option', 'active', $('#overlay_tabs > div').index(tab))
207
+ return
210
208
 
211
209
  # Handles actions for internal link tab.
212
210
  initInternalLinkTab: ->
213
211
  url = @$link.attr('href').split('#')
214
212
  # update the url field
215
- @$page_urlname.val(url[0])
213
+ @$internal_link.val(url[0])
216
214
  # store the anchor
217
215
  @$element_anchor.val(url[1])
218
216
 
@@ -251,7 +249,7 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
251
249
 
252
250
  # Public class methods
253
251
 
254
- # Removes link from Essence.
252
+ # Removes link from Ingredient.
255
253
  @removeLink = (link, parent_selector) ->
256
254
  parent = document.querySelector(parent_selector)
257
255
  link_value_field = parent.querySelector("[data-link-value]")