alchemy_cms 4.4.4 → 5.0.0.beta2

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 (386) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +56 -18
  3. data/.github/workflows/stale.yml +1 -1
  4. data/.gitignore +20 -2
  5. data/.hound.yml +2 -1
  6. data/.prettierrc +6 -0
  7. data/.rubocop.yml +33 -20
  8. data/CHANGELOG.md +121 -0
  9. data/Gemfile +24 -22
  10. data/README.md +31 -19
  11. data/Rakefile +10 -8
  12. data/alchemy_cms.gemspec +7 -5
  13. data/app/assets/javascripts/alchemy/admin.js +1 -2
  14. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -1
  15. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -2
  16. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +5 -5
  17. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +17 -17
  18. data/app/assets/javascripts/alchemy/node_select.js +39 -0
  19. data/app/assets/javascripts/alchemy/templates/index.js +2 -0
  20. data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
  21. data/app/assets/javascripts/alchemy/templates/node_folder.hbs +3 -0
  22. data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
  23. data/app/assets/stylesheets/alchemy/_mixins.scss +2 -3
  24. data/app/assets/stylesheets/alchemy/_variables.scss +2 -2
  25. data/app/assets/stylesheets/alchemy/admin.scss +3 -2
  26. data/app/assets/stylesheets/alchemy/base.scss +0 -1
  27. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  28. data/app/assets/stylesheets/alchemy/forms.scss +5 -0
  29. data/app/assets/stylesheets/alchemy/lists.scss +0 -8
  30. data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
  31. data/app/assets/stylesheets/alchemy/nodes.scss +6 -1
  32. data/app/assets/stylesheets/alchemy/sitemap.scss +63 -21
  33. data/app/assets/stylesheets/alchemy/tables.scss +1 -24
  34. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
  35. data/app/controllers/alchemy/admin/base_controller.rb +13 -33
  36. data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
  37. data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
  38. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
  39. data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
  40. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
  41. data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
  42. data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
  43. data/app/controllers/alchemy/admin/nodes_controller.rb +5 -14
  44. data/app/controllers/alchemy/admin/pages_controller.rb +50 -63
  45. data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
  46. data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
  47. data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
  48. data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
  49. data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
  50. data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
  51. data/app/controllers/alchemy/api/base_controller.rb +2 -2
  52. data/app/controllers/alchemy/api/contents_controller.rb +4 -4
  53. data/app/controllers/alchemy/api/elements_controller.rb +8 -8
  54. data/app/controllers/alchemy/api/nodes_controller.rb +65 -0
  55. data/app/controllers/alchemy/api/pages_controller.rb +15 -22
  56. data/app/controllers/alchemy/attachments_controller.rb +5 -5
  57. data/app/controllers/alchemy/base_controller.rb +10 -9
  58. data/app/controllers/alchemy/messages_controller.rb +16 -23
  59. data/app/controllers/alchemy/pages_controller.rb +13 -11
  60. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
  61. data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
  62. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
  63. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
  64. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
  65. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
  66. data/app/decorators/alchemy/content_editor.rb +55 -0
  67. data/app/decorators/alchemy/element_editor.rb +39 -0
  68. data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
  69. data/app/helpers/alchemy/admin/base_helper.rb +36 -35
  70. data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
  71. data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
  72. data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
  73. data/app/helpers/alchemy/admin/form_helper.rb +1 -1
  74. data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
  75. data/app/helpers/alchemy/admin/pages_helper.rb +12 -12
  76. data/app/helpers/alchemy/admin/pictures_helper.rb +4 -6
  77. data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
  78. data/app/helpers/alchemy/base_helper.rb +13 -8
  79. data/app/helpers/alchemy/elements_block_helper.rb +2 -31
  80. data/app/helpers/alchemy/elements_helper.rb +12 -58
  81. data/app/helpers/alchemy/pages_helper.rb +24 -174
  82. data/app/helpers/alchemy/url_helper.rb +2 -1
  83. data/app/mailers/alchemy/base_mailer.rb +1 -1
  84. data/app/mailers/alchemy/messages_mailer.rb +1 -1
  85. data/app/models/alchemy/attachment.rb +20 -18
  86. data/app/models/alchemy/base_record.rb +2 -5
  87. data/app/models/alchemy/content.rb +33 -52
  88. data/app/models/alchemy/content/factory.rb +24 -31
  89. data/app/models/alchemy/element.rb +45 -53
  90. data/app/models/alchemy/element/definitions.rb +4 -4
  91. data/app/models/alchemy/element/element_contents.rb +9 -6
  92. data/app/models/alchemy/element/element_essences.rb +4 -3
  93. data/app/models/alchemy/element/presenters.rb +3 -2
  94. data/app/models/alchemy/element_to_page.rb +1 -1
  95. data/app/models/alchemy/essence_boolean.rb +1 -3
  96. data/app/models/alchemy/essence_date.rb +2 -3
  97. data/app/models/alchemy/essence_file.rb +4 -4
  98. data/app/models/alchemy/essence_html.rb +1 -3
  99. data/app/models/alchemy/essence_link.rb +1 -3
  100. data/app/models/alchemy/essence_node.rb +18 -0
  101. data/app/models/alchemy/essence_page.rb +3 -16
  102. data/app/models/alchemy/essence_picture.rb +17 -16
  103. data/app/models/alchemy/essence_picture_view.rb +7 -6
  104. data/app/models/alchemy/essence_richtext.rb +1 -3
  105. data/app/models/alchemy/essence_select.rb +1 -3
  106. data/app/models/alchemy/essence_text.rb +0 -2
  107. data/app/models/alchemy/folded_page.rb +1 -0
  108. data/app/models/alchemy/language.rb +21 -35
  109. data/app/models/alchemy/language/code.rb +4 -4
  110. data/app/models/alchemy/legacy_page_url.rb +1 -1
  111. data/app/models/alchemy/message.rb +3 -3
  112. data/app/models/alchemy/node.rb +55 -9
  113. data/app/models/alchemy/page.rb +53 -123
  114. data/app/models/alchemy/page/fixed_attributes.rb +3 -2
  115. data/app/models/alchemy/page/page_elements.rb +35 -44
  116. data/app/models/alchemy/page/page_naming.rb +20 -70
  117. data/app/models/alchemy/page/page_natures.rb +7 -34
  118. data/app/models/alchemy/page/page_scopes.rb +23 -29
  119. data/app/models/alchemy/page/url_path.rb +64 -0
  120. data/app/models/alchemy/picture.rb +40 -30
  121. data/app/models/alchemy/picture/preprocessor.rb +26 -0
  122. data/app/models/alchemy/picture/transformations.rb +9 -7
  123. data/app/models/alchemy/picture/url.rb +5 -5
  124. data/app/models/alchemy/site.rb +6 -36
  125. data/app/models/alchemy/site/layout.rb +2 -2
  126. data/app/models/concerns/alchemy/touch_elements.rb +24 -0
  127. data/app/serializers/alchemy/content_serializer.rb +0 -3
  128. data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
  129. data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
  130. data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
  131. data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
  132. data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
  133. data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
  134. data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
  135. data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
  136. data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
  137. data/app/serializers/alchemy/node_serializer.rb +14 -0
  138. data/app/serializers/alchemy/page_serializer.rb +2 -1
  139. data/app/serializers/alchemy/page_tree_serializer.rb +11 -14
  140. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
  141. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
  142. data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
  143. data/app/views/alchemy/admin/contents/create.js.erb +1 -3
  144. data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
  145. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  146. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  147. data/app/views/alchemy/admin/elements/index.html.erb +3 -3
  148. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
  149. data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
  150. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
  151. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  152. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
  153. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  154. data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
  155. data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
  156. data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
  157. data/app/views/alchemy/admin/languages/index.html.erb +23 -4
  158. data/app/views/alchemy/admin/languages/new.html.erb +1 -0
  159. data/app/views/alchemy/admin/layoutpages/index.html.erb +6 -2
  160. data/app/views/alchemy/admin/nodes/_form.html.erb +23 -15
  161. data/app/views/alchemy/admin/nodes/_node.html.erb +5 -19
  162. data/app/views/alchemy/admin/nodes/index.html.erb +3 -18
  163. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
  164. data/app/views/alchemy/admin/pages/_form.html.erb +1 -2
  165. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
  166. data/app/views/alchemy/admin/pages/_page.html.erb +14 -25
  167. data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
  168. data/app/views/alchemy/admin/pages/_sitemap.html.erb +6 -0
  169. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  170. data/app/views/alchemy/admin/pages/info.html.erb +0 -9
  171. data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
  172. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
  173. data/app/views/alchemy/admin/partials/_routes.html.erb +8 -0
  174. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
  175. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  176. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
  177. data/app/views/alchemy/admin/pictures/index.html.erb +18 -3
  178. data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
  179. data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
  180. data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
  181. data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
  182. data/app/views/alchemy/admin/sites/index.html.erb +21 -9
  183. data/app/views/alchemy/admin/sites/new.html.erb +1 -0
  184. data/app/views/alchemy/admin/tags/index.html.erb +2 -2
  185. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
  186. data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
  187. data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
  188. data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
  189. data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
  190. data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
  191. data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
  192. data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
  193. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
  194. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
  195. data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
  196. data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
  197. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
  198. data/app/views/alchemy/pages/show.rss.builder +3 -2
  199. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  200. data/babel.config.js +12 -0
  201. data/bin/rails +5 -4
  202. data/config/alchemy/config.yml +23 -22
  203. data/config/brakeman.ignore +1 -1
  204. data/config/initializers/assets.rb +2 -1
  205. data/config/initializers/dragonfly.rb +2 -1
  206. data/config/initializers/mime_types.rb +1 -0
  207. data/config/initializers/mini_profiler.rb +3 -2
  208. data/config/initializers/simple_form.rb +6 -6
  209. data/config/locales/alchemy.en.yml +37 -14
  210. data/config/routes.rb +32 -28
  211. data/config/spring.rb +3 -2
  212. data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
  213. data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
  214. data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
  215. data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
  216. data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
  217. data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
  218. data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
  219. data/lib/alchemy/admin/locale.rb +3 -1
  220. data/lib/alchemy/admin/preview_url.rb +85 -0
  221. data/lib/alchemy/auth_accessors.rb +8 -7
  222. data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
  223. data/lib/alchemy/config.rb +26 -2
  224. data/lib/alchemy/configuration_methods.rb +3 -1
  225. data/lib/alchemy/controller_actions.rb +6 -5
  226. data/lib/alchemy/deprecation.rb +2 -1
  227. data/lib/alchemy/elements_finder.rb +5 -5
  228. data/lib/alchemy/engine.rb +23 -8
  229. data/lib/alchemy/errors.rb +0 -7
  230. data/lib/alchemy/essence.rb +17 -16
  231. data/lib/alchemy/filetypes.rb +5 -5
  232. data/lib/alchemy/forms/builder.rb +4 -4
  233. data/lib/alchemy/hints.rb +1 -1
  234. data/lib/alchemy/i18n.rb +2 -1
  235. data/lib/alchemy/modules.rb +12 -12
  236. data/lib/alchemy/name_conversions.rb +5 -5
  237. data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
  238. data/lib/alchemy/page_layout.rb +15 -12
  239. data/lib/alchemy/paths.rb +1 -1
  240. data/lib/alchemy/permissions.rb +7 -6
  241. data/lib/alchemy/resource.rb +23 -13
  242. data/lib/alchemy/resources_helper.rb +12 -18
  243. data/lib/alchemy/routing_constraints.rb +1 -1
  244. data/lib/alchemy/seeder.rb +42 -14
  245. data/lib/alchemy/shell.rb +13 -10
  246. data/lib/alchemy/taggable.rb +1 -0
  247. data/lib/alchemy/tasks/tidy.rb +4 -3
  248. data/lib/alchemy/test_support/config_stubbing.rb +1 -0
  249. data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
  250. data/lib/alchemy/test_support/factories.rb +1 -1
  251. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
  252. data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
  253. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
  254. data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
  255. data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
  256. data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
  257. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
  258. data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
  259. data/lib/alchemy/test_support/factories/language_factory.rb +21 -14
  260. data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
  261. data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
  262. data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
  263. data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
  264. data/lib/alchemy/test_support/integration_helpers.rb +1 -0
  265. data/lib/alchemy/test_support/shared_contexts.rb +5 -4
  266. data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
  267. data/lib/alchemy/tinymce.rb +15 -13
  268. data/lib/alchemy/upgrader.rb +8 -7
  269. data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
  270. data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
  271. data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
  272. data/lib/alchemy/version.rb +1 -1
  273. data/lib/alchemy_cms.rb +52 -50
  274. data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
  275. data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
  276. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
  277. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
  278. data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
  279. data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
  280. data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
  281. data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
  282. data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
  283. data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
  284. data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
  285. data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
  286. data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
  287. data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
  288. data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
  289. data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
  290. data/lib/generators/alchemy/install/install_generator.rb +110 -0
  291. data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
  292. data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
  293. data/lib/generators/alchemy/install/templates/menus.yml.tt +8 -0
  294. data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
  295. data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +5 -5
  296. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
  297. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
  298. data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
  299. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
  300. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +2 -2
  301. data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +2 -2
  302. data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
  303. data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
  304. data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
  305. data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
  306. data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
  307. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
  308. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
  309. data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
  310. data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
  311. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
  312. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
  313. data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
  314. data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
  315. data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
  316. data/lib/tasks/alchemy/db.rake +3 -19
  317. data/lib/tasks/alchemy/install.rake +3 -2
  318. data/lib/tasks/alchemy/tidy.rake +9 -8
  319. data/lib/tasks/alchemy/upgrade.rake +28 -105
  320. data/package.json +45 -0
  321. data/package/admin.js +14 -0
  322. data/package/src/__tests__/i18n.spec.js +70 -0
  323. data/package/src/i18n.js +48 -0
  324. data/package/src/node_tree.js +72 -0
  325. data/package/src/translations.js +32 -0
  326. data/package/src/utils/__tests__/ajax.spec.js +124 -0
  327. data/package/src/utils/__tests__/events.spec.js +38 -0
  328. data/package/src/utils/ajax.js +48 -0
  329. data/package/src/utils/events.js +16 -0
  330. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  331. data/vendor/assets/fonts/fa-regular-400.svg +798 -358
  332. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  333. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  334. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  335. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  336. data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
  337. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  338. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  339. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  340. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
  341. data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
  342. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
  343. data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
  344. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
  345. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
  346. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
  347. data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
  348. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
  349. data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
  350. data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
  351. metadata +131 -83
  352. data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
  353. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
  354. data/app/helpers/alchemy/essences_helper.rb +0 -119
  355. data/app/models/concerns/alchemy/content_touching.rb +0 -23
  356. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
  357. data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
  358. data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -33
  359. data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
  360. data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
  361. data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
  362. data/app/views/alchemy/navigation/_link.html.erb +0 -19
  363. data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
  364. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
  365. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
  366. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
  367. data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
  368. data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
  369. data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
  370. data/lib/alchemy/ssl_protection.rb +0 -32
  371. data/lib/alchemy/tasks/helpers.rb +0 -81
  372. data/lib/alchemy/test_support/controller_requests.rb +0 -93
  373. data/lib/alchemy/upgrader/four_point_four.rb +0 -52
  374. data/lib/alchemy/upgrader/four_point_one.rb +0 -42
  375. data/lib/alchemy/upgrader/four_point_two.rb +0 -85
  376. data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
  377. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
  378. data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
  379. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
  380. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
  381. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
  382. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
  383. data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
  384. data/lib/tasks/alchemy/convert.rake +0 -95
  385. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
  386. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ class ElementEditor < SimpleDelegator
5
+ alias_method :element, :__getobj__
6
+
7
+ def to_partial_path
8
+ "alchemy/admin/elements/element"
9
+ end
10
+
11
+ # CSS classes for the element editor partial.
12
+ def css_classes
13
+ [
14
+ "element-editor",
15
+ content_definitions.present? ? "with-contents" : "without-contents",
16
+ nestable_elements.any? ? "nestable" : "not-nestable",
17
+ taggable? ? "taggable" : "not-taggable",
18
+ folded ? "folded" : "expanded",
19
+ compact? ? "compact" : nil,
20
+ fixed? ? "is-fixed" : "not-fixed",
21
+ ].join(" ")
22
+ end
23
+
24
+ # Tells us, if we should show the element footer and form inputs.
25
+ def editable?
26
+ return false if folded?
27
+
28
+ content_definitions.present? || taggable?
29
+ end
30
+
31
+ # Fixes Rails partial renderer calling to_model on the object
32
+ # which reveals the delegated element instead of this decorator.
33
+ def respond_to?(method_name)
34
+ return false if method_name == :to_model
35
+
36
+ super
37
+ end
38
+ end
39
+ end
@@ -6,17 +6,17 @@ module Alchemy
6
6
  include Alchemy::Admin::BaseHelper
7
7
 
8
8
  def mime_to_human(mime)
9
- Alchemy.t(mime, scope: 'mime_types', default: Alchemy.t(:document))
9
+ Alchemy.t(mime, scope: "mime_types", default: Alchemy.t(:document))
10
10
  end
11
11
 
12
12
  def attachment_preview_size(attachment)
13
13
  case attachment.icon_css_class
14
- when 'image' then '600x475'
15
- when 'audio' then '600x190'
16
- when 'video' then '600x485'
17
- when 'pdf' then '600x500'
14
+ when "image" then "600x475"
15
+ when "audio" then "600x190"
16
+ when "video" then "600x485"
17
+ when "pdf" then "600x500"
18
18
  else
19
- '600x145'
19
+ "600x145"
20
20
  end
21
21
  end
22
22
  end
@@ -23,7 +23,7 @@ module Alchemy
23
23
  def current_alchemy_user_name
24
24
  name = current_alchemy_user.try(:alchemy_display_name)
25
25
  if name.present?
26
- content_tag :span, "#{Alchemy.t('Logged in as')} #{name}", class: 'current-user-name'
26
+ content_tag :span, "#{Alchemy.t("Logged in as")} #{name}", class: "current-user-name"
27
27
  end
28
28
  end
29
29
 
@@ -55,7 +55,7 @@ module Alchemy
55
55
  default_options = {modal: true}
56
56
  options = default_options.merge(options)
57
57
  link_to content, url,
58
- html_options.merge('data-alchemy-dialog' => options.to_json)
58
+ html_options.merge("data-alchemy-dialog" => options.to_json)
59
59
  end
60
60
 
61
61
  # Used for translations selector in Alchemy cockpit user settings.
@@ -99,13 +99,13 @@ module Alchemy
99
99
  #
100
100
  def js_filter_field(items, options = {})
101
101
  options = {
102
- class: 'js_filter_field',
103
- data: {'alchemy-list-filter' => items}
102
+ class: "js_filter_field",
103
+ data: {"alchemy-list-filter" => items},
104
104
  }.merge(options)
105
- content_tag(:div, class: 'js_filter_field_box') do
105
+ content_tag(:div, class: "js_filter_field_box") do
106
106
  concat text_field_tag(nil, nil, options)
107
107
  concat render_icon(:search)
108
- concat link_to(render_icon(:times, size: 'xs'), '', class: 'js_filter_field_clear', title: Alchemy.t(:click_to_show_all))
108
+ concat link_to(render_icon(:times, size: "xs"), "", class: "js_filter_field_clear", title: Alchemy.t(:click_to_show_all))
109
109
  end
110
110
  end
111
111
 
@@ -136,12 +136,12 @@ module Alchemy
136
136
  def link_to_confirm_dialog(link_string = "", message = "", url = "", html_options = {})
137
137
  link_to(link_string, url,
138
138
  html_options.merge(
139
- 'data-alchemy-confirm-delete' => {
139
+ "data-alchemy-confirm-delete" => {
140
140
  title: Alchemy.t(:please_confirm),
141
141
  message: message,
142
142
  ok_label: Alchemy.t("Yes"),
143
- cancel_label: Alchemy.t("No")
144
- }.to_json
143
+ cancel_label: Alchemy.t("No"),
144
+ }.to_json,
145
145
  )
146
146
  )
147
147
  end
@@ -170,10 +170,10 @@ module Alchemy
170
170
  message: Alchemy.t(:confirm_to_proceed),
171
171
  ok_label: Alchemy.t("Yes"),
172
172
  title: Alchemy.t(:please_confirm),
173
- cancel_label: Alchemy.t("No")
173
+ cancel_label: Alchemy.t("No"),
174
174
  }.merge(options)
175
- form_tag url, {method: html_options.delete(:method), class: 'button-with-confirm'} do
176
- button_tag value, html_options.merge('data-alchemy-confirm' => options.to_json)
175
+ form_tag url, {method: html_options.delete(:method), class: "button-with-confirm"} do
176
+ button_tag value, html_options.merge("data-alchemy-confirm" => options.to_json)
177
177
  end
178
178
  end
179
179
 
@@ -188,18 +188,18 @@ module Alchemy
188
188
  #
189
189
  def delete_button(url, options = {}, html_options = {})
190
190
  options = {
191
- title: Alchemy.t('Delete'),
192
- message: Alchemy.t('Are you sure?'),
193
- icon: :minus
191
+ title: Alchemy.t("Delete"),
192
+ message: Alchemy.t("Are you sure?"),
193
+ icon: :minus,
194
194
  }.merge(options)
195
195
  button_with_confirm(
196
196
  render_icon(options[:icon]),
197
197
  url, {
198
- message: options[:message]
198
+ message: options[:message],
199
199
  }, {
200
- method: 'delete',
200
+ method: "delete",
201
201
  title: options[:title],
202
- class: "icon_button #{html_options.delete(:class)}".strip
202
+ class: "icon_button #{html_options.delete(:class)}".strip,
203
203
  }.merge(html_options)
204
204
  )
205
205
  end
@@ -259,11 +259,11 @@ module Alchemy
259
259
  active: false,
260
260
  link_options: {},
261
261
  dialog_options: {},
262
- loading_indicator: false
262
+ loading_indicator: false,
263
263
  }.merge(options.symbolize_keys)
264
264
  button = render(
265
- 'alchemy/admin/partials/toolbar_button',
266
- options: options
265
+ "alchemy/admin/partials/toolbar_button",
266
+ options: options,
267
267
  )
268
268
  if options[:skip_permission_check] || can?(*permission_from_options(options))
269
269
  button
@@ -302,13 +302,13 @@ module Alchemy
302
302
  def toolbar(options = {})
303
303
  defaults = {
304
304
  buttons: [],
305
- search: true
305
+ search: true,
306
306
  }
307
307
  options = defaults.merge(options)
308
308
  content_for(:toolbar) do
309
309
  content = <<-CONTENT.strip_heredoc
310
310
  #{options[:buttons].map { |button_options| toolbar_button(button_options) }.join}
311
- #{render('alchemy/admin/partials/search_form', url: options[:search_url]) if options[:search]}
311
+ #{render("alchemy/admin/partials/search_form", url: options[:search_url]) if options[:search]}
312
312
  CONTENT
313
313
  content.html_safe
314
314
  end
@@ -360,7 +360,7 @@ module Alchemy
360
360
  # The value the input displays. If you pass a String its parsed with +Time.parse+
361
361
  #
362
362
  def alchemy_datepicker(object, method, html_options = {})
363
- type = html_options.delete(:type) || 'date'
363
+ type = html_options.delete(:type) || "date"
364
364
  date = html_options.delete(:value) || object.send(method.to_sym).presence
365
365
  date = Time.zone.parse(date) if date.is_a?(String)
366
366
  value = date ? date.iso8601 : nil
@@ -373,9 +373,10 @@ module Alchemy
373
373
  # The model class needs to include the hints module
374
374
  def render_hint_for(element)
375
375
  return unless element.has_hint?
376
- content_tag :span, class: 'hint-with-icon' do
377
- render_icon('question-circle') +
378
- content_tag(:span, element.hint.html_safe, class: 'hint-bubble')
376
+
377
+ content_tag :span, class: "hint-with-icon" do
378
+ render_icon("question-circle") +
379
+ content_tag(:span, element.hint.html_safe, class: "hint-bubble")
379
380
  end
380
381
  end
381
382
 
@@ -385,7 +386,7 @@ module Alchemy
385
386
  controller_name,
386
387
  action_name,
387
388
  content_for(:main_menu_style),
388
- content_for(:alchemy_body_class)
389
+ content_for(:alchemy_body_class),
389
390
  ].compact
390
391
  end
391
392
 
@@ -404,7 +405,7 @@ module Alchemy
404
405
 
405
406
  # Returns the regular expression used for external url validation in link dialog.
406
407
  def link_url_regexp
407
- Alchemy::Config.get(:format_matchers)['link_url'] || /^(mailto:|\/|[a-z]+:\/\/)/
408
+ Alchemy::Config.get(:format_matchers)["link_url"] || /^(mailto:|\/|[a-z]+:\/\/)/
408
409
  end
409
410
 
410
411
  # Renders a hint with tooltip
@@ -417,9 +418,9 @@ module Alchemy
417
418
  # @param icon: 'exclamation-triangle' [String] - Icon name
418
419
  #
419
420
  # @return [String]
420
- def hint_with_tooltip(text, icon: 'exclamation-triangle')
421
- content_tag :span, class: 'hint-with-icon' do
422
- render_icon(icon) + content_tag(:span, text, class: 'hint-bubble')
421
+ def hint_with_tooltip(text, icon: "exclamation-triangle")
422
+ content_tag :span, class: "hint-with-icon" do
423
+ render_icon(icon) + content_tag(:span, text, class: "hint-bubble")
423
424
  end
424
425
  end
425
426
 
@@ -427,7 +428,7 @@ module Alchemy
427
428
  # that explains the user that the page layout is missing
428
429
  def page_layout_missing_warning
429
430
  hint_with_tooltip(
430
- Alchemy.t(:page_definition_missing)
431
+ Alchemy.t(:page_definition_missing),
431
432
  )
432
433
  end
433
434
 
@@ -442,10 +443,10 @@ module Alchemy
442
443
  end
443
444
 
444
445
  def permission_array_from_url(options)
445
- action_controller = options[:url].gsub(/\A\//, '').split('/')
446
+ action_controller = options[:url].gsub(/\A\//, "").split("/")
446
447
  [
447
448
  action_controller.last.to_sym,
448
- action_controller[0..action_controller.length - 2].join('_').to_sym
449
+ action_controller[0..action_controller.length - 2].join("_").to_sym,
449
450
  ]
450
451
  end
451
452
  end
@@ -13,7 +13,7 @@ module Alchemy
13
13
  #
14
14
  def render_content_name(content)
15
15
  if content.blank?
16
- warning('Content is nil')
16
+ warning("Content is nil")
17
17
  return
18
18
  end
19
19
 
@@ -23,7 +23,7 @@ module Alchemy
23
23
  warning("Content #{content.name} is missing its definition")
24
24
 
25
25
  icon = hint_with_tooltip(
26
- Alchemy.t(:content_definition_missing)
26
+ Alchemy.t(:content_definition_missing),
27
27
  )
28
28
 
29
29
  content_name = "#{icon} #{content_name}".html_safe
@@ -39,7 +39,7 @@ module Alchemy
39
39
  # Renders the label and a remove link for a content.
40
40
  def content_label(content)
41
41
  content_tag :label, for: content.form_field_id do
42
- [render_hint_for(content), render_content_name(content)].compact.join('&nbsp;').html_safe
42
+ [render_hint_for(content), render_content_name(content)].compact.join("&nbsp;").html_safe
43
43
  end
44
44
  end
45
45
  end
@@ -3,76 +3,9 @@
3
3
  module Alchemy
4
4
  module Admin
5
5
  module ElementsHelper
6
- include Alchemy::ElementsBlockHelper
7
- include Alchemy::Admin::BaseHelper
8
6
  include Alchemy::Admin::ContentsHelper
9
7
  include Alchemy::Admin::EssencesHelper
10
8
 
11
- # Renders a {Alchemy::Element} editor partial.
12
- #
13
- # A element editor partial is the form presented to the content author in page edit mode.
14
- #
15
- # The partial is located in <tt>app/views/alchemy/elements</tt>.
16
- #
17
- # == Partial naming
18
- #
19
- # The partials have to be named after the name of the element as defined in the <tt>elements.yml</tt> file and has to be suffixed with <tt>_editor</tt>.
20
- #
21
- # === Example
22
- #
23
- # Given a headline element
24
- #
25
- # # elements.yml
26
- # - name: headline
27
- # contents:
28
- # - name: text
29
- # type: EssenceText
30
- #
31
- # Then your element editor partial has to be named:
32
- #
33
- # app/views/alchemy/elements/_headline_editor.html.{erb|haml|slim}
34
- #
35
- # === Element partials generator
36
- #
37
- # You can use this handy generator to let Alchemy generate the partials for you:
38
- #
39
- # $ rails generate alchemy:elements --skip
40
- #
41
- # == Usage
42
- #
43
- # <%= render_editor(Alchemy::Element.published.named(:headline).first) %>
44
- #
45
- # @param [Alchemy::Element] element
46
- # The element you want to render the editor for
47
- #
48
- # @note If the partial is not found
49
- # <tt>alchemy/elements/_editor_not_found.html.erb</tt> gets rendered.
50
- #
51
- # @deprecated Using element editor partials is deprecated and will be removed in Alchemy 5.0
52
- def render_editor(element)
53
- if element.nil?
54
- warning('Element is nil')
55
- render "alchemy/elements/editor_not_found", {name: 'nil'}
56
- return
57
- end
58
- Alchemy::Deprecation.warn <<~WARN
59
- Using element editor partials is deprecated and will be removed in Alchemy 5.0.
60
- You can delete the `app/views/alchemy/elements/_#{element.name}_editor` partial
61
- and Alchemy will render the content editors for you.
62
- WARN
63
-
64
- render "alchemy/elements/#{element.name}_editor", element: element
65
- rescue ActionView::MissingTemplate => e
66
- warning(%(
67
- Element editor partial not found for #{element.name}.\n
68
- #{e}
69
- ))
70
- render "alchemy/elements/editor_not_found", {
71
- name: element.name,
72
- error: "Element editor partial not found.<br>Use <code>rails generate alchemy:elements</code> to generate it."
73
- }
74
- end
75
-
76
9
  # Returns an elements array for select helper.
77
10
  #
78
11
  # @param [Array] elements definitions
@@ -80,32 +13,14 @@ module Alchemy
80
13
  #
81
14
  def elements_for_select(elements)
82
15
  return [] if elements.nil?
16
+
83
17
  elements.collect do |e|
84
18
  [
85
- Element.display_name_for(e['name']),
86
- e['name']
19
+ Element.display_name_for(e["name"]),
20
+ e["name"],
87
21
  ]
88
22
  end
89
23
  end
90
-
91
- # CSS classes for the element editor partial.
92
- def element_editor_classes(element)
93
- [
94
- 'element-editor',
95
- element.content_definitions.present? ? 'with-contents' : 'without-contents',
96
- element.nestable_elements.any? ? 'nestable' : 'not-nestable',
97
- element.taggable? ? 'taggable' : 'not-taggable',
98
- element.folded ? 'folded' : 'expanded',
99
- element.compact? ? 'compact' : nil,
100
- element.fixed? ? 'is-fixed' : 'not-fixed'
101
- ].join(' ')
102
- end
103
-
104
- # Tells us, if we should show the element footer and form inputs.
105
- def element_editable?(element)
106
- return false if element.folded?
107
- element.content_definitions.present? || element.taggable?
108
- end
109
24
  end
110
25
  end
111
26
  end
@@ -3,138 +3,29 @@
3
3
  module Alchemy
4
4
  module Admin
5
5
  module EssencesHelper
6
- include Alchemy::EssencesHelper
7
- include Alchemy::Admin::ContentsHelper
8
-
9
- # Renders the Content editor partial from the given Content.
10
- # For options see -> render_essence
11
- # @deprecated
12
- def render_essence_editor(content, options = {}, html_options = {})
13
- if !options.empty?
14
- Alchemy::Deprecation.warn <<~WARN
15
- Passing options to `render_essence_editor` is deprecated and will be removed from Alchemy 5.0.
16
- Add your static `#{options.keys}` options to the `#{content.name}` content definitions `settings` of `#{content.element&.name}` element.
17
- For dynamic options consider adding your own essence class.
18
- WARN
19
- end
20
- if !html_options.empty?
21
- Alchemy::Deprecation.warn <<~WARN
22
- Passing html_options to `render_essence_editor` is deprecated and will be removed in Alchemy 5.0 without replacement.
23
- WARN
24
- end
25
- render_essence(content, :editor, {for_editor: options}, html_options)
26
- end
27
- deprecate :render_essence_editor, deprecator: Alchemy::Deprecation
28
-
29
- # Renders the Content editor partial found in views/contents/ for the content with name inside the passed Element.
30
- # For options see -> render_essence
31
- #
32
- # Content creation on the fly:
33
- #
34
- # If you update the elements.yml file after creating an element this helper displays a error message with an option to create the content.
35
- # @deprecated
36
- def render_essence_editor_by_name(element, name, options = {}, html_options = {})
37
- if element.blank?
38
- return warning('Element is nil', Alchemy.t(:no_element_given))
39
- end
40
- content = element.content_by_name(name)
41
- if content.nil?
42
- render_missing_content(element, name, options)
43
- else
44
- render_essence_editor(content, options, html_options)
45
- end
46
- end
47
- deprecate :render_essence_editor_by_name, deprecator: Alchemy::Deprecation
48
-
49
- # Returns all public pages from current language as an option tags string suitable or the Rails +select_tag+ helper.
50
- #
51
- # @param [Array]
52
- # A collection of pages so it only returns these pages and does not query the database.
53
- # @param [String]
54
- # Pass a +Page#name+ or +Page#id+ as selected item to the +options_for_select+ helper.
55
- # @param [String]
56
- # Used as prompt message in the select tag
57
- # @param [Symbol]
58
- # Method that is called on the page object to get the value that is passed with the params of the form.
59
- # @deprecated
60
- def pages_for_select(pages = nil, selected = nil, prompt = "Choose page", page_attribute = :id)
61
- values = [[Alchemy.t(prompt), ""]]
62
- pages ||= begin
63
- nested = true
64
- Language.current.pages.published.order(:lft)
65
- end
66
- values += pages_attributes_for_select(pages, page_attribute, nested)
67
- options_for_select(values, selected.to_s)
68
- end
69
- deprecate :pages_for_select, deprecator: Alchemy::Deprecation
70
-
71
- # Renders the missing content partial
72
- # @deprecated
73
- def render_missing_content(element, name, options)
74
- render 'alchemy/admin/contents/missing', {element: element, name: name, options: options}
75
- end
76
- deprecate :render_missing_content, deprecator: Alchemy::Deprecation
77
-
78
6
  # Renders a thumbnail for given EssencePicture content with correct cropping and size
79
- def essence_picture_thumbnail(content, options = {})
7
+ def essence_picture_thumbnail(content)
80
8
  picture = content.ingredient
81
9
  essence = content.essence
82
10
 
83
11
  return if picture.nil?
84
12
 
85
13
  image_tag(
86
- essence.thumbnail_url(options),
14
+ essence.thumbnail_url,
87
15
  alt: picture.name,
88
- class: 'img_paddingtop',
89
- title: Alchemy.t(:image_name) + ": #{picture.name}"
16
+ class: "img_paddingtop",
17
+ title: Alchemy.t(:image_name) + ": #{picture.name}",
90
18
  )
91
19
  end
92
20
 
93
21
  # Size value for edit picture dialog
94
- def edit_picture_dialog_size(content, options = {})
95
- if content.settings_value(:caption_as_textarea, options)
96
- content.settings_value(:sizes, options) ? '380x320' : '380x300'
97
- else
98
- content.settings_value(:sizes, options) ? '380x290' : '380x255'
99
- end
100
- end
101
-
102
- private
103
-
104
- # Returns an Array with page attributes for select options
105
- #
106
- # @param [Array]
107
- # The pages
108
- # @param [String || Symbol]
109
- # The attribute that is used as value
110
- # @param [Boolean] (false)
111
- # Should the name be indented or not
112
- #
113
- def pages_attributes_for_select(pages, page_attribute, indent = false)
114
- pages.map do |page|
115
- [
116
- page_name_attribute_for_select(page, indent),
117
- page.send(page_attribute).to_s
118
- ]
119
- end
120
- end
121
- deprecate :pages_attributes_for_select, deprecator: Alchemy::Deprecation
122
-
123
- # Returns the page name for pages_for_select helper
124
- #
125
- # @param [Alchemy::Page]
126
- # The page
127
- # @param [Boolean] (false)
128
- # Should the page be indented or not
129
- #
130
- def page_name_attribute_for_select(page, indent = false)
131
- if indent
132
- ("&nbsp;&nbsp;" * (page.depth - 1) + page.name).html_safe
22
+ def edit_picture_dialog_size(content)
23
+ if content.settings[:caption_as_textarea]
24
+ content.settings[:sizes] ? "380x320" : "380x300"
133
25
  else
134
- page.name
26
+ content.settings[:sizes] ? "380x290" : "380x255"
135
27
  end
136
28
  end
137
- deprecate :page_name_attribute_for_select, deprecator: Alchemy::Deprecation
138
29
  end
139
30
  end
140
31
  end