alchemy_cms 4.6.1 → 5.0.0
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 +30 -9
- data/CHANGELOG.md +102 -1
- data/Gemfile +24 -22
- data/README.md +32 -20
- data/Rakefile +11 -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/navigation.scss +1 -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/alchemy/tags.scss +2 -2
- 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 -4
- data/app/controllers/alchemy/admin/pages_controller.rb +51 -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 +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 +38 -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 +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 +4 -3
- data/app/mailers/alchemy/base_mailer.rb +1 -1
- data/app/mailers/alchemy/messages_mailer.rb +1 -1
- data/app/models/alchemy/attachment.rb +24 -19
- data/app/models/alchemy/base_record.rb +2 -5
- data/app/models/alchemy/content.rb +33 -38
- 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 +5 -5
- 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 +18 -17
- 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 +27 -4
- data/app/models/alchemy/page.rb +46 -127
- 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/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 +9 -7
- 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 +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/pictures/index.html.erb +18 -3
- data/app/views/alchemy/admin/pictures/show.html.erb +1 -1
- 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/resources/index.html.erb +21 -22
- 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_file_view.html.erb +1 -1
- 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 -16
- 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 +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 +3 -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 +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/install/tasks.rb +41 -0
- 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 -15
- 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 +169 -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 +5 -48
- data/lib/tasks/alchemy/tidy.rake +9 -8
- data/lib/tasks/alchemy/upgrade.rake +18 -116
- 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 +112 -88
- 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/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 -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 -97
- 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
|
@@ -13,7 +13,7 @@ module Alchemy
|
|
|
13
13
|
#
|
|
14
14
|
def render_content_name(content)
|
|
15
15
|
if content.blank?
|
|
16
|
-
warning(
|
|
16
|
+
warning("Content is nil")
|
|
17
17
|
return
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ module Alchemy
|
|
|
23
23
|
warning("Content #{content.name} is missing its definition")
|
|
24
24
|
|
|
25
25
|
icon = hint_with_tooltip(
|
|
26
|
-
Alchemy.t(:content_definition_missing)
|
|
26
|
+
Alchemy.t(:content_definition_missing),
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
content_name = "#{icon} #{content_name}".html_safe
|
|
@@ -39,7 +39,7 @@ module Alchemy
|
|
|
39
39
|
# Renders the label and a remove link for a content.
|
|
40
40
|
def content_label(content)
|
|
41
41
|
content_tag :label, for: content.form_field_id do
|
|
42
|
-
[render_hint_for(content), render_content_name(content)].compact.join(
|
|
42
|
+
[render_hint_for(content), render_content_name(content)].compact.join(" ").html_safe
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -3,76 +3,9 @@
|
|
|
3
3
|
module Alchemy
|
|
4
4
|
module Admin
|
|
5
5
|
module ElementsHelper
|
|
6
|
-
include Alchemy::ElementsBlockHelper
|
|
7
|
-
include Alchemy::Admin::BaseHelper
|
|
8
6
|
include Alchemy::Admin::ContentsHelper
|
|
9
7
|
include Alchemy::Admin::EssencesHelper
|
|
10
8
|
|
|
11
|
-
# Renders a {Alchemy::Element} editor partial.
|
|
12
|
-
#
|
|
13
|
-
# A element editor partial is the form presented to the content author in page edit mode.
|
|
14
|
-
#
|
|
15
|
-
# The partial is located in <tt>app/views/alchemy/elements</tt>.
|
|
16
|
-
#
|
|
17
|
-
# == Partial naming
|
|
18
|
-
#
|
|
19
|
-
# The partials have to be named after the name of the element as defined in the <tt>elements.yml</tt> file and has to be suffixed with <tt>_editor</tt>.
|
|
20
|
-
#
|
|
21
|
-
# === Example
|
|
22
|
-
#
|
|
23
|
-
# Given a headline element
|
|
24
|
-
#
|
|
25
|
-
# # elements.yml
|
|
26
|
-
# - name: headline
|
|
27
|
-
# contents:
|
|
28
|
-
# - name: text
|
|
29
|
-
# type: EssenceText
|
|
30
|
-
#
|
|
31
|
-
# Then your element editor partial has to be named:
|
|
32
|
-
#
|
|
33
|
-
# app/views/alchemy/elements/_headline_editor.html.{erb|haml|slim}
|
|
34
|
-
#
|
|
35
|
-
# === Element partials generator
|
|
36
|
-
#
|
|
37
|
-
# You can use this handy generator to let Alchemy generate the partials for you:
|
|
38
|
-
#
|
|
39
|
-
# $ rails generate alchemy:elements --skip
|
|
40
|
-
#
|
|
41
|
-
# == Usage
|
|
42
|
-
#
|
|
43
|
-
# <%= render_editor(Alchemy::Element.published.named(:headline).first) %>
|
|
44
|
-
#
|
|
45
|
-
# @param [Alchemy::Element] element
|
|
46
|
-
# The element you want to render the editor for
|
|
47
|
-
#
|
|
48
|
-
# @note If the partial is not found
|
|
49
|
-
# <tt>alchemy/elements/_editor_not_found.html.erb</tt> gets rendered.
|
|
50
|
-
#
|
|
51
|
-
# @deprecated Using element editor partials is deprecated and will be removed in Alchemy 5.0
|
|
52
|
-
def render_editor(element)
|
|
53
|
-
if element.nil?
|
|
54
|
-
warning('Element is nil')
|
|
55
|
-
render "alchemy/elements/editor_not_found", {name: 'nil'}
|
|
56
|
-
return
|
|
57
|
-
end
|
|
58
|
-
Alchemy::Deprecation.warn <<~WARN
|
|
59
|
-
Using element editor partials is deprecated and will be removed in Alchemy 5.0.
|
|
60
|
-
You can delete the `app/views/alchemy/elements/_#{element.name}_editor` partial
|
|
61
|
-
and Alchemy will render the content editors for you.
|
|
62
|
-
WARN
|
|
63
|
-
|
|
64
|
-
render "alchemy/elements/#{element.name}_editor", element: element
|
|
65
|
-
rescue ActionView::MissingTemplate => e
|
|
66
|
-
warning(%(
|
|
67
|
-
Element editor partial not found for #{element.name}.\n
|
|
68
|
-
#{e}
|
|
69
|
-
))
|
|
70
|
-
render "alchemy/elements/editor_not_found", {
|
|
71
|
-
name: element.name,
|
|
72
|
-
error: "Element editor partial not found.<br>Use <code>rails generate alchemy:elements</code> to generate it."
|
|
73
|
-
}
|
|
74
|
-
end
|
|
75
|
-
|
|
76
9
|
# Returns an elements array for select helper.
|
|
77
10
|
#
|
|
78
11
|
# @param [Array] elements definitions
|
|
@@ -80,32 +13,14 @@ module Alchemy
|
|
|
80
13
|
#
|
|
81
14
|
def elements_for_select(elements)
|
|
82
15
|
return [] if elements.nil?
|
|
16
|
+
|
|
83
17
|
elements.collect do |e|
|
|
84
18
|
[
|
|
85
|
-
Element.display_name_for(e[
|
|
86
|
-
e[
|
|
19
|
+
Element.display_name_for(e["name"]),
|
|
20
|
+
e["name"],
|
|
87
21
|
]
|
|
88
22
|
end
|
|
89
23
|
end
|
|
90
|
-
|
|
91
|
-
# CSS classes for the element editor partial.
|
|
92
|
-
def element_editor_classes(element)
|
|
93
|
-
[
|
|
94
|
-
'element-editor',
|
|
95
|
-
element.content_definitions.present? ? 'with-contents' : 'without-contents',
|
|
96
|
-
element.nestable_elements.any? ? 'nestable' : 'not-nestable',
|
|
97
|
-
element.taggable? ? 'taggable' : 'not-taggable',
|
|
98
|
-
element.folded ? 'folded' : 'expanded',
|
|
99
|
-
element.compact? ? 'compact' : nil,
|
|
100
|
-
element.fixed? ? 'is-fixed' : 'not-fixed'
|
|
101
|
-
].join(' ')
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Tells us, if we should show the element footer and form inputs.
|
|
105
|
-
def element_editable?(element)
|
|
106
|
-
return false if element.folded?
|
|
107
|
-
element.content_definitions.present? || element.taggable?
|
|
108
|
-
end
|
|
109
24
|
end
|
|
110
25
|
end
|
|
111
26
|
end
|
|
@@ -3,138 +3,29 @@
|
|
|
3
3
|
module Alchemy
|
|
4
4
|
module Admin
|
|
5
5
|
module EssencesHelper
|
|
6
|
-
include Alchemy::EssencesHelper
|
|
7
|
-
include Alchemy::Admin::ContentsHelper
|
|
8
|
-
|
|
9
|
-
# Renders the Content editor partial from the given Content.
|
|
10
|
-
# For options see -> render_essence
|
|
11
|
-
# @deprecated
|
|
12
|
-
def render_essence_editor(content, options = {}, html_options = {})
|
|
13
|
-
if !options.empty?
|
|
14
|
-
Alchemy::Deprecation.warn <<~WARN
|
|
15
|
-
Passing options to `render_essence_editor` is deprecated and will be removed from Alchemy 5.0.
|
|
16
|
-
Add your static `#{options.keys}` options to the `#{content.name}` content definitions `settings` of `#{content.element&.name}` element.
|
|
17
|
-
For dynamic options consider adding your own essence class.
|
|
18
|
-
WARN
|
|
19
|
-
end
|
|
20
|
-
if !html_options.empty?
|
|
21
|
-
Alchemy::Deprecation.warn <<~WARN
|
|
22
|
-
Passing html_options to `render_essence_editor` is deprecated and will be removed in Alchemy 5.0 without replacement.
|
|
23
|
-
WARN
|
|
24
|
-
end
|
|
25
|
-
render_essence(content, :editor, {for_editor: options}, html_options)
|
|
26
|
-
end
|
|
27
|
-
deprecate :render_essence_editor, deprecator: Alchemy::Deprecation
|
|
28
|
-
|
|
29
|
-
# Renders the Content editor partial found in views/contents/ for the content with name inside the passed Element.
|
|
30
|
-
# For options see -> render_essence
|
|
31
|
-
#
|
|
32
|
-
# Content creation on the fly:
|
|
33
|
-
#
|
|
34
|
-
# If you update the elements.yml file after creating an element this helper displays a error message with an option to create the content.
|
|
35
|
-
# @deprecated
|
|
36
|
-
def render_essence_editor_by_name(element, name, options = {}, html_options = {})
|
|
37
|
-
if element.blank?
|
|
38
|
-
return warning('Element is nil', Alchemy.t(:no_element_given))
|
|
39
|
-
end
|
|
40
|
-
content = element.content_by_name(name)
|
|
41
|
-
if content.nil?
|
|
42
|
-
render_missing_content(element, name, options)
|
|
43
|
-
else
|
|
44
|
-
render_essence_editor(content, options, html_options)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
deprecate :render_essence_editor_by_name, deprecator: Alchemy::Deprecation
|
|
48
|
-
|
|
49
|
-
# Returns all public pages from current language as an option tags string suitable or the Rails +select_tag+ helper.
|
|
50
|
-
#
|
|
51
|
-
# @param [Array]
|
|
52
|
-
# A collection of pages so it only returns these pages and does not query the database.
|
|
53
|
-
# @param [String]
|
|
54
|
-
# Pass a +Page#name+ or +Page#id+ as selected item to the +options_for_select+ helper.
|
|
55
|
-
# @param [String]
|
|
56
|
-
# Used as prompt message in the select tag
|
|
57
|
-
# @param [Symbol]
|
|
58
|
-
# Method that is called on the page object to get the value that is passed with the params of the form.
|
|
59
|
-
# @deprecated
|
|
60
|
-
def pages_for_select(pages = nil, selected = nil, prompt = "Choose page", page_attribute = :id)
|
|
61
|
-
values = [[Alchemy.t(prompt), ""]]
|
|
62
|
-
pages ||= begin
|
|
63
|
-
nested = true
|
|
64
|
-
Language.current.pages.published.order(:lft)
|
|
65
|
-
end
|
|
66
|
-
values += pages_attributes_for_select(pages, page_attribute, nested)
|
|
67
|
-
options_for_select(values, selected.to_s)
|
|
68
|
-
end
|
|
69
|
-
deprecate :pages_for_select, deprecator: Alchemy::Deprecation
|
|
70
|
-
|
|
71
|
-
# Renders the missing content partial
|
|
72
|
-
# @deprecated
|
|
73
|
-
def render_missing_content(element, name, options)
|
|
74
|
-
render 'alchemy/admin/contents/missing', {element: element, name: name, options: options}
|
|
75
|
-
end
|
|
76
|
-
deprecate :render_missing_content, deprecator: Alchemy::Deprecation
|
|
77
|
-
|
|
78
6
|
# Renders a thumbnail for given EssencePicture content with correct cropping and size
|
|
79
|
-
def essence_picture_thumbnail(content
|
|
7
|
+
def essence_picture_thumbnail(content)
|
|
80
8
|
picture = content.ingredient
|
|
81
9
|
essence = content.essence
|
|
82
10
|
|
|
83
11
|
return if picture.nil?
|
|
84
12
|
|
|
85
13
|
image_tag(
|
|
86
|
-
essence.thumbnail_url
|
|
14
|
+
essence.thumbnail_url,
|
|
87
15
|
alt: picture.name,
|
|
88
|
-
class:
|
|
89
|
-
title: Alchemy.t(:image_name) + ": #{picture.name}"
|
|
16
|
+
class: "img_paddingtop",
|
|
17
|
+
title: Alchemy.t(:image_name) + ": #{picture.name}",
|
|
90
18
|
)
|
|
91
19
|
end
|
|
92
20
|
|
|
93
21
|
# Size value for edit picture dialog
|
|
94
|
-
def edit_picture_dialog_size(content
|
|
95
|
-
if content.
|
|
96
|
-
content.
|
|
97
|
-
else
|
|
98
|
-
content.settings_value(:sizes, options) ? '380x290' : '380x255'
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
private
|
|
103
|
-
|
|
104
|
-
# Returns an Array with page attributes for select options
|
|
105
|
-
#
|
|
106
|
-
# @param [Array]
|
|
107
|
-
# The pages
|
|
108
|
-
# @param [String || Symbol]
|
|
109
|
-
# The attribute that is used as value
|
|
110
|
-
# @param [Boolean] (false)
|
|
111
|
-
# Should the name be indented or not
|
|
112
|
-
#
|
|
113
|
-
def pages_attributes_for_select(pages, page_attribute, indent = false)
|
|
114
|
-
pages.map do |page|
|
|
115
|
-
[
|
|
116
|
-
page_name_attribute_for_select(page, indent),
|
|
117
|
-
page.send(page_attribute).to_s
|
|
118
|
-
]
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
deprecate :pages_attributes_for_select, deprecator: Alchemy::Deprecation
|
|
122
|
-
|
|
123
|
-
# Returns the page name for pages_for_select helper
|
|
124
|
-
#
|
|
125
|
-
# @param [Alchemy::Page]
|
|
126
|
-
# The page
|
|
127
|
-
# @param [Boolean] (false)
|
|
128
|
-
# Should the page be indented or not
|
|
129
|
-
#
|
|
130
|
-
def page_name_attribute_for_select(page, indent = false)
|
|
131
|
-
if indent
|
|
132
|
-
(" " * (page.depth - 1) + page.name).html_safe
|
|
22
|
+
def edit_picture_dialog_size(content)
|
|
23
|
+
if content.settings[:caption_as_textarea]
|
|
24
|
+
content.settings[:sizes] ? "380x320" : "380x300"
|
|
133
25
|
else
|
|
134
|
-
|
|
26
|
+
content.settings[:sizes] ? "380x290" : "380x255"
|
|
135
27
|
end
|
|
136
28
|
end
|
|
137
|
-
deprecate :page_name_attribute_for_select, deprecator: Alchemy::Deprecation
|
|
138
29
|
end
|
|
139
30
|
end
|
|
140
31
|
end
|
|
@@ -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.
|
|
@@ -34,8 +34,8 @@ module Alchemy
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
def page_status_checkbox(page, attribute
|
|
38
|
-
|
|
37
|
+
def page_status_checkbox(page, attribute)
|
|
38
|
+
label = page.class.human_attribute_name(attribute)
|
|
39
39
|
|
|
40
40
|
if page.attribute_fixed?(attribute)
|
|
41
41
|
checkbox = check_box(:page, attribute, disabled: true)
|
|
@@ -43,11 +43,11 @@ module Alchemy
|
|
|
43
43
|
Alchemy.t(:attribute_fixed, attribute: attribute)
|
|
44
44
|
end
|
|
45
45
|
content = content_tag(:span, class: "with-hint") do
|
|
46
|
-
"#{checkbox}\n#{
|
|
46
|
+
"#{checkbox}\n#{label}\n#{hint}".html_safe
|
|
47
47
|
end
|
|
48
48
|
else
|
|
49
49
|
checkbox = check_box(:page, attribute)
|
|
50
|
-
content = "#{checkbox}\n#{
|
|
50
|
+
content = "#{checkbox}\n#{label}".html_safe
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
content_tag(:label, class: "checkbox") { content }
|