alchemy_cms 4.6.7 → 5.0.0.beta1
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +33 -1
- data/.github/workflows/stale.yml +1 -1
- data/.gitignore +20 -2
- data/.hound.yml +2 -1
- data/.prettierrc +6 -0
- data/.rubocop.yml +31 -10
- data/CHANGELOG.md +89 -32
- data/Gemfile +24 -22
- data/README.md +31 -19
- data/Rakefile +10 -8
- data/alchemy_cms.gemspec +6 -5
- data/app/assets/javascripts/alchemy/admin.js +1 -5
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -1
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -2
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +17 -17
- data/app/assets/javascripts/alchemy/node_select.js +39 -0
- data/app/assets/javascripts/alchemy/templates/index.js +1 -0
- data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
- data/app/assets/stylesheets/alchemy/admin.scss +3 -2
- data/app/assets/stylesheets/alchemy/base.scss +0 -1
- data/app/assets/stylesheets/alchemy/elements.scss +1 -1
- data/app/assets/stylesheets/alchemy/forms.scss +5 -0
- data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
- data/app/assets/stylesheets/alchemy/nodes.scss +1 -1
- data/app/assets/stylesheets/alchemy/sitemap.scss +5 -1
- data/app/assets/stylesheets/alchemy/tables.scss +1 -24
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +3 -3
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +7 -7
- data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
- data/app/controllers/alchemy/admin/base_controller.rb +16 -42
- data/app/controllers/alchemy/admin/clipboard_controller.rb +5 -4
- data/app/controllers/alchemy/admin/contents_controller.rb +1 -2
- data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -9
- data/app/controllers/alchemy/admin/elements_controller.rb +20 -20
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +12 -14
- data/app/controllers/alchemy/admin/languages_controller.rb +35 -2
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +5 -2
- data/app/controllers/alchemy/admin/nodes_controller.rb +5 -4
- data/app/controllers/alchemy/admin/pages_controller.rb +50 -62
- data/app/controllers/alchemy/admin/pictures_controller.rb +16 -16
- data/app/controllers/alchemy/admin/resources_controller.rb +21 -13
- data/app/controllers/alchemy/admin/sites_controller.rb +18 -0
- data/app/controllers/alchemy/admin/styleguide_controller.rb +1 -0
- data/app/controllers/alchemy/admin/tags_controller.rb +5 -3
- data/app/controllers/alchemy/admin/trash_controller.rb +6 -6
- data/app/controllers/alchemy/api/base_controller.rb +2 -2
- data/app/controllers/alchemy/api/contents_controller.rb +4 -4
- data/app/controllers/alchemy/api/elements_controller.rb +8 -8
- data/app/controllers/alchemy/api/nodes_controller.rb +37 -1
- data/app/controllers/alchemy/api/pages_controller.rb +14 -23
- data/app/controllers/alchemy/attachments_controller.rb +5 -5
- data/app/controllers/alchemy/base_controller.rb +10 -9
- data/app/controllers/alchemy/messages_controller.rb +16 -23
- data/app/controllers/alchemy/pages_controller.rb +13 -11
- data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +3 -2
- data/app/controllers/concerns/alchemy/admin/current_language.rb +23 -0
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +5 -5
- data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +4 -4
- data/app/controllers/concerns/alchemy/page_redirects.rb +2 -9
- data/app/controllers/concerns/alchemy/site_redirects.rb +2 -2
- data/app/decorators/alchemy/element_editor.rb +39 -0
- data/app/helpers/alchemy/admin/attachments_helper.rb +6 -6
- data/app/helpers/alchemy/admin/base_helper.rb +36 -35
- data/app/helpers/alchemy/admin/contents_helper.rb +3 -3
- data/app/helpers/alchemy/admin/elements_helper.rb +3 -88
- data/app/helpers/alchemy/admin/essences_helper.rb +8 -117
- data/app/helpers/alchemy/admin/form_helper.rb +1 -1
- data/app/helpers/alchemy/admin/navigation_helper.rb +24 -23
- data/app/helpers/alchemy/admin/pages_helper.rb +4 -4
- data/app/helpers/alchemy/admin/pictures_helper.rb +3 -3
- data/app/helpers/alchemy/admin/tags_helper.rb +8 -7
- data/app/helpers/alchemy/base_helper.rb +13 -8
- data/app/helpers/alchemy/elements_block_helper.rb +2 -31
- data/app/helpers/alchemy/elements_helper.rb +12 -58
- data/app/helpers/alchemy/pages_helper.rb +24 -174
- data/app/helpers/alchemy/url_helper.rb +2 -1
- data/app/mailers/alchemy/base_mailer.rb +1 -1
- data/app/mailers/alchemy/messages_mailer.rb +1 -1
- data/app/models/alchemy/attachment.rb +21 -19
- data/app/models/alchemy/base_record.rb +2 -5
- data/app/models/alchemy/content/factory.rb +24 -31
- data/app/models/alchemy/content.rb +33 -38
- data/app/models/alchemy/element/definitions.rb +4 -4
- data/app/models/alchemy/element/element_contents.rb +9 -6
- data/app/models/alchemy/element/element_essences.rb +4 -3
- data/app/models/alchemy/element/presenters.rb +3 -2
- data/app/models/alchemy/element.rb +46 -54
- data/app/models/alchemy/element_to_page.rb +1 -1
- data/app/models/alchemy/essence_boolean.rb +1 -3
- data/app/models/alchemy/essence_date.rb +2 -3
- data/app/models/alchemy/essence_file.rb +4 -4
- data/app/models/alchemy/essence_html.rb +1 -3
- data/app/models/alchemy/essence_link.rb +1 -3
- data/app/models/alchemy/essence_node.rb +18 -0
- data/app/models/alchemy/essence_page.rb +3 -16
- data/app/models/alchemy/essence_picture.rb +17 -16
- data/app/models/alchemy/essence_picture_view.rb +7 -6
- data/app/models/alchemy/essence_richtext.rb +1 -3
- data/app/models/alchemy/essence_select.rb +1 -3
- data/app/models/alchemy/essence_text.rb +0 -2
- data/app/models/alchemy/folded_page.rb +1 -0
- data/app/models/alchemy/language/code.rb +4 -4
- data/app/models/alchemy/language.rb +21 -35
- data/app/models/alchemy/legacy_page_url.rb +1 -1
- data/app/models/alchemy/message.rb +3 -3
- data/app/models/alchemy/node.rb +28 -5
- data/app/models/alchemy/page/fixed_attributes.rb +3 -2
- data/app/models/alchemy/page/page_elements.rb +35 -44
- data/app/models/alchemy/page/page_naming.rb +20 -70
- data/app/models/alchemy/page/page_natures.rb +7 -34
- data/app/models/alchemy/page/page_scopes.rb +23 -29
- data/app/models/alchemy/page/url_path.rb +0 -2
- data/app/models/alchemy/page.rb +47 -128
- data/app/models/alchemy/picture/transformations.rb +9 -7
- data/app/models/alchemy/picture/url.rb +5 -5
- data/app/models/alchemy/picture.rb +19 -28
- data/app/models/alchemy/site/layout.rb +2 -2
- data/app/models/alchemy/site.rb +6 -36
- data/app/models/concerns/alchemy/touch_elements.rb +24 -0
- data/app/serializers/alchemy/content_serializer.rb +0 -3
- data/app/serializers/alchemy/essence_boolean_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_date_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_file_serializer.rb +4 -2
- data/app/serializers/alchemy/essence_html_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_link_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_picture_serializer.rb +5 -4
- data/app/serializers/alchemy/essence_richtext_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_select_serializer.rb +3 -3
- data/app/serializers/alchemy/essence_text_serializer.rb +5 -4
- data/app/serializers/alchemy/node_serializer.rb +2 -0
- data/app/serializers/alchemy/page_tree_serializer.rb +9 -13
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -2
- data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -2
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +4 -4
- data/app/views/alchemy/admin/contents/create.js.erb +1 -3
- data/app/views/alchemy/admin/elements/_element.html.erb +9 -18
- data/app/views/alchemy/admin/elements/create.js.erb +1 -1
- data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
- data/app/views/alchemy/admin/elements/index.html.erb +3 -3
- data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -6
- data/app/views/alchemy/admin/essence_files/edit.html.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -7
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +7 -7
- data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
- data/app/views/alchemy/admin/languages/_form.html.erb +5 -5
- data/app/views/alchemy/admin/languages/_table.html.erb +3 -3
- data/app/views/alchemy/admin/languages/edit.html.erb +1 -0
- data/app/views/alchemy/admin/languages/index.html.erb +23 -4
- data/app/views/alchemy/admin/languages/new.html.erb +1 -0
- data/app/views/alchemy/admin/layoutpages/index.html.erb +3 -3
- data/app/views/alchemy/admin/nodes/_form.html.erb +18 -15
- data/app/views/alchemy/admin/nodes/_node.html.erb +1 -5
- data/app/views/alchemy/admin/nodes/index.html.erb +3 -4
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
- data/app/views/alchemy/admin/pages/_form.html.erb +0 -1
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
- data/app/views/alchemy/admin/pages/_page.html.erb +11 -19
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
- data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/info.html.erb +0 -9
- data/app/views/alchemy/admin/pages/unlock.js.erb +13 -6
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +0 -2
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +1 -5
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -2
- data/app/views/alchemy/admin/resources/_resource.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_table.html.erb +2 -2
- data/app/views/alchemy/admin/sites/_form.html.erb +8 -0
- data/app/views/alchemy/admin/sites/edit.html.erb +1 -0
- data/app/views/alchemy/admin/sites/index.html.erb +21 -9
- data/app/views/alchemy/admin/sites/new.html.erb +1 -0
- data/app/views/alchemy/admin/tags/index.html.erb +2 -2
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +10 -12
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +11 -8
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +16 -17
- data/app/views/alchemy/essences/_essence_html_editor.html.erb +8 -5
- data/app/views/alchemy/essences/_essence_link_editor.html.erb +18 -15
- data/app/views/alchemy/essences/_essence_node_editor.html.erb +27 -0
- data/app/views/alchemy/essences/_essence_node_view.html.erb +1 -0
- data/app/views/alchemy/essences/_essence_page_editor.html.erb +14 -11
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +22 -20
- data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +10 -7
- data/app/views/alchemy/essences/_essence_select_editor.html.erb +12 -16
- data/app/views/alchemy/essences/_essence_text_editor.html.erb +18 -17
- data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +6 -11
- data/app/views/alchemy/pages/show.rss.builder +3 -2
- data/app/views/layouts/alchemy/admin.html.erb +1 -0
- data/babel.config.js +12 -0
- data/bin/rails +5 -4
- data/config/alchemy/config.yml +15 -18
- data/config/brakeman.ignore +1 -1
- data/config/initializers/assets.rb +2 -1
- data/config/initializers/dragonfly.rb +2 -1
- data/config/initializers/mime_types.rb +1 -0
- data/config/initializers/mini_profiler.rb +3 -2
- data/config/initializers/simple_form.rb +6 -6
- data/config/locales/alchemy.en.yml +23 -8
- data/config/routes.rb +25 -24
- data/config/spring.rb +3 -2
- data/db/migrate/20200226213334_alchemy_four_point_four.rb +313 -0
- data/db/migrate/20200423073425_create_alchemy_essence_nodes.rb +11 -0
- data/db/migrate/20200504210159_remove_site_id_from_nodes.rb +28 -0
- data/db/migrate/20200505215518_add_language_id_foreign_key_to_alchemy_pages.rb +8 -0
- data/db/migrate/20200511113603_add_menu_type_to_alchemy_nodes.rb +27 -0
- data/db/migrate/20200514091507_make_page_layoutpage_null_false.rb +6 -0
- data/db/migrate/20200519073500_remove_visible_from_alchemy_pages.rb +24 -0
- data/lib/alchemy/admin/locale.rb +3 -1
- data/lib/alchemy/admin/preview_url.rb +64 -0
- data/lib/alchemy/auth_accessors.rb +8 -7
- data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
- data/lib/alchemy/config.rb +1 -5
- data/lib/alchemy/configuration_methods.rb +3 -1
- data/lib/alchemy/controller_actions.rb +6 -5
- data/lib/alchemy/deprecation.rb +2 -1
- data/lib/alchemy/elements_finder.rb +5 -5
- data/lib/alchemy/engine.rb +22 -14
- data/lib/alchemy/errors.rb +0 -7
- data/lib/alchemy/essence.rb +17 -16
- data/lib/alchemy/filetypes.rb +5 -5
- data/lib/alchemy/forms/builder.rb +4 -4
- data/lib/alchemy/hints.rb +1 -1
- data/lib/alchemy/i18n.rb +2 -1
- data/lib/alchemy/modules.rb +12 -12
- data/lib/alchemy/name_conversions.rb +5 -5
- data/lib/alchemy/on_page_layout/callbacks_runner.rb +1 -0
- data/lib/alchemy/page_layout.rb +15 -12
- data/lib/alchemy/paths.rb +1 -1
- data/lib/alchemy/permissions.rb +7 -6
- data/lib/alchemy/resource.rb +25 -17
- data/lib/alchemy/resources_helper.rb +12 -18
- data/lib/alchemy/routing_constraints.rb +1 -1
- data/lib/alchemy/seeder.rb +42 -14
- data/lib/alchemy/shell.rb +13 -10
- data/lib/alchemy/taggable.rb +1 -0
- data/lib/alchemy/tasks/tidy.rb +4 -3
- data/lib/alchemy/test_support/config_stubbing.rb +1 -0
- data/lib/alchemy/test_support/essence_shared_examples.rb +72 -72
- data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -5
- data/lib/alchemy/test_support/factories/content_factory.rb +6 -6
- data/lib/alchemy/test_support/factories/dummy_user_factory.rb +7 -7
- data/lib/alchemy/test_support/factories/element_factory.rb +9 -9
- data/lib/alchemy/test_support/factories/essence_file_factory.rb +3 -3
- data/lib/alchemy/test_support/factories/essence_page_factory.rb +3 -3
- data/lib/alchemy/test_support/factories/essence_picture_factory.rb +4 -4
- data/lib/alchemy/test_support/factories/essence_text_factory.rb +3 -3
- data/lib/alchemy/test_support/factories/language_factory.rb +16 -14
- data/lib/alchemy/test_support/factories/node_factory.rb +8 -8
- data/lib/alchemy/test_support/factories/page_factory.rb +15 -27
- data/lib/alchemy/test_support/factories/picture_factory.rb +5 -5
- data/lib/alchemy/test_support/factories/site_factory.rb +7 -6
- data/lib/alchemy/test_support/factories.rb +1 -1
- data/lib/alchemy/test_support/integration_helpers.rb +1 -0
- data/lib/alchemy/test_support/shared_contexts.rb +5 -4
- data/lib/alchemy/test_support/shared_uploader_examples.rb +4 -3
- data/lib/alchemy/tinymce.rb +15 -13
- data/lib/alchemy/upgrader/five_point_zero.rb +41 -0
- data/lib/alchemy/upgrader/tasks/element_views_updater.rb +4 -4
- data/lib/alchemy/upgrader/tasks/harden_gutentag_migrations.rb +29 -0
- data/lib/alchemy/upgrader.rb +8 -7
- data/lib/alchemy/userstamp.rb +1 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +52 -51
- data/lib/{rails/generators → generators}/alchemy/base.rb +5 -4
- data/lib/{rails/generators → generators}/alchemy/elements/elements_generator.rb +13 -9
- data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.haml +0 -0
- data/lib/{rails/generators → generators}/alchemy/elements/templates/view.html.slim +0 -0
- data/lib/{rails/generators → generators}/alchemy/essence/essence_generator.rb +15 -13
- data/lib/generators/alchemy/essence/templates/editor.html.erb +17 -0
- data/lib/{rails/generators → generators}/alchemy/essence/templates/view.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/_article.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/_standard.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/alchemy.en.yml +0 -0
- data/lib/generators/alchemy/install/files/alchemy_admin.js +1 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/all.css +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/all.js +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/application.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/files/article.scss +0 -0
- data/lib/generators/alchemy/install/install_generator.rb +110 -0
- data/lib/{rails/generators → generators}/alchemy/install/templates/dragonfly.rb.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/templates/elements.yml.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/templates/menus.yml.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/install/templates/page_layouts.yml.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/menus/menus_generator.rb +2 -2
- data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.erb +1 -4
- data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.haml +1 -4
- data/lib/{rails/generators → generators}/alchemy/menus/templates/node.html.slim +1 -4
- data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.erb +1 -1
- data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.haml +1 -1
- data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +1 -1
- data/lib/{rails/generators → generators}/alchemy/module/module_generator.rb +3 -2
- data/lib/{rails/generators → generators}/alchemy/module/templates/ability.rb.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/module/templates/controller.rb.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/module/templates/module_config.rb.tt +0 -0
- data/lib/{rails/generators → generators}/alchemy/page_layouts/page_layouts_generator.rb +5 -4
- data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.haml +0 -0
- data/lib/{rails/generators → generators}/alchemy/page_layouts/templates/layout.html.slim +0 -0
- data/lib/{rails/generators → generators}/alchemy/site_layouts/site_layouts_generator.rb +4 -2
- data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.erb +0 -0
- data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.haml +0 -0
- data/lib/{rails/generators → generators}/alchemy/site_layouts/templates/layout.html.slim +0 -0
- data/lib/{rails/generators → generators}/alchemy/views/views_generator.rb +7 -6
- data/lib/kaminari/scoped_pagination_url_helper.rb +1 -0
- data/lib/tasks/alchemy/db.rake +3 -19
- data/lib/tasks/alchemy/install.rake +3 -2
- data/lib/tasks/alchemy/tidy.rake +9 -8
- data/lib/tasks/alchemy/upgrade.rake +18 -120
- data/package/admin.js +14 -0
- data/package/src/__tests__/i18n.spec.js +70 -0
- data/package/src/i18n.js +48 -0
- data/package/src/node_tree.js +72 -0
- data/package/src/translations.js +32 -0
- data/package/src/utils/__tests__/ajax.spec.js +124 -0
- data/package/src/utils/__tests__/events.spec.js +38 -0
- data/package/src/utils/ajax.js +48 -0
- data/package/src/utils/events.js +16 -0
- data/package.json +45 -0
- data/vendor/assets/fonts/fa-regular-400.eot +0 -0
- data/vendor/assets/fonts/fa-regular-400.svg +798 -358
- data/vendor/assets/fonts/fa-regular-400.ttf +0 -0
- data/vendor/assets/fonts/fa-regular-400.woff +0 -0
- data/vendor/assets/fonts/fa-regular-400.woff2 +0 -0
- data/vendor/assets/fonts/fa-solid-900.eot +0 -0
- data/vendor/assets/fonts/fa-solid-900.svg +4933 -1408
- data/vendor/assets/fonts/fa-solid-900.ttf +0 -0
- data/vendor/assets/fonts/fa-solid-900.woff +0 -0
- data/vendor/assets/fonts/fa-solid-900.woff2 +0 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +1 -2
- data/vendor/assets/stylesheets/fontawesome/_core.scss +5 -0
- data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +1 -1
- data/vendor/assets/stylesheets/fontawesome/_icons.scss +651 -2
- data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -1
- data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +3 -2
- data/vendor/assets/stylesheets/fontawesome/_stacked.scss +1 -1
- data/vendor/assets/stylesheets/fontawesome/_variables.scss +662 -9
- data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +2 -2
- data/vendor/assets/stylesheets/fontawesome/regular.scss +23 -0
- data/vendor/assets/stylesheets/fontawesome/solid.scss +24 -0
- metadata +117 -98
- data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
- data/app/assets/javascripts/alchemy/alchemy.node_tree.js +0 -66
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
- data/app/assets/javascripts/alchemy/alchemy.utils.js +0 -45
- data/app/helpers/alchemy/essences_helper.rb +0 -119
- data/app/models/concerns/alchemy/content_touching.rb +0 -23
- data/app/serializers/alchemy/legacy_element_serializer.rb +0 -15
- data/app/views/alchemy/admin/contents/_missing.html.erb +0 -17
- data/app/views/alchemy/admin/pages/_menu_fields.html.erb +0 -37
- data/app/views/alchemy/admin/pages/configure_external.html.erb +0 -32
- data/app/views/alchemy/elements/_editor_not_found.html.erb +0 -4
- data/app/views/alchemy/navigation/_image_link.html.erb +0 -14
- data/app/views/alchemy/navigation/_link.html.erb +0 -19
- data/app/views/alchemy/navigation/_renderer.html.erb +0 -29
- data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -363
- data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +0 -41
- data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +0 -6
- data/db/migrate/20191016073858_create_alchemy_essence_pages.rb +0 -8
- data/db/migrate/20191029212236_create_alchemy_nodes.rb +0 -24
- data/db/migrate/20200226081535_add_site_id_to_alchemy_nodes.rb +0 -15
- data/lib/alchemy/error_tracking/airbrake_handler.rb +0 -13
- data/lib/alchemy/error_tracking.rb +0 -14
- data/lib/alchemy/ssl_protection.rb +0 -34
- data/lib/alchemy/tasks/helpers.rb +0 -81
- data/lib/alchemy/test_support/controller_requests.rb +0 -93
- data/lib/alchemy/upgrader/four_point_four.rb +0 -52
- data/lib/alchemy/upgrader/four_point_one.rb +0 -42
- data/lib/alchemy/upgrader/four_point_six.rb +0 -50
- data/lib/alchemy/upgrader/four_point_two.rb +0 -86
- data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -45
- data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -166
- data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -32
- data/lib/alchemy/upgrader/tasks/fixed_element_name_finder.rb +0 -31
- data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +0 -27
- data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +0 -65
- data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +0 -210
- data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +0 -15
- data/lib/rails/generators/alchemy/install/install_generator.rb +0 -60
- data/lib/tasks/alchemy/convert.rake +0 -98
- data/vendor/assets/javascripts/sortable/Sortable.min.js +0 -2
- data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
- data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# *There is generally no need* to use this module. Instead, in
|
|
2
|
-
# a functional/controller test against a Alchemy controller, just
|
|
3
|
-
# use standard Rails functionality by including:
|
|
4
|
-
#
|
|
5
|
-
# routes { Alchemy::Engine.routes }
|
|
6
|
-
#
|
|
7
|
-
# And then use standard Rails test `get`, `post` etc methods.
|
|
8
|
-
#
|
|
9
|
-
# Use this module to easily test Alchemy actions within Alchemy components
|
|
10
|
-
# or inside your application to test routes for the mounted Alchemy engine.
|
|
11
|
-
#
|
|
12
|
-
# Inside your spec_helper.rb, include this module inside the RSpec.configure
|
|
13
|
-
# block by doing this:
|
|
14
|
-
#
|
|
15
|
-
# require 'alchemy/test_support/controller_requests'
|
|
16
|
-
# RSpec.configure do |c|
|
|
17
|
-
# c.include Alchemy::TestSupport::ControllerRequests, type: :controller
|
|
18
|
-
# end
|
|
19
|
-
#
|
|
20
|
-
# Then, in your controller tests, you can access alchemy routes like this:
|
|
21
|
-
#
|
|
22
|
-
# require 'rails_helper'
|
|
23
|
-
#
|
|
24
|
-
# describe Alchemy::Admin::PagesController do
|
|
25
|
-
# it "can see all the pages" do
|
|
26
|
-
# alchemy_get :index
|
|
27
|
-
# end
|
|
28
|
-
# end
|
|
29
|
-
#
|
|
30
|
-
# Use alchemy_get, alchemy_post, alchemy_put or alchemy_delete to make requests
|
|
31
|
-
# to the Alchemy engine, and use regular get, post, put or delete to make
|
|
32
|
-
# requests to your application.
|
|
33
|
-
#
|
|
34
|
-
# Note: Based on Spree::TestingSupport::ControllerRequests. Thanks <3
|
|
35
|
-
#
|
|
36
|
-
# @deprecated Use Rails build in test request methods instead
|
|
37
|
-
#
|
|
38
|
-
module Alchemy
|
|
39
|
-
module TestSupport
|
|
40
|
-
module ControllerRequests
|
|
41
|
-
extend ActiveSupport::Concern
|
|
42
|
-
|
|
43
|
-
# Executes a request simulating GET HTTP method
|
|
44
|
-
# @deprecated Use Rails test `get` helper instead
|
|
45
|
-
def alchemy_get(action, parameters = nil, session = nil, flash = nil)
|
|
46
|
-
process_alchemy_action(action, parameters, session, flash, "GET")
|
|
47
|
-
end
|
|
48
|
-
deprecate alchemy_get: :get, deprecator: Alchemy::Deprecation
|
|
49
|
-
|
|
50
|
-
# Executes a request simulating POST HTTP method
|
|
51
|
-
# @deprecated Use Rails test `post` helper instead
|
|
52
|
-
def alchemy_post(action, parameters = nil, session = nil, flash = nil)
|
|
53
|
-
process_alchemy_action(action, parameters, session, flash, "POST")
|
|
54
|
-
end
|
|
55
|
-
deprecate alchemy_post: :post, deprecator: Alchemy::Deprecation
|
|
56
|
-
|
|
57
|
-
# Executes a request simulating PUT HTTP method
|
|
58
|
-
# @deprecated Use Rails test `put` helper instead
|
|
59
|
-
def alchemy_put(action, parameters = nil, session = nil, flash = nil)
|
|
60
|
-
process_alchemy_action(action, parameters, session, flash, "PUT")
|
|
61
|
-
end
|
|
62
|
-
deprecate alchemy_put: :put, deprecator: Alchemy::Deprecation
|
|
63
|
-
|
|
64
|
-
# Executes a request simulating DELETE HTTP method
|
|
65
|
-
# @deprecated Use Rails test `delete` helper instead
|
|
66
|
-
def alchemy_delete(action, parameters = nil, session = nil, flash = nil)
|
|
67
|
-
process_alchemy_action(action, parameters, session, flash, "DELETE")
|
|
68
|
-
end
|
|
69
|
-
deprecate alchemy_delete: :delete, deprecator: Alchemy::Deprecation
|
|
70
|
-
|
|
71
|
-
# Executes a simulated XHR request
|
|
72
|
-
# @deprecated Use Rails test `xhr` helper instead
|
|
73
|
-
def alchemy_xhr(method, action, parameters = nil, session = nil, flash = nil)
|
|
74
|
-
process_alchemy_xhr_action(method, action, parameters, session, flash)
|
|
75
|
-
end
|
|
76
|
-
deprecate alchemy_xhr: :xhr, deprecator: Alchemy::Deprecation
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
def process_alchemy_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
|
|
81
|
-
@routes = Alchemy::Engine.routes
|
|
82
|
-
parameters ||= {}
|
|
83
|
-
process(action, method, parameters, session, flash)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def process_alchemy_xhr_action(method, action, parameters = nil, session = nil, flash = nil)
|
|
87
|
-
@routes = Alchemy::Engine.routes
|
|
88
|
-
parameters ||= {}
|
|
89
|
-
xml_http_request(method, action, parameters, session, flash)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'tasks/element_views_updater'
|
|
4
|
-
|
|
5
|
-
module Alchemy
|
|
6
|
-
class Upgrader::FourPointFour < Upgrader
|
|
7
|
-
class << self
|
|
8
|
-
def rename_element_views
|
|
9
|
-
desc "Remove '_view' suffix from element views."
|
|
10
|
-
Alchemy::Upgrader::Tasks::ElementViewsUpdater.new.rename_element_views
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def update_local_variable
|
|
14
|
-
desc 'Update element views local variable to element name.'
|
|
15
|
-
Alchemy::Upgrader::Tasks::ElementViewsUpdater.new.update_local_variable
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def alchemy_4_4_todos
|
|
19
|
-
notice = <<-NOTE.strip_heredoc
|
|
20
|
-
|
|
21
|
-
ℹ️ Element editor partials are deprecated
|
|
22
|
-
-----------------------------------------
|
|
23
|
-
|
|
24
|
-
The element editor partials are not needed anymore. They still work, but in order to
|
|
25
|
-
prepare the Alchemy 5 upgrade your should consider removing them now.
|
|
26
|
-
|
|
27
|
-
In order to update check if you have any messages in your editor partials and move them
|
|
28
|
-
to either a `warning` or `message` in your element definition.
|
|
29
|
-
|
|
30
|
-
Also check if you pass any values to EssenceSelects `select_values`. Move static values
|
|
31
|
-
to the `settings` of your content definition and either use EssencePage for referencing
|
|
32
|
-
pages or create a custom essence for other dynamic values.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
ℹ️ The `_view` suffix of Element view partials is deprecated
|
|
36
|
-
-----------------------------------------------------------
|
|
37
|
-
|
|
38
|
-
The element view partials do not need the `_view` suffix anymore. Your files have been
|
|
39
|
-
renamed.
|
|
40
|
-
|
|
41
|
-
The local variable in your element views has been replaced by a variable named after the
|
|
42
|
-
element itself. A "article" element has a "_article.html.erb" partial and therefore
|
|
43
|
-
a `article` local variable now.
|
|
44
|
-
|
|
45
|
-
The former `element` variable is still present, though.
|
|
46
|
-
|
|
47
|
-
NOTE
|
|
48
|
-
todo notice, 'Alchemy v4.4 TODO'
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
require_relative 'tasks/harden_acts_as_taggable_on_migrations'
|
|
2
|
-
|
|
3
|
-
module Alchemy
|
|
4
|
-
class Upgrader::FourPointOne < Upgrader
|
|
5
|
-
class << self
|
|
6
|
-
def harden_acts_as_taggable_on_migrations
|
|
7
|
-
desc 'Harden `acts_as_taggable_on_migrations`'
|
|
8
|
-
`bundle exec rake railties:install:migrations FROM=acts_as_taggable_on_engine`
|
|
9
|
-
Alchemy::Upgrader::Tasks::HardenActsAsTaggableOnMigrations.new.patch_migrations
|
|
10
|
-
`bundle exec rake db:migrate`
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def alchemy_4_1_todos
|
|
14
|
-
notice = <<-NOTE.strip_heredoc
|
|
15
|
-
ℹ️ Changed tagging provider to Gutentag
|
|
16
|
-
---------------------------------------
|
|
17
|
-
|
|
18
|
-
The automatic updater that just ran updated all existing `acts_as_taggable_on_migrations`,
|
|
19
|
-
so that they don't blow up if the `acts_as_taggable_on` gem is no longer available.
|
|
20
|
-
|
|
21
|
-
All your existing tags have been migrated to `Gutentag::Tag`s.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
⚠️ Removed Rails and non-English translations
|
|
25
|
-
---------------------------------------------
|
|
26
|
-
|
|
27
|
-
Removed the Rails translations from our translation files and moved all non-english translation
|
|
28
|
-
files into the newly introduced `alchemy_i18n` gem.
|
|
29
|
-
|
|
30
|
-
If you need more translations than the default English one you can either put `alchemy_i18n`
|
|
31
|
-
in to your apps `Gemfile` or - recommended - copy only the translation files you need into your
|
|
32
|
-
apps `config/locales` folder.
|
|
33
|
-
|
|
34
|
-
For the Rails translations either put the `rails-i18n` gem into your apps Gemfile or - recommended -
|
|
35
|
-
copy only the translation files you need into your apps config/locales folder.
|
|
36
|
-
|
|
37
|
-
NOTE
|
|
38
|
-
todo notice, 'Alchemy v4.1 TODO'
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Alchemy
|
|
4
|
-
class Upgrader::FourPointSix < Upgrader
|
|
5
|
-
class << self
|
|
6
|
-
def alchemy_4_6_todos
|
|
7
|
-
notice = <<-NOTE.strip_heredoc
|
|
8
|
-
|
|
9
|
-
ℹ️ Page visible attribute is deprecated
|
|
10
|
-
----------------------------------------
|
|
11
|
-
|
|
12
|
-
Page slugs will be visible in URLs of child pages all the time in the future.
|
|
13
|
-
Please use Menus and Tags instead to re-organize your pages if your page tree does not reflect the URL hierarchy.
|
|
14
|
-
|
|
15
|
-
A rake task to help with the migration is available.
|
|
16
|
-
|
|
17
|
-
bin/rake alchemy:upgrade:4.6:restructure_page_tree
|
|
18
|
-
|
|
19
|
-
NOTE
|
|
20
|
-
todo notice, "Alchemy v4.6 TODO"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def restructure_page_tree
|
|
24
|
-
desc "Move child pages of invisible pages to visible parent."
|
|
25
|
-
Alchemy::Deprecation.silence do
|
|
26
|
-
# All leaves can safely be marked visible
|
|
27
|
-
Alchemy::Page.leaves.update_all(visible: true)
|
|
28
|
-
Alchemy::Page.language_roots.each do |root_page|
|
|
29
|
-
# Root pages are always visible
|
|
30
|
-
root_page.update!(visible: true)
|
|
31
|
-
remove_invisible_children(root_page)
|
|
32
|
-
end
|
|
33
|
-
Alchemy::Page.update_all(visible: true)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
def remove_invisible_children(page)
|
|
40
|
-
page.children.each { |child| remove_invisible_children(child) }
|
|
41
|
-
if !page.visible
|
|
42
|
-
page.children.reload.reverse.each do |child|
|
|
43
|
-
puts "Moving #{child.urlname} to right of #{page.urlname}"
|
|
44
|
-
child.move_to_right_of(page)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
require_relative 'tasks/picture_gallery_upgrader'
|
|
2
|
-
require_relative 'tasks/picture_gallery_migration'
|
|
3
|
-
require_relative 'tasks/fixed_element_name_finder'
|
|
4
|
-
require_relative 'tasks/cells_upgrader'
|
|
5
|
-
require_relative 'tasks/cells_migration'
|
|
6
|
-
require_relative 'tasks/element_partial_name_variable_updater'
|
|
7
|
-
|
|
8
|
-
module Alchemy
|
|
9
|
-
class Upgrader::FourPointTwo < Upgrader
|
|
10
|
-
class << self
|
|
11
|
-
def convert_picture_galleries
|
|
12
|
-
desc 'Convert `picture_gallery` element definitions to `nestable_elements`.'
|
|
13
|
-
Alchemy::Upgrader::Tasks::PictureGalleryUpgrader.new.convert_picture_galleries
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def migrate_picture_galleries
|
|
17
|
-
desc 'Migrate existing gallery elements to `nestable_elements`.'
|
|
18
|
-
Alchemy::Upgrader::Tasks::PictureGalleryMigration.new.migrate_picture_galleries
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def convert_cells
|
|
22
|
-
desc 'Convert cells config to fixed nestable elements.'
|
|
23
|
-
Alchemy::Upgrader::Tasks::CellsUpgrader.new.convert_cells
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def migrate_cells
|
|
27
|
-
desc 'Migrate existing cells to fixed nestable elements.'
|
|
28
|
-
Alchemy::Upgrader::Tasks::CellsMigration.new.migrate_cells
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def update_element_views_variable_name
|
|
32
|
-
desc 'Update element views to use element partial name variable.'
|
|
33
|
-
Alchemy::Upgrader::Tasks::ElementPartialNameVariableUpdater.new.update_element_views
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def alchemy_4_2_todos
|
|
37
|
-
notice = <<-NOTE.strip_heredoc
|
|
38
|
-
⚠️ Element's "picture_gallery" feature removed
|
|
39
|
-
----------------------------------------------
|
|
40
|
-
|
|
41
|
-
The `picture_gallery` feature of elements was removed and has been replaced by nestable elements.
|
|
42
|
-
|
|
43
|
-
The automatic updater that just ran updated your `config/alchemy/elements.yml`. A backup was made.
|
|
44
|
-
Nevertheless, you should have a look into it and double check the changes.
|
|
45
|
-
|
|
46
|
-
We created nested elements for each gallery picture we found in your database.
|
|
47
|
-
|
|
48
|
-
We also updated your element view partials so they have hints about how to render the child elements.
|
|
49
|
-
|
|
50
|
-
🚨 PLEASE LOOK INTO YOUR ELEMENT VIEW PARTIALS AND FOLLOW THE INSTRUCTIONS!
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
⚠️️ Cells replaced by fixed nestable elements
|
|
54
|
-
--------------------------------------------
|
|
55
|
-
|
|
56
|
-
The Cells feature has been replaced by fixed nestable elements.
|
|
57
|
-
|
|
58
|
-
The automatic updater that just ran updated your `config/alchemy/elements.yml`.
|
|
59
|
-
Nevertheless, you should have a look into it and double check the changes.
|
|
60
|
-
|
|
61
|
-
We defined new fixed elements for each cell former defined in `cells.yml`
|
|
62
|
-
and put its `elements` into the `nestable_elements` collection of the new elements definition.
|
|
63
|
-
|
|
64
|
-
We also updated your element view partials so they render the child elements.
|
|
65
|
-
|
|
66
|
-
Please review and fix markup, if necessary.
|
|
67
|
-
|
|
68
|
-
🚨 PLEASE DOUBLE CHECK YOUR ELEMENT PARTIALS AND ADJUST ACCORDINGLY!
|
|
69
|
-
|
|
70
|
-
As always `git diff` is your friend.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
ℹ️ Element views use element partial name as local variable
|
|
74
|
-
-----------------------------------------------------------
|
|
75
|
-
|
|
76
|
-
The local `element` variable in your element views has been replaced by a variable named after the partial.
|
|
77
|
-
A "article" element has a "_article_view.html.erb" partial and therefore a `article_view` local variable now.
|
|
78
|
-
|
|
79
|
-
The former `element` variable is still present, though.
|
|
80
|
-
|
|
81
|
-
NOTE
|
|
82
|
-
todo notice, 'Alchemy v4.2 TODO'
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
module Alchemy::Upgrader::Tasks
|
|
2
|
-
class CellsMigration
|
|
3
|
-
class Cell < ActiveRecord::Base
|
|
4
|
-
self.table_name = 'alchemy_cells'
|
|
5
|
-
belongs_to :page, class_name: 'Alchemy::Page'
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def migrate_cells
|
|
9
|
-
if ActiveRecord::Base.connection.data_source_exists?('alchemy_cells')
|
|
10
|
-
cells = Cell.all
|
|
11
|
-
@fixed_element_name_finder = FixedElementNameFinder.new
|
|
12
|
-
|
|
13
|
-
if cells.any?
|
|
14
|
-
cells.each do |cell|
|
|
15
|
-
migrate_cell!(cell)
|
|
16
|
-
end
|
|
17
|
-
else
|
|
18
|
-
puts "No cells found. Skip"
|
|
19
|
-
end
|
|
20
|
-
else
|
|
21
|
-
puts "Cells table does not exist. Skip"
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def migrate_cell!(cell)
|
|
28
|
-
# bust element definitions insta cache
|
|
29
|
-
Alchemy::Element.instance_variable_set('@definitions', nil)
|
|
30
|
-
fixed_element = Alchemy::Element.find_or_initialize_by(fixed: true, name: @fixed_element_name_finder.call(cell.name), page: cell.page)
|
|
31
|
-
elements = Alchemy::Element.where(cell_id: cell.id).order(position: :asc)
|
|
32
|
-
|
|
33
|
-
if fixed_element.new_record?
|
|
34
|
-
fixed_element.autogenerate_nested_elements = false
|
|
35
|
-
fixed_element.save!
|
|
36
|
-
Alchemy::Element.acts_as_list_no_update do
|
|
37
|
-
elements.update_all(parent_element_id: fixed_element.id)
|
|
38
|
-
end
|
|
39
|
-
puts "Created new fixed element '#{fixed_element.name}' for cell '#{cell.name}'."
|
|
40
|
-
else
|
|
41
|
-
puts "Element for cell '#{cell.name}' already present. Skip"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
require 'alchemy/upgrader'
|
|
2
|
-
require 'rails/generators'
|
|
3
|
-
|
|
4
|
-
module Alchemy::Upgrader::Tasks
|
|
5
|
-
class CellsUpgrader < Thor
|
|
6
|
-
include Thor::Actions
|
|
7
|
-
|
|
8
|
-
no_tasks do
|
|
9
|
-
def convert_cells
|
|
10
|
-
if File.exist?(page_layouts_config_file)
|
|
11
|
-
backup_config
|
|
12
|
-
convert_page_layouts_config
|
|
13
|
-
else
|
|
14
|
-
puts "\nNo page layouts config found. Skipping."
|
|
15
|
-
end
|
|
16
|
-
if File.exist?(cells_config_file)
|
|
17
|
-
convert_cell_config
|
|
18
|
-
delete_cells_config
|
|
19
|
-
else
|
|
20
|
-
puts "\nNo cells config found. Skipping."
|
|
21
|
-
end
|
|
22
|
-
update_cell_views
|
|
23
|
-
update_render_cell_calls
|
|
24
|
-
move_cell_views
|
|
25
|
-
generate_editor_partials
|
|
26
|
-
puts 'Done ✔'
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def backup_config
|
|
33
|
-
print "-- Copy existing config file to `config/alchemy/page_layouts.yml.old` ... "
|
|
34
|
-
|
|
35
|
-
FileUtils.copy Rails.root.join('config', 'alchemy', 'page_layouts.yml'),
|
|
36
|
-
Rails.root.join('config', 'alchemy', 'page_layouts.yml.old')
|
|
37
|
-
|
|
38
|
-
puts "done ✔\n"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def write_config(config)
|
|
42
|
-
print '-- Writing new `config/alchemy/page_layouts.yml` ... '
|
|
43
|
-
|
|
44
|
-
File.open(Rails.root.join('config', 'alchemy', 'page_layouts.yml'), "w") do |f|
|
|
45
|
-
f.write config.to_yaml.sub("---\n", "").gsub("\n-", "\n\n-")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
puts "done ✔\n"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def convert_page_layouts_config
|
|
52
|
-
print '-- Moving `cells` from page layouts definition into autogenerated `elements` ... '
|
|
53
|
-
page_layouts = YAML.load_file(page_layouts_config_file)
|
|
54
|
-
page_layouts.select { |p| p['cells'].present? }.map do |page_layout|
|
|
55
|
-
elements = page_layout['elements'] || []
|
|
56
|
-
autogenerate_elements = page_layout['autogenerate'] || []
|
|
57
|
-
cell_elements = page_layout.delete('cells')
|
|
58
|
-
page_layout['elements'] = (elements + cell_elements).uniq
|
|
59
|
-
page_layout['autogenerate'] = (autogenerate_elements + cell_elements).uniq
|
|
60
|
-
end
|
|
61
|
-
puts "done ✔\n"
|
|
62
|
-
write_config(page_layouts)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def page_layouts_config_file
|
|
66
|
-
Rails.root.join('config', 'alchemy', 'page_layouts.yml')
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def cells_config_file
|
|
70
|
-
Rails.root.join('config', 'alchemy', 'cells.yml')
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def convert_cell_config
|
|
74
|
-
puts '-- Converting cells into unique fixed nestable elements.'
|
|
75
|
-
fixed_element_name_finder = FixedElementNameFinder.new
|
|
76
|
-
|
|
77
|
-
YAML.load_file(cells_config_file).each do |cell|
|
|
78
|
-
append_to_file Rails.root.join('config', 'alchemy', 'elements.yml') do
|
|
79
|
-
<<-CELL.strip_heredoc
|
|
80
|
-
|
|
81
|
-
- name: #{fixed_element_name_finder.call(cell['name'])}
|
|
82
|
-
fixed: true
|
|
83
|
-
unique: true
|
|
84
|
-
nestable_elements: [#{cell['elements'].join(', ')}]
|
|
85
|
-
CELL
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def delete_cells_config
|
|
91
|
-
puts '-- Deleting cells config file.'
|
|
92
|
-
FileUtils.rm(cells_config_file)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def move_cell_views
|
|
96
|
-
if Dir.exist? cells_view_folder
|
|
97
|
-
puts "-- Move cell views into elements view folder"
|
|
98
|
-
Dir.glob("#{cells_view_folder}/*").each do |view|
|
|
99
|
-
filename = File.basename(view).gsub(/(_\w+)\.(\w*\.)?(erb|haml|slim)/, '\1_view.\2\3')
|
|
100
|
-
FileUtils.mv(view, "#{elements_view_folder}/#{filename}")
|
|
101
|
-
puts " Moved #{File.basename(view)} into `app/views/alchemy/elements/` folder"
|
|
102
|
-
end
|
|
103
|
-
FileUtils.rm_rf(cells_view_folder)
|
|
104
|
-
else
|
|
105
|
-
puts "No cell views found. Skip"
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def generate_editor_partials
|
|
110
|
-
puts "-- Generate editor partials"
|
|
111
|
-
Rails::Generators.invoke('alchemy:elements', ['--skip'])
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
def update_cell_views
|
|
115
|
-
if Dir.exist? cells_view_folder
|
|
116
|
-
puts "-- Update cell views"
|
|
117
|
-
Dir.glob("#{cells_view_folder}/*").each do |view|
|
|
118
|
-
gsub_file(view, /elements\.published/, 'elements')
|
|
119
|
-
gsub_file(view, /cell\.elements(.+)/, 'element.nested_elements\1')
|
|
120
|
-
gsub_file(view, /render_elements[\(\s]?:?from_cell:?\s?(=>)?\s?cell\)?/, 'render element.nested_elements')
|
|
121
|
-
gsub_file(view, /cell/, 'element')
|
|
122
|
-
end
|
|
123
|
-
else
|
|
124
|
-
puts "No cell views found. Skip"
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def update_render_cell_calls
|
|
129
|
-
puts "-- Update render_cell calls"
|
|
130
|
-
Dir.glob("#{alchemy_views_folder}/**/*").each do |view|
|
|
131
|
-
next if File.directory?(view)
|
|
132
|
-
# <%= render_cell 'test' %>
|
|
133
|
-
# <%= render_cell('test') %>
|
|
134
|
-
# <%= render_cell("test", options: true) %>
|
|
135
|
-
content = File.binread(view)
|
|
136
|
-
content.gsub!(/render_cell([\s(]+)(['":])(\w+)([^\w])(.*?)/) do
|
|
137
|
-
element_name = CellNameMigrator.call($3)
|
|
138
|
-
"render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# <%= render_elements from_cell: 'page_intro' %>
|
|
142
|
-
# <%= render_elements testing: 'blubb', from_cell: :page_intro %>
|
|
143
|
-
# <%= render_elements from_cell: "page_intro", testing: 'blubb' %>
|
|
144
|
-
# <%= render_elements(from_cell: "page_intro", testing: 'blubb') %>
|
|
145
|
-
# <%= render_elements(testing: 'blubb', from_cell: "page_intro") %>
|
|
146
|
-
content.gsub!(/render_elements(.*?)from_cell[:\s=>]+([:'"])(\w+)(['"]?)(.*)/) do
|
|
147
|
-
element_name = CellNameMigrator.call($3)
|
|
148
|
-
"render_elements#{$1}only: #{$2}#{element_name}#{$4}, fixed: true#{$5}"
|
|
149
|
-
end
|
|
150
|
-
File.open(view, "wb") { |file| file.write(content) }
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
def elements_view_folder
|
|
155
|
-
Rails.root.join('app', 'views', 'alchemy', 'elements')
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def cells_view_folder
|
|
159
|
-
Rails.root.join('app', 'views', 'alchemy', 'cells')
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def alchemy_views_folder
|
|
163
|
-
Rails.root.join('app', 'views', 'alchemy')
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'alchemy/upgrader'
|
|
4
|
-
|
|
5
|
-
module Alchemy::Upgrader::Tasks
|
|
6
|
-
class ElementPartialNameVariableUpdater < Thor
|
|
7
|
-
include Thor::Actions
|
|
8
|
-
|
|
9
|
-
no_tasks do
|
|
10
|
-
def update_element_views
|
|
11
|
-
puts "-- Update element views local variable to partial name"
|
|
12
|
-
Dir.glob("#{elements_view_folder}/*_view.*").each do |view|
|
|
13
|
-
variable_name = File.basename(view).gsub(/^_([\w-]*)\..*$/, '\1')
|
|
14
|
-
%w[
|
|
15
|
-
cache
|
|
16
|
-
render_essence_view_by_name
|
|
17
|
-
element_view_for
|
|
18
|
-
].each do |method_name|
|
|
19
|
-
gsub_file(view, /#{method_name}([\s(]+)element([^\w])/, "#{method_name}\\1#{variable_name}\\2")
|
|
20
|
-
end
|
|
21
|
-
gsub_file(view, /([\s(%={]+)element([^\w:"'])/, "\\1#{variable_name}\\2")
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def elements_view_folder
|
|
29
|
-
Rails.root.join('app', 'views', 'alchemy', 'elements')
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Alchemy::Upgrader::Tasks
|
|
2
|
-
class FixedElementNameFinder
|
|
3
|
-
|
|
4
|
-
def call(cell_name)
|
|
5
|
-
return cell_name if fixed_elements.include?(cell_name)
|
|
6
|
-
return "#{cell_name}_elements" if unfixed_elements.include?(cell_name)
|
|
7
|
-
cell_name
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
def fixed_elements
|
|
13
|
-
@_fixed_element_names ||= begin
|
|
14
|
-
definitions.select { |element| element['fixed'] }.map { |element| element['name'] }
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def unfixed_elements
|
|
19
|
-
@_unfixed_elements ||= begin
|
|
20
|
-
definitions.reject { |element| element['fixed'] }.map { |element| element['name'] }
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def definitions
|
|
25
|
-
@_definitions ||= begin
|
|
26
|
-
elements_file_path = Rails.root.join('config', 'alchemy', 'elements.yml')
|
|
27
|
-
YAML.load_file(elements_file_path)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'thor'
|
|
2
|
-
|
|
3
|
-
module Alchemy::Upgrader::Tasks
|
|
4
|
-
class HardenActsAsTaggableOnMigrations < Thor
|
|
5
|
-
include Thor::Actions
|
|
6
|
-
|
|
7
|
-
no_tasks do
|
|
8
|
-
def patch_migrations
|
|
9
|
-
sentinel = /add_column.*/
|
|
10
|
-
aato_file = Dir.glob('db/migrate/*_add_taggings_counter_cache_to_tags.*.rb').first
|
|
11
|
-
if aato_file
|
|
12
|
-
inject_into_file aato_file,
|
|
13
|
-
"\n\n # inserted by Alchemy CMS upgrader\n return unless defined?(ActsAsTaggableOn)",
|
|
14
|
-
{ after: sentinel, verbose: true }
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
sentinel = /def up/
|
|
18
|
-
aato_file = Dir.glob('db/migrate/*_change_collation_for_tag_names.*.rb').first
|
|
19
|
-
if aato_file
|
|
20
|
-
inject_into_file aato_file,
|
|
21
|
-
"\n # inserted by Alchemy CMS upgrader\n return unless defined?(ActsAsTaggableOn)\n",
|
|
22
|
-
{ after: sentinel, verbose: true }
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|