alchemy_cms 4.0.6 → 4.1.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.gitignore +1 -0
  4. data/.localeapp/config.rb +8 -0
  5. data/.rubocop.yml +26 -13
  6. data/.travis.yml +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
  }