pageflow 17.0.5 → 17.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +342 -41
- data/README.md +3 -5
- data/admins/pageflow/accounts.rb +22 -20
- data/admins/pageflow/entry.rb +76 -26
- data/admins/pageflow/entry_templates.rb +10 -9
- data/admins/pageflow/folder.rb +1 -1
- data/admins/pageflow/membership.rb +15 -15
- data/admins/pageflow/revisions.rb +5 -5
- data/admins/pageflow/site_root_entry.rb +64 -0
- data/admins/pageflow/sites.rb +12 -3
- data/admins/pageflow/translations.rb +75 -0
- data/admins/pageflow/user.rb +21 -35
- data/app/assets/images/pageflow/admin/icons/comment.svg +1 -0
- data/app/assets/javascripts/pageflow/admin/entries.js +30 -5
- data/app/assets/javascripts/pageflow/dist/ui.js +4228 -900
- data/app/assets/javascripts/pageflow/editor/vendor.js +0 -1
- data/app/assets/javascripts/pageflow/ui.js +0 -1
- data/app/assets/stylesheets/pageflow/admin/entries/index_table.scss +2 -1
- data/app/assets/stylesheets/pageflow/admin/entry_comments_indicator.scss +45 -0
- data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +8 -0
- data/app/assets/stylesheets/pageflow/admin.scss +1 -0
- data/app/assets/stylesheets/pageflow/animations/spin.scss +9 -0
- data/app/assets/stylesheets/pageflow/animations.scss +1 -0
- data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +27 -5
- data/app/assets/stylesheets/pageflow/editor/base.scss +11 -1
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +20 -2
- data/app/assets/stylesheets/pageflow/editor/edit_configuration_view.scss +5 -0
- data/app/assets/stylesheets/pageflow/editor/file_folders.scss +127 -0
- data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +5 -2
- data/app/assets/stylesheets/pageflow/editor/file_meta_data_overlay.scss +45 -0
- data/app/assets/stylesheets/pageflow/editor/file_preview.scss +138 -0
- data/app/assets/stylesheets/pageflow/editor/file_references.scss +68 -0
- data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +1 -1
- data/app/assets/stylesheets/pageflow/editor/file_stage_icons.scss +17 -0
- data/app/assets/stylesheets/pageflow/editor/file_stages.scss +25 -32
- data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +31 -48
- data/app/assets/stylesheets/pageflow/editor/file_type_pills.scss +73 -0
- data/app/assets/stylesheets/pageflow/editor/files.scss +242 -50
- data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +161 -9
- data/app/assets/stylesheets/pageflow/editor/folder_breadcrumb.scss +40 -0
- data/app/assets/stylesheets/pageflow/editor/info_box.scss +23 -3
- data/app/assets/stylesheets/pageflow/editor/inputs/edit_defaults_button.scss +15 -0
- data/app/assets/stylesheets/pageflow/editor/inputs.scss +1 -0
- data/app/assets/stylesheets/pageflow/editor/list.scss +89 -37
- data/app/assets/stylesheets/pageflow/editor/list_search_field.scss +52 -0
- data/app/assets/stylesheets/pageflow/editor/manage_files.scss +9 -0
- data/app/assets/stylesheets/pageflow/editor/menu.scss +14 -0
- data/app/assets/stylesheets/pageflow/editor/move_to_folder_dialog.scss +83 -0
- data/app/assets/stylesheets/pageflow/editor/outline.scss +0 -13
- data/app/assets/stylesheets/pageflow/editor/sortable.scss +12 -0
- data/app/assets/stylesheets/pageflow/mixins/buttons.scss +4 -4
- data/app/assets/stylesheets/pageflow/mixins/pageflow.scss +9 -5
- data/app/assets/stylesheets/pageflow/ui/color_picker.scss +230 -0
- data/app/assets/stylesheets/pageflow/ui/forms.scss +38 -4
- data/app/assets/stylesheets/pageflow/ui/functions.scss +12 -2
- data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +9 -8
- data/app/assets/stylesheets/pageflow/ui/input/file_name_input.scss +37 -0
- data/app/assets/stylesheets/pageflow/ui/input/text_area_input.scss +15 -0
- data/app/assets/stylesheets/pageflow/ui/overrides.scss +8 -0
- data/app/assets/stylesheets/pageflow/ui/properties.scss +34 -0
- data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -3
- data/app/assets/stylesheets/pageflow/ui.scss +4 -1
- data/app/controllers/concerns/pageflow/controller_delegation.rb +1 -1
- data/app/controllers/concerns/pageflow/edit_locking.rb +17 -10
- data/app/controllers/concerns/pageflow/entry_password_protection.rb +1 -0
- data/app/controllers/concerns/pageflow/public_https_mode.rb +2 -1
- data/app/controllers/concerns/pageflow/quota_verification.rb +5 -4
- data/app/controllers/pageflow/admin/initial_passwords_controller.rb +1 -0
- data/app/controllers/pageflow/application_controller.rb +19 -19
- data/app/controllers/pageflow/chapters_controller.rb +3 -2
- data/app/controllers/pageflow/edit_locks_controller.rb +3 -2
- data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +1 -0
- data/app/controllers/pageflow/editor/entries_controller.rb +3 -1
- data/app/controllers/pageflow/editor/entry_publications_controller.rb +1 -0
- data/app/controllers/pageflow/editor/file_folders_controller.rb +80 -0
- data/app/controllers/pageflow/editor/file_import_controller.rb +4 -3
- data/app/controllers/pageflow/editor/files_controller.rb +20 -10
- data/app/controllers/pageflow/editor/oembeds_controller.rb +21 -0
- data/app/controllers/pageflow/editor/widgets_controller.rb +1 -0
- data/app/controllers/pageflow/entries_controller.rb +85 -21
- data/app/controllers/pageflow/feeds_controller.rb +1 -1
- data/app/controllers/pageflow/files_controller.rb +1 -0
- data/app/controllers/pageflow/pages_controller.rb +4 -2
- data/app/controllers/pageflow/review/comment_thread_reads_controller.rb +30 -0
- data/app/controllers/pageflow/review/comment_threads_controller.rb +60 -0
- data/app/controllers/pageflow/review/comments_controller.rb +53 -0
- data/app/controllers/pageflow/revisions_controller.rb +5 -1
- data/app/controllers/pageflow/sitemaps_controller.rb +1 -1
- data/app/controllers/pageflow/storylines_controller.rb +1 -0
- data/app/helpers/pageflow/admin/cutoff_modes_helper.rb +12 -0
- data/app/helpers/pageflow/admin/entries_helper.rb +41 -1
- data/app/helpers/pageflow/admin/entry_translations_helper.rb +18 -0
- data/app/helpers/pageflow/admin/features_helper.rb +1 -1
- data/app/helpers/pageflow/admin/form_helper.rb +3 -3
- data/app/helpers/pageflow/admin/locales_helper.rb +10 -2
- data/app/helpers/pageflow/admin/memberships_helper.rb +32 -32
- data/app/helpers/pageflow/admin/revisions_helper.rb +1 -1
- data/app/helpers/pageflow/admin/sites_helper.rb +22 -0
- data/app/helpers/pageflow/admin/users_helper.rb +7 -5
- data/app/helpers/pageflow/admin/widgets_helper.rb +5 -5
- data/app/helpers/pageflow/asset_urls_helper.rb +1 -1
- data/app/helpers/pageflow/audio_files_helper.rb +5 -2
- data/app/helpers/pageflow/background_image_helper.rb +7 -6
- data/app/helpers/pageflow/common_entry_seed_helper.rb +7 -7
- data/app/helpers/pageflow/editor/config_helper.rb +3 -1
- data/app/helpers/pageflow/editor/files_helper.rb +1 -1
- data/app/helpers/pageflow/embed_code_helper.rb +3 -3
- data/app/helpers/pageflow/entries_helper.rb +52 -46
- data/app/helpers/pageflow/entry_json_seed_helper.rb +7 -6
- data/app/helpers/pageflow/feeds_helper.rb +2 -2
- data/app/helpers/pageflow/file_background_images_helper.rb +2 -2
- data/app/helpers/pageflow/file_thumbnails_helper.rb +4 -3
- data/app/helpers/pageflow/files_helper.rb +5 -4
- data/app/helpers/pageflow/folders_helper.rb +8 -5
- data/app/helpers/pageflow/help_entries_helper.rb +2 -2
- data/app/helpers/pageflow/hreflang_links_helper.rb +37 -0
- data/app/helpers/pageflow/info_box_helper.rb +7 -11
- data/app/helpers/pageflow/media_query_helper.rb +3 -3
- data/app/helpers/pageflow/navigation_bar_helper.rb +1 -1
- data/app/helpers/pageflow/overview_helper.rb +1 -1
- data/app/helpers/pageflow/page_types_helper.rb +5 -5
- data/app/helpers/pageflow/pages_helper.rb +29 -15
- data/app/helpers/pageflow/public_i18n_helper.rb +10 -9
- data/app/helpers/pageflow/quota_helper.rb +4 -4
- data/app/helpers/pageflow/render_json_helper.rb +6 -3
- data/app/helpers/pageflow/revision_file_helper.rb +2 -1
- data/app/helpers/pageflow/sites_helper.rb +3 -3
- data/app/helpers/pageflow/social_share_helper.rb +24 -10
- data/app/helpers/pageflow/social_share_links_helper.rb +12 -9
- data/app/helpers/pageflow/structured_data_helper.rb +5 -2
- data/app/helpers/pageflow/stub_page_configuration.rb +7 -3
- data/app/helpers/pageflow/text_direction_helper.rb +1 -1
- data/app/helpers/pageflow/themes_helper.rb +2 -4
- data/app/helpers/pageflow/video_files_helper.rb +29 -13
- data/app/helpers/pageflow/widgets_helper.rb +8 -6
- data/app/inputs/pageflow_permalink_input.rb +8 -3
- data/app/jobs/pageflow/application_job.rb +1 -0
- data/app/jobs/pageflow/entry_export_import/upload_and_publish_file_job.rb +1 -1
- data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -0
- data/app/jobs/pageflow/poll_zencoder_job.rb +3 -2
- data/app/jobs/pageflow/process_image_or_text_track_job.rb +1 -0
- data/app/jobs/pageflow/prune_auto_snapshots_job.rb +1 -0
- data/app/jobs/pageflow/request_meta_data_from_zencoder_job.rb +1 -0
- data/app/jobs/pageflow/submit_file_to_zencoder_job.rb +1 -0
- data/app/mailers/pageflow/user_mailer.rb +1 -0
- data/app/models/concerns/pageflow/auto_generated_perma_id.rb +20 -1
- data/app/models/concerns/pageflow/entry_publication_states.rb +7 -3
- data/app/models/concerns/pageflow/feature_target.rb +8 -4
- data/app/models/concerns/pageflow/output_source.rb +3 -3
- data/app/models/concerns/pageflow/permalinkable.rb +2 -1
- data/app/models/concerns/pageflow/reusable_file.rb +24 -24
- data/app/models/concerns/pageflow/serialization_blacklist.rb +3 -5
- data/app/models/concerns/pageflow/suspendable.rb +5 -3
- data/app/models/concerns/pageflow/theme_referencer.rb +1 -1
- data/app/models/concerns/pageflow/translatable.rb +62 -0
- data/app/models/concerns/pageflow/translated_attributes.rb +101 -0
- data/app/models/concerns/pageflow/uploadable_file.rb +6 -6
- data/app/models/pageflow/account.rb +6 -5
- data/app/models/pageflow/account_member_query.rb +1 -1
- data/app/models/pageflow/account_role_query.rb +1 -1
- data/app/models/pageflow/application_query.rb +1 -1
- data/app/models/pageflow/application_record.rb +1 -1
- data/app/models/pageflow/audio_file.rb +4 -4
- data/app/models/pageflow/audio_file_url_templates.rb +1 -1
- data/app/models/pageflow/authentication_token.rb +2 -2
- data/app/models/pageflow/chapter.rb +6 -1
- data/app/models/pageflow/chapter_scaffold.rb +2 -4
- data/app/models/pageflow/cname_site_request_scope.rb +1 -1
- data/app/models/pageflow/comment.rb +30 -0
- data/app/models/pageflow/comment_thread.rb +65 -0
- data/app/models/pageflow/comment_thread_read.rb +22 -0
- data/app/models/pageflow/customized_theme.rb +9 -8
- data/app/models/pageflow/draft_entry.rb +49 -9
- data/app/models/pageflow/edit_lock.rb +19 -21
- data/app/models/pageflow/encoding_confirmation.rb +2 -2
- data/app/models/pageflow/entries_feed.rb +2 -2
- data/app/models/pageflow/entry.rb +46 -30
- data/app/models/pageflow/entry_at_revision.rb +14 -2
- data/app/models/pageflow/entry_comment_summary.rb +114 -0
- data/app/models/pageflow/entry_duplicate.rb +8 -5
- data/app/models/pageflow/entry_publication.rb +2 -2
- data/app/models/pageflow/entry_role_query.rb +4 -4
- data/app/models/pageflow/entry_template.rb +4 -4
- data/app/models/pageflow/entry_title_or_account_name_query.rb +2 -2
- data/app/models/pageflow/entry_translation_group.rb +42 -0
- data/app/models/pageflow/file_folder.rb +74 -0
- data/app/models/pageflow/file_reuse.rb +5 -4
- data/app/models/pageflow/file_usage.rb +18 -3
- data/app/models/pageflow/folder.rb +2 -2
- data/app/models/pageflow/home_button.rb +7 -7
- data/app/models/pageflow/image_file.rb +44 -25
- data/app/models/pageflow/image_file_url_templates.rb +4 -4
- data/app/models/pageflow/invitation_form.rb +2 -1
- data/app/models/pageflow/legal_info.rb +38 -0
- data/app/models/pageflow/managed_user_query.rb +1 -1
- data/app/models/pageflow/membership.rb +5 -5
- data/app/models/pageflow/nested_revision_component_copy.rb +263 -0
- data/app/models/pageflow/null_user.rb +1 -1
- data/app/models/pageflow/overview_button.rb +1 -1
- data/app/models/pageflow/page.rb +7 -3
- data/app/models/pageflow/permalink.rb +24 -2
- data/app/models/pageflow/permalink_directory.rb +7 -0
- data/app/models/pageflow/permalink_redirect.rb +7 -0
- data/app/models/pageflow/positioned_file.rb +5 -5
- data/app/models/pageflow/potential_entry_translations.rb +55 -0
- data/app/models/pageflow/potential_memberships.rb +5 -4
- data/app/models/pageflow/published_entry.rb +62 -11
- data/app/models/pageflow/revision.rb +29 -16
- data/app/models/pageflow/roles.rb +14 -18
- data/app/models/pageflow/site.rb +46 -3
- data/app/models/pageflow/site_root_entry_form.rb +27 -0
- data/app/models/pageflow/sitemaps.rb +10 -1
- data/app/models/pageflow/storyline.rb +5 -2
- data/app/models/pageflow/storyline_scaffold.rb +1 -1
- data/app/models/pageflow/text_track_file.rb +1 -1
- data/app/models/pageflow/text_track_file_url_templates.rb +1 -1
- data/app/models/pageflow/theme_customization_file.rb +3 -2
- data/app/models/pageflow/thumbnail_file_resolver.rb +1 -1
- data/app/models/pageflow/url_template.rb +1 -1
- data/app/models/pageflow/used_file.rb +13 -3
- data/app/models/pageflow/user_name_query.rb +2 -2
- data/app/models/pageflow/video_file.rb +22 -15
- data/app/models/pageflow/video_file_url_templates.rb +6 -4
- data/app/models/pageflow/widget.rb +5 -4
- data/app/models/pageflow/with_file_usage_extension.rb +1 -1
- data/app/models/pageflow/zencoder_attachment.rb +8 -8
- data/app/policies/pageflow/account_policy.rb +3 -1
- data/app/policies/pageflow/admin/admin_only_tab_policy.rb +1 -0
- data/app/policies/pageflow/admin/entry_tab_policy.rb +1 -0
- data/app/policies/pageflow/application_policy.rb +2 -0
- data/app/policies/pageflow/entry_policy.rb +7 -1
- data/app/policies/pageflow/entry_template_policy.rb +2 -1
- data/app/policies/pageflow/file_policy.rb +4 -7
- data/app/policies/pageflow/folder_policy.rb +18 -8
- data/app/policies/pageflow/membership_policy.rb +6 -4
- data/app/policies/pageflow/site_policy.rb +10 -3
- data/app/policies/pageflow/user_policy.rb +6 -4
- data/app/state_machines/pageflow/image_and_text_track_processing_state_machine.rb +3 -2
- data/app/state_machines/pageflow/media_encoding_state_machine.rb +5 -4
- data/app/views/admin/accounts/_entry_template_details.html.arb +2 -2
- data/app/views/admin/entries/_attributes_table.html.arb +6 -5
- data/app/views/admin/entries/_form.html.erb +2 -1
- data/app/views/admin/entries/_permalink_inputs.html.erb +9 -2
- data/app/views/admin/entry_templates/_form.html.erb +1 -3
- data/app/views/admin/site_root_entry/choose.html.erb +19 -0
- data/app/views/admin/sites/_fields.html.erb +14 -1
- data/app/views/admin/translations/_form.html.erb +31 -0
- data/app/views/admin/users/_attributes_table.html.arb +13 -0
- data/app/views/components/pageflow/admin/add_membership_button.rb +13 -12
- data/app/views/components/pageflow/admin/custom_scopes_renderer.rb +1 -0
- data/app/views/components/pageflow/admin/embed_code_field.rb +1 -0
- data/app/views/components/pageflow/admin/embedded_index_table.rb +9 -10
- data/app/views/components/pageflow/admin/entries_tab.rb +1 -0
- data/app/views/components/pageflow/admin/entry_publication_state_indicator.rb +6 -5
- data/app/views/components/pageflow/admin/entry_templates_tab.rb +2 -1
- data/app/views/components/pageflow/admin/entry_translations_tab.rb +102 -0
- data/app/views/components/pageflow/admin/entry_user_badge_list.rb +1 -0
- data/app/views/components/pageflow/admin/extensible_attributes_table.rb +9 -8
- data/app/views/components/pageflow/admin/features_tab.rb +1 -0
- data/app/views/components/pageflow/admin/grouped_folder_list.rb +1 -0
- data/app/views/components/pageflow/admin/icon_link_to.rb +1 -0
- data/app/views/components/pageflow/admin/members_tab.rb +4 -3
- data/app/views/components/pageflow/admin/membership_role_with_tooltip.rb +3 -2
- data/app/views/components/pageflow/admin/revisions_tab.rb +14 -10
- data/app/views/components/pageflow/admin/sites_tab.rb +1 -0
- data/app/views/components/pageflow/admin/tabs_view.rb +1 -0
- data/app/views/components/pageflow/admin/timestamp.rb +6 -5
- data/app/views/components/pageflow/admin/user_account_badge_list.rb +2 -3
- data/app/views/components/pageflow/admin/user_accounts_tab.rb +1 -0
- data/app/views/components/pageflow/admin/user_entries_tab.rb +1 -0
- data/app/views/components/pageflow/admin/users_tab.rb +1 -0
- data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +0 -1
- data/app/views/pageflow/editor/config/_seeds.json.jbuilder +5 -3
- data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
- data/app/views/pageflow/editor/entries/index.json.jbuilder +1 -1
- data/app/views/pageflow/editor/entries/seed.json.erb +1 -0
- data/app/views/pageflow/editor/entries/show.json.jbuilder +1 -1
- data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +2 -2
- data/app/views/pageflow/editor/file_folders/_file_folder.json.jbuilder +5 -0
- data/app/views/pageflow/editor/file_folders/create.json.jbuilder +1 -0
- data/app/views/pageflow/editor/file_folders/index.json.jbuilder +3 -0
- data/app/views/pageflow/editor/files/_file.json.jbuilder +7 -14
- data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
- data/app/views/pageflow/editor/files/index.json.jbuilder +1 -1
- data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +3 -0
- data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
- data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +4 -3
- data/app/views/pageflow/entries/share_menu/_bluesky_link.html.erb +8 -0
- data/app/views/pageflow/entries/share_menu/_threads_link.html.erb +8 -0
- data/app/views/pageflow/files/_file.json.jbuilder +5 -3
- data/app/views/pageflow/image_files/_image_file.json.jbuilder +0 -1
- data/app/views/pageflow/review/comment_threads/_comment_thread.json.jbuilder +20 -0
- data/app/views/pageflow/review/comment_threads/create.json.jbuilder +2 -0
- data/app/views/pageflow/review/comment_threads/index.json.jbuilder +13 -0
- data/app/views/pageflow/review/comments/_comment.json.jbuilder +13 -0
- data/app/views/pageflow/review/comments/create.json.jbuilder +1 -0
- data/app/views/pageflow/sitemaps/index.xml.builder +9 -1
- data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
- data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
- data/app/views/pageflow/structured_data/_entry.json.jbuilder +2 -3
- data/app/views/pageflow/video_files/_video_file.json.jbuilder +0 -1
- data/config/initializers/active_admin_patches.rb +3 -6
- data/config/initializers/admin_resource_tabs.rb +3 -0
- data/config/initializers/paperclip.rb +1 -0
- data/config/initializers/symmetric_encryption.rb +1 -1
- data/config/initializers/zencoder.rb +24 -13
- data/config/locales/de.yml +256 -12
- data/config/locales/en.yml +253 -15
- data/config/routes.rb +29 -13
- data/config/spring.rb +2 -1
- data/db/migrate/20140418225525_setup_schema.rb +2 -2
- data/db/migrate/20190306161431_copy_file_attributes_of_failed_uploads.rb +2 -2
- data/db/migrate/20190820152900_drop_accounts_themes.rb +2 -1
- data/db/migrate/20191202145757_create_pageflow_scrolled_sections.rb +11 -11
- data/db/migrate/20191202150657_create_pageflow_scrolled_chapters.rb +1 -1
- data/db/migrate/20191202154723_create_pageflow_scrolled_content_elements.rb +9 -9
- data/db/migrate/20191219143450_add_position_to_content_elements.rb +2 -1
- data/db/migrate/20200117133200_change_revision_appearance_option_default_and_null.rb +2 -1
- data/db/migrate/20200122115400_create_pageflow_entry_templates.rb +25 -25
- data/db/migrate/20200206134400_convert_legacy_scrolled_content_element_types.rb +3 -3
- data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +2 -2
- data/db/migrate/20230120092923_create_other_files.rb +2 -1
- data/db/migrate/20230419083307_create_pageflow_entry_translation_group.rb +9 -0
- data/db/migrate/20240612110434_add_cutoff_mode_name_to_sites.rb +5 -0
- data/db/migrate/20240918084059_create_pageflow_permalink_redirects.rb +14 -0
- data/db/migrate/20250508172234_ensure_scrolled_entries_have_main_storyline.rb +14 -0
- data/db/migrate/20250617090048_add_custom404_entry_to_sites.rb +5 -0
- data/db/migrate/20250617100000_add_perma_id_counter_to_entries.rb +28 -0
- data/db/migrate/20250722174123_add_perma_id_to_chapters.rb +10 -0
- data/db/migrate/20250725080603_add_perma_id_indexes_to_revision_components.rb +13 -0
- data/db/migrate/20250726000000_add_display_name_to_file_usages.rb +5 -0
- data/db/migrate/20251015000000_add_structured_data_type_name_to_revisions.rb +5 -0
- data/db/migrate/20251029142849_convert_legacy_social_embeds_to_unified_social_embed.rb +38 -0
- data/db/migrate/20251119083347_fix_main_storyline_positions.rb +16 -0
- data/db/migrate/20251119083348_ensure_scrolled_entries_have_excursion_storyline.rb +15 -0
- data/db/migrate/20260303000000_add_layout_version_to_revisions.rb +6 -0
- data/db/migrate/20260323000000_create_comment_threads_and_comments.rb +30 -0
- data/db/migrate/20260414000000_add_subject_range_to_comment_threads.rb +5 -0
- data/db/migrate/20260415000000_add_section_perma_id_to_comment_threads.rb +5 -0
- data/db/migrate/20260727000000_add_quote_to_comments.rb +5 -0
- data/db/migrate/20260728000000_create_file_folders.rb +17 -0
- data/db/migrate/20260805000000_add_attribute_translations_to_sites.rb +5 -0
- data/db/migrate/20260806000000_add_edited_at_to_comments.rb +5 -0
- data/db/migrate/20260810000000_create_pageflow_scrolled_lottie_files.rb +24 -0
- data/db/migrate/20260817000000_create_comment_thread_reads.rb +16 -0
- data/db/migrate/20260819000000_add_unread_comments_since_at_to_users.rb +18 -0
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +12599 -5398
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +1275 -4560
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +20204 -22
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +18657 -19
- data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
- data/entry_types/paged/app/helpers/pageflow_paged/page_background_asset_helper.rb +1 -1
- data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +7 -7
- data/entry_types/paged/app/views/pageflow_paged/editor/entries/_seed.json.jbuilder +1 -0
- data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
- data/entry_types/paged/lib/pageflow_paged/plugin.rb +4 -0
- data/entry_types/paged/lib/pageflow_paged/react/page_type.rb +1 -1
- data/entry_types/paged/lib/pageflow_paged/react/widget_type.rb +3 -3
- data/entry_types/paged/lib/pageflow_paged.rb +1 -1
- data/entry_types/scrolled/app/assets/stylesheets/pageflow_scrolled/ui.scss +2 -0
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +5 -3
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +35 -5
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +4 -5
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +23 -2
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +3 -3
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +8 -5
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +7 -3
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +72 -10
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/i18n_helper.rb +28 -13
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +41 -12
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +23 -25
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/sprockets_helper.rb +16 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +189 -3
- data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +15 -14
- data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +61 -7
- data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file.rb +6 -0
- data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file_url_templates.rb +16 -0
- data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +12 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +20 -1
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +2 -2
- data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +15 -12
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +45 -17
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry_translations.json.jbuilder +14 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +34 -5
- data/entry_types/scrolled/app/views/pageflow_scrolled/favicons/_entry.html.erb +1 -1
- data/entry_types/scrolled/app/views/pageflow_scrolled/storylines/_storyline.json.jbuilder +7 -0
- data/entry_types/scrolled/config/configuration_schemas/pageflow-scrolled.json +414 -0
- data/entry_types/scrolled/config/locales/de.yml +1094 -78
- data/entry_types/scrolled/config/locales/en.yml +1083 -78
- data/entry_types/scrolled/config/routes.rb +18 -8
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +11 -11
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantDesktop.svg +56 -0
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantMobile.svg +22 -0
- data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +26 -11
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +27 -8
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +2 -2
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_theme_assets.rb +27 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +67 -10
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration_schemas.rb +91 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +2 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/entry_file_reference_locations.rb +71 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/entry_structured_data_types/faq_page.rb +58 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/file_reference_locations.rb +69 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +222 -19
- data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +2 -4
- data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +76 -54
- data/entry_types/scrolled/lib/pageflow_scrolled/theme_options_default_scale.rb +35 -0
- data/entry_types/scrolled/lib/pageflow_scrolled.rb +14 -1
- data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +24 -5
- data/entry_types/scrolled/package/config/configurationSchemas.js +70 -0
- data/entry_types/scrolled/package/config/rollup/configurationSchemas.js +19 -0
- data/entry_types/scrolled/package/config/webpack.js +94 -0
- data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1795 -0
- data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.js +219 -0
- data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.js +244 -0
- data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.js +823 -0
- data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +109 -0
- data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.js +277 -0
- data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.js +244 -0
- data/entry_types/scrolled/package/contentElements-editor.js +3155 -583
- data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
- data/entry_types/scrolled/package/contentElements-frontend.js +3375 -1585
- data/entry_types/scrolled/package/editor.css +1 -0
- data/entry_types/scrolled/package/editor.js +8452 -2867
- data/entry_types/scrolled/package/entryState.js +1600 -0
- data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-20c600de.js +1979 -0
- data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-58189220.js +2538 -0
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-4ec6b2de.js → PhonePlatformContext-035a99fa.js} +9 -15
- data/entry_types/scrolled/package/frontend/PhonePlatformContext-9da43797.js +33 -0
- data/entry_types/scrolled/package/frontend/Placeholder.module-bf0966b4.js +5267 -0
- data/entry_types/scrolled/package/frontend/Placeholder.module-d22a9335.js +4180 -0
- data/entry_types/scrolled/package/frontend/ThemeIcon-ab834849.js +754 -0
- data/entry_types/scrolled/package/frontend/ThemeIcon-f6cb3a8f.js +773 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-30fd1124.js +39 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-61c25224.js +72 -0
- data/entry_types/scrolled/package/frontend/Viewer-1074fd59.js +147 -0
- data/entry_types/scrolled/package/frontend/Viewer-1482ca34.js +480 -0
- data/entry_types/scrolled/package/frontend/Viewer-70504231.js +210 -0
- data/entry_types/scrolled/package/frontend/{Viewer-1bb5597c.js → Viewer-cc8d4072.js} +100 -135
- data/entry_types/scrolled/package/frontend/Wavesurfer-656e3c36.js +302 -0
- data/entry_types/scrolled/package/frontend/Wavesurfer-b753b838.js +385 -0
- data/entry_types/scrolled/package/frontend/commenting.css +1 -0
- data/entry_types/scrolled/package/frontend/extensions-167ae143.js +1455 -0
- data/entry_types/scrolled/package/frontend/extensions-2318f92b.js +5918 -0
- data/entry_types/scrolled/package/frontend/extensions-a461fd13.js +4890 -0
- data/entry_types/scrolled/package/frontend/extensions-c98269fd.js +1982 -0
- data/entry_types/scrolled/package/frontend/i18n-493cd2a6.js +93 -0
- data/entry_types/scrolled/package/frontend/i18n-e06cac14.js +100 -0
- data/entry_types/scrolled/package/frontend/{index-11f32f10.js → index-2e5546f7.js} +39 -54
- data/entry_types/scrolled/package/frontend/index-de2b418d.js +130 -0
- data/entry_types/scrolled/package/frontend/index.css +1 -1
- data/entry_types/scrolled/package/frontend/index.js +1976 -1367
- data/entry_types/scrolled/package/frontend/inlineEditing.css +1 -0
- data/entry_types/scrolled/package/frontend/useContentElementEditorState-a084912e.js +25 -0
- data/entry_types/scrolled/package/frontend/useDelayedBoolean-a387d85b.js +24 -0
- data/entry_types/scrolled/package/frontend/usePhonePlatform-4ecb96d4.js +8 -0
- data/entry_types/scrolled/package/frontend/usePhonePlatform-ce9ff08d.js +8 -0
- data/entry_types/scrolled/package/frontend-server.js +20 -210
- data/entry_types/scrolled/package/package.json +22 -12
- data/entry_types/scrolled/package/review.css +1 -0
- data/entry_types/scrolled/package/review.js +3306 -0
- data/entry_types/scrolled/package/testHelpers.js +952 -239
- data/entry_types/scrolled/package/values/widgets.module.css +18 -0
- data/entry_types/scrolled/package/widgets/consentBar.css +1 -1
- data/entry_types/scrolled/package/widgets/consentBar.js +275 -315
- data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
- data/entry_types/scrolled/package/widgets/defaultNavigation.js +961 -432
- data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -0
- data/entry_types/scrolled/package/widgets/excursionSheet.js +225 -0
- data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
- data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +62 -32
- data/entry_types/scrolled/package/widgets/iconScrollIndicator.css +1 -0
- data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +67 -0
- data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -0
- data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +100 -0
- data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
- data/entry_types/scrolled/package/widgets/textInlineFileRights.js +48 -26
- data/entry_types/scrolled/package/widgets-server.js +2 -0
- data/entry_types/scrolled/spec/factories/chapters.rb +14 -1
- data/entry_types/scrolled/spec/factories/content_elements.rb +1 -1
- data/entry_types/scrolled/spec/factories/lottie_files.rb +29 -0
- data/entry_types/scrolled/spec/fixtures/animation.lottie +0 -0
- data/entry_types/scrolled/spec/fixtures/font.woff +0 -0
- data/entry_types/scrolled/spec/fixtures/font.woff2 +0 -0
- data/lib/generators/pageflow/active_admin_initializer/active_admin_initializer_generator.rb +5 -3
- data/lib/generators/pageflow/assets/assets_generator.rb +7 -5
- data/lib/generators/pageflow/cancan/cancan_generator.rb +2 -1
- data/lib/generators/pageflow/cancan/templates/ability.rb +1 -1
- data/lib/generators/pageflow/error_pages/error_pages_generator.rb +2 -1
- data/lib/generators/pageflow/initializer/initializer_generator.rb +3 -2
- data/lib/generators/pageflow/install/install_generator.rb +2 -2
- data/lib/generators/pageflow/procfile/procfile_generator.rb +2 -1
- data/lib/generators/pageflow/resque/resque_generator.rb +4 -4
- data/lib/generators/pageflow/resque/templates/resque.rake +1 -1
- data/lib/generators/pageflow/routes/routes_generator.rb +4 -2
- data/lib/generators/pageflow/seeds/seeds_generator.rb +3 -2
- data/lib/generators/pageflow/seeds/templates/seeds.rb +6 -6
- data/lib/generators/pageflow/theme/theme_generator.rb +2 -1
- data/lib/generators/pageflow/user/user_generator.rb +2 -1
- data/lib/pageflow/ability_mixin.rb +25 -15
- data/lib/pageflow/active_admin_patches/views/attributes_table.rb +1 -0
- data/lib/pageflow/active_admin_patches/views/pages/base.rb +3 -2
- data/lib/pageflow/active_admin_patches/views/table_for.rb +1 -0
- data/lib/pageflow/additional_headers.rb +27 -0
- data/lib/pageflow/admin/attributes_table_rows.rb +3 -3
- data/lib/pageflow/admin/tabs.rb +1 -1
- data/lib/pageflow/built_in_file_type.rb +1 -1
- data/lib/pageflow/built_in_page_types_plugin.rb +1 -1
- data/lib/pageflow/built_in_widget_type.rb +2 -2
- data/lib/pageflow/built_in_widget_types_plugin.rb +2 -1
- data/lib/pageflow/configuration.rb +183 -18
- data/lib/pageflow/cutoff_modes.rb +39 -0
- data/lib/pageflow/deprecation.rb +19 -0
- data/lib/pageflow/editor_controller.rb +6 -10
- data/lib/pageflow/engine.rb +5 -6
- data/lib/pageflow/entries_controller_env_helper.rb +32 -2
- data/lib/pageflow/entry_export_import/attachment_files.rb +1 -1
- data/lib/pageflow/entry_export_import/entry_serialization.rb +9 -8
- data/lib/pageflow/entry_export_import/file_mappings.rb +1 -0
- data/lib/pageflow/entry_export_import/page_type_versions.rb +2 -2
- data/lib/pageflow/entry_export_import/revision_serialization/import.rb +11 -1
- data/lib/pageflow/entry_export_import/revision_serialization.rb +3 -0
- data/lib/pageflow/entry_export_import.rb +3 -3
- data/lib/pageflow/entry_structured_data_types.rb +43 -0
- data/lib/pageflow/entry_type_configuration.rb +1 -0
- data/lib/pageflow/entry_types.rb +2 -2
- data/lib/pageflow/feature.rb +1 -1
- data/lib/pageflow/features.rb +4 -6
- data/lib/pageflow/file_importers.rb +4 -4
- data/lib/pageflow/file_type.rb +5 -5
- data/lib/pageflow/file_types.rb +4 -4
- data/lib/pageflow/global_config_api.rb +5 -6
- data/lib/pageflow/help_entries.rb +7 -7
- data/lib/pageflow/help_entry.rb +1 -1
- data/lib/pageflow/hooks.rb +1 -1
- data/lib/pageflow/nested_revision_component.rb +9 -27
- data/lib/pageflow/news_item_api.rb +1 -1
- data/lib/pageflow/oembed_providers.rb +42 -0
- data/lib/pageflow/page_type.rb +2 -3
- data/lib/pageflow/page_types.rb +3 -3
- data/lib/pageflow/paperclip_interpolations/support.rb +1 -1
- data/lib/pageflow/paperclip_processors/vtt.rb +1 -0
- data/lib/pageflow/paperclip_processors/webp.rb +2 -2
- data/lib/pageflow/partial_editor_fragment_renderer.rb +2 -2
- data/lib/pageflow/plugin.rb +1 -2
- data/lib/pageflow/primary_domain_entry_redirect.rb +6 -0
- data/lib/pageflow/quota.rb +9 -5
- data/lib/pageflow/quotas.rb +1 -1
- data/lib/pageflow/rails_version.rb +14 -2
- data/lib/pageflow/react.rb +1 -1
- data/lib/pageflow/revision_component.rb +8 -40
- data/lib/pageflow/revision_components.rb +16 -6
- data/lib/pageflow/seeds.rb +12 -16
- data/lib/pageflow/theme.rb +1 -1
- data/lib/pageflow/theme_customizations.rb +10 -10
- data/lib/pageflow/themes.rb +44 -3
- data/lib/pageflow/user_mixin.rb +18 -6
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/widget_type.rb +4 -4
- data/lib/pageflow/widget_types.rb +9 -9
- data/lib/pageflow/zencoder_api.rb +32 -42
- data/lib/pageflow/zencoder_audio_output_definition.rb +14 -13
- data/lib/pageflow/zencoder_meta_data_output_definition.rb +3 -2
- data/lib/pageflow/zencoder_output_definition.rb +16 -14
- data/lib/pageflow/zencoder_video_output_definition.rb +140 -88
- data/lib/pageflow.rb +8 -2
- data/lib/tasks/pageflow_tasks.rake +1 -1
- data/package/config/eslint-rules/documented-in-toc.js +125 -0
- data/package/config/jest/index.js +0 -1
- data/package/config/webpack.js +0 -1
- data/package/config/webpack5.js +0 -1
- data/package/editor.js +4880 -2313
- data/package/frontend.js +710 -1223
- data/package/package.json +3 -1
- data/package/review.js +384 -0
- data/package/testHelpers.js +257 -243
- data/package/ui.js +1487 -813
- data/package/vendor/stubs/wysihtml5.js +2 -0
- data/spec/factories/accounts.rb +37 -22
- data/spec/factories/audio_files.rb +2 -2
- data/spec/factories/authentication_tokens.rb +4 -4
- data/spec/factories/chapters.rb +4 -4
- data/spec/factories/comment_thread_reads.rb +10 -0
- data/spec/factories/comment_threads.rb +10 -0
- data/spec/factories/comments.rb +9 -0
- data/spec/factories/draft_entries.rb +14 -6
- data/spec/factories/edit_locks.rb +1 -1
- data/spec/factories/entries.rb +28 -19
- data/spec/factories/entry_translation_groups.rb +6 -0
- data/spec/factories/file_folders.rb +8 -0
- data/spec/factories/file_usages.rb +2 -1
- data/spec/factories/folders.rb +1 -1
- data/spec/factories/image_files.rb +2 -2
- data/spec/factories/pages.rb +3 -3
- data/spec/factories/published_entries.rb +28 -8
- data/spec/factories/revisions.rb +1 -1
- data/spec/factories/sites.rb +6 -0
- data/spec/factories/test_multi_attachment_files.rb +1 -1
- data/spec/factories/text_track_files.rb +1 -1
- data/spec/factories/uploadable_files.rb +1 -1
- data/spec/factories/users.rb +6 -6
- data/spec/factories/video_files.rb +2 -2
- data/spec/factories/widgets.rb +1 -1
- data/spec/fixtures/7x15_rotated.jpg +0 -0
- data/vendor/assets/javascripts/wysihtml-toolbar.js +19288 -0
- metadata +266 -92
- data/app/assets/stylesheets/pageflow/editor/select_button.scss +0 -51
- data/config/initializers/revision_components.rb +0 -5
- data/config/locales/twitter_to_x.de.yml +0 -6
- data/config/locales/twitter_to_x.en.yml +0 -6
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/generated_media_queries_helper.rb +0 -55
- data/entry_types/scrolled/config/locales/twitter_to_x.de.yml +0 -12
- data/entry_types/scrolled/config/locales/twitter_to_x.en.yml +0 -12
- data/entry_types/scrolled/config/locales/vr_image_projection.de.yml +0 -24
- data/entry_types/scrolled/config/locales/vr_image_projection.en.yml +0 -24
- data/entry_types/scrolled/package/frontend/EditableInlineText.module-ebd22921.js +0 -5497
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-b79159cc.js +0 -107
- data/entry_types/scrolled/package/frontend/Viewer-1ecf3375.js +0 -154
- data/entry_types/scrolled/package/frontend/Wavesurfer-7d9cf1b7.js +0 -333
- data/entry_types/scrolled/package/frontend/arrowRight-62998af9.js +0 -77
- data/entry_types/scrolled/package/frontend/components-024a9893.js +0 -2853
- data/entry_types/scrolled/package/frontend/createSuper-d0f30da3.js +0 -115
- data/entry_types/scrolled/package/frontend/i18n-ce13a8bf.js +0 -1129
- data/entry_types/scrolled/package/frontend/useContentElementEditorState-4f4c3cf6.js +0 -52
- data/lib/generators/pageflow/resque/templates/resque_enqueue_after_commit_patch.rb +0 -25
- data/package/vendor/jquery.minicolors.js +0 -1108
|
@@ -1,2853 +0,0 @@
|
|
|
1
|
-
import 'regenerator-runtime';
|
|
2
|
-
import { ae as ContentElementEditorCommandEmitterContext, b as usePostMessageListener, af as MotifAreaVisibilityProvider, ag as ForcePaddingContext, ah as ContentElementConfigurationUpdateContext, D as api, l as widths, ai as LayoutWithoutInlineEditing, ad as SectionThumbnail, aj as renderElement, ak as renderLeaf$1, H as useContentElementEditorCommandSubscription, a0 as Text$1, r as frontendStyles } from './EditableInlineText.module-ebd22921.js';
|
|
3
|
-
import 'pageflow/frontend';
|
|
4
|
-
import React, { useMemo, useState, useCallback, useContext, useRef, useEffect, createContext, memo } from 'react';
|
|
5
|
-
import { _ as _slicedToArray, p as useEntryStateDispatch, b as _defineProperty, e as _objectWithoutProperties, u as useI18n, D as updateContentElementConfiguration, o as useChapter, i as useFile, a as _objectSpread2, n as _toConsumableArray, F as _unsupportedIterableToArray } from './i18n-ce13a8bf.js';
|
|
6
|
-
import classNames from 'classnames';
|
|
7
|
-
import { C as ContentElementEditorStateContext, a as useContentElementEditorState } from './useContentElementEditorState-4f4c3cf6.js';
|
|
8
|
-
import './createSuper-d0f30da3.js';
|
|
9
|
-
import BackboneEvents from 'backbone-events-standalone';
|
|
10
|
-
import 'use-context-selector';
|
|
11
|
-
import 'reselect';
|
|
12
|
-
import 'slugify';
|
|
13
|
-
import 'i18n-js';
|
|
14
|
-
import 'striptags';
|
|
15
|
-
import 'react-measure';
|
|
16
|
-
import { P as PhonePlatformContext } from './PhonePlatformContext-4ec6b2de.js';
|
|
17
|
-
import { DndProvider, useDrop, useDrag } from 'react-dnd';
|
|
18
|
-
import { HTML5Backend } from 'react-dnd-html5-backend';
|
|
19
|
-
import { Range, Editor, Transforms, Node, Element, Path, Text, createEditor } from 'slate';
|
|
20
|
-
import { useSlate, ReactEditor, withReact, Slate, Editable } from 'slate-react';
|
|
21
|
-
import debounce from 'debounce';
|
|
22
|
-
|
|
23
|
-
var Context = React.createContext({});
|
|
24
|
-
function EditorStateProvider(props) {
|
|
25
|
-
var _useState = useState(null),
|
|
26
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
27
|
-
selection = _useState2[0],
|
|
28
|
-
setSelectionState = _useState2[1];
|
|
29
|
-
|
|
30
|
-
var setSelection = useCallback(function (selection) {
|
|
31
|
-
if (window.parent !== window) {
|
|
32
|
-
window.parent.postMessage({
|
|
33
|
-
type: 'SELECTED',
|
|
34
|
-
payload: selection || {}
|
|
35
|
-
}, window.location.origin);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
setSelectionState(selection);
|
|
39
|
-
}, []);
|
|
40
|
-
var value = useMemo(function () {
|
|
41
|
-
return {
|
|
42
|
-
selection: selection,
|
|
43
|
-
setSelection: setSelection
|
|
44
|
-
};
|
|
45
|
-
}, [setSelection, selection]);
|
|
46
|
-
return /*#__PURE__*/React.createElement(Context.Provider, {
|
|
47
|
-
value: value
|
|
48
|
-
}, props.children);
|
|
49
|
-
}
|
|
50
|
-
function useEditorSelection(options) {
|
|
51
|
-
var _useContext = useContext(Context),
|
|
52
|
-
selection = _useContext.selection,
|
|
53
|
-
setSelection = _useContext.setSelection;
|
|
54
|
-
|
|
55
|
-
var resetSelection = useCallback(function () {
|
|
56
|
-
setSelection(null);
|
|
57
|
-
}, [setSelection]);
|
|
58
|
-
var select = useCallback(function (selection) {
|
|
59
|
-
setSelection(selection || options);
|
|
60
|
-
}, [setSelection, options]);
|
|
61
|
-
return useMemo(function () {
|
|
62
|
-
return setSelection ? {
|
|
63
|
-
range: selection === null || selection === void 0 ? void 0 : selection.range,
|
|
64
|
-
isSelected: selection && options && selection.id === options.id && selection.type === options.type,
|
|
65
|
-
select: select,
|
|
66
|
-
resetSelection: resetSelection
|
|
67
|
-
} : {};
|
|
68
|
-
}, [options, selection, setSelection, select, resetSelection]);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function useContentElementEditorCommandEmitter() {
|
|
72
|
-
return useMemo(function () {
|
|
73
|
-
return Object.assign({}, BackboneEvents);
|
|
74
|
-
}, []);
|
|
75
|
-
}
|
|
76
|
-
function ContentElementEditorCommandSubscriptionProvider(_ref) {
|
|
77
|
-
var emitter = _ref.emitter,
|
|
78
|
-
children = _ref.children;
|
|
79
|
-
return /*#__PURE__*/React.createElement(ContentElementEditorCommandEmitterContext.Provider, {
|
|
80
|
-
value: emitter
|
|
81
|
-
}, children);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// the editor phone preview. Each ContentElementDecorator renders a
|
|
85
|
-
// `data-scrollpoint` attribute with a unique value on its wrapper
|
|
86
|
-
// div. Before toggling the phone preview mode, the `EntryPreviewView`
|
|
87
|
-
// sends a `SAVE_SCROLL_POINT` message. `getCurrentScrollPoint` looks
|
|
88
|
-
// through all DOM elements with `data-scrollpoint` attributes and
|
|
89
|
-
// stores the unique id of the element with the smallest non-negative
|
|
90
|
-
// y coordinate in the viewport (i.e. the first content element inside
|
|
91
|
-
// the viewport). `ScrollPointMessageHandler` responds with a
|
|
92
|
-
// `SAVED_SCROLL_POINT` message which makes `EntryPreviewView` toggle
|
|
93
|
-
// the preview mode. Once the preview has been resized,
|
|
94
|
-
// `EntryPreviewView` sends a `RESTORE_SCROLL_POINT`
|
|
95
|
-
// message. `restoreScrollPoint` looks up the new position of the
|
|
96
|
-
// element with the saved scroll point and scrolls it into view.
|
|
97
|
-
//
|
|
98
|
-
// When a content element is selected, we want to keep that element
|
|
99
|
-
// in the viewport instead. The `SelectionRect` therefore renders a
|
|
100
|
-
// `data-scrollpoint=selection` attribute. If an element with such an
|
|
101
|
-
// attribute is present, `getCurrentScrollPoint` prefers it over all
|
|
102
|
-
// other scroll points. Since text block elements render a selection
|
|
103
|
-
// rect around the current paragraph, scroll position is also
|
|
104
|
-
// preserved correctly inside long text blocks.
|
|
105
|
-
|
|
106
|
-
function ScrollPointMessageHandler() {
|
|
107
|
-
var scrollPoint = useRef();
|
|
108
|
-
var receiveMessage = useCallback(function (data) {
|
|
109
|
-
if (data.type === 'SAVE_SCROLL_POINT') {
|
|
110
|
-
scrollPoint.current = getCurrentScrollPoint();
|
|
111
|
-
window.parent.postMessage({
|
|
112
|
-
type: 'SAVED_SCROLL_POINT'
|
|
113
|
-
}, window.location.origin);
|
|
114
|
-
} else if (data.type === 'RESTORE_SCROLL_POINT') {
|
|
115
|
-
if (scrollPoint.current) {
|
|
116
|
-
restoreScrollPoint(scrollPoint.current);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}, []);
|
|
120
|
-
usePostMessageListener(receiveMessage);
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function getCurrentScrollPoint() {
|
|
125
|
-
var scrollPointElement = getSelectionScrollPointElement() || getScrollPointElementWithMinimumTopPositionInViewport();
|
|
126
|
-
return scrollPointElement === null || scrollPointElement === void 0 ? void 0 : scrollPointElement.getAttribute('data-scrollpoint');
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function getSelectionScrollPointElement() {
|
|
130
|
-
return document.querySelector('[data-scrollpoint=selection]');
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function getScrollPointElementWithMinimumTopPositionInViewport() {
|
|
134
|
-
var minTop = Infinity;
|
|
135
|
-
var scrollPointElement;
|
|
136
|
-
var scrollPoints = document.querySelectorAll('[data-scrollpoint]');
|
|
137
|
-
|
|
138
|
-
for (var i = 0; i < scrollPoints.length; i++) {
|
|
139
|
-
var rect = scrollPoints[i].getBoundingClientRect();
|
|
140
|
-
|
|
141
|
-
if (rect.top > 0 && rect.top < minTop) {
|
|
142
|
-
minTop = rect.top;
|
|
143
|
-
scrollPointElement = scrollPoints[i];
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return scrollPointElement;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function restoreScrollPoint(name) {
|
|
151
|
-
var element = document.querySelector("[data-scrollpoint=\"".concat(name, "\"]"));
|
|
152
|
-
|
|
153
|
-
if (element) {
|
|
154
|
-
window.scrollTo({
|
|
155
|
-
top: element.getBoundingClientRect().top + window.scrollY - 100,
|
|
156
|
-
behavior: 'smooth'
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function ContentDecorator(props) {
|
|
162
|
-
var contentElementEditorCommandEmitter = useContentElementEditorCommandEmitter();
|
|
163
|
-
return /*#__PURE__*/React.createElement(EditorStateProvider, null, /*#__PURE__*/React.createElement(MessageHandler, {
|
|
164
|
-
contentElementEditorCommandEmitter: contentElementEditorCommandEmitter
|
|
165
|
-
}), /*#__PURE__*/React.createElement(ScrollPointMessageHandler, null), /*#__PURE__*/React.createElement(ContentElementEditorCommandSubscriptionProvider, {
|
|
166
|
-
emitter: contentElementEditorCommandEmitter
|
|
167
|
-
}, /*#__PURE__*/React.createElement(DndProvider, {
|
|
168
|
-
backend: HTML5Backend
|
|
169
|
-
}, props.children)));
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function MessageHandler(_ref) {
|
|
173
|
-
var contentElementEditorCommandEmitter = _ref.contentElementEditorCommandEmitter;
|
|
174
|
-
|
|
175
|
-
var _useEditorSelection = useEditorSelection(),
|
|
176
|
-
select = _useEditorSelection.select;
|
|
177
|
-
|
|
178
|
-
var dispatch = useEntryStateDispatch();
|
|
179
|
-
var receiveMessage = useCallback(function (data) {
|
|
180
|
-
if (data.type === 'ACTION') {
|
|
181
|
-
dispatch(data.payload);
|
|
182
|
-
} else if (data.type === 'SELECT') {
|
|
183
|
-
select(data.payload);
|
|
184
|
-
} else if (data.type === 'CONTENT_ELEMENT_EDITOR_COMMAND') {
|
|
185
|
-
contentElementEditorCommandEmitter.trigger("command:".concat(data.payload.contentElementId), data.payload.command);
|
|
186
|
-
}
|
|
187
|
-
}, [dispatch, select, contentElementEditorCommandEmitter]);
|
|
188
|
-
usePostMessageListener(receiveMessage);
|
|
189
|
-
useEffect(function () {
|
|
190
|
-
if (window.parent !== window) {
|
|
191
|
-
window.parent.postMessage({
|
|
192
|
-
type: 'READY'
|
|
193
|
-
}, window.location.origin);
|
|
194
|
-
}
|
|
195
|
-
}, []);
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
var styles = {"wrapper":"SectionDecorator-module_wrapper__3sTk3","selected":"SectionDecorator-module_selected__1gcmF","transitionSelected":"SectionDecorator-module_transitionSelected__Wklk6","controls":"SectionDecorator-module_controls__LVEJG","transitionToolbar-after":"SectionDecorator-module_transitionToolbar-after__2_DVO SectionDecorator-module_toolbar__2Va1D","toolbar":"SectionDecorator-module_toolbar__2Va1D","transitionToolbar-before":"SectionDecorator-module_transitionToolbar-before__KipOO SectionDecorator-module_toolbar__2Va1D"};
|
|
200
|
-
|
|
201
|
-
var styles$1 = {"wrapper":"ContentElementDecorator-module_wrapper__NQgFN"};
|
|
202
|
-
|
|
203
|
-
var styles$2 = {"Toolbar":"Toolbar-module_Toolbar__1INSj","button":"Toolbar-module_button__de5BW","activeButton":"Toolbar-module_activeButton__2sOLP","collapsible":"Toolbar-module_collapsible__3sivb"};
|
|
204
|
-
|
|
205
|
-
function Toolbar(_ref) {
|
|
206
|
-
var buttons = _ref.buttons,
|
|
207
|
-
onButtonClick = _ref.onButtonClick,
|
|
208
|
-
iconSize = _ref.iconSize,
|
|
209
|
-
collapsible = _ref.collapsible;
|
|
210
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
211
|
-
className: classNames(styles$2.Toolbar, _defineProperty({}, styles$2.collapsible, collapsible)),
|
|
212
|
-
contentEditable: false
|
|
213
|
-
}, buttons.map(function (button) {
|
|
214
|
-
var Icon = button.icon;
|
|
215
|
-
return /*#__PURE__*/React.createElement("button", {
|
|
216
|
-
key: button.name,
|
|
217
|
-
title: button.text,
|
|
218
|
-
className: classNames(styles$2.button, _defineProperty({}, styles$2.activeButton, button.active)),
|
|
219
|
-
onMouseDown: function onMouseDown(event) {
|
|
220
|
-
event.preventDefault();
|
|
221
|
-
event.stopPropagation();
|
|
222
|
-
onButtonClick(button.name);
|
|
223
|
-
}
|
|
224
|
-
}, /*#__PURE__*/React.createElement(Icon, {
|
|
225
|
-
width: iconSize,
|
|
226
|
-
height: iconSize
|
|
227
|
-
}));
|
|
228
|
-
}));
|
|
229
|
-
}
|
|
230
|
-
Toolbar.defaultProps = {
|
|
231
|
-
iconSize: 15
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
function _extends() {
|
|
235
|
-
_extends = Object.assign || function (target) {
|
|
236
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
237
|
-
var source = arguments[i];
|
|
238
|
-
|
|
239
|
-
for (var key in source) {
|
|
240
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
241
|
-
target[key] = source[key];
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return target;
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
return _extends.apply(this, arguments);
|
|
250
|
-
}
|
|
251
|
-
var transitionIcon = (function (_ref) {
|
|
252
|
-
var _ref$styles = _ref.styles,
|
|
253
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
254
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
255
|
-
|
|
256
|
-
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
257
|
-
"aria-hidden": "true",
|
|
258
|
-
"data-prefix": "fas",
|
|
259
|
-
"data-icon": "random",
|
|
260
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-random"] || "fa-random") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
261
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
262
|
-
viewBox: "0 0 512 512"
|
|
263
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
264
|
-
fill: "currentColor",
|
|
265
|
-
d: "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 01-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 00122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 00-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"
|
|
266
|
-
}));
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
function SectionDecorator(_ref) {
|
|
270
|
-
var section = _ref.section,
|
|
271
|
-
contentElements = _ref.contentElements,
|
|
272
|
-
children = _ref.children;
|
|
273
|
-
|
|
274
|
-
var _useI18n = useI18n({
|
|
275
|
-
locale: 'ui'
|
|
276
|
-
}),
|
|
277
|
-
t = _useI18n.t;
|
|
278
|
-
|
|
279
|
-
var _useEditorSelection = useEditorSelection({
|
|
280
|
-
id: section.id,
|
|
281
|
-
type: 'sectionSettings'
|
|
282
|
-
}),
|
|
283
|
-
isSelected = _useEditorSelection.isSelected,
|
|
284
|
-
select = _useEditorSelection.select,
|
|
285
|
-
resetSelection = _useEditorSelection.resetSelection;
|
|
286
|
-
|
|
287
|
-
var transitionSelection = useEditorSelection({
|
|
288
|
-
id: section.id,
|
|
289
|
-
type: 'sectionTransition'
|
|
290
|
-
});
|
|
291
|
-
var nextTransitionSelection = useEditorSelection({
|
|
292
|
-
id: section.nextSection && section.nextSection.id,
|
|
293
|
-
type: 'sectionTransition'
|
|
294
|
-
});
|
|
295
|
-
var lastContentElement = contentElements[contentElements.length - 1];
|
|
296
|
-
|
|
297
|
-
var _useEditorSelection2 = useEditorSelection({
|
|
298
|
-
id: lastContentElement && lastContentElement.id,
|
|
299
|
-
type: 'contentElement'
|
|
300
|
-
}),
|
|
301
|
-
isLastContentElementSelected = _useEditorSelection2.isSelected;
|
|
302
|
-
|
|
303
|
-
function selectIfOutsideContentItem(event) {
|
|
304
|
-
if (!event.target.closest(".".concat(styles$1.wrapper)) && !event.target.closest('#fullscreenRoot')) {
|
|
305
|
-
isSelected ? resetSelection() : select();
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
310
|
-
"aria-label": t('pageflow_scrolled.inline_editing.select_section'),
|
|
311
|
-
className: className(isSelected, transitionSelection),
|
|
312
|
-
onMouseDown: selectIfOutsideContentItem
|
|
313
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
314
|
-
className: styles.controls
|
|
315
|
-
}, renderEditTransitionButton({
|
|
316
|
-
id: section.previousSection && section.id,
|
|
317
|
-
selection: transitionSelection,
|
|
318
|
-
position: 'before'
|
|
319
|
-
}), renderEditTransitionButton({
|
|
320
|
-
id: section.nextSection && section.nextSection.id,
|
|
321
|
-
selection: nextTransitionSelection,
|
|
322
|
-
position: 'after'
|
|
323
|
-
})), /*#__PURE__*/React.createElement(MotifAreaVisibilityProvider, {
|
|
324
|
-
visible: isSelected
|
|
325
|
-
}, /*#__PURE__*/React.createElement(ForcePaddingContext.Provider, {
|
|
326
|
-
value: isLastContentElementSelected || isSelected
|
|
327
|
-
}, children)));
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
function className(isSectionSelected, transitionSelection) {
|
|
331
|
-
var _classNames;
|
|
332
|
-
|
|
333
|
-
return classNames(styles.wrapper, (_classNames = {}, _defineProperty(_classNames, styles.selected, isSectionSelected), _defineProperty(_classNames, styles.transitionSelected, transitionSelection.isSelected), _classNames));
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
function renderEditTransitionButton(_ref2) {
|
|
337
|
-
var id = _ref2.id,
|
|
338
|
-
position = _ref2.position,
|
|
339
|
-
selection = _ref2.selection;
|
|
340
|
-
|
|
341
|
-
if (!id) {
|
|
342
|
-
return null;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
346
|
-
className: styles["transitionToolbar-".concat(position)]
|
|
347
|
-
}, /*#__PURE__*/React.createElement(EditTransitionButton, {
|
|
348
|
-
id: id,
|
|
349
|
-
selection: selection,
|
|
350
|
-
position: position
|
|
351
|
-
}));
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
function EditTransitionButton(_ref3) {
|
|
355
|
-
var id = _ref3.id,
|
|
356
|
-
position = _ref3.position,
|
|
357
|
-
selection = _ref3.selection;
|
|
358
|
-
|
|
359
|
-
var _useI18n2 = useI18n({
|
|
360
|
-
locale: 'ui'
|
|
361
|
-
}),
|
|
362
|
-
t = _useI18n2.t;
|
|
363
|
-
|
|
364
|
-
return /*#__PURE__*/React.createElement(EditSectionButton, {
|
|
365
|
-
id: id,
|
|
366
|
-
selection: selection,
|
|
367
|
-
text: t("pageflow_scrolled.inline_editing.edit_section_transition_".concat(position)),
|
|
368
|
-
icon: transitionIcon
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
function EditSectionButton(_ref4) {
|
|
373
|
-
var id = _ref4.id,
|
|
374
|
-
selection = _ref4.selection,
|
|
375
|
-
icon = _ref4.icon,
|
|
376
|
-
text = _ref4.text;
|
|
377
|
-
return /*#__PURE__*/React.createElement(Toolbar, {
|
|
378
|
-
buttons: [{
|
|
379
|
-
name: 'button',
|
|
380
|
-
active: selection.isSelected,
|
|
381
|
-
icon: icon,
|
|
382
|
-
text: text
|
|
383
|
-
}],
|
|
384
|
-
iconSize: 20,
|
|
385
|
-
onButtonClick: function onButtonClick() {
|
|
386
|
-
return selection.select();
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
var styles$3 = {"selectionWidth":"1px","selectionPadding":"-6px","selectionPadding2":"-0.5em","main":"SelectionRect-module_main__3AOhG","draggable":"SelectionRect-module_draggable__3Qp53","full":"SelectionRect-module_full__3tsQF","selected":"SelectionRect-module_selected__1PhM6","toolbar":"SelectionRect-module_toolbar__3nPrd","insert":"SelectionRect-module_insert__w0Tl0","insertHovered":"SelectionRect-module_insertHovered__VTsDD","start":"SelectionRect-module_start__3_nAf","insert-before":"SelectionRect-module_insert-before__2Tyq5 SelectionRect-module_insert__w0Tl0","end":"SelectionRect-module_end__3qOoK","insert-after":"SelectionRect-module_insert-after__3FJ4R SelectionRect-module_insert__w0Tl0","insertButton":"SelectionRect-module_insertButton__1g-ZG","dragHandle":"SelectionRect-module_dragHandle__2vVhP"};
|
|
392
|
-
|
|
393
|
-
function _extends$1() {
|
|
394
|
-
_extends$1 = Object.assign || function (target) {
|
|
395
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
396
|
-
var source = arguments[i];
|
|
397
|
-
|
|
398
|
-
for (var key in source) {
|
|
399
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
400
|
-
target[key] = source[key];
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
return target;
|
|
406
|
-
};
|
|
407
|
-
|
|
408
|
-
return _extends$1.apply(this, arguments);
|
|
409
|
-
}
|
|
410
|
-
var PlusIcon = (function (_ref) {
|
|
411
|
-
var _ref$styles = _ref.styles,
|
|
412
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
413
|
-
|
|
414
|
-
return /*#__PURE__*/React.createElement("svg", _extends$1({
|
|
415
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
416
|
-
viewBox: "0 0 512 512"
|
|
417
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
418
|
-
d: "M256 0C114.844 0 0 114.839 0 256s114.844 256 256 256 256-114.839 256-256S397.156 0 256 0zm133.594 272.699H272.699v116.895c0 9.225-7.48 16.699-16.699 16.699-9.219 0-16.699-7.475-16.699-16.699V272.699H122.406c-9.219 0-16.699-7.475-16.699-16.699 0-9.225 7.48-16.699 16.699-16.699h116.895V122.406c0-9.225 7.48-16.699 16.699-16.699 9.219 0 16.699 7.475 16.699 16.699v116.895h116.895c9.219 0 16.699 7.475 16.699 16.699.001 9.225-7.48 16.699-16.699 16.699z"
|
|
419
|
-
}));
|
|
420
|
-
});
|
|
421
|
-
|
|
422
|
-
function _extends$2() {
|
|
423
|
-
_extends$2 = Object.assign || function (target) {
|
|
424
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
425
|
-
var source = arguments[i];
|
|
426
|
-
|
|
427
|
-
for (var key in source) {
|
|
428
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
429
|
-
target[key] = source[key];
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
return target;
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
return _extends$2.apply(this, arguments);
|
|
438
|
-
}
|
|
439
|
-
var MoveIcon = (function (_ref) {
|
|
440
|
-
var _ref$styles = _ref.styles,
|
|
441
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
442
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
443
|
-
|
|
444
|
-
return /*#__PURE__*/React.createElement("svg", _extends$2({
|
|
445
|
-
"aria-hidden": "true",
|
|
446
|
-
"data-prefix": "fas",
|
|
447
|
-
"data-icon": "arrows-alt",
|
|
448
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-arrows-alt"] || "fa-arrows-alt") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
449
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
450
|
-
viewBox: "0 0 512 512"
|
|
451
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
452
|
-
fill: "currentColor",
|
|
453
|
-
d: "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"
|
|
454
|
-
}));
|
|
455
|
-
});
|
|
456
|
-
|
|
457
|
-
function SelectionRect(props) {
|
|
458
|
-
var _classNames;
|
|
459
|
-
|
|
460
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
461
|
-
className: classNames(styles$3.main, (_classNames = {}, _defineProperty(_classNames, styles$3.full, props.full), _defineProperty(_classNames, styles$3.selected, props.selected), _defineProperty(_classNames, styles$3.draggable, props.drag), _defineProperty(_classNames, styles$3.start, props.selected && props.start), _defineProperty(_classNames, styles$3.end, props.selected && props.end), _classNames)),
|
|
462
|
-
"aria-label": props.ariaLabel,
|
|
463
|
-
"data-scrollpoint": props.scrollPoint ? 'selection' : undefined,
|
|
464
|
-
onClick: props.onClick
|
|
465
|
-
}, renderDragHandle(props), renderToolbar(props), /*#__PURE__*/React.createElement(InsertButton, Object.assign({}, props, {
|
|
466
|
-
at: "before"
|
|
467
|
-
})), props.children, /*#__PURE__*/React.createElement(InsertButton, Object.assign({}, props, {
|
|
468
|
-
at: "after"
|
|
469
|
-
})));
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
function InsertButton(props) {
|
|
473
|
-
var _useState = useState(false),
|
|
474
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
475
|
-
insertHovered = _useState2[0],
|
|
476
|
-
setInsertHovered = _useState2[1];
|
|
477
|
-
|
|
478
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
479
|
-
className: classNames(styles$3["insert-".concat(props.at)], _defineProperty({}, styles$3.insertHovered, insertHovered)),
|
|
480
|
-
contentEditable: false
|
|
481
|
-
}, /*#__PURE__*/React.createElement("button", {
|
|
482
|
-
className: styles$3.insertButton,
|
|
483
|
-
title: props.insertButtonTitles && props.insertButtonTitles[props.at],
|
|
484
|
-
onClick: function onClick() {
|
|
485
|
-
return props.onInsertButtonClick(props.at);
|
|
486
|
-
},
|
|
487
|
-
onMouseEnter: function onMouseEnter() {
|
|
488
|
-
return setInsertHovered(true);
|
|
489
|
-
},
|
|
490
|
-
onMouseLeave: function onMouseLeave() {
|
|
491
|
-
return setInsertHovered(false);
|
|
492
|
-
}
|
|
493
|
-
}, /*#__PURE__*/React.createElement(PlusIcon, {
|
|
494
|
-
width: 15,
|
|
495
|
-
height: 15,
|
|
496
|
-
fill: "currentColor"
|
|
497
|
-
})));
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
function renderDragHandle(_ref) {
|
|
501
|
-
var drag = _ref.drag,
|
|
502
|
-
dragHandleTitle = _ref.dragHandleTitle;
|
|
503
|
-
|
|
504
|
-
if (!drag) {
|
|
505
|
-
return null;
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
509
|
-
ref: drag,
|
|
510
|
-
className: styles$3.dragHandle,
|
|
511
|
-
title: dragHandleTitle
|
|
512
|
-
}, /*#__PURE__*/React.createElement(MoveIcon, null));
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
function renderToolbar(_ref2) {
|
|
516
|
-
var toolbarButtons = _ref2.toolbarButtons,
|
|
517
|
-
onToolbarButtonClick = _ref2.onToolbarButtonClick,
|
|
518
|
-
start = _ref2.start;
|
|
519
|
-
|
|
520
|
-
if (toolbarButtons && start) {
|
|
521
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
522
|
-
className: styles$3.toolbar
|
|
523
|
-
}, /*#__PURE__*/React.createElement(Toolbar, {
|
|
524
|
-
buttons: toolbarButtons,
|
|
525
|
-
collapsible: true,
|
|
526
|
-
onButtonClick: onToolbarButtonClick
|
|
527
|
-
}));
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
SelectionRect.defaultProps = {
|
|
532
|
-
start: true,
|
|
533
|
-
end: true
|
|
534
|
-
};
|
|
535
|
-
|
|
536
|
-
var styles$4 = {"target":"DropTargets-module_target__Z2N2d","isOver":"DropTargets-module_isOver__3ksFy","before":"DropTargets-module_before__cAXo1 DropTargets-module_target__Z2N2d","after":"DropTargets-module_after__2Q8QU DropTargets-module_target__Z2N2d"};
|
|
537
|
-
|
|
538
|
-
function DropTargets(_ref) {
|
|
539
|
-
var accept = _ref.accept,
|
|
540
|
-
_canDrop = _ref.canDrop,
|
|
541
|
-
onDrop = _ref.onDrop;
|
|
542
|
-
|
|
543
|
-
var _useDrop = useDrop({
|
|
544
|
-
accept: accept,
|
|
545
|
-
canDrop: function canDrop(item) {
|
|
546
|
-
return _canDrop({
|
|
547
|
-
at: 'before',
|
|
548
|
-
id: item.id
|
|
549
|
-
});
|
|
550
|
-
},
|
|
551
|
-
collect: function collect(monitor) {
|
|
552
|
-
return {
|
|
553
|
-
canDropBefore: monitor.canDrop(),
|
|
554
|
-
isBefore: monitor.isOver() && monitor.canDrop()
|
|
555
|
-
};
|
|
556
|
-
},
|
|
557
|
-
drop: function drop(item) {
|
|
558
|
-
return onDrop({
|
|
559
|
-
at: 'before',
|
|
560
|
-
id: item.id,
|
|
561
|
-
range: item.range
|
|
562
|
-
});
|
|
563
|
-
}
|
|
564
|
-
}),
|
|
565
|
-
_useDrop2 = _slicedToArray(_useDrop, 2),
|
|
566
|
-
_useDrop2$ = _useDrop2[0],
|
|
567
|
-
canDropBefore = _useDrop2$.canDropBefore,
|
|
568
|
-
isBefore = _useDrop2$.isBefore,
|
|
569
|
-
dropBefore = _useDrop2[1];
|
|
570
|
-
|
|
571
|
-
var _useDrop3 = useDrop({
|
|
572
|
-
accept: accept,
|
|
573
|
-
canDrop: function canDrop(item) {
|
|
574
|
-
return _canDrop({
|
|
575
|
-
at: 'after',
|
|
576
|
-
id: item.id
|
|
577
|
-
});
|
|
578
|
-
},
|
|
579
|
-
collect: function collect(monitor) {
|
|
580
|
-
return {
|
|
581
|
-
canDropAfter: monitor.canDrop(),
|
|
582
|
-
isAfter: monitor.isOver() && monitor.canDrop()
|
|
583
|
-
};
|
|
584
|
-
},
|
|
585
|
-
drop: function drop(item) {
|
|
586
|
-
return onDrop({
|
|
587
|
-
at: 'after',
|
|
588
|
-
id: item.id,
|
|
589
|
-
range: item.range
|
|
590
|
-
});
|
|
591
|
-
}
|
|
592
|
-
}),
|
|
593
|
-
_useDrop4 = _slicedToArray(_useDrop3, 2),
|
|
594
|
-
_useDrop4$ = _useDrop4[0],
|
|
595
|
-
canDropAfter = _useDrop4$.canDropAfter,
|
|
596
|
-
isAfter = _useDrop4$.isAfter,
|
|
597
|
-
dropAfter = _useDrop4[1];
|
|
598
|
-
|
|
599
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, canDropBefore && /*#__PURE__*/React.createElement("div", {
|
|
600
|
-
ref: dropBefore,
|
|
601
|
-
"data-testid": "drop-before",
|
|
602
|
-
className: classNames(styles$4.before, _defineProperty({}, styles$4.isOver, isBefore))
|
|
603
|
-
}), canDropAfter && /*#__PURE__*/React.createElement("div", {
|
|
604
|
-
ref: dropAfter,
|
|
605
|
-
"data-testid": "drop-after",
|
|
606
|
-
title: "bar",
|
|
607
|
-
className: classNames(styles$4.after, _defineProperty({}, styles$4.isOver, isAfter))
|
|
608
|
-
}));
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
function postInsertContentElementMessage(_ref) {
|
|
612
|
-
var id = _ref.id,
|
|
613
|
-
at = _ref.at,
|
|
614
|
-
splitPoint = _ref.splitPoint;
|
|
615
|
-
window.parent.postMessage({
|
|
616
|
-
type: 'INSERT_CONTENT_ELEMENT',
|
|
617
|
-
payload: {
|
|
618
|
-
id: id,
|
|
619
|
-
at: at,
|
|
620
|
-
splitPoint: splitPoint
|
|
621
|
-
}
|
|
622
|
-
}, window.location.origin);
|
|
623
|
-
}
|
|
624
|
-
function postMoveContentElementMessage(_ref2) {
|
|
625
|
-
var id = _ref2.id,
|
|
626
|
-
range = _ref2.range,
|
|
627
|
-
to = _ref2.to;
|
|
628
|
-
window.parent.postMessage({
|
|
629
|
-
type: 'MOVE_CONTENT_ELEMENT',
|
|
630
|
-
payload: {
|
|
631
|
-
id: id,
|
|
632
|
-
range: range,
|
|
633
|
-
to: to
|
|
634
|
-
}
|
|
635
|
-
}, window.location.origin);
|
|
636
|
-
}
|
|
637
|
-
function postUpdateContentElementMessage(_ref3) {
|
|
638
|
-
var id = _ref3.id,
|
|
639
|
-
configuration = _ref3.configuration;
|
|
640
|
-
window.parent.postMessage({
|
|
641
|
-
type: 'UPDATE_CONTENT_ELEMENT',
|
|
642
|
-
payload: {
|
|
643
|
-
id: id,
|
|
644
|
-
configuration: configuration
|
|
645
|
-
}
|
|
646
|
-
}, window.location.origin);
|
|
647
|
-
}
|
|
648
|
-
function postUpdateTransientContentElementStateMessage(_ref4) {
|
|
649
|
-
var id = _ref4.id,
|
|
650
|
-
state = _ref4.state;
|
|
651
|
-
window.parent.postMessage({
|
|
652
|
-
type: 'UPDATE_TRANSIENT_CONTENT_ELEMENT_STATE',
|
|
653
|
-
payload: {
|
|
654
|
-
id: id,
|
|
655
|
-
state: state
|
|
656
|
-
}
|
|
657
|
-
}, window.location.origin);
|
|
658
|
-
}
|
|
659
|
-
function postSelectLinkDestinationMessage() {
|
|
660
|
-
window.parent.postMessage({
|
|
661
|
-
type: 'SELECT_LINK_DESTINATION'
|
|
662
|
-
}, window.location.origin);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
function ContentElementConfigurationUpdateProvider(_ref) {
|
|
666
|
-
var id = _ref.id,
|
|
667
|
-
permaId = _ref.permaId,
|
|
668
|
-
children = _ref.children;
|
|
669
|
-
var dispatch = useEntryStateDispatch();
|
|
670
|
-
var update = useCallback(function (configuration) {
|
|
671
|
-
postUpdateContentElementMessage({
|
|
672
|
-
id: id,
|
|
673
|
-
configuration: configuration
|
|
674
|
-
});
|
|
675
|
-
updateContentElementConfiguration({
|
|
676
|
-
dispatch: dispatch,
|
|
677
|
-
permaId: permaId,
|
|
678
|
-
configuration: configuration
|
|
679
|
-
});
|
|
680
|
-
}, [dispatch, permaId, id]);
|
|
681
|
-
return /*#__PURE__*/React.createElement(ContentElementConfigurationUpdateContext.Provider, {
|
|
682
|
-
value: update
|
|
683
|
-
}, children);
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
function ContentElementEditorStateProvider(_ref) {
|
|
687
|
-
var id = _ref.id,
|
|
688
|
-
children = _ref.children;
|
|
689
|
-
|
|
690
|
-
var _useEditorSelection = useEditorSelection({
|
|
691
|
-
id: id,
|
|
692
|
-
type: 'contentElement'
|
|
693
|
-
}),
|
|
694
|
-
isSelected = _useEditorSelection.isSelected,
|
|
695
|
-
select = _useEditorSelection.select,
|
|
696
|
-
range = _useEditorSelection.range;
|
|
697
|
-
|
|
698
|
-
var previousTransientState = useRef({});
|
|
699
|
-
var setTransientState = useCallback(function (state) {
|
|
700
|
-
if (!shallowEqual(state, previousTransientState.current)) {
|
|
701
|
-
postUpdateTransientContentElementStateMessage({
|
|
702
|
-
id: id,
|
|
703
|
-
state: state
|
|
704
|
-
});
|
|
705
|
-
previousTransientState.current = state;
|
|
706
|
-
}
|
|
707
|
-
}, [id]);
|
|
708
|
-
var value = useMemo(function () {
|
|
709
|
-
return {
|
|
710
|
-
isEditable: true,
|
|
711
|
-
select: select,
|
|
712
|
-
isSelected: isSelected,
|
|
713
|
-
range: range,
|
|
714
|
-
setTransientState: setTransientState
|
|
715
|
-
};
|
|
716
|
-
}, [select, isSelected, range, setTransientState]);
|
|
717
|
-
return /*#__PURE__*/React.createElement(ContentElementEditorStateContext.Provider, {
|
|
718
|
-
value: value
|
|
719
|
-
}, children);
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
function shallowEqual(obj1, obj2) {
|
|
723
|
-
return Object.keys(obj1).length === Object.keys(obj2).length && Object.keys(obj1).every(function (key) {
|
|
724
|
-
return Object.prototype.hasOwnProperty.call(obj2, key) && obj1[key] === obj2[key];
|
|
725
|
-
});
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
function ContentElementDecorator(props) {
|
|
729
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
730
|
-
className: styles$1.wrapper,
|
|
731
|
-
"data-scrollpoint": props.id
|
|
732
|
-
}, /*#__PURE__*/React.createElement(ContentElementEditorStateProvider, {
|
|
733
|
-
id: props.id
|
|
734
|
-
}, /*#__PURE__*/React.createElement(OptionalSelectionRect, props, /*#__PURE__*/React.createElement(ContentElementConfigurationUpdateProvider, {
|
|
735
|
-
id: props.id,
|
|
736
|
-
permaId: props.permaId
|
|
737
|
-
}, props.children))));
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
function OptionalSelectionRect(props) {
|
|
741
|
-
var _ref = api.contentElementTypes.getOptions(props.type) || {},
|
|
742
|
-
customSelectionRect = _ref.customSelectionRect;
|
|
743
|
-
|
|
744
|
-
if (customSelectionRect) {
|
|
745
|
-
return props.children;
|
|
746
|
-
} else {
|
|
747
|
-
return /*#__PURE__*/React.createElement(DefaultSelectionRect, props, props.children);
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
function DefaultSelectionRect(props) {
|
|
752
|
-
var _useContentElementEdi = useContentElementEditorState(),
|
|
753
|
-
isSelected = _useContentElementEdi.isSelected,
|
|
754
|
-
select = _useContentElementEdi.select;
|
|
755
|
-
|
|
756
|
-
var _useI18n = useI18n({
|
|
757
|
-
locale: 'ui'
|
|
758
|
-
}),
|
|
759
|
-
t = _useI18n.t;
|
|
760
|
-
|
|
761
|
-
var _useDrag = useDrag({
|
|
762
|
-
item: {
|
|
763
|
-
type: 'contentElement',
|
|
764
|
-
id: props.id
|
|
765
|
-
}
|
|
766
|
-
}),
|
|
767
|
-
_useDrag2 = _slicedToArray(_useDrag, 3),
|
|
768
|
-
drag = _useDrag2[1],
|
|
769
|
-
preview = _useDrag2[2];
|
|
770
|
-
|
|
771
|
-
return /*#__PURE__*/React.createElement(SelectionRect, {
|
|
772
|
-
selected: isSelected,
|
|
773
|
-
scrollPoint: isSelected,
|
|
774
|
-
drag: drag,
|
|
775
|
-
dragHandleTitle: t('pageflow_scrolled.inline_editing.drag_content_element'),
|
|
776
|
-
full: props.width === widths.full || props.customMargin,
|
|
777
|
-
ariaLabel: t('pageflow_scrolled.inline_editing.select_content_element'),
|
|
778
|
-
insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
|
|
779
|
-
onClick: function onClick() {
|
|
780
|
-
return select();
|
|
781
|
-
},
|
|
782
|
-
onInsertButtonClick: function onInsertButtonClick(at) {
|
|
783
|
-
return postInsertContentElementMessage({
|
|
784
|
-
id: props.id,
|
|
785
|
-
at: at
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
789
|
-
ref: preview
|
|
790
|
-
}, props.children), /*#__PURE__*/React.createElement(DropTargets, {
|
|
791
|
-
accept: "contentElement",
|
|
792
|
-
canDrop: function canDrop(_ref2) {
|
|
793
|
-
var id = _ref2.id;
|
|
794
|
-
return id !== props.id;
|
|
795
|
-
},
|
|
796
|
-
onDrop: function onDrop(_ref3) {
|
|
797
|
-
var id = _ref3.id,
|
|
798
|
-
range = _ref3.range,
|
|
799
|
-
at = _ref3.at;
|
|
800
|
-
return postMoveContentElementMessage({
|
|
801
|
-
id: id,
|
|
802
|
-
range: range,
|
|
803
|
-
to: {
|
|
804
|
-
id: props.id,
|
|
805
|
-
at: at
|
|
806
|
-
}
|
|
807
|
-
});
|
|
808
|
-
}
|
|
809
|
-
}));
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
var styles$5 = {"container":"ContentElementInsertButton-module_container__3dvUS","hovered":"ContentElementInsertButton-module_hovered__3Pggi","button":"ContentElementInsertButton-module_button__2-eE2"};
|
|
813
|
-
|
|
814
|
-
function ContentElementInsertButton(_ref) {
|
|
815
|
-
var onClick = _ref.onClick;
|
|
816
|
-
|
|
817
|
-
var _useState = useState(),
|
|
818
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
819
|
-
hovered = _useState2[0],
|
|
820
|
-
setHovered = _useState2[1];
|
|
821
|
-
|
|
822
|
-
var _useI18n = useI18n({
|
|
823
|
-
locale: 'ui'
|
|
824
|
-
}),
|
|
825
|
-
t = _useI18n.t;
|
|
826
|
-
|
|
827
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
828
|
-
className: classNames(styles$5.container, _defineProperty({}, styles$5.hovered, hovered))
|
|
829
|
-
}, /*#__PURE__*/React.createElement("button", {
|
|
830
|
-
className: styles$5.button,
|
|
831
|
-
title: t('pageflow_scrolled.inline_editing.add_content_element'),
|
|
832
|
-
onClick: onClick,
|
|
833
|
-
onMouseDown: function onMouseDown(event) {
|
|
834
|
-
return event.stopPropagation();
|
|
835
|
-
},
|
|
836
|
-
onMouseEnter: function onMouseEnter() {
|
|
837
|
-
return setHovered(true);
|
|
838
|
-
},
|
|
839
|
-
onMouseLeave: function onMouseLeave() {
|
|
840
|
-
return setHovered(false);
|
|
841
|
-
}
|
|
842
|
-
}, /*#__PURE__*/React.createElement(PlusIcon, {
|
|
843
|
-
width: 15,
|
|
844
|
-
height: 15,
|
|
845
|
-
fill: "currentColor"
|
|
846
|
-
})));
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
function LayoutWithPlaceholder(props) {
|
|
850
|
-
var _useEditorSelection = useEditorSelection({
|
|
851
|
-
id: props.sectionId,
|
|
852
|
-
type: 'section'
|
|
853
|
-
}),
|
|
854
|
-
isSelected = _useEditorSelection.isSelected;
|
|
855
|
-
|
|
856
|
-
var _useEditorSelection2 = useEditorSelection({
|
|
857
|
-
id: props.sectionId,
|
|
858
|
-
type: 'sectionSettings'
|
|
859
|
-
}),
|
|
860
|
-
settingsSelected = _useEditorSelection2.isSelected;
|
|
861
|
-
|
|
862
|
-
var placeholder = isSelected || settingsSelected ? /*#__PURE__*/React.createElement(ContentElementInsertButton, {
|
|
863
|
-
onClick: function onClick() {
|
|
864
|
-
return postInsertContentElementMessage({
|
|
865
|
-
at: 'endOfSection',
|
|
866
|
-
id: props.sectionId
|
|
867
|
-
});
|
|
868
|
-
}
|
|
869
|
-
}) : null;
|
|
870
|
-
return /*#__PURE__*/React.createElement(LayoutWithoutInlineEditing, Object.assign({}, props, {
|
|
871
|
-
placeholder: placeholder
|
|
872
|
-
}));
|
|
873
|
-
}
|
|
874
|
-
|
|
875
|
-
function useCachedValue(value) {
|
|
876
|
-
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
877
|
-
defaultValue = _ref.defaultValue,
|
|
878
|
-
onReset = _ref.onReset,
|
|
879
|
-
onDebouncedChange = _ref.onDebouncedChange,
|
|
880
|
-
_ref$delay = _ref.delay,
|
|
881
|
-
delay = _ref$delay === void 0 ? 2000 : _ref$delay;
|
|
882
|
-
|
|
883
|
-
var _useState = useState(value || defaultValue),
|
|
884
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
885
|
-
cachedValue = _useState2[0],
|
|
886
|
-
setCachedValue = _useState2[1];
|
|
887
|
-
|
|
888
|
-
var previousValue = useRef(value);
|
|
889
|
-
useEffect(function () {
|
|
890
|
-
if (previousValue.current !== value && value !== cachedValue) {
|
|
891
|
-
onReset && onReset(value);
|
|
892
|
-
setCachedValue(value);
|
|
893
|
-
}
|
|
894
|
-
}, [onReset, value, cachedValue]);
|
|
895
|
-
useEffect(function () {
|
|
896
|
-
previousValue.current = value;
|
|
897
|
-
});
|
|
898
|
-
var debouncedHandler = useDebouncedCallback(onDebouncedChange, delay);
|
|
899
|
-
var setValue = useCallback(function (value) {
|
|
900
|
-
setCachedValue(function (previousValue) {
|
|
901
|
-
if (previousValue !== value) {
|
|
902
|
-
debouncedHandler(value);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
return value;
|
|
906
|
-
});
|
|
907
|
-
}, [debouncedHandler]);
|
|
908
|
-
return [cachedValue, setValue];
|
|
909
|
-
} // Debounce callback even if the callback function changes across renders.
|
|
910
|
-
|
|
911
|
-
function useDebouncedCallback(callback, delay) {
|
|
912
|
-
var mostRecentCallback = useRef(null);
|
|
913
|
-
var debouncedHandler = useRef(null);
|
|
914
|
-
useEffect(function () {
|
|
915
|
-
mostRecentCallback.current = callback;
|
|
916
|
-
}, [callback]);
|
|
917
|
-
useEffect(function () {
|
|
918
|
-
debouncedHandler.current = debounce(function (value) {
|
|
919
|
-
if (mostRecentCallback.current) {
|
|
920
|
-
mostRecentCallback.current(value);
|
|
921
|
-
}
|
|
922
|
-
}, delay);
|
|
923
|
-
return function () {
|
|
924
|
-
debouncedHandler.current.flush();
|
|
925
|
-
};
|
|
926
|
-
}, [delay]);
|
|
927
|
-
return useCallback(function () {
|
|
928
|
-
return debouncedHandler.current.apply(debouncedHandler, arguments);
|
|
929
|
-
}, []);
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
var styles$6 = {"placeholder":"TextPlaceholder-module_placeholder__sgVwx"};
|
|
933
|
-
|
|
934
|
-
function TextPlaceholder(_ref) {
|
|
935
|
-
var text = _ref.text,
|
|
936
|
-
visible = _ref.visible,
|
|
937
|
-
className = _ref.className;
|
|
938
|
-
|
|
939
|
-
if (!text || !visible) {
|
|
940
|
-
return null;
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
944
|
-
className: styles$6.placeholder
|
|
945
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
946
|
-
className: className
|
|
947
|
-
}, text));
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
function withCustomInsertBreak(editor) {
|
|
951
|
-
var insertBreak = editor.insertBreak;
|
|
952
|
-
|
|
953
|
-
editor.insertBreak = function () {
|
|
954
|
-
var selection = editor.selection;
|
|
955
|
-
|
|
956
|
-
if (selection && Range.isCollapsed(selection)) {
|
|
957
|
-
var match = Editor.above(editor, {
|
|
958
|
-
match: function match(n) {
|
|
959
|
-
return Editor.isBlock(editor, n);
|
|
960
|
-
}
|
|
961
|
-
});
|
|
962
|
-
|
|
963
|
-
if (match) {
|
|
964
|
-
var _match = _slicedToArray(match, 2),
|
|
965
|
-
block = _match[0],
|
|
966
|
-
path = _match[1];
|
|
967
|
-
|
|
968
|
-
if (Editor.isEnd(editor, selection.anchor, path) && block.type === 'heading') {
|
|
969
|
-
Transforms.insertNodes(editor, {
|
|
970
|
-
type: 'paragraph',
|
|
971
|
-
children: [{
|
|
972
|
-
text: ''
|
|
973
|
-
}]
|
|
974
|
-
});
|
|
975
|
-
return;
|
|
976
|
-
}
|
|
977
|
-
}
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
insertBreak();
|
|
981
|
-
};
|
|
982
|
-
|
|
983
|
-
return editor;
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
var styles$7 = {"container":"index-module_container__3dD9z","shy":"index-module_shy__KgWjc","selected":"index-module_selected__mE58y","hoveringToolbarContainer":"index-module_hoveringToolbarContainer__3xVEz","hoveringToolbar":"index-module_hoveringToolbar__31Xpd","selection":"index-module_selection__3dUiD","linkTooltip":"index-module_linkTooltip__36m1K","linkTooltip-below":"index-module_linkTooltip-below__1wvl7","linkTooltip-above":"index-module_linkTooltip-above__P3YfD","linkTooltipThumbnail":"index-module_linkTooltipThumbnail__2v-cf","linkTooltipThumbnailClickMask":"index-module_linkTooltipThumbnailClickMask__2Z3ff","linkTooltipNewTab":"index-module_linkTooltipNewTab__4tnLF","linkTooltipChapterNumber":"index-module_linkTooltipChapterNumber__2CsQA"};
|
|
987
|
-
|
|
988
|
-
function _extends$3() {
|
|
989
|
-
_extends$3 = Object.assign || function (target) {
|
|
990
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
991
|
-
var source = arguments[i];
|
|
992
|
-
|
|
993
|
-
for (var key in source) {
|
|
994
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
995
|
-
target[key] = source[key];
|
|
996
|
-
}
|
|
997
|
-
}
|
|
998
|
-
}
|
|
999
|
-
|
|
1000
|
-
return target;
|
|
1001
|
-
};
|
|
1002
|
-
|
|
1003
|
-
return _extends$3.apply(this, arguments);
|
|
1004
|
-
}
|
|
1005
|
-
var ExternalLinkIcon = (function (_ref) {
|
|
1006
|
-
var _ref$styles = _ref.styles,
|
|
1007
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1008
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1009
|
-
|
|
1010
|
-
return /*#__PURE__*/React.createElement("svg", _extends$3({
|
|
1011
|
-
"aria-hidden": "true",
|
|
1012
|
-
"data-prefix": "fas",
|
|
1013
|
-
"data-icon": "external-link-alt",
|
|
1014
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-external-link-alt"] || "fa-external-link-alt") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
1015
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1016
|
-
viewBox: "0 0 512 512"
|
|
1017
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1018
|
-
fill: "currentColor",
|
|
1019
|
-
d: "M432 320h-32a16 16 0 00-16 16v112H64V128h144a16 16 0 0016-16V80a16 16 0 00-16-16H48a48 48 0 00-48 48v352a48 48 0 0048 48h352a48 48 0 0048-48V336a16 16 0 00-16-16zM488 0H360c-21.37 0-32.05 25.91-17 41l35.73 35.73L135 320.37a24 24 0 000 34L157.67 377a24 24 0 0034 0l243.61-243.68L471 169c15 15 41 4.5 41-17V24a24 24 0 00-24-24z"
|
|
1020
|
-
}));
|
|
1021
|
-
});
|
|
1022
|
-
|
|
1023
|
-
var UpdateContext = createContext();
|
|
1024
|
-
function LinkTooltipProvider(_ref) {
|
|
1025
|
-
var editor = _ref.editor,
|
|
1026
|
-
disabled = _ref.disabled,
|
|
1027
|
-
position = _ref.position,
|
|
1028
|
-
children = _ref.children;
|
|
1029
|
-
|
|
1030
|
-
var _useState = useState(),
|
|
1031
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
1032
|
-
state = _useState2[0],
|
|
1033
|
-
setState = _useState2[1];
|
|
1034
|
-
|
|
1035
|
-
var outerRef = useRef();
|
|
1036
|
-
var update = useMemo(function () {
|
|
1037
|
-
var timeout;
|
|
1038
|
-
return {
|
|
1039
|
-
activate: function activate(href, openInNewTab, linkRef) {
|
|
1040
|
-
clearTimeout(timeout);
|
|
1041
|
-
timeout = null;
|
|
1042
|
-
var outerRect = outerRef.current.getBoundingClientRect();
|
|
1043
|
-
var linkRect = linkRef.current.getBoundingClientRect();
|
|
1044
|
-
setState({
|
|
1045
|
-
href: href,
|
|
1046
|
-
openInNewTab: openInNewTab,
|
|
1047
|
-
top: position === 'below' ? linkRect.bottom - outerRect.top + 10 : 'auto',
|
|
1048
|
-
bottom: position === 'above' ? outerRect.bottom - linkRect.top + 10 : 'auto',
|
|
1049
|
-
left: linkRect.left - outerRect.left
|
|
1050
|
-
});
|
|
1051
|
-
},
|
|
1052
|
-
keep: function keep() {
|
|
1053
|
-
clearTimeout(timeout);
|
|
1054
|
-
timeout = null;
|
|
1055
|
-
},
|
|
1056
|
-
deactivate: function deactivate() {
|
|
1057
|
-
if (!timeout) {
|
|
1058
|
-
timeout = setTimeout(function () {
|
|
1059
|
-
timeout = null;
|
|
1060
|
-
setState(null);
|
|
1061
|
-
}, 200);
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
};
|
|
1065
|
-
}, [position]);
|
|
1066
|
-
return /*#__PURE__*/React.createElement(UpdateContext.Provider, {
|
|
1067
|
-
value: update
|
|
1068
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
1069
|
-
ref: outerRef
|
|
1070
|
-
}, /*#__PURE__*/React.createElement(LinkTooltip, {
|
|
1071
|
-
editor: editor,
|
|
1072
|
-
state: state,
|
|
1073
|
-
disabled: disabled,
|
|
1074
|
-
position: position
|
|
1075
|
-
}), children));
|
|
1076
|
-
}
|
|
1077
|
-
function LinkPreview(_ref2) {
|
|
1078
|
-
var href = _ref2.href,
|
|
1079
|
-
openInNewTab = _ref2.openInNewTab,
|
|
1080
|
-
children = _ref2.children;
|
|
1081
|
-
|
|
1082
|
-
var _useContext = useContext(UpdateContext),
|
|
1083
|
-
activate = _useContext.activate,
|
|
1084
|
-
deactivate = _useContext.deactivate;
|
|
1085
|
-
|
|
1086
|
-
var ref = useRef();
|
|
1087
|
-
return /*#__PURE__*/React.createElement("span", {
|
|
1088
|
-
ref: ref,
|
|
1089
|
-
onMouseEnter: function onMouseEnter() {
|
|
1090
|
-
return activate(href, openInNewTab, ref);
|
|
1091
|
-
},
|
|
1092
|
-
onMouseLeave: deactivate,
|
|
1093
|
-
onMouseDown: deactivate
|
|
1094
|
-
}, children);
|
|
1095
|
-
}
|
|
1096
|
-
function LinkTooltip(_ref3) {
|
|
1097
|
-
var editor = _ref3.editor,
|
|
1098
|
-
disabled = _ref3.disabled,
|
|
1099
|
-
position = _ref3.position,
|
|
1100
|
-
state = _ref3.state;
|
|
1101
|
-
|
|
1102
|
-
var _useContext2 = useContext(UpdateContext),
|
|
1103
|
-
keep = _useContext2.keep,
|
|
1104
|
-
deactivate = _useContext2.deactivate;
|
|
1105
|
-
|
|
1106
|
-
if (disabled || !state || editor.selection && !Range.isCollapsed(editor.selection)) {
|
|
1107
|
-
return null;
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
1111
|
-
className: classNames(styles$7.linkTooltip, styles$7["linkTooltip-".concat(position)], styles$7.hoveringToolbar),
|
|
1112
|
-
onMouseEnter: keep,
|
|
1113
|
-
onMouseLeave: deactivate,
|
|
1114
|
-
style: {
|
|
1115
|
-
top: state.top,
|
|
1116
|
-
bottom: state.bottom,
|
|
1117
|
-
left: state.left,
|
|
1118
|
-
opacity: 1
|
|
1119
|
-
}
|
|
1120
|
-
}, /*#__PURE__*/React.createElement(LinkDestination, {
|
|
1121
|
-
href: state.href,
|
|
1122
|
-
openInNewTab: state.openInNewTab
|
|
1123
|
-
}));
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
|
-
function LinkDestination(_ref4) {
|
|
1127
|
-
var href = _ref4.href,
|
|
1128
|
-
openInNewTab = _ref4.openInNewTab;
|
|
1129
|
-
|
|
1130
|
-
if (href === null || href === void 0 ? void 0 : href.chapter) {
|
|
1131
|
-
return /*#__PURE__*/React.createElement(ChapterLinkDestination, {
|
|
1132
|
-
permaId: href.chapter
|
|
1133
|
-
});
|
|
1134
|
-
} else if (href === null || href === void 0 ? void 0 : href.section) {
|
|
1135
|
-
return /*#__PURE__*/React.createElement(SectionLinkDestination, {
|
|
1136
|
-
permaId: href.section
|
|
1137
|
-
});
|
|
1138
|
-
} else if (href === null || href === void 0 ? void 0 : href.file) {
|
|
1139
|
-
return /*#__PURE__*/React.createElement(FileLinkDestination, {
|
|
1140
|
-
fileOptions: href.file
|
|
1141
|
-
});
|
|
1142
|
-
} else {
|
|
1143
|
-
return /*#__PURE__*/React.createElement(ExternalLinkDestination, {
|
|
1144
|
-
href: href,
|
|
1145
|
-
openInNewTab: openInNewTab
|
|
1146
|
-
});
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
function ChapterLinkDestination(_ref5) {
|
|
1151
|
-
var permaId = _ref5.permaId;
|
|
1152
|
-
var chapter = useChapter({
|
|
1153
|
-
permaId: permaId
|
|
1154
|
-
});
|
|
1155
|
-
|
|
1156
|
-
var _useI18n = useI18n({
|
|
1157
|
-
locale: 'ui'
|
|
1158
|
-
}),
|
|
1159
|
-
t = _useI18n.t;
|
|
1160
|
-
|
|
1161
|
-
if (!chapter) {
|
|
1162
|
-
return /*#__PURE__*/React.createElement("span", null, t('pageflow_scrolled.inline_editing.link_tooltip.deleted_chapter'));
|
|
1163
|
-
}
|
|
1164
|
-
|
|
1165
|
-
return /*#__PURE__*/React.createElement("a", {
|
|
1166
|
-
href: "#".concat(chapter.chapterSlug),
|
|
1167
|
-
title: t('pageflow_scrolled.inline_editing.link_tooltip.visit_chapter')
|
|
1168
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
1169
|
-
className: styles$7.linkTooltipChapterNumber
|
|
1170
|
-
}, t('pageflow_scrolled.inline_editing.link_tooltip.chapter_number', {
|
|
1171
|
-
number: chapter.index + 1
|
|
1172
|
-
})), " ", chapter.title);
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
function SectionLinkDestination(_ref6) {
|
|
1176
|
-
var permaId = _ref6.permaId;
|
|
1177
|
-
|
|
1178
|
-
var _useI18n2 = useI18n({
|
|
1179
|
-
locale: 'ui'
|
|
1180
|
-
}),
|
|
1181
|
-
t = _useI18n2.t;
|
|
1182
|
-
|
|
1183
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
1184
|
-
className: styles$7.linkTooltipThumbnail
|
|
1185
|
-
}, /*#__PURE__*/React.createElement(SectionThumbnail, {
|
|
1186
|
-
sectionPermaId: permaId
|
|
1187
|
-
}), /*#__PURE__*/React.createElement("a", {
|
|
1188
|
-
href: "#section-".concat(permaId),
|
|
1189
|
-
className: styles$7.linkTooltipThumbnailClickMask,
|
|
1190
|
-
title: t('pageflow_scrolled.inline_editing.link_tooltip.visit_section')
|
|
1191
|
-
}));
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
function ExternalLinkDestination(_ref7) {
|
|
1195
|
-
var href = _ref7.href,
|
|
1196
|
-
openInNewTab = _ref7.openInNewTab;
|
|
1197
|
-
|
|
1198
|
-
var _useI18n3 = useI18n({
|
|
1199
|
-
locale: 'ui'
|
|
1200
|
-
}),
|
|
1201
|
-
t = _useI18n3.t;
|
|
1202
|
-
|
|
1203
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("a", {
|
|
1204
|
-
href: href,
|
|
1205
|
-
target: "_blank",
|
|
1206
|
-
rel: "noopener noreferrer"
|
|
1207
|
-
}, href, /*#__PURE__*/React.createElement(ExternalLinkIcon, {
|
|
1208
|
-
width: 10,
|
|
1209
|
-
height: 10
|
|
1210
|
-
})), /*#__PURE__*/React.createElement("div", {
|
|
1211
|
-
className: styles$7.linkTooltipNewTab
|
|
1212
|
-
}, openInNewTab ? t('pageflow_scrolled.inline_editing.link_tooltip.opens_in_new_tab') : t('pageflow_scrolled.inline_editing.link_tooltip.opens_in_same_tab')));
|
|
1213
|
-
}
|
|
1214
|
-
|
|
1215
|
-
function FileLinkDestination(_ref8) {
|
|
1216
|
-
var fileOptions = _ref8.fileOptions;
|
|
1217
|
-
var file = useFile(fileOptions);
|
|
1218
|
-
|
|
1219
|
-
var _useI18n4 = useI18n({
|
|
1220
|
-
locale: 'ui'
|
|
1221
|
-
}),
|
|
1222
|
-
t = _useI18n4.t;
|
|
1223
|
-
|
|
1224
|
-
if (!file) {
|
|
1225
|
-
return /*#__PURE__*/React.createElement("span", null, t('pageflow_scrolled.inline_editing.link_tooltip.deleted_file'));
|
|
1226
|
-
}
|
|
1227
|
-
|
|
1228
|
-
return /*#__PURE__*/React.createElement("a", {
|
|
1229
|
-
href: file.urls.original,
|
|
1230
|
-
target: "_blank",
|
|
1231
|
-
rel: "noopener noreferrer"
|
|
1232
|
-
}, file.urls.original.split('/').pop(), /*#__PURE__*/React.createElement(ExternalLinkIcon, {
|
|
1233
|
-
width: 10,
|
|
1234
|
-
height: 10
|
|
1235
|
-
}));
|
|
1236
|
-
}
|
|
1237
|
-
|
|
1238
|
-
function withLinks(editor) {
|
|
1239
|
-
var isInline = editor.isInline;
|
|
1240
|
-
|
|
1241
|
-
editor.isInline = function (element) {
|
|
1242
|
-
return element.type === 'link' ? true : isInline(element);
|
|
1243
|
-
};
|
|
1244
|
-
|
|
1245
|
-
return editor;
|
|
1246
|
-
}
|
|
1247
|
-
function renderElementWithLinkPreview(options) {
|
|
1248
|
-
if (options.element.type === 'link') {
|
|
1249
|
-
return /*#__PURE__*/React.createElement(LinkPreview, {
|
|
1250
|
-
href: options.element.href,
|
|
1251
|
-
openInNewTab: options.element.openInNewTab
|
|
1252
|
-
}, renderElement(options));
|
|
1253
|
-
} else {
|
|
1254
|
-
return renderElement(options);
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
|
|
1258
|
-
// element is currently being dragged over the element. `react-dnd`
|
|
1259
|
-
// causes "Update on unmounted component warning" when dropping an
|
|
1260
|
-
// element removes a drop target [1]. As a workaround, couple
|
|
1261
|
-
// rendering of drop targets to asynchronously updated state. That way
|
|
1262
|
-
// the drop target is only removed after element has been dropped.
|
|
1263
|
-
//
|
|
1264
|
-
// [1] https://github.com/react-dnd/react-dnd/issues/1573
|
|
1265
|
-
|
|
1266
|
-
function useDropTargetsActive() {
|
|
1267
|
-
var _useState = useState(false),
|
|
1268
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
1269
|
-
dropTargetsActive = _useState2[0],
|
|
1270
|
-
setDropTargetsActive = _useState2[1];
|
|
1271
|
-
|
|
1272
|
-
var _useDrop = useDrop({
|
|
1273
|
-
accept: 'contentElement',
|
|
1274
|
-
collect: function collect(monitor) {
|
|
1275
|
-
return {
|
|
1276
|
-
canDrop: monitor.canDrop() && monitor.isOver()
|
|
1277
|
-
};
|
|
1278
|
-
}
|
|
1279
|
-
}),
|
|
1280
|
-
_useDrop2 = _slicedToArray(_useDrop, 2),
|
|
1281
|
-
canDrop = _useDrop2[0].canDrop,
|
|
1282
|
-
drop = _useDrop2[1];
|
|
1283
|
-
|
|
1284
|
-
useEffect(function () {
|
|
1285
|
-
if (canDrop) {
|
|
1286
|
-
setDropTargetsActive(true);
|
|
1287
|
-
} else {
|
|
1288
|
-
var timeout = setTimeout(function () {
|
|
1289
|
-
setDropTargetsActive(false);
|
|
1290
|
-
}, 10);
|
|
1291
|
-
return function () {
|
|
1292
|
-
clearTimeout(timeout);
|
|
1293
|
-
};
|
|
1294
|
-
}
|
|
1295
|
-
}, [canDrop]);
|
|
1296
|
-
return [dropTargetsActive, drop];
|
|
1297
|
-
}
|
|
1298
|
-
|
|
1299
|
-
var abortPreviousCall;
|
|
1300
|
-
function useSelectLinkDestination() {
|
|
1301
|
-
return function () {
|
|
1302
|
-
return new Promise(function (resolve, reject) {
|
|
1303
|
-
if (abortPreviousCall) {
|
|
1304
|
-
abortPreviousCall();
|
|
1305
|
-
}
|
|
1306
|
-
|
|
1307
|
-
abortPreviousCall = function abortPreviousCall() {
|
|
1308
|
-
window.removeEventListener('message', receive);
|
|
1309
|
-
reject();
|
|
1310
|
-
};
|
|
1311
|
-
|
|
1312
|
-
postSelectLinkDestinationMessage();
|
|
1313
|
-
window.addEventListener('message', receive);
|
|
1314
|
-
|
|
1315
|
-
function receive(message) {
|
|
1316
|
-
if (window.location.href.indexOf(message.origin) === 0) {
|
|
1317
|
-
if (message.data.type === 'LINK_DESTINATION_SELECTED') {
|
|
1318
|
-
abortPreviousCall = null;
|
|
1319
|
-
window.removeEventListener('message', receive);
|
|
1320
|
-
resolve(message.data.payload);
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
|
-
}
|
|
1324
|
-
});
|
|
1325
|
-
};
|
|
1326
|
-
}
|
|
1327
|
-
|
|
1328
|
-
function _extends$4() {
|
|
1329
|
-
_extends$4 = Object.assign || function (target) {
|
|
1330
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1331
|
-
var source = arguments[i];
|
|
1332
|
-
|
|
1333
|
-
for (var key in source) {
|
|
1334
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1335
|
-
target[key] = source[key];
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
return target;
|
|
1341
|
-
};
|
|
1342
|
-
|
|
1343
|
-
return _extends$4.apply(this, arguments);
|
|
1344
|
-
}
|
|
1345
|
-
var BoldIcon = (function (_ref) {
|
|
1346
|
-
var _ref$styles = _ref.styles,
|
|
1347
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1348
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1349
|
-
|
|
1350
|
-
return /*#__PURE__*/React.createElement("svg", _extends$4({
|
|
1351
|
-
"aria-hidden": "true",
|
|
1352
|
-
"data-prefix": "fas",
|
|
1353
|
-
"data-icon": "bold",
|
|
1354
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-bold"] || "fa-bold") + " " + (styles["fa-w-12"] || "fa-w-12"),
|
|
1355
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1356
|
-
viewBox: "0 0 384 512"
|
|
1357
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1358
|
-
fill: "currentColor",
|
|
1359
|
-
d: "M333.49 238a122 122 0 0027-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 00-16 16v48a16 16 0 0016 16h31.87v288H34a16 16 0 00-16 16v48a16 16 0 0016 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 010 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 010 112z"
|
|
1360
|
-
}));
|
|
1361
|
-
});
|
|
1362
|
-
|
|
1363
|
-
function _extends$5() {
|
|
1364
|
-
_extends$5 = Object.assign || function (target) {
|
|
1365
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1366
|
-
var source = arguments[i];
|
|
1367
|
-
|
|
1368
|
-
for (var key in source) {
|
|
1369
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1370
|
-
target[key] = source[key];
|
|
1371
|
-
}
|
|
1372
|
-
}
|
|
1373
|
-
}
|
|
1374
|
-
|
|
1375
|
-
return target;
|
|
1376
|
-
};
|
|
1377
|
-
|
|
1378
|
-
return _extends$5.apply(this, arguments);
|
|
1379
|
-
}
|
|
1380
|
-
var UnderlineIcon = (function (_ref) {
|
|
1381
|
-
var _ref$styles = _ref.styles,
|
|
1382
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1383
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1384
|
-
|
|
1385
|
-
return /*#__PURE__*/React.createElement("svg", _extends$5({
|
|
1386
|
-
"aria-hidden": "true",
|
|
1387
|
-
"data-prefix": "fas",
|
|
1388
|
-
"data-icon": "underline",
|
|
1389
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-underline"] || "fa-underline") + " " + (styles["fa-w-14"] || "fa-w-14"),
|
|
1390
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1391
|
-
viewBox: "0 0 448 512"
|
|
1392
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1393
|
-
fill: "currentColor",
|
|
1394
|
-
d: "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0016-16V16a16 16 0 00-16-16H272a16 16 0 00-16 16v32a16 16 0 0016 16h32v160a80 80 0 01-160 0V64h32a16 16 0 0016-16V16a16 16 0 00-16-16H32a16 16 0 00-16 16v32a16 16 0 0016 16zm400 384H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16z"
|
|
1395
|
-
}));
|
|
1396
|
-
});
|
|
1397
|
-
|
|
1398
|
-
function _extends$6() {
|
|
1399
|
-
_extends$6 = Object.assign || function (target) {
|
|
1400
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1401
|
-
var source = arguments[i];
|
|
1402
|
-
|
|
1403
|
-
for (var key in source) {
|
|
1404
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1405
|
-
target[key] = source[key];
|
|
1406
|
-
}
|
|
1407
|
-
}
|
|
1408
|
-
}
|
|
1409
|
-
|
|
1410
|
-
return target;
|
|
1411
|
-
};
|
|
1412
|
-
|
|
1413
|
-
return _extends$6.apply(this, arguments);
|
|
1414
|
-
}
|
|
1415
|
-
var ItalicIcon = (function (_ref) {
|
|
1416
|
-
var _ref$styles = _ref.styles,
|
|
1417
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1418
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1419
|
-
|
|
1420
|
-
return /*#__PURE__*/React.createElement("svg", _extends$6({
|
|
1421
|
-
"aria-hidden": "true",
|
|
1422
|
-
"data-prefix": "fas",
|
|
1423
|
-
"data-icon": "italic",
|
|
1424
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-italic"] || "fa-italic") + " " + (styles["fa-w-10"] || "fa-w-10"),
|
|
1425
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1426
|
-
viewBox: "0 0 320 512"
|
|
1427
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1428
|
-
fill: "currentColor",
|
|
1429
|
-
d: "M320 48v32a16 16 0 01-16 16h-62.76l-80 320H208a16 16 0 0116 16v32a16 16 0 01-16 16H16a16 16 0 01-16-16v-32a16 16 0 0116-16h62.76l80-320H112a16 16 0 01-16-16V48a16 16 0 0116-16h192a16 16 0 0116 16z"
|
|
1430
|
-
}));
|
|
1431
|
-
});
|
|
1432
|
-
|
|
1433
|
-
function _extends$7() {
|
|
1434
|
-
_extends$7 = Object.assign || function (target) {
|
|
1435
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1436
|
-
var source = arguments[i];
|
|
1437
|
-
|
|
1438
|
-
for (var key in source) {
|
|
1439
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1440
|
-
target[key] = source[key];
|
|
1441
|
-
}
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1445
|
-
return target;
|
|
1446
|
-
};
|
|
1447
|
-
|
|
1448
|
-
return _extends$7.apply(this, arguments);
|
|
1449
|
-
}
|
|
1450
|
-
var StrikethroughIcon = (function (_ref) {
|
|
1451
|
-
var _ref$styles = _ref.styles,
|
|
1452
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1453
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1454
|
-
|
|
1455
|
-
return /*#__PURE__*/React.createElement("svg", _extends$7({
|
|
1456
|
-
"aria-hidden": "true",
|
|
1457
|
-
"data-prefix": "fas",
|
|
1458
|
-
"data-icon": "strikethrough",
|
|
1459
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-strikethrough"] || "fa-strikethrough") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
1460
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1461
|
-
viewBox: "0 0 512 512"
|
|
1462
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1463
|
-
fill: "currentColor",
|
|
1464
|
-
d: "M496 224H293.9l-87.17-26.83A43.55 43.55 0 01219.55 112h66.79A49.89 49.89 0 01331 139.58a16 16 0 0021.46 7.15l42.94-21.47a16 16 0 007.16-21.46l-.53-1A128 128 0 00287.51 32h-68a123.68 123.68 0 00-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 00-16 16v32a16 16 0 0016 16h480a16 16 0 0016-16v-32a16 16 0 00-16-16zm-180.24 96A43 43 0 01336 356.45 43.59 43.59 0 01292.45 400h-66.79A49.89 49.89 0 01181 372.42a16 16 0 00-21.46-7.15l-42.94 21.47a16 16 0 00-7.16 21.46l.53 1A128 128 0 00224.49 480h68a123.68 123.68 0 00123-135.64 114.25 114.25 0 00-5.34-24.36z"
|
|
1465
|
-
}));
|
|
1466
|
-
});
|
|
1467
|
-
|
|
1468
|
-
function _extends$8() {
|
|
1469
|
-
_extends$8 = Object.assign || function (target) {
|
|
1470
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1471
|
-
var source = arguments[i];
|
|
1472
|
-
|
|
1473
|
-
for (var key in source) {
|
|
1474
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1475
|
-
target[key] = source[key];
|
|
1476
|
-
}
|
|
1477
|
-
}
|
|
1478
|
-
}
|
|
1479
|
-
|
|
1480
|
-
return target;
|
|
1481
|
-
};
|
|
1482
|
-
|
|
1483
|
-
return _extends$8.apply(this, arguments);
|
|
1484
|
-
}
|
|
1485
|
-
var LinkIcon = (function (_ref) {
|
|
1486
|
-
var _ref$styles = _ref.styles,
|
|
1487
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1488
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1489
|
-
|
|
1490
|
-
return /*#__PURE__*/React.createElement("svg", _extends$8({
|
|
1491
|
-
"aria-hidden": "true",
|
|
1492
|
-
"data-prefix": "fas",
|
|
1493
|
-
"data-icon": "link",
|
|
1494
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-link"] || "fa-link") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
1495
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1496
|
-
viewBox: "0 0 512 512"
|
|
1497
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1498
|
-
fill: "currentColor",
|
|
1499
|
-
d: "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 01-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0120.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0020.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 00-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"
|
|
1500
|
-
}));
|
|
1501
|
-
});
|
|
1502
|
-
|
|
1503
|
-
function HoveringToolbar(_ref) {
|
|
1504
|
-
var position = _ref.position;
|
|
1505
|
-
var ref = useRef();
|
|
1506
|
-
var outerRef = useRef();
|
|
1507
|
-
var editor = useSlate();
|
|
1508
|
-
|
|
1509
|
-
var _useI18n = useI18n({
|
|
1510
|
-
locale: 'ui'
|
|
1511
|
-
}),
|
|
1512
|
-
t = _useI18n.t;
|
|
1513
|
-
|
|
1514
|
-
var selectLinkDestination = useSelectLinkDestination();
|
|
1515
|
-
useEffect(function () {
|
|
1516
|
-
var el = ref.current;
|
|
1517
|
-
var selection = editor.selection;
|
|
1518
|
-
|
|
1519
|
-
if (!el || !outerRef.current) {
|
|
1520
|
-
return;
|
|
1521
|
-
}
|
|
1522
|
-
|
|
1523
|
-
if (!selection || !ReactEditor.isFocused(editor) || Range.isCollapsed(selection) || Editor.string(editor, selection) === '') {
|
|
1524
|
-
el.removeAttribute('style');
|
|
1525
|
-
return;
|
|
1526
|
-
}
|
|
1527
|
-
|
|
1528
|
-
var domRange = ReactEditor.toDOMRange(editor, editor.selection);
|
|
1529
|
-
var rect = domRange.getBoundingClientRect();
|
|
1530
|
-
var outerRect = outerRef.current.getBoundingClientRect();
|
|
1531
|
-
el.style.opacity = 1;
|
|
1532
|
-
el.style.left = "".concat(rect.left - outerRect.left, "px");
|
|
1533
|
-
|
|
1534
|
-
if (position === 'above') {
|
|
1535
|
-
el.style.top = 'auto';
|
|
1536
|
-
el.style.bottom = "".concat(outerRect.bottom - rect.top + 5, "px");
|
|
1537
|
-
} else {
|
|
1538
|
-
el.style.bottom = 'auto';
|
|
1539
|
-
el.style.top = "".concat(rect.bottom - outerRect.top + 5, "px");
|
|
1540
|
-
}
|
|
1541
|
-
});
|
|
1542
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
1543
|
-
ref: outerRef,
|
|
1544
|
-
className: styles$7.hoveringToolbarContainer
|
|
1545
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
1546
|
-
ref: ref,
|
|
1547
|
-
className: styles$7.hoveringToolbar
|
|
1548
|
-
}, renderToolbar$1(editor, t, selectLinkDestination)));
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
|
-
function renderToolbar$1(editor, t, selectLinkDestination) {
|
|
1552
|
-
var buttons = [{
|
|
1553
|
-
name: 'bold',
|
|
1554
|
-
text: t('pageflow_scrolled.inline_editing.formats.bold'),
|
|
1555
|
-
icon: BoldIcon
|
|
1556
|
-
}, {
|
|
1557
|
-
name: 'italic',
|
|
1558
|
-
text: t('pageflow_scrolled.inline_editing.formats.italic'),
|
|
1559
|
-
icon: ItalicIcon
|
|
1560
|
-
}, {
|
|
1561
|
-
name: 'underline',
|
|
1562
|
-
text: t('pageflow_scrolled.inline_editing.formats.underline'),
|
|
1563
|
-
icon: UnderlineIcon
|
|
1564
|
-
}, {
|
|
1565
|
-
name: 'strikethrough',
|
|
1566
|
-
text: t('pageflow_scrolled.inline_editing.formats.strikethrough'),
|
|
1567
|
-
icon: StrikethroughIcon
|
|
1568
|
-
}, {
|
|
1569
|
-
name: 'link',
|
|
1570
|
-
text: isButtonActive(editor, 'link') ? t('pageflow_scrolled.inline_editing.remove_link') : t('pageflow_scrolled.inline_editing.insert_link'),
|
|
1571
|
-
icon: LinkIcon
|
|
1572
|
-
}].map(function (button) {
|
|
1573
|
-
return _objectSpread2(_objectSpread2({}, button), {}, {
|
|
1574
|
-
active: isButtonActive(editor, button.name)
|
|
1575
|
-
});
|
|
1576
|
-
});
|
|
1577
|
-
return /*#__PURE__*/React.createElement(Toolbar, {
|
|
1578
|
-
buttons: buttons,
|
|
1579
|
-
onButtonClick: function onButtonClick(name) {
|
|
1580
|
-
return handleButtonClick(editor, name, selectLinkDestination);
|
|
1581
|
-
}
|
|
1582
|
-
});
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1585
|
-
function handleButtonClick(editor, format, selectLinkDestination) {
|
|
1586
|
-
if (format === 'link') {
|
|
1587
|
-
if (isLinkActive(editor)) {
|
|
1588
|
-
unwrapLink(editor);
|
|
1589
|
-
} else {
|
|
1590
|
-
selectLinkDestination().then(function (_ref2) {
|
|
1591
|
-
var href = _ref2.href,
|
|
1592
|
-
openInNewTab = _ref2.openInNewTab;
|
|
1593
|
-
wrapLink(editor, href, openInNewTab);
|
|
1594
|
-
}, function () {});
|
|
1595
|
-
}
|
|
1596
|
-
} else {
|
|
1597
|
-
toggleMark(editor, format);
|
|
1598
|
-
}
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
function isButtonActive(editor, format) {
|
|
1602
|
-
if (format === 'link') {
|
|
1603
|
-
return isLinkActive(editor);
|
|
1604
|
-
} else {
|
|
1605
|
-
return isMarkActive(editor, format);
|
|
1606
|
-
}
|
|
1607
|
-
}
|
|
1608
|
-
|
|
1609
|
-
function unwrapLink(editor) {
|
|
1610
|
-
Transforms.unwrapNodes(editor, {
|
|
1611
|
-
match: function match(n) {
|
|
1612
|
-
return n.type === 'link';
|
|
1613
|
-
}
|
|
1614
|
-
});
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
|
-
function wrapLink(editor, href, openInNewTab) {
|
|
1618
|
-
var link = {
|
|
1619
|
-
type: 'link',
|
|
1620
|
-
href: href,
|
|
1621
|
-
openInNewTab: openInNewTab,
|
|
1622
|
-
children: []
|
|
1623
|
-
};
|
|
1624
|
-
Transforms.wrapNodes(editor, link, {
|
|
1625
|
-
split: true
|
|
1626
|
-
});
|
|
1627
|
-
Transforms.collapse(editor, {
|
|
1628
|
-
edge: 'end'
|
|
1629
|
-
});
|
|
1630
|
-
}
|
|
1631
|
-
|
|
1632
|
-
function isLinkActive(editor) {
|
|
1633
|
-
var _Editor$nodes = Editor.nodes(editor, {
|
|
1634
|
-
match: function match(n) {
|
|
1635
|
-
return n.type === 'link';
|
|
1636
|
-
}
|
|
1637
|
-
}),
|
|
1638
|
-
_Editor$nodes2 = _slicedToArray(_Editor$nodes, 1),
|
|
1639
|
-
link = _Editor$nodes2[0];
|
|
1640
|
-
|
|
1641
|
-
return !!link;
|
|
1642
|
-
}
|
|
1643
|
-
|
|
1644
|
-
function toggleMark(editor, format) {
|
|
1645
|
-
var isActive = isMarkActive(editor, format);
|
|
1646
|
-
|
|
1647
|
-
if (isActive) {
|
|
1648
|
-
Editor.removeMark(editor, format);
|
|
1649
|
-
} else {
|
|
1650
|
-
Editor.addMark(editor, format, true);
|
|
1651
|
-
}
|
|
1652
|
-
}
|
|
1653
|
-
|
|
1654
|
-
function isMarkActive(editor, format) {
|
|
1655
|
-
var marks = Editor.marks(editor);
|
|
1656
|
-
return marks ? marks[format] === true : false;
|
|
1657
|
-
}
|
|
1658
|
-
|
|
1659
|
-
function getUniformSelectedNode(editor, propertyName) {
|
|
1660
|
-
var currentNodeEntries = _toConsumableArray(Editor.nodes(editor, {
|
|
1661
|
-
match: function match(n) {
|
|
1662
|
-
return !!n.type;
|
|
1663
|
-
},
|
|
1664
|
-
mode: 'highest'
|
|
1665
|
-
}));
|
|
1666
|
-
|
|
1667
|
-
var values = _toConsumableArray(new Set(currentNodeEntries.map(function (_ref) {
|
|
1668
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
1669
|
-
node = _ref2[0],
|
|
1670
|
-
path = _ref2[1];
|
|
1671
|
-
|
|
1672
|
-
return node[propertyName];
|
|
1673
|
-
})));
|
|
1674
|
-
|
|
1675
|
-
return values.length === 1 ? currentNodeEntries[0][0] : null;
|
|
1676
|
-
}
|
|
1677
|
-
|
|
1678
|
-
function _createForOfIteratorHelper(o) {
|
|
1679
|
-
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
|
1680
|
-
if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) {
|
|
1681
|
-
var i = 0;
|
|
1682
|
-
|
|
1683
|
-
var F = function F() {};
|
|
1684
|
-
|
|
1685
|
-
return {
|
|
1686
|
-
s: F,
|
|
1687
|
-
n: function n() {
|
|
1688
|
-
if (i >= o.length) return {
|
|
1689
|
-
done: true
|
|
1690
|
-
};
|
|
1691
|
-
return {
|
|
1692
|
-
done: false,
|
|
1693
|
-
value: o[i++]
|
|
1694
|
-
};
|
|
1695
|
-
},
|
|
1696
|
-
e: function e(_e) {
|
|
1697
|
-
throw _e;
|
|
1698
|
-
},
|
|
1699
|
-
f: F
|
|
1700
|
-
};
|
|
1701
|
-
}
|
|
1702
|
-
|
|
1703
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1704
|
-
}
|
|
1705
|
-
|
|
1706
|
-
var it,
|
|
1707
|
-
normalCompletion = true,
|
|
1708
|
-
didErr = false,
|
|
1709
|
-
err;
|
|
1710
|
-
return {
|
|
1711
|
-
s: function s() {
|
|
1712
|
-
it = o[Symbol.iterator]();
|
|
1713
|
-
},
|
|
1714
|
-
n: function n() {
|
|
1715
|
-
var step = it.next();
|
|
1716
|
-
normalCompletion = step.done;
|
|
1717
|
-
return step;
|
|
1718
|
-
},
|
|
1719
|
-
e: function e(_e2) {
|
|
1720
|
-
didErr = true;
|
|
1721
|
-
err = _e2;
|
|
1722
|
-
},
|
|
1723
|
-
f: function f() {
|
|
1724
|
-
try {
|
|
1725
|
-
if (!normalCompletion && it["return"] != null) it["return"]();
|
|
1726
|
-
} finally {
|
|
1727
|
-
if (didErr) throw err;
|
|
1728
|
-
}
|
|
1729
|
-
}
|
|
1730
|
-
};
|
|
1731
|
-
}
|
|
1732
|
-
|
|
1733
|
-
function isBlockActive(editor, format) {
|
|
1734
|
-
var _Editor$nodes = Editor.nodes(editor, {
|
|
1735
|
-
match: function match(n) {
|
|
1736
|
-
return n.type === format;
|
|
1737
|
-
}
|
|
1738
|
-
}),
|
|
1739
|
-
_Editor$nodes2 = _slicedToArray(_Editor$nodes, 1),
|
|
1740
|
-
match = _Editor$nodes2[0];
|
|
1741
|
-
|
|
1742
|
-
return !!match;
|
|
1743
|
-
}
|
|
1744
|
-
var listTypes = ['numbered-list', 'bulleted-list'];
|
|
1745
|
-
function toggleBlock(editor, format) {
|
|
1746
|
-
var isActive = isBlockActive(editor, format);
|
|
1747
|
-
var isList = listTypes.includes(format);
|
|
1748
|
-
Transforms.unwrapNodes(editor, {
|
|
1749
|
-
match: function match(n) {
|
|
1750
|
-
return listTypes.includes(n.type);
|
|
1751
|
-
},
|
|
1752
|
-
split: true
|
|
1753
|
-
});
|
|
1754
|
-
Transforms.setNodes(editor, {
|
|
1755
|
-
type: isActive ? 'paragraph' : isList ? 'list-item' : format
|
|
1756
|
-
});
|
|
1757
|
-
|
|
1758
|
-
if (!isActive && isList) {
|
|
1759
|
-
var block = _objectSpread2({
|
|
1760
|
-
type: format,
|
|
1761
|
-
children: []
|
|
1762
|
-
}, preserveColorAndTypograpyhVariant(editor));
|
|
1763
|
-
|
|
1764
|
-
Transforms.wrapNodes(editor, block);
|
|
1765
|
-
}
|
|
1766
|
-
}
|
|
1767
|
-
function applyTypograpyhVariant(editor, variant) {
|
|
1768
|
-
applyProperties(editor, {
|
|
1769
|
-
variant: variant
|
|
1770
|
-
});
|
|
1771
|
-
}
|
|
1772
|
-
function applyColor(editor, color) {
|
|
1773
|
-
applyProperties(editor, {
|
|
1774
|
-
color: color
|
|
1775
|
-
});
|
|
1776
|
-
}
|
|
1777
|
-
|
|
1778
|
-
function applyProperties(editor, properties) {
|
|
1779
|
-
Transforms.setNodes(editor, properties, {
|
|
1780
|
-
mode: 'highest'
|
|
1781
|
-
});
|
|
1782
|
-
applyPropertiesToListItems(editor, properties);
|
|
1783
|
-
}
|
|
1784
|
-
|
|
1785
|
-
function applyPropertiesToListItems(editor, properties) {
|
|
1786
|
-
var lists = Editor.nodes(editor, {
|
|
1787
|
-
match: function match(n) {
|
|
1788
|
-
return listTypes.includes(n.type);
|
|
1789
|
-
}
|
|
1790
|
-
});
|
|
1791
|
-
|
|
1792
|
-
var _iterator = _createForOfIteratorHelper(lists),
|
|
1793
|
-
_step;
|
|
1794
|
-
|
|
1795
|
-
try {
|
|
1796
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1797
|
-
var _step$value = _slicedToArray(_step.value, 2),
|
|
1798
|
-
listPath = _step$value[1];
|
|
1799
|
-
|
|
1800
|
-
var items = Editor.nodes(editor, {
|
|
1801
|
-
at: listPath,
|
|
1802
|
-
match: function match(n) {
|
|
1803
|
-
return n.type === 'list-item';
|
|
1804
|
-
}
|
|
1805
|
-
});
|
|
1806
|
-
|
|
1807
|
-
var _iterator2 = _createForOfIteratorHelper(items),
|
|
1808
|
-
_step2;
|
|
1809
|
-
|
|
1810
|
-
try {
|
|
1811
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1812
|
-
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
1813
|
-
itemPath = _step2$value[1];
|
|
1814
|
-
|
|
1815
|
-
Transforms.setNodes(editor, properties, {
|
|
1816
|
-
at: itemPath
|
|
1817
|
-
});
|
|
1818
|
-
}
|
|
1819
|
-
} catch (err) {
|
|
1820
|
-
_iterator2.e(err);
|
|
1821
|
-
} finally {
|
|
1822
|
-
_iterator2.f();
|
|
1823
|
-
}
|
|
1824
|
-
}
|
|
1825
|
-
} catch (err) {
|
|
1826
|
-
_iterator.e(err);
|
|
1827
|
-
} finally {
|
|
1828
|
-
_iterator.f();
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
|
-
|
|
1832
|
-
function preserveColorAndTypograpyhVariant(editor) {
|
|
1833
|
-
var nodeEntry = Editor.above(editor, {
|
|
1834
|
-
at: Range.start(editor.selection),
|
|
1835
|
-
match: function match(n) {
|
|
1836
|
-
return !!n.type;
|
|
1837
|
-
}
|
|
1838
|
-
});
|
|
1839
|
-
var result = {};
|
|
1840
|
-
|
|
1841
|
-
if (nodeEntry && nodeEntry[0].variant) {
|
|
1842
|
-
result.variant = nodeEntry[0].variant;
|
|
1843
|
-
}
|
|
1844
|
-
|
|
1845
|
-
if (nodeEntry && nodeEntry[0].color) {
|
|
1846
|
-
result.color = nodeEntry[0].color;
|
|
1847
|
-
}
|
|
1848
|
-
|
|
1849
|
-
return result;
|
|
1850
|
-
}
|
|
1851
|
-
|
|
1852
|
-
function withBlockNormalization(_ref, editor) {
|
|
1853
|
-
var onlyParagraphs = _ref.onlyParagraphs;
|
|
1854
|
-
|
|
1855
|
-
if (!onlyParagraphs) {
|
|
1856
|
-
return editor;
|
|
1857
|
-
}
|
|
1858
|
-
|
|
1859
|
-
var normalizeNode = editor.normalizeNode;
|
|
1860
|
-
|
|
1861
|
-
editor.normalizeNode = function (_ref2) {
|
|
1862
|
-
var _ref3 = _slicedToArray(_ref2, 2),
|
|
1863
|
-
node = _ref3[0],
|
|
1864
|
-
path = _ref3[1];
|
|
1865
|
-
|
|
1866
|
-
if (path.length === 0) {
|
|
1867
|
-
var _iterator3 = _createForOfIteratorHelper(Node.children(editor, path)),
|
|
1868
|
-
_step3;
|
|
1869
|
-
|
|
1870
|
-
try {
|
|
1871
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1872
|
-
var _step3$value = _slicedToArray(_step3.value, 2),
|
|
1873
|
-
child = _step3$value[0],
|
|
1874
|
-
childPath = _step3$value[1];
|
|
1875
|
-
|
|
1876
|
-
if (Element.isElement(child) && child.type !== 'paragraph') {
|
|
1877
|
-
Transforms.unwrapNodes(editor, {
|
|
1878
|
-
match: function match(n) {
|
|
1879
|
-
return listTypes.includes(n.type);
|
|
1880
|
-
},
|
|
1881
|
-
split: true,
|
|
1882
|
-
at: childPath
|
|
1883
|
-
});
|
|
1884
|
-
Transforms.setNodes(editor, {
|
|
1885
|
-
type: 'paragraph'
|
|
1886
|
-
}, {
|
|
1887
|
-
at: childPath
|
|
1888
|
-
});
|
|
1889
|
-
}
|
|
1890
|
-
}
|
|
1891
|
-
} catch (err) {
|
|
1892
|
-
_iterator3.e(err);
|
|
1893
|
-
} finally {
|
|
1894
|
-
_iterator3.f();
|
|
1895
|
-
}
|
|
1896
|
-
}
|
|
1897
|
-
|
|
1898
|
-
return normalizeNode([node, path]);
|
|
1899
|
-
};
|
|
1900
|
-
|
|
1901
|
-
return editor;
|
|
1902
|
-
}
|
|
1903
|
-
|
|
1904
|
-
function _extends$9() {
|
|
1905
|
-
_extends$9 = Object.assign || function (target) {
|
|
1906
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1907
|
-
var source = arguments[i];
|
|
1908
|
-
|
|
1909
|
-
for (var key in source) {
|
|
1910
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1911
|
-
target[key] = source[key];
|
|
1912
|
-
}
|
|
1913
|
-
}
|
|
1914
|
-
}
|
|
1915
|
-
|
|
1916
|
-
return target;
|
|
1917
|
-
};
|
|
1918
|
-
|
|
1919
|
-
return _extends$9.apply(this, arguments);
|
|
1920
|
-
}
|
|
1921
|
-
var TextIcon = (function (_ref) {
|
|
1922
|
-
var _ref$styles = _ref.styles,
|
|
1923
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1924
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1925
|
-
|
|
1926
|
-
return /*#__PURE__*/React.createElement("svg", _extends$9({
|
|
1927
|
-
"aria-hidden": "true",
|
|
1928
|
-
"data-prefix": "fas",
|
|
1929
|
-
"data-icon": "align-justify",
|
|
1930
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-align-justify"] || "fa-align-justify") + " " + (styles["fa-w-14"] || "fa-w-14"),
|
|
1931
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1932
|
-
viewBox: "0 0 448 512"
|
|
1933
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1934
|
-
fill: "currentColor",
|
|
1935
|
-
d: "M432 416H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16A16 16 0 000 48v32a16 16 0 0016 16h416a16 16 0 0016-16V48a16 16 0 00-16-16z"
|
|
1936
|
-
}));
|
|
1937
|
-
});
|
|
1938
|
-
|
|
1939
|
-
function _extends$a() {
|
|
1940
|
-
_extends$a = Object.assign || function (target) {
|
|
1941
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1942
|
-
var source = arguments[i];
|
|
1943
|
-
|
|
1944
|
-
for (var key in source) {
|
|
1945
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1946
|
-
target[key] = source[key];
|
|
1947
|
-
}
|
|
1948
|
-
}
|
|
1949
|
-
}
|
|
1950
|
-
|
|
1951
|
-
return target;
|
|
1952
|
-
};
|
|
1953
|
-
|
|
1954
|
-
return _extends$a.apply(this, arguments);
|
|
1955
|
-
}
|
|
1956
|
-
var HeadingIcon = (function (_ref) {
|
|
1957
|
-
var _ref$styles = _ref.styles,
|
|
1958
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1959
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1960
|
-
|
|
1961
|
-
return /*#__PURE__*/React.createElement("svg", _extends$a({
|
|
1962
|
-
"aria-hidden": "true",
|
|
1963
|
-
"data-prefix": "fas",
|
|
1964
|
-
"data-icon": "heading",
|
|
1965
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-heading"] || "fa-heading") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
1966
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1967
|
-
viewBox: "0 0 512 512"
|
|
1968
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
1969
|
-
fill: "currentColor",
|
|
1970
|
-
d: "M448 96v320h32a16 16 0 0116 16v32a16 16 0 01-16 16H320a16 16 0 01-16-16v-32a16 16 0 0116-16h32V288H160v128h32a16 16 0 0116 16v32a16 16 0 01-16 16H32a16 16 0 01-16-16v-32a16 16 0 0116-16h32V96H32a16 16 0 01-16-16V48a16 16 0 0116-16h160a16 16 0 0116 16v32a16 16 0 01-16 16h-32v128h192V96h-32a16 16 0 01-16-16V48a16 16 0 0116-16h160a16 16 0 0116 16v32a16 16 0 01-16 16z"
|
|
1971
|
-
}));
|
|
1972
|
-
});
|
|
1973
|
-
|
|
1974
|
-
function _extends$b() {
|
|
1975
|
-
_extends$b = Object.assign || function (target) {
|
|
1976
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
1977
|
-
var source = arguments[i];
|
|
1978
|
-
|
|
1979
|
-
for (var key in source) {
|
|
1980
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1981
|
-
target[key] = source[key];
|
|
1982
|
-
}
|
|
1983
|
-
}
|
|
1984
|
-
}
|
|
1985
|
-
|
|
1986
|
-
return target;
|
|
1987
|
-
};
|
|
1988
|
-
|
|
1989
|
-
return _extends$b.apply(this, arguments);
|
|
1990
|
-
}
|
|
1991
|
-
var OlIcon = (function (_ref) {
|
|
1992
|
-
var _ref$styles = _ref.styles,
|
|
1993
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
1994
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
1995
|
-
|
|
1996
|
-
return /*#__PURE__*/React.createElement("svg", _extends$b({
|
|
1997
|
-
"aria-hidden": "true",
|
|
1998
|
-
"data-prefix": "fas",
|
|
1999
|
-
"data-icon": "list-ol",
|
|
2000
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-list-ol"] || "fa-list-ol") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
2001
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
2002
|
-
viewBox: "0 0 512 512"
|
|
2003
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
2004
|
-
fill: "currentColor",
|
|
2005
|
-
d: "M61.77 401l17.5-20.15a19.92 19.92 0 005.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 00-8 8v16a8 8 0 008 8h22.83a157.41 157.41 0 00-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 01-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-160H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16V80a16 16 0 00-16-16zm0 320H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zM16 160h64a8 8 0 008-8v-16a8 8 0 00-8-8H64V40a8 8 0 00-8-8H32a8 8 0 00-7.14 4.42l-8 16A8 8 0 0024 64h8v64H16a8 8 0 00-8 8v16a8 8 0 008 8zm-3.91 160H80a8 8 0 008-8v-16a8 8 0 00-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 019.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"
|
|
2006
|
-
}));
|
|
2007
|
-
});
|
|
2008
|
-
|
|
2009
|
-
function _extends$c() {
|
|
2010
|
-
_extends$c = Object.assign || function (target) {
|
|
2011
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
2012
|
-
var source = arguments[i];
|
|
2013
|
-
|
|
2014
|
-
for (var key in source) {
|
|
2015
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
2016
|
-
target[key] = source[key];
|
|
2017
|
-
}
|
|
2018
|
-
}
|
|
2019
|
-
}
|
|
2020
|
-
|
|
2021
|
-
return target;
|
|
2022
|
-
};
|
|
2023
|
-
|
|
2024
|
-
return _extends$c.apply(this, arguments);
|
|
2025
|
-
}
|
|
2026
|
-
var UlIcon = (function (_ref) {
|
|
2027
|
-
var _ref$styles = _ref.styles,
|
|
2028
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
2029
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
2030
|
-
|
|
2031
|
-
return /*#__PURE__*/React.createElement("svg", _extends$c({
|
|
2032
|
-
"aria-hidden": "true",
|
|
2033
|
-
"data-prefix": "fas",
|
|
2034
|
-
"data-icon": "list-ul",
|
|
2035
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-list-ul"] || "fa-list-ul") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
2036
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
2037
|
-
viewBox: "0 0 512 512"
|
|
2038
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
2039
|
-
fill: "currentColor",
|
|
2040
|
-
d: "M48 48a48 48 0 1048 48 48 48 0 00-48-48zm0 160a48 48 0 1048 48 48 48 0 00-48-48zm0 160a48 48 0 1048 48 48 48 0 00-48-48zm448 16H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-320H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16V80a16 16 0 00-16-16zm0 160H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16z"
|
|
2041
|
-
}));
|
|
2042
|
-
});
|
|
2043
|
-
|
|
2044
|
-
function _extends$d() {
|
|
2045
|
-
_extends$d = Object.assign || function (target) {
|
|
2046
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
2047
|
-
var source = arguments[i];
|
|
2048
|
-
|
|
2049
|
-
for (var key in source) {
|
|
2050
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
2051
|
-
target[key] = source[key];
|
|
2052
|
-
}
|
|
2053
|
-
}
|
|
2054
|
-
}
|
|
2055
|
-
|
|
2056
|
-
return target;
|
|
2057
|
-
};
|
|
2058
|
-
|
|
2059
|
-
return _extends$d.apply(this, arguments);
|
|
2060
|
-
}
|
|
2061
|
-
var QuoteIcon = (function (_ref) {
|
|
2062
|
-
var _ref$styles = _ref.styles,
|
|
2063
|
-
styles = _ref$styles === void 0 ? {} : _ref$styles,
|
|
2064
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
2065
|
-
|
|
2066
|
-
return /*#__PURE__*/React.createElement("svg", _extends$d({
|
|
2067
|
-
"aria-hidden": "true",
|
|
2068
|
-
"data-prefix": "fas",
|
|
2069
|
-
"data-icon": "quote-right",
|
|
2070
|
-
className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-quote-right"] || "fa-quote-right") + " " + (styles["fa-w-16"] || "fa-w-16"),
|
|
2071
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
2072
|
-
viewBox: "0 0 512 512"
|
|
2073
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
2074
|
-
fill: "currentColor",
|
|
2075
|
-
d: "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"
|
|
2076
|
-
}));
|
|
2077
|
-
});
|
|
2078
|
-
|
|
2079
|
-
function Selection(props) {
|
|
2080
|
-
var editor = useSlate();
|
|
2081
|
-
|
|
2082
|
-
var _useI18n = useI18n({
|
|
2083
|
-
locale: 'ui'
|
|
2084
|
-
}),
|
|
2085
|
-
t = _useI18n.t;
|
|
2086
|
-
|
|
2087
|
-
var ref = useRef();
|
|
2088
|
-
var outerRef = useRef();
|
|
2089
|
-
var innerRef = useRef();
|
|
2090
|
-
var boundsRef = useRef();
|
|
2091
|
-
var lastRangeRef = useRef();
|
|
2092
|
-
|
|
2093
|
-
var _useContentElementEdi = useContentElementEditorState(),
|
|
2094
|
-
setTransientState = _useContentElementEdi.setTransientState,
|
|
2095
|
-
select = _useContentElementEdi.select,
|
|
2096
|
-
isContentElementSelected = _useContentElementEdi.isSelected,
|
|
2097
|
-
range = _useContentElementEdi.range;
|
|
2098
|
-
|
|
2099
|
-
useEffect(function () {
|
|
2100
|
-
var _getUniformSelectedNo, _getUniformSelectedNo2;
|
|
2101
|
-
|
|
2102
|
-
var selection = editor.selection;
|
|
2103
|
-
|
|
2104
|
-
if (!ref.current) {
|
|
2105
|
-
return;
|
|
2106
|
-
}
|
|
2107
|
-
|
|
2108
|
-
if (isContentElementSelected && range && lastRangeRef.current !== range) {
|
|
2109
|
-
lastRangeRef.current = range;
|
|
2110
|
-
|
|
2111
|
-
if (range[1] === range[0] + 1) {
|
|
2112
|
-
Transforms.select(editor, Editor.point(editor, [range[0]], {
|
|
2113
|
-
edge: 'start'
|
|
2114
|
-
}));
|
|
2115
|
-
} else {
|
|
2116
|
-
Transforms.select(editor, {
|
|
2117
|
-
anchor: Editor.point(editor, [range[0]], {
|
|
2118
|
-
edge: 'start'
|
|
2119
|
-
}),
|
|
2120
|
-
focus: Editor.point(editor, [range[1] - 1], {
|
|
2121
|
-
edge: 'end'
|
|
2122
|
-
})
|
|
2123
|
-
});
|
|
2124
|
-
}
|
|
2125
|
-
|
|
2126
|
-
ReactEditor.focus(editor);
|
|
2127
|
-
}
|
|
2128
|
-
|
|
2129
|
-
if (!selection) {
|
|
2130
|
-
if (boundsRef.current) {
|
|
2131
|
-
hideRect(ref.current);
|
|
2132
|
-
boundsRef.current = null;
|
|
2133
|
-
}
|
|
2134
|
-
|
|
2135
|
-
return;
|
|
2136
|
-
}
|
|
2137
|
-
|
|
2138
|
-
if (!isContentElementSelected && boundsRef.current) {
|
|
2139
|
-
hideRect(ref.current);
|
|
2140
|
-
boundsRef.current = null;
|
|
2141
|
-
window.getSelection().removeAllRanges();
|
|
2142
|
-
return;
|
|
2143
|
-
}
|
|
2144
|
-
|
|
2145
|
-
if (!isContentElementSelected && !boundsRef.current) {
|
|
2146
|
-
select();
|
|
2147
|
-
}
|
|
2148
|
-
|
|
2149
|
-
var _computeBounds = computeBounds(editor),
|
|
2150
|
-
_computeBounds2 = _slicedToArray(_computeBounds, 2),
|
|
2151
|
-
start = _computeBounds2[0],
|
|
2152
|
-
end = _computeBounds2[1];
|
|
2153
|
-
|
|
2154
|
-
setTransientState({
|
|
2155
|
-
editableTextIsSingleBlock: editor.children.length <= 1,
|
|
2156
|
-
exampleNode: getUniformSelectedNode(editor, 'type'),
|
|
2157
|
-
typographyVariant: (_getUniformSelectedNo = getUniformSelectedNode(editor, 'variant')) === null || _getUniformSelectedNo === void 0 ? void 0 : _getUniformSelectedNo.variant,
|
|
2158
|
-
color: (_getUniformSelectedNo2 = getUniformSelectedNode(editor, 'color')) === null || _getUniformSelectedNo2 === void 0 ? void 0 : _getUniformSelectedNo2.color
|
|
2159
|
-
});
|
|
2160
|
-
boundsRef.current = {
|
|
2161
|
-
start: start,
|
|
2162
|
-
end: end
|
|
2163
|
-
};
|
|
2164
|
-
updateRect(editor, start, end, outerRef.current, ref.current, innerRef.current);
|
|
2165
|
-
});
|
|
2166
|
-
|
|
2167
|
-
var _useDrag = useDrag({
|
|
2168
|
-
item: {
|
|
2169
|
-
type: 'contentElement',
|
|
2170
|
-
id: props.contentElementId
|
|
2171
|
-
},
|
|
2172
|
-
begin: function begin() {
|
|
2173
|
-
return {
|
|
2174
|
-
type: 'contentElement',
|
|
2175
|
-
id: props.contentElementId,
|
|
2176
|
-
range: [boundsRef.current.start, boundsRef.current.end + 1]
|
|
2177
|
-
};
|
|
2178
|
-
}
|
|
2179
|
-
}),
|
|
2180
|
-
_useDrag2 = _slicedToArray(_useDrag, 2),
|
|
2181
|
-
drag = _useDrag2[1];
|
|
2182
|
-
|
|
2183
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
2184
|
-
ref: outerRef
|
|
2185
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
2186
|
-
ref: ref,
|
|
2187
|
-
className: styles$7.selection
|
|
2188
|
-
}, /*#__PURE__*/React.createElement(SelectionRect, {
|
|
2189
|
-
selected: true,
|
|
2190
|
-
drag: drag,
|
|
2191
|
-
scrollPoint: isContentElementSelected,
|
|
2192
|
-
insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
|
|
2193
|
-
onInsertButtonClick: function onInsertButtonClick(at) {
|
|
2194
|
-
if (at === 'before' && boundsRef.current.start === 0 || at === 'after' && !Node.has(editor, [boundsRef.current.end + 1])) {
|
|
2195
|
-
postInsertContentElementMessage({
|
|
2196
|
-
id: props.contentElementId,
|
|
2197
|
-
at: at
|
|
2198
|
-
});
|
|
2199
|
-
} else {
|
|
2200
|
-
postInsertContentElementMessage({
|
|
2201
|
-
id: props.contentElementId,
|
|
2202
|
-
at: 'split',
|
|
2203
|
-
splitPoint: at === 'before' ? boundsRef.current.start : boundsRef.current.end + 1
|
|
2204
|
-
});
|
|
2205
|
-
}
|
|
2206
|
-
},
|
|
2207
|
-
toolbarButtons: toolbarButtons(t).map(function (button) {
|
|
2208
|
-
return _objectSpread2(_objectSpread2({}, button), {}, {
|
|
2209
|
-
active: isBlockActive(editor, button.name)
|
|
2210
|
-
});
|
|
2211
|
-
}),
|
|
2212
|
-
onToolbarButtonClick: function onToolbarButtonClick(name) {
|
|
2213
|
-
return toggleBlock(editor, name);
|
|
2214
|
-
}
|
|
2215
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
2216
|
-
ref: innerRef
|
|
2217
|
-
}))));
|
|
2218
|
-
}
|
|
2219
|
-
|
|
2220
|
-
function computeBounds(editor) {
|
|
2221
|
-
var startPoint = Range.start(editor.selection);
|
|
2222
|
-
var endPoint = Range.end(editor.selection);
|
|
2223
|
-
var startPath = startPoint.path.slice(0, 1);
|
|
2224
|
-
var endPath = endPoint.path.slice(0, 1);
|
|
2225
|
-
|
|
2226
|
-
if (!Path.equals(startPath, endPath) && endPoint.offset === 0) {
|
|
2227
|
-
endPath = Path.previous(endPath);
|
|
2228
|
-
}
|
|
2229
|
-
|
|
2230
|
-
return [startPath[0], endPath[0]];
|
|
2231
|
-
}
|
|
2232
|
-
|
|
2233
|
-
function hideRect(el) {
|
|
2234
|
-
el.removeAttribute('style');
|
|
2235
|
-
}
|
|
2236
|
-
|
|
2237
|
-
function updateRect(editor, startIndex, endIndex, outer, el, inner) {
|
|
2238
|
-
var _getDOMNodes = getDOMNodes(editor, startIndex, endIndex),
|
|
2239
|
-
_getDOMNodes2 = _slicedToArray(_getDOMNodes, 2),
|
|
2240
|
-
startDOMNode = _getDOMNodes2[0],
|
|
2241
|
-
endDOMNode = _getDOMNodes2[1];
|
|
2242
|
-
|
|
2243
|
-
if (startDOMNode && endDOMNode) {
|
|
2244
|
-
var startRect = startDOMNode.getBoundingClientRect();
|
|
2245
|
-
var endRect = endDOMNode.getBoundingClientRect();
|
|
2246
|
-
var outerRect = outer.getBoundingClientRect();
|
|
2247
|
-
el.style.display = 'block';
|
|
2248
|
-
el.style.top = "".concat(startRect.top - outerRect.top, "px");
|
|
2249
|
-
inner.style.height = "".concat(endRect.bottom - startRect.top, "px");
|
|
2250
|
-
}
|
|
2251
|
-
}
|
|
2252
|
-
|
|
2253
|
-
function getDOMNodes(editor, startIndex, endIndex) {
|
|
2254
|
-
var startNode = Node.get(editor, [startIndex]);
|
|
2255
|
-
var endNode = Node.get(editor, [endIndex]);
|
|
2256
|
-
|
|
2257
|
-
try {
|
|
2258
|
-
var startDOMNode = ReactEditor.toDOMNode(editor, startNode);
|
|
2259
|
-
var endDOMNode = ReactEditor.toDOMNode(editor, endNode);
|
|
2260
|
-
return [startDOMNode, endDOMNode];
|
|
2261
|
-
} catch (e) {
|
|
2262
|
-
return [];
|
|
2263
|
-
}
|
|
2264
|
-
}
|
|
2265
|
-
|
|
2266
|
-
function toolbarButtons(t) {
|
|
2267
|
-
return [{
|
|
2268
|
-
name: 'paragraph',
|
|
2269
|
-
text: t('pageflow_scrolled.inline_editing.formats.paragraph'),
|
|
2270
|
-
icon: TextIcon
|
|
2271
|
-
}, {
|
|
2272
|
-
name: 'heading',
|
|
2273
|
-
text: t('pageflow_scrolled.inline_editing.formats.heading'),
|
|
2274
|
-
icon: HeadingIcon
|
|
2275
|
-
}, {
|
|
2276
|
-
name: 'numbered-list',
|
|
2277
|
-
text: t('pageflow_scrolled.inline_editing.formats.ordered_list'),
|
|
2278
|
-
icon: OlIcon
|
|
2279
|
-
}, {
|
|
2280
|
-
name: 'bulleted-list',
|
|
2281
|
-
text: t('pageflow_scrolled.inline_editing.formats.bulleted_list'),
|
|
2282
|
-
icon: UlIcon
|
|
2283
|
-
}, {
|
|
2284
|
-
name: 'block-quote',
|
|
2285
|
-
text: t('pageflow_scrolled.inline_editing.formats.block_quote'),
|
|
2286
|
-
icon: QuoteIcon
|
|
2287
|
-
}];
|
|
2288
|
-
}
|
|
2289
|
-
|
|
2290
|
-
var styles$8 = {"container":"DropTargets-module_container__3vudG","dropTarget":"DropTargets-module_dropTarget__3mmox","dropIndicator":"DropTargets-module_dropIndicator__2zu4d","isOver":"DropTargets-module_isOver__2usWn"};
|
|
2291
|
-
|
|
2292
|
-
function DropTargets$1(_ref) {
|
|
2293
|
-
var contentElementId = _ref.contentElementId;
|
|
2294
|
-
var editor = useSlate();
|
|
2295
|
-
|
|
2296
|
-
var _useState = useState(),
|
|
2297
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
2298
|
-
targets = _useState2[0],
|
|
2299
|
-
setTargets = _useState2[1];
|
|
2300
|
-
|
|
2301
|
-
var containerRef = useRef();
|
|
2302
|
-
useEffect(function () {
|
|
2303
|
-
if (!targets) {
|
|
2304
|
-
setTargets(measureHeights(editor, containerRef.current));
|
|
2305
|
-
}
|
|
2306
|
-
}, [targets, editor]);
|
|
2307
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
2308
|
-
ref: containerRef,
|
|
2309
|
-
className: styles$8.container
|
|
2310
|
-
}, renderDropTargets(targets || [], contentElementId));
|
|
2311
|
-
}
|
|
2312
|
-
|
|
2313
|
-
function renderDropTargets(targets, contentElementId) {
|
|
2314
|
-
function handleDrop(item, index) {
|
|
2315
|
-
if (index === 0) {
|
|
2316
|
-
postMoveContentElementMessage({
|
|
2317
|
-
id: item.id,
|
|
2318
|
-
range: item.range,
|
|
2319
|
-
to: {
|
|
2320
|
-
at: 'before',
|
|
2321
|
-
id: contentElementId
|
|
2322
|
-
}
|
|
2323
|
-
});
|
|
2324
|
-
} else if (index === targets.length - 1) {
|
|
2325
|
-
postMoveContentElementMessage({
|
|
2326
|
-
id: item.id,
|
|
2327
|
-
range: item.range,
|
|
2328
|
-
to: {
|
|
2329
|
-
at: 'after',
|
|
2330
|
-
id: contentElementId
|
|
2331
|
-
}
|
|
2332
|
-
});
|
|
2333
|
-
} else {
|
|
2334
|
-
postMoveContentElementMessage({
|
|
2335
|
-
id: item.id,
|
|
2336
|
-
range: item.range,
|
|
2337
|
-
to: {
|
|
2338
|
-
at: 'split',
|
|
2339
|
-
id: contentElementId,
|
|
2340
|
-
splitPoint: index
|
|
2341
|
-
}
|
|
2342
|
-
});
|
|
2343
|
-
}
|
|
2344
|
-
}
|
|
2345
|
-
|
|
2346
|
-
return targets.map(function (target, index) {
|
|
2347
|
-
return /*#__PURE__*/React.createElement(DropTarget, Object.assign({}, target, {
|
|
2348
|
-
key: index,
|
|
2349
|
-
onDrop: function onDrop(item) {
|
|
2350
|
-
return handleDrop(item, index);
|
|
2351
|
-
}
|
|
2352
|
-
}));
|
|
2353
|
-
});
|
|
2354
|
-
}
|
|
2355
|
-
|
|
2356
|
-
function DropTarget(_ref2) {
|
|
2357
|
-
var display = _ref2.display,
|
|
2358
|
-
top = _ref2.top,
|
|
2359
|
-
height = _ref2.height,
|
|
2360
|
-
indicatorTop = _ref2.indicatorTop,
|
|
2361
|
-
onDrop = _ref2.onDrop;
|
|
2362
|
-
|
|
2363
|
-
var _useDrop = useDrop({
|
|
2364
|
-
accept: 'contentElement',
|
|
2365
|
-
collect: function collect(monitor) {
|
|
2366
|
-
return {
|
|
2367
|
-
isOver: monitor.isOver()
|
|
2368
|
-
};
|
|
2369
|
-
},
|
|
2370
|
-
drop: function drop(item) {
|
|
2371
|
-
return onDrop(item);
|
|
2372
|
-
}
|
|
2373
|
-
}),
|
|
2374
|
-
_useDrop2 = _slicedToArray(_useDrop, 2),
|
|
2375
|
-
isOver = _useDrop2[0].isOver,
|
|
2376
|
-
drop = _useDrop2[1];
|
|
2377
|
-
|
|
2378
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
2379
|
-
ref: drop,
|
|
2380
|
-
className: classNames(styles$8.dropTarget, _defineProperty({}, styles$8.isOver, isOver)),
|
|
2381
|
-
style: {
|
|
2382
|
-
display: display,
|
|
2383
|
-
top: top,
|
|
2384
|
-
height: height
|
|
2385
|
-
}
|
|
2386
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
2387
|
-
className: styles$8.dropIndicator,
|
|
2388
|
-
style: {
|
|
2389
|
-
top: indicatorTop
|
|
2390
|
-
}
|
|
2391
|
-
}));
|
|
2392
|
-
}
|
|
2393
|
-
|
|
2394
|
-
function measureHeights(editor, container) {
|
|
2395
|
-
var containerRect = container.getBoundingClientRect();
|
|
2396
|
-
var lastTargetDimensions = {
|
|
2397
|
-
top: 0,
|
|
2398
|
-
height: 0
|
|
2399
|
-
};
|
|
2400
|
-
var lastRectBottom = 0;
|
|
2401
|
-
var targetDimensions = editor.children.map(function (child, index) {
|
|
2402
|
-
var node = Node.get(editor, [index]);
|
|
2403
|
-
var domNode = ReactEditor.toDOMNode(editor, node);
|
|
2404
|
-
var rect = domNode.getBoundingClientRect();
|
|
2405
|
-
var top = lastTargetDimensions.top + lastTargetDimensions.height;
|
|
2406
|
-
var bottom = rect.top + rect.height / 2 - containerRect.top;
|
|
2407
|
-
var targetDimensions = {
|
|
2408
|
-
top: top,
|
|
2409
|
-
height: bottom - top,
|
|
2410
|
-
display: editor.selection && Range.includes(editor.selection, [index]) ? 'none' : undefined,
|
|
2411
|
-
indicatorTop: index > 0 ? lastRectBottom + (rect.top - lastRectBottom) / 2 - containerRect.top - top : 0
|
|
2412
|
-
};
|
|
2413
|
-
lastRectBottom = rect.bottom;
|
|
2414
|
-
lastTargetDimensions = targetDimensions;
|
|
2415
|
-
return targetDimensions;
|
|
2416
|
-
});
|
|
2417
|
-
return [].concat(_toConsumableArray(targetDimensions), [{
|
|
2418
|
-
top: lastTargetDimensions.top + lastTargetDimensions.height,
|
|
2419
|
-
height: containerRect.height - (lastTargetDimensions.top + lastTargetDimensions.height),
|
|
2420
|
-
indicatorTop: containerRect.height - (lastTargetDimensions.top + lastTargetDimensions.height)
|
|
2421
|
-
}]);
|
|
2422
|
-
}
|
|
2423
|
-
|
|
2424
|
-
var shy = "\xAD";
|
|
2425
|
-
function decorateCharacter(_ref, character, attributes, _ref2) {
|
|
2426
|
-
var _ref3 = _slicedToArray(_ref, 2),
|
|
2427
|
-
node = _ref3[0],
|
|
2428
|
-
path = _ref3[1];
|
|
2429
|
-
|
|
2430
|
-
var length = _ref2.length;
|
|
2431
|
-
|
|
2432
|
-
if (Text.isText(node)) {
|
|
2433
|
-
var parts = node.text.split(character);
|
|
2434
|
-
parts.pop();
|
|
2435
|
-
var i = 0;
|
|
2436
|
-
return parts.map(function (part) {
|
|
2437
|
-
i += part.length + 1;
|
|
2438
|
-
return _objectSpread2({
|
|
2439
|
-
anchor: {
|
|
2440
|
-
path: path,
|
|
2441
|
-
offset: i - 1
|
|
2442
|
-
},
|
|
2443
|
-
focus: {
|
|
2444
|
-
path: path,
|
|
2445
|
-
offset: i - 1 + length
|
|
2446
|
-
}
|
|
2447
|
-
}, attributes);
|
|
2448
|
-
});
|
|
2449
|
-
}
|
|
2450
|
-
|
|
2451
|
-
return [];
|
|
2452
|
-
}
|
|
2453
|
-
function deleteCharacter(editor, node, path, regExp) {
|
|
2454
|
-
var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
|
|
2455
|
-
var match = regExp.exec(node.text);
|
|
2456
|
-
|
|
2457
|
-
if (match) {
|
|
2458
|
-
Transforms["delete"](editor, {
|
|
2459
|
-
at: {
|
|
2460
|
-
path: path,
|
|
2461
|
-
offset: match.index + offset
|
|
2462
|
-
},
|
|
2463
|
-
distance: 1,
|
|
2464
|
-
unit: 'character'
|
|
2465
|
-
});
|
|
2466
|
-
return true;
|
|
2467
|
-
}
|
|
2468
|
-
|
|
2469
|
-
return false;
|
|
2470
|
-
}
|
|
2471
|
-
|
|
2472
|
-
function useLineBreakHandler(editor) {
|
|
2473
|
-
return useCallback(function (event) {
|
|
2474
|
-
if (event.key !== 'Enter') {
|
|
2475
|
-
return;
|
|
2476
|
-
}
|
|
2477
|
-
|
|
2478
|
-
if (event.altKey === true) {
|
|
2479
|
-
editor.insertText(shy);
|
|
2480
|
-
event.preventDefault();
|
|
2481
|
-
} else if (event.shiftKey === true) {
|
|
2482
|
-
editor.insertText('\n');
|
|
2483
|
-
event.preventDefault();
|
|
2484
|
-
}
|
|
2485
|
-
}, [editor]);
|
|
2486
|
-
}
|
|
2487
|
-
function decorateLineBreaks(nodeEntry) {
|
|
2488
|
-
return decorateCharacter(nodeEntry, shy, {
|
|
2489
|
-
shy: true
|
|
2490
|
-
}, {
|
|
2491
|
-
length: 1
|
|
2492
|
-
});
|
|
2493
|
-
}
|
|
2494
|
-
function renderLeafWithLineBreakDecoration(_ref) {
|
|
2495
|
-
var leaf = _ref.leaf,
|
|
2496
|
-
children = _ref.children,
|
|
2497
|
-
attributes = _ref.attributes;
|
|
2498
|
-
|
|
2499
|
-
if (leaf.shy) {
|
|
2500
|
-
children = /*#__PURE__*/React.createElement("span", {
|
|
2501
|
-
className: styles$7.shy
|
|
2502
|
-
}, children);
|
|
2503
|
-
}
|
|
2504
|
-
|
|
2505
|
-
return renderLeaf$1({
|
|
2506
|
-
leaf: leaf,
|
|
2507
|
-
children: children,
|
|
2508
|
-
attributes: attributes
|
|
2509
|
-
});
|
|
2510
|
-
}
|
|
2511
|
-
function withLineBreakNormalization(editor) {
|
|
2512
|
-
var normalizeNode = editor.normalizeNode;
|
|
2513
|
-
|
|
2514
|
-
editor.normalizeNode = function (_ref2) {
|
|
2515
|
-
var _ref3 = _slicedToArray(_ref2, 2),
|
|
2516
|
-
node = _ref3[0],
|
|
2517
|
-
path = _ref3[1];
|
|
2518
|
-
|
|
2519
|
-
if (node.text) {
|
|
2520
|
-
if (deleteCharacter(editor, node, path, new RegExp("".concat(shy, "\\s"))) || deleteCharacter(editor, node, path, new RegExp("^".concat(shy))) || deleteCharacter(editor, node, path, new RegExp("\\s".concat(shy)), 1) || deleteCharacter(editor, node, path, new RegExp("".concat(shy).concat(shy)))) {
|
|
2521
|
-
return;
|
|
2522
|
-
}
|
|
2523
|
-
}
|
|
2524
|
-
|
|
2525
|
-
return normalizeNode([node, path]);
|
|
2526
|
-
};
|
|
2527
|
-
|
|
2528
|
-
return editor;
|
|
2529
|
-
}
|
|
2530
|
-
|
|
2531
|
-
var EditableText = React.memo(function EditableText(_ref) {
|
|
2532
|
-
var value = _ref.value,
|
|
2533
|
-
contentElementId = _ref.contentElementId,
|
|
2534
|
-
placeholder = _ref.placeholder,
|
|
2535
|
-
onChange = _ref.onChange,
|
|
2536
|
-
selectionRect = _ref.selectionRect,
|
|
2537
|
-
className = _ref.className,
|
|
2538
|
-
placeholderClassName = _ref.placeholderClassName,
|
|
2539
|
-
_ref$scaleCategory = _ref.scaleCategory,
|
|
2540
|
-
scaleCategory = _ref$scaleCategory === void 0 ? 'body' : _ref$scaleCategory,
|
|
2541
|
-
autoFocus = _ref.autoFocus,
|
|
2542
|
-
_ref$floatingControls = _ref.floatingControlsPosition,
|
|
2543
|
-
floatingControlsPosition = _ref$floatingControls === void 0 ? 'below' : _ref$floatingControls;
|
|
2544
|
-
var editor = useMemo(function () {
|
|
2545
|
-
return withLinks(withCustomInsertBreak(withBlockNormalization({
|
|
2546
|
-
onlyParagraphs: !selectionRect
|
|
2547
|
-
}, withLineBreakNormalization(withReact(createEditor())))));
|
|
2548
|
-
}, [selectionRect]);
|
|
2549
|
-
var handleLineBreaks = useLineBreakHandler(editor);
|
|
2550
|
-
useEffect(function () {
|
|
2551
|
-
if (autoFocus) {
|
|
2552
|
-
ReactEditor.focus(editor);
|
|
2553
|
-
}
|
|
2554
|
-
}, [autoFocus, editor]);
|
|
2555
|
-
|
|
2556
|
-
var _useCachedValue = useCachedValue(value, {
|
|
2557
|
-
defaultValue: [{
|
|
2558
|
-
type: 'paragraph',
|
|
2559
|
-
children: [{
|
|
2560
|
-
text: ''
|
|
2561
|
-
}]
|
|
2562
|
-
}],
|
|
2563
|
-
onDebouncedChange: onChange,
|
|
2564
|
-
onReset: function onReset(nextValue) {
|
|
2565
|
-
return resetSelectionIfOutsideNextValue(editor, nextValue);
|
|
2566
|
-
}
|
|
2567
|
-
}),
|
|
2568
|
-
_useCachedValue2 = _slicedToArray(_useCachedValue, 2),
|
|
2569
|
-
cachedValue = _useCachedValue2[0],
|
|
2570
|
-
setCachedValue = _useCachedValue2[1];
|
|
2571
|
-
|
|
2572
|
-
var _useContentElementEdi = useContentElementEditorState(),
|
|
2573
|
-
isSelected = _useContentElementEdi.isSelected;
|
|
2574
|
-
|
|
2575
|
-
useContentElementEditorCommandSubscription(function (command) {
|
|
2576
|
-
if (command.type === 'REMOVE') {
|
|
2577
|
-
Transforms.removeNodes(editor, {
|
|
2578
|
-
mode: 'highest'
|
|
2579
|
-
});
|
|
2580
|
-
} else if (command.type === 'TRANSIENT_STATE_UPDATE') {
|
|
2581
|
-
if ('typographyVariant' in command.payload) {
|
|
2582
|
-
applyTypograpyhVariant(editor, command.payload.typographyVariant);
|
|
2583
|
-
}
|
|
2584
|
-
|
|
2585
|
-
if ('color' in command.payload) {
|
|
2586
|
-
applyColor(editor, command.payload.color);
|
|
2587
|
-
}
|
|
2588
|
-
}
|
|
2589
|
-
});
|
|
2590
|
-
|
|
2591
|
-
var _useDropTargetsActive = useDropTargetsActive(),
|
|
2592
|
-
_useDropTargetsActive2 = _slicedToArray(_useDropTargetsActive, 2),
|
|
2593
|
-
dropTargetsActive = _useDropTargetsActive2[0],
|
|
2594
|
-
ref = _useDropTargetsActive2[1];
|
|
2595
|
-
|
|
2596
|
-
return /*#__PURE__*/React.createElement(Text$1, {
|
|
2597
|
-
scaleCategory: scaleCategory
|
|
2598
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
2599
|
-
className: classNames(styles$7.container, _defineProperty({}, styles$7.selected, isSelected)),
|
|
2600
|
-
ref: ref
|
|
2601
|
-
}, /*#__PURE__*/React.createElement(Slate, {
|
|
2602
|
-
editor: editor,
|
|
2603
|
-
value: cachedValue,
|
|
2604
|
-
onChange: setCachedValue
|
|
2605
|
-
}, /*#__PURE__*/React.createElement(LinkTooltipProvider, {
|
|
2606
|
-
editor: editor,
|
|
2607
|
-
position: floatingControlsPosition
|
|
2608
|
-
}, selectionRect && /*#__PURE__*/React.createElement(Selection, {
|
|
2609
|
-
contentElementId: contentElementId
|
|
2610
|
-
}), dropTargetsActive && /*#__PURE__*/React.createElement(DropTargets$1, {
|
|
2611
|
-
contentElementId: contentElementId
|
|
2612
|
-
}), /*#__PURE__*/React.createElement(HoveringToolbar, {
|
|
2613
|
-
position: floatingControlsPosition
|
|
2614
|
-
}), /*#__PURE__*/React.createElement(Editable, {
|
|
2615
|
-
className: className,
|
|
2616
|
-
decorate: decorateLineBreaks,
|
|
2617
|
-
onKeyDown: handleLineBreaks,
|
|
2618
|
-
renderElement: renderElementWithLinkPreview,
|
|
2619
|
-
renderLeaf: renderLeafWithLineBreakDecoration
|
|
2620
|
-
}))), /*#__PURE__*/React.createElement(TextPlaceholder, {
|
|
2621
|
-
text: placeholder,
|
|
2622
|
-
className: placeholderClassName,
|
|
2623
|
-
visible: isBlank(cachedValue)
|
|
2624
|
-
})));
|
|
2625
|
-
});
|
|
2626
|
-
|
|
2627
|
-
function isBlank(value) {
|
|
2628
|
-
var _value$, _value$2, _value$2$children$;
|
|
2629
|
-
|
|
2630
|
-
return value.length <= 1 && ((_value$ = value[0]) === null || _value$ === void 0 ? void 0 : _value$.children.length) <= 1 && value[0].type === 'paragraph' && !((_value$2 = value[0]) === null || _value$2 === void 0 ? void 0 : (_value$2$children$ = _value$2.children[0]) === null || _value$2$children$ === void 0 ? void 0 : _value$2$children$.text);
|
|
2631
|
-
}
|
|
2632
|
-
|
|
2633
|
-
function resetSelectionIfOutsideNextValue(editor, nextValue) {
|
|
2634
|
-
var nextEditor = {
|
|
2635
|
-
children: nextValue
|
|
2636
|
-
};
|
|
2637
|
-
|
|
2638
|
-
if (editor.selection && (!hasTextAtPoint(nextEditor, editor.selection.anchor) || !hasTextAtPoint(nextEditor, editor.selection.focus))) {
|
|
2639
|
-
Transforms.deselect(editor);
|
|
2640
|
-
}
|
|
2641
|
-
}
|
|
2642
|
-
|
|
2643
|
-
function hasTextAtPoint(editor, point) {
|
|
2644
|
-
if (!Node.has(editor, point.path)) {
|
|
2645
|
-
return false;
|
|
2646
|
-
}
|
|
2647
|
-
|
|
2648
|
-
var node = Node.get(editor, point.path);
|
|
2649
|
-
return Text.isText(node) && point.offset <= node.text.length;
|
|
2650
|
-
}
|
|
2651
|
-
|
|
2652
|
-
function useLineBreakHandler$1(editor) {
|
|
2653
|
-
return useCallback(function (event) {
|
|
2654
|
-
if (event.key !== 'Enter') {
|
|
2655
|
-
return true;
|
|
2656
|
-
} // Soft hyphens used to be inserted with Shift + Enter.
|
|
2657
|
-
// Since Shift + Enter is now used for soft breaks in text blocks,
|
|
2658
|
-
// we switched to Alt + Enter. Since all line breaks in
|
|
2659
|
-
// EdtiableInlineText are soft, we also keep the old short cut
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
if (event.shiftKey === true || event.altKey === true) {
|
|
2663
|
-
editor.insertText(shy);
|
|
2664
|
-
} else {
|
|
2665
|
-
editor.insertText('\n');
|
|
2666
|
-
}
|
|
2667
|
-
|
|
2668
|
-
return false;
|
|
2669
|
-
}, [editor]);
|
|
2670
|
-
}
|
|
2671
|
-
function decorateLineBreaks$1(nodeEntry) {
|
|
2672
|
-
return [].concat(_toConsumableArray(decorateCharacter(nodeEntry, shy, {
|
|
2673
|
-
shy: true
|
|
2674
|
-
}, {
|
|
2675
|
-
length: 1
|
|
2676
|
-
})), _toConsumableArray(decorateCharacter(nodeEntry, "\n", {
|
|
2677
|
-
newLine: true
|
|
2678
|
-
}, {
|
|
2679
|
-
length: 0
|
|
2680
|
-
})));
|
|
2681
|
-
}
|
|
2682
|
-
function withLineBreakNormalization$1(editor) {
|
|
2683
|
-
var normalizeNode = editor.normalizeNode;
|
|
2684
|
-
|
|
2685
|
-
editor.normalizeNode = function (_ref) {
|
|
2686
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
2687
|
-
node = _ref2[0],
|
|
2688
|
-
path = _ref2[1];
|
|
2689
|
-
|
|
2690
|
-
if (path.length === 0 && editor.children.length > 1) {
|
|
2691
|
-
Transforms.mergeNodes(editor);
|
|
2692
|
-
return;
|
|
2693
|
-
} else if (node.text) {
|
|
2694
|
-
if (deleteCharacter(editor, node, path, /\n\n/) || deleteCharacter(editor, node, path, new RegExp("^\n")) || deleteCharacter(editor, node, path, new RegExp("".concat(shy, "\\s"))) || deleteCharacter(editor, node, path, new RegExp("^".concat(shy))) || deleteCharacter(editor, node, path, new RegExp("\\s".concat(shy)), 1) || deleteCharacter(editor, node, path, new RegExp("".concat(shy).concat(shy)))) {
|
|
2695
|
-
return;
|
|
2696
|
-
}
|
|
2697
|
-
}
|
|
2698
|
-
|
|
2699
|
-
return normalizeNode([node, path]);
|
|
2700
|
-
};
|
|
2701
|
-
|
|
2702
|
-
return editor;
|
|
2703
|
-
}
|
|
2704
|
-
|
|
2705
|
-
var styles$9 = {"shy":"index-module_shy__1E2-J","newLine":"index-module_newLine__1QnIs","selected":"index-module_selected__1U9ro","manualHyphens":"index-module_manualHyphens__16b2t"};
|
|
2706
|
-
|
|
2707
|
-
var EditableInlineText = memo(function EditableInlineText(_ref) {
|
|
2708
|
-
var _cachedValue$, _cachedValue$$childre;
|
|
2709
|
-
|
|
2710
|
-
var value = _ref.value,
|
|
2711
|
-
_ref$defaultValue = _ref.defaultValue,
|
|
2712
|
-
defaultValue = _ref$defaultValue === void 0 ? '' : _ref$defaultValue,
|
|
2713
|
-
hyphens = _ref.hyphens,
|
|
2714
|
-
placeholder = _ref.placeholder,
|
|
2715
|
-
onChange = _ref.onChange;
|
|
2716
|
-
var editor = useMemo(function () {
|
|
2717
|
-
return withLineBreakNormalization$1(withReact(createEditor()));
|
|
2718
|
-
}, []);
|
|
2719
|
-
var handleLineBreaks = useLineBreakHandler$1(editor);
|
|
2720
|
-
|
|
2721
|
-
var _useCachedValue = useCachedValue(value, {
|
|
2722
|
-
defaultValue: [{
|
|
2723
|
-
type: 'heading',
|
|
2724
|
-
children: [{
|
|
2725
|
-
text: defaultValue
|
|
2726
|
-
}]
|
|
2727
|
-
}],
|
|
2728
|
-
onDebouncedChange: onChange
|
|
2729
|
-
}),
|
|
2730
|
-
_useCachedValue2 = _slicedToArray(_useCachedValue, 2),
|
|
2731
|
-
cachedValue = _useCachedValue2[0],
|
|
2732
|
-
setCachedValue = _useCachedValue2[1];
|
|
2733
|
-
|
|
2734
|
-
var _useContentElementEdi = useContentElementEditorState(),
|
|
2735
|
-
isSelected = _useContentElementEdi.isSelected;
|
|
2736
|
-
|
|
2737
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
2738
|
-
className: classNames(frontendStyles.root, frontendStyles["hyphens-".concat(hyphens)], _defineProperty({}, styles$9.manualHyphens, hyphens === 'manual'), _defineProperty({}, styles$9.selected, isSelected)),
|
|
2739
|
-
spellCheck: "false"
|
|
2740
|
-
}, /*#__PURE__*/React.createElement(Slate, {
|
|
2741
|
-
editor: editor,
|
|
2742
|
-
value: cachedValue,
|
|
2743
|
-
onChange: setCachedValue
|
|
2744
|
-
}, /*#__PURE__*/React.createElement(Editable, {
|
|
2745
|
-
decorate: decorateLineBreaks$1,
|
|
2746
|
-
onKeyDown: handleLineBreaks,
|
|
2747
|
-
renderLeaf: renderLeaf
|
|
2748
|
-
})), /*#__PURE__*/React.createElement(TextPlaceholder, {
|
|
2749
|
-
text: placeholder,
|
|
2750
|
-
visible: !((_cachedValue$ = cachedValue[0]) === null || _cachedValue$ === void 0 ? void 0 : (_cachedValue$$childre = _cachedValue$.children[0]) === null || _cachedValue$$childre === void 0 ? void 0 : _cachedValue$$childre.text)
|
|
2751
|
-
}));
|
|
2752
|
-
});
|
|
2753
|
-
|
|
2754
|
-
function renderLeaf(_ref2) {
|
|
2755
|
-
var attributes = _ref2.attributes,
|
|
2756
|
-
children = _ref2.children,
|
|
2757
|
-
leaf = _ref2.leaf;
|
|
2758
|
-
|
|
2759
|
-
if (leaf.shy) {
|
|
2760
|
-
children = /*#__PURE__*/React.createElement("span", {
|
|
2761
|
-
className: styles$9.shy
|
|
2762
|
-
}, children);
|
|
2763
|
-
}
|
|
2764
|
-
|
|
2765
|
-
if (leaf.newLine) {
|
|
2766
|
-
children = /*#__PURE__*/React.createElement("span", {
|
|
2767
|
-
className: styles$9.newLine
|
|
2768
|
-
}, children);
|
|
2769
|
-
}
|
|
2770
|
-
|
|
2771
|
-
return /*#__PURE__*/React.createElement("span", attributes, children);
|
|
2772
|
-
}
|
|
2773
|
-
|
|
2774
|
-
var styles$a = {"button":"ActionButton-module_button__8gy6J","position-outside":"ActionButton-module_position-outside__1E_lp","position-outsideIndented":"ActionButton-module_position-outsideIndented__3vf-7","position-inside":"ActionButton-module_position-inside__28_gp"};
|
|
2775
|
-
|
|
2776
|
-
function _extends$e() {
|
|
2777
|
-
_extends$e = Object.assign || function (target) {
|
|
2778
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
2779
|
-
var source = arguments[i];
|
|
2780
|
-
|
|
2781
|
-
for (var key in source) {
|
|
2782
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
2783
|
-
target[key] = source[key];
|
|
2784
|
-
}
|
|
2785
|
-
}
|
|
2786
|
-
}
|
|
2787
|
-
|
|
2788
|
-
return target;
|
|
2789
|
-
};
|
|
2790
|
-
|
|
2791
|
-
return _extends$e.apply(this, arguments);
|
|
2792
|
-
}
|
|
2793
|
-
var pencil = (function (_ref) {
|
|
2794
|
-
var _ref$styles = _ref.styles,
|
|
2795
|
-
props = _objectWithoutProperties(_ref, ["styles"]);
|
|
2796
|
-
|
|
2797
|
-
return /*#__PURE__*/React.createElement("svg", _extends$e({
|
|
2798
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
2799
|
-
viewBox: "0 0 512 512"
|
|
2800
|
-
}, props), /*#__PURE__*/React.createElement("path", {
|
|
2801
|
-
d: "M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1-33.9-33.9-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2l199.2-199.2 22.6-22.7zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9l-78.2 23 23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7l-14.4 14.5-22.6 22.6-11.4 11.3 33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5l-39.3-39.4c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z"
|
|
2802
|
-
}));
|
|
2803
|
-
});
|
|
2804
|
-
|
|
2805
|
-
var icons = {
|
|
2806
|
-
pencil: pencil
|
|
2807
|
-
};
|
|
2808
|
-
function ActionButton(_ref) {
|
|
2809
|
-
var icon = _ref.icon,
|
|
2810
|
-
text = _ref.text,
|
|
2811
|
-
position = _ref.position,
|
|
2812
|
-
onClick = _ref.onClick;
|
|
2813
|
-
var Icon = icons[icon];
|
|
2814
|
-
return /*#__PURE__*/React.createElement("button", {
|
|
2815
|
-
className: classNames(styles$a.button, styles$a["position-".concat(position)]),
|
|
2816
|
-
onClick: onClick
|
|
2817
|
-
}, /*#__PURE__*/React.createElement(Icon, {
|
|
2818
|
-
width: 15,
|
|
2819
|
-
height: 15
|
|
2820
|
-
}), text);
|
|
2821
|
-
}
|
|
2822
|
-
|
|
2823
|
-
function PhonePlatformProvider(_ref) {
|
|
2824
|
-
var children = _ref.children;
|
|
2825
|
-
|
|
2826
|
-
var _useState = useState(false),
|
|
2827
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
2828
|
-
phoneEmulationMode = _useState2[0],
|
|
2829
|
-
setPhoneEmulationMode = _useState2[1];
|
|
2830
|
-
|
|
2831
|
-
useEffect(function () {
|
|
2832
|
-
window.addEventListener('message', receive);
|
|
2833
|
-
|
|
2834
|
-
function receive(event) {
|
|
2835
|
-
if (event.data.type === 'CHANGE_EMULATION_MODE') {
|
|
2836
|
-
if (event.data['payload'] === 'phone') {
|
|
2837
|
-
setPhoneEmulationMode(true);
|
|
2838
|
-
} else {
|
|
2839
|
-
setPhoneEmulationMode(false);
|
|
2840
|
-
}
|
|
2841
|
-
}
|
|
2842
|
-
}
|
|
2843
|
-
|
|
2844
|
-
return function () {
|
|
2845
|
-
return window.removeEventListener('message', receive);
|
|
2846
|
-
};
|
|
2847
|
-
});
|
|
2848
|
-
return /*#__PURE__*/React.createElement(PhonePlatformContext.Provider, {
|
|
2849
|
-
value: phoneEmulationMode
|
|
2850
|
-
}, children);
|
|
2851
|
-
}
|
|
2852
|
-
|
|
2853
|
-
export { ActionButton, ContentDecorator, ContentElementDecorator, EditableInlineText, EditableText, LayoutWithPlaceholder, PhonePlatformProvider, SectionDecorator };
|