alchemy_cms 3.2.1 → 3.3.0.rc1
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/.codeclimate.yml +28 -0
- data/.gitignore +2 -2
- data/.travis.yml +11 -3
- data/CHANGELOG.md +100 -0
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +12 -1
- data/README.md +25 -7
- data/Rakefile +1 -3
- data/alchemy_cms.gemspec +7 -15
- data/app/assets/fonts/alchemy/icons.eot +0 -0
- data/app/assets/fonts/alchemy/icons.svg +28 -66
- data/app/assets/fonts/alchemy/icons.ttf +0 -0
- data/app/assets/fonts/alchemy/icons.woff +0 -0
- data/app/assets/images/alchemy/icons.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +10 -3
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +15 -6
- data/app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +10 -4
- data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +16 -22
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +69 -32
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +147 -83
- data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +14 -14
- data/app/assets/javascripts/alchemy/alchemy.hotkeys.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.i18n.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +55 -0
- data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +8 -1
- data/app/assets/javascripts/alchemy/alchemy.js +3 -1
- data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +36 -31
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +35 -29
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +51 -5
- data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +26 -10
- data/app/assets/javascripts/alchemy/{alchemy.windows.js.coffee → alchemy.trash_window.js.coffee} +1 -13
- data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +15 -17
- data/app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js +3 -3
- data/app/assets/stylesheets/alchemy/_extends.scss +1 -1
- data/app/assets/stylesheets/alchemy/_mixins.scss +27 -0
- data/app/assets/stylesheets/alchemy/_variables.scss +1 -0
- data/app/assets/stylesheets/alchemy/admin.scss +1 -0
- data/app/assets/stylesheets/alchemy/archive.scss +0 -57
- data/app/assets/stylesheets/alchemy/base.scss +1 -18
- data/app/assets/stylesheets/alchemy/buttons.scss +30 -25
- data/app/assets/stylesheets/alchemy/dialogs.scss +25 -9
- data/app/assets/stylesheets/alchemy/elements.scss +182 -126
- data/app/assets/stylesheets/alchemy/form_fields.scss +14 -8
- data/app/assets/stylesheets/alchemy/forms.scss +10 -1
- data/app/assets/stylesheets/alchemy/frame.scss +3 -10
- data/app/assets/stylesheets/alchemy/icon-font.scss +13 -6
- data/app/assets/stylesheets/alchemy/icons.scss +16 -0
- data/app/assets/stylesheets/alchemy/image_library.scss +269 -0
- data/app/assets/stylesheets/alchemy/selects.scss +1 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +12 -1
- data/app/assets/stylesheets/alchemy/toolbar.scss +2 -2
- data/app/assets/stylesheets/alchemy/upload.scss +97 -87
- data/app/assets/stylesheets/alchemy/welcome.sass +49 -0
- data/app/controllers/alchemy/admin/attachments_controller.rb +21 -29
- data/app/controllers/alchemy/admin/base_controller.rb +23 -4
- data/app/controllers/alchemy/admin/clipboard_controller.rb +0 -1
- data/app/controllers/alchemy/admin/contents_controller.rb +2 -4
- data/app/controllers/alchemy/admin/dashboard_controller.rb +4 -4
- data/app/controllers/alchemy/admin/elements_controller.rb +20 -11
- data/app/controllers/alchemy/admin/essence_files_controller.rb +2 -2
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +10 -9
- data/app/controllers/alchemy/admin/languages_controller.rb +0 -1
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +0 -2
- data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +0 -1
- data/app/controllers/alchemy/admin/pages_controller.rb +46 -29
- data/app/controllers/alchemy/admin/pictures_controller.rb +44 -55
- data/app/controllers/alchemy/admin/resources_controller.rb +8 -75
- data/app/controllers/alchemy/admin/tags_controller.rb +10 -8
- data/app/controllers/alchemy/admin/trash_controller.rb +0 -6
- data/app/controllers/alchemy/api/contents_controller.rb +0 -1
- data/app/controllers/alchemy/api/elements_controller.rb +0 -1
- data/app/controllers/alchemy/api/pages_controller.rb +4 -1
- data/app/controllers/alchemy/attachments_controller.rb +4 -5
- data/app/controllers/alchemy/base_controller.rb +6 -5
- data/app/controllers/alchemy/elements_controller.rb +1 -1
- data/app/controllers/alchemy/messages_controller.rb +9 -4
- data/app/controllers/alchemy/pages_controller.rb +133 -137
- data/app/controllers/alchemy/pictures_controller.rb +12 -10
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +41 -0
- data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +56 -0
- data/app/controllers/concerns/alchemy/locale_redirects.rb +38 -0
- data/app/controllers/concerns/alchemy/page_redirects.rb +80 -0
- data/app/controllers/concerns/alchemy/site_redirects.rb +22 -0
- data/app/helpers/alchemy/admin/attachments_helper.rb +1 -2
- data/app/helpers/alchemy/admin/base_helper.rb +36 -62
- data/app/helpers/alchemy/admin/contents_helper.rb +6 -80
- data/app/helpers/alchemy/admin/elements_helper.rb +36 -15
- data/app/helpers/alchemy/admin/essences_helper.rb +15 -8
- data/app/helpers/alchemy/admin/form_helper.rb +6 -10
- data/app/helpers/alchemy/admin/navigation_helper.rb +4 -7
- data/app/helpers/alchemy/admin/pages_helper.rb +14 -35
- data/app/helpers/alchemy/admin/pictures_helper.rb +12 -14
- data/app/helpers/alchemy/admin/tags_helper.rb +5 -7
- data/app/helpers/alchemy/base_helper.rb +9 -17
- data/app/helpers/alchemy/elements_block_helper.rb +5 -13
- data/app/helpers/alchemy/elements_helper.rb +6 -6
- data/app/helpers/alchemy/essences_helper.rb +3 -16
- data/app/helpers/alchemy/pages_helper.rb +32 -25
- data/app/helpers/alchemy/url_helper.rb +14 -16
- data/app/mailers/alchemy/messages.rb +0 -2
- data/app/models/alchemy.rb +0 -2
- data/app/models/alchemy/attachment.rb +45 -56
- data/app/models/alchemy/cell.rb +7 -8
- data/app/models/alchemy/content.rb +39 -24
- data/app/models/alchemy/content/factory.rb +27 -44
- data/app/models/alchemy/element.rb +101 -267
- data/app/models/alchemy/element/definitions.rb +9 -8
- data/app/models/alchemy/element/element_contents.rb +150 -0
- data/app/models/alchemy/element/element_essences.rb +109 -0
- data/app/models/alchemy/element/presenters.rb +18 -7
- data/app/models/alchemy/essence_date.rb +1 -2
- data/app/models/alchemy/essence_file.rb +10 -6
- data/app/models/alchemy/essence_html.rb +0 -1
- data/app/models/alchemy/essence_picture.rb +12 -4
- data/app/models/alchemy/essence_richtext.rb +6 -3
- data/app/models/alchemy/language.rb +48 -21
- data/app/models/alchemy/language/code.rb +1 -4
- data/app/models/alchemy/page.rb +33 -35
- data/app/models/alchemy/page/page_cells.rb +6 -10
- data/app/models/alchemy/page/page_elements.rb +130 -100
- data/app/models/alchemy/page/page_naming.rb +2 -3
- data/app/models/alchemy/page/page_natures.rb +50 -16
- data/app/models/alchemy/page/page_scopes.rb +7 -7
- data/app/models/alchemy/page/page_users.rb +3 -3
- data/app/models/alchemy/picture.rb +48 -33
- data/app/models/alchemy/picture/transformations.rb +8 -9
- data/app/models/alchemy/site.rb +19 -17
- data/app/models/alchemy/site/layout.rb +9 -9
- data/app/models/alchemy/tag.rb +0 -2
- data/app/models/alchemy/tree_node.rb +5 -4
- data/app/serializers/alchemy/attachment_serializer.rb +0 -1
- data/app/serializers/alchemy/base_serializer.rb +30 -0
- data/app/serializers/alchemy/cell_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_date_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_file_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_html_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_link_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_picture_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_select_serializer.rb +0 -1
- data/app/serializers/alchemy/essence_text_serializer.rb +0 -1
- data/app/serializers/alchemy/legacy_element_serializer.rb +0 -1
- data/app/serializers/alchemy/page_serializer.rb +0 -1
- data/app/serializers/alchemy/page_tree_serializer.rb +90 -0
- data/app/serializers/alchemy/picture_serializer.rb +0 -1
- data/app/views/alchemy/_menubar.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +11 -16
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +9 -9
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +7 -15
- data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/_tag_list.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/edit.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +10 -17
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -3
- data/app/views/alchemy/admin/clipboard/insert.js.erb +3 -3
- data/app/views/alchemy/admin/clipboard/remove.js.erb +2 -2
- data/app/views/alchemy/admin/contents/_missing.html.erb +5 -7
- data/app/views/alchemy/admin/contents/create.js.erb +1 -1
- data/app/views/alchemy/admin/contents/new.html.erb +2 -2
- data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +6 -6
- data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +2 -2
- data/app/views/alchemy/admin/dashboard/_users.html.erb +2 -2
- data/app/views/alchemy/admin/dashboard/help.html.erb +15 -15
- data/app/views/alchemy/admin/dashboard/index.html.erb +6 -6
- data/app/views/alchemy/admin/dashboard/info.html.erb +5 -5
- data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +52 -18
- data/app/views/alchemy/admin/elements/_element_footer.html.erb +11 -0
- data/app/views/alchemy/admin/elements/{_element_head.html.erb → _element_header.html.erb} +8 -8
- data/app/views/alchemy/admin/elements/_element_toolbar.html.erb +49 -0
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +7 -6
- data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_refresh_editor.js.erb +1 -1
- data/app/views/alchemy/admin/elements/create.js.erb +13 -8
- data/app/views/alchemy/admin/elements/fold.js.erb +12 -7
- data/app/views/alchemy/admin/elements/index.html.erb +12 -8
- data/app/views/alchemy/admin/elements/list.html.erb +3 -3
- data/app/views/alchemy/admin/elements/new.html.erb +4 -4
- data/app/views/alchemy/admin/elements/order.js.erb +3 -4
- data/app/views/alchemy/admin/elements/publish.js.erb +15 -0
- data/app/views/alchemy/admin/elements/trash.js.erb +3 -3
- data/app/views/alchemy/admin/elements/update.js.erb +7 -8
- data/app/views/alchemy/admin/essence_files/edit.html.erb +16 -13
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +3 -3
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +8 -8
- data/app/views/alchemy/admin/languages/_form.html.erb +12 -3
- data/app/views/alchemy/admin/languages/_language.html.erb +8 -2
- data/app/views/alchemy/admin/languages/_table.html.erb +11 -5
- data/app/views/alchemy/admin/languages/index.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +8 -8
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +2 -2
- data/app/views/alchemy/admin/layoutpages/index.html.erb +6 -13
- data/app/views/alchemy/admin/leave.html.erb +5 -5
- data/app/views/alchemy/admin/legacy_page_urls/_form.html.erb +1 -1
- data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +4 -4
- data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +9 -9
- data/app/views/alchemy/admin/pages/_external_link.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_file_link.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_form.html.erb +6 -6
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +9 -11
- data/app/views/alchemy/admin/pages/_legacy_urls.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_locked_page.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +2 -2
- data/app/views/alchemy/admin/pages/_page.html.erb +95 -80
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +22 -22
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +12 -0
- data/app/views/alchemy/admin/pages/_page_status.html.erb +7 -9
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +35 -6
- data/app/views/alchemy/admin/pages/_tinymce_custom_config.html.erb +0 -3
- data/app/views/alchemy/admin/pages/configure.html.erb +1 -1
- data/app/views/alchemy/admin/pages/configure_external.html.erb +4 -4
- data/app/views/alchemy/admin/pages/edit.html.erb +39 -44
- data/app/views/alchemy/admin/pages/flush.js.erb +1 -1
- data/app/views/alchemy/admin/pages/fold.js.erb +2 -3
- data/app/views/alchemy/admin/pages/index.html.erb +15 -22
- data/app/views/alchemy/admin/pages/info.html.erb +8 -8
- data/app/views/alchemy/admin/pages/link.html.erb +3 -3
- data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +4 -4
- data/app/views/alchemy/admin/pages/sort.js.erb +1 -2
- data/app/views/alchemy/admin/pages/unlock.js.erb +1 -1
- data/app/views/alchemy/admin/pages/update.js.erb +3 -3
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +9 -15
- data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -13
- data/app/views/alchemy/admin/partials/_sub_navigation.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_archive.html.erb +14 -14
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +30 -36
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +5 -5
- data/app/views/alchemy/admin/pictures/{edit.html.erb → _form.html.erb} +7 -6
- data/app/views/alchemy/admin/pictures/_infos.html.erb +50 -0
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture.html.erb +17 -51
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +2 -2
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -6
- data/app/views/alchemy/admin/pictures/index.html.erb +28 -36
- data/app/views/alchemy/admin/pictures/show.html.erb +46 -9
- data/app/views/alchemy/admin/pictures/update.js.erb +6 -0
- data/app/views/alchemy/admin/resources/_form.html.erb +3 -3
- data/app/views/alchemy/admin/resources/_resource.html.erb +4 -4
- data/app/views/alchemy/admin/resources/_table.html.erb +5 -6
- data/app/views/alchemy/admin/resources/index.csv.erb +12 -10
- data/app/views/alchemy/admin/resources/index.html.erb +4 -4
- data/app/views/alchemy/admin/sites/index.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +4 -4
- data/app/views/alchemy/admin/tags/edit.html.erb +5 -5
- data/app/views/alchemy/admin/tags/index.html.erb +8 -8
- data/app/views/alchemy/admin/tags/new.html.erb +2 -2
- data/app/views/alchemy/admin/trash/clear.js.erb +1 -1
- data/app/views/alchemy/admin/trash/index.html.erb +8 -6
- data/app/views/alchemy/admin/uploader/_button.html.erb +39 -0
- data/app/views/alchemy/admin/uploader/_setup.html.erb +13 -0
- data/app/views/alchemy/base/500.html.erb +4 -4
- data/app/views/alchemy/elements/_editor_not_found.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +3 -4
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +2 -6
- data/app/views/alchemy/essences/_essence_date_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +9 -11
- data/app/views/alchemy/essences/_essence_file_view.html.erb +11 -5
- data/app/views/alchemy/essences/_essence_html_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_link_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_link_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +47 -52
- data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_richtext_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_select_editor.html.erb +23 -13
- data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_text_view.html.erb +1 -1
- data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +29 -36
- data/app/views/alchemy/essences/shared/_linkable_essence_tools.html.erb +5 -5
- data/app/views/alchemy/language_links/_language.html.erb +15 -9
- data/app/views/alchemy/messages/contact_form_mail.de.text.erb +1 -1
- data/app/views/alchemy/messages/contact_form_mail.en.text.erb +1 -1
- data/app/views/alchemy/messages/contact_form_mail.es.text.erb +1 -1
- data/app/views/alchemy/navigation/_link.html.erb +0 -1
- data/app/views/alchemy/pages/show.rss.builder +6 -4
- data/app/views/alchemy/welcome.html.erb +28 -0
- data/app/views/layouts/alchemy/admin.html.erb +14 -10
- data/bin/alchemy +3 -4
- data/bin/rspec +7 -0
- data/bin/spring +15 -0
- data/config/alchemy/config.yml +16 -17
- data/config/initializers/assets.rb +13 -0
- data/config/locales/alchemy.de.yml +27 -29
- data/config/locales/alchemy.en.yml +23 -29
- data/config/locales/alchemy.es.yml +23 -29
- data/config/locales/alchemy.fr.yml +19 -28
- data/config/locales/alchemy.nl.yml +19 -27
- data/config/locales/alchemy.ru.yml +19 -28
- data/config/routes.rb +53 -54
- data/config/spring.rb +2 -0
- data/db/migrate/20130827094554_alchemy_two_point_six.rb +1 -3
- data/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +6 -0
- data/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +5 -0
- data/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +7 -0
- data/lib/alchemy/auth_accessors.rb +1 -1
- data/lib/alchemy/cache_digests/template_tracker.rb +7 -13
- data/lib/alchemy/config.rb +5 -7
- data/lib/alchemy/configuration_methods.rb +11 -1
- data/lib/alchemy/controller_actions.rb +9 -12
- data/lib/alchemy/engine.rb +11 -28
- data/lib/alchemy/errors.rb +0 -1
- data/lib/alchemy/essence.rb +20 -20
- data/lib/alchemy/filetypes.rb +1 -3
- data/lib/alchemy/forms/builder.rb +0 -2
- data/lib/alchemy/hints.rb +1 -3
- data/lib/alchemy/i18n.rb +81 -53
- data/lib/alchemy/kaminari/scoped_pagination_url_helper.rb +0 -2
- data/lib/alchemy/locale.rb +0 -1
- data/lib/alchemy/logger.rb +1 -3
- data/lib/alchemy/modules.rb +3 -3
- data/lib/alchemy/mount_point.rb +0 -2
- data/lib/alchemy/name_conversions.rb +1 -3
- data/lib/alchemy/on_page_layout.rb +37 -23
- data/lib/alchemy/on_page_layout/callbacks_runner.rb +34 -0
- data/lib/alchemy/page_layout.rb +23 -24
- data/lib/alchemy/paths.rb +32 -0
- data/lib/alchemy/permissions.rb +20 -20
- data/lib/alchemy/picture_attributes.rb +0 -3
- data/lib/alchemy/resource.rb +66 -22
- data/lib/alchemy/resources_helper.rb +48 -11
- data/lib/alchemy/routing_constraints.rb +4 -5
- data/lib/alchemy/seeder.rb +1 -4
- data/lib/alchemy/shell.rb +12 -14
- data/lib/alchemy/tasks/helpers.rb +5 -7
- data/lib/alchemy/test_support/essence_shared_examples.rb +24 -24
- data/lib/alchemy/test_support/factories.rb +2 -146
- data/lib/alchemy/test_support/factories/attachment_factory.rb +9 -0
- data/lib/alchemy/test_support/factories/cell_factory.rb +9 -0
- data/lib/alchemy/test_support/factories/content_factory.rb +10 -0
- data/lib/alchemy/test_support/factories/dummy_user_factory.rb +21 -0
- data/lib/alchemy/test_support/factories/element_factory.rb +21 -0
- data/lib/alchemy/test_support/factories/essence_file_factory.rb +8 -0
- data/lib/alchemy/test_support/factories/essence_picture_factory.rb +8 -0
- data/lib/alchemy/test_support/factories/essence_text_factory.rb +7 -0
- data/lib/alchemy/test_support/factories/language_factory.rb +28 -0
- data/lib/alchemy/test_support/factories/page_factory.rb +45 -0
- data/lib/alchemy/test_support/factories/picture_factory.rb +10 -0
- data/lib/alchemy/test_support/factories/site_factory.rb +12 -0
- data/lib/alchemy/test_support/integration_helpers.rb +0 -3
- data/lib/alchemy/tinymce.rb +24 -35
- data/lib/alchemy/touching.rb +5 -6
- data/lib/alchemy/upgrader.rb +3 -5
- data/lib/alchemy/upgrader/tasks/available_contents_upgrader.rb +155 -0
- data/lib/alchemy/upgrader/tasks/nestable_elements_migration.rb +71 -0
- data/lib/alchemy/upgrader/tasks/three_point_two_task.rb +31 -0
- data/lib/alchemy/upgrader/three_point_three.rb +50 -0
- data/lib/alchemy/upgrader/three_point_two.rb +3 -32
- data/lib/alchemy/upgrader/three_point_zero.rb +0 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/rails/generators/alchemy/base.rb +1 -1
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +1 -7
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +5 -7
- data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +6 -8
- data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +6 -7
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +4 -4
- data/lib/rails/generators/alchemy/elements/templates/view.html.haml +3 -3
- data/lib/rails/generators/alchemy/elements/templates/view.html.slim +3 -3
- data/lib/rails/generators/alchemy/essence/essence_generator.rb +2 -3
- data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +1 -1
- data/lib/rails/generators/alchemy/install/files/alchemy.de.yml +2 -2
- data/lib/rails/generators/alchemy/install/files/alchemy.en.yml +2 -2
- data/lib/rails/generators/alchemy/install/files/alchemy.es.yml +3 -3
- data/lib/rails/generators/alchemy/install/install_generator.rb +0 -1
- data/lib/rails/generators/alchemy/install/templates/elements.yml.tt +2 -2
- data/lib/rails/generators/alchemy/install/templates/page_layouts.yml.tt +1 -1
- data/lib/rails/generators/alchemy/module/module_generator.rb +1 -1
- data/lib/rails/templates/alchemy.rb +2 -2
- data/lib/tasks/alchemy/convert.rake +4 -8
- data/lib/tasks/alchemy/db.rake +2 -3
- data/lib/tasks/alchemy/install.rake +3 -4
- data/lib/tasks/alchemy/tidy.rake +4 -5
- data/lib/tasks/alchemy/upgrade.rake +2 -4
- data/spec/controllers/{admin → alchemy/admin}/attachments_controller_spec.rb +26 -44
- data/spec/controllers/{admin → alchemy/admin}/base_controller_spec.rb +14 -1
- data/spec/controllers/{admin → alchemy/admin}/clipboard_controller_spec.rb +3 -3
- data/spec/controllers/{admin → alchemy/admin}/contents_controller_spec.rb +4 -4
- data/spec/controllers/{admin → alchemy/admin}/dashboard_controller_spec.rb +11 -6
- data/spec/controllers/{admin → alchemy/admin}/elements_controller_spec.rb +54 -31
- data/spec/controllers/{admin → alchemy/admin}/essence_files_controller_spec.rb +8 -3
- data/spec/controllers/{admin → alchemy/admin}/essence_pictures_controller_spec.rb +3 -3
- data/spec/controllers/{admin → alchemy/admin}/languages_controller_spec.rb +13 -1
- data/spec/controllers/{admin → alchemy/admin}/layoutpages_controller_spec.rb +0 -6
- data/spec/controllers/{admin → alchemy/admin}/pages_controller_spec.rb +103 -35
- data/spec/controllers/{admin → alchemy/admin}/pictures_controller_spec.rb +133 -108
- data/spec/controllers/alchemy/admin/resources_controller_spec.rb +81 -0
- data/spec/controllers/{admin → alchemy/admin}/trash_controller_spec.rb +12 -13
- data/spec/controllers/alchemy/api/contents_controller_spec.rb +12 -13
- data/spec/controllers/alchemy/api/elements_controller_spec.rb +8 -9
- data/spec/controllers/alchemy/api/pages_controller_spec.rb +40 -7
- data/spec/controllers/{attachments_controller_spec.rb → alchemy/attachments_controller_spec.rb} +7 -7
- data/spec/controllers/alchemy/base_controller_spec.rb +106 -0
- data/spec/controllers/{elements_controller_spec.rb → alchemy/elements_controller_spec.rb} +4 -4
- data/spec/controllers/{messages_controller_spec.rb → alchemy/messages_controller_spec.rb} +14 -9
- data/spec/controllers/alchemy/on_page_layout_mixin_spec.rb +330 -0
- data/spec/controllers/{pages_controller_spec.rb → alchemy/pages_controller_spec.rb} +167 -89
- data/spec/controllers/{pictures_controller_spec.rb → alchemy/pictures_controller_spec.rb} +42 -20
- data/spec/dummy/app/models/dummy_user.rb +4 -0
- data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_view.html.erb +31 -0
- data/spec/dummy/app/views/alchemy/elements/_article_editor.html.erb +6 -10
- data/spec/dummy/app/views/alchemy/elements/_article_view.html.erb +9 -24
- data/spec/dummy/app/views/alchemy/elements/_bild_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_bild_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_contactform_editor.html.erb +6 -0
- data/spec/dummy/app/views/alchemy/elements/_contactform_view.html.erb +16 -0
- data/spec/dummy/app/views/alchemy/elements/_download_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_download_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_erb_element_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_erb_element_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_header_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_header_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_news_editor.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_search_editor.html.erb +1 -0
- data/spec/dummy/app/views/alchemy/elements/_search_view.html.erb +4 -0
- data/spec/dummy/app/views/alchemy/elements/_slide_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_slide_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/elements/_slider_editor.html.erb +2 -0
- data/spec/dummy/app/views/alchemy/elements/_slider_view.html.erb +4 -0
- data/spec/dummy/app/views/alchemy/elements/_text_editor.html.erb +3 -0
- data/spec/dummy/app/views/alchemy/elements/_text_view.html.erb +5 -0
- data/spec/dummy/app/views/alchemy/page_layouts/_standard.html.erb +1 -0
- data/spec/dummy/config/alchemy/elements.yml +10 -13
- data/spec/dummy/config/alchemy/page_layouts.yml +1 -1
- data/spec/dummy/config/initializers/alchemy.rb +1 -0
- data/spec/dummy/config/locales/kl.yml +2 -0
- data/spec/dummy/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +1 -0
- data/spec/dummy/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +1 -0
- data/spec/dummy/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +1 -0
- data/spec/dummy/db/schema.rb +10 -6
- data/spec/factories.rb +13 -0
- data/spec/features/admin/admin_layout_spec.rb +14 -0
- data/spec/features/admin/dashboard_spec.rb +1 -2
- data/spec/features/admin/edit_elements_feature_spec.rb +36 -0
- data/spec/features/admin/language_tree_feature_spec.rb +7 -8
- data/spec/features/admin/languages_features_spec.rb +65 -0
- data/spec/features/admin/legacy_page_url_management_spec.rb +3 -3
- data/spec/features/admin/link_overlay_spec.rb +16 -17
- data/spec/features/admin/locale_select_feature_spec.rb +1 -1
- data/spec/features/admin/modules_integration_spec.rb +0 -1
- data/spec/features/admin/navigation_feature_spec.rb +11 -2
- data/spec/features/admin/page_creation_feature_spec.rb +5 -5
- data/spec/features/admin/page_editing_feature_spec.rb +6 -6
- data/spec/features/admin/picture_library_integration_spec.rb +3 -3
- data/spec/features/admin/resources_integration_spec.rb +7 -12
- data/spec/features/admin/site_select_feature_spec.rb +1 -2
- data/spec/features/admin/tinymce_feature_spec.rb +0 -1
- data/spec/features/page_feature_spec.rb +57 -158
- data/spec/features/page_redirects_spec.rb +358 -0
- data/spec/features/picture_security_spec.rb +1 -7
- data/spec/fixtures/animated.gif +0 -0
- data/spec/helpers/{admin → alchemy/admin}/attachments_helper_spec.rb +0 -0
- data/spec/helpers/{admin → alchemy/admin}/base_helper_spec.rb +39 -29
- data/spec/helpers/{admin → alchemy/admin}/contents_helper_spec.rb +4 -23
- data/spec/helpers/{admin → alchemy/admin}/elements_helper_spec.rb +141 -5
- data/spec/helpers/{admin → alchemy/admin}/essences_helper_spec.rb +69 -8
- data/spec/helpers/{admin → alchemy/admin}/navigation_helper_spec.rb +43 -37
- data/spec/helpers/{admin → alchemy/admin}/pages_helper_spec.rb +6 -38
- data/spec/helpers/{admin → alchemy/admin}/pictures_helper_spec.rb +0 -1
- data/spec/helpers/{admin → alchemy/admin}/tags_helper_spec.rb +1 -3
- data/spec/helpers/{base_helper_spec.rb → alchemy/base_helper_spec.rb} +1 -2
- data/spec/helpers/{elements_block_helper_spec.rb → alchemy/elements_block_helper_spec.rb} +3 -3
- data/spec/helpers/{elements_helper_spec.rb → alchemy/elements_helper_spec.rb} +18 -19
- data/spec/helpers/alchemy/essences_helper_spec.rb +85 -0
- data/spec/helpers/{pages_helper_spec.rb → alchemy/pages_helper_spec.rb} +125 -39
- data/spec/helpers/alchemy/picture_url_helpers_spec.rb +78 -0
- data/spec/helpers/{url_helper_spec.rb → alchemy/url_helper_spec.rb} +66 -40
- data/spec/libraries/config_spec.rb +2 -3
- data/spec/libraries/controller_actions_spec.rb +18 -18
- data/spec/libraries/i18n_spec.rb +7 -0
- data/spec/libraries/page_layout_spec.rb +13 -7
- data/spec/libraries/paths_spec.rb +15 -0
- data/spec/libraries/permissions_spec.rb +6 -7
- data/spec/libraries/resource_spec.rb +48 -75
- data/spec/libraries/resources_helper_spec.rb +55 -6
- data/spec/libraries/shell_spec.rb +0 -4
- data/spec/libraries/template_tracker_spec.rb +4 -13
- data/spec/libraries/tinymce_spec.rb +53 -9
- data/spec/mailers/{messages_spec.rb → alchemy/messages_spec.rb} +0 -2
- data/spec/models/{attachment_spec.rb → alchemy/attachment_spec.rb} +43 -20
- data/spec/models/{cell_spec.rb → alchemy/cell_spec.rb} +2 -3
- data/spec/models/{content_spec.rb → alchemy/content_spec.rb} +179 -70
- data/spec/models/{element_spec.rb → alchemy/element_spec.rb} +315 -70
- data/spec/models/{element_to_page_spec.rb → alchemy/element_to_page_spec.rb} +0 -1
- data/spec/models/{essence_boolean_spec.rb → alchemy/essence_boolean_spec.rb} +0 -0
- data/spec/models/{essence_date_spec.rb → alchemy/essence_date_spec.rb} +2 -3
- data/spec/models/{essence_file_spec.rb → alchemy/essence_file_spec.rb} +2 -5
- data/spec/models/{essence_html_spec.rb → alchemy/essence_html_spec.rb} +1 -1
- data/spec/models/{essence_link_spec.rb → alchemy/essence_link_spec.rb} +0 -0
- data/spec/models/{essence_picture_spec.rb → alchemy/essence_picture_spec.rb} +101 -29
- data/spec/models/{essence_richtext_spec.rb → alchemy/essence_richtext_spec.rb} +7 -2
- data/spec/models/{essence_select_spec.rb → alchemy/essence_select_spec.rb} +0 -0
- data/spec/models/{essence_text_spec.rb → alchemy/essence_text_spec.rb} +4 -8
- data/spec/models/alchemy/language_spec.rb +243 -0
- data/spec/models/{legacy_page_url_spec.rb → alchemy/legacy_page_url_spec.rb} +1 -1
- data/spec/models/{message_spec.rb → alchemy/message_spec.rb} +0 -0
- data/spec/models/{page_spec.rb → alchemy/page_spec.rb} +460 -248
- data/spec/models/{picture_spec.rb → alchemy/picture_spec.rb} +118 -30
- data/spec/models/{site_spec.rb → alchemy/site_spec.rb} +19 -84
- data/spec/models/{tag_spec.rb → alchemy/tag_spec.rb} +1 -3
- data/spec/models/dummy_model_spec.rb +1 -2
- data/spec/requests/alchemy/admin/resources_requests_spec.rb +26 -0
- data/spec/requests/alchemy/admin/site_requests_spec.rb +19 -0
- data/spec/requests/alchemy/site_requests_spec.rb +18 -0
- data/spec/requests/alchemy/sitemap_spec.rb +56 -0
- data/spec/routing/api_routing_spec.rb +1 -1
- data/spec/routing/routing_spec.rb +121 -15
- data/spec/spec_helper.rb +2 -1
- data/spec/support/hint_examples.rb +1 -3
- data/spec/support/test_tweaks.rb +3 -3
- data/spec/support/transformation_examples.rb +6 -7
- data/spec/tasks/helpers_spec.rb +2 -4
- data/spec/views/admin/pictures/show_spec.rb +43 -0
- data/spec/views/essences/essence_boolean_editor_spec.rb +0 -1
- data/spec/views/essences/essence_boolean_view_spec.rb +2 -4
- data/spec/views/essences/essence_date_view_spec.rb +0 -1
- data/spec/views/essences/essence_file_editor_spec.rb +4 -6
- data/spec/views/essences/essence_file_view_spec.rb +56 -3
- data/spec/views/essences/essence_link_view_spec.rb +1 -1
- data/spec/views/essences/essence_picture_editor_spec.rb +80 -0
- data/spec/views/essences/essence_picture_view_spec.rb +0 -1
- data/spec/views/essences/essence_select_view_spec.rb +0 -1
- data/spec/views/essences/essence_text_view_spec.rb +0 -1
- data/vendor/assets/javascripts/handlebars.js +4608 -0
- data/vendor/assets/javascripts/tinymce/langs/de.js +19 -0
- data/vendor/assets/javascripts/tinymce/langs/es.js +19 -0
- data/vendor/assets/javascripts/tinymce/langs/fr.js +23 -4
- data/vendor/assets/javascripts/tinymce/langs/nl.js +22 -3
- data/vendor/assets/javascripts/tinymce/langs/ru.js +22 -3
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +12 -13
- metadata +274 -256
- data/app/views/alchemy/admin/attachments/create.js.erb +0 -11
- data/app/views/alchemy/admin/attachments/new.html.erb +0 -14
- data/app/views/alchemy/admin/elements/_element_foot.html.erb +0 -36
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +0 -67
- data/app/views/alchemy/admin/pictures/info.html.erb +0 -38
- data/app/views/alchemy/admin/pictures/new.html.erb +0 -16
- data/lib/alchemy/middleware/rescue_old_cookies.rb +0 -27
- data/spec/controllers/admin/resources_controller_spec.rb +0 -53
- data/spec/controllers/base_controller_spec.rb +0 -51
- data/spec/helpers/essences_helper_spec.rb +0 -156
- data/spec/helpers/picture_url_helpers_spec.rb +0 -35
- data/spec/libraries/on_page_layout_spec.rb +0 -112
- data/spec/models/language_spec.rb +0 -123
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module Alchemy
|
|
2
2
|
module Admin
|
|
3
3
|
module TagsHelper
|
|
4
|
-
|
|
5
4
|
# Renders tags list items for given class name
|
|
6
5
|
#
|
|
7
6
|
# @param class_name [String]
|
|
@@ -11,7 +10,7 @@ module Alchemy
|
|
|
11
10
|
# A HTML string containing <tt><li></tt> tags
|
|
12
11
|
#
|
|
13
12
|
def render_tag_list(class_name, params)
|
|
14
|
-
raise ArgumentError
|
|
13
|
+
raise ArgumentError, 'Please provide a String as class_name' if class_name.nil?
|
|
15
14
|
li_s = []
|
|
16
15
|
class_name.constantize.tag_counts.sort { |x, y| x.name.downcase <=> y.name.downcase }.each do |tag|
|
|
17
16
|
tags = filtered_by_tag?(tag) ? tag_filter(remove: tag) : tag_filter(add: tag)
|
|
@@ -19,7 +18,7 @@ module Alchemy
|
|
|
19
18
|
link_to(
|
|
20
19
|
"#{tag.name} (#{tag.count})",
|
|
21
20
|
url_for(
|
|
22
|
-
params.delete_if { |k,
|
|
21
|
+
params.delete_if { |k, _v| k == "page" }.merge(
|
|
23
22
|
action: 'index',
|
|
24
23
|
tagged_with: tags
|
|
25
24
|
)
|
|
@@ -84,11 +83,11 @@ module Alchemy
|
|
|
84
83
|
# ** :add (ActsAsTaggableOn::Tag) - The tag that should be added to the tag-filter
|
|
85
84
|
# ** :remove (ActsAsTaggableOn::Tag) - The tag that should be removed from the tag-filter
|
|
86
85
|
#
|
|
87
|
-
def tag_filter(options={})
|
|
86
|
+
def tag_filter(options = {})
|
|
88
87
|
case
|
|
89
|
-
|
|
88
|
+
when options[:add]
|
|
90
89
|
taglist = add_to_tag_filter(options[:add]) if options[:add]
|
|
91
|
-
|
|
90
|
+
when options[:remove]
|
|
92
91
|
taglist = remove_from_tag_filter(options[:remove]) if options[:remove]
|
|
93
92
|
else
|
|
94
93
|
return params[:tagged_with]
|
|
@@ -96,7 +95,6 @@ module Alchemy
|
|
|
96
95
|
return nil if taglist.blank?
|
|
97
96
|
taglist.uniq.join(',')
|
|
98
97
|
end
|
|
99
|
-
|
|
100
98
|
end
|
|
101
99
|
end
|
|
102
100
|
end
|
|
@@ -1,30 +1,22 @@
|
|
|
1
1
|
module Alchemy
|
|
2
2
|
module BaseHelper
|
|
3
|
-
|
|
4
3
|
def _t(key, *args)
|
|
5
|
-
|
|
4
|
+
ActiveSupport::Deprecation.warn("Alchemys `_t` method is deprecated! Use `Alchemy.t` instead.", caller.unshift)
|
|
5
|
+
Alchemy.t(key, *args)
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
# An alias for truncate.
|
|
9
9
|
# Left here for downwards compatibilty.
|
|
10
10
|
def shorten(text, length)
|
|
11
|
-
text.truncate(:
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def parse_sitemap_name(page)
|
|
15
|
-
if multi_language?
|
|
16
|
-
pathname = "/#{Language.current.code}/#{page.urlname}"
|
|
17
|
-
else
|
|
18
|
-
pathname = "/#{page.urlname}"
|
|
19
|
-
end
|
|
20
|
-
pathname
|
|
11
|
+
text.truncate(length: length)
|
|
21
12
|
end
|
|
22
13
|
|
|
23
|
-
# Logs a message in the Rails logger (warn level)
|
|
14
|
+
# Logs a message in the Rails logger (warn level)
|
|
15
|
+
# and optionally displays an error message to the user.
|
|
24
16
|
def warning(message, text = nil)
|
|
25
17
|
Logger.warn(message, caller.first)
|
|
26
18
|
unless text.nil?
|
|
27
|
-
warning = content_tag('p', :
|
|
19
|
+
warning = content_tag('p', class: 'content_editor_error') do
|
|
28
20
|
render_icon('warning') + text
|
|
29
21
|
end
|
|
30
22
|
return warning
|
|
@@ -33,7 +25,7 @@ module Alchemy
|
|
|
33
25
|
|
|
34
26
|
# Returns an icon
|
|
35
27
|
def render_icon(icon_class)
|
|
36
|
-
content_tag('span', '', :
|
|
28
|
+
content_tag('span', '', class: "icon #{icon_class}")
|
|
37
29
|
end
|
|
38
30
|
|
|
39
31
|
# Returns a div with an icon and the passed content
|
|
@@ -48,9 +40,9 @@ module Alchemy
|
|
|
48
40
|
#
|
|
49
41
|
def render_message(type = :info, msg = nil, &blk)
|
|
50
42
|
if block_given?
|
|
51
|
-
content_tag :div, render_icon(type) + capture(&blk), :
|
|
43
|
+
content_tag :div, render_icon(type) + capture(&blk), class: "#{type} message"
|
|
52
44
|
else
|
|
53
|
-
content_tag :div, render_icon(type) + msg, :
|
|
45
|
+
content_tag :div, render_icon(type) + msg, class: "#{type} message"
|
|
54
46
|
end
|
|
55
47
|
end
|
|
56
48
|
|
|
@@ -6,22 +6,17 @@ module Alchemy
|
|
|
6
6
|
# Base class for our block-level helpers.
|
|
7
7
|
#
|
|
8
8
|
class BlockHelper
|
|
9
|
+
attr_reader :helpers
|
|
10
|
+
attr_reader :opts
|
|
11
|
+
|
|
9
12
|
def initialize(helpers, opts = {})
|
|
10
13
|
@helpers = helpers
|
|
11
14
|
@opts = opts
|
|
12
15
|
end
|
|
13
16
|
|
|
14
|
-
def opts
|
|
15
|
-
@opts
|
|
16
|
-
end
|
|
17
|
-
|
|
18
17
|
def element
|
|
19
18
|
opts[:element]
|
|
20
19
|
end
|
|
21
|
-
|
|
22
|
-
def helpers
|
|
23
|
-
@helpers
|
|
24
|
-
end
|
|
25
20
|
end
|
|
26
21
|
|
|
27
22
|
# Block-level helper class for element views.
|
|
@@ -135,6 +130,7 @@ module Alchemy
|
|
|
135
130
|
# that's it!
|
|
136
131
|
output
|
|
137
132
|
end
|
|
133
|
+
|
|
138
134
|
# Block-level helper for element editors. Provides a block helper object
|
|
139
135
|
# you can use for concise access to Alchemy's various helpers.
|
|
140
136
|
#
|
|
@@ -149,11 +145,7 @@ module Alchemy
|
|
|
149
145
|
# @param [Alchemy::Element] element
|
|
150
146
|
# The element to display.
|
|
151
147
|
#
|
|
152
|
-
def element_editor_for(element
|
|
153
|
-
options = {
|
|
154
|
-
# nothing here yet.
|
|
155
|
-
}.merge(options)
|
|
156
|
-
|
|
148
|
+
def element_editor_for(element)
|
|
157
149
|
capture do
|
|
158
150
|
yield ElementEditorHelper.new(self, element: element) if block_given?
|
|
159
151
|
end
|
|
@@ -157,14 +157,15 @@ module Alchemy
|
|
|
157
157
|
return
|
|
158
158
|
end
|
|
159
159
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
render "alchemy/elements/#{element.name}_#{part}", {
|
|
160
|
+
options = {
|
|
163
161
|
element: element,
|
|
164
162
|
counter: counter,
|
|
165
|
-
options: options
|
|
166
|
-
|
|
163
|
+
options: options,
|
|
164
|
+
locals: options.delete(:locals) || {}
|
|
165
|
+
}
|
|
167
166
|
|
|
167
|
+
element.store_page(@page) if part.to_sym == :view
|
|
168
|
+
render "alchemy/elements/#{element.name}_#{part}", options
|
|
168
169
|
rescue ActionView::MissingTemplate => e
|
|
169
170
|
warning(%(
|
|
170
171
|
Element #{part} partial not found for #{element.name}.\n
|
|
@@ -294,6 +295,5 @@ module Alchemy
|
|
|
294
295
|
end
|
|
295
296
|
buff.join(options[:separator]).html_safe
|
|
296
297
|
end
|
|
297
|
-
|
|
298
298
|
end
|
|
299
299
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
module Alchemy
|
|
2
|
-
|
|
3
2
|
# This helper contains methods to render the +essence+ from an +Element+ +Content+.
|
|
4
3
|
#
|
|
5
4
|
# Essences have two kinds of partials. An +editor+ and a +view+ partial.
|
|
@@ -27,7 +26,6 @@ module Alchemy
|
|
|
27
26
|
# And the +render_essence_editor_by_name+ helper for Alchemy backend views.
|
|
28
27
|
#
|
|
29
28
|
module EssencesHelper
|
|
30
|
-
|
|
31
29
|
# Renders the +Essence+ view partial from +Element+ by name.
|
|
32
30
|
#
|
|
33
31
|
# Pass the name of the +Content+ from +Element+ as second argument.
|
|
@@ -65,9 +63,9 @@ module Alchemy
|
|
|
65
63
|
def render_essence(content, part = :view, options = {}, html_options = {})
|
|
66
64
|
options = {for_view: {}, for_editor: {}}.update(options)
|
|
67
65
|
if content.nil?
|
|
68
|
-
return part == :view ? "" : warning('Content is nil',
|
|
66
|
+
return part == :view ? "" : warning('Content is nil', Alchemy.t(:content_not_found))
|
|
69
67
|
elsif content.essence.nil?
|
|
70
|
-
return part == :view ? "" : warning('Essence is nil',
|
|
68
|
+
return part == :view ? "" : warning('Essence is nil', Alchemy.t(:content_essence_not_found))
|
|
71
69
|
end
|
|
72
70
|
render partial: "alchemy/essences/#{content.essence_partial_name}_#{part}", locals: {
|
|
73
71
|
content: content,
|
|
@@ -86,7 +84,7 @@ module Alchemy
|
|
|
86
84
|
# :disable_link => true # You can surpress the link of an EssencePicture. Default false
|
|
87
85
|
#
|
|
88
86
|
def render_essence_view(content, options = {}, html_options = {})
|
|
89
|
-
render_essence(content, :view, {:
|
|
87
|
+
render_essence(content, :view, {for_view: options}, html_options)
|
|
90
88
|
end
|
|
91
89
|
|
|
92
90
|
# Renders a essence picture
|
|
@@ -123,16 +121,5 @@ module Alchemy
|
|
|
123
121
|
output
|
|
124
122
|
end
|
|
125
123
|
end
|
|
126
|
-
|
|
127
|
-
# Fetches value from settings of given content
|
|
128
|
-
#
|
|
129
|
-
# @param content [Alchemy::Content] - The content that settings should be taken
|
|
130
|
-
# @param key [Symbol] - The hash key you want to fetch the value from
|
|
131
|
-
# @param options [Hash] - An optional Hash that can override the settings.
|
|
132
|
-
# Normally passed as options hash into the content editor view
|
|
133
|
-
def content_settings_value(content, key, options = {})
|
|
134
|
-
content.settings.update(options || {}).symbolize_keys[key.to_sym]
|
|
135
|
-
end
|
|
136
|
-
|
|
137
124
|
end
|
|
138
125
|
end
|
|
@@ -21,7 +21,7 @@ module Alchemy
|
|
|
21
21
|
# @option options reverse [Boolean] (false)
|
|
22
22
|
# Reverses the ordering of the links.
|
|
23
23
|
#
|
|
24
|
-
def language_links(options={})
|
|
24
|
+
def language_links(options = {})
|
|
25
25
|
options = {
|
|
26
26
|
linkname: 'name',
|
|
27
27
|
show_title: true,
|
|
@@ -196,7 +196,7 @@ module Alchemy
|
|
|
196
196
|
}
|
|
197
197
|
options = default_options.merge(options)
|
|
198
198
|
if !options[:from_page].nil?
|
|
199
|
-
while options[:from_page].level > options[:level]
|
|
199
|
+
while options[:from_page].level > options[:level]
|
|
200
200
|
options[:from_page] = options[:from_page].parent
|
|
201
201
|
end
|
|
202
202
|
render_navigation(options, html_options)
|
|
@@ -227,7 +227,7 @@ module Alchemy
|
|
|
227
227
|
# restricted_only: false # Pass boolean for displaying restricted pages only.
|
|
228
228
|
# reverse: false # Pass boolean for displaying breadcrumb in reversed reversed.
|
|
229
229
|
#
|
|
230
|
-
def render_breadcrumb(options={})
|
|
230
|
+
def render_breadcrumb(options = {})
|
|
231
231
|
options = {
|
|
232
232
|
separator: ">",
|
|
233
233
|
page: @page,
|
|
@@ -283,7 +283,7 @@ module Alchemy
|
|
|
283
283
|
else
|
|
284
284
|
title_parts << response.status
|
|
285
285
|
end
|
|
286
|
-
title_parts.join(options[:separator])
|
|
286
|
+
title_parts.join(options[:separator]).html_safe
|
|
287
287
|
end
|
|
288
288
|
|
|
289
289
|
# Returns a complete html <title> tag for the <head> part of the html document.
|
|
@@ -293,13 +293,13 @@ module Alchemy
|
|
|
293
293
|
# Please use the render_meta_data() helper. There all important meta information gets rendered in one helper.
|
|
294
294
|
# So you dont have to worry about anything.
|
|
295
295
|
#
|
|
296
|
-
def render_title_tag(options={})
|
|
296
|
+
def render_title_tag(options = {})
|
|
297
297
|
default_options = {
|
|
298
298
|
prefix: "",
|
|
299
299
|
separator: ""
|
|
300
300
|
}
|
|
301
301
|
options = default_options.merge(options)
|
|
302
|
-
|
|
302
|
+
content_tag(:title, render_page_title(options))
|
|
303
303
|
end
|
|
304
304
|
|
|
305
305
|
# Renders a html <meta> tag for name: "" and content: ""
|
|
@@ -309,7 +309,7 @@ module Alchemy
|
|
|
309
309
|
# Please use the render_meta_data() helper. There all important meta information gets rendered in one helper.
|
|
310
310
|
# So you dont have to worry about anything.
|
|
311
311
|
#
|
|
312
|
-
def render_meta_tag(options={})
|
|
312
|
+
def render_meta_tag(options = {})
|
|
313
313
|
default_options = {
|
|
314
314
|
name: "",
|
|
315
315
|
default_language: "de",
|
|
@@ -317,7 +317,7 @@ module Alchemy
|
|
|
317
317
|
}
|
|
318
318
|
options = default_options.merge(options)
|
|
319
319
|
lang = (@page.language.blank? ? options[:default_language] : @page.language.code)
|
|
320
|
-
|
|
320
|
+
tag(:meta, name: options[:name], content: options[:content], lang: lang)
|
|
321
321
|
end
|
|
322
322
|
|
|
323
323
|
# This helper takes care of all important meta tags for your page.
|
|
@@ -332,14 +332,14 @@ module Alchemy
|
|
|
332
332
|
#
|
|
333
333
|
# Then placing +render_meta_data(title_prefix: "Company", title_separator: "-")+ into the <head> part of the +pages.html.erb+ layout produces:
|
|
334
334
|
#
|
|
335
|
-
# <meta charset="
|
|
335
|
+
# <meta charset="utf-8">
|
|
336
336
|
# <title>Company - #{@page.title}</title>
|
|
337
337
|
# <meta name="description" content="Your page description">
|
|
338
338
|
# <meta name="keywords" content="cms, ruby, rubyonrails, rails, software, development, html, javascript, ajax">
|
|
339
339
|
# <meta name="created" content="Tue Dec 16 10:21:26 +0100 2008">
|
|
340
340
|
# <meta name="robots" content="index, follow">
|
|
341
341
|
#
|
|
342
|
-
def render_meta_data
|
|
342
|
+
def render_meta_data(options = {})
|
|
343
343
|
if @page.blank?
|
|
344
344
|
warning("No Page found!")
|
|
345
345
|
return nil
|
|
@@ -352,31 +352,39 @@ module Alchemy
|
|
|
352
352
|
options = default_options.merge(options)
|
|
353
353
|
# render meta description of the root page from language if the current meta description is empty
|
|
354
354
|
if @page.meta_description.blank?
|
|
355
|
-
description = Language.
|
|
355
|
+
description = Language.current_root_page.try(:meta_description)
|
|
356
356
|
else
|
|
357
357
|
description = @page.meta_description
|
|
358
358
|
end
|
|
359
359
|
# render meta keywords of the root page from language if the current meta keywords is empty
|
|
360
360
|
if @page.meta_keywords.blank?
|
|
361
|
-
keywords = Language.
|
|
361
|
+
keywords = Language.current_root_page.try(:meta_keywords)
|
|
362
362
|
else
|
|
363
363
|
keywords = @page.meta_keywords
|
|
364
364
|
end
|
|
365
|
-
robot = "#{@page.robot_index? ?
|
|
365
|
+
robot = "#{@page.robot_index? ? '' : 'no'}index, #{@page.robot_follow? ? '' : 'no'}follow"
|
|
366
366
|
meta_string = %(
|
|
367
|
-
|
|
367
|
+
#{tag(:meta, charset: 'utf-8')}
|
|
368
368
|
#{render_title_tag(prefix: options[:title_prefix], separator: options[:title_separator])}
|
|
369
|
-
#{render_meta_tag(name:
|
|
370
|
-
#{render_meta_tag(name:
|
|
371
|
-
<meta name="created" content="#{@page.updated_at}">
|
|
372
|
-
<meta name="robots" content="#{robot}">
|
|
369
|
+
#{render_meta_tag(name: 'created', content: @page.updated_at)}
|
|
370
|
+
#{render_meta_tag(name: 'robots', content: robot)}
|
|
373
371
|
)
|
|
372
|
+
if description.present?
|
|
373
|
+
meta_string += %(
|
|
374
|
+
#{render_meta_tag(name: 'description', content: description.html_safe)}
|
|
375
|
+
)
|
|
376
|
+
end
|
|
377
|
+
if keywords.present?
|
|
378
|
+
meta_string += %(
|
|
379
|
+
#{render_meta_tag(name: 'keywords', content: keywords.html_safe)}
|
|
380
|
+
)
|
|
381
|
+
end
|
|
374
382
|
if @page.contains_feed?
|
|
375
383
|
meta_string += %(
|
|
376
|
-
|
|
384
|
+
#{auto_discovery_link_tag(:rss, show_alchemy_page_url(@page, format: :rss))}
|
|
377
385
|
)
|
|
378
386
|
end
|
|
379
|
-
|
|
387
|
+
meta_string.html_safe
|
|
380
388
|
end
|
|
381
389
|
|
|
382
390
|
# Renders the partial for the cell with the given name of the current page.
|
|
@@ -387,7 +395,7 @@ module Alchemy
|
|
|
387
395
|
# from_page: Alchemy::Page # Alchemy::Page object from which the elements are rendered from.
|
|
388
396
|
# locals: Hash # Hash of variables that will be available in the partial. Example: {user: var1, product: var2}
|
|
389
397
|
#
|
|
390
|
-
def render_cell(name, options={})
|
|
398
|
+
def render_cell(name, options = {})
|
|
391
399
|
default_options = {
|
|
392
400
|
from_page: @page,
|
|
393
401
|
locals: {}
|
|
@@ -402,16 +410,15 @@ module Alchemy
|
|
|
402
410
|
def cell_empty?(name)
|
|
403
411
|
cell = @page.cells.find_by_name(name)
|
|
404
412
|
return true if cell.blank?
|
|
405
|
-
cell.elements.
|
|
413
|
+
cell.elements.not_trashed.empty?
|
|
406
414
|
end
|
|
407
415
|
|
|
408
416
|
# Include this in your layout file to have element selection magic in the page edit preview window.
|
|
409
417
|
def alchemy_preview_mode_code
|
|
410
418
|
if @preview_mode
|
|
411
|
-
|
|
412
|
-
|
|
419
|
+
javascript_tag("Alchemy = { locale: '#{session[:alchemy_locale]}' };") +
|
|
420
|
+
javascript_include_tag("alchemy/preview")
|
|
413
421
|
end
|
|
414
422
|
end
|
|
415
|
-
|
|
416
423
|
end
|
|
417
424
|
end
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
#
|
|
5
5
|
module Alchemy
|
|
6
6
|
module UrlHelper
|
|
7
|
-
|
|
8
7
|
# Returns the path for rendering an alchemy page
|
|
9
|
-
def show_alchemy_page_path(page, optional_params={})
|
|
8
|
+
def show_alchemy_page_path(page, optional_params = {})
|
|
10
9
|
alchemy.show_page_path(show_page_path_params(page, optional_params))
|
|
11
10
|
end
|
|
12
11
|
|
|
13
12
|
# Returns the url for rendering an alchemy page
|
|
14
|
-
def show_alchemy_page_url(page, optional_params={})
|
|
13
|
+
def show_alchemy_page_url(page, optional_params = {})
|
|
15
14
|
alchemy.show_page_url(show_page_path_params(page, optional_params))
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -21,9 +20,9 @@ module Alchemy
|
|
|
21
20
|
#
|
|
22
21
|
# Example:
|
|
23
22
|
#
|
|
24
|
-
# <%= image_tag show_alchemy_picture_path(picture, :
|
|
23
|
+
# <%= image_tag show_alchemy_picture_path(picture, size: '320x200', format: :png) %>
|
|
25
24
|
#
|
|
26
|
-
def show_alchemy_picture_path(picture, optional_params={})
|
|
25
|
+
def show_alchemy_picture_path(picture, optional_params = {})
|
|
27
26
|
alchemy.show_picture_path(show_picture_path_params(picture, optional_params))
|
|
28
27
|
end
|
|
29
28
|
|
|
@@ -33,28 +32,28 @@ module Alchemy
|
|
|
33
32
|
#
|
|
34
33
|
# Example:
|
|
35
34
|
#
|
|
36
|
-
# <%= image_tag show_alchemy_picture_url(picture, :
|
|
35
|
+
# <%= image_tag show_alchemy_picture_url(picture, size: '320x200', format: :png) %>
|
|
37
36
|
#
|
|
38
|
-
def show_alchemy_picture_url(picture, optional_params={})
|
|
37
|
+
def show_alchemy_picture_url(picture, optional_params = {})
|
|
39
38
|
alchemy.show_picture_url(show_picture_path_params(picture, optional_params))
|
|
40
39
|
end
|
|
41
40
|
|
|
42
41
|
# Returns the correct params hash for passing to show_picture_path
|
|
43
|
-
def show_picture_path_params(picture, optional_params={})
|
|
42
|
+
def show_picture_path_params(picture, optional_params = {})
|
|
44
43
|
url_params = {
|
|
45
|
-
:
|
|
46
|
-
:
|
|
47
|
-
:
|
|
48
|
-
:
|
|
44
|
+
id: picture.id,
|
|
45
|
+
name: picture.urlname,
|
|
46
|
+
format: configuration(:image_output_format),
|
|
47
|
+
sh: picture.security_token(optional_params)
|
|
49
48
|
}
|
|
50
|
-
url_params.update(optional_params.update(
|
|
49
|
+
url_params.update(optional_params.update(crop: optional_params[:crop] ? 'crop' : nil))
|
|
51
50
|
end
|
|
52
51
|
|
|
53
52
|
# Returns the correct params-hash for passing to show_page_path
|
|
54
|
-
def show_page_path_params(page, optional_params={})
|
|
53
|
+
def show_page_path_params(page, optional_params = {})
|
|
55
54
|
raise ArgumentError, 'Page is nil' if page.nil?
|
|
56
55
|
url_params = {urlname: page.urlname}.update(optional_params)
|
|
57
|
-
|
|
56
|
+
prefix_locale? ? url_params.update(locale: page.language_code) : url_params
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
# Returns the path for downloading an alchemy attachment
|
|
@@ -71,6 +70,5 @@ module Alchemy
|
|
|
71
70
|
def full_url_for_element(element)
|
|
72
71
|
"#{current_server}/#{element.page.urlname}##{element_dom_id(element)}"
|
|
73
72
|
end
|
|
74
|
-
|
|
75
73
|
end
|
|
76
74
|
end
|