alchemy_cms 4.0.6 → 4.1.0.beta

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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.gitignore +1 -0
  4. data/.localeapp/config.rb +8 -0
  5. data/.rubocop.yml +26 -13
  6. data/.travis.yml +12 -14
  7. data/CHANGELOG.md +5 -24
  8. data/Gemfile +10 -7
  9. data/README.md +16 -14
  10. data/Rakefile +1 -1
  11. data/alchemy_cms.gemspec +6 -7
  12. data/app/assets/images/alchemy/alchemy-logo.png +0 -0
  13. data/app/assets/images/alchemy/alchemy-logo.svg +1 -70
  14. data/app/assets/images/alchemy/favicon.ico +0 -0
  15. data/app/assets/images/alchemy/icon.svg +1 -14
  16. data/app/assets/javascripts/alchemy/admin.js +0 -7
  17. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -2
  18. data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +1 -1
  19. data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +1 -1
  20. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +1 -0
  21. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +19 -6
  22. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +2 -7
  23. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +36 -26
  24. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +6 -15
  25. data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +1 -1
  26. data/app/assets/javascripts/alchemy/alchemy.growler.js.coffee +8 -11
  27. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +4 -1
  28. data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +1 -1
  29. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +5 -14
  30. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +54 -75
  31. data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +4 -13
  32. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +1 -0
  33. data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +12 -6
  34. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -158
  35. data/app/assets/stylesheets/alchemy/_defaults.scss +0 -2
  36. data/app/assets/stylesheets/alchemy/_extends.scss +13 -18
  37. data/app/assets/stylesheets/alchemy/_mixins.scss +72 -46
  38. data/app/assets/stylesheets/alchemy/_variables.scss +128 -59
  39. data/app/assets/stylesheets/alchemy/admin.scss +7 -1
  40. data/app/assets/stylesheets/alchemy/archive.scss +23 -27
  41. data/app/assets/stylesheets/alchemy/base.scss +5 -355
  42. data/app/assets/stylesheets/alchemy/buttons.scss +23 -60
  43. data/app/assets/stylesheets/alchemy/clipboard.scss +26 -0
  44. data/app/assets/stylesheets/alchemy/dashboard.scss +7 -40
  45. data/app/assets/stylesheets/alchemy/dialogs.scss +23 -36
  46. data/app/assets/stylesheets/alchemy/elements.scss +80 -156
  47. data/app/assets/stylesheets/alchemy/errors.scss +2 -2
  48. data/app/assets/stylesheets/alchemy/flash.scss +19 -10
  49. data/app/assets/stylesheets/alchemy/fonts.scss +13 -0
  50. data/app/assets/stylesheets/alchemy/forms.scss +6 -1
  51. data/app/assets/stylesheets/alchemy/frame.scss +24 -65
  52. data/app/assets/stylesheets/alchemy/hints.scss +2 -2
  53. data/app/assets/stylesheets/alchemy/icons.scss +3 -337
  54. data/app/assets/stylesheets/alchemy/image_library.scss +9 -10
  55. data/app/assets/stylesheets/alchemy/jquery-ui.scss +21 -839
  56. data/app/assets/stylesheets/alchemy/jquery.datetimepicker.scss +32 -57
  57. data/app/assets/stylesheets/alchemy/lists.scss +4 -8
  58. data/app/assets/stylesheets/alchemy/menubar.scss +26 -29
  59. data/app/assets/stylesheets/alchemy/navigation.scss +23 -25
  60. data/app/assets/stylesheets/alchemy/notices.scss +25 -25
  61. data/app/assets/stylesheets/alchemy/pagination.scss +12 -7
  62. data/app/assets/stylesheets/alchemy/preview_window.scss +20 -0
  63. data/app/assets/stylesheets/alchemy/resource_info.scss +1 -1
  64. data/app/assets/stylesheets/alchemy/search.scss +19 -15
  65. data/app/assets/stylesheets/alchemy/selects.scss +63 -32
  66. data/app/assets/stylesheets/alchemy/sitemap.scss +70 -148
  67. data/app/assets/stylesheets/alchemy/tables.scss +16 -59
  68. data/app/assets/stylesheets/alchemy/toolbar.scss +9 -36
  69. data/app/assets/stylesheets/alchemy/trash.scss +8 -0
  70. data/app/assets/stylesheets/alchemy/upload.scss +5 -6
  71. data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +1 -0
  72. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +78 -43
  73. data/app/controllers/alchemy/admin/attachments_controller.rb +6 -6
  74. data/app/controllers/alchemy/admin/base_controller.rb +9 -9
  75. data/app/controllers/alchemy/admin/contents_controller.rb +0 -17
  76. data/app/controllers/alchemy/admin/elements_controller.rb +1 -4
  77. data/app/controllers/alchemy/admin/essence_files_controller.rb +1 -3
  78. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +1 -3
  79. data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
  80. data/app/controllers/alchemy/admin/pictures_controller.rb +5 -5
  81. data/app/controllers/alchemy/admin/resources_controller.rb +10 -10
  82. data/app/controllers/alchemy/admin/tags_controller.rb +7 -7
  83. data/app/controllers/alchemy/api/contents_controller.rb +6 -1
  84. data/app/controllers/alchemy/api/elements_controller.rb +5 -1
  85. data/app/controllers/alchemy/api/pages_controller.rb +6 -1
  86. data/app/controllers/alchemy/base_controller.rb +5 -3
  87. data/app/controllers/alchemy/pages_controller.rb +1 -1
  88. data/app/helpers/alchemy/admin/base_helper.rb +14 -15
  89. data/app/helpers/alchemy/admin/contents_helper.rb +1 -2
  90. data/app/helpers/alchemy/admin/elements_helper.rb +7 -6
  91. data/app/helpers/alchemy/admin/tags_helper.rb +3 -4
  92. data/app/helpers/alchemy/base_helper.rb +35 -5
  93. data/app/helpers/alchemy/elements_helper.rb +2 -2
  94. data/app/helpers/alchemy/pages_helper.rb +4 -2
  95. data/app/models/alchemy/attachment.rb +14 -23
  96. data/app/models/alchemy/base_record.rb +13 -0
  97. data/app/models/alchemy/cell.rb +1 -1
  98. data/app/models/alchemy/content.rb +1 -2
  99. data/app/models/alchemy/content/factory.rb +1 -1
  100. data/app/models/alchemy/element.rb +10 -12
  101. data/app/models/alchemy/essence_boolean.rb +1 -1
  102. data/app/models/alchemy/essence_date.rb +2 -2
  103. data/app/models/alchemy/essence_file.rb +1 -1
  104. data/app/models/alchemy/essence_html.rb +1 -1
  105. data/app/models/alchemy/essence_link.rb +1 -1
  106. data/app/models/alchemy/essence_picture.rb +1 -1
  107. data/app/models/alchemy/essence_richtext.rb +1 -1
  108. data/app/models/alchemy/essence_select.rb +1 -1
  109. data/app/models/alchemy/essence_text.rb +1 -1
  110. data/app/models/alchemy/folded_page.rb +1 -1
  111. data/app/models/alchemy/language.rb +21 -5
  112. data/app/models/alchemy/page.rb +17 -5
  113. data/app/models/alchemy/page/page_elements.rb +14 -2
  114. data/app/models/alchemy/page/page_naming.rb +17 -4
  115. data/app/models/alchemy/picture.rb +4 -7
  116. data/app/models/alchemy/site.rb +3 -3
  117. data/app/models/alchemy/tag.rb +3 -3
  118. data/app/models/concerns/alchemy/content_touching.rb +23 -0
  119. data/app/serializers/alchemy/element_serializer.rb +2 -0
  120. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -1
  121. data/app/views/alchemy/admin/attachments/_attachment.html.erb +11 -21
  122. data/app/views/alchemy/admin/attachments/_files_list.html.erb +26 -29
  123. data/app/views/alchemy/admin/attachments/_filter_bar.html.erb +2 -3
  124. data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +3 -4
  125. data/app/views/alchemy/admin/attachments/_replace_button.html.erb +2 -3
  126. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +3 -3
  127. data/app/views/alchemy/admin/attachments/destroy.js.erb +1 -1
  128. data/app/views/alchemy/admin/attachments/edit.html.erb +2 -2
  129. data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
  130. data/app/views/alchemy/admin/attachments/show.html.erb +7 -8
  131. data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
  132. data/app/views/alchemy/admin/clipboard/index.html.erb +23 -7
  133. data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
  134. data/app/views/alchemy/admin/clipboard/remove.js.erb +2 -2
  135. data/app/views/alchemy/admin/contents/create.js.erb +1 -1
  136. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +9 -6
  137. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +6 -4
  138. data/app/views/alchemy/admin/dashboard/_sites.html.erb +4 -2
  139. data/app/views/alchemy/admin/dashboard/_users.html.erb +6 -4
  140. data/app/views/alchemy/admin/dashboard/index.html.erb +3 -3
  141. data/app/views/alchemy/admin/dashboard/info.html.erb +6 -7
  142. data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
  143. data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
  144. data/app/views/alchemy/admin/elements/_element_header.html.erb +14 -14
  145. data/app/views/alchemy/admin/elements/_element_toolbar.html.erb +3 -3
  146. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +2 -3
  147. data/app/views/alchemy/admin/elements/index.html.erb +2 -4
  148. data/app/views/alchemy/admin/elements/new.html.erb +1 -2
  149. data/app/views/alchemy/admin/elements/publish.js.erb +5 -5
  150. data/app/views/alchemy/admin/languages/_language.html.erb +4 -9
  151. data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
  152. data/app/views/alchemy/admin/languages/index.html.erb +1 -1
  153. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +5 -5
  154. data/app/views/alchemy/admin/layoutpages/index.html.erb +5 -4
  155. data/app/views/alchemy/admin/leave.html.erb +1 -1
  156. data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +1 -1
  157. data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
  158. data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
  159. data/app/views/alchemy/admin/pages/_locked_page.html.erb +1 -1
  160. data/app/views/alchemy/admin/pages/_page.html.erb +31 -23
  161. data/app/views/alchemy/admin/pages/_page_for_links.html.erb +5 -5
  162. data/app/views/alchemy/admin/pages/_page_infos.html.erb +3 -3
  163. data/app/views/alchemy/admin/pages/_publication_fields.html.erb +1 -1
  164. data/app/views/alchemy/admin/pages/edit.html.erb +22 -21
  165. data/app/views/alchemy/admin/pages/index.html.erb +5 -21
  166. data/app/views/alchemy/admin/pages/info.html.erb +5 -5
  167. data/app/views/alchemy/admin/pages/sort.html.erb +1 -1
  168. data/app/views/alchemy/admin/pages/unlock.js.erb +2 -4
  169. data/app/views/alchemy/admin/partials/_flash.html.erb +1 -1
  170. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +7 -3
  171. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
  172. data/app/views/alchemy/admin/partials/_search_form.html.erb +3 -3
  173. data/app/views/alchemy/admin/pictures/_archive.html.erb +19 -17
  174. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
  175. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +13 -13
  176. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +2 -3
  177. data/app/views/alchemy/admin/pictures/_form.html.erb +3 -3
  178. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +2 -3
  179. data/app/views/alchemy/admin/pictures/_picture.html.erb +7 -7
  180. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +3 -3
  181. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -7
  182. data/app/views/alchemy/admin/pictures/index.html.erb +12 -12
  183. data/app/views/alchemy/admin/pictures/index.js.erb +0 -1
  184. data/app/views/alchemy/admin/pictures/show.html.erb +9 -9
  185. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +2 -3
  186. data/app/views/alchemy/admin/resources/_form.html.erb +10 -2
  187. data/app/views/alchemy/admin/resources/_resource.html.erb +9 -14
  188. data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
  189. data/app/views/alchemy/admin/resources/_tag_list.html.erb +4 -4
  190. data/app/views/alchemy/admin/resources/index.html.erb +2 -3
  191. data/app/views/alchemy/admin/sites/index.html.erb +1 -1
  192. data/app/views/alchemy/admin/tags/_tag.html.erb +7 -11
  193. data/app/views/alchemy/admin/tags/index.html.erb +4 -4
  194. data/app/views/alchemy/admin/trash/index.html.erb +2 -3
  195. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -2
  196. data/app/views/alchemy/base/500.html.erb +1 -1
  197. data/app/views/alchemy/base/permission_denied.js.erb +1 -1
  198. data/app/views/alchemy/base/redirect.js.erb +1 -2
  199. data/app/views/alchemy/elements/_editor_not_found.html.erb +2 -3
  200. data/app/views/alchemy/essences/_essence_date_editor.html.erb +1 -1
  201. data/app/views/alchemy/essences/_essence_file_editor.html.erb +7 -11
  202. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +9 -7
  203. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +1 -1
  204. data/app/views/alchemy/pages/_meta_data.html.erb +1 -1
  205. data/app/views/kaminari/alchemy/_first_page.html.erb +7 -3
  206. data/app/views/kaminari/alchemy/_gap.html.erb +1 -1
  207. data/app/views/kaminari/alchemy/_last_page.html.erb +7 -3
  208. data/app/views/kaminari/alchemy/_next_page.html.erb +4 -2
  209. data/app/views/kaminari/alchemy/_page.html.erb +1 -1
  210. data/app/views/kaminari/alchemy/_prev_page.html.erb +4 -2
  211. data/app/views/layouts/alchemy/admin.html.erb +8 -6
  212. data/bin/rails +2 -2
  213. data/bin/rspec +1 -1
  214. data/config/alchemy/config.yml +0 -2
  215. data/config/alchemy/modules.yml +5 -5
  216. data/config/initializers/simple_form.rb +45 -8
  217. data/config/locales/alchemy.en.yml +66 -179
  218. data/config/routes.rb +1 -1
  219. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +392 -0
  220. data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +41 -0
  221. data/lib/alchemy/config.rb +0 -2
  222. data/lib/alchemy/engine.rb +5 -9
  223. data/lib/alchemy/essence.rb +6 -6
  224. data/lib/alchemy/filetypes.rb +13 -1
  225. data/lib/alchemy/forms/builder.rb +5 -3
  226. data/lib/alchemy/i18n.rb +8 -6
  227. data/lib/alchemy/modules.rb +1 -1
  228. data/lib/alchemy/name_conversions.rb +0 -2
  229. data/lib/alchemy/page_layout.rb +3 -2
  230. data/lib/alchemy/paths.rb +5 -5
  231. data/lib/alchemy/resource.rb +9 -9
  232. data/lib/alchemy/resources_helper.rb +11 -15
  233. data/lib/alchemy/routing_constraints.rb +2 -2
  234. data/lib/alchemy/shell.rb +0 -1
  235. data/lib/alchemy/taggable.rb +40 -0
  236. data/lib/alchemy/tasks/tidy.rb +1 -9
  237. data/lib/alchemy/test_support/factories/content_factory.rb +10 -0
  238. data/lib/alchemy/test_support/factories/element_factory.rb +5 -0
  239. data/lib/alchemy/test_support/shared_contexts.rb +1 -1
  240. data/lib/alchemy/tinymce.rb +2 -2
  241. data/lib/alchemy/upgrader/four_point_one.rb +42 -0
  242. data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +27 -0
  243. data/lib/alchemy/version.rb +1 -1
  244. data/lib/alchemy_cms.rb +2 -3
  245. data/lib/rails/generators/alchemy/elements/elements_generator.rb +2 -2
  246. data/lib/rails/generators/alchemy/essence/essence_generator.rb +1 -1
  247. data/lib/rails/generators/alchemy/install/install_generator.rb +4 -8
  248. data/lib/rails/generators/alchemy/module/module_generator.rb +1 -1
  249. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -2
  250. data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +2 -2
  251. data/lib/rails/generators/alchemy/views/views_generator.rb +1 -1
  252. data/lib/tasks/alchemy/db.rake +2 -1
  253. data/lib/tasks/alchemy/tidy.rake +0 -6
  254. data/lib/tasks/alchemy/upgrade.rake +11 -144
  255. data/vendor/assets/fonts/fa-regular-400.eot +0 -0
  256. data/vendor/assets/fonts/fa-regular-400.svg +363 -0
  257. data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
  258. data/vendor/assets/fonts/fa-regular-400.woff +0 -0
  259. data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
  260. data/vendor/assets/fonts/fa-solid-900.eot +0 -0
  261. data/vendor/assets/fonts/fa-solid-900.svg +1413 -0
  262. data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
  263. data/vendor/assets/fonts/fa-solid-900.woff +0 -0
  264. data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
  265. data/vendor/assets/javascripts/tinymce/license.txt +6 -6
  266. data/vendor/assets/javascripts/tinymce/tinymce.min.js +2 -15
  267. data/vendor/assets/stylesheets/fontawesome/_animated.scss +20 -0
  268. data/vendor/assets/stylesheets/fontawesome/_bordered-pulled.scss +20 -0
  269. data/vendor/assets/stylesheets/fontawesome/_core.scss +16 -0
  270. data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +6 -0
  271. data/vendor/assets/stylesheets/fontawesome/_icons.scss +792 -0
  272. data/vendor/assets/stylesheets/fontawesome/_larger.scss +23 -0
  273. data/vendor/assets/stylesheets/fontawesome/_list.scss +18 -0
  274. data/vendor/assets/stylesheets/fontawesome/_mixins.scss +57 -0
  275. data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +23 -0
  276. data/vendor/assets/stylesheets/fontawesome/_screen-reader.scss +5 -0
  277. data/vendor/assets/stylesheets/fontawesome/_stacked.scss +31 -0
  278. data/vendor/assets/stylesheets/fontawesome/_variables.scss +805 -0
  279. data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +22 -0
  280. data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +23 -0
  281. data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +16 -0
  282. metadata +78 -112
  283. data/app/assets/fonts/alchemy/icons.eot +0 -0
  284. data/app/assets/fonts/alchemy/icons.svg +0 -33
  285. data/app/assets/fonts/alchemy/icons.ttf +0 -0
  286. data/app/assets/fonts/alchemy/icons.woff +0 -0
  287. data/app/assets/images/alchemy/icons.png +0 -0
  288. data/app/assets/images/alchemy/ui-icons_666666_256x240.png +0 -0
  289. data/app/assets/images/sassy-ie-overlay.png +0 -0
  290. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +0 -42
  291. data/app/assets/stylesheets/alchemy/icon-font.scss +0 -75
  292. data/app/assets/stylesheets/alchemy/modules.scss +0 -27
  293. data/app/models/alchemy.rb +0 -7
  294. data/app/views/alchemy/admin/contents/destroy.js.erb +0 -4
  295. data/app/views/alchemy/admin/pictures/flush.js.erb +0 -2
  296. data/config/locales/alchemy.de.yml +0 -932
  297. data/config/locales/alchemy.es.yml +0 -960
  298. data/config/locales/alchemy.fr.yml +0 -938
  299. data/config/locales/alchemy.it.yml +0 -938
  300. data/config/locales/alchemy.nl.yml +0 -918
  301. data/config/locales/alchemy.ru.yml +0 -830
  302. data/config/locales/simple_form.de.yml +0 -26
  303. data/config/locales/simple_form.en.yml +0 -25
  304. data/config/locales/simple_form.es.yml +0 -6
  305. data/config/locales/simple_form.fr.yml +0 -26
  306. data/config/locales/simple_form.it.yml +0 -25
  307. data/config/locales/simple_form.nl.yml +0 -25
  308. data/config/locales/simple_form.ru.yml +0 -25
  309. data/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -378
  310. data/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +0 -5
  311. data/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +0 -5
  312. data/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +0 -5
  313. data/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +0 -6
  314. data/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +0 -5
  315. data/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +0 -7
  316. data/db/migrate/20160108174834_add_timebased_publishing_columns_to_pages.rb +0 -32
  317. data/db/migrate/20160422195310_add_image_file_format_to_alchemy_pictures.rb +0 -9
  318. data/db/migrate/20160617224938_change_alchemy_pages_locked_to_locked_at.rb +0 -22
  319. data/db/migrate/20160912223112_add_index_to_alchemy_pages_rgt.rb +0 -9
  320. data/db/migrate/20160927205604_add_foreign_key_indices_and_null_constraints.rb +0 -20
  321. data/db/migrate/20160928080104_add_foreign_keys.rb +0 -27
  322. data/lib/alchemy/touching.rb +0 -42
  323. data/lib/alchemy/upgrader/tasks/available_contents_upgrader.rb +0 -161
  324. data/lib/alchemy/upgrader/tasks/install_asset_manifests.rb +0 -15
  325. data/lib/alchemy/upgrader/tasks/install_dragonfly_config.rb +0 -14
  326. data/lib/alchemy/upgrader/tasks/nestable_elements_migration.rb +0 -71
  327. data/lib/alchemy/upgrader/tasks/three_point_two_task.rb +0 -31
  328. data/lib/alchemy/upgrader/three_point_five.rb +0 -32
  329. data/lib/alchemy/upgrader/three_point_four.rb +0 -52
  330. data/lib/alchemy/upgrader/three_point_one.rb +0 -54
  331. data/lib/alchemy/upgrader/three_point_three.rb +0 -50
  332. data/lib/alchemy/upgrader/three_point_two.rb +0 -40
  333. data/lib/alchemy/upgrader/three_point_zero.rb +0 -92
  334. data/vendor/assets/javascripts/jquery_plugins/jquery.floatThead.min.js +0 -3
  335. data/vendor/assets/javascripts/tinymce/langs/de.js +0 -219
  336. data/vendor/assets/javascripts/tinymce/langs/es.js +0 -219
  337. data/vendor/assets/javascripts/tinymce/langs/fr.js +0 -219
  338. data/vendor/assets/javascripts/tinymce/langs/it.js +0 -219
  339. data/vendor/assets/javascripts/tinymce/langs/nl.js +0 -219
  340. data/vendor/assets/javascripts/tinymce/langs/ru.js +0 -219
@@ -1,8 +1,7 @@
1
1
  <%- if @elements.blank? -%>
2
- <div id="trash_empty_notice" <%= @elements.blank? ? '' : 'style="display: none"' %> class="info">
3
- <%= render_icon('info') %>
2
+ <%= render_message do %>
4
3
  <%= Alchemy.t('Your trash is empty') %>
5
- </div>
4
+ <% end %>
6
5
  <%- else -%>
7
6
  <%= render_message do %>
8
7
  <%= Alchemy.t('Drag an element over to the element window to restore it') %>
@@ -27,8 +27,7 @@
27
27
  <% if local_assigns[:in_dialog] %>
28
28
  $.get(url, null, null, 'script');
29
29
  <% else %>
30
- Alchemy.pleaseWaitOverlay();
31
- window.location.href = url;
30
+ Turbolinks.visit(url);
32
31
  <% end %>
33
32
  }
34
33
  };
@@ -1,7 +1,7 @@
1
1
  <%= toolbar(
2
2
  buttons: [
3
3
  {
4
- icon: 'back',
4
+ icon: 'angle-double-left',
5
5
  url: request.referer || alchemy.admin_dashboard_path,
6
6
  label: Alchemy.t(:back),
7
7
  title: Alchemy.t(:back),
@@ -1,3 +1,3 @@
1
1
  Alchemy.closeCurrentDialog(function() {
2
- window.location.href = '<%= Alchemy.login_path %>';
2
+ Turbolinks.visit('<%= Alchemy.login_path %>');
3
3
  });
@@ -1,8 +1,7 @@
1
1
  (function() {
2
2
  var dialog = Alchemy.currentDialog();
3
3
  var callback = function() {
4
- Alchemy.pleaseWaitOverlay();
5
- window.location.href = '<%= url_for(@redirect_url) %>';
4
+ Turbolinks.visit('<%= url_for(@redirect_url) %>');
6
5
  };
7
6
  if (dialog) {
8
7
  Alchemy.closeCurrentDialog(callback);
@@ -1,5 +1,4 @@
1
- <div class="error">
2
- <%= render_icon('error') %>
1
+ <%= render_message :warning do %>
3
2
  <h1><%= Alchemy.t(:element_editor_not_found) %>:</h1>
4
3
  <p><%= error.html_safe %></p>
5
- </div>
4
+ <% end %>
@@ -8,6 +8,6 @@
8
8
  }
9
9
  ) %>
10
10
  <label for="<%= content.form_field_id %>" class="essence_date--label">
11
- <span class="ui-icon ui-icon-calendar"></span>
11
+ <i class="icon far fa-calendar-alt fa-fw fa-lg"></i>
12
12
  </label>
13
13
  </div>
@@ -1,4 +1,4 @@
1
- <% dialog_link = link_to_dialog('',
1
+ <% dialog_link = link_to_dialog render_icon(:file, style: 'regular'),
2
2
  alchemy.admin_attachments_path(
3
3
  content_id: content.id,
4
4
  only: content.settings_value(:only, local_assigns.fetch(:options, {})),
@@ -10,29 +10,26 @@
10
10
  size: '780x585',
11
11
  padding: false
12
12
  },
13
- {
14
- class: 'icon assign_file',
15
- title: Alchemy.t(:assign_file)
16
- }
17
- ) %>
13
+ class: 'file_icon',
14
+ title: Alchemy.t(:assign_file) %>
18
15
 
19
16
  <div class="content_editor essence_file" id="<%= content.dom_id %>" data-content-id="<%= content.id %>">
20
17
  <%= content_label(content) %>
21
18
  <div class="file" id="file_<%= content.id %>">
22
- <div class="file_icon">
23
19
  <% if content.ingredient %>
24
- <%= render_icon(content.ingredient.icon_css_class) %>
20
+ <div class="file_icon">
21
+ <%= render_icon(content.ingredient.icon_css_class) %>
22
+ </div>
25
23
  <% else %>
26
24
  <%= dialog_link %>
27
25
  <% end %>
28
- </div>
29
26
  <div class="file_name">
30
27
  <%= content.ingredient.try(:name) ||
31
28
  ("&#x2190;" + Alchemy.t(:assign_file_from_archive)).html_safe %>
32
29
  </div>
33
30
  <div class="essence_file_tools">
34
31
  <%= dialog_link %>
35
- <%= link_to_dialog '',
32
+ <%= link_to_dialog render_icon(:edit),
36
33
  alchemy.edit_admin_essence_file_path(
37
34
  id: content.essence.id,
38
35
  options: local_assigns.fetch(:options, {})
@@ -41,7 +38,6 @@
41
38
  title: Alchemy.t(:edit_file_properties),
42
39
  size: '400x215'
43
40
  },
44
- class: 'edit_file',
45
41
  title: Alchemy.t(:edit_file_properties) %>
46
42
  </div>
47
43
  <%= hidden_field_tag content.form_field_name(:attachment_id),
@@ -1,19 +1,19 @@
1
1
  <%= content_tag :div, id: content.dom_id, data: {"content-id" => content.id}, class: [
2
- "essence_picture_editor",
2
+ "essence_picture",
3
3
  options[:sortable] ? "draggable_picture" : nil,
4
4
  options[:grouped] ? nil : "content_editor"
5
5
  ].compact.join(" ") do %>
6
- <% unless options[:grouped] %><%= content_label(content) %><% end %>
6
+ <% unless options[:grouped] %><%= content_label(content) %><br/><% end %>
7
7
  <div class="picture_thumbnail">
8
8
  <span class="picture_tool delete">
9
9
  <% if options[:grouped] %>
10
- <%= link_to_confirm_dialog "", Alchemy.t(:confirm_to_delete_image),
10
+ <%= link_to_confirm_dialog render_icon(:minus), Alchemy.t(:confirm_to_delete_image),
11
11
  alchemy.admin_essence_picture_path(
12
12
  id: content,
13
13
  options: options
14
14
  ), {title: Alchemy.t(:delete_image)} %>
15
15
  <% else %>
16
- <%= link_to '', '#',
16
+ <%= link_to render_icon(:times), '#',
17
17
  onclick: "return Alchemy.removePicture('##{content.form_field_id(:picture_id)}');" %>
18
18
  <% end %>
19
19
  </span>
@@ -21,10 +21,12 @@
21
21
  <div class="picture_handle" title="<%= Alchemy.t(:drag_to_sort) if options[:sortable] %>"></div>
22
22
  <%- end -%>
23
23
  <div class="picture_image">
24
- <div class="thumbnail_background<%= ' missing' if content.ingredient.nil? %>">
24
+ <div class="thumbnail_background">
25
25
  <%- if content.ingredient -%>
26
- <%= essence_picture_thumbnail(content, options) %>
27
- <%= hidden_field_tag content.form_field_name(:picture_id), content.ingredient.id %>
26
+ <%= essence_picture_thumbnail(content, options) %>
27
+ <%= hidden_field_tag content.form_field_name(:picture_id), content.ingredient.id %>
28
+ <% else %>
29
+ <%= render_icon(:image, style: 'regular') %>
28
30
  <% end %>
29
31
  </div>
30
32
  </div>
@@ -15,7 +15,7 @@
15
15
  <a href="#" class="disabled"><%= render_icon('crop') %></a>
16
16
  <%- end -%>
17
17
 
18
- <%= link_to_dialog render_icon('swap_picture'),
18
+ <%= link_to_dialog render_icon('file-image', style: 'regular'),
19
19
  alchemy.admin_pictures_path(
20
20
  element_id: content.element,
21
21
  content_id: content.id,
@@ -1,6 +1,6 @@
1
1
  <% if @page %>
2
2
  <meta charset="utf-8">
3
- <title><%= page_title prefix: local_assigns.fetch(:title_prefix, nil), separator: local_assigns.fetch(:title_separator, nil) %></title>
3
+ <title><%= page_title prefix: local_assigns.fetch(:title_prefix, nil), suffix: local_assigns.fetch(:title_suffix, nil), separator: local_assigns.fetch(:title_separator, nil) %></title>
4
4
  <%= tag(:meta, name: 'created', content: @page.updated_at) %>
5
5
  <%= tag(:meta, name: 'robots', content: meta_robots) %>
6
6
  <%= tag(:meta, name: 'description', content: meta_description, lang: @page.language_code) if meta_description.present? %>
@@ -6,6 +6,10 @@
6
6
  per_page: number of items to fetch per page
7
7
  remote: data-remote
8
8
  -%>
9
- <span class="first">
10
- <%= link_to_unless current_page.first?, '&laquo;'.html_safe, url, remote: remote, title: t('views.pagination.first'), class: 'button' %>
11
- </span>
9
+ <% if current_page.first? %>
10
+ <span class="first-page disabled"><i class="icon fas fa-angle-double-left"></i></span>
11
+ <% else %>
12
+ <%= link_to url, remote: remote, title: Alchemy.t(:first, scope: 'pagination'), class: 'first-page' do %>
13
+ <i class="icon fas fa-angle-double-left"></i>
14
+ <% end %>
15
+ <% end %>
@@ -5,4 +5,4 @@
5
5
  per_page: number of items to fetch per page
6
6
  remote: data-remote
7
7
  -%>
8
- <span class="page gap">&hellip;</span>
8
+ <span class="page gap"><i class="icon fas fa-ellipsis-h"></i></span>
@@ -6,6 +6,10 @@
6
6
  per_page: number of items to fetch per page
7
7
  remote: data-remote
8
8
  -%>
9
- <span class="last">
10
- <%= link_to_unless current_page.last?, '&raquo;'.html_safe, url, {remote: remote, title: t('views.pagination.last'), class: 'button'} %>
11
- </span>
9
+ <% if current_page.last? %>
10
+ <span class="last-page disabled"><i class="icon fas fa-angle-double-right"></i></span>
11
+ <% else %>
12
+ <%= link_to url, remote: remote, title: Alchemy.t(:last, scope: 'pagination'), class: 'last-page' do %>
13
+ <i class="icon fas fa-angle-double-right"></i>
14
+ <% end %>
15
+ <% end %>
@@ -7,7 +7,9 @@
7
7
  remote: data-remote
8
8
  -%>
9
9
  <% if current_page.last? -%>
10
- <span class="next_page disabled">&rsaquo;</span>
10
+ <span class="next_page disabled"><i class="icon fas fa-angle-right"></i></span>
11
11
  <% else -%>
12
- <%= link_to '&rsaquo;'.html_safe, url, rel: 'next', remote: remote, title: t('views.pagination.next_page'), class: 'next_page button' -%>
12
+ <%= link_to url, rel: 'next', remote: remote, title: Alchemy.t(:next_page, scope: 'pagination'), class: 'next_page' do %>
13
+ <i class="icon fas fa-angle-right"></i>
14
+ <% end %>
13
15
  <% end -%>
@@ -10,5 +10,5 @@
10
10
  <% if page.current? -%>
11
11
  <span class="page current"><%= page -%></span>
12
12
  <% else -%>
13
- <%= link_to page, url, opts = {remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil, class: 'button'} -%>
13
+ <%= link_to page, url, opts = {remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil, class: 'page'} -%>
14
14
  <% end -%>
@@ -7,7 +7,9 @@
7
7
  remote: data-remote
8
8
  -%>
9
9
  <% if current_page.first? -%>
10
- <span class="previous_page disabled">&lsaquo;</span>
10
+ <span class="previous_page disabled"><i class="icon fas fa-angle-left"></i></span>
11
11
  <% else -%>
12
- <%= link_to '&lsaquo;'.html_safe, url, rel: 'prev', remote: remote, class: 'previous_page button', title: t('views.pagination.previous_page') -%>
12
+ <%= link_to url, rel: 'prev', remote: remote, class: 'previous_page', title: Alchemy.t(:previous_page, scope: 'pagination') do %>
13
+ <i class="icon fas fa-angle-left"></i>
14
+ <% end %>
13
15
  <% end -%>
@@ -54,17 +54,17 @@
54
54
  <% end %>
55
55
  <%= yield(:alchemy_main_navigation) %>
56
56
  </div>
57
- <div id="logout">
57
+ <div id="logout" class="main_navi_entry">
58
58
  <% if current_alchemy_user %>
59
59
  <%= link_to_dialog(
60
- "#{render_icon('exit module')}<label>#{Alchemy.t(:leave)}</label>".html_safe,
60
+ "#{render_icon('sign-out-alt', size: 'lg', class: 'module')}<label>#{Alchemy.t(:leave)}</label>".html_safe,
61
61
  alchemy.leave_admin_path, {
62
62
  size: "300x155",
63
63
  title: Alchemy.t("Leave Alchemy")
64
64
  }, {'data-alchemy-hotkey' => 'alt+q'}) %>
65
65
  <% else %>
66
66
  <%= link_to(alchemy.root_path) do %>
67
- <span class="module icon exit"></span>
67
+ <i class="icon fas fa-sign-out-alt fa-fw fa-lg"></i>
68
68
  <label><%= Alchemy.t(:leave) %></label>
69
69
  <% end %>
70
70
  <% end %>
@@ -80,9 +80,11 @@
80
80
  <% end %>
81
81
  <div id="user_info">
82
82
  <%= current_alchemy_user_name %>
83
- <%= select_tag 'change_locale',
84
- options_for_select(translations_for_select, ::I18n.locale),
85
- class: 'alchemy_selectbox tiny' %>
83
+ <% if Alchemy::I18n.available_locales.length > 1 %>
84
+ <%= select_tag 'change_locale',
85
+ options_for_select(translations_for_select, ::I18n.locale),
86
+ class: 'alchemy_selectbox tiny' %>
87
+ <% end %>
86
88
  </div>
87
89
  </div>
88
90
  <div id="toolbar">
data/bin/rails CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
3
 
4
- ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
- ENGINE_PATH = File.expand_path('../../lib/alchemy/engine', __FILE__)
4
+ ENGINE_ROOT = File.expand_path('..', __dir__)
5
+ ENGINE_PATH = File.expand_path('../lib/alchemy/engine', __dir__)
6
6
 
7
7
  require 'rails/all'
8
8
  require 'rails/engine/commands'
data/bin/rspec CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  begin
3
- load File.expand_path('../spring', __FILE__)
3
+ load File.expand_path('spring', __dir__)
4
4
  rescue LoadError => e
5
5
  raise unless e.message.include?('spring')
6
6
  end
@@ -1,5 +1,3 @@
1
- # encoding: UTF-8
2
- #
3
1
  # == This is the global Alchemy configuration file
4
2
  #
5
3
 
@@ -7,7 +7,7 @@
7
7
  name: 'modules.dashboard'
8
8
  controller: 'alchemy/admin/dashboard'
9
9
  action: index
10
- image: 'alchemy/icon.svg'
10
+ inline_image: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="-4 -6 32 32" class="svg-inline--fa fa-lg fa-fw"><path fill="currentColor" d="M15.7 7.9L9.9 2.2 2.1 4.3 0 12.1l5.7 5.8 7.8-2.1 2.2-7.9zm-5.3 10.3l-1.2 4.4 3.2 3.2 4.4-1.2 1.2-4.4-3.2-3.2-4.4 1.2zM23.5 7.3L17.2 9l-1.7 6.2 4.5 4.6 6.2-1.7 1.7-6.2-4.4-4.6z"/></svg>'
11
11
 
12
12
  - name: pages
13
13
  engine_name: alchemy
@@ -16,7 +16,7 @@
16
16
  name: 'modules.pages'
17
17
  controller: 'alchemy/admin/pages'
18
18
  action: index
19
- icon: pages
19
+ icon: file-alt
20
20
  sub_navigation:
21
21
  - name: 'modules.pages'
22
22
  controller: 'alchemy/admin/pages'
@@ -35,7 +35,7 @@
35
35
  name: 'modules.languages'
36
36
  controller: 'alchemy/admin/languages'
37
37
  action: index
38
- icon: languages
38
+ icon: flag
39
39
 
40
40
  - name: sites
41
41
  engine_name: alchemy
@@ -44,7 +44,7 @@
44
44
  name: 'modules.sites'
45
45
  controller: 'alchemy/admin/sites'
46
46
  action: index
47
- icon: sites
47
+ icon: bullseye
48
48
 
49
49
  - name: tags
50
50
  engine_name: alchemy
@@ -62,7 +62,7 @@
62
62
  controller: 'alchemy/admin/pictures'
63
63
  action: index
64
64
  name: 'modules.library'
65
- icon: library
65
+ icon: archive
66
66
  sub_navigation:
67
67
  - name: 'modules.pictures'
68
68
  controller: 'alchemy/admin/pictures'
@@ -1,3 +1,11 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Uncomment this and change the path if necessary to include your own
4
+ # components.
5
+ # See https://github.com/plataformatec/simple_form#custom-components to know
6
+ # more about custom components.
7
+ # Dir[Rails.root.join('lib/components/**/*.rb')].each { |f| require f }
8
+ #
1
9
  # Use this setup block to configure all options available in SimpleForm.
2
10
  SimpleForm.setup do |config|
3
11
  # Wrappers are used by the form builder to generate a
@@ -6,9 +14,10 @@ SimpleForm.setup do |config|
6
14
  # stack. The options given below are used to wrap the
7
15
  # whole input.
8
16
  config.wrappers :alchemy,
9
- class: 'input',
10
- hint_class: 'field_with_hint',
11
- error_class: 'field_with_errors' do |b|
17
+ class: :input,
18
+ hint_class: :field_with_hint,
19
+ error_class: :field_with_errors,
20
+ valid_class: :field_without_errors do |b|
12
21
  ## Extensions enabled by default
13
22
  # Any of these extensions can be disabled for a
14
23
  # given input by passing: `f.input EXTENSION_NAME => false`.
@@ -24,14 +33,18 @@ SimpleForm.setup do |config|
24
33
  b.use :placeholder
25
34
 
26
35
  ## Optional extensions
27
- # They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
36
+ # They are disabled unless you pass `f.input EXTENSION_NAME => true`
28
37
  # to the input. If so, they will retrieve the values from the model
29
- # if any exists. If you want to enable the lookup for any of those
38
+ # if any exists. If you want to enable any of those
30
39
  # extensions by default, you can change `b.optional` to `b.use`.
31
40
 
32
41
  # Calculates maxlength from length validations for string inputs
42
+ # and/or database column lengths
33
43
  b.optional :maxlength
34
44
 
45
+ # Calculate minlength from length validations for string inputs
46
+ b.optional :minlength
47
+
35
48
  # Calculates pattern from format validations for string inputs
36
49
  b.optional :pattern
37
50
 
@@ -42,9 +55,16 @@ SimpleForm.setup do |config|
42
55
  b.optional :readonly
43
56
 
44
57
  ## Inputs
58
+ # b.use :input, class: 'input', error_class: 'is-invalid'
45
59
  b.use :label_input
46
60
  b.use :error, wrap_with: { tag: :small, class: :error }
47
61
  b.use :hint, wrap_with: { tag: :small, class: :hint }
62
+
63
+ ## full_messages_for
64
+ # If you want to display the full error message for the attribute, you can
65
+ # use the component :full_error, like:
66
+ #
67
+ # b.use :full_error, wrap_with: { tag: :span, class: :error }
48
68
  end
49
69
 
50
70
  # The default wrapper to be used by the FormBuilder.
@@ -86,8 +106,7 @@ SimpleForm.setup do |config|
86
106
  config.collection_wrapper_class = 'control_group'
87
107
 
88
108
  # You can wrap each item in a collection of radio/check boxes with a tag,
89
- # defaulting to :span. Please note that when using :boolean_style = :nested,
90
- # SimpleForm will force this option to be a label.
109
+ # defaulting to :span.
91
110
  # config.item_wrapper_tag = :span
92
111
 
93
112
  # You can define a class to use in all item wrappers. Defaulting to none.
@@ -99,7 +118,8 @@ SimpleForm.setup do |config|
99
118
  # You can define the class to use on all labels. Default is nil.
100
119
  config.label_class = 'control-label'
101
120
 
102
- # You can define the class to use on all forms. Default is simple_form.
121
+ # You can define the default class to be used on forms. Can be overriden
122
+ # with `html: { :class }`. Defaulting to none.
103
123
  # config.default_form_class = nil
104
124
 
105
125
  # You can define which elements should obtain additional classes
@@ -127,6 +147,10 @@ SimpleForm.setup do |config|
127
147
  # type as key and the wrapper that will be used for all inputs with specified type.
128
148
  # config.wrapper_mappings = { string: :prepend }
129
149
 
150
+ # Namespaces where SimpleForm should look for custom input classes that
151
+ # override default inputs.
152
+ # config.custom_inputs_namespaces << "CustomInputs"
153
+
130
154
  # Default priority for time_zone inputs.
131
155
  # config.time_zone_priority = nil
132
156
 
@@ -141,4 +165,17 @@ SimpleForm.setup do |config|
141
165
 
142
166
  # Cache SimpleForm inputs discovery
143
167
  # config.cache_discovery = !Rails.env.development?
168
+
169
+ # Default class for inputs
170
+ # config.input_class = nil
171
+
172
+ # Define the default class of the input wrapper of the boolean input.
173
+ config.boolean_label_class = 'checkbox'
174
+
175
+ # Defines if the default input wrapper class should be included in radio
176
+ # collection wrappers.
177
+ # config.include_default_input_wrapper_class = true
178
+
179
+ # Defines which i18n scope will be used in Simple Form.
180
+ config.i18n_scope = 'alchemy.forms'
144
181
  end