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,5 +0,0 @@
1
- class RemoveDoNotIndexFromAlchemyEssenceTexts < ActiveRecord::Migration[4.2]
2
- def up
3
- remove_column :alchemy_essence_texts, :do_not_index
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- class RemoveDoNotIndexFromAlchemyEssenceRichtexts < ActiveRecord::Migration[4.2]
2
- def up
3
- remove_column :alchemy_essence_richtexts, :do_not_index
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- class AddPublishedAtToAlchemyPages < ActiveRecord::Migration[4.2]
2
- def change
3
- add_column :alchemy_pages, :published_at, :timestamp
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- class AddParentElementIdToAlchemyElements < ActiveRecord::Migration[4.2]
2
- def change
3
- add_column :alchemy_elements, :parent_element_id, :integer
4
- add_index :alchemy_elements, [:page_id, :parent_element_id]
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- class AddLinkTextToAlchemyEssenceFiles < ActiveRecord::Migration[4.2]
2
- def change
3
- add_column :alchemy_essence_files, :link_text, :string
4
- end
5
- end
@@ -1,7 +0,0 @@
1
- class AddLocaleToAlchemyLanguages < ActiveRecord::Migration[4.2]
2
- def change
3
- add_column :alchemy_languages, :locale, :string
4
- execute \
5
- "UPDATE #{Alchemy::Language.table_name} SET locale = language_code WHERE locale IS NULL;"
6
- end
7
- end
@@ -1,32 +0,0 @@
1
- class AddTimebasedPublishingColumnsToPages < ActiveRecord::Migration[4.2]
2
- def up
3
- add_column :alchemy_pages, :public_on, :datetime
4
- add_column :alchemy_pages, :public_until, :datetime
5
- add_index :alchemy_pages, [:public_on, :public_until]
6
-
7
- update <<-SQL.strip_heredoc
8
- UPDATE alchemy_pages
9
- SET public_on = published_at
10
- WHERE published_at IS NOT NULL AND public=#{ActiveRecord::Base.connection.quoted_true}
11
- SQL
12
-
13
- remove_column :alchemy_pages, :public
14
- end
15
-
16
- def down
17
- add_column :alchemy_pages, :public, :boolean, default: false
18
- current_time = ActiveRecord::Base.connection.quoted_date(Time.current)
19
-
20
- update <<-SQL.strip_heredoc
21
- UPDATE alchemy_pages
22
- SET public = (
23
- public_on IS NOT NULL AND public_on < '#{current_time}'
24
- AND (public_until > '#{current_time}' OR public_until IS NULL)
25
- )
26
- SQL
27
-
28
- remove_index :alchemy_pages, [:public_on, :public_until]
29
- remove_column :alchemy_pages, :public_on
30
- remove_column :alchemy_pages, :public_until
31
- end
32
- end
@@ -1,9 +0,0 @@
1
- class AddImageFileFormatToAlchemyPictures < ActiveRecord::Migration[4.2]
2
- def up
3
- add_column :alchemy_pictures, :image_file_format, :string
4
- end
5
-
6
- def down
7
- remove_column :alchemy_pictures, :image_file_format
8
- end
9
- end
@@ -1,22 +0,0 @@
1
- class ChangeAlchemyPagesLockedToLockedAt < ActiveRecord::Migration[4.2]
2
- def up
3
- add_column :alchemy_pages, :locked_at, :datetime
4
- update <<-SQL.strip_heredoc
5
- UPDATE alchemy_pages
6
- SET locked_at = updated_at
7
- WHERE locked=#{ActiveRecord::Base.connection.quoted_true}
8
- SQL
9
- remove_column :alchemy_pages, :locked
10
- add_index :alchemy_pages, [:locked_at, :locked_by]
11
- end
12
-
13
- def down
14
- add_column :alchemy_pages, :locked, :boolean
15
- update <<-SQL.strip_heredoc
16
- UPDATE alchemy_pages
17
- SET locked=#{ActiveRecord::Base.connection.quoted_true}
18
- WHERE locked_at IS NOT NULL
19
- SQL
20
- remove_column :alchemy_pages, :locked_at
21
- end
22
- end
@@ -1,9 +0,0 @@
1
- class AddIndexToAlchemyPagesRgt < ActiveRecord::Migration[4.2]
2
- def up
3
- add_index :alchemy_pages, :rgt
4
- end
5
-
6
- def down
7
- remove_index :alchemy_pages, :rgt
8
- end
9
- end
@@ -1,20 +0,0 @@
1
- class AddForeignKeyIndicesAndNullConstraints < ActiveRecord::Migration[4.2]
2
- def change
3
- change_column_null :alchemy_cells, :page_id, false, 0
4
- change_column_null :alchemy_contents, :element_id, false, 0
5
- change_column_null :alchemy_contents, :essence_id, false, 0
6
- change_column_null :alchemy_contents, :essence_type, false, 'Alchemy::EssenceText'
7
- change_column_null :alchemy_elements, :page_id, false, 0
8
- change_column_null :alchemy_folded_pages, :page_id, false, 0
9
- change_column_null :alchemy_folded_pages, :user_id, false, 0
10
- change_column_null :alchemy_languages, :site_id, false, 0
11
-
12
- add_index :alchemy_cells, :page_id
13
- add_index :alchemy_contents, [:essence_id, :essence_type], unique: true
14
- add_index :alchemy_elements, :cell_id
15
- add_index :alchemy_essence_files, :attachment_id
16
- add_index :alchemy_essence_pictures, :picture_id
17
- add_index :alchemy_folded_pages, [:page_id, :user_id], unique: true
18
- add_index :alchemy_legacy_page_urls, :page_id
19
- end
20
- end
@@ -1,27 +0,0 @@
1
- class AddForeignKeys < ActiveRecord::Migration[4.2]
2
- def change
3
- add_foreign_key :alchemy_cells, :alchemy_pages,
4
- column: :page_id,
5
- on_update: :cascade,
6
- on_delete: :cascade,
7
- name: :alchemy_cells_page_id_fkey
8
-
9
- add_foreign_key :alchemy_contents, :alchemy_elements,
10
- column: :element_id,
11
- on_update: :cascade,
12
- on_delete: :cascade,
13
- name: :alchemy_contents_element_id_fkey
14
-
15
- add_foreign_key :alchemy_elements, :alchemy_pages,
16
- column: :page_id,
17
- on_update: :cascade,
18
- on_delete: :cascade,
19
- name: :alchemy_elements_page_id_fkey
20
-
21
- add_foreign_key :alchemy_elements, :alchemy_cells,
22
- column: :cell_id,
23
- on_update: :cascade,
24
- on_delete: :cascade,
25
- name: :alchemy_elements_cell_id_fkey
26
- end
27
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Alchemy
4
- module Touching
5
- # Touches the timestamps and userstamps
6
- #
7
- def touch(*)
8
- # Using update here, because we want the touch call to bubble up to the page.
9
- update(touchable_attributes)
10
- end
11
-
12
- private
13
-
14
- # If the model has a +contents+ association,
15
- # it updates all their timestamps.
16
- #
17
- # CAUTION: Only use on bottom to top releations,
18
- # e.g. +Alchemy::Picture+ or +Alchemy::Attachment+
19
- # not on top to bottom ones like +Alchemy::Element+.
20
- #
21
- def touch_contents
22
- return unless respond_to?(:contents)
23
- contents.update_all(touchable_attributes)
24
- end
25
-
26
- # If the model has a +touchable_pages+ association,
27
- # it updates all their timestamps.
28
- #
29
- # Used by +Alchemy::Element+
30
- #
31
- def touch_pages
32
- return unless respond_to?(:touchable_pages)
33
- touchable_pages.update_all(touchable_attributes)
34
- end
35
-
36
- # Returns the attributes hash for touching a model.
37
- #
38
- def touchable_attributes
39
- {updated_at: Time.current, updater_id: Alchemy.user_class.try(:stamper)}
40
- end
41
- end
42
- end
@@ -1,161 +0,0 @@
1
- require 'thor'
2
-
3
- module Alchemy::Upgrader::Tasks
4
- class AvailableContentsUpgrader < Thor
5
- include Thor::Actions
6
-
7
- AVAILABLE_CONTENTS_REGEXP = /^.*element.contents.(named|where).+\n.*render_essence.+\n(.*end.*\n)?/
8
-
9
- no_tasks do
10
- def convert_available_contents
11
- config = read_config
12
- unless config
13
- puts "\nNo elements config found. Skipping."
14
- return
15
- end
16
-
17
- elements_with_available_contents, new_elements = config.partition do |e|
18
- e['available_contents']
19
- end
20
-
21
- if elements_with_available_contents.empty?
22
- puts "No elements with `available_contents` found. Skipping."
23
- return
24
- end
25
-
26
- convert_to_nestable_elements(elements_with_available_contents, new_elements)
27
- backup_config
28
- write_config(new_elements)
29
- remove_new_content_link_from_editor_partials
30
- replace_available_contents_rendering
31
- remove_render_available_contents
32
-
33
- puts "Generate new element partials for nestable elements"
34
- system "rails g alchemy:elements --skip"
35
- end
36
- end
37
-
38
- private
39
-
40
- def read_config
41
- print "1. Reading `config/alchemy/elements.yml` ... "
42
-
43
- old_config_file = Rails.root.join('config', 'alchemy', 'elements.yml')
44
- config = YAML.load_file(old_config_file)
45
-
46
- if config
47
- puts "done.\n"
48
- end
49
-
50
- config
51
- end
52
-
53
- def convert_to_nestable_elements(elements_with_available_contents, new_elements)
54
- print '2. Converting to `nestable_elements` ... '
55
-
56
- elements_with_available_contents.inject(new_elements) do |ne, old_element|
57
- ne << modify_old_element(old_element.dup)
58
- build_new_elements(old_element).inject(ne) do |e, element_from_contents|
59
- e << element_from_contents
60
- end
61
- end
62
-
63
- puts 'done.'
64
- end
65
-
66
- def backup_config
67
- print "3. Copy existing config file to `config/alchemy/elements.yml.old` ... "
68
-
69
- FileUtils.copy Rails.root.join('config', 'alchemy', 'elements.yml'),
70
- Rails.root.join('config', 'alchemy', 'elements.yml.old')
71
-
72
- puts "done.\n"
73
- end
74
-
75
- def write_config(config)
76
- print '4. Writing new `config/alchemy/elements.yml` ... '
77
-
78
- File.open(Rails.root.join('config', 'alchemy', 'elements.yml'), "w") do |f|
79
- f.write config.to_yaml
80
- end
81
-
82
- puts "done.\n"
83
- end
84
-
85
- def remove_new_content_link_from_editor_partials
86
- puts '5. Removing available contents link helpers from editor partials ... '
87
-
88
- editor_partials = Dir.glob(Rails.root.join('app', 'views', 'alchemy', 'elements', '*_editor*'))
89
- editor_partials.each do |partial|
90
- gsub_file partial,
91
- /^.*((delete|render_(create|new))_content|label_and_remove)_link.*$\n/, ''
92
- end
93
- end
94
-
95
- def replace_available_contents_rendering
96
- puts '6. Replace available contents rendering with nested elements in your element views:'
97
-
98
- erb_snippet = <<-ERB
99
- <%- element.nested_elements.available.each do |nested_element| -%>
100
- <%= render_element(nested_element) %>
101
- <%- end -%>
102
- ERB
103
- erb_element_partials(:view).each do |view|
104
- gsub_file view, AVAILABLE_CONTENTS_REGEXP, erb_snippet
105
- end
106
-
107
- haml_slim_snippet = <<-HAMLSLIM
108
- - element.nested_elements.available.each do |nested_element|
109
- = render_element(nested_element)
110
- HAMLSLIM
111
- haml_slim_element_partials(:view).each do |view|
112
- gsub_file view, AVAILABLE_CONTENTS_REGEXP, haml_slim_snippet
113
- end
114
- end
115
-
116
- def remove_render_available_contents
117
- puts '7. Remove available contents rendering from your element editors:'
118
-
119
- erb_element_partials(:editor).each do |view|
120
- gsub_file view, AVAILABLE_CONTENTS_REGEXP, ''
121
- end
122
-
123
- haml_slim_element_partials(:editor).each do |view|
124
- gsub_file view, AVAILABLE_CONTENTS_REGEXP, ''
125
- end
126
- end
127
-
128
- def modify_old_element(element)
129
- nestable_elements = element['available_contents'].map do |content|
130
- "#{element['name']}_#{content['name']}"
131
- end
132
- element.delete('available_contents')
133
- element['nestable_elements'] = nestable_elements
134
- element
135
- end
136
-
137
- def build_new_elements(element)
138
- element['available_contents'].map do |content|
139
- build_new_element(element, content)
140
- end
141
- end
142
-
143
- def build_new_element(element, content)
144
- # All nestable elements are deletable
145
- content['settings'].delete('deletable') if content['settings']
146
- content.delete('settings') if content['settings'] == {}
147
- {
148
- 'name' => "#{element['name']}_#{content['name']}",
149
- 'contents' => [content]
150
- }
151
- end
152
-
153
- def erb_element_partials(kind)
154
- Dir.glob(Rails.root.join('app', 'views', 'alchemy', 'elements', "*_#{kind}.html.erb"))
155
- end
156
-
157
- def haml_slim_element_partials(kind)
158
- Dir.glob(Rails.root.join('app', 'views', 'alchemy', 'elements', "*_#{kind}.html.{haml,slim}"))
159
- end
160
- end
161
- end
@@ -1,15 +0,0 @@
1
- module Alchemy::Upgrader::Tasks
2
- class InstallAssetManifests < Thor
3
- include Thor::Actions
4
-
5
- source_root File.expand_path('../../../rails/generators/alchemy/install/files',
6
- File.dirname(__FILE__))
7
-
8
- no_tasks do
9
- def install
10
- copy_file "all.js", "vendor/assets/javascripts/alchemy/admin/all.js"
11
- copy_file "all.css", "vendor/assets/stylesheets/alchemy/admin/all.css"
12
- end
13
- end
14
- end
15
- end
@@ -1,14 +0,0 @@
1
- module Alchemy::Upgrader::Tasks
2
- class InstallDragonflyConfig < Thor
3
- include Thor::Actions
4
-
5
- source_root File.expand_path('../../../rails/generators/alchemy/install/templates',
6
- File.dirname(__FILE__))
7
-
8
- no_tasks do
9
- def install
10
- template "dragonfly.rb.tt", "config/initializers/dragonfly.rb"
11
- end
12
- end
13
- end
14
- end
@@ -1,71 +0,0 @@
1
- module Alchemy::Upgrader::Tasks
2
- class NestableElementsMigration
3
- def migrate_existing_elements
4
- elements_with_nestable_elements = Alchemy::Element.all.select do |e|
5
- e.definition['nestable_elements']
6
- end
7
-
8
- if elements_with_nestable_elements.present?
9
- elements_with_nestable_elements.each do |el|
10
- migrate_element(el)
11
- end
12
- else
13
- puts "No elements with `nestable_elements` found. Skip"
14
- end
15
- end
16
-
17
- private
18
-
19
- def migrate_element(el)
20
- orphaned_contents = el.contents.where.not(name: element_content_names(el))
21
-
22
- if orphaned_contents.present?
23
- orphaned_contents.each do |content|
24
- next unless addable_element_present_for?(content)
25
- create_element_for_content(content)
26
- end
27
- else
28
- puts "No orphaned contents found for #{el.dom_id}. Skip"
29
- end
30
- end
31
-
32
- def element_content_names(el)
33
- # names of contents directly defined on element
34
- content_names = el.definition.fetch('contents', []).collect do |definition|
35
- definition['name']
36
- end
37
-
38
- # names of contents defined on elements nestable elements
39
- nestable_content_names = el.definition['nestable_elements'].collect { |name|
40
- Alchemy::Element.definition_by_name(name).try(:content_definitions)
41
- }.compact.collect { |c| c['name'] }.uniq
42
-
43
- # we only want content names that are not defined on nestable elements, so we can move them
44
- content_names - nestable_content_names
45
- end
46
-
47
- def create_element_for_content(content)
48
- parent = content.element
49
-
50
- new_element = Alchemy::Element.create(
51
- name: "#{parent.name}_#{content.name}",
52
- parent_element_id: parent.id,
53
- public: parent.public,
54
- folded: parent.folded,
55
- creator: parent.creator,
56
- updater: parent.updater,
57
- page: parent.page,
58
- create_contents_after_create: false
59
- )
60
-
61
- content.update_columns(element_id: new_element.id)
62
- puts "Created new element `#{new_element.name}` for content `#{content.name}`"
63
- end
64
-
65
- def addable_element_present_for?(content)
66
- Alchemy::Element.definitions.any? do |definition|
67
- definition['name'] == "#{content.element.name}_#{content.name}"
68
- end
69
- end
70
- end
71
- end