alchemy_cms 4.0.6 → 4.1.0.beta
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 +1 -0
- data/.gitignore +1 -0
- data/.localeapp/config.rb +8 -0
- data/.rubocop.yml +26 -13
- data/.travis.yml +12 -14
- data/CHANGELOG.md +5 -24
- data/Gemfile +10 -7
- data/README.md +16 -14
- data/Rakefile +1 -1
- data/alchemy_cms.gemspec +6 -7
- data/app/assets/images/alchemy/alchemy-logo.png +0 -0
- data/app/assets/images/alchemy/alchemy-logo.svg +1 -70
- data/app/assets/images/alchemy/favicon.ico +0 -0
- data/app/assets/images/alchemy/icon.svg +1 -14
- data/app/assets/javascripts/alchemy/admin.js +0 -7
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +1 -0
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +19 -6
- data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +2 -7
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +36 -26
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +6 -15
- data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.growler.js.coffee +8 -11
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +4 -1
- data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +5 -14
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +54 -75
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +4 -13
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +1 -0
- data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +12 -6
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +0 -158
- data/app/assets/stylesheets/alchemy/_defaults.scss +0 -2
- data/app/assets/stylesheets/alchemy/_extends.scss +13 -18
- data/app/assets/stylesheets/alchemy/_mixins.scss +72 -46
- data/app/assets/stylesheets/alchemy/_variables.scss +128 -59
- data/app/assets/stylesheets/alchemy/admin.scss +7 -1
- data/app/assets/stylesheets/alchemy/archive.scss +23 -27
- data/app/assets/stylesheets/alchemy/base.scss +5 -355
- data/app/assets/stylesheets/alchemy/buttons.scss +23 -60
- data/app/assets/stylesheets/alchemy/clipboard.scss +26 -0
- data/app/assets/stylesheets/alchemy/dashboard.scss +7 -40
- data/app/assets/stylesheets/alchemy/dialogs.scss +23 -36
- data/app/assets/stylesheets/alchemy/elements.scss +80 -156
- data/app/assets/stylesheets/alchemy/errors.scss +2 -2
- data/app/assets/stylesheets/alchemy/flash.scss +19 -10
- data/app/assets/stylesheets/alchemy/fonts.scss +13 -0
- data/app/assets/stylesheets/alchemy/forms.scss +6 -1
- data/app/assets/stylesheets/alchemy/frame.scss +24 -65
- data/app/assets/stylesheets/alchemy/hints.scss +2 -2
- data/app/assets/stylesheets/alchemy/icons.scss +3 -337
- data/app/assets/stylesheets/alchemy/image_library.scss +9 -10
- data/app/assets/stylesheets/alchemy/jquery-ui.scss +21 -839
- data/app/assets/stylesheets/alchemy/jquery.datetimepicker.scss +32 -57
- data/app/assets/stylesheets/alchemy/lists.scss +4 -8
- data/app/assets/stylesheets/alchemy/menubar.scss +26 -29
- data/app/assets/stylesheets/alchemy/navigation.scss +23 -25
- data/app/assets/stylesheets/alchemy/notices.scss +25 -25
- data/app/assets/stylesheets/alchemy/pagination.scss +12 -7
- data/app/assets/stylesheets/alchemy/preview_window.scss +20 -0
- data/app/assets/stylesheets/alchemy/resource_info.scss +1 -1
- data/app/assets/stylesheets/alchemy/search.scss +19 -15
- data/app/assets/stylesheets/alchemy/selects.scss +63 -32
- data/app/assets/stylesheets/alchemy/sitemap.scss +70 -148
- data/app/assets/stylesheets/alchemy/tables.scss +16 -59
- data/app/assets/stylesheets/alchemy/toolbar.scss +9 -36
- data/app/assets/stylesheets/alchemy/trash.scss +8 -0
- data/app/assets/stylesheets/alchemy/upload.scss +5 -6
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +1 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +78 -43
- data/app/controllers/alchemy/admin/attachments_controller.rb +6 -6
- data/app/controllers/alchemy/admin/base_controller.rb +9 -9
- data/app/controllers/alchemy/admin/contents_controller.rb +0 -17
- data/app/controllers/alchemy/admin/elements_controller.rb +1 -4
- data/app/controllers/alchemy/admin/essence_files_controller.rb +1 -3
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +1 -3
- data/app/controllers/alchemy/admin/languages_controller.rb +1 -1
- data/app/controllers/alchemy/admin/pictures_controller.rb +5 -5
- data/app/controllers/alchemy/admin/resources_controller.rb +10 -10
- data/app/controllers/alchemy/admin/tags_controller.rb +7 -7
- data/app/controllers/alchemy/api/contents_controller.rb +6 -1
- data/app/controllers/alchemy/api/elements_controller.rb +5 -1
- data/app/controllers/alchemy/api/pages_controller.rb +6 -1
- data/app/controllers/alchemy/base_controller.rb +5 -3
- data/app/controllers/alchemy/pages_controller.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +14 -15
- data/app/helpers/alchemy/admin/contents_helper.rb +1 -2
- data/app/helpers/alchemy/admin/elements_helper.rb +7 -6
- data/app/helpers/alchemy/admin/tags_helper.rb +3 -4
- data/app/helpers/alchemy/base_helper.rb +35 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/pages_helper.rb +4 -2
- data/app/models/alchemy/attachment.rb +14 -23
- data/app/models/alchemy/base_record.rb +13 -0
- data/app/models/alchemy/cell.rb +1 -1
- data/app/models/alchemy/content.rb +1 -2
- data/app/models/alchemy/content/factory.rb +1 -1
- data/app/models/alchemy/element.rb +10 -12
- data/app/models/alchemy/essence_boolean.rb +1 -1
- data/app/models/alchemy/essence_date.rb +2 -2
- data/app/models/alchemy/essence_file.rb +1 -1
- data/app/models/alchemy/essence_html.rb +1 -1
- data/app/models/alchemy/essence_link.rb +1 -1
- data/app/models/alchemy/essence_picture.rb +1 -1
- data/app/models/alchemy/essence_richtext.rb +1 -1
- data/app/models/alchemy/essence_select.rb +1 -1
- data/app/models/alchemy/essence_text.rb +1 -1
- data/app/models/alchemy/folded_page.rb +1 -1
- data/app/models/alchemy/language.rb +21 -5
- data/app/models/alchemy/page.rb +17 -5
- data/app/models/alchemy/page/page_elements.rb +14 -2
- data/app/models/alchemy/page/page_naming.rb +17 -4
- data/app/models/alchemy/picture.rb +4 -7
- data/app/models/alchemy/site.rb +3 -3
- data/app/models/alchemy/tag.rb +3 -3
- data/app/models/concerns/alchemy/content_touching.rb +23 -0
- data/app/serializers/alchemy/element_serializer.rb +2 -0
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +11 -21
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +26 -29
- data/app/views/alchemy/admin/attachments/_filter_bar.html.erb +2 -3
- data/app/views/alchemy/admin/attachments/_overlay_file_list.html.erb +3 -4
- data/app/views/alchemy/admin/attachments/_replace_button.html.erb +2 -3
- data/app/views/alchemy/admin/attachments/_tag_list.html.erb +3 -3
- data/app/views/alchemy/admin/attachments/destroy.js.erb +1 -1
- data/app/views/alchemy/admin/attachments/edit.html.erb +2 -2
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
- data/app/views/alchemy/admin/attachments/show.html.erb +7 -8
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +23 -7
- data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/remove.js.erb +2 -2
- data/app/views/alchemy/admin/contents/create.js.erb +1 -1
- data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +9 -6
- data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +6 -4
- data/app/views/alchemy/admin/dashboard/_sites.html.erb +4 -2
- data/app/views/alchemy/admin/dashboard/_users.html.erb +6 -4
- data/app/views/alchemy/admin/dashboard/index.html.erb +3 -3
- data/app/views/alchemy/admin/dashboard/info.html.erb +6 -7
- data/app/views/alchemy/admin/elements/_add_picture.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element_header.html.erb +14 -14
- data/app/views/alchemy/admin/elements/_element_toolbar.html.erb +3 -3
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +2 -3
- data/app/views/alchemy/admin/elements/index.html.erb +2 -4
- data/app/views/alchemy/admin/elements/new.html.erb +1 -2
- data/app/views/alchemy/admin/elements/publish.js.erb +5 -5
- data/app/views/alchemy/admin/languages/_language.html.erb +4 -9
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/languages/index.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +5 -5
- data/app/views/alchemy/admin/layoutpages/index.html.erb +5 -4
- data/app/views/alchemy/admin/leave.html.erb +1 -1
- data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +1 -1
- data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_locked_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +31 -23
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +3 -3
- data/app/views/alchemy/admin/pages/_publication_fields.html.erb +1 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +22 -21
- data/app/views/alchemy/admin/pages/index.html.erb +5 -21
- data/app/views/alchemy/admin/pages/info.html.erb +5 -5
- data/app/views/alchemy/admin/pages/sort.html.erb +1 -1
- data/app/views/alchemy/admin/pages/unlock.js.erb +2 -4
- data/app/views/alchemy/admin/partials/_flash.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +7 -3
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_search_form.html.erb +3 -3
- data/app/views/alchemy/admin/pictures/_archive.html.erb +19 -17
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +13 -13
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +2 -3
- data/app/views/alchemy/admin/pictures/_form.html.erb +3 -3
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +2 -3
- data/app/views/alchemy/admin/pictures/_picture.html.erb +7 -7
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +3 -3
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +6 -7
- data/app/views/alchemy/admin/pictures/index.html.erb +12 -12
- data/app/views/alchemy/admin/pictures/index.js.erb +0 -1
- data/app/views/alchemy/admin/pictures/show.html.erb +9 -9
- data/app/views/alchemy/admin/resources/_filter_bar.html.erb +2 -3
- data/app/views/alchemy/admin/resources/_form.html.erb +10 -2
- data/app/views/alchemy/admin/resources/_resource.html.erb +9 -14
- data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_tag_list.html.erb +4 -4
- data/app/views/alchemy/admin/resources/index.html.erb +2 -3
- data/app/views/alchemy/admin/sites/index.html.erb +1 -1
- data/app/views/alchemy/admin/tags/_tag.html.erb +7 -11
- data/app/views/alchemy/admin/tags/index.html.erb +4 -4
- data/app/views/alchemy/admin/trash/index.html.erb +2 -3
- data/app/views/alchemy/admin/uploader/_button.html.erb +1 -2
- data/app/views/alchemy/base/500.html.erb +1 -1
- data/app/views/alchemy/base/permission_denied.js.erb +1 -1
- data/app/views/alchemy/base/redirect.js.erb +1 -2
- data/app/views/alchemy/elements/_editor_not_found.html.erb +2 -3
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +7 -11
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +9 -7
- data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +1 -1
- data/app/views/alchemy/pages/_meta_data.html.erb +1 -1
- data/app/views/kaminari/alchemy/_first_page.html.erb +7 -3
- data/app/views/kaminari/alchemy/_gap.html.erb +1 -1
- data/app/views/kaminari/alchemy/_last_page.html.erb +7 -3
- data/app/views/kaminari/alchemy/_next_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_page.html.erb +1 -1
- data/app/views/kaminari/alchemy/_prev_page.html.erb +4 -2
- data/app/views/layouts/alchemy/admin.html.erb +8 -6
- data/bin/rails +2 -2
- data/bin/rspec +1 -1
- data/config/alchemy/config.yml +0 -2
- data/config/alchemy/modules.yml +5 -5
- data/config/initializers/simple_form.rb +45 -8
- data/config/locales/alchemy.en.yml +66 -179
- data/config/routes.rb +1 -1
- data/db/migrate/20180226123013_alchemy_four_point_zero.rb +392 -0
- data/db/migrate/20180227224537_migrate_tags_to_gutentag.rb +41 -0
- data/lib/alchemy/config.rb +0 -2
- data/lib/alchemy/engine.rb +5 -9
- data/lib/alchemy/essence.rb +6 -6
- data/lib/alchemy/filetypes.rb +13 -1
- data/lib/alchemy/forms/builder.rb +5 -3
- data/lib/alchemy/i18n.rb +8 -6
- data/lib/alchemy/modules.rb +1 -1
- data/lib/alchemy/name_conversions.rb +0 -2
- data/lib/alchemy/page_layout.rb +3 -2
- data/lib/alchemy/paths.rb +5 -5
- data/lib/alchemy/resource.rb +9 -9
- data/lib/alchemy/resources_helper.rb +11 -15
- data/lib/alchemy/routing_constraints.rb +2 -2
- data/lib/alchemy/shell.rb +0 -1
- data/lib/alchemy/taggable.rb +40 -0
- data/lib/alchemy/tasks/tidy.rb +1 -9
- data/lib/alchemy/test_support/factories/content_factory.rb +10 -0
- data/lib/alchemy/test_support/factories/element_factory.rb +5 -0
- data/lib/alchemy/test_support/shared_contexts.rb +1 -1
- data/lib/alchemy/tinymce.rb +2 -2
- data/lib/alchemy/upgrader/four_point_one.rb +42 -0
- data/lib/alchemy/upgrader/tasks/harden_acts_as_taggable_on_migrations.rb +27 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +2 -3
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +2 -2
- data/lib/rails/generators/alchemy/essence/essence_generator.rb +1 -1
- data/lib/rails/generators/alchemy/install/install_generator.rb +4 -8
- data/lib/rails/generators/alchemy/module/module_generator.rb +1 -1
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -2
- data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +2 -2
- data/lib/rails/generators/alchemy/views/views_generator.rb +1 -1
- data/lib/tasks/alchemy/db.rake +2 -1
- data/lib/tasks/alchemy/tidy.rake +0 -6
- data/lib/tasks/alchemy/upgrade.rake +11 -144
- data/vendor/assets/fonts/fa-regular-400.eot +0 -0
- data/vendor/assets/fonts/fa-regular-400.svg +363 -0
- 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 +1413 -0
- 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/tinymce/license.txt +6 -6
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +2 -15
- data/vendor/assets/stylesheets/fontawesome/_animated.scss +20 -0
- data/vendor/assets/stylesheets/fontawesome/_bordered-pulled.scss +20 -0
- data/vendor/assets/stylesheets/fontawesome/_core.scss +16 -0
- data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +6 -0
- data/vendor/assets/stylesheets/fontawesome/_icons.scss +792 -0
- data/vendor/assets/stylesheets/fontawesome/_larger.scss +23 -0
- data/vendor/assets/stylesheets/fontawesome/_list.scss +18 -0
- data/vendor/assets/stylesheets/fontawesome/_mixins.scss +57 -0
- data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +23 -0
- data/vendor/assets/stylesheets/fontawesome/_screen-reader.scss +5 -0
- data/vendor/assets/stylesheets/fontawesome/_stacked.scss +31 -0
- data/vendor/assets/stylesheets/fontawesome/_variables.scss +805 -0
- data/vendor/assets/stylesheets/fontawesome/fa-regular.scss +22 -0
- data/vendor/assets/stylesheets/fontawesome/fa-solid.scss +23 -0
- data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +16 -0
- metadata +78 -112
- data/app/assets/fonts/alchemy/icons.eot +0 -0
- data/app/assets/fonts/alchemy/icons.svg +0 -33
- 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/images/alchemy/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/sassy-ie-overlay.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +0 -42
- data/app/assets/stylesheets/alchemy/icon-font.scss +0 -75
- data/app/assets/stylesheets/alchemy/modules.scss +0 -27
- data/app/models/alchemy.rb +0 -7
- data/app/views/alchemy/admin/contents/destroy.js.erb +0 -4
- data/app/views/alchemy/admin/pictures/flush.js.erb +0 -2
- data/config/locales/alchemy.de.yml +0 -932
- data/config/locales/alchemy.es.yml +0 -960
- data/config/locales/alchemy.fr.yml +0 -938
- data/config/locales/alchemy.it.yml +0 -938
- data/config/locales/alchemy.nl.yml +0 -918
- data/config/locales/alchemy.ru.yml +0 -830
- data/config/locales/simple_form.de.yml +0 -26
- data/config/locales/simple_form.en.yml +0 -25
- data/config/locales/simple_form.es.yml +0 -6
- data/config/locales/simple_form.fr.yml +0 -26
- data/config/locales/simple_form.it.yml +0 -25
- data/config/locales/simple_form.nl.yml +0 -25
- data/config/locales/simple_form.ru.yml +0 -25
- data/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -378
- data/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +0 -5
- data/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +0 -5
- data/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +0 -5
- data/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +0 -6
- data/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +0 -5
- data/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +0 -7
- data/db/migrate/20160108174834_add_timebased_publishing_columns_to_pages.rb +0 -32
- data/db/migrate/20160422195310_add_image_file_format_to_alchemy_pictures.rb +0 -9
- data/db/migrate/20160617224938_change_alchemy_pages_locked_to_locked_at.rb +0 -22
- data/db/migrate/20160912223112_add_index_to_alchemy_pages_rgt.rb +0 -9
- data/db/migrate/20160927205604_add_foreign_key_indices_and_null_constraints.rb +0 -20
- data/db/migrate/20160928080104_add_foreign_keys.rb +0 -27
- data/lib/alchemy/touching.rb +0 -42
- data/lib/alchemy/upgrader/tasks/available_contents_upgrader.rb +0 -161
- data/lib/alchemy/upgrader/tasks/install_asset_manifests.rb +0 -15
- data/lib/alchemy/upgrader/tasks/install_dragonfly_config.rb +0 -14
- data/lib/alchemy/upgrader/tasks/nestable_elements_migration.rb +0 -71
- data/lib/alchemy/upgrader/tasks/three_point_two_task.rb +0 -31
- data/lib/alchemy/upgrader/three_point_five.rb +0 -32
- data/lib/alchemy/upgrader/three_point_four.rb +0 -52
- data/lib/alchemy/upgrader/three_point_one.rb +0 -54
- data/lib/alchemy/upgrader/three_point_three.rb +0 -50
- data/lib/alchemy/upgrader/three_point_two.rb +0 -40
- data/lib/alchemy/upgrader/three_point_zero.rb +0 -92
- data/vendor/assets/javascripts/jquery_plugins/jquery.floatThead.min.js +0 -3
- data/vendor/assets/javascripts/tinymce/langs/de.js +0 -219
- data/vendor/assets/javascripts/tinymce/langs/es.js +0 -219
- data/vendor/assets/javascripts/tinymce/langs/fr.js +0 -219
- data/vendor/assets/javascripts/tinymce/langs/it.js +0 -219
- data/vendor/assets/javascripts/tinymce/langs/nl.js +0 -219
- data/vendor/assets/javascripts/tinymce/langs/ru.js +0 -219
|
@@ -8,15 +8,15 @@ module Alchemy
|
|
|
8
8
|
helper 'alchemy/admin/tags'
|
|
9
9
|
|
|
10
10
|
def index
|
|
11
|
-
@query = Attachment.ransack(
|
|
11
|
+
@query = Attachment.ransack(search_filter_params[:q])
|
|
12
12
|
@attachments = @query.result
|
|
13
13
|
|
|
14
|
-
if
|
|
15
|
-
@attachments = @attachments.tagged_with(
|
|
14
|
+
if search_filter_params[:tagged_with].present?
|
|
15
|
+
@attachments = @attachments.tagged_with(search_filter_params[:tagged_with])
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
if
|
|
19
|
-
@attachments = @attachments.with_file_type(
|
|
18
|
+
if search_filter_params[:file_type].present?
|
|
19
|
+
@attachments = @attachments.with_file_type(search_filter_params[:file_type])
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
@attachments = @attachments
|
|
@@ -69,7 +69,7 @@ module Alchemy
|
|
|
69
69
|
private
|
|
70
70
|
|
|
71
71
|
def search_filter_params
|
|
72
|
-
params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:attachment]).permit(
|
|
72
|
+
@_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:attachment]).permit(
|
|
73
73
|
*common_search_filter_includes + [
|
|
74
74
|
:file_type,
|
|
75
75
|
:content_id
|
|
@@ -39,20 +39,20 @@ module Alchemy
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Handles exceptions
|
|
42
|
-
def exception_handler(
|
|
43
|
-
exception_logger(
|
|
44
|
-
show_error_notice(
|
|
42
|
+
def exception_handler(error)
|
|
43
|
+
exception_logger(error)
|
|
44
|
+
show_error_notice(error)
|
|
45
45
|
if defined?(Airbrake)
|
|
46
|
-
notify_airbrake(
|
|
46
|
+
notify_airbrake(error) unless Rails.env.development? || Rails.env.test?
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Displays an error notice in the Alchemy backend.
|
|
51
|
-
def show_error_notice(
|
|
52
|
-
@error =
|
|
51
|
+
def show_error_notice(error)
|
|
52
|
+
@error = error
|
|
53
53
|
# truncate the message, because very long error messages (i.e from mysql2) causes cookie overflow errors
|
|
54
|
-
@notice =
|
|
55
|
-
@trace =
|
|
54
|
+
@notice = error.message[0..255]
|
|
55
|
+
@trace = error.backtrace[0..50]
|
|
56
56
|
if request.xhr?
|
|
57
57
|
render action: "error_notice"
|
|
58
58
|
else
|
|
@@ -112,7 +112,7 @@ module Alchemy
|
|
|
112
112
|
def per_page_value_for_screen_size
|
|
113
113
|
return 25 if session[:screen_size].blank?
|
|
114
114
|
screen_height = session[:screen_size].split('x').last.to_i
|
|
115
|
-
(screen_height /
|
|
115
|
+
(screen_height / 50) - 12
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
# Does redirects for html and js requests
|
|
@@ -7,11 +7,6 @@ module Alchemy
|
|
|
7
7
|
|
|
8
8
|
authorize_resource class: Alchemy::Content
|
|
9
9
|
|
|
10
|
-
def new
|
|
11
|
-
@element = Element.find(params[:element_id])
|
|
12
|
-
@content = @element.contents.build
|
|
13
|
-
end
|
|
14
|
-
|
|
15
10
|
def create
|
|
16
11
|
@element = Element.find(params[:content][:element_id])
|
|
17
12
|
@content = Content.create_from_scratch(@element, content_params)
|
|
@@ -26,11 +21,6 @@ module Alchemy
|
|
|
26
21
|
end
|
|
27
22
|
end
|
|
28
23
|
|
|
29
|
-
def update
|
|
30
|
-
@content = Content.find(params[:id])
|
|
31
|
-
@content.update_essence(content_params)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
24
|
def order
|
|
35
25
|
Content.transaction do
|
|
36
26
|
params[:content_ids].each_with_index do |id, idx|
|
|
@@ -40,13 +30,6 @@ module Alchemy
|
|
|
40
30
|
@notice = Alchemy.t("Successfully saved content position")
|
|
41
31
|
end
|
|
42
32
|
|
|
43
|
-
def destroy
|
|
44
|
-
@content = Content.find(params[:id])
|
|
45
|
-
@content_dom_id = @content.dom_id
|
|
46
|
-
@notice = Alchemy.t("Successfully deleted content", content: @content.name_for_label)
|
|
47
|
-
@content.destroy
|
|
48
|
-
end
|
|
49
|
-
|
|
50
33
|
private
|
|
51
34
|
|
|
52
35
|
def content_params
|
|
@@ -147,10 +147,7 @@ module Alchemy
|
|
|
147
147
|
|
|
148
148
|
def paste_element_from_clipboard
|
|
149
149
|
@source_element = Element.find(element_from_clipboard['id'])
|
|
150
|
-
new_attributes = {
|
|
151
|
-
parent_element_id: create_element_params[:parent_element_id],
|
|
152
|
-
page_id: @page.id
|
|
153
|
-
}
|
|
150
|
+
new_attributes = {page_id: @page.id}
|
|
154
151
|
if @page.can_have_cells?
|
|
155
152
|
new_attributes = new_attributes.merge({cell_id: find_or_create_cell.try(:id)})
|
|
156
153
|
end
|
|
@@ -28,9 +28,7 @@ module Alchemy
|
|
|
28
28
|
|
|
29
29
|
# We need to update timestamp here because we don't save yet,
|
|
30
30
|
# but the cache needs to be get invalid.
|
|
31
|
-
|
|
32
|
-
# also the element and page timestamps what we don't want yet.
|
|
33
|
-
@content.update_column(:updated_at, Time.current)
|
|
31
|
+
@content.touch
|
|
34
32
|
end
|
|
35
33
|
|
|
36
34
|
private
|
|
@@ -47,9 +47,7 @@ module Alchemy
|
|
|
47
47
|
|
|
48
48
|
# We need to update timestamp here because we don't save yet,
|
|
49
49
|
# but the cache needs to be get invalid.
|
|
50
|
-
|
|
51
|
-
# also the element and page timestamps what we don't want yet.
|
|
52
|
-
@content.update_column(:updated_at, Time.current)
|
|
50
|
+
@content.touch
|
|
53
51
|
end
|
|
54
52
|
|
|
55
53
|
def destroy
|
|
@@ -4,7 +4,7 @@ module Alchemy
|
|
|
4
4
|
module Admin
|
|
5
5
|
class LanguagesController < ResourcesController
|
|
6
6
|
def index
|
|
7
|
-
@query = Language.on_current_site.ransack(
|
|
7
|
+
@query = Language.on_current_site.ransack(search_filter_params[:q])
|
|
8
8
|
@languages = @query.result.page(params[:page] || 1).per(per_page_value_for_screen_size)
|
|
9
9
|
end
|
|
10
10
|
|
|
@@ -14,8 +14,8 @@ module Alchemy
|
|
|
14
14
|
|
|
15
15
|
def index
|
|
16
16
|
@size = params[:size].present? ? params[:size] : 'medium'
|
|
17
|
-
@query = Picture.ransack(
|
|
18
|
-
@pictures = Picture.search_by(
|
|
17
|
+
@query = Picture.ransack(search_filter_params[:q])
|
|
18
|
+
@pictures = Picture.search_by(search_filter_params, @query, pictures_per_page_for_size(@size))
|
|
19
19
|
|
|
20
20
|
if in_overlay?
|
|
21
21
|
archive_overlay
|
|
@@ -92,7 +92,7 @@ module Alchemy
|
|
|
92
92
|
else
|
|
93
93
|
flash[:warn] = Alchemy.t("Could not delete Pictures")
|
|
94
94
|
end
|
|
95
|
-
rescue => e
|
|
95
|
+
rescue StandardError => e
|
|
96
96
|
flash[:error] = e.message
|
|
97
97
|
ensure
|
|
98
98
|
redirect_to_index
|
|
@@ -102,7 +102,7 @@ module Alchemy
|
|
|
102
102
|
name = @picture.name
|
|
103
103
|
@picture.destroy
|
|
104
104
|
flash[:notice] = Alchemy.t("Picture deleted successfully", name: name)
|
|
105
|
-
rescue => e
|
|
105
|
+
rescue StandardError => e
|
|
106
106
|
flash[:error] = e.message
|
|
107
107
|
ensure
|
|
108
108
|
redirect_to_index
|
|
@@ -141,7 +141,7 @@ module Alchemy
|
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
def search_filter_params
|
|
144
|
-
params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:picture_ids]).permit(
|
|
144
|
+
@_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES + [:picture_ids]).permit(
|
|
145
145
|
*common_search_filter_includes + [
|
|
146
146
|
:size,
|
|
147
147
|
:element_id,
|
|
@@ -7,7 +7,7 @@ require 'alchemy/resources_helper'
|
|
|
7
7
|
module Alchemy
|
|
8
8
|
module Admin
|
|
9
9
|
class ResourcesController < Alchemy::Admin::BaseController
|
|
10
|
-
COMMON_SEARCH_FILTER_EXCLUDES = [:id, :utf8, :_method, :_].freeze
|
|
10
|
+
COMMON_SEARCH_FILTER_EXCLUDES = [:id, :utf8, :_method, :_, :format].freeze
|
|
11
11
|
|
|
12
12
|
include Alchemy::ResourcesHelper
|
|
13
13
|
|
|
@@ -20,18 +20,18 @@ module Alchemy
|
|
|
20
20
|
before_action :authorize_resource
|
|
21
21
|
|
|
22
22
|
def index
|
|
23
|
-
@query = resource_handler.model.ransack(
|
|
23
|
+
@query = resource_handler.model.ransack(search_filter_params[:q])
|
|
24
24
|
items = @query.result
|
|
25
25
|
|
|
26
26
|
if contains_relations?
|
|
27
27
|
items = items.includes(*resource_relations_names)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
if
|
|
31
|
-
items = items.tagged_with(
|
|
30
|
+
if search_filter_params[:tagged_with].present?
|
|
31
|
+
items = items.tagged_with(search_filter_params[:tagged_with])
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
if
|
|
34
|
+
if search_filter_params[:filter].present?
|
|
35
35
|
items = items.public_send(sanitized_filter_params)
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -61,7 +61,7 @@ module Alchemy
|
|
|
61
61
|
resource_instance_variable.save
|
|
62
62
|
render_errors_or_redirect(
|
|
63
63
|
resource_instance_variable,
|
|
64
|
-
resources_path(
|
|
64
|
+
resources_path(resource_instance_variable.class, search_filter_params),
|
|
65
65
|
flash_notice_for_resource_action
|
|
66
66
|
)
|
|
67
67
|
end
|
|
@@ -70,7 +70,7 @@ module Alchemy
|
|
|
70
70
|
resource_instance_variable.update_attributes(resource_params)
|
|
71
71
|
render_errors_or_redirect(
|
|
72
72
|
resource_instance_variable,
|
|
73
|
-
resources_path(
|
|
73
|
+
resources_path(resource_instance_variable.class, search_filter_params),
|
|
74
74
|
flash_notice_for_resource_action
|
|
75
75
|
)
|
|
76
76
|
end
|
|
@@ -78,7 +78,7 @@ module Alchemy
|
|
|
78
78
|
def destroy
|
|
79
79
|
resource_instance_variable.destroy
|
|
80
80
|
flash_notice_for_resource_action
|
|
81
|
-
do_redirect_to resource_url_proxy.url_for(
|
|
81
|
+
do_redirect_to resource_url_proxy.url_for(search_filter_params.merge(action: 'index'))
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def resource_handler
|
|
@@ -132,12 +132,12 @@ module Alchemy
|
|
|
132
132
|
|
|
133
133
|
def sanitized_filter_params
|
|
134
134
|
resource_model.alchemy_resource_filters.detect do |filter|
|
|
135
|
-
filter ==
|
|
135
|
+
filter == search_filter_params[:filter]
|
|
136
136
|
end || :all
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
def search_filter_params
|
|
140
|
-
params.except(*COMMON_SEARCH_FILTER_EXCLUDES).permit(*common_search_filter_includes)
|
|
140
|
+
@_search_filter_params ||= params.except(*COMMON_SEARCH_FILTER_EXCLUDES).permit(*common_search_filter_includes).to_h
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
def common_search_filter_includes
|
|
@@ -6,7 +6,7 @@ module Alchemy
|
|
|
6
6
|
before_action :load_tag, only: [:edit, :update, :destroy]
|
|
7
7
|
|
|
8
8
|
def index
|
|
9
|
-
@query =
|
|
9
|
+
@query = Gutentag::Tag.ransack(search_filter_params[:q])
|
|
10
10
|
@tags = @query
|
|
11
11
|
.result
|
|
12
12
|
.page(params[:page] || 1)
|
|
@@ -15,21 +15,21 @@ module Alchemy
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def new
|
|
18
|
-
@tag =
|
|
18
|
+
@tag = Gutentag::Tag.new
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def create
|
|
22
|
-
@tag =
|
|
22
|
+
@tag = Gutentag::Tag.create(tag_params)
|
|
23
23
|
render_errors_or_redirect @tag, admin_tags_path, Alchemy.t('New Tag Created')
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def edit
|
|
27
|
-
@tags =
|
|
27
|
+
@tags = Gutentag::Tag.order("name ASC").to_a - [@tag]
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def update
|
|
31
31
|
if tag_params[:merge_to]
|
|
32
|
-
@new_tag =
|
|
32
|
+
@new_tag = Gutentag::Tag.find(tag_params[:merge_to])
|
|
33
33
|
Tag.replace(@tag, @new_tag)
|
|
34
34
|
operation_text = Alchemy.t('Replaced Tag') % {old_tag: @tag.name, new_tag: @new_tag.name}
|
|
35
35
|
@tag.destroy
|
|
@@ -57,7 +57,7 @@ module Alchemy
|
|
|
57
57
|
private
|
|
58
58
|
|
|
59
59
|
def load_tag
|
|
60
|
-
@tag =
|
|
60
|
+
@tag = Gutentag::Tag.find(params[:id])
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def tag_params
|
|
@@ -66,7 +66,7 @@ module Alchemy
|
|
|
66
66
|
|
|
67
67
|
def tags_from_term(term)
|
|
68
68
|
return [] if term.blank?
|
|
69
|
-
|
|
69
|
+
Gutentag::Tag.where(['LOWER(name) LIKE ?', "#{term.downcase}%"])
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def json_for_autocomplete(items, attribute)
|
|
@@ -7,7 +7,12 @@ module Alchemy
|
|
|
7
7
|
# You can either load all or only these for :element_id param
|
|
8
8
|
#
|
|
9
9
|
def index
|
|
10
|
-
|
|
10
|
+
# Fix for cancancan not able to merge multiple AR scopes for logged in users
|
|
11
|
+
if can? :manage, Alchemy::Content
|
|
12
|
+
@contents = Content.all
|
|
13
|
+
else
|
|
14
|
+
@contents = Content.accessible_by(current_ability, :index)
|
|
15
|
+
end
|
|
11
16
|
if params[:element_id].present?
|
|
12
17
|
@contents = @contents.where(element_id: params[:element_id])
|
|
13
18
|
end
|
|
@@ -9,7 +9,11 @@ module Alchemy
|
|
|
9
9
|
# If you want to only load a specific type of element pass ?named=an_element_name
|
|
10
10
|
#
|
|
11
11
|
def index
|
|
12
|
-
@elements = Element.
|
|
12
|
+
@elements = Element.not_nested
|
|
13
|
+
# Fix for cancancan not able to merge multiple AR scopes for logged in users
|
|
14
|
+
if cannot? :manage, Alchemy::Element
|
|
15
|
+
@elements = @elements.accessible_by(current_ability, :index)
|
|
16
|
+
end
|
|
13
17
|
if params[:page_id].present?
|
|
14
18
|
@elements = @elements.where(page_id: params[:page_id])
|
|
15
19
|
end
|
|
@@ -7,7 +7,12 @@ module Alchemy
|
|
|
7
7
|
# Returns all pages as json object
|
|
8
8
|
#
|
|
9
9
|
def index
|
|
10
|
-
|
|
10
|
+
# Fix for cancancan not able to merge multiple AR scopes for logged in users
|
|
11
|
+
if can? :edit_content, Alchemy::Page
|
|
12
|
+
@pages = Page.all
|
|
13
|
+
else
|
|
14
|
+
@pages = Page.accessible_by(current_ability, :index)
|
|
15
|
+
end
|
|
11
16
|
if params[:page_layout].present?
|
|
12
17
|
@pages = @pages.where(page_layout: params[:page_layout])
|
|
13
18
|
end
|
|
@@ -95,9 +95,11 @@ module Alchemy
|
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
# Logs the current exception to the error log.
|
|
98
|
-
def exception_logger(
|
|
99
|
-
Rails.logger.error("\n#{
|
|
100
|
-
Rails.logger.error(
|
|
98
|
+
def exception_logger(error)
|
|
99
|
+
Rails.logger.error("\n#{error.class} #{error.message} in #{error.backtrace.first}")
|
|
100
|
+
Rails.logger.error(error.backtrace[1..50].each { |line|
|
|
101
|
+
line.gsub(/#{Rails.root.to_s}/, '')
|
|
102
|
+
}.join("\n"))
|
|
101
103
|
end
|
|
102
104
|
end
|
|
103
105
|
end
|
|
@@ -156,7 +156,7 @@ module Alchemy
|
|
|
156
156
|
|
|
157
157
|
def set_expiration_headers
|
|
158
158
|
if @page.cache_page?
|
|
159
|
-
expires_in @page.expiration_time, public: !@page.restricted
|
|
159
|
+
expires_in @page.expiration_time, public: !@page.restricted
|
|
160
160
|
else
|
|
161
161
|
expires_now
|
|
162
162
|
end
|
|
@@ -105,7 +105,7 @@ module Alchemy
|
|
|
105
105
|
content_tag(:div, class: 'js_filter_field_box') do
|
|
106
106
|
concat text_field_tag(nil, nil, options)
|
|
107
107
|
concat render_icon(:search)
|
|
108
|
-
concat link_to('', '', class: 'js_filter_field_clear', title: Alchemy.t(:click_to_show_all))
|
|
108
|
+
concat link_to(render_icon(:times, size: 'xs'), '', class: 'js_filter_field_clear', title: Alchemy.t(:click_to_show_all))
|
|
109
109
|
concat content_tag(:label, Alchemy.t(:search), for: options[:id])
|
|
110
110
|
end
|
|
111
111
|
end
|
|
@@ -191,7 +191,7 @@ module Alchemy
|
|
|
191
191
|
options = {
|
|
192
192
|
title: Alchemy.t('Delete'),
|
|
193
193
|
message: Alchemy.t('Are you sure?'),
|
|
194
|
-
icon:
|
|
194
|
+
icon: :minus
|
|
195
195
|
}.merge(options)
|
|
196
196
|
button_with_confirm(
|
|
197
197
|
render_icon(options[:icon]),
|
|
@@ -227,7 +227,7 @@ module Alchemy
|
|
|
227
227
|
# == Example
|
|
228
228
|
#
|
|
229
229
|
# <%= toolbar_button(
|
|
230
|
-
# icon:
|
|
230
|
+
# icon: :plus,
|
|
231
231
|
# label: 'Create',
|
|
232
232
|
# url: new_resource_path,
|
|
233
233
|
# title: 'Create Resource',
|
|
@@ -267,7 +267,7 @@ module Alchemy
|
|
|
267
267
|
active: false,
|
|
268
268
|
link_options: {},
|
|
269
269
|
dialog_options: {},
|
|
270
|
-
loading_indicator:
|
|
270
|
+
loading_indicator: false
|
|
271
271
|
}.merge(options.symbolize_keys)
|
|
272
272
|
button = render(
|
|
273
273
|
'alchemy/admin/partials/toolbar_button',
|
|
@@ -288,7 +288,7 @@ module Alchemy
|
|
|
288
288
|
# <% toolbar(
|
|
289
289
|
# buttons: [
|
|
290
290
|
# {
|
|
291
|
-
# icon:
|
|
291
|
+
# icon: :plus,
|
|
292
292
|
# label: label_title,
|
|
293
293
|
# url: new_resource_path,
|
|
294
294
|
# title: label_title,
|
|
@@ -374,7 +374,7 @@ module Alchemy
|
|
|
374
374
|
type = html_options.delete(:type) || 'date'
|
|
375
375
|
date = html_options.delete(:value) || object.send(method.to_sym).presence
|
|
376
376
|
date = Time.zone.parse(date) if date.is_a?(String)
|
|
377
|
-
value = date ? l(date, format: "
|
|
377
|
+
value = date ? l(date, format: "alchemy.#{type}picker".to_sym) : nil
|
|
378
378
|
|
|
379
379
|
text_field object.class.name.demodulize.underscore.to_sym,
|
|
380
380
|
method.to_sym, {type: "text", class: type, "data-datepicker-type" => type, value: value}.merge(html_options)
|
|
@@ -385,7 +385,7 @@ module Alchemy
|
|
|
385
385
|
def render_hint_for(element)
|
|
386
386
|
return unless element.has_hint?
|
|
387
387
|
content_tag :span, class: 'hint-with-icon' do
|
|
388
|
-
render_icon(
|
|
388
|
+
render_icon('question-circle') +
|
|
389
389
|
content_tag(:span, element.hint.html_safe, class: 'hint-bubble')
|
|
390
390
|
end
|
|
391
391
|
end
|
|
@@ -421,15 +421,15 @@ module Alchemy
|
|
|
421
421
|
#
|
|
422
422
|
# == Example
|
|
423
423
|
#
|
|
424
|
-
# <%= hint_with_tooltip('Page layout is missing',
|
|
424
|
+
# <%= hint_with_tooltip('Page layout is missing', icon: 'info') %>
|
|
425
425
|
#
|
|
426
426
|
# @param text [String] - The text displayed in the tooltip
|
|
427
|
-
# @param
|
|
427
|
+
# @param icon: 'exclamation-triangle' [String] - Icon name
|
|
428
428
|
#
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
content_tag :span,
|
|
432
|
-
content_tag(:span, text, class: 'hint-bubble')
|
|
429
|
+
# @return [String]
|
|
430
|
+
def hint_with_tooltip(text, icon: 'exclamation-triangle')
|
|
431
|
+
content_tag :span, class: 'hint-with-icon' do
|
|
432
|
+
render_icon(icon) + content_tag(:span, text, class: 'hint-bubble')
|
|
433
433
|
end
|
|
434
434
|
end
|
|
435
435
|
|
|
@@ -437,8 +437,7 @@ module Alchemy
|
|
|
437
437
|
# that explains the user that the page layout is missing
|
|
438
438
|
def page_layout_missing_warning
|
|
439
439
|
hint_with_tooltip(
|
|
440
|
-
Alchemy.t(:page_definition_missing)
|
|
441
|
-
class: 'inline warning icon'
|
|
440
|
+
Alchemy.t(:page_definition_missing)
|
|
442
441
|
)
|
|
443
442
|
end
|
|
444
443
|
|