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
@@ -8,15 +8,15 @@ module Alchemy
8
8
  helper 'alchemy/admin/tags'
9
9
 
10
10
  def index
11
- @query = Attachment.ransack(params[:q])
11
+ @query = Attachment.ransack(search_filter_params[:q])
12
12
  @attachments = @query.result
13
13
 
14
- if params[:tagged_with].present?
15
- @attachments = @attachments.tagged_with(params[:tagged_with])
14
+ if search_filter_params[:tagged_with].present?
15
+ @attachments = @attachments.tagged_with(search_filter_params[:tagged_with])
16
16
  end
17
17
 
18
- if params[:file_type].present?
19
- @attachments = @attachments.with_file_type(params[:file_type])
18
+ if search_filter_params[:file_type].present?
19
+ @attachments = @attachments.with_file_type(search_filter_params[:file_type])
20
20
  end
21
21
 
22
22
  @attachments = @attachments
@@ -69,7 +69,7 @@ module Alchemy
69
69
  private
70
70
 
71
71
  def search_filter_params
72
- params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:attachment]).permit(
72
+ @_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:attachment]).permit(
73
73
  *common_search_filter_includes + [
74
74
  :file_type,
75
75
  :content_id
@@ -39,20 +39,20 @@ module Alchemy
39
39
  end
40
40
 
41
41
  # Handles exceptions
42
- def exception_handler(e)
43
- exception_logger(e)
44
- show_error_notice(e)
42
+ def exception_handler(error)
43
+ exception_logger(error)
44
+ show_error_notice(error)
45
45
  if defined?(Airbrake)
46
- notify_airbrake(e) unless Rails.env.development? || Rails.env.test?
46
+ notify_airbrake(error) unless Rails.env.development? || Rails.env.test?
47
47
  end
48
48
  end
49
49
 
50
50
  # Displays an error notice in the Alchemy backend.
51
- def show_error_notice(e)
52
- @error = e
51
+ def show_error_notice(error)
52
+ @error = error
53
53
  # truncate the message, because very long error messages (i.e from mysql2) causes cookie overflow errors
54
- @notice = e.message[0..255]
55
- @trace = e.backtrace[0..50]
54
+ @notice = error.message[0..255]
55
+ @trace = error.backtrace[0..50]
56
56
  if request.xhr?
57
57
  render action: "error_notice"
58
58
  else
@@ -112,7 +112,7 @@ module Alchemy
112
112
  def per_page_value_for_screen_size
113
113
  return 25 if session[:screen_size].blank?
114
114
  screen_height = session[:screen_size].split('x').last.to_i
115
- (screen_height / 30) - 10
115
+ (screen_height / 50) - 12
116
116
  end
117
117
 
118
118
  # Does redirects for html and js requests
@@ -7,11 +7,6 @@ module Alchemy
7
7
 
8
8
  authorize_resource class: Alchemy::Content
9
9
 
10
- def new
11
- @element = Element.find(params[:element_id])
12
- @content = @element.contents.build
13
- end
14
-
15
10
  def create
16
11
  @element = Element.find(params[:content][:element_id])
17
12
  @content = Content.create_from_scratch(@element, content_params)
@@ -26,11 +21,6 @@ module Alchemy
26
21
  end
27
22
  end
28
23
 
29
- def update
30
- @content = Content.find(params[:id])
31
- @content.update_essence(content_params)
32
- end
33
-
34
24
  def order
35
25
  Content.transaction do
36
26
  params[:content_ids].each_with_index do |id, idx|
@@ -40,13 +30,6 @@ module Alchemy
40
30
  @notice = Alchemy.t("Successfully saved content position")
41
31
  end
42
32
 
43
- def destroy
44
- @content = Content.find(params[:id])
45
- @content_dom_id = @content.dom_id
46
- @notice = Alchemy.t("Successfully deleted content", content: @content.name_for_label)
47
- @content.destroy
48
- end
49
-
50
33
  private
51
34
 
52
35
  def content_params
@@ -147,10 +147,7 @@ module Alchemy
147
147
 
148
148
  def paste_element_from_clipboard
149
149
  @source_element = Element.find(element_from_clipboard['id'])
150
- new_attributes = {
151
- parent_element_id: create_element_params[:parent_element_id],
152
- page_id: @page.id
153
- }
150
+ new_attributes = {page_id: @page.id}
154
151
  if @page.can_have_cells?
155
152
  new_attributes = new_attributes.merge({cell_id: find_or_create_cell.try(:id)})
156
153
  end
@@ -28,9 +28,7 @@ module Alchemy
28
28
 
29
29
  # We need to update timestamp here because we don't save yet,
30
30
  # but the cache needs to be get invalid.
31
- # And we don't user @content.touch here, because that updates
32
- # also the element and page timestamps what we don't want yet.
33
- @content.update_column(:updated_at, Time.current)
31
+ @content.touch
34
32
  end
35
33
 
36
34
  private
@@ -47,9 +47,7 @@ module Alchemy
47
47
 
48
48
  # We need to update timestamp here because we don't save yet,
49
49
  # but the cache needs to be get invalid.
50
- # And we don't user @content.touch here, because that updates
51
- # also the element and page timestamps what we don't want yet.
52
- @content.update_column(:updated_at, Time.current)
50
+ @content.touch
53
51
  end
54
52
 
55
53
  def destroy
@@ -4,7 +4,7 @@ module Alchemy
4
4
  module Admin
5
5
  class LanguagesController < ResourcesController
6
6
  def index
7
- @query = Language.on_current_site.ransack(params[:q])
7
+ @query = Language.on_current_site.ransack(search_filter_params[:q])
8
8
  @languages = @query.result.page(params[:page] || 1).per(per_page_value_for_screen_size)
9
9
  end
10
10
 
@@ -14,8 +14,8 @@ module Alchemy
14
14
 
15
15
  def index
16
16
  @size = params[:size].present? ? params[:size] : 'medium'
17
- @query = Picture.ransack(params[:q])
18
- @pictures = Picture.search_by(params, @query, pictures_per_page_for_size(@size))
17
+ @query = Picture.ransack(search_filter_params[:q])
18
+ @pictures = Picture.search_by(search_filter_params, @query, pictures_per_page_for_size(@size))
19
19
 
20
20
  if in_overlay?
21
21
  archive_overlay
@@ -92,7 +92,7 @@ module Alchemy
92
92
  else
93
93
  flash[:warn] = Alchemy.t("Could not delete Pictures")
94
94
  end
95
- rescue => e
95
+ rescue StandardError => e
96
96
  flash[:error] = e.message
97
97
  ensure
98
98
  redirect_to_index
@@ -102,7 +102,7 @@ module Alchemy
102
102
  name = @picture.name
103
103
  @picture.destroy
104
104
  flash[:notice] = Alchemy.t("Picture deleted successfully", name: name)
105
- rescue => e
105
+ rescue StandardError => e
106
106
  flash[:error] = e.message
107
107
  ensure
108
108
  redirect_to_index
@@ -141,7 +141,7 @@ module Alchemy
141
141
  end
142
142
 
143
143
  def search_filter_params
144
- params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:picture_ids]).permit(
144
+ @_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:picture_ids]).permit(
145
145
  *common_search_filter_includes + [
146
146
  :size,
147
147
  :element_id,
@@ -7,7 +7,7 @@ require 'alchemy/resources_helper'
7
7
  module Alchemy
8
8
  module Admin
9
9
  class ResourcesController < Alchemy::Admin::BaseController
10
- COMMON_SEARCH_FILTER_EXCLUDES = [:id, :utf8, :_method, :_].freeze
10
+ COMMON_SEARCH_FILTER_EXCLUDES = [:id, :utf8, :_method, :_, :format].freeze
11
11
 
12
12
  include Alchemy::ResourcesHelper
13
13
 
@@ -20,18 +20,18 @@ module Alchemy
20
20
  before_action :authorize_resource
21
21
 
22
22
  def index
23
- @query = resource_handler.model.ransack(params[:q])
23
+ @query = resource_handler.model.ransack(search_filter_params[:q])
24
24
  items = @query.result
25
25
 
26
26
  if contains_relations?
27
27
  items = items.includes(*resource_relations_names)
28
28
  end
29
29
 
30
- if params[:tagged_with].present?
31
- items = items.tagged_with(params[:tagged_with])
30
+ if search_filter_params[:tagged_with].present?
31
+ items = items.tagged_with(search_filter_params[:tagged_with])
32
32
  end
33
33
 
34
- if params[:filter].present?
34
+ if search_filter_params[:filter].present?
35
35
  items = items.public_send(sanitized_filter_params)
36
36
  end
37
37
 
@@ -61,7 +61,7 @@ module Alchemy
61
61
  resource_instance_variable.save
62
62
  render_errors_or_redirect(
63
63
  resource_instance_variable,
64
- resources_path(resource_handler.namespaced_resources_name, current_location_params),
64
+ resources_path(resource_instance_variable.class, search_filter_params),
65
65
  flash_notice_for_resource_action
66
66
  )
67
67
  end
@@ -70,7 +70,7 @@ module Alchemy
70
70
  resource_instance_variable.update_attributes(resource_params)
71
71
  render_errors_or_redirect(
72
72
  resource_instance_variable,
73
- resources_path(resource_handler.namespaced_resources_name, current_location_params),
73
+ resources_path(resource_instance_variable.class, search_filter_params),
74
74
  flash_notice_for_resource_action
75
75
  )
76
76
  end
@@ -78,7 +78,7 @@ module Alchemy
78
78
  def destroy
79
79
  resource_instance_variable.destroy
80
80
  flash_notice_for_resource_action
81
- do_redirect_to resource_url_proxy.url_for(current_location_params.merge(action: 'index'))
81
+ do_redirect_to resource_url_proxy.url_for(search_filter_params.merge(action: 'index'))
82
82
  end
83
83
 
84
84
  def resource_handler
@@ -132,12 +132,12 @@ module Alchemy
132
132
 
133
133
  def sanitized_filter_params
134
134
  resource_model.alchemy_resource_filters.detect do |filter|
135
- filter == params[:filter]
135
+ filter == search_filter_params[:filter]
136
136
  end || :all
137
137
  end
138
138
 
139
139
  def search_filter_params
140
- params.except(*COMMON_SEARCH_FILTER_EXCLUDES).permit(*common_search_filter_includes)
140
+ @_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES).permit(*common_search_filter_includes).to_h
141
141
  end
142
142
 
143
143
  def common_search_filter_includes
@@ -6,7 +6,7 @@ module Alchemy
6
6
  before_action :load_tag, only: [:edit, :update, :destroy]
7
7
 
8
8
  def index
9
- @query = ActsAsTaggableOn::Tag.ransack(params[:q])
9
+ @query = Gutentag::Tag.ransack(search_filter_params[:q])
10
10
  @tags = @query
11
11
  .result
12
12
  .page(params[:page] || 1)
@@ -15,21 +15,21 @@ module Alchemy
15
15
  end
16
16
 
17
17
  def new
18
- @tag = ActsAsTaggableOn::Tag.new
18
+ @tag = Gutentag::Tag.new
19
19
  end
20
20
 
21
21
  def create
22
- @tag = ActsAsTaggableOn::Tag.create(tag_params)
22
+ @tag = Gutentag::Tag.create(tag_params)
23
23
  render_errors_or_redirect @tag, admin_tags_path, Alchemy.t('New Tag Created')
24
24
  end
25
25
 
26
26
  def edit
27
- @tags = ActsAsTaggableOn::Tag.order("name ASC").to_a - [@tag]
27
+ @tags = Gutentag::Tag.order("name ASC").to_a - [@tag]
28
28
  end
29
29
 
30
30
  def update
31
31
  if tag_params[:merge_to]
32
- @new_tag = ActsAsTaggableOn::Tag.find(tag_params[:merge_to])
32
+ @new_tag = Gutentag::Tag.find(tag_params[:merge_to])
33
33
  Tag.replace(@tag, @new_tag)
34
34
  operation_text = Alchemy.t('Replaced Tag') % {old_tag: @tag.name, new_tag: @new_tag.name}
35
35
  @tag.destroy
@@ -57,7 +57,7 @@ module Alchemy
57
57
  private
58
58
 
59
59
  def load_tag
60
- @tag = ActsAsTaggableOn::Tag.find(params[:id])
60
+ @tag = Gutentag::Tag.find(params[:id])
61
61
  end
62
62
 
63
63
  def tag_params
@@ -66,7 +66,7 @@ module Alchemy
66
66
 
67
67
  def tags_from_term(term)
68
68
  return [] if term.blank?
69
- ActsAsTaggableOn::Tag.where(['LOWER(name) LIKE ?', "#{term.downcase}%"])
69
+ Gutentag::Tag.where(['LOWER(name) LIKE ?', "#{term.downcase}%"])
70
70
  end
71
71
 
72
72
  def json_for_autocomplete(items, attribute)
@@ -7,7 +7,12 @@ module Alchemy
7
7
  # You can either load all or only these for :element_id param
8
8
  #
9
9
  def index
10
- @contents = Content.accessible_by(current_ability, :index)
10
+ # Fix for cancancan not able to merge multiple AR scopes for logged in users
11
+ if can? :manage, Alchemy::Content
12
+ @contents = Content.all
13
+ else
14
+ @contents = Content.accessible_by(current_ability, :index)
15
+ end
11
16
  if params[:element_id].present?
12
17
  @contents = @contents.where(element_id: params[:element_id])
13
18
  end
@@ -9,7 +9,11 @@ module Alchemy
9
9
  # If you want to only load a specific type of element pass ?named=an_element_name
10
10
  #
11
11
  def index
12
- @elements = Element.accessible_by(current_ability, :index)
12
+ @elements = Element.not_nested
13
+ # Fix for cancancan not able to merge multiple AR scopes for logged in users
14
+ if cannot? :manage, Alchemy::Element
15
+ @elements = @elements.accessible_by(current_ability, :index)
16
+ end
13
17
  if params[:page_id].present?
14
18
  @elements = @elements.where(page_id: params[:page_id])
15
19
  end
@@ -7,7 +7,12 @@ module Alchemy
7
7
  # Returns all pages as json object
8
8
  #
9
9
  def index
10
- @pages = Page.accessible_by(current_ability, :index)
10
+ # Fix for cancancan not able to merge multiple AR scopes for logged in users
11
+ if can? :edit_content, Alchemy::Page
12
+ @pages = Page.all
13
+ else
14
+ @pages = Page.accessible_by(current_ability, :index)
15
+ end
11
16
  if params[:page_layout].present?
12
17
  @pages = @pages.where(page_layout: params[:page_layout])
13
18
  end
@@ -95,9 +95,11 @@ module Alchemy
95
95
  end
96
96
 
97
97
  # Logs the current exception to the error log.
98
- def exception_logger(e)
99
- Rails.logger.error("\n#{e.class} #{e.message} in #{e.backtrace.first}")
100
- Rails.logger.error(e.backtrace[1..50].each { |l| l.gsub(/#{Rails.root.to_s}/, '') }.join("\n"))
98
+ def exception_logger(error)
99
+ Rails.logger.error("\n#{error.class} #{error.message} in #{error.backtrace.first}")
100
+ Rails.logger.error(error.backtrace[1..50].each { |line|
101
+ line.gsub(/#{Rails.root.to_s}/, '')
102
+ }.join("\n"))
101
103
  end
102
104
  end
103
105
  end
@@ -156,7 +156,7 @@ module Alchemy
156
156
 
157
157
  def set_expiration_headers
158
158
  if @page.cache_page?
159
- expires_in @page.expiration_time, public: !@page.restricted, must_revalidate: true
159
+ expires_in @page.expiration_time, public: !@page.restricted
160
160
  else
161
161
  expires_now
162
162
  end
@@ -105,7 +105,7 @@ module Alchemy
105
105
  content_tag(:div, class: 'js_filter_field_box') do
106
106
  concat text_field_tag(nil, nil, options)
107
107
  concat render_icon(:search)
108
- concat link_to('', '', class: 'js_filter_field_clear', title: Alchemy.t(:click_to_show_all))
108
+ concat link_to(render_icon(:times, size: 'xs'), '', class: 'js_filter_field_clear', title: Alchemy.t(:click_to_show_all))
109
109
  concat content_tag(:label, Alchemy.t(:search), for: options[:id])
110
110
  end
111
111
  end
@@ -191,7 +191,7 @@ module Alchemy
191
191
  options = {
192
192
  title: Alchemy.t('Delete'),
193
193
  message: Alchemy.t('Are you sure?'),
194
- icon: 'destroy'
194
+ icon: :minus
195
195
  }.merge(options)
196
196
  button_with_confirm(
197
197
  render_icon(options[:icon]),
@@ -227,7 +227,7 @@ module Alchemy
227
227
  # == Example
228
228
  #
229
229
  # <%= toolbar_button(
230
- # icon: 'create',
230
+ # icon: :plus,
231
231
  # label: 'Create',
232
232
  # url: new_resource_path,
233
233
  # title: 'Create Resource',
@@ -267,7 +267,7 @@ module Alchemy
267
267
  active: false,
268
268
  link_options: {},
269
269
  dialog_options: {},
270
- loading_indicator: true
270
+ loading_indicator: false
271
271
  }.merge(options.symbolize_keys)
272
272
  button = render(
273
273
  'alchemy/admin/partials/toolbar_button',
@@ -288,7 +288,7 @@ module Alchemy
288
288
  # <% toolbar(
289
289
  # buttons: [
290
290
  # {
291
- # icon: 'create',
291
+ # icon: :plus,
292
292
  # label: label_title,
293
293
  # url: new_resource_path,
294
294
  # title: label_title,
@@ -374,7 +374,7 @@ module Alchemy
374
374
  type = html_options.delete(:type) || 'date'
375
375
  date = html_options.delete(:value) || object.send(method.to_sym).presence
376
376
  date = Time.zone.parse(date) if date.is_a?(String)
377
- value = date ? l(date, format: "#{type}picker".to_sym) : nil
377
+ value = date ? l(date, format: "alchemy.#{type}picker".to_sym) : nil
378
378
 
379
379
  text_field object.class.name.demodulize.underscore.to_sym,
380
380
  method.to_sym, {type: "text", class: type, "data-datepicker-type" => type, value: value}.merge(html_options)
@@ -385,7 +385,7 @@ module Alchemy
385
385
  def render_hint_for(element)
386
386
  return unless element.has_hint?
387
387
  content_tag :span, class: 'hint-with-icon' do
388
- render_icon(:questionmark) +
388
+ render_icon('question-circle') +
389
389
  content_tag(:span, element.hint.html_safe, class: 'hint-bubble')
390
390
  end
391
391
  end
@@ -421,15 +421,15 @@ module Alchemy
421
421
  #
422
422
  # == Example
423
423
  #
424
- # <%= hint_with_tooltip('Page layout is missing', class: 'warning icon') %>
424
+ # <%= hint_with_tooltip('Page layout is missing', icon: 'info') %>
425
425
  #
426
426
  # @param text [String] - The text displayed in the tooltip
427
- # @param html_options [Hash] - Options passed to the wrapper `content_tag`
427
+ # @param icon: 'exclamation-triangle' [String] - Icon name
428
428
  #
429
- def hint_with_tooltip(text, html_options = {})
430
- css_class = "#{html_options[:class]} with-hint"
431
- content_tag :span, html_options.merge(class: css_class) do
432
- content_tag(:span, text, class: 'hint-bubble')
429
+ # @return [String]
430
+ def hint_with_tooltip(text, icon: 'exclamation-triangle')
431
+ content_tag :span, class: 'hint-with-icon' do
432
+ render_icon(icon) + content_tag(:span, text, class: 'hint-bubble')
433
433
  end
434
434
  end
435
435
 
@@ -437,8 +437,7 @@ module Alchemy
437
437
  # that explains the user that the page layout is missing
438
438
  def page_layout_missing_warning
439
439
  hint_with_tooltip(
440
- Alchemy.t(:page_definition_missing),
441
- class: 'inline warning icon'
440
+ Alchemy.t(:page_definition_missing)
442
441
  )
443
442
  end
444
443