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
|
@@ -120,6 +120,20 @@ module Pageflow
|
|
|
120
120
|
# @return [fileImporters]
|
|
121
121
|
attr_reader :file_importers
|
|
122
122
|
|
|
123
|
+
# Used to register different structured data types for entries.
|
|
124
|
+
#
|
|
125
|
+
# @example
|
|
126
|
+
#
|
|
127
|
+
# config.entry_structured_data_types.register(:about_page, lambda do |entry|
|
|
128
|
+
# {
|
|
129
|
+
# '@type' => 'AboutPage',
|
|
130
|
+
# breadcrumb: entry.configuration['breadcrumb']
|
|
131
|
+
# }
|
|
132
|
+
# end)
|
|
133
|
+
#
|
|
134
|
+
# @return [EntryStructuredDataTypes]
|
|
135
|
+
attr_reader :entry_structured_data_types
|
|
136
|
+
|
|
123
137
|
# Used to add new sections to the help dialog displayed in the
|
|
124
138
|
# editor.
|
|
125
139
|
#
|
|
@@ -187,8 +201,8 @@ module Pageflow
|
|
|
187
201
|
attr_accessor :public_entry_request_scope
|
|
188
202
|
|
|
189
203
|
# Either a lambda or an object with a `call` method taking an
|
|
190
|
-
# {
|
|
191
|
-
# returning `nil` or a path to redirect to. Can be used in
|
|
204
|
+
# {PublishedEntry} record and an {ActionDispatch::Request} object
|
|
205
|
+
# and returning `nil` or a path to redirect to. Can be used in
|
|
192
206
|
# conjuction with {PrimaryDomainEntryRedirect} to make sure
|
|
193
207
|
# entries are accessed via their account's configured cname.
|
|
194
208
|
#
|
|
@@ -208,18 +222,76 @@ module Pageflow
|
|
|
208
222
|
# @return [String]
|
|
209
223
|
attr_accessor :public_entry_cache_control_header
|
|
210
224
|
|
|
225
|
+
# Provide additional response headers for published entries.
|
|
226
|
+
#
|
|
227
|
+
# @example
|
|
228
|
+
#
|
|
229
|
+
# config.additional_public_entry_headers.register(
|
|
230
|
+
# {'Some' => 'value'}
|
|
231
|
+
# )
|
|
232
|
+
#
|
|
233
|
+
# config.additional_public_entry_headers.register(
|
|
234
|
+
# lambda do |_entry, request|
|
|
235
|
+
# {'Some' => request.headers['Other']}
|
|
236
|
+
# end
|
|
237
|
+
# )
|
|
238
|
+
#
|
|
239
|
+
# @return [AdditionalHeaders]
|
|
240
|
+
# @since 17.1
|
|
241
|
+
attr_reader :additional_public_entry_headers
|
|
242
|
+
|
|
211
243
|
# Either a lambda or an object with a `call` method taking a
|
|
212
244
|
# {Site} as paramater and returing a hash of options used to
|
|
213
|
-
# construct the url of a
|
|
245
|
+
# construct the url of a site.
|
|
246
|
+
#
|
|
247
|
+
# Can be used to change the host of the url under which entries
|
|
248
|
+
# and feeds are available.
|
|
249
|
+
#
|
|
250
|
+
# If the option is not set, public_entry_url_options is used as a
|
|
251
|
+
# fallback.
|
|
252
|
+
#
|
|
253
|
+
# Example:
|
|
254
|
+
#
|
|
255
|
+
# config.site_url_options = lambda do |site|
|
|
256
|
+
# {host: "#{site.account.name}.example.com"}
|
|
257
|
+
# end
|
|
258
|
+
attr_accessor :site_url_options
|
|
259
|
+
|
|
260
|
+
# Either a hash, a lambda or an object with a `call` method
|
|
261
|
+
# returing a hash of options used to construct the url of a
|
|
262
|
+
# published entry.
|
|
214
263
|
#
|
|
215
264
|
# Can be used to change the host of the url under which entries
|
|
216
265
|
# are available.
|
|
217
266
|
#
|
|
267
|
+
# If site_url_options is blank, the lambda receives a {Site} as
|
|
268
|
+
# parameter. This case is only supported for legacy reasons.
|
|
269
|
+
# Prefer setting site_url_options instead.
|
|
270
|
+
#
|
|
218
271
|
# Example:
|
|
219
272
|
#
|
|
220
273
|
# config.public_entry_url_options = lambda do |site|
|
|
221
274
|
# {host: "#{site.account.name}.example.com"}
|
|
222
275
|
# end
|
|
276
|
+
#
|
|
277
|
+
# If both site_url_options and public_entry_url_options are
|
|
278
|
+
# present, public_entry_url_options is called exclusively to
|
|
279
|
+
# construct url options for public entries. The lambda then
|
|
280
|
+
# receives a {PublishedEntry} to allow for entry specific url
|
|
281
|
+
# options.
|
|
282
|
+
#
|
|
283
|
+
# Example:
|
|
284
|
+
#
|
|
285
|
+
# config.site_url_options = lambda do |site|
|
|
286
|
+
# {host: "#{site.account.name}.example.com"}
|
|
287
|
+
# end
|
|
288
|
+
#
|
|
289
|
+
# config.public_entry_url_options = lambda do |entry|
|
|
290
|
+
# {
|
|
291
|
+
# host: "#{entry.site.account.name}.example.com",
|
|
292
|
+
# some_entry_specific_param: entry.id
|
|
293
|
+
# }
|
|
294
|
+
# end
|
|
223
295
|
attr_accessor :public_entry_url_options
|
|
224
296
|
|
|
225
297
|
# Either a lambda or an object with a `call` method taking a
|
|
@@ -227,6 +299,23 @@ module Pageflow
|
|
|
227
299
|
# construct the embed url of a published entry.
|
|
228
300
|
attr_accessor :entry_embed_url_options
|
|
229
301
|
|
|
302
|
+
# Define strategies to determine whether entries should be cut off
|
|
303
|
+
# (e.g., to preview paywalled premium content).
|
|
304
|
+
#
|
|
305
|
+
# @example
|
|
306
|
+
#
|
|
307
|
+
# config.cutoff_modes.register(
|
|
308
|
+
# 'subscription_header',
|
|
309
|
+
# lambda do |_entry, request|
|
|
310
|
+
# # Set by some proxy handling user authentication
|
|
311
|
+
# request.headers['X-Subscription'] != 'Premium'
|
|
312
|
+
# end
|
|
313
|
+
# )
|
|
314
|
+
#
|
|
315
|
+
# @return [CutoffModes]
|
|
316
|
+
# @since 17.1
|
|
317
|
+
attr_reader :cutoff_modes
|
|
318
|
+
|
|
230
319
|
# Either a lambda or an object with a `call` method taking a hash
|
|
231
320
|
# of theme option overrides and an {EntryAtRevision} and returning
|
|
232
321
|
# a transformed hash of overrides. Can be used to filter overrides
|
|
@@ -239,6 +328,14 @@ module Pageflow
|
|
|
239
328
|
# files based on feature flags and other entry or account traits.
|
|
240
329
|
attr_accessor :transform_theme_customization_files
|
|
241
330
|
|
|
331
|
+
# Where to redirect after creating an entry.
|
|
332
|
+
#
|
|
333
|
+
# Possible values:
|
|
334
|
+
#
|
|
335
|
+
# `:admin`: Go to entry admin page (default)
|
|
336
|
+
# `:editor`: Open created entry in editor
|
|
337
|
+
attr_accessor :after_entry_create_redirect_to
|
|
338
|
+
|
|
242
339
|
# Submit video/audio encoding jobs only after the user has
|
|
243
340
|
# explicitly confirmed in the editor. Can either be set to a
|
|
244
341
|
# boolean or a lambda that is passed the file and returns a
|
|
@@ -324,8 +421,7 @@ module Pageflow
|
|
|
324
421
|
# If you set these to <tt>nil</tt> or <tt>""</tt> the meta tag won't be included.
|
|
325
422
|
# @since 0.10
|
|
326
423
|
attr_accessor :default_keywords_meta_tag
|
|
327
|
-
attr_accessor :default_author_meta_tag
|
|
328
|
-
attr_accessor :default_publisher_meta_tag
|
|
424
|
+
attr_accessor :default_author_meta_tag, :default_publisher_meta_tag
|
|
329
425
|
|
|
330
426
|
# Share provider defaults.
|
|
331
427
|
#
|
|
@@ -381,6 +477,29 @@ module Pageflow
|
|
|
381
477
|
# @since 12.2
|
|
382
478
|
attr_accessor :news
|
|
383
479
|
|
|
480
|
+
# URL to a form that is used to translate an entry via an external service.
|
|
481
|
+
#
|
|
482
|
+
# @example
|
|
483
|
+
#
|
|
484
|
+
# config.entry_translator_url = lambda do |entry|
|
|
485
|
+
# Rails.application.routes.url_helpers.some_custom_route(entry)
|
|
486
|
+
# end
|
|
487
|
+
# @since 17.1
|
|
488
|
+
attr_accessor :entry_translator_url
|
|
489
|
+
|
|
490
|
+
# Registry for oEmbed providers that can be used to resolve URLs.
|
|
491
|
+
#
|
|
492
|
+
# @example
|
|
493
|
+
#
|
|
494
|
+
# config.oembed_providers.register(
|
|
495
|
+
# :bluesky,
|
|
496
|
+
# endpoint: 'https://bsky.app/oembed.{format}',
|
|
497
|
+
# url_patterns: ['https://bsky.app/profile/*/post/*']
|
|
498
|
+
# )
|
|
499
|
+
# @since 17.2
|
|
500
|
+
# @return [OembedProviders]
|
|
501
|
+
attr_reader :oembed_providers
|
|
502
|
+
|
|
384
503
|
def initialize(target_type_name = nil)
|
|
385
504
|
@target_type_name = target_type_name
|
|
386
505
|
|
|
@@ -418,6 +537,13 @@ module Pageflow
|
|
|
418
537
|
@file_types = FileTypes.new
|
|
419
538
|
@widget_types = WidgetTypes.new
|
|
420
539
|
@file_importers = FileImporters.new
|
|
540
|
+
@entry_structured_data_types = EntryStructuredDataTypes.new
|
|
541
|
+
@entry_structured_data_types.register(:article, lambda do |_entry|
|
|
542
|
+
{
|
|
543
|
+
'@type' => 'Article',
|
|
544
|
+
articleSection: 'longform'
|
|
545
|
+
}
|
|
546
|
+
end, default: true)
|
|
421
547
|
@help_entries = HelpEntries.new
|
|
422
548
|
@revision_components = RevisionComponents.new
|
|
423
549
|
|
|
@@ -425,14 +551,16 @@ module Pageflow
|
|
|
425
551
|
@css_rendered_thumbnail_styles = Defaults::CSS_RENDERED_THUMBNAIL_STYLES.dup
|
|
426
552
|
|
|
427
553
|
@site_request_scope = CnameSiteRequestScope.new
|
|
428
|
-
@public_entry_request_scope =
|
|
429
|
-
@public_entry_redirect = ->(_entry, _request) {
|
|
430
|
-
@
|
|
554
|
+
@public_entry_request_scope = ->(entries, _request) { entries }
|
|
555
|
+
@public_entry_redirect = ->(_entry, _request) {}
|
|
556
|
+
@additional_public_entry_headers = AdditionalHeaders.new
|
|
431
557
|
@entry_embed_url_options = {protocol: 'https'}
|
|
558
|
+
@cutoff_modes = CutoffModes.new
|
|
432
559
|
|
|
433
560
|
@transform_theme_customization_overrides = ->(overrides, _entry) { overrides }
|
|
434
561
|
@transform_theme_customization_files = ->(files, _entry) { files }
|
|
435
562
|
|
|
563
|
+
@after_entry_create_redirect_to = :admin
|
|
436
564
|
@confirm_encoding_jobs = false
|
|
437
565
|
@default_published_until_duration_in_months = 12
|
|
438
566
|
|
|
@@ -442,7 +570,8 @@ module Pageflow
|
|
|
442
570
|
|
|
443
571
|
@available_locales = [:en, :de]
|
|
444
572
|
@available_public_locales = PublicI18n.available_locales
|
|
445
|
-
@available_share_providers = [:email, :facebook, :linked_in, :
|
|
573
|
+
@available_share_providers = [:email, :facebook, :linked_in, :bluesky, :threads, :twitter,
|
|
574
|
+
:telegram, :whats_app]
|
|
446
575
|
|
|
447
576
|
@public_https_mode = :prevent
|
|
448
577
|
|
|
@@ -452,7 +581,7 @@ module Pageflow
|
|
|
452
581
|
|
|
453
582
|
@default_share_providers = @available_share_providers
|
|
454
583
|
|
|
455
|
-
@authorize_user_deletion =
|
|
584
|
+
@authorize_user_deletion = ->(_user) { true }
|
|
456
585
|
|
|
457
586
|
@available_file_licenses = [
|
|
458
587
|
:cc_by_4, :cc_by_sa_4, :cc_by_nc_4, :cc_by_nc_sa_4, :cc_by_nd_4, :cc_by_nc_nd_4
|
|
@@ -467,6 +596,13 @@ module Pageflow
|
|
|
467
596
|
@permissions = Permissions.new
|
|
468
597
|
|
|
469
598
|
@edit_lock_polling_interval = 15.seconds
|
|
599
|
+
|
|
600
|
+
@oembed_providers = OembedProviders.new
|
|
601
|
+
@oembed_providers.register(
|
|
602
|
+
:bluesky,
|
|
603
|
+
endpoint: 'https://embed.bsky.app/oembed',
|
|
604
|
+
url_patterns: ['https://bsky.app/profile/*/post/*']
|
|
605
|
+
)
|
|
470
606
|
end
|
|
471
607
|
|
|
472
608
|
# Activate a plugin.
|
|
@@ -489,18 +625,25 @@ module Pageflow
|
|
|
489
625
|
|
|
490
626
|
# @deprecated Use `config.page_types.register` instead.
|
|
491
627
|
def register_page_type(page_type)
|
|
492
|
-
|
|
628
|
+
Pageflow::Deprecation.warn(
|
|
629
|
+
'Pageflow::Configuration#register_page_type is deprecated. ' \
|
|
630
|
+
'Use config.page_types.register instead.'
|
|
631
|
+
)
|
|
493
632
|
page_types.register(page_type)
|
|
494
633
|
end
|
|
495
634
|
|
|
496
635
|
# @deprecated Pageflow now supports direct uploads to S3 via signed post requests.
|
|
497
636
|
# Please change your forms accordingly.
|
|
498
637
|
def paperclip_filesystem_root
|
|
499
|
-
|
|
638
|
+
Pageflow::Deprecation.warn(
|
|
639
|
+
'Pageflow::Configuration#paperclip_filesystem_root is deprecated.'
|
|
640
|
+
)
|
|
500
641
|
end
|
|
501
642
|
|
|
502
643
|
def paperclip_filesystem_root=(_val)
|
|
503
|
-
|
|
644
|
+
Pageflow::Deprecation.warn(
|
|
645
|
+
'Pageflow::Configuration#paperclip_filesystem_root is deprecated.'
|
|
646
|
+
)
|
|
504
647
|
end
|
|
505
648
|
|
|
506
649
|
# Scope configuration to entries of a certain entry type or access
|
|
@@ -542,11 +685,27 @@ module Pageflow
|
|
|
542
685
|
end
|
|
543
686
|
|
|
544
687
|
# @api private
|
|
545
|
-
def
|
|
546
|
-
options =
|
|
688
|
+
def site_url_options_for(site)
|
|
689
|
+
options = site_url_options ||
|
|
690
|
+
public_entry_url_options ||
|
|
691
|
+
Pageflow::SitesHelper::DEFAULT_SITE_URL_OPTIONS
|
|
692
|
+
|
|
547
693
|
options.respond_to?(:call) ? options.call(site) : options
|
|
548
694
|
end
|
|
549
695
|
|
|
696
|
+
# @api private
|
|
697
|
+
def public_entry_url_options_for(entry)
|
|
698
|
+
return site_url_options_for(entry.site) unless public_entry_url_options
|
|
699
|
+
|
|
700
|
+
options = public_entry_url_options
|
|
701
|
+
|
|
702
|
+
if options.respond_to?(:call)
|
|
703
|
+
options.call(site_url_options ? entry : entry.site)
|
|
704
|
+
else
|
|
705
|
+
options
|
|
706
|
+
end
|
|
707
|
+
end
|
|
708
|
+
|
|
550
709
|
# @api private
|
|
551
710
|
def enable_features(names)
|
|
552
711
|
features.enable(names, FeatureLevelConfiguration.new(self))
|
|
@@ -568,7 +727,13 @@ module Pageflow
|
|
|
568
727
|
delegate :page_types, to: :config
|
|
569
728
|
delegate :themes, to: :config
|
|
570
729
|
delegate :widget_types, to: :config
|
|
730
|
+
delegate :entry_structured_data_types, to: :config
|
|
571
731
|
delegate :public_entry_cache_control_header=, to: :config
|
|
732
|
+
delegate :additional_public_entry_headers, to: :config
|
|
733
|
+
delegate :cutoff_modes, to: :config
|
|
734
|
+
delegate :entry_translator_url=, to: :config
|
|
735
|
+
delegate :public_entry_redirect=, to: :config
|
|
736
|
+
delegate :public_entry_url_options=, to: :config
|
|
572
737
|
|
|
573
738
|
delegate :for_entry_type, to: :config
|
|
574
739
|
end
|
|
@@ -580,11 +745,11 @@ module Pageflow
|
|
|
580
745
|
@entry_type_config = config.get_entry_type_config(entry_type)
|
|
581
746
|
end
|
|
582
747
|
|
|
583
|
-
def method_missing(method, *
|
|
748
|
+
def method_missing(method, *)
|
|
584
749
|
if @config.respond_to?(method)
|
|
585
|
-
@config.send(method, *
|
|
750
|
+
@config.send(method, *)
|
|
586
751
|
elsif @entry_type_config.respond_to?(method)
|
|
587
|
-
@entry_type_config.send(method, *
|
|
752
|
+
@entry_type_config.send(method, *)
|
|
588
753
|
else
|
|
589
754
|
super
|
|
590
755
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
# Register strategies to determine whether only the part of an entry
|
|
3
|
+
# before some cutoff point should be rendered (e.g., to preview
|
|
4
|
+
# paywalled premium content).
|
|
5
|
+
# @since 17.1
|
|
6
|
+
class CutoffModes
|
|
7
|
+
# @api private
|
|
8
|
+
def initialize
|
|
9
|
+
@modes = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Register callable to determine whether only the part of an entry
|
|
13
|
+
# before some cutoff point should be rendered (e.g., to preview
|
|
14
|
+
# paywalled premium content). Cutoff modes can then be enabled per
|
|
15
|
+
# site.
|
|
16
|
+
#
|
|
17
|
+
# @param name [String]
|
|
18
|
+
# Referenced in sites.
|
|
19
|
+
# @param enabled [#call]
|
|
20
|
+
# Take {EntryAtRevision} and {ActionDispatch::Request} and
|
|
21
|
+
# return true if the entry shall be cut off.
|
|
22
|
+
def register(name, enabled)
|
|
23
|
+
@modes[name.to_s] = Mode.new(name, enabled)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @api private
|
|
27
|
+
def enabled_for?(entry, request)
|
|
28
|
+
!!@modes[entry.site.cutoff_mode_name]&.enabled&.call(entry, request)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @api private
|
|
32
|
+
def names
|
|
33
|
+
@modes.keys
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @api private
|
|
37
|
+
Mode = Struct.new(:name, :enabled)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/deprecation'
|
|
4
|
+
require 'pageflow/version'
|
|
5
|
+
|
|
6
|
+
module Pageflow
|
|
7
|
+
# @api private
|
|
8
|
+
module Deprecation
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
def warn(message, callstack = nil)
|
|
12
|
+
deprecator.warn(message, callstack || caller_locations(2))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def deprecator
|
|
16
|
+
@deprecator ||= ActiveSupport::Deprecation.new(Pageflow::VERSION, 'Pageflow')
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -13,19 +13,15 @@ module Pageflow
|
|
|
13
13
|
before_action :authenticate_user!
|
|
14
14
|
|
|
15
15
|
before_action do
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
head :not_found
|
|
20
|
-
end
|
|
16
|
+
@entry = DraftEntry.find(params[:entry_id])
|
|
17
|
+
rescue ActiveRecord::RecordNotFound
|
|
18
|
+
head :not_found
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
before_action do
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
head :forbidden
|
|
28
|
-
end
|
|
22
|
+
Ability.new(current_user).authorize!(:update, @entry.to_model)
|
|
23
|
+
rescue CanCan::AccessDenied
|
|
24
|
+
head :forbidden
|
|
29
25
|
end
|
|
30
26
|
|
|
31
27
|
before_action :verify_edit_lock
|
data/lib/pageflow/engine.rb
CHANGED
|
@@ -22,11 +22,10 @@ require 'jquery-layout-rails'
|
|
|
22
22
|
require 'backbone-rails'
|
|
23
23
|
require 'marionette-rails'
|
|
24
24
|
require 'jquery-fileupload-rails'
|
|
25
|
-
require 'jquery-minicolors-rails'
|
|
26
|
-
require 'wysihtml/rails'
|
|
27
25
|
require 'i18n-js'
|
|
28
26
|
require 'http_accept_language'
|
|
29
27
|
require 'pageflow-public-i18n'
|
|
28
|
+
require 'oembed'
|
|
30
29
|
|
|
31
30
|
require 'pageflow_paged'
|
|
32
31
|
require 'pageflow_scrolled'
|
|
@@ -35,8 +34,8 @@ require 'symmetric-encryption'
|
|
|
35
34
|
require 'pageflow/rails_version'
|
|
36
35
|
|
|
37
36
|
if Gem::Specification.find_all_by_name('pageflow-react', '>= 0.0').any?
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
raise('The pageflow-react gem has been merged into the pageflow gem. ' \
|
|
38
|
+
'See the pageflow changelog for update instructions.')
|
|
40
39
|
end
|
|
41
40
|
|
|
42
41
|
module Pageflow
|
|
@@ -92,14 +91,14 @@ module Pageflow
|
|
|
92
91
|
|
|
93
92
|
# Precompile additional assets.
|
|
94
93
|
initializer 'pageflow.assets.precompile' do |app|
|
|
95
|
-
app.config.assets.precompile += %w
|
|
94
|
+
app.config.assets.precompile += %w[
|
|
96
95
|
pageflow/application_with_simulated_media_queries.css
|
|
97
96
|
pageflow/print_view.css
|
|
98
97
|
pageflow/lt_ie9.js pageflow/lt_ie9.css pageflow/ie9.js pageflow/ie9.css
|
|
99
98
|
pageflow/vendor.js
|
|
100
99
|
pageflow/editor/vendor.js
|
|
101
100
|
video-js.swf vjs.eot vjs.svg vjs.ttf vjs.woff
|
|
102
|
-
|
|
101
|
+
]
|
|
103
102
|
|
|
104
103
|
app.config.assets.precompile << lambda do |path, _filename|
|
|
105
104
|
Pageflow.config.themes.any? do |theme|
|
|
@@ -28,9 +28,39 @@ module Pageflow
|
|
|
28
28
|
EntriesControllerEnvHelper.get_pageflow_hash(env)['entry_mode']
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
# Returns `true` if the entry is being rendered as an embed. The
|
|
32
|
+
# information will be placed in the request env by the Pageflow
|
|
33
|
+
# engine before delegating to the entry type's frontend app.
|
|
34
|
+
#
|
|
35
|
+
# Use {EntriesControllerTestHelper} to set up the request
|
|
36
|
+
# environment in controller tests.
|
|
37
|
+
def get_embed_from_env(env = request.env)
|
|
38
|
+
EntriesControllerEnvHelper.get_pageflow_hash(env)['embed']
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns the locale of the signed in user, i.e. the locale any
|
|
42
|
+
# user interface displayed on top of the entry shall use. Returns
|
|
43
|
+
# `nil` for published entries since those are not rendered for a
|
|
44
|
+
# specific user. Entry types are expected to render the entry
|
|
45
|
+
# itself in the locale of the entry, no matter which locale is
|
|
46
|
+
# returned here.
|
|
47
|
+
#
|
|
48
|
+
# Use {EntriesControllerTestHelper} to set up the request
|
|
49
|
+
# environment in controller tests.
|
|
50
|
+
#
|
|
51
|
+
# @since 17.2
|
|
52
|
+
def get_ui_locale_from_env(env = request.env)
|
|
53
|
+
EntriesControllerEnvHelper.get_pageflow_hash(env)['ui_locale']
|
|
54
|
+
end
|
|
55
|
+
|
|
31
56
|
# @api private
|
|
32
|
-
def self.add_entry_info_to_env(env, entry:, mode: nil)
|
|
33
|
-
env['pageflow'] = {
|
|
57
|
+
def self.add_entry_info_to_env(env, entry:, mode: nil, embed: false, ui_locale: nil)
|
|
58
|
+
env['pageflow'] = {
|
|
59
|
+
'published_entry' => entry,
|
|
60
|
+
'entry_mode' => mode,
|
|
61
|
+
'embed' => embed,
|
|
62
|
+
'ui_locale' => ui_locale
|
|
63
|
+
}
|
|
34
64
|
end
|
|
35
65
|
|
|
36
66
|
# @api private
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module Pageflow
|
|
2
2
|
module EntryExportImport
|
|
3
|
+
# @api private
|
|
3
4
|
module EntrySerialization
|
|
4
5
|
extend self
|
|
5
6
|
|
|
@@ -13,10 +14,10 @@ module Pageflow
|
|
|
13
14
|
# to prevent it from showing up in Active Admin JSON exports.
|
|
14
15
|
# It is included separately as part of the entry export.
|
|
15
16
|
'entry' => entry
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
.as_json(except: [:folder_id, :password_digest, :users_count])
|
|
18
|
+
.merge('features_configuration' => entry.features_configuration,
|
|
19
|
+
'draft' => RevisionSerialization.dump(entry.draft),
|
|
20
|
+
'last_publication' => dump_publication(publication))
|
|
20
21
|
}
|
|
21
22
|
end
|
|
22
23
|
|
|
@@ -50,18 +51,18 @@ module Pageflow
|
|
|
50
51
|
|
|
51
52
|
def import_draft(entry_data, options, entry, file_mappings)
|
|
52
53
|
RevisionSerialization.import(entry_data['draft'],
|
|
53
|
-
entry
|
|
54
|
+
entry:,
|
|
54
55
|
creator: options[:creator],
|
|
55
|
-
file_mappings:
|
|
56
|
+
file_mappings:)
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
def import_last_publication(entry_data, options, entry, file_mappings)
|
|
59
60
|
return unless entry_data['last_publication']
|
|
60
61
|
|
|
61
62
|
RevisionSerialization.import(entry_data['last_publication'],
|
|
62
|
-
entry
|
|
63
|
+
entry:,
|
|
63
64
|
creator: options[:creator],
|
|
64
|
-
file_mappings:
|
|
65
|
+
file_mappings:)
|
|
65
66
|
end
|
|
66
67
|
end
|
|
67
68
|
end
|
|
@@ -7,8 +7,8 @@ module Pageflow
|
|
|
7
7
|
class IncompatibleVersionsError < StandardError; end
|
|
8
8
|
|
|
9
9
|
def dump
|
|
10
|
-
Pageflow.config.page_types.
|
|
11
|
-
|
|
10
|
+
Pageflow.config.page_types.to_h do |page_type|
|
|
11
|
+
[page_type.name, page_type.export_version]
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -19,6 +19,7 @@ module Pageflow
|
|
|
19
19
|
|
|
20
20
|
create_widgets(revision, data['widgets'])
|
|
21
21
|
create_revision_components(revision, data['components'])
|
|
22
|
+
create_file_folders(revision, data['file_folders'])
|
|
22
23
|
create_files(revision, data['file_usages'])
|
|
23
24
|
|
|
24
25
|
revision
|
|
@@ -31,6 +32,7 @@ module Pageflow
|
|
|
31
32
|
|
|
32
33
|
def create_revision(data)
|
|
33
34
|
revision_attributes = data.except('storylines',
|
|
35
|
+
'file_folders',
|
|
34
36
|
'file_usages',
|
|
35
37
|
'widgets',
|
|
36
38
|
'components',
|
|
@@ -40,7 +42,7 @@ module Pageflow
|
|
|
40
42
|
revision_attributes['theme_name'] = 'default'
|
|
41
43
|
end
|
|
42
44
|
|
|
43
|
-
entry.revisions.create!(revision_attributes.merge(creator:
|
|
45
|
+
entry.revisions.create!(revision_attributes.merge(creator:)) do |revision|
|
|
44
46
|
revision.published_until = Time.now if revision.published?
|
|
45
47
|
end
|
|
46
48
|
end
|
|
@@ -51,6 +53,14 @@ module Pageflow
|
|
|
51
53
|
end
|
|
52
54
|
end
|
|
53
55
|
|
|
56
|
+
# File usages refer to their folder by perma id, so folders have to
|
|
57
|
+
# exist before the usages which point at them are created.
|
|
58
|
+
def create_file_folders(revision, file_folders_data)
|
|
59
|
+
file_folders_data.each do |file_folder_data|
|
|
60
|
+
revision.file_folders.create!(file_folder_data.except(*DEFAULT_REMOVAL_COLUMNS))
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
54
64
|
def create_revision_components(revision, revision_components_data)
|
|
55
65
|
revision_components_data.each do |component_data|
|
|
56
66
|
nested_compontents_data = component_data.delete('components')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Pageflow
|
|
2
|
-
module EntryExportImport
|
|
2
|
+
module EntryExportImport # rubocop:todo Style/Documentation
|
|
3
3
|
extend self
|
|
4
4
|
|
|
5
5
|
def export(entry, archive_file_path)
|
|
@@ -30,9 +30,9 @@ module Pageflow
|
|
|
30
30
|
def extract_entry(archive, creator, file_mappings)
|
|
31
31
|
archive.extract_to_tempfile('entry.json') do |tempfile|
|
|
32
32
|
EntrySerialization.import(JSON.parse(tempfile.read),
|
|
33
|
-
creator
|
|
33
|
+
creator:,
|
|
34
34
|
account: creator.accounts.first,
|
|
35
|
-
file_mappings:
|
|
35
|
+
file_mappings:)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
|