alchemy_cms 7.0.8 → 7.1.0.pre.b2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +162 -0
- data/Gemfile +9 -11
- data/README.md +11 -9
- data/alchemy_cms.gemspec +4 -3
- data/app/assets/config/alchemy_manifest.js +3 -5
- data/app/assets/images/alchemy/missing-image.svg +1 -1
- data/app/assets/javascripts/alchemy/admin.js +1 -23
- data/app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee +2 -3
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +19 -34
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +38 -13
- data/app/assets/javascripts/alchemy/alchemy.file_progress.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.fixed_elements.js +32 -25
- data/app/assets/javascripts/alchemy/alchemy.growler.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.image_overlay.coffee +3 -5
- data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +0 -57
- data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +24 -65
- data/app/assets/javascripts/alchemy/alchemy.list_filter.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +5 -4
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +5 -5
- data/app/assets/javascripts/alchemy/templates/index.js +0 -2
- data/app/assets/javascripts/alchemy/templates/node_folder.hbs +1 -1
- data/app/assets/javascripts/alchemy/templates/page.hbs +1 -1
- data/app/assets/javascripts/alchemy/templates/page_folder.hbs +2 -2
- data/app/assets/javascripts/tinymce/icons/remixicons/icons.js +93 -0
- data/app/assets/javascripts/tinymce/plugins/alchemy_link/plugin.min.js +37 -18
- data/app/assets/stylesheets/alchemy/_custom-properties.scss +82 -0
- data/app/assets/stylesheets/alchemy/_mixins.scss +38 -30
- data/app/assets/stylesheets/alchemy/_variables.scss +23 -8
- data/app/assets/stylesheets/alchemy/admin.scss +3 -4
- data/app/assets/stylesheets/alchemy/archive.scss +110 -50
- data/app/assets/stylesheets/alchemy/attachments.scss +5 -4
- data/app/assets/stylesheets/alchemy/buttons.scss +41 -166
- data/app/assets/stylesheets/alchemy/dashboard.scss +31 -6
- data/app/assets/stylesheets/alchemy/dialogs.scss +12 -28
- data/app/assets/stylesheets/alchemy/elements.scss +272 -282
- data/app/assets/stylesheets/alchemy/flash.scss +20 -12
- data/app/assets/stylesheets/alchemy/forms.scss +21 -34
- data/app/assets/stylesheets/alchemy/frame.scss +11 -32
- data/app/assets/stylesheets/alchemy/hints.scss +4 -62
- data/app/assets/stylesheets/alchemy/image_library.scss +36 -33
- data/app/assets/stylesheets/alchemy/menubar.scss +7 -6
- data/app/assets/stylesheets/alchemy/navigation.scss +27 -15
- data/app/assets/stylesheets/alchemy/nodes.scss +11 -7
- data/app/assets/stylesheets/alchemy/notices.scss +16 -4
- data/app/assets/stylesheets/alchemy/page-select.scss +10 -2
- data/app/assets/stylesheets/alchemy/pagination.scss +22 -13
- data/app/assets/stylesheets/alchemy/resource_info.scss +7 -5
- data/app/assets/stylesheets/alchemy/selects.scss +49 -42
- data/app/assets/stylesheets/alchemy/shoelace.scss +345 -0
- data/app/assets/stylesheets/alchemy/sitemap.scss +24 -14
- data/app/assets/stylesheets/alchemy/spinner.scss +9 -19
- data/app/assets/stylesheets/alchemy/tables.scss +16 -24
- data/app/assets/stylesheets/alchemy/tags.scss +4 -0
- data/app/assets/stylesheets/alchemy/toolbar.scss +29 -25
- data/app/assets/stylesheets/alchemy/upload.scss +140 -89
- data/app/assets/stylesheets/tinymce/skins/content/alchemy/content.min.scss +69 -0
- data/app/assets/stylesheets/tinymce/skins/skintool.json +38 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.css +711 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.css +705 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.inline.min.css +7 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.min.css +7 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.css +29 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/content.mobile.min.css +7 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/fonts/tinymce-mobile.woff +0 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.min.scss +3798 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.css +677 -0
- data/app/assets/stylesheets/tinymce/skins/ui/alchemy/skin.mobile.min.css +7 -0
- data/app/components/alchemy/admin/node_select.rb +39 -0
- data/app/components/alchemy/admin/page_select.rb +42 -0
- data/app/controllers/alchemy/admin/base_controller.rb +5 -6
- data/app/controllers/alchemy/admin/elements_controller.rb +63 -35
- data/app/controllers/alchemy/admin/pages_controller.rb +9 -4
- data/app/controllers/alchemy/base_controller.rb +4 -2
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
- data/app/controllers/concerns/alchemy/site_redirects.rb +1 -1
- data/app/decorators/alchemy/element_editor.rb +0 -2
- data/app/helpers/alchemy/admin/attachments_helper.rb +6 -5
- data/app/helpers/alchemy/admin/base_helper.rb +17 -12
- data/app/helpers/alchemy/admin/ingredients_helper.rb +4 -1
- data/app/helpers/alchemy/admin/pages_helper.rb +5 -11
- data/app/helpers/alchemy/base_helper.rb +47 -13
- data/app/javascript/alchemy_admin/clipboard.js +16 -0
- data/app/javascript/alchemy_admin/components/alchemy_html_element.js +129 -0
- data/app/javascript/alchemy_admin/components/button.js +59 -0
- data/app/javascript/alchemy_admin/components/char_counter.js +40 -0
- data/app/javascript/alchemy_admin/components/datepicker.js +39 -0
- data/app/javascript/alchemy_admin/components/dialog_link.js +45 -0
- data/app/javascript/alchemy_admin/components/element_editor/publish_element_button.js +36 -0
- data/app/javascript/alchemy_admin/components/element_editor.js +553 -0
- data/app/javascript/alchemy_admin/components/ingredient_group.js +54 -0
- data/app/javascript/alchemy_admin/components/link_buttons/link_button.js +48 -0
- data/app/javascript/alchemy_admin/components/link_buttons/unlink_button.js +38 -0
- data/app/javascript/alchemy_admin/components/link_buttons.js +79 -0
- data/app/javascript/alchemy_admin/components/node_select.js +45 -0
- data/app/javascript/alchemy_admin/components/overlay.js +18 -0
- data/app/javascript/alchemy_admin/components/page_select.js +63 -0
- data/app/javascript/alchemy_admin/components/remote_select.js +134 -0
- data/app/javascript/alchemy_admin/components/select.js +12 -0
- data/app/javascript/alchemy_admin/components/spinner.js +31 -0
- data/app/javascript/alchemy_admin/components/tinymce.js +134 -0
- data/app/javascript/alchemy_admin/components/uploader/file_upload.js +266 -0
- data/app/javascript/alchemy_admin/components/uploader/progress.js +258 -0
- data/app/javascript/alchemy_admin/components/uploader.js +132 -0
- data/app/javascript/alchemy_admin/dirty.js +49 -0
- data/app/javascript/alchemy_admin/file_editors.js +1 -1
- data/app/javascript/alchemy_admin/gui.js +14 -0
- data/app/javascript/alchemy_admin/i18n.js +12 -8
- data/app/javascript/alchemy_admin/image_cropper.js +6 -3
- data/app/javascript/alchemy_admin/image_loader.js +7 -15
- data/app/javascript/alchemy_admin/ingredient_anchor_link.js +2 -5
- data/app/javascript/alchemy_admin/initializer.js +65 -0
- data/app/javascript/alchemy_admin/locales/en.js +31 -0
- data/app/javascript/alchemy_admin/picture_editors.js +6 -4
- data/app/javascript/alchemy_admin/picture_selector.js +38 -0
- data/app/javascript/alchemy_admin/please_wait_overlay.js +8 -0
- data/app/javascript/alchemy_admin/sortable_elements.js +78 -0
- data/app/javascript/alchemy_admin/spinner.js +36 -0
- data/app/javascript/alchemy_admin/tags_autocomplete.js +46 -0
- data/app/javascript/alchemy_admin/utils/ajax.js +6 -5
- data/app/javascript/alchemy_admin/utils/debounce.js +10 -0
- data/app/javascript/alchemy_admin/utils/dom_helpers.js +20 -0
- data/app/javascript/alchemy_admin/utils/format.js +11 -0
- data/app/javascript/alchemy_admin/utils/max.js +3 -0
- data/app/javascript/alchemy_admin/utils/string_conversions.js +10 -0
- data/app/javascript/alchemy_admin.js +64 -13
- data/app/javascript/menubar.js +10 -0
- data/app/models/alchemy/attachment.rb +9 -11
- data/app/models/alchemy/element.rb +11 -0
- data/app/models/alchemy/ingredients/richtext.rb +1 -10
- data/app/models/alchemy/node.rb +4 -0
- data/app/models/alchemy/page/page_naming.rb +7 -0
- data/app/models/alchemy/page/page_natures.rb +10 -2
- data/app/models/alchemy/page.rb +11 -51
- data/app/models/alchemy/picture/url.rb +1 -9
- data/app/models/alchemy/picture_variant.rb +11 -2
- data/app/models/concerns/alchemy/picture_thumbnails.rb +1 -1
- data/app/serializers/alchemy/page_tree_serializer.rb +2 -1
- data/app/services/alchemy/copy_page.rb +98 -0
- data/app/views/alchemy/_menubar.html.erb +17 -13
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +14 -10
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +44 -36
- data/app/views/alchemy/admin/attachments/_replace_button.html.erb +15 -21
- data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -1
- data/app/views/alchemy/admin/attachments/assign.js.erb +1 -1
- data/app/views/alchemy/admin/attachments/index.html.erb +6 -4
- data/app/views/alchemy/admin/attachments/show.html.erb +10 -23
- data/app/views/alchemy/admin/clipboard/clear.js.erb +1 -1
- data/app/views/alchemy/admin/clipboard/index.html.erb +3 -7
- data/app/views/alchemy/admin/clipboard/insert.js.erb +1 -1
- data/app/views/alchemy/admin/crop.html.erb +1 -1
- data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +1 -1
- data/app/views/alchemy/admin/dashboard/index.html.erb +13 -11
- data/app/views/alchemy/admin/dashboard/info.html.erb +7 -7
- data/app/views/alchemy/admin/elements/_add_nested_element_form.html.erb +21 -23
- data/app/views/alchemy/admin/elements/_element.html.erb +52 -44
- data/app/views/alchemy/admin/elements/_footer.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_header.html.erb +11 -12
- data/app/views/alchemy/admin/elements/_toolbar.html.erb +33 -45
- data/app/views/alchemy/admin/elements/create.js.erb +7 -15
- data/app/views/alchemy/admin/elements/destroy.js.erb +0 -2
- data/app/views/alchemy/admin/elements/index.html.erb +27 -24
- data/app/views/alchemy/admin/elements/new.html.erb +9 -11
- data/app/views/alchemy/admin/ingredients/_file_fields.html.erb +2 -2
- data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +3 -3
- data/app/views/alchemy/admin/ingredients/_video_fields.html.erb +1 -2
- data/app/views/alchemy/admin/languages/_form.html.erb +2 -3
- data/app/views/alchemy/admin/languages/_language.html.erb +15 -8
- data/app/views/alchemy/admin/languages/_table.html.erb +1 -0
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +28 -16
- data/app/views/alchemy/admin/layoutpages/index.html.erb +2 -2
- data/app/views/alchemy/admin/legacy_page_urls/_legacy_page_url.html.erb +12 -8
- data/app/views/alchemy/admin/legacy_page_urls/_new.html.erb +1 -1
- data/app/views/alchemy/admin/nodes/_form.html.erb +20 -21
- data/app/views/alchemy/admin/nodes/_node.html.erb +39 -34
- data/app/views/alchemy/admin/nodes/index.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_anchor_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +2 -2
- data/app/views/alchemy/admin/pages/_current_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_external_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_file_link.html.erb +5 -5
- data/app/views/alchemy/admin/pages/_form.html.erb +10 -21
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +4 -4
- data/app/views/alchemy/admin/pages/_locked_page.html.erb +2 -2
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +4 -17
- data/app/views/alchemy/admin/pages/_page.html.erb +76 -72
- data/app/views/alchemy/admin/pages/_page_infos.html.erb +23 -7
- data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +2 -1
- data/app/views/alchemy/admin/pages/_page_status.html.erb +11 -21
- data/app/views/alchemy/admin/pages/_publication_fields.html.erb +2 -5
- data/app/views/alchemy/admin/pages/_table.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_table_row.html.erb +43 -39
- data/app/views/alchemy/admin/pages/_toolbar.html.erb +43 -38
- data/app/views/alchemy/admin/pages/configure.html.erb +12 -14
- data/app/views/alchemy/admin/pages/edit.html.erb +80 -103
- data/app/views/alchemy/admin/pages/info.html.erb +20 -11
- data/app/views/alchemy/admin/pages/link.html.erb +22 -16
- data/app/views/alchemy/admin/pages/new.html.erb +9 -11
- data/app/views/alchemy/admin/pages/unlock.js.erb +10 -3
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -13
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +3 -5
- data/app/views/alchemy/admin/partials/_routes.html.erb +10 -2
- data/app/views/alchemy/admin/partials/_site_select.html.erb +6 -5
- data/app/views/alchemy/admin/partials/_toolbar_button.html.erb +28 -23
- data/app/views/alchemy/admin/pictures/_archive.html.erb +5 -5
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -23
- data/app/views/alchemy/admin/pictures/_infos.html.erb +2 -6
- data/app/views/alchemy/admin/pictures/_picture.html.erb +17 -21
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +17 -16
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/assign.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/index.html.erb +34 -30
- data/app/views/alchemy/admin/pictures/show.html.erb +3 -3
- data/app/views/alchemy/admin/resources/_filter.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_form.html.erb +2 -2
- data/app/views/alchemy/admin/resources/_per_page_select.html.erb +1 -1
- data/app/views/alchemy/admin/resources/_resource.html.erb +16 -9
- data/app/views/alchemy/admin/resources/_table.html.erb +4 -1
- data/app/views/alchemy/admin/resources/index.html.erb +22 -19
- data/app/views/alchemy/admin/sites/index.html.erb +2 -1
- data/app/views/alchemy/admin/styleguide/index.html.erb +54 -28
- data/app/views/alchemy/admin/tags/_tag.html.erb +16 -14
- data/app/views/alchemy/admin/tags/index.html.erb +15 -12
- data/app/views/alchemy/admin/tinymce/_setup.html.erb +28 -0
- data/app/views/alchemy/admin/uploader/_button.html.erb +23 -29
- data/app/views/alchemy/admin/uploader/_setup.html.erb +3 -8
- data/app/views/alchemy/base/500.html.erb +1 -1
- data/app/views/alchemy/base/error_notice.js.erb +0 -1
- data/app/views/alchemy/ingredients/_boolean_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_datetime_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_file_editor.html.erb +5 -5
- data/app/views/alchemy/ingredients/_link_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/_node_editor.html.erb +6 -19
- data/app/views/alchemy/ingredients/_page_editor.html.erb +7 -19
- data/app/views/alchemy/ingredients/_picture_editor.html.erb +2 -2
- data/app/views/alchemy/ingredients/_richtext_editor.html.erb +6 -15
- data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
- data/app/views/alchemy/ingredients/_text_editor.html.erb +1 -1
- data/app/views/alchemy/ingredients/shared/_anchor.html.erb +1 -1
- data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +10 -20
- data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +42 -49
- data/app/views/kaminari/alchemy/_first_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_gap.html.erb +1 -1
- data/app/views/kaminari/alchemy/_last_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_next_page.html.erb +4 -2
- data/app/views/kaminari/alchemy/_prev_page.html.erb +4 -2
- data/app/views/layouts/alchemy/admin.html.erb +10 -29
- data/bundles/shoelace.js +10 -0
- data/bundles/tinymce.js +20 -0
- data/config/alchemy/config.yml +11 -10
- data/config/alchemy/modules.yml +30 -30
- data/config/brakeman.ignore +0 -34
- data/config/importmap.rb +9 -5
- data/config/initializers/dragonfly.rb +1 -0
- data/config/initializers/rails_live_reload.rb +13 -0
- data/config/locales/alchemy.en.yml +25 -9
- data/config/routes.rb +2 -1
- data/lib/alchemy/auth_accessors.rb +6 -1
- data/lib/alchemy/config.rb +24 -2
- data/lib/alchemy/dev_support/live_reload_watcher.rb +5 -0
- data/lib/alchemy/engine.rb +10 -3
- data/lib/alchemy/forms/builder.rb +18 -12
- data/lib/alchemy/resources_helper.rb +3 -3
- data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
- data/lib/alchemy/test_support/having_picture_thumbnails_examples.rb +6 -6
- data/lib/alchemy/test_support/rspec_matchers.rb +14 -0
- data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -1
- data/lib/alchemy/tinymce.rb +19 -3
- data/lib/alchemy/version.rb +1 -1
- data/package.json +30 -9
- data/rollup.config.mjs +65 -0
- data/vendor/assets/fonts/remixicon.eot +0 -0
- data/vendor/assets/fonts/remixicon.svg +7816 -0
- data/vendor/assets/fonts/remixicon.ttf +0 -0
- data/vendor/assets/fonts/remixicon.woff +0 -0
- data/vendor/assets/fonts/remixicon.woff2 +0 -0
- data/vendor/assets/stylesheets/remixicon.scss +10480 -0
- data/vendor/assets/stylesheets/tinymce/skins/content/default/content.min.css +1 -0
- data/vendor/javascript/clipboard.min.js +7 -0
- data/vendor/javascript/flatpickr.min.js +1 -0
- data/vendor/javascript/keymaster.min.js +1 -0
- data/vendor/javascript/rails-ujs.min.js +1 -0
- data/vendor/javascript/shoelace.min.js +995 -0
- data/vendor/javascript/sortable.min.js +7 -0
- data/vendor/javascript/tinymce.min.js +1 -0
- data/vendor/javascript/ungap-custom-elements.min.js +3 -0
- metadata +111 -124
- data/.codeclimate.yml +0 -35
- data/.editorconfig +0 -23
- data/.github/FUNDING.yml +0 -4
- data/.github/ISSUE_TEMPLATE/Bug_report.md +0 -22
- data/.github/ISSUE_TEMPLATE/Feature_request.md +0 -17
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -18
- data/.github/workflows/brakeman-analysis.yml +0 -46
- data/.github/workflows/lint.yml +0 -37
- data/.github/workflows/stale.yml +0 -33
- data/.github/workflows/test.yml +0 -124
- data/.gitignore +0 -31
- data/.hound.yml +0 -9
- data/.localeapp/config.rb +0 -8
- data/.prettierrc +0 -6
- data/.rspec +0 -1
- data/.rubocop.yml +0 -7
- data/.standard.yml +0 -4
- data/.yardopts +0 -5
- data/app/assets/javascripts/alchemy/alchemy.autocomplete.js.coffee +0 -30
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -53
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +0 -45
- data/app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee +0 -19
- data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +0 -59
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -79
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +0 -267
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -27
- data/app/assets/javascripts/alchemy/alchemy.spinner.js +0 -32
- data/app/assets/javascripts/alchemy/alchemy.tooltips.coffee +0 -10
- data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +0 -131
- data/app/assets/javascripts/alchemy/menubar.js.coffee +0 -8
- data/app/assets/javascripts/alchemy/node_select.js +0 -39
- data/app/assets/javascripts/alchemy/page_select.js +0 -46
- data/app/assets/javascripts/alchemy/templates/node.hbs +0 -16
- data/app/assets/javascripts/alchemy/templates/spinner.hbs +0 -7
- data/app/assets/stylesheets/alchemy/jquery-ui.scss +0 -435
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +0 -94
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.svg +0 -63
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.ttf +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce-small.woff +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.svg +0 -129
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.ttf +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/fonts/tinymce.woff +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/img/anchor.gif +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/img/loader.gif +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/img/object.gif +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/img/trans.gif +0 -0
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +0 -2105
- data/app/javascript/alchemy_admin/datepicker.js +0 -33
- data/app/javascript/alchemy_admin/tinymce.js +0 -146
- data/app/javascript/alchemy_admin/translations.js +0 -32
- data/app/views/alchemy/admin/elements/fold.js.erb +0 -33
- data/app/views/alchemy/admin/elements/order.js.erb +0 -11
- data/app/views/alchemy/admin/elements/publish.js.erb +0 -21
- data/app/views/alchemy/admin/elements/update.js.erb +0 -27
- data/vendor/assets/fonts/fa-regular-400.eot +0 -0
- data/vendor/assets/fonts/fa-regular-400.svg +0 -803
- 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 +0 -4938
- 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/clipboard.min.js +0 -7
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-process.js +0 -178
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-validate.js +0 -125
- data/vendor/assets/javascripts/fileupload/jquery.fileupload.js +0 -1502
- data/vendor/assets/javascripts/fileupload/jquery.iframe-transport.js +0 -224
- data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
- data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
- data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
- data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
- data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
- data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
- data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
- data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
- data/vendor/assets/javascripts/jquery-ui/widget.js +0 -754
- data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
- data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
- data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1623
- data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
- data/vendor/assets/javascripts/jquery_plugins/jquery.scrollTo.min.js +0 -7
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +0 -296
- data/vendor/assets/javascripts/keymaster.js +0 -296
- data/vendor/assets/javascripts/requestAnimationFrame.js +0 -31
- data/vendor/assets/javascripts/tinymce/license.txt +0 -504
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +0 -2
- data/vendor/assets/stylesheets/fontawesome/_animated.scss +0 -20
- data/vendor/assets/stylesheets/fontawesome/_bordered-pulled.scss +0 -20
- data/vendor/assets/stylesheets/fontawesome/_core.scss +0 -21
- data/vendor/assets/stylesheets/fontawesome/_fixed-width.scss +0 -6
- data/vendor/assets/stylesheets/fontawesome/_icons.scss +0 -1441
- data/vendor/assets/stylesheets/fontawesome/_larger.scss +0 -23
- data/vendor/assets/stylesheets/fontawesome/_list.scss +0 -18
- data/vendor/assets/stylesheets/fontawesome/_mixins.scss +0 -56
- data/vendor/assets/stylesheets/fontawesome/_rotated-flipped.scss +0 -24
- data/vendor/assets/stylesheets/fontawesome/_screen-reader.scss +0 -5
- data/vendor/assets/stylesheets/fontawesome/_stacked.scss +0 -31
- data/vendor/assets/stylesheets/fontawesome/_variables.scss +0 -1458
- data/vendor/assets/stylesheets/fontawesome/fontawesome.scss +0 -16
- data/vendor/assets/stylesheets/fontawesome/regular.scss +0 -23
- data/vendor/assets/stylesheets/fontawesome/solid.scss +0 -24
@@ -1,33 +0,0 @@
|
|
1
|
-
import flatpickr from "flatpickr"
|
2
|
-
|
3
|
-
export default function Datepicker(scope = document) {
|
4
|
-
if (scope === "") {
|
5
|
-
scope = document
|
6
|
-
} else if (scope instanceof String) {
|
7
|
-
scope = document.querySelectorAll(scope)
|
8
|
-
}
|
9
|
-
|
10
|
-
const datepickerInputs = scope.querySelectorAll("input[data-datepicker-type]")
|
11
|
-
|
12
|
-
// Initializes the datepickers
|
13
|
-
datepickerInputs.forEach((input) => {
|
14
|
-
const type = input.dataset.datepickerType
|
15
|
-
const options = {
|
16
|
-
// alchemy_i18n supports `zh_CN` etc., but flatpickr only has two-letter codes (`zh`)
|
17
|
-
locale: Alchemy.locale.slice(0, 2),
|
18
|
-
altInput: true,
|
19
|
-
altFormat: Alchemy.t(`formats.${type}`),
|
20
|
-
altInputClass: "flatpickr-input",
|
21
|
-
dateFormat: "Z",
|
22
|
-
enableTime: /time/.test(type),
|
23
|
-
noCalendar: type === "time",
|
24
|
-
time_24hr: Alchemy.t("formats.time_24hr"),
|
25
|
-
onValueUpdate(_selectedDates, _dateStr, instance) {
|
26
|
-
return Alchemy.setElementDirty(
|
27
|
-
instance.element.closest(".element-editor")
|
28
|
-
)
|
29
|
-
}
|
30
|
-
}
|
31
|
-
flatpickr(input, options)
|
32
|
-
})
|
33
|
-
}
|
@@ -1,146 +0,0 @@
|
|
1
|
-
// Alchemy Tinymce wrapper
|
2
|
-
//
|
3
|
-
|
4
|
-
let tinymceCustomConfigs = {}
|
5
|
-
let tinymceIntersectionObserver = null
|
6
|
-
|
7
|
-
// Returns default config for a tinymce editor.
|
8
|
-
function getDefaultConfig(editorId) {
|
9
|
-
const config = Alchemy.TinymceDefaults
|
10
|
-
config.language = Alchemy.locale
|
11
|
-
config.selector = `#${editorId}`
|
12
|
-
config.init_instance_callback = initInstanceCallback
|
13
|
-
return config
|
14
|
-
}
|
15
|
-
|
16
|
-
// Returns configuration for given custom tinymce editor selector.
|
17
|
-
//
|
18
|
-
// It uses the +.getDefaultConfig+ and merges the custom parts.
|
19
|
-
function getConfig(editorId) {
|
20
|
-
const editorConfig = tinymceCustomConfigs[editorId] || {}
|
21
|
-
return { ...getDefaultConfig(editorId), ...editorConfig }
|
22
|
-
}
|
23
|
-
|
24
|
-
// create intersection observer and register textareas to be initialized when
|
25
|
-
// they are visible
|
26
|
-
function initEditors(ids) {
|
27
|
-
initializeIntersectionObserver()
|
28
|
-
|
29
|
-
ids.forEach((id) => {
|
30
|
-
const editorId = `tinymce_${id}`
|
31
|
-
const textarea = document.getElementById(editorId)
|
32
|
-
|
33
|
-
if (textarea) {
|
34
|
-
tinymceIntersectionObserver.observe(textarea)
|
35
|
-
} else {
|
36
|
-
console.warn(`Could not initialize TinyMCE for textarea#${editorId}!`)
|
37
|
-
}
|
38
|
-
})
|
39
|
-
}
|
40
|
-
|
41
|
-
// initialize IntersectionObserver
|
42
|
-
// the observer will initialize Tinymce if the textarea becomes visible
|
43
|
-
function initializeIntersectionObserver() {
|
44
|
-
const observerCallback = (entries, observer) => {
|
45
|
-
entries.forEach((entry) => {
|
46
|
-
if (entry.intersectionRatio > 0) {
|
47
|
-
initTinymceEditor(entry.target)
|
48
|
-
// disable observer after the Tinymce was initialized
|
49
|
-
observer.unobserve(entry.target)
|
50
|
-
}
|
51
|
-
})
|
52
|
-
}
|
53
|
-
const options = {
|
54
|
-
root: Alchemy.ElementEditors.element_area.get(0),
|
55
|
-
rootMargin: "0px",
|
56
|
-
threshold: [0.05]
|
57
|
-
}
|
58
|
-
|
59
|
-
tinymceIntersectionObserver = new IntersectionObserver(
|
60
|
-
observerCallback,
|
61
|
-
options
|
62
|
-
)
|
63
|
-
}
|
64
|
-
|
65
|
-
// Initializes one specific TinyMCE editor
|
66
|
-
function initTinymceEditor(textarea) {
|
67
|
-
const editorId = textarea.id
|
68
|
-
const config = getConfig(editorId)
|
69
|
-
|
70
|
-
// remove editor instance, if already initialized
|
71
|
-
removeEditor(editorId)
|
72
|
-
|
73
|
-
if (config) {
|
74
|
-
const spinner = new Alchemy.Spinner("small")
|
75
|
-
textarea.closest(".tinymce_container").prepend(spinner.spin().el.get(0))
|
76
|
-
tinymce.init(config)
|
77
|
-
} else {
|
78
|
-
console.warn("No tinymce configuration found for", id)
|
79
|
-
}
|
80
|
-
}
|
81
|
-
|
82
|
-
// Gets called after an editor instance gets initialized
|
83
|
-
function initInstanceCallback(editor) {
|
84
|
-
const element = document.getElementById(editor.id).closest(".element-editor")
|
85
|
-
element.getElementsByClassName("spinner").item(0).remove()
|
86
|
-
editor.on("dirty", function () {
|
87
|
-
Alchemy.setElementDirty(element)
|
88
|
-
})
|
89
|
-
editor.on("click", function (event) {
|
90
|
-
event.target = element
|
91
|
-
Alchemy.ElementEditors.onClickElement(event)
|
92
|
-
})
|
93
|
-
}
|
94
|
-
|
95
|
-
function removeEditor(editorId) {
|
96
|
-
const editorElement = document.getElementById(editorId)
|
97
|
-
if (tinymceIntersectionObserver && editorElement) {
|
98
|
-
tinymceIntersectionObserver.unobserve(editorElement)
|
99
|
-
}
|
100
|
-
|
101
|
-
const editor = tinymce.get(editorId)
|
102
|
-
if (editor) {
|
103
|
-
editor.remove()
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
function removeIntersectionObserver() {
|
108
|
-
if (tinymceIntersectionObserver !== null) {
|
109
|
-
tinymceIntersectionObserver.disconnect()
|
110
|
-
}
|
111
|
-
}
|
112
|
-
|
113
|
-
export default {
|
114
|
-
// Initializes all TinyMCE editors with given ids
|
115
|
-
//
|
116
|
-
// @param ids [Array]
|
117
|
-
// - Editor ids that should be initialized.
|
118
|
-
init(ids) {
|
119
|
-
initEditors(ids)
|
120
|
-
},
|
121
|
-
|
122
|
-
// Initializes TinyMCE editor with given options
|
123
|
-
initWith(options) {
|
124
|
-
tinymce.init({ ...Alchemy.TinymceDefaults, ...options })
|
125
|
-
},
|
126
|
-
|
127
|
-
// Removes the TinyMCE editor from given dom ids.
|
128
|
-
remove(ids) {
|
129
|
-
ids.forEach((id) => removeEditor(`tinymce_${id}`))
|
130
|
-
},
|
131
|
-
|
132
|
-
// Remove all tinymce instances for given selector
|
133
|
-
removeFrom(selector) {
|
134
|
-
// the selector is a jQuery selector - it has to be refactor if we taking care of the calling methods
|
135
|
-
$(selector).each(function (element) {
|
136
|
-
removeEditor(element.id)
|
137
|
-
})
|
138
|
-
},
|
139
|
-
|
140
|
-
removeIntersectionObserver,
|
141
|
-
|
142
|
-
// set tinymce configuration for a given selector key
|
143
|
-
setCustomConfig(key, configuration) {
|
144
|
-
tinymceCustomConfigs[key] = configuration
|
145
|
-
}
|
146
|
-
}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
const translations = {
|
2
|
-
en: {
|
3
|
-
allowed_chars: "of %{count} chars",
|
4
|
-
cancel: "Cancel",
|
5
|
-
cancelled: "Cancelled",
|
6
|
-
click_to_edit: "click to edit",
|
7
|
-
complete: "Complete",
|
8
|
-
element_dirty_notice:
|
9
|
-
"This element has unsaved changes. Do you really want to fold it?",
|
10
|
-
help: "Help",
|
11
|
-
ok: "Ok",
|
12
|
-
page_dirty_notice:
|
13
|
-
"You have unsaved changes on this page. They will be lost if you continue.",
|
14
|
-
page_found: "Page found",
|
15
|
-
pages_found: "Pages found",
|
16
|
-
url_validation_failed: "The url has no valid format.",
|
17
|
-
warning: "Warning!",
|
18
|
-
"File is too large": "File is too large",
|
19
|
-
"File is too small": "File is too small",
|
20
|
-
"File type not allowed": "File type not allowed",
|
21
|
-
"Maximum number of files exceeded": "Maximum number of files exceeded.",
|
22
|
-
"Uploaded bytes exceed file size": "Uploaded bytes exceed file size",
|
23
|
-
formats: {
|
24
|
-
datetime: "Y-m-d H:i",
|
25
|
-
date: "Y-m-d",
|
26
|
-
time: "H:i",
|
27
|
-
time_24hr: false
|
28
|
-
}
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
export default translations
|
@@ -1,33 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
var $el = $('.element-editor[data-element-id="<%= @element.id %>"]');
|
3
|
-
|
4
|
-
<% if @error -%>
|
5
|
-
|
6
|
-
$("#element_<%= @element.id %> .spinner")
|
7
|
-
.replaceWith("<span class='error_icon' title='<%= @error %>'>!</span>");
|
8
|
-
|
9
|
-
<% else -%>
|
10
|
-
|
11
|
-
$el.replaceWith('<%= j render(Alchemy::ElementEditor.new(@element)) %>');
|
12
|
-
$el = $('#element_<%= @element.id %>');
|
13
|
-
$('#element_area .sortable-elements').sortable('refresh');
|
14
|
-
|
15
|
-
<% if @element.folded? -%>
|
16
|
-
|
17
|
-
Alchemy.Tinymce.remove(<%= @element.richtext_ingredients_ids.to_json %>);
|
18
|
-
|
19
|
-
<% else -%>
|
20
|
-
|
21
|
-
$el.trigger('FocusElementEditor.Alchemy');
|
22
|
-
Alchemy.Tinymce.init(<%= @element.richtext_ingredients_ids.to_json %>);
|
23
|
-
Alchemy.GUI.initElement($el);
|
24
|
-
Alchemy.SortableElements(
|
25
|
-
<%= @page.id %>,
|
26
|
-
'<%= form_authenticity_token %>',
|
27
|
-
$('> .nestable-elements .nested-elements', $el)
|
28
|
-
);
|
29
|
-
|
30
|
-
<% end -%>
|
31
|
-
|
32
|
-
<% end -%>
|
33
|
-
})();
|
@@ -1,11 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
<% if @parent_element && @parent_element.ingredients.empty? %>
|
3
|
-
var $parent = $('#element_<%= @parent_element.id %>');
|
4
|
-
Alchemy.ElementEditors.setTitle(
|
5
|
-
$parent,
|
6
|
-
'<%= sanitize(@parent_element.preview_text.presence || ' ') %>'
|
7
|
-
);
|
8
|
-
<% end %>
|
9
|
-
Alchemy.growl('<%= Alchemy.t(:successfully_saved_element_position) -%>');
|
10
|
-
Alchemy.PreviewWindow.refresh();
|
11
|
-
})();
|
@@ -1,21 +0,0 @@
|
|
1
|
-
var el = $('.element-editor[data-element-id="<%= @element.id %>"]');
|
2
|
-
var icon = el.find('> .element-header > .element-handle > .icon');
|
3
|
-
var label = el.find('> .element-toolbar .publish-element-button label');
|
4
|
-
var eye = el.find('> .element-toolbar .publish-element-button .icon');
|
5
|
-
|
6
|
-
<%- if @element.public? -%>
|
7
|
-
icon.removeClass('fa-window-close fas');
|
8
|
-
icon.addClass('fa-window-maximize far');
|
9
|
-
eye.removeClass('fa-eye');
|
10
|
-
eye.addClass('fa-eye-slash');
|
11
|
-
label.text('<%= Alchemy.t(:hide_element) %>');
|
12
|
-
<%- else -%>
|
13
|
-
icon.removeClass('fa-window-maximize far');
|
14
|
-
icon.addClass('fa-window-close fas');
|
15
|
-
eye.removeClass('fa-eye-slash');
|
16
|
-
eye.addClass('fa-eye');
|
17
|
-
label.text('<%= Alchemy.t(:show_element) %>');
|
18
|
-
<%- end -%>
|
19
|
-
el.toggleClass('visible hidden');
|
20
|
-
|
21
|
-
Alchemy.reloadPreview();
|
@@ -1,27 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
var $el = $('#element_<%= @element.id %>');
|
3
|
-
var $errors = $('#element_<%= @element.id %>_errors');
|
4
|
-
$('> .element-body .ingredient-editor', $el).removeClass('validation_failed');
|
5
|
-
|
6
|
-
<%- if @element_validated -%>
|
7
|
-
|
8
|
-
$errors.hide();
|
9
|
-
$el.trigger('SaveElement.Alchemy', {previewText: '<%= j sanitize(@element.preview_text) %>'});
|
10
|
-
<% @element.ingredients.select { |i| i.settings[:anchor] }.each do |ingredient| %>
|
11
|
-
Alchemy.IngredientAnchorLink.updateIcon(<%= ingredient.id %>, <%= ingredient.dom_id.present? %>);
|
12
|
-
<% end %>
|
13
|
-
Alchemy.growl('<%= Alchemy.t(:element_saved) %>');
|
14
|
-
Alchemy.PreviewWindow.refresh(function() {
|
15
|
-
Alchemy.ElementEditors.focusElementPreview(<%= @element.id %>);
|
16
|
-
});
|
17
|
-
|
18
|
-
<%- else -%>
|
19
|
-
|
20
|
-
Alchemy.growl('<%= j @notice %>', 'warn');
|
21
|
-
$errors.html('<%= j @error_message %><ul><li><%== j @error_messages.join("</li><li>") %></li></ul>');
|
22
|
-
$errors.show();
|
23
|
-
$('<%== @element.ingredients_with_errors.map { |ingredient| "[data-ingredient-id=\"#{ingredient.id}\"]" }.join(", ") %>').addClass('validation_failed');
|
24
|
-
Alchemy.Buttons.enable($el);
|
25
|
-
|
26
|
-
<%- end -%>
|
27
|
-
})();
|
Binary file
|