alchemy_cms 5.2.0 → 6.0.0.b3

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 (289) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +6 -14
  3. data/.gitignore +0 -1
  4. data/.hound.yml +1 -1
  5. data/.rubocop.yml +46 -4
  6. data/CHANGELOG.md +114 -5
  7. data/Gemfile +8 -1
  8. data/README.md +5 -2
  9. data/alchemy_cms.gemspec +78 -65
  10. data/app/assets/javascripts/alchemy/admin.js +0 -2
  11. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -27
  12. data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +2 -1
  13. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +1 -1
  14. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -25
  15. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +1 -1
  16. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +2 -0
  17. data/app/assets/javascripts/alchemy/alchemy.fixed_elements.js +1 -1
  18. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +3 -1
  19. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +1 -1
  20. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +40 -27
  21. data/app/assets/javascripts/alchemy/templates/node_folder.hbs +1 -1
  22. data/app/assets/stylesheets/alchemy/_extends.scss +15 -2
  23. data/app/assets/stylesheets/alchemy/admin.scss +1 -1
  24. data/app/assets/stylesheets/alchemy/archive.scss +20 -5
  25. data/app/assets/stylesheets/alchemy/buttons.scss +0 -4
  26. data/app/assets/stylesheets/alchemy/elements.scss +73 -61
  27. data/app/assets/stylesheets/alchemy/images.scss +8 -0
  28. data/app/assets/stylesheets/alchemy/node-select.scss +4 -3
  29. data/app/assets/stylesheets/alchemy/page-select.scss +1 -0
  30. data/app/controllers/alchemy/admin/attachments_controller.rb +8 -4
  31. data/app/controllers/alchemy/admin/base_controller.rb +5 -7
  32. data/app/controllers/alchemy/admin/elements_controller.rb +59 -34
  33. data/app/controllers/alchemy/admin/essence_audios_controller.rb +30 -0
  34. data/app/controllers/alchemy/admin/essence_files_controller.rb +0 -14
  35. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -79
  36. data/app/controllers/alchemy/admin/essence_videos_controller.rb +33 -0
  37. data/app/controllers/alchemy/admin/ingredients_controller.rb +30 -0
  38. data/app/controllers/alchemy/admin/layoutpages_controller.rb +0 -1
  39. data/app/controllers/alchemy/admin/pages_controller.rb +7 -22
  40. data/app/controllers/alchemy/admin/pictures_controller.rb +56 -17
  41. data/app/controllers/alchemy/admin/resources_controller.rb +84 -10
  42. data/app/controllers/alchemy/api/elements_controller.rb +13 -4
  43. data/app/controllers/alchemy/api/pages_controller.rb +4 -3
  44. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +13 -3
  45. data/app/controllers/concerns/alchemy/admin/crop_action.rb +26 -0
  46. data/app/decorators/alchemy/element_editor.rb +26 -1
  47. data/app/decorators/alchemy/ingredient_editor.rb +158 -0
  48. data/app/helpers/alchemy/admin/elements_helper.rb +1 -0
  49. data/app/helpers/alchemy/admin/essences_helper.rb +1 -1
  50. data/app/helpers/alchemy/admin/ingredients_helper.rb +42 -0
  51. data/app/helpers/alchemy/elements_block_helper.rb +23 -6
  52. data/app/helpers/alchemy/elements_helper.rb +12 -5
  53. data/app/helpers/alchemy/pages_helper.rb +3 -11
  54. data/app/jobs/alchemy/base_job.rb +11 -0
  55. data/app/jobs/alchemy/publish_page_job.rb +11 -0
  56. data/app/models/alchemy/attachment.rb +24 -7
  57. data/app/models/alchemy/content.rb +1 -6
  58. data/app/models/alchemy/content/factory.rb +23 -27
  59. data/app/models/alchemy/element.rb +39 -72
  60. data/app/models/alchemy/element/definitions.rb +29 -27
  61. data/app/models/alchemy/element/element_contents.rb +131 -122
  62. data/app/models/alchemy/element/element_essences.rb +111 -98
  63. data/app/models/alchemy/element/element_ingredients.rb +184 -0
  64. data/app/models/alchemy/element/presenters.rb +104 -85
  65. data/app/models/alchemy/elements_repository.rb +126 -0
  66. data/app/models/alchemy/essence_audio.rb +12 -0
  67. data/app/models/alchemy/essence_headline.rb +40 -0
  68. data/app/models/alchemy/essence_picture.rb +4 -116
  69. data/app/models/alchemy/essence_richtext.rb +12 -0
  70. data/app/models/alchemy/essence_video.rb +12 -0
  71. data/app/models/alchemy/image_cropper_settings.rb +87 -0
  72. data/app/models/alchemy/ingredient.rb +183 -0
  73. data/app/models/alchemy/ingredient_validator.rb +97 -0
  74. data/app/models/alchemy/ingredients/audio.rb +29 -0
  75. data/app/models/alchemy/ingredients/boolean.rb +21 -0
  76. data/app/models/alchemy/ingredients/datetime.rb +20 -0
  77. data/app/models/alchemy/ingredients/file.rb +30 -0
  78. data/app/models/alchemy/ingredients/headline.rb +42 -0
  79. data/app/models/alchemy/ingredients/html.rb +19 -0
  80. data/app/models/alchemy/ingredients/link.rb +16 -0
  81. data/app/models/alchemy/ingredients/node.rb +23 -0
  82. data/app/models/alchemy/ingredients/page.rb +23 -0
  83. data/app/models/alchemy/ingredients/picture.rb +41 -0
  84. data/app/models/alchemy/ingredients/richtext.rb +57 -0
  85. data/app/models/alchemy/ingredients/select.rb +10 -0
  86. data/app/models/alchemy/ingredients/text.rb +17 -0
  87. data/app/models/alchemy/ingredients/video.rb +33 -0
  88. data/app/models/alchemy/language.rb +0 -11
  89. data/app/models/alchemy/page.rb +76 -33
  90. data/app/models/alchemy/page/fixed_attributes.rb +53 -51
  91. data/app/models/alchemy/page/page_elements.rb +186 -205
  92. data/app/models/alchemy/page/page_naming.rb +66 -64
  93. data/app/models/alchemy/page/page_natures.rb +139 -142
  94. data/app/models/alchemy/page/page_scopes.rb +117 -102
  95. data/app/models/alchemy/page/publisher.rb +50 -0
  96. data/app/models/alchemy/page/url_path.rb +1 -1
  97. data/app/models/alchemy/page_version.rb +58 -0
  98. data/app/models/alchemy/picture.rb +18 -40
  99. data/app/models/alchemy/picture/calculations.rb +2 -8
  100. data/app/models/alchemy/picture/preprocessor.rb +2 -0
  101. data/app/models/alchemy/picture/transformations.rb +24 -96
  102. data/app/models/concerns/alchemy/picture_thumbnails.rb +181 -0
  103. data/app/models/concerns/alchemy/touch_elements.rb +2 -2
  104. data/app/presenters/alchemy/picture_view.rb +88 -0
  105. data/app/serializers/alchemy/element_serializer.rb +5 -0
  106. data/app/serializers/alchemy/page_tree_serializer.rb +3 -2
  107. data/app/services/alchemy/delete_elements.rb +44 -0
  108. data/app/services/alchemy/duplicate_element.rb +56 -0
  109. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +2 -3
  110. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +3 -3
  111. data/app/views/alchemy/admin/attachments/assign.js.erb +11 -0
  112. data/app/views/alchemy/admin/attachments/index.html.erb +2 -3
  113. data/app/views/alchemy/admin/crop.html.erb +36 -0
  114. data/app/views/alchemy/admin/elements/_element.html.erb +14 -10
  115. data/app/views/alchemy/admin/elements/{_element_footer.html.erb → _footer.html.erb} +0 -0
  116. data/app/views/alchemy/admin/elements/{_new_element_form.html.erb → _form.html.erb} +1 -1
  117. data/app/views/alchemy/admin/elements/{_element_header.html.erb → _header.html.erb} +1 -1
  118. data/app/views/alchemy/admin/elements/{_element_toolbar.html.erb → _toolbar.html.erb} +5 -6
  119. data/app/views/alchemy/admin/elements/create.js.erb +1 -1
  120. data/app/views/alchemy/admin/elements/{trash.js.erb → destroy.js.erb} +2 -6
  121. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  122. data/app/views/alchemy/admin/elements/new.html.erb +3 -3
  123. data/app/views/alchemy/admin/elements/order.js.erb +0 -17
  124. data/app/views/alchemy/admin/elements/update.js.erb +3 -2
  125. data/app/views/alchemy/admin/essence_audios/edit.html.erb +7 -0
  126. data/app/views/alchemy/admin/essence_pictures/update.js.erb +0 -1
  127. data/app/views/alchemy/admin/essence_videos/edit.html.erb +11 -0
  128. data/app/views/alchemy/admin/ingredients/_audio_fields.html.erb +4 -0
  129. data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +18 -0
  130. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +25 -0
  131. data/app/views/alchemy/admin/ingredients/_video_fields.html.erb +8 -0
  132. data/app/views/alchemy/admin/ingredients/edit.html.erb +4 -0
  133. data/app/views/alchemy/admin/layoutpages/edit.html.erb +0 -5
  134. data/app/views/alchemy/admin/nodes/_node.html.erb +2 -2
  135. data/app/views/alchemy/admin/pages/_anchor_link.html.erb +1 -1
  136. data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
  137. data/app/views/alchemy/admin/pages/_file_link.html.erb +1 -1
  138. data/app/views/alchemy/admin/pages/_form.html.erb +0 -6
  139. data/app/views/alchemy/admin/pages/_internal_link.html.erb +1 -1
  140. data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +5 -2
  141. data/app/views/alchemy/admin/pages/_toolbar.html.erb +1 -1
  142. data/app/views/alchemy/admin/pages/edit.html.erb +36 -24
  143. data/app/views/alchemy/admin/pages/index.html.erb +2 -9
  144. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -4
  145. data/app/views/alchemy/admin/partials/_routes.html.erb +7 -11
  146. data/app/views/alchemy/admin/partials/_search_form.html.erb +9 -0
  147. data/app/views/alchemy/admin/pictures/_archive.html.erb +1 -1
  148. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
  149. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +5 -7
  150. data/app/views/alchemy/admin/pictures/_infos.html.erb +0 -1
  151. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +4 -4
  152. data/app/views/alchemy/admin/pictures/assign.js.erb +10 -0
  153. data/app/views/alchemy/admin/pictures/index.html.erb +8 -3
  154. data/app/views/alchemy/admin/resources/_filter.html.erb +12 -0
  155. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +14 -17
  156. data/app/views/alchemy/admin/resources/_form.html.erb +3 -0
  157. data/app/views/alchemy/admin/resources/_table_header.html.erb +15 -0
  158. data/app/views/alchemy/admin/resources/index.html.erb +3 -11
  159. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +4 -0
  160. data/app/views/alchemy/essences/_essence_audio_view.html.erb +15 -0
  161. data/app/views/alchemy/essences/_essence_file_editor.html.erb +15 -6
  162. data/app/views/alchemy/essences/_essence_headline_editor.html.erb +36 -0
  163. data/app/views/alchemy/essences/_essence_headline_view.html.erb +10 -0
  164. data/app/views/alchemy/essences/_essence_link_editor.html.erb +8 -4
  165. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +27 -12
  166. data/app/views/alchemy/essences/_essence_picture_view.html.erb +3 -3
  167. data/app/views/alchemy/essences/_essence_text_editor.html.erb +12 -4
  168. data/app/views/alchemy/essences/_essence_video_editor.html.erb +4 -0
  169. data/app/views/alchemy/essences/_essence_video_view.html.erb +18 -0
  170. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +21 -16
  171. data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +2 -2
  172. data/app/views/alchemy/ingredients/_audio_editor.html.erb +5 -0
  173. data/app/views/alchemy/ingredients/_audio_view.html.erb +14 -0
  174. data/app/views/alchemy/ingredients/_boolean_editor.html.erb +11 -0
  175. data/app/views/alchemy/ingredients/_boolean_view.html.erb +1 -0
  176. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +17 -0
  177. data/app/views/alchemy/ingredients/_datetime_view.html.erb +9 -0
  178. data/app/views/alchemy/ingredients/_file_editor.html.erb +52 -0
  179. data/app/views/alchemy/ingredients/_file_view.html.erb +17 -0
  180. data/app/views/alchemy/ingredients/_headline_editor.html.erb +30 -0
  181. data/app/views/alchemy/ingredients/_headline_view.html.erb +9 -0
  182. data/app/views/alchemy/ingredients/_html_editor.html.erb +8 -0
  183. data/app/views/alchemy/ingredients/_html_view.html.erb +1 -0
  184. data/app/views/alchemy/ingredients/_link_editor.html.erb +24 -0
  185. data/app/views/alchemy/ingredients/_link_view.html.erb +9 -0
  186. data/app/views/alchemy/ingredients/_node_editor.html.erb +26 -0
  187. data/app/views/alchemy/ingredients/_node_view.html.erb +1 -0
  188. data/app/views/alchemy/ingredients/_page_editor.html.erb +25 -0
  189. data/app/views/alchemy/ingredients/_page_view.html.erb +4 -0
  190. data/app/views/alchemy/ingredients/_picture_editor.html.erb +60 -0
  191. data/app/views/alchemy/ingredients/_picture_view.html.erb +5 -0
  192. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +12 -0
  193. data/app/views/alchemy/ingredients/_richtext_view.html.erb +3 -0
  194. data/app/views/alchemy/ingredients/_select_editor.html.erb +30 -0
  195. data/app/views/alchemy/ingredients/_select_view.html.erb +1 -0
  196. data/app/views/alchemy/ingredients/_text_editor.html.erb +20 -0
  197. data/app/views/alchemy/ingredients/_text_view.html.erb +16 -0
  198. data/app/views/alchemy/ingredients/_video_editor.html.erb +5 -0
  199. data/app/views/alchemy/ingredients/_video_view.html.erb +17 -0
  200. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +20 -0
  201. data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +57 -0
  202. data/config/brakeman.ignore +66 -159
  203. data/config/initializers/dragonfly.rb +10 -0
  204. data/config/locales/alchemy.en.yml +108 -64
  205. data/config/routes.rb +17 -22
  206. data/db/migrate/20201207131309_create_page_versions.rb +19 -0
  207. data/db/migrate/20201207135820_add_page_version_id_to_alchemy_elements.rb +76 -0
  208. data/db/migrate/20210205143548_rename_public_on_and_public_until_on_alchemy_pages.rb +10 -0
  209. data/db/migrate/20210326105046_add_sanitized_body_to_alchemy_essence_richtexts.rb +7 -0
  210. data/db/migrate/20210406093436_add_alchemy_essence_headlines.rb +12 -0
  211. data/db/migrate/20210506135919_create_essence_audios.rb +19 -0
  212. data/db/migrate/20210506140258_create_essence_videos.rb +23 -0
  213. data/db/migrate/20210508091432_create_alchemy_ingredients.rb +22 -0
  214. data/lib/alchemy/admin/preview_url.rb +2 -0
  215. data/lib/alchemy/deprecation.rb +1 -1
  216. data/lib/alchemy/dragonfly/processors/auto_orient.rb +18 -0
  217. data/lib/alchemy/dragonfly/processors/crop_resize.rb +35 -0
  218. data/lib/alchemy/elements_finder.rb +14 -60
  219. data/lib/alchemy/essence.rb +1 -2
  220. data/lib/alchemy/forms/builder.rb +21 -1
  221. data/lib/alchemy/hints.rb +8 -4
  222. data/lib/alchemy/page_layout.rb +0 -13
  223. data/lib/alchemy/permissions.rb +30 -29
  224. data/lib/alchemy/resource.rb +13 -3
  225. data/lib/alchemy/resource_filter.rb +40 -0
  226. data/lib/alchemy/resources_helper.rb +1 -16
  227. data/lib/alchemy/tasks/tidy.rb +29 -0
  228. data/lib/alchemy/test_support.rb +2 -11
  229. data/lib/alchemy/test_support/essence_shared_examples.rb +0 -1
  230. data/lib/alchemy/test_support/factories/element_factory.rb +8 -8
  231. data/lib/alchemy/test_support/factories/essence_audio_factory.rb +7 -0
  232. data/lib/alchemy/test_support/factories/essence_video_factory.rb +7 -0
  233. data/lib/alchemy/test_support/factories/ingredient_factory.rb +25 -0
  234. data/lib/alchemy/test_support/factories/page_factory.rb +20 -1
  235. data/lib/alchemy/test_support/factories/page_version_factory.rb +23 -0
  236. data/lib/alchemy/test_support/having_crop_action_examples.rb +170 -0
  237. data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +646 -0
  238. data/lib/alchemy/test_support/shared_ingredient_editor_examples.rb +21 -0
  239. data/lib/alchemy/test_support/shared_ingredient_examples.rb +75 -0
  240. data/lib/alchemy/tinymce.rb +17 -0
  241. data/lib/alchemy/upgrader/six_point_zero.rb +21 -0
  242. data/lib/alchemy/upgrader/tasks/add_page_versions.rb +33 -0
  243. data/lib/alchemy/upgrader/tasks/ingredients_migrator.rb +62 -0
  244. data/lib/alchemy/version.rb +1 -1
  245. data/lib/alchemy_cms.rb +1 -0
  246. data/lib/generators/alchemy/elements/elements_generator.rb +1 -0
  247. data/lib/generators/alchemy/elements/templates/view.html.erb +9 -0
  248. data/lib/generators/alchemy/elements/templates/view.html.haml +9 -0
  249. data/lib/generators/alchemy/elements/templates/view.html.slim +9 -0
  250. data/lib/generators/alchemy/ingredient/ingredient_generator.rb +38 -0
  251. data/lib/generators/alchemy/ingredient/templates/editor.html.erb +14 -0
  252. data/lib/generators/alchemy/ingredient/templates/model.rb.tt +13 -0
  253. data/lib/generators/alchemy/ingredient/templates/view.html.erb +1 -0
  254. data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +1 -1
  255. data/lib/generators/alchemy/menus/templates/node.html.erb +1 -1
  256. data/lib/generators/alchemy/menus/templates/node.html.haml +1 -1
  257. data/lib/generators/alchemy/menus/templates/node.html.slim +1 -1
  258. data/lib/generators/alchemy/menus/templates/wrapper.html.erb +1 -1
  259. data/lib/generators/alchemy/menus/templates/wrapper.html.haml +1 -1
  260. data/lib/generators/alchemy/menus/templates/wrapper.html.slim +1 -1
  261. data/lib/tasks/alchemy/thumbnails.rake +4 -2
  262. data/lib/tasks/alchemy/tidy.rake +12 -0
  263. data/lib/tasks/alchemy/upgrade.rake +26 -0
  264. data/package.json +3 -2
  265. data/package/admin.js +11 -1
  266. data/package/src/__tests__/i18n.spec.js +23 -0
  267. data/package/src/file_editors.js +28 -0
  268. data/package/src/i18n.js +1 -3
  269. data/package/src/image_cropper.js +103 -0
  270. data/package/src/image_loader.js +58 -0
  271. data/package/src/node_tree.js +5 -5
  272. data/package/src/picture_editors.js +169 -0
  273. data/package/src/utils/__tests__/ajax.spec.js +20 -12
  274. data/package/src/utils/ajax.js +8 -3
  275. data/vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js +3 -18
  276. data/vendor/assets/stylesheets/jquery.Jcrop.min.scss +2 -28
  277. metadata +292 -55
  278. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js.coffee +0 -44
  279. data/app/assets/javascripts/alchemy/alchemy.trash_window.js.coffee +0 -30
  280. data/app/assets/stylesheets/alchemy/trash.scss +0 -8
  281. data/app/controllers/alchemy/admin/trash_controller.rb +0 -44
  282. data/app/views/alchemy/admin/attachments/_filter_bar.html.erb +0 -29
  283. data/app/views/alchemy/admin/essence_files/assign.js.erb +0 -3
  284. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +0 -4
  285. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +0 -48
  286. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +0 -30
  287. data/app/views/alchemy/admin/trash/clear.js.erb +0 -4
  288. data/app/views/alchemy/admin/trash/index.html.erb +0 -31
  289. data/lib/alchemy/test_support/factories.rb +0 -16
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "dragonfly_svg"
3
+ require "alchemy/dragonfly/processors/crop_resize"
4
+ require "alchemy/dragonfly/processors/auto_orient"
3
5
 
4
6
  # Logger
5
7
  Dragonfly.logger = Rails.logger
@@ -9,3 +11,11 @@ if defined?(ActiveRecord::Base)
9
11
  ActiveRecord::Base.extend Dragonfly::Model
10
12
  ActiveRecord::Base.extend Dragonfly::Model::Validations
11
13
  end
14
+
15
+ # Dragonfly 1.4.0 only allows `quality` as argument to `encode`
16
+ Dragonfly::ImageMagick::Processors::Encode::WHITELISTED_ARGS << "flatten"
17
+
18
+ Rails.application.config.after_initialize do
19
+ Dragonfly.app(:alchemy_pictures).add_processor(:crop_resize, Alchemy::Dragonfly::Processors::CropResize.new)
20
+ Dragonfly.app(:alchemy_pictures).add_processor(:auto_orient, Alchemy::Dragonfly::Processors::AutoOrient.new)
21
+ end
@@ -57,6 +57,90 @@ en:
57
57
  main_menu: Main Menu
58
58
  footer_menu: Footer Menu
59
59
 
60
+ # == Mime Types translations
61
+ # These are human readable mime types used for the document-type row in archive files.
62
+ #
63
+ mime_types: &mime_types
64
+ application/msexcel: Excel Spreadsheet
65
+ application/mspowerpoint: PowerPoint Presentation
66
+ application/msword: Word Document
67
+ application/pdf: PDF Document
68
+ application/rtf: RTF Document
69
+ application/vcard: vCard
70
+ application/vnd:
71
+ ms-excel: Excel Spreadsheet
72
+ ms-powerpoint: PowerPoint Presentation
73
+ ms-word: Word Document
74
+ openxmlformats-officedocument:
75
+ presentationml:
76
+ presentation: PowerPoint 2007 Presentation
77
+ spreadsheetml:
78
+ sheet: Excel 2007 Spreadsheet
79
+ wordprocessingml:
80
+ document: Word 2007 Document
81
+ application/x-flash-video: Flash Video
82
+ application/x-rar: RAR Archive
83
+ application/x-shockwave-flash: Flash Movie
84
+ application/zip: ZIP Archive
85
+ audio/mp4: MPEG-4 Audio
86
+ audio/mpeg: MP3 Audio
87
+ audio/wav: WAV Audio
88
+ audio/x-wav: WAV Audio
89
+ image/gif: GIF Image
90
+ image/jpeg: JPG Image
91
+ image/png: PNG Image
92
+ image/tiff: TIFF Image
93
+ image/x-psd: Photoshop File
94
+ image/svg+xml: SVG Image
95
+ text/plain: Plain Text Document
96
+ text/x-vcard: vCard
97
+ video/mp4: MPEG-4 Video
98
+ video/mpeg: MPEG Video
99
+ video/quicktime: Quicktime Video
100
+ video/x-flv: Flash Video
101
+ video/x-ms-wmv: Windows Media Video
102
+ video/x-msvideo: AVI Video
103
+
104
+ # === Translations for filter names and values
105
+ # Used in the right filter column in case the model has `alchemy_resource_filters` defined.
106
+ #
107
+ filters:
108
+ page:
109
+ by_page_layout:
110
+ name: Page Type
111
+ status:
112
+ name: Status
113
+ values:
114
+ not_public: Unpublished
115
+ published: Published
116
+ restricted: Restricted
117
+ picture:
118
+ by_file_format:
119
+ name: File Type
120
+ values:
121
+ gif: GIF Image
122
+ jpeg: JPG Image
123
+ png: PNG Image
124
+ tiff: TIFF Image
125
+ misc:
126
+ name: Miscellaneous
127
+ values:
128
+ last_upload: Last upload only
129
+ recent: Recently uploaded only
130
+ without_tag: Without tag
131
+ attachment:
132
+ by_file_type:
133
+ name: File Type
134
+ values:
135
+ <<: *mime_types
136
+ misc:
137
+ name: Miscellaneous
138
+ values:
139
+ last_upload: Last upload only
140
+ recent: Recently uploaded only
141
+ without_tag: Without tag
142
+ deletable: Not linked by file content
143
+
60
144
  # === Translations for content validations
61
145
  # Used when a user did not enter (correct) values to the content field.
62
146
  #
@@ -89,6 +173,11 @@ en:
89
173
  right: 'Right from text'
90
174
  no_float: 'Above the text'
91
175
 
176
+ ingredient_values:
177
+ boolean:
178
+ true: "True"
179
+ false: "False"
180
+
92
181
  # == Contactform translations
93
182
  contactform:
94
183
  labels:
@@ -127,49 +216,6 @@ en:
127
216
  editor: "Editor"
128
217
  admin: "Administrator"
129
218
 
130
- # == Mime Types translations
131
- # These are human readable mime types used for the document-type row in archive files.
132
- mime_types:
133
- application/msexcel: Excel Spreadsheet
134
- application/mspowerpoint: PowerPoint Presentation
135
- application/msword: Word Document
136
- application/pdf: PDF Document
137
- application/rtf: RTF Document
138
- application/vcard: vCard
139
- application/vnd:
140
- ms-excel: Excel Spreadsheet
141
- ms-powerpoint: PowerPoint Presentation
142
- ms-word: Word Document
143
- openxmlformats-officedocument:
144
- presentationml:
145
- presentation: PowerPoint 2007 Presentation
146
- spreadsheetml:
147
- sheet: Excel 2007 Spreadsheet
148
- wordprocessingml:
149
- document: Word 2007 Document
150
- application/x-flash-video: Flash Video
151
- application/x-rar: RAR Archive
152
- application/x-shockwave-flash: Flash Movie
153
- application/zip: ZIP Archive
154
- audio/mp4: MPEG-4 Audio
155
- audio/mpeg: MP3 Audio
156
- audio/wav: WAV Audio
157
- audio/x-wav: WAV Audio
158
- image/gif: GIF Image
159
- image/jpeg: JPG Image
160
- image/png: PNG Image
161
- image/tiff: TIFF Image
162
- image/x-psd: Photoshop File
163
- image/svg+xml: SVG Image
164
- text/plain: Plain Text Document
165
- text/x-vcard: vCard
166
- video/mp4: MPEG-4 Video
167
- video/mpeg: MPEG Video
168
- video/quicktime: Quicktime Video
169
- video/x-flv: Flash Video
170
- video/x-ms-wmv: Windows Media Video
171
- video/x-msvideo: AVI Video
172
-
173
219
  link_target_options:
174
220
  default: Same Window
175
221
  blank: New Window/Tab
@@ -194,7 +240,6 @@ en:
194
240
  'An error happened': 'An error happened'
195
241
  "Change password": "Change password"
196
242
  "Choose page": "Choose page"
197
- "Cleared trash": "Cleared trash"
198
243
  "Clear selection": "Clear selection"
199
244
  "Forgot your password?": "Forgot your password?"
200
245
  "Clipboard": "Clipboard"
@@ -204,15 +249,14 @@ en:
204
249
  "Currently locked pages": "Currently locked pages"
205
250
  "Default language has to be public": "Default language has to be public"
206
251
  "Delete image": "Delete image"
252
+ "Delete element": "Delete element"
207
253
  "Do you really want to clear the clipboard?": "Do you really want to clear the clipboard?"
208
- "Do you really want to clear the trash?": "Do you really want to clear the trash?"
209
254
  "Do you really want to delete this content?": "Do you really want to delete this content?"
210
255
  "Drag an element over to the element window to restore it": "Drag an element over to the element window to restore it"
211
256
  "Edit Picturemask": "Edit picturemask"
212
257
  "Edit image": "Edit image"
213
258
  "Edit multiple pictures": "Edit multiple pictures"
214
259
  "Elements": "Elements"
215
- "Element trashed": "Element trashed"
216
260
  "Error with the Flash® Uploader!": "Error with the Flash® Uploader!"
217
261
  "Excerpt": "Excerpt"
218
262
  "File successfully updated": "File successfully updated"
@@ -268,7 +312,6 @@ en:
268
312
  "Please log in": "Please log in."
269
313
  "Please seperate the tags with commata": "* Please seperate the tags with commas."
270
314
  "Properties": "Properties"
271
- "Publish page": "Publish page"
272
315
  "Read the License": "Read the License"
273
316
  "Redirects to": "Redirects to"
274
317
  "Reload Preview": "Reload Preview"
@@ -287,7 +330,6 @@ en:
287
330
  "Show clipboard": "Show clipboard"
288
331
  "Copied to clipboard": "Copied to clipboard"
289
332
  "Show picture infos": "Show picture infos"
290
- "Show trash": "Show trash"
291
333
  "Site successfully created": "Website successfully created."
292
334
  "Site successfully removed": "Website successfully removed."
293
335
  "Site successfully updated": "Website successfully updated."
@@ -295,6 +337,7 @@ en:
295
337
  "Sort pages": "Reorder pages"
296
338
  "Successfully added content": "Successfully added %{content}"
297
339
  "Successfully deleted content": "Successfully deleted %{content}"
340
+ "Successfully deleted element": "Successfully deleted %{element}"
298
341
  "Tags": "Tags"
299
342
  "These pictures could not be deleted, because they were in use": "These pictures could not be deleted, because they were in use: %{names}"
300
343
  "This page is locked": "This page is currently locked by %{name}"
@@ -310,6 +353,7 @@ en:
310
353
  "Warning!": "Warning!"
311
354
  content_definition_missing: "Warning: Content is missing its definition. Please check the elements.yml"
312
355
  content_deprecated: "WARNING! This content is deprecated and will be removed soon. Please do not use it anymore."
356
+ ingredient_deprecated: "WARNING! This content is deprecated and will be removed soon. Please do not use it anymore."
313
357
  element_definition_missing: "WARNING! Missing element definition. Please check your elements.yml file."
314
358
  element_deprecated: "WARNING! This element is deprecated and will be removed soon. Please do not use it anymore."
315
359
  page_definition_missing: "WARNING! Missing page layout definition. Please check your page_layouts.yml file."
@@ -321,7 +365,6 @@ en:
321
365
  element_dirty_close_window_notice: "You have unsaved elements. Do you really want to close the elements window?"
322
366
  "Your last login was on": "Your last login was on %{time}."
323
367
  "Your last updated pages": "Your last updated pages"
324
- "Your trash is empty": "Your trash is empty"
325
368
  above: "above"
326
369
  add: "Add"
327
370
  align_in_text: "Alignment in text"
@@ -329,7 +372,6 @@ en:
329
372
  all_pictures: "All pictures"
330
373
  apply: "apply"
331
374
  assign_file: "Assign a file"
332
- assign_file_from_archive: "assign a file from your archive"
333
375
  assign_image: "Assign an image"
334
376
  attached_to: "attached to"
335
377
  attachment_filename_notice: "* Please do not use any special characters for the filename."
@@ -337,17 +379,18 @@ en:
337
379
  big_thumbnails: "Big thumbnails"
338
380
  cancel: "cancel"
339
381
  cannot_delete_picture_notice: "Cannot delete Picture %{name}, because it's still in use."
382
+ cannot_visit_unpublic_page: "Publish page before visiting it."
340
383
  choose_file_to_link: "Please choose a file to link"
341
384
  "clear clipboard": "clear clipboard"
342
- "clear trash": "clear trash"
343
385
  click_to_show_all: "Click to show all again."
386
+ confirm_to_delete_element: "Do you really want to delete this element? It cannot be restored!"
344
387
  confirm_to_delete_file: "Do you really want to delete this file from the server?"
345
388
  confirm_to_delete_image: "Do you really want to delete this image from server?"
346
389
  confirm_to_delete_image_from_server: "Do you really want to delete this image from the server?"
347
390
  confirm_to_delete_images_from_server: "Do you really want to delete these images from the server?"
348
391
  confirm_to_delete_menu: "Do you really want to delete this menu?"
349
392
  confirm_to_delete_node: "Do you really want to delete this menu node?"
350
- confirm_to_delete_page: "Do you really want to delete this page? All its elements (even trashed ones) will get lost!"
393
+ confirm_to_delete_page: "Do you really want to delete this page?"
351
394
  content_essence_not_found: "Content essence not found"
352
395
  content_not_found: "Field for content not present."
353
396
  content_validations_headline: "Please check marked fields below"
@@ -393,7 +436,7 @@ en:
393
436
  element_saved: "Saved element."
394
437
  enter_external_link: "Please enter the URL you want to link with"
395
438
  explain_cropping: "<p>Move the frame and change its size with the mouse or arrow keys to adjust the image mask. Click on \"apply\" when you are satisfied with your selection.</p><p>If you want to return to the original centered image mask like it was defined in the layout, click \"reset\" and \"apply\" afterwards.</p>"
396
- explain_publishing: "Publish the page and remove the cached version from the server."
439
+ explain_publishing: "Publish current page content"
397
440
  explain_sitemap_dragndrop_sorting: "Tip: Drag the pages at the icon in order to sort them."
398
441
  explain_unlocking: "Leave page and unlock it for other users."
399
442
  external_link_notice_1: "Please enter the complete url with http:// or a similar protocol."
@@ -401,6 +444,7 @@ en:
401
444
  female: "Female"
402
445
  file: "File"
403
446
  file_rename_error: "Error renaming file."
447
+ filtered_by: "Filtered by"
404
448
  from_at: "from %{by} at %{at}"
405
449
  height: "Height"
406
450
  help:
@@ -422,7 +466,7 @@ en:
422
466
  dashboard: "Dashboard"
423
467
  image_alt_tag: "Alt-tag"
424
468
  image_caption: "Caption"
425
- image_name: "Name"
469
+ image_name: "Name: %{name}"
426
470
  image_title: "Title-tag"
427
471
  internal_link_headline: "Search for a page to link to by entering its name into the Page select."
428
472
  internal_link_page_elements_explanation: "Additionally you can choose an anchor to an element from selected page."
@@ -433,7 +477,6 @@ en:
433
477
  javascript_disabled_text: "Alchemy needs Javascript to run smoothly. Please enable it in your browser settings."
434
478
  language_code_placeholder: 'i.e. en'
435
479
  language_pages_copied: "Language tree successfully copied."
436
- last_upload_only: "Last upload only"
437
480
  left: "left"
438
481
  legacy_url_info_text: "A link is a redirect from an old URL to the current URL of this page. This redirect happens with a <a href='https://support.google.com/webmasters/answer/93633' target='_blank'>301 status code</a>."
439
482
  link_image: "Link this image."
@@ -491,7 +534,7 @@ en:
491
534
  or_replace_it_with_an_existing_tag: 'Or replace it with an existing tag'
492
535
  "Page created": "Page: '%{name}' created."
493
536
  page_infos: 'Page info'
494
- page_layout_changed_notice: "Page type was changed. Elements not usable anymore have been moved into the trash."
537
+ page_layout_changed_notice: "Page type was changed. Elements not usable anymore have been hided."
495
538
  page_properties: "Page properties"
496
539
  page_public: "published"
497
540
  page_published: "Published page"
@@ -517,11 +560,6 @@ en:
517
560
  comma_seperated: "Separate by comma"
518
561
  password: "Password"
519
562
  paste: "paste"
520
- picture_library:
521
- filter:
522
- last_upload: "from last upload"
523
- recent: "that where recently uploaded"
524
- without_tag: "without tag"
525
563
  pictures_in_page: "%{page} in %{pictures}"
526
564
  place_link: "Link text"
527
565
  player_version: "Flash Player version"
@@ -538,6 +576,8 @@ en:
538
576
  '1024': '1024px (iPad - Landscape)'
539
577
  '1280': '1280px (Desktop)'
540
578
  preview_url: Preview
579
+ publish_page_language_not_public: Cannot publish page if language is not public
580
+ publish_page_not_allowed: You have not the permission to publish this page
541
581
  recently_uploaded_only: 'Recently uploaded only'
542
582
  "regular method": "Regular method"
543
583
  remove: "Remove"
@@ -568,7 +608,6 @@ en:
568
608
  subject: "Subject"
569
609
  successfully_added_element: "Successfully added new element."
570
610
  successfully_deleted_tag: "Successfully deleted tag"
571
- successfully_restored_element: "Element restored successfully."
572
611
  successfully_saved_element_position: "Element position updated successfully."
573
612
  successfully_updated_tag: "Successfully updated tag"
574
613
  swap_image: "Change image"
@@ -578,7 +617,6 @@ en:
578
617
  this_picture_is_used_on_these_pages: "This picture is used on following pages"
579
618
  title: "Title"
580
619
  to_alchemy: "To Alchemy"
581
- "trash element": "Put element into trash"
582
620
  unknown: "unknown"
583
621
  unlink: "Remove link from this image."
584
622
  unlock_page: "Leave page"
@@ -704,11 +742,18 @@ en:
704
742
  # Translations for Alchemy models
705
743
  activemodel:
706
744
  models:
745
+ alchemy/essence_headline:
746
+ one: Headline
747
+ other: Headline
707
748
  alchemy/message:
708
749
  one: Message
709
750
  other: Messages
710
751
  alchemy/admin/preview_url: Internal
711
752
  attributes:
753
+ alchemy/essence_headline:
754
+ body: Headline
755
+ level: Level
756
+ size: Size
712
757
  alchemy/message:
713
758
  salutation: 'Salutation'
714
759
  firstname: 'Firstname'
@@ -785,7 +830,6 @@ en:
785
830
  name: "Name"
786
831
  public: "visible"
787
832
  tag_list: Tags
788
- trashed: Trashed
789
833
  alchemy/essence_file:
790
834
  css_class: Style
791
835
  alchemy/essence_picture:
data/config/routes.rb CHANGED
@@ -6,7 +6,7 @@ Alchemy::Engine.routes.draw do
6
6
 
7
7
  get "/sitemap.xml" => "pages#sitemap", format: "xml"
8
8
 
9
- scope Alchemy.admin_path, {constraints: Alchemy.admin_constraints} do
9
+ scope Alchemy.admin_path, { constraints: Alchemy.admin_constraints } do
10
10
  get "/" => redirect("#{Alchemy.admin_path}/dashboard"), as: :admin
11
11
  get "/dashboard" => "admin/dashboard#index", as: :admin_dashboard
12
12
  get "/dashboard/info" => "admin/dashboard#info", as: :dashboard_info
@@ -15,7 +15,7 @@ Alchemy::Engine.routes.draw do
15
15
  get "/leave" => "admin/base#leave", as: :leave_admin
16
16
  end
17
17
 
18
- namespace :admin, {path: Alchemy.admin_path, constraints: Alchemy.admin_constraints} do
18
+ namespace :admin, { path: Alchemy.admin_path, constraints: Alchemy.admin_constraints } do
19
19
  resources :contents, only: [:create]
20
20
 
21
21
  resources :nodes
@@ -35,7 +35,6 @@ Alchemy::Engine.routes.draw do
35
35
  post :unlock
36
36
  post :publish
37
37
  post :fold
38
- post :visit
39
38
  get :configure
40
39
  get :preview
41
40
  get :info
@@ -50,7 +49,6 @@ Alchemy::Engine.routes.draw do
50
49
  member do
51
50
  patch :publish
52
51
  post :fold
53
- delete :trash
54
52
  end
55
53
  end
56
54
 
@@ -63,6 +61,8 @@ Alchemy::Engine.routes.draw do
63
61
  get :edit_multiple
64
62
  end
65
63
  member do
64
+ get :url
65
+ put :assign
66
66
  delete :remove
67
67
  end
68
68
  end
@@ -70,23 +70,25 @@ Alchemy::Engine.routes.draw do
70
70
  resources :attachments, except: [:new] do
71
71
  member do
72
72
  get :download
73
+ put :assign
73
74
  end
74
75
  end
75
76
 
76
- resources :essence_pictures, except: [:show, :new, :create] do
77
- collection do
78
- put :assign
79
- end
77
+ resources :essence_audios, only: [:edit, :update]
78
+
79
+ concern :croppable do
80
80
  member do
81
81
  get :crop
82
82
  end
83
83
  end
84
84
 
85
- resources :essence_files, only: [:edit, :update] do
86
- collection do
87
- put :assign
88
- end
89
- end
85
+ resources :essence_pictures, only: [:edit, :update], concerns: [:croppable]
86
+
87
+ resources :essence_files, only: [:edit, :update]
88
+
89
+ resources :essence_videos, only: [:edit, :update]
90
+
91
+ resources :ingredients, only: [:edit, :update], concerns: [:croppable]
90
92
 
91
93
  resources :legacy_page_urls
92
94
  resources :languages do
@@ -104,13 +106,6 @@ Alchemy::Engine.routes.draw do
104
106
  end
105
107
  end
106
108
 
107
- resource :trash, only: :index, controller: "trash" do
108
- collection do
109
- get :index
110
- delete :clear
111
- end
112
- end
113
-
114
109
  resources :tags do
115
110
  collection do
116
111
  get :autocomplete
@@ -131,7 +126,7 @@ Alchemy::Engine.routes.draw do
131
126
  resources :elements, only: :show
132
127
  resources :contents, only: :show
133
128
 
134
- namespace :api, defaults: {format: "json"} do
129
+ namespace :api, defaults: { format: "json" } do
135
130
  resources :contents, only: [:index, :show]
136
131
 
137
132
  resources :elements, only: [:index, :show] do
@@ -159,7 +154,7 @@ Alchemy::Engine.routes.draw do
159
154
  end
160
155
 
161
156
  get "/:locale" => "pages#index",
162
- constraints: {locale: Alchemy::RoutingConstraints::LOCALE_REGEXP},
157
+ constraints: { locale: Alchemy::RoutingConstraints::LOCALE_REGEXP },
163
158
  as: :show_language_root
164
159
 
165
160
  # The page show action has to be last route