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,92 +1,80 @@
1
- #= require alchemy/alchemy.jquery_loader
2
- #= require alchemy/alchemy.browser
3
1
  #= require alchemy/alchemy.i18n
4
2
 
5
- window.Alchemy = {} if typeof(Alchemy) is 'undefined'
3
+ window.Alchemy = Alchemy || {}
6
4
 
7
- Alchemy.initAlchemyPreviewMode = ($) ->
8
-
9
- # Setting jQueryUIs global animation duration
10
- $.fx.speeds._default = 400
5
+ Alchemy.initAlchemyPreviewMode = ->
11
6
 
12
7
  # The Alchemy JavaScript Object contains all Functions
13
- $.extend Alchemy,
8
+ Object.assign Alchemy,
14
9
 
15
10
  ElementSelector:
16
11
 
17
- # defaults
18
- scrollOffset: 20
19
-
20
12
  styles:
21
13
  reset:
22
14
  outline: ""
23
15
  "outline-offset": ""
24
- "-moz-outline-radius": ""
25
- default_hover:
26
- outline: "3px solid #F0B437"
16
+ cursor: ""
17
+ hover:
18
+ outline: "2px dashed #f0b437"
27
19
  "outline-offset": "4px"
28
20
  cursor: "pointer"
29
- webkit_hover:
30
- outline: "4px auto #F0B437"
31
- moz_hover:
32
- "-moz-outline-radius": "3px"
33
- default_selected:
34
- outline: "3px solid #90B9D0"
21
+ selected:
22
+ outline: "2px dashed #90b9d0"
35
23
  "outline-offset": "4px"
36
- webkit_selected:
37
- outline: "4px auto #90B9D0"
38
- moz_selected:
39
- "-moz-outline-radius": "3px"
40
24
 
41
25
  init: ->
42
- $elements = $("[data-alchemy-element]")
43
- @$previewElements = $elements
44
- $elements.mouseover (e) =>
45
- $el = $(e.delegateTarget)
46
- $el.attr("title", Alchemy.t('click_to_edit'))
47
- $el.css(@getStyle("hover")) unless $el.hasClass("selected")
48
- return
49
- $elements.mouseout (e) =>
50
- $el = $(e.delegateTarget)
51
- $el.removeAttr("title")
52
- $el.css(@getStyle("reset")) unless $el.hasClass("selected")
53
- return
54
- $elements.on "SelectPreviewElement.Alchemy", (e) =>
55
- $el = $(e.delegateTarget)
56
- # Stop the event from bubbling up to parent elements
57
- e.stopPropagation()
58
- @selectElement($el)
59
- return
60
- $elements.click (e) =>
61
- $el = $(e.delegateTarget)
62
- # Stop the event from bubbling up to parent elements
63
- e.stopPropagation()
64
- # Stop default click events from running
65
- e.preventDefault()
66
- # Mark current preview element as selected
67
- @selectElement($el)
68
- # Focus the element editor
69
- @focusElementEditor($el)
26
+ window.addEventListener "message", (message) =>
27
+ if message.data == "blurAlchemyElements"
28
+ @blurElements()
29
+ , false
30
+ @elements = document.querySelectorAll("[data-alchemy-element]")
31
+ @elements.forEach (element) =>
32
+ element.addEventListener 'mouseover', =>
33
+ element.setAttribute('title', Alchemy.t('click_to_edit'))
34
+ unless element.classList.contains('selected')
35
+ Object.assign element.style, @getStyle('hover')
36
+ return
37
+ element.addEventListener 'mouseout', =>
38
+ element.removeAttribute('title')
39
+ unless element.classList.contains('selected')
40
+ Object.assign element.style, @getStyle('reset')
41
+ return
42
+ element.addEventListener 'SelectPreviewElement.Alchemy', =>
43
+ @selectElement(element)
44
+ return
45
+ , false
46
+ element.addEventListener 'click', (e) =>
47
+ e.stopPropagation()
48
+ e.preventDefault()
49
+ @selectElement(element)
50
+ @focusElementEditor(element)
51
+ return
70
52
  return
71
53
  return
72
54
 
73
55
  # Mark element in preview frame as selected and scrolls to it.
74
- selectElement: ($el) ->
75
- offset = $el.offset()
76
- @$previewElements.removeClass("selected").css(@getStyle("reset"))
77
- $el.addClass("selected").css(@getStyle("selected"))
78
- $("html, body").animate
79
- scrollTop: offset.top - @scrollOffset
80
- scrollLeft: offset.left - @scrollOffset
81
- , 400
56
+ selectElement: (element) ->
57
+ @blurElements()
58
+ element.classList.add('selected')
59
+ Object.assign element.style, @getStyle('selected')
60
+ element.scrollIntoView
61
+ behavior: 'smooth'
62
+ block: 'start'
63
+ return
64
+
65
+ # Blur all elements in preview frame.
66
+ blurElements: ->
67
+ @elements.forEach (element) =>
68
+ element.classList.remove('selected')
69
+ Object.assign element.style, @getStyle('reset')
70
+ return
82
71
  return
83
72
 
84
73
  # Focus the element editor in the Alchemy element window.
85
- focusElementEditor: ($el) ->
74
+ focusElementEditor: (element) ->
86
75
  alchemy_window = window.parent
87
- alchemy_$ = alchemy_window.jQuery
88
- target_id = $el.data("alchemy-element")
89
- $element_editor = alchemy_$("#element_#{target_id}")
76
+ target_id = element.getAttribute('data-alchemy-element')
77
+ $element_editor = alchemy_window.$("#element_#{target_id}")
90
78
  elements_window = alchemy_window.Alchemy.ElementsWindow
91
79
  $element_editor.trigger("FocusElementEditor.Alchemy", target_id)
92
80
  elements_window.show() if elements_window.hidden
@@ -96,17 +84,8 @@ Alchemy.initAlchemyPreviewMode = ($) ->
96
84
  if state == "reset"
97
85
  @styles["reset"]
98
86
  else
99
- default_state_style = @styles["default_#{state}"]
100
- browser = "webkit" if Alchemy.Browser.isWebKit
101
- browser = "moz" if Alchemy.Browser.isFirefox
102
- if browser
103
- $.extend(default_state_style, @styles["#{browser}_#{state}"])
104
- else
105
- default_state_style
87
+ @styles[state]
106
88
 
107
89
  Alchemy.ElementSelector.init()
108
90
 
109
- if typeof(jQuery) is 'undefined'
110
- Alchemy.loadjQuery(Alchemy.initAlchemyPreviewMode)
111
- else
112
- Alchemy.initAlchemyPreviewMode(jQuery)
91
+ Alchemy.initAlchemyPreviewMode()
@@ -13,16 +13,12 @@ Alchemy.PreviewWindow =
13
13
  $('body').append($iframe)
14
14
  @currentWindow = $iframe
15
15
  @_bindReloadButton()
16
- @resize()
17
16
 
18
- resize: ->
19
- width = @_calculateWidth()
20
- height = $(window).height() - @HEIGHT
17
+ resize: (width) ->
21
18
  width = @MIN_WIDTH if width < @MIN_WIDTH
22
19
  @currentWidth = width
23
20
  @currentWindow.css
24
21
  width: width
25
- height: height
26
22
 
27
23
  refresh: (callback) ->
28
24
  $iframe = $('#alchemy_preview_window')
@@ -43,20 +39,15 @@ Alchemy.PreviewWindow =
43
39
 
44
40
  _hideSpinner: ->
45
41
  @spinner.stop()
46
- @reload.html('<span class="icon reload"></span>')
42
+ @reload.html('<i class="icon fas fa-redo fa-fw"></i>')
47
43
 
48
44
  _bindReloadButton: ->
49
45
  $reload = $('#reload_preview_button')
50
46
  key 'alt+r', =>
51
47
  @refresh()
52
- $reload.click =>
48
+ $reload.click (e) =>
49
+ e.preventDefault()
53
50
  @refresh()
54
51
 
55
- _calculateWidth: ->
56
- width = $(window).width() - $('#left_menu').width()
57
- unless Alchemy.ElementsWindow.hidden
58
- width -= $('#alchemy_elements_window').width()
59
- return width
60
-
61
52
  Alchemy.reloadPreview = ->
62
53
  Alchemy.PreviewWindow.refresh()
@@ -96,6 +96,7 @@ Alchemy.Sitemap =
96
96
  @filter_field_clear.click =>
97
97
  @search_field.val('')
98
98
  filter('')
99
+ false
99
100
 
100
101
  # Handles the page publication date fields
101
102
  watchPagePublicationState: ->
@@ -63,12 +63,18 @@ $.extend Alchemy.Tinymce,
63
63
 
64
64
  # Gets called after an editor instance gets intialized
65
65
  #
66
- initInstanceCallback: (inst) ->
67
- $this = $("##{inst.id}")
68
- parent = $this.closest('.element-editor')
69
- parent.find('.spinner').remove()
70
- inst.on 'dirty', (e) ->
71
- Alchemy.setElementDirty(parent)
66
+ initInstanceCallback: (editor) ->
67
+ $this = $("##{editor.id}")
68
+ element = $this.closest('.element-editor')
69
+ element.find('.spinner').remove()
70
+ editor.on 'dirty', ->
71
+ Alchemy.setElementDirty(element)
72
+ return
73
+ editor.on 'click', (event) ->
74
+ event.target = element[0]
75
+ Alchemy.ElementEditors.onClickElement(event)
76
+ return
77
+ return
72
78
 
73
79
  # Removes the TinyMCE editor from given dom ids.
74
80
  #
@@ -3,34 +3,6 @@ window.Alchemy = {} if typeof(window.Alchemy) is 'undefined'
3
3
  # Holds translations for javascripts
4
4
  #
5
5
  Alchemy.translations =
6
-
7
- # German
8
- de:
9
- allowed_chars: 'von %{count} Zeichen'
10
- cancel: 'Abbrechen'
11
- cancelled: 'Abgebrochen'
12
- click_to_edit: 'Klicken zum Bearbeiten'
13
- complete: 'Abgeschlossen'
14
- element_dirty_notice: 'Dieses Element hat nicht gespeicherte Änderungen. Möchten Sie es wirklich einklappen?'
15
- help: 'Hilfe'
16
- ok: 'Ok'
17
- page_dirty_notice: 'Sie haben ungesicherte Änderungen auf der Seite. Diese gehen verloren, wenn Sie fortfahren.'
18
- page_found: 'Seite gefunden'
19
- pages_found: 'Seiten gefunden'
20
- url_validation_failed: 'Die URL hat kein gültiges Format.'
21
- warning: 'Achtung!'
22
- 'File is too large': 'Datei ist zu groß.'
23
- 'File is too small': 'Datei ist zu klein.'
24
- 'File type not allowed': 'Dateityp nicht erlaubt.'
25
- 'Maximum number of files exceeded': 'Maximale Anzahl gleichzeitig erlaubter Datei-Uploads erreicht.'
26
- 'Uploaded bytes exceed file size': 'Maximale Größe der erlaubten Dateigröße erreicht.'
27
- formats:
28
- datetime: "d.m.Y H:i"
29
- date: "d.m.Y"
30
- time: "H:i"
31
- start_of_week: 1
32
-
33
- # English
34
6
  en:
35
7
  allowed_chars: 'of %{count} chars'
36
8
  cancel: 'Cancel'
@@ -55,133 +27,3 @@ Alchemy.translations =
55
27
  date: "Y-m-d"
56
28
  time: "H:i"
57
29
  start_of_week: 0
58
-
59
- # Dutch
60
- nl:
61
- allowed_chars: 'of %{count} chars'
62
- cancel: 'Annuleren'
63
- cancelled: 'Afgebroken'
64
- click_to_edit: 'klik om aan te passen'
65
- complete: 'Klaar'
66
- element_dirty_notice: 'Dit element bevat niet opgeslagen wijzigingen. Wilt u dit echt inklappen?'
67
- help: 'Hulp'
68
- ok: 'Ok'
69
- page_found: 'Page found'
70
- pages_found: 'Pages found'
71
- page_dirty_notice: 'Er zijn wijzigingen op deze pagina aangebracht. Deze gaan verloren als u doorgaat.'
72
- url_validation_failed: 'De url heeft geen geldig formaat.'
73
- warning: 'Waarschuwing!'
74
- 'File is too large': 'File is too large'
75
- 'File is too small': 'File is too small'
76
- 'File type not allowed': 'File type not allowed'
77
- 'Maximum number of files exceeded': 'Uploadlimiet bereikt.'
78
- 'Uploaded bytes exceed file size': 'Uploaded bytes exceed file size'
79
- formats:
80
- datetime: "Y-m-d H:i"
81
- date: "Y-m-d"
82
- time: "H:i"
83
- start_of_week: 1
84
-
85
- # French
86
- fr:
87
- allowed_chars: 'von %{count} signes'
88
- cancel: 'abandonner'
89
- cancelled: 'annulé'
90
- click_to_edit: 'Cliquez pour modifier'
91
- complete: 'terminé'
92
- element_dirty_notice: 'Cet élément a des modifications non enregistrées. Souhaitez-vous vraiment plier?'
93
- help: 'Aide'
94
- ok: 'Ok'
95
- page_dirty_notice: 'Vous avez des modifications non enregistrées sur la page. Ce sera perdue si vous continuez.'
96
- page_found: 'page trouvée'
97
- pages_found: 'pages trouvées'
98
- url_validation_failed: "L'URL n'est pas correctement formatée."
99
- warning: 'Attention!'
100
- 'File is too large': 'Le fichier est trop grand.'
101
- 'File is too small': 'Le fichier est trop petit.'
102
- 'File type not allowed': 'Type de document non autorisé.'
103
- 'Maximum number of files exceeded': 'Le nombre maximum de fichiers est atteint.'
104
- 'Uploaded bytes exceed file size': 'Taille de fichier maximale autorisée atteint.'
105
- formats:
106
- datetime: "d.m.Y H:i"
107
- date: "d.m.Y"
108
- time: "H:i"
109
- start_of_week: 1
110
-
111
- # Russian
112
- ru:
113
- allowed_chars: '%{count} знаков'
114
- cancel: 'Отмена'
115
- cancelled: 'Отменено'
116
- click_to_edit: 'нажмите, чтобы редактировать'
117
- complete: 'Завершено'
118
- element_dirty_notice: 'Для этого элемента есть несохраненные изменения. Вы действительно хотите их сбросить?'
119
- help: 'Помощь'
120
- ok: 'Ок'
121
- page_dirty_notice: 'На странице есть несохраненные изменения. Если вы продолжите, то они пропадут.'
122
- page_found: 'Страница найдена'
123
- pages_found: 'Страницы найдены'
124
- url_validation_failed: 'Адрес (URL) имеет неверный формат.'
125
- warning: 'Внимание!'
126
- 'File is too large': 'Файл слишком большой'
127
- 'File is too small': 'Файл слишком маленький'
128
- 'File type not allowed': 'Этот тип файла не разрешен'
129
- 'Maximum number of files exceeded': 'Исчерпано максимальное количество файлов.'
130
- 'Uploaded bytes exceed file size': 'Превышен максимальный размер файла'
131
- formats:
132
- datetime: "d.m.Y H:i"
133
- date: "d.m.Y"
134
- time: "H:i"
135
- start_of_week: 1
136
-
137
- # Spanish
138
- es:
139
- allowed_chars: 'de %{count} caracteres'
140
- cancel: 'Cancelar'
141
- cancelled: 'Cancelado'
142
- click_to_edit: 'Pulsar para editar'
143
- complete: 'Completado'
144
- element_dirty_notice: 'Este elemento tiene cambios sin guardar. ¿Realmente quieres plegarlo?'
145
- help: 'Ayuda'
146
- ok: 'Aceptar'
147
- page_dirty_notice: 'Tienes cambios sin guardar en esta página. Si continúas se perderán.'
148
- page_found: 'Página encontrada'
149
- pages_found: 'Páginas encontradas'
150
- url_validation_failed: 'La url no tiene un formato válido.'
151
- warning: '¡Atención!'
152
- 'File is too large': 'El archivo es demasiado grande'
153
- 'File is too small': 'El archivo es demasiado pequeño'
154
- 'File type not allowed': 'El tipo de archivo no está permitido'
155
- 'Maximum number of files exceeded': 'Número máximo de archivos excedido.'
156
- 'Uploaded bytes exceed file size': 'Los bytes subidos exceden el tamaño del archivo'
157
- formats:
158
- datetime: "d/m/Y H:i"
159
- date: "d/m/Y"
160
- time: "H:i"
161
- start_of_week: 1
162
-
163
- # Italian
164
- it:
165
- allowed_chars: 'di %{count} caratteri'
166
- cancel: 'Annulla'
167
- cancelled: 'Annullato'
168
- click_to_edit: 'clicca per modificare'
169
- complete: 'Completato'
170
- element_dirty_notice: 'Questo elemento contiene delle modifiche non salvate. Vuoi veramenter chiuderlo?'
171
- help: 'Aiuto'
172
- ok: 'Ok'
173
- page_dirty_notice: 'Su questa pagina hai delle modifiche non salvate. Verranno perse se decidi di continuare.'
174
- page_found: 'Pagina trovata'
175
- pages_found: 'Pagine trovate'
176
- url_validation_failed: 'Formato URL non valido.'
177
- warning: 'Attenzione!'
178
- 'File is too large': 'Il file è troppo grande'
179
- 'File is too small': 'Il file è troppo piccolo'
180
- 'File type not allowed': 'Tipo di file non consentito'
181
- 'Maximum number of files exceeded': 'Numero massimo di file raggiunto.'
182
- 'Uploaded bytes exceed file size': 'Il numero di byte caricati eccede la dimensione del file'
183
- formats:
184
- datetime: "Y-m-d H:i"
185
- date: "Y-m-d"
186
- time: "H:i"
187
- start_of_week: 1
@@ -1,5 +1,3 @@
1
- @import "bourbon";
2
1
  @import "alchemy/variables";
3
2
  @import "alchemy/mixins";
4
3
  @import "alchemy/extends";
5
- @import "alchemy/icon-font";
@@ -1,7 +1,3 @@
1
- %rounded-border {
2
- border-radius: $default-border-radius;
3
- }
4
-
5
1
  %text-overflow {
6
2
  white-space: nowrap;
7
3
  overflow: hidden;
@@ -33,20 +29,19 @@
33
29
  }
34
30
 
35
31
  %default-input-style {
36
- @extend %rounded-border;
37
- box-shadow: inset 0px 1px 1px $medium-gray;
32
+ border-radius: $default-border-radius;
33
+ box-shadow: $form-field-box-shadow;
38
34
  font: $default-font-style;
39
- padding: 1px 2*$default-padding;
40
- margin: $default-form-field-margin;
41
- background: rgba(#fff, 0.9);
42
- border-top: 1px solid $default-border-color;
43
- border-left: 1px solid $default-border-color;
44
- border-bottom: 1px solid $border-inset-color;
45
- border-right: 1px solid $border-inset-color;
35
+ color: $form-field-text-color;
36
+ padding: $form-field-padding;
37
+ margin: $form-field-margin;
38
+ background: $form-field-background-color;
39
+ border-width: $form-field-border-width;
40
+ border-style: $form-field-border-style;
41
+ border-color: $form-field-border-color;
46
42
  width: 100%;
47
- font-size: 12px;
48
- line-height: 12px;
49
- height: $default-form-field-height;
43
+ font-size: $form-field-font-size;
44
+ line-height: $form-field-line-height;
50
45
  transition-property: box-shadow, background-color, border;
51
46
  transition-duration: 0.25s;
52
47
  transition-timing-function: ease-in-out;
@@ -56,8 +51,8 @@
56
51
  }
57
52
 
58
53
  &[disabled], .disabled {
59
- color: #888;
60
- background-color: rgba(#fff, 0.5);
54
+ color: $form-field-disabled-text-color;
55
+ background-color: $form-field-disabled-bg-color;
61
56
  cursor: not-allowed;
62
57
  }
63
58
  }