alchemy_cms 4.0.5 → 4.1.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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 +8 -11
  7. data/CHANGELOG.md +5 -20
  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 +6 -2
  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 +77 -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
@@ -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