alchemy_cms 4.4.4 → 5.0.0.beta2
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 +56 -18
- data/.github/workflows/stale.yml +1 -1
- data/.gitignore +20 -2
- data/.hound.yml +2 -1
- data/.prettierrc +6 -0
- data/.rubocop.yml +33 -20
- data/CHANGELOG.md +121 -0
- data/Gemfile +24 -22
- data/README.md +31 -19
- data/Rakefile +10 -8
- data/alchemy_cms.gemspec +7 -5
- data/app/assets/javascripts/alchemy/admin.js +1 -2
- 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.link_dialog.js.coffee +5 -5
- 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 +2 -0
- data/app/assets/javascripts/alchemy/templates/node.hbs +16 -0
- data/app/assets/javascripts/alchemy/templates/node_folder.hbs +3 -0
- data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
- data/app/assets/stylesheets/alchemy/_mixins.scss +2 -3
- data/app/assets/stylesheets/alchemy/_variables.scss +2 -2
- 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/lists.scss +0 -8
- data/app/assets/stylesheets/alchemy/node-select.scss +43 -0
- data/app/assets/stylesheets/alchemy/nodes.scss +6 -1
- data/app/assets/stylesheets/alchemy/sitemap.scss +63 -21
- data/app/assets/stylesheets/alchemy/tables.scss +1 -24
- data/app/controllers/alchemy/admin/attachments_controller.rb +8 -7
- data/app/controllers/alchemy/admin/base_controller.rb +13 -33
- 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 -14
- data/app/controllers/alchemy/admin/pages_controller.rb +50 -63
- 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 +65 -0
- data/app/controllers/alchemy/api/pages_controller.rb +15 -22
- 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/content_editor.rb +55 -0
- 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 +12 -12
- data/app/helpers/alchemy/admin/pictures_helper.rb +4 -6
- 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 +20 -18
- data/app/models/alchemy/base_record.rb +2 -5
- data/app/models/alchemy/content.rb +33 -52
- data/app/models/alchemy/content/factory.rb +24 -31
- data/app/models/alchemy/element.rb +45 -53
- 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_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.rb +21 -35
- data/app/models/alchemy/language/code.rb +4 -4
- data/app/models/alchemy/legacy_page_url.rb +1 -1
- data/app/models/alchemy/message.rb +3 -3
- data/app/models/alchemy/node.rb +55 -9
- data/app/models/alchemy/page.rb +53 -123
- 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 +64 -0
- data/app/models/alchemy/picture.rb +40 -30
- data/app/models/alchemy/picture/preprocessor.rb +26 -0
- data/app/models/alchemy/picture/transformations.rb +9 -7
- data/app/models/alchemy/picture/url.rb +5 -5
- data/app/models/alchemy/site.rb +6 -36
- data/app/models/alchemy/site/layout.rb +2 -2
- 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 +14 -0
- data/app/serializers/alchemy/page_serializer.rb +2 -1
- data/app/serializers/alchemy/page_tree_serializer.rb +11 -14
- 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 +6 -2
- data/app/views/alchemy/admin/nodes/_form.html.erb +23 -15
- data/app/views/alchemy/admin/nodes/_node.html.erb +5 -19
- data/app/views/alchemy/admin/nodes/index.html.erb +3 -18
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +0 -8
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -2
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -0
- data/app/views/alchemy/admin/pages/_page.html.erb +14 -25
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +0 -4
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +6 -0
- 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/partials/_routes.html.erb +8 -0
- 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/pictures/index.html.erb +18 -3
- 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 +23 -22
- 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 +37 -14
- data/config/routes.rb +32 -28
- 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 +85 -0
- data/lib/alchemy/auth_accessors.rb +8 -7
- data/lib/alchemy/cache_digests/template_tracker.rb +5 -4
- data/lib/alchemy/config.rb +26 -2
- 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 +23 -8
- 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 +23 -13
- 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.rb +1 -1
- 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 +21 -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/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.rb +8 -7
- 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/version.rb +1 -1
- data/lib/alchemy_cms.rb +52 -50
- 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/generators/alchemy/install/templates/menus.yml.tt +8 -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 +5 -5
- 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 +2 -2
- data/lib/{rails/generators → generators}/alchemy/menus/templates/wrapper.html.slim +2 -2
- 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 +28 -105
- data/package.json +45 -0
- 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/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 +131 -83
- data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +0 -32
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -29
- 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 -33
- 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/ssl_protection.rb +0 -32
- 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_two.rb +0 -85
- data/lib/alchemy/upgrader/tasks/cells_migration.rb +0 -43
- data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +0 -148
- data/lib/alchemy/upgrader/tasks/element_partial_name_variable_updater.rb +0 -28
- 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 -95
- data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +0 -22
- data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +0 -23
|
@@ -19,7 +19,7 @@ module Alchemy
|
|
|
19
19
|
options[:remote] = request.xhr?
|
|
20
20
|
options[:html] = {
|
|
21
21
|
id: options.delete(:id),
|
|
22
|
-
class: ["alchemy", options.delete(:class)].compact.join(
|
|
22
|
+
class: ["alchemy", options.delete(:class)].compact.join(" "),
|
|
23
23
|
}
|
|
24
24
|
simple_form_for(object, *(args << options), &block)
|
|
25
25
|
end
|
|
@@ -12,9 +12,9 @@ module Alchemy
|
|
|
12
12
|
#
|
|
13
13
|
def alchemy_main_navigation_entry(alchemy_module)
|
|
14
14
|
render(
|
|
15
|
-
|
|
15
|
+
"alchemy/admin/partials/main_navigation_entry",
|
|
16
16
|
alchemy_module: alchemy_module,
|
|
17
|
-
navigation: alchemy_module[
|
|
17
|
+
navigation: alchemy_module["navigation"],
|
|
18
18
|
)
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -36,8 +36,8 @@ module Alchemy
|
|
|
36
36
|
#
|
|
37
37
|
def navigate_module(navigation)
|
|
38
38
|
[
|
|
39
|
-
navigation[
|
|
40
|
-
navigation[
|
|
39
|
+
navigation["action"].to_sym,
|
|
40
|
+
navigation["controller"].to_s.gsub(/\A\//, "").gsub(/\//, "_").to_sym,
|
|
41
41
|
]
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -45,9 +45,9 @@ module Alchemy
|
|
|
45
45
|
#
|
|
46
46
|
def main_navigation_css_classes(navigation)
|
|
47
47
|
[
|
|
48
|
-
|
|
49
|
-
admin_mainnavi_active?(navigation) ?
|
|
50
|
-
navigation.key?(
|
|
48
|
+
"main_navi_entry",
|
|
49
|
+
admin_mainnavi_active?(navigation) ? "active" : nil,
|
|
50
|
+
navigation.key?("sub_navigation") ? "has_sub_navigation" : nil,
|
|
51
51
|
].compact
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -74,8 +74,8 @@ module Alchemy
|
|
|
74
74
|
#
|
|
75
75
|
def url_for_module(alchemy_module)
|
|
76
76
|
route_from_engine_or_main_app(
|
|
77
|
-
alchemy_module[
|
|
78
|
-
url_options_for_module(alchemy_module)
|
|
77
|
+
alchemy_module["engine_name"],
|
|
78
|
+
url_options_for_module(alchemy_module),
|
|
79
79
|
)
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -91,9 +91,10 @@ module Alchemy
|
|
|
91
91
|
def url_for_module_sub_navigation(navigation)
|
|
92
92
|
alchemy_module = module_definition_for(navigation)
|
|
93
93
|
return if alchemy_module.nil?
|
|
94
|
+
|
|
94
95
|
route_from_engine_or_main_app(
|
|
95
|
-
alchemy_module[
|
|
96
|
-
url_options_for_navigation_entry(navigation)
|
|
96
|
+
alchemy_module["engine_name"],
|
|
97
|
+
url_options_for_navigation_entry(navigation),
|
|
97
98
|
)
|
|
98
99
|
end
|
|
99
100
|
|
|
@@ -105,13 +106,13 @@ module Alchemy
|
|
|
105
106
|
sorted = []
|
|
106
107
|
not_sorted = []
|
|
107
108
|
alchemy_modules.map do |m|
|
|
108
|
-
if m[
|
|
109
|
+
if m["position"].blank?
|
|
109
110
|
not_sorted << m
|
|
110
111
|
else
|
|
111
112
|
sorted << m
|
|
112
113
|
end
|
|
113
114
|
end
|
|
114
|
-
sorted.sort_by { |m| m[
|
|
115
|
+
sorted.sort_by { |m| m["position"] } + not_sorted
|
|
115
116
|
end
|
|
116
117
|
|
|
117
118
|
private
|
|
@@ -137,7 +138,7 @@ module Alchemy
|
|
|
137
138
|
# A Alchemy module definition
|
|
138
139
|
#
|
|
139
140
|
def url_options_for_module(alchemy_module)
|
|
140
|
-
url_options_for_navigation_entry(alchemy_module[
|
|
141
|
+
url_options_for_navigation_entry(alchemy_module["navigation"] || {})
|
|
141
142
|
end
|
|
142
143
|
|
|
143
144
|
# Returns a url options hash for given navigation entry.
|
|
@@ -147,26 +148,26 @@ module Alchemy
|
|
|
147
148
|
#
|
|
148
149
|
def url_options_for_navigation_entry(entry)
|
|
149
150
|
{
|
|
150
|
-
controller: entry[
|
|
151
|
-
action: entry[
|
|
151
|
+
controller: entry["controller"],
|
|
152
|
+
action: entry["action"],
|
|
152
153
|
only_path: true,
|
|
153
|
-
params: entry[
|
|
154
|
+
params: entry["params"],
|
|
154
155
|
}.delete_if { |_k, v| v.nil? }
|
|
155
156
|
end
|
|
156
157
|
|
|
157
158
|
# Retrieves the current Alchemy module from controller and index action.
|
|
158
159
|
#
|
|
159
160
|
def current_alchemy_module
|
|
160
|
-
module_definition_for(controller: params[:controller], action:
|
|
161
|
+
module_definition_for(controller: params[:controller], action: "index")
|
|
161
162
|
end
|
|
162
163
|
|
|
163
164
|
# Returns true if the current controller and action is in a modules navigation definition.
|
|
164
165
|
#
|
|
165
166
|
def admin_mainnavi_active?(navigation)
|
|
166
167
|
# Has the given navigation entry a active sub navigation?
|
|
167
|
-
has_active_entry?(navigation[
|
|
168
|
+
has_active_entry?(navigation["sub_navigation"] || []) ||
|
|
168
169
|
# Has the given navigation entry a active nested navigation?
|
|
169
|
-
has_active_entry?(navigation[
|
|
170
|
+
has_active_entry?(navigation["nested"] || []) ||
|
|
170
171
|
# Is the navigation entry active?
|
|
171
172
|
entry_active?(navigation || {})
|
|
172
173
|
end
|
|
@@ -174,7 +175,7 @@ module Alchemy
|
|
|
174
175
|
# Returns true if the given entry's controller is current controller
|
|
175
176
|
#
|
|
176
177
|
def is_entry_controller_active?(entry)
|
|
177
|
-
entry[
|
|
178
|
+
entry["controller"].gsub(/\A\//, "") == params[:controller]
|
|
178
179
|
end
|
|
179
180
|
|
|
180
181
|
# Returns true if the given entry's action is current controllers action
|
|
@@ -182,8 +183,8 @@ module Alchemy
|
|
|
182
183
|
# Also checks if given entry has a +nested_actions+ key, if so it checks if one of them is current controller's action
|
|
183
184
|
#
|
|
184
185
|
def is_entry_action_active?(entry)
|
|
185
|
-
entry[
|
|
186
|
-
entry.fetch(
|
|
186
|
+
entry["action"] == params[:action] ||
|
|
187
|
+
entry.fetch("nested_actions", []).include?(params[:action])
|
|
187
188
|
end
|
|
188
189
|
|
|
189
190
|
# Returns true if an entry of given entries is active.
|
|
@@ -9,13 +9,13 @@ module Alchemy
|
|
|
9
9
|
#
|
|
10
10
|
def preview_sizes_for_select
|
|
11
11
|
options_for_select([
|
|
12
|
-
|
|
13
|
-
[Alchemy.t(
|
|
14
|
-
[Alchemy.t(
|
|
15
|
-
[Alchemy.t(
|
|
16
|
-
[Alchemy.t(
|
|
17
|
-
[Alchemy.t(
|
|
18
|
-
[Alchemy.t(
|
|
12
|
+
"auto",
|
|
13
|
+
[Alchemy.t("240", scope: "preview_sizes"), 240],
|
|
14
|
+
[Alchemy.t("320", scope: "preview_sizes"), 320],
|
|
15
|
+
[Alchemy.t("480", scope: "preview_sizes"), 480],
|
|
16
|
+
[Alchemy.t("768", scope: "preview_sizes"), 768],
|
|
17
|
+
[Alchemy.t("1024", scope: "preview_sizes"), 1024],
|
|
18
|
+
[Alchemy.t("1280", scope: "preview_sizes"), 1280],
|
|
19
19
|
])
|
|
20
20
|
end
|
|
21
21
|
|
|
@@ -27,8 +27,8 @@ module Alchemy
|
|
|
27
27
|
if page.persisted? && page.definition.blank?
|
|
28
28
|
[
|
|
29
29
|
page_layout_missing_warning,
|
|
30
|
-
Alchemy.t(:page_type)
|
|
31
|
-
].join(
|
|
30
|
+
Alchemy.t(:page_type),
|
|
31
|
+
].join(" ").html_safe
|
|
32
32
|
else
|
|
33
33
|
Alchemy.t(:page_type)
|
|
34
34
|
end
|
|
@@ -39,10 +39,10 @@ module Alchemy
|
|
|
39
39
|
|
|
40
40
|
if page.attribute_fixed?(attribute)
|
|
41
41
|
checkbox = check_box(:page, attribute, disabled: true)
|
|
42
|
-
hint = content_tag(:span, class:
|
|
42
|
+
hint = content_tag(:span, class: "hint-bubble") do
|
|
43
43
|
Alchemy.t(:attribute_fixed, attribute: attribute)
|
|
44
44
|
end
|
|
45
|
-
content = content_tag(:span, class:
|
|
45
|
+
content = content_tag(:span, class: "with-hint") do
|
|
46
46
|
"#{checkbox}\n#{label}\n#{hint}".html_safe
|
|
47
47
|
end
|
|
48
48
|
else
|
|
@@ -50,7 +50,7 @@ module Alchemy
|
|
|
50
50
|
content = "#{checkbox}\n#{label}".html_safe
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
content_tag(:label, class:
|
|
53
|
+
content_tag(:label, class: "checkbox") { content }
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
end
|
|
@@ -4,12 +4,10 @@ module Alchemy
|
|
|
4
4
|
module Admin
|
|
5
5
|
module PicturesHelper
|
|
6
6
|
def preview_size(size)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
'160x120'
|
|
12
|
-
end
|
|
7
|
+
Alchemy::Picture::THUMBNAIL_SIZES.fetch(
|
|
8
|
+
size,
|
|
9
|
+
Alchemy::Picture::THUMBNAIL_SIZES[:medium]
|
|
10
|
+
)
|
|
13
11
|
end
|
|
14
12
|
end
|
|
15
13
|
end
|
|
@@ -12,17 +12,18 @@ module Alchemy
|
|
|
12
12
|
# A HTML string containing <tt><li></tt> tags
|
|
13
13
|
#
|
|
14
14
|
def render_tag_list(class_name)
|
|
15
|
-
raise ArgumentError,
|
|
15
|
+
raise ArgumentError, "Please provide a String as class_name" if class_name.nil?
|
|
16
|
+
|
|
16
17
|
sorted_tags_from(class_name: class_name).map do |tag|
|
|
17
|
-
content_tag(
|
|
18
|
+
content_tag("li", name: tag.name, class: filtered_by_tag?(tag) ? "active" : nil) do
|
|
18
19
|
link_to(
|
|
19
20
|
"#{tag.name} (#{tag.taggings_count})",
|
|
20
21
|
url_for(
|
|
21
22
|
search_filter_params.except(:page, :tagged_with).merge(
|
|
22
|
-
tagged_with: tags_for_filter(current: tag).presence
|
|
23
|
-
)
|
|
23
|
+
tagged_with: tags_for_filter(current: tag).presence,
|
|
24
|
+
),
|
|
24
25
|
),
|
|
25
|
-
remote: request.xhr
|
|
26
|
+
remote: request.xhr?,
|
|
26
27
|
)
|
|
27
28
|
end
|
|
28
29
|
end.join.html_safe
|
|
@@ -43,13 +44,13 @@ module Alchemy
|
|
|
43
44
|
tags_from_params - Array(current.name)
|
|
44
45
|
else
|
|
45
46
|
tags_from_params.push(current.name)
|
|
46
|
-
end.uniq.join(
|
|
47
|
+
end.uniq.join(",")
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
# Returns tags from params
|
|
50
51
|
# @returns [Array]
|
|
51
52
|
def tags_from_params
|
|
52
|
-
search_filter_params[:tagged_with].to_s.split(
|
|
53
|
+
search_filter_params[:tagged_with].to_s.split(",")
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def sorted_tags_from(class_name:)
|
|
@@ -27,16 +27,16 @@ module Alchemy
|
|
|
27
27
|
#
|
|
28
28
|
# @return [String]
|
|
29
29
|
def render_icon(icon_class, options = {})
|
|
30
|
-
options = {style:
|
|
30
|
+
options = {style: "solid"}.merge(options)
|
|
31
31
|
classes = [
|
|
32
32
|
"icon fa-fw",
|
|
33
33
|
"fa-#{icon_class}",
|
|
34
34
|
"fa#{options[:style].first}",
|
|
35
35
|
options[:size] ? "fa-#{options[:size]}" : nil,
|
|
36
36
|
options[:transform] ? "fa-#{options[:transform]}" : nil,
|
|
37
|
-
options[:class]
|
|
37
|
+
options[:class],
|
|
38
38
|
].compact
|
|
39
|
-
content_tag(
|
|
39
|
+
content_tag("i", nil, class: classes)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# Returns a div with an icon and the passed content
|
|
@@ -64,19 +64,24 @@ module Alchemy
|
|
|
64
64
|
# @param [Symbol] style The style of this flash. Valid values are +:notice+ (default), +:warn+ and +:error+
|
|
65
65
|
#
|
|
66
66
|
def render_flash_notice(notice, style = :notice)
|
|
67
|
-
render(
|
|
67
|
+
render("alchemy/admin/partials/flash", flash_type: style, message: notice)
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
# Checks if the given argument is a String or a Page object.
|
|
71
71
|
# If a String is given, it tries to find the page via page_layout
|
|
72
72
|
# Logs a warning if no page is given.
|
|
73
73
|
def page_or_find(page)
|
|
74
|
+
unless Language.current
|
|
75
|
+
warning("No default language set up")
|
|
76
|
+
return nil
|
|
77
|
+
end
|
|
78
|
+
|
|
74
79
|
if page.is_a?(String)
|
|
75
80
|
page = Language.current.pages.find_by(page_layout: page)
|
|
76
81
|
end
|
|
77
82
|
if page.blank?
|
|
78
83
|
warning("No Page found for #{page.inspect}")
|
|
79
|
-
|
|
84
|
+
nil
|
|
80
85
|
else
|
|
81
86
|
page
|
|
82
87
|
end
|
|
@@ -88,9 +93,9 @@ module Alchemy
|
|
|
88
93
|
# @return [String] The FontAwesome icon name
|
|
89
94
|
def message_icon_class(message_type)
|
|
90
95
|
case message_type.to_s
|
|
91
|
-
when
|
|
92
|
-
when
|
|
93
|
-
when
|
|
96
|
+
when "warning", "warn", "alert" then "exclamation"
|
|
97
|
+
when "notice" then "check"
|
|
98
|
+
when "error" then "bug"
|
|
94
99
|
else
|
|
95
100
|
message_type
|
|
96
101
|
end
|
|
@@ -33,7 +33,7 @@ module Alchemy
|
|
|
33
33
|
helpers.render(content, {
|
|
34
34
|
content: content,
|
|
35
35
|
options: options,
|
|
36
|
-
html_options: html_options
|
|
36
|
+
html_options: html_options,
|
|
37
37
|
})
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -62,15 +62,6 @@ module Alchemy
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
# Block-level helper class for element editors.
|
|
66
|
-
# @deprecated
|
|
67
|
-
class ElementEditorHelper < BlockHelper
|
|
68
|
-
def edit(name, *args)
|
|
69
|
-
helpers.render_essence_editor_by_name(element, name.to_s, *args)
|
|
70
|
-
end
|
|
71
|
-
deprecate :edit, deprecator: Alchemy::Deprecation
|
|
72
|
-
end
|
|
73
|
-
|
|
74
65
|
# Block-level helper for element views. Constructs a DOM element wrapping
|
|
75
66
|
# your content element and provides a block helper object you can use for
|
|
76
67
|
# concise access to Alchemy's various helpers.
|
|
@@ -116,7 +107,7 @@ module Alchemy
|
|
|
116
107
|
tag: :div,
|
|
117
108
|
id: element_dom_id(element),
|
|
118
109
|
class: element.name,
|
|
119
|
-
tags_formatter: ->(tags) { tags.join(" ") }
|
|
110
|
+
tags_formatter: ->(tags) { tags.join(" ") },
|
|
120
111
|
}.merge(options)
|
|
121
112
|
|
|
122
113
|
# capture inner template block
|
|
@@ -140,25 +131,5 @@ module Alchemy
|
|
|
140
131
|
# that's it!
|
|
141
132
|
output
|
|
142
133
|
end
|
|
143
|
-
|
|
144
|
-
# Block-level helper for element editors. Provides a block helper object
|
|
145
|
-
# you can use for concise access to Alchemy's various helpers.
|
|
146
|
-
#
|
|
147
|
-
# === Example:
|
|
148
|
-
#
|
|
149
|
-
# <%= element_editor_for(element) do |el| %>
|
|
150
|
-
# <%= el.edit :title %>
|
|
151
|
-
# <%= el.edit :body %>
|
|
152
|
-
# <%= el.edit :target_url %>
|
|
153
|
-
# <% end %>
|
|
154
|
-
#
|
|
155
|
-
# @param [Alchemy::Element] element
|
|
156
|
-
# The element to display.
|
|
157
|
-
#
|
|
158
|
-
def element_editor_for(element)
|
|
159
|
-
capture do
|
|
160
|
-
yield ElementEditorHelper.new(self, element: element) if block_given?
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
134
|
end
|
|
164
135
|
end
|
|
@@ -6,7 +6,6 @@ module Alchemy
|
|
|
6
6
|
# The most important helper for frontend developers is the {#render_elements} helper.
|
|
7
7
|
#
|
|
8
8
|
module ElementsHelper
|
|
9
|
-
include Alchemy::EssencesHelper
|
|
10
9
|
include Alchemy::UrlHelper
|
|
11
10
|
include Alchemy::ElementsBlockHelper
|
|
12
11
|
|
|
@@ -92,19 +91,9 @@ module Alchemy
|
|
|
92
91
|
def render_elements(options = {})
|
|
93
92
|
options = {
|
|
94
93
|
from_page: @page,
|
|
95
|
-
render_format:
|
|
94
|
+
render_format: "html",
|
|
96
95
|
}.update(options)
|
|
97
96
|
|
|
98
|
-
if options[:sort_by]
|
|
99
|
-
Alchemy::Deprecation.warn "options[:sort_by] has been removed without replacement. " \
|
|
100
|
-
"Please implement your own element sorting by passing a custom finder instance to options[:finder]."
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
if options[:from_cell]
|
|
104
|
-
Alchemy::Deprecation.warn "options[:from_cell] has been removed without replacement. " \
|
|
105
|
-
"Please `render element.nested_elements` instead."
|
|
106
|
-
end
|
|
107
|
-
|
|
108
97
|
finder = options[:finder] || Alchemy::ElementsFinder.new(options)
|
|
109
98
|
elements = finder.elements(page: options[:from_page])
|
|
110
99
|
|
|
@@ -159,21 +148,10 @@ module Alchemy
|
|
|
159
148
|
# @note If the view partial is not found
|
|
160
149
|
# <tt>alchemy/elements/_view_not_found.html.erb</tt> gets rendered.
|
|
161
150
|
#
|
|
162
|
-
def render_element(
|
|
163
|
-
if args.length == 4
|
|
164
|
-
element, _part, options, counter = *args
|
|
165
|
-
Alchemy::Deprecation.warn "passing a `part` parameter as second argument to `render_element` has been removed without replacement. " \
|
|
166
|
-
"You can safely remove it."
|
|
167
|
-
else
|
|
168
|
-
element, options, counter = *args
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
options ||= {}
|
|
172
|
-
counter ||= 1
|
|
173
|
-
|
|
151
|
+
def render_element(element, options = {}, counter = 1)
|
|
174
152
|
if element.nil?
|
|
175
|
-
warning(
|
|
176
|
-
render "alchemy/elements/view_not_found", {name:
|
|
153
|
+
warning("Element is nil")
|
|
154
|
+
render "alchemy/elements/view_not_found", {name: "nil"}
|
|
177
155
|
return
|
|
178
156
|
end
|
|
179
157
|
|
|
@@ -182,7 +160,7 @@ module Alchemy
|
|
|
182
160
|
render element, {
|
|
183
161
|
element: element,
|
|
184
162
|
counter: counter,
|
|
185
|
-
options: options
|
|
163
|
+
options: options,
|
|
186
164
|
}.merge(options.delete(:locals) || {})
|
|
187
165
|
rescue ActionView::MissingTemplate => e
|
|
188
166
|
warning(%(
|
|
@@ -195,23 +173,20 @@ module Alchemy
|
|
|
195
173
|
# Returns a string for the id attribute of a html element for the given element
|
|
196
174
|
def element_dom_id(element)
|
|
197
175
|
return "" if element.nil?
|
|
176
|
+
|
|
198
177
|
"#{element.name}_#{element.id}".html_safe
|
|
199
178
|
end
|
|
200
179
|
|
|
201
180
|
# Renders the HTML tag attributes required for preview mode.
|
|
202
181
|
def element_preview_code(element)
|
|
203
|
-
|
|
204
|
-
tag_options(element_preview_code_attributes(element))
|
|
205
|
-
else
|
|
206
|
-
# Rails 5.1 uses TagBuilder
|
|
207
|
-
tag_builder.tag_options(element_preview_code_attributes(element))
|
|
208
|
-
end
|
|
182
|
+
tag_builder.tag_options(element_preview_code_attributes(element))
|
|
209
183
|
end
|
|
210
184
|
|
|
211
185
|
# Returns a hash containing the HTML tag attributes required for preview mode.
|
|
212
186
|
def element_preview_code_attributes(element)
|
|
213
187
|
return {} unless element.present? && @preview_mode && element.page == @page
|
|
214
|
-
|
|
188
|
+
|
|
189
|
+
{ "data-alchemy-element" => element.id }
|
|
215
190
|
end
|
|
216
191
|
|
|
217
192
|
# Returns the element's tags information as a string. Parameters and options
|
|
@@ -223,12 +198,7 @@ module Alchemy
|
|
|
223
198
|
# HTML tag attributes containing the element's tag information.
|
|
224
199
|
#
|
|
225
200
|
def element_tags(element, options = {})
|
|
226
|
-
|
|
227
|
-
tag_options(element_tags_attributes(element, options))
|
|
228
|
-
else
|
|
229
|
-
# Rails 5.1 uses TagBuilder
|
|
230
|
-
tag_builder.tag_options(element_tags_attributes(element, options))
|
|
231
|
-
end
|
|
201
|
+
tag_builder.tag_options(element_tags_attributes(element, options))
|
|
232
202
|
end
|
|
233
203
|
|
|
234
204
|
# Returns the element's tags information as an attribute hash.
|
|
@@ -244,28 +214,12 @@ module Alchemy
|
|
|
244
214
|
#
|
|
245
215
|
def element_tags_attributes(element, options = {})
|
|
246
216
|
options = {
|
|
247
|
-
formatter: lambda { |tags| tags.join(
|
|
217
|
+
formatter: lambda { |tags| tags.join(" ") },
|
|
248
218
|
}.merge(options)
|
|
249
219
|
|
|
250
220
|
return {} if !element.taggable? || element.tag_list.blank?
|
|
251
|
-
{ 'data-element-tags' => options[:formatter].call(element.tag_list) }
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
# Sort given elements by content.
|
|
255
|
-
# @deprecated
|
|
256
|
-
# @param [Array] elements - The elements you want to sort
|
|
257
|
-
# @param [String] content_name - The name of the content you want to sort by
|
|
258
|
-
# @param [Boolean] reverse - Reverse the sorted elements order
|
|
259
|
-
#
|
|
260
|
-
# @return [Array]
|
|
261
|
-
def sort_elements_by_content(elements, content_name, reverse = false)
|
|
262
|
-
Alchemy::Deprecation.warn "options[:sort_by] is deprecated. Please implement your own element sorting."
|
|
263
|
-
sorted_elements = elements.sort_by do |element|
|
|
264
|
-
content = element.content_by_name(content_name)
|
|
265
|
-
content ? content.ingredient.to_s : ''
|
|
266
|
-
end
|
|
267
221
|
|
|
268
|
-
|
|
222
|
+
{ "data-element-tags" => options[:formatter].call(element.tag_list) }
|
|
269
223
|
end
|
|
270
224
|
end
|
|
271
225
|
end
|