pageflow 17.0.5 → 17.1.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 +362 -35
- data/README.md +0 -1
- data/admins/pageflow/accounts.rb +16 -14
- data/admins/pageflow/entry.rb +68 -20
- data/admins/pageflow/entry_templates.rb +10 -9
- data/admins/pageflow/folder.rb +1 -1
- data/admins/pageflow/membership.rb +4 -4
- 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/javascripts/pageflow/admin/entries.js +30 -5
- data/app/assets/javascripts/pageflow/dist/ui.js +2865 -257
- data/app/assets/stylesheets/pageflow/admin/entries/index_table.scss +2 -1
- data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +2 -1
- data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +6 -0
- data/app/assets/stylesheets/pageflow/editor/base.scss +2 -0
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +7 -1
- data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +5 -1
- data/app/assets/stylesheets/pageflow/editor/files.scss +28 -16
- data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +24 -0
- data/app/assets/stylesheets/pageflow/editor/info_box.scss +11 -3
- data/app/assets/stylesheets/pageflow/editor/list.scss +6 -4
- data/app/assets/stylesheets/pageflow/editor/list_search_field.scss +52 -0
- data/app/assets/stylesheets/pageflow/editor/outline.scss +0 -13
- data/app/assets/stylesheets/pageflow/editor/select_button.scss +1 -1
- 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/ui/forms.scss +4 -0
- data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +8 -0
- data/app/assets/stylesheets/pageflow/ui/input/file_name_input.scss +37 -0
- data/app/assets/stylesheets/pageflow/ui/properties.scss +5 -0
- data/app/assets/stylesheets/pageflow/ui.scss +1 -0
- 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 +2 -1
- data/app/controllers/pageflow/editor/entry_publications_controller.rb +1 -0
- data/app/controllers/pageflow/editor/file_import_controller.rb +3 -3
- data/app/controllers/pageflow/editor/files_controller.rb +7 -6
- data/app/controllers/pageflow/editor/widgets_controller.rb +1 -0
- data/app/controllers/pageflow/entries_controller.rb +77 -17
- 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/revisions_controller.rb +2 -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 +1 -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 +3 -3
- 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 +2 -4
- data/app/helpers/pageflow/editor/config_helper.rb +1 -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 +58 -34
- data/app/helpers/pageflow/entry_json_seed_helper.rb +3 -2
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- data/app/helpers/pageflow/video_files_helper.rb +29 -13
- data/app/helpers/pageflow/widgets_helper.rb +7 -6
- data/app/inputs/pageflow_permalink_input.rb +3 -2
- 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 +13 -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 +23 -23
- data/app/models/concerns/pageflow/serialization_blacklist.rb +1 -1
- 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/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/customized_theme.rb +6 -6
- data/app/models/pageflow/draft_entry.rb +37 -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 +44 -30
- data/app/models/pageflow/entry_at_revision.rb +5 -1
- 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_reuse.rb +2 -2
- data/app/models/pageflow/file_usage.rb +10 -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 +20 -5
- data/app/models/pageflow/image_file_url_templates.rb +1 -1
- data/app/models/pageflow/invitation_form.rb +2 -1
- 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 +23 -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 +24 -15
- data/app/models/pageflow/roles.rb +14 -18
- data/app/models/pageflow/site.rb +36 -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 +7 -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 +4 -3
- 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/editor/config/_seeds.json.jbuilder +1 -1
- data/app/views/pageflow/editor/entries/index.json.jbuilder +1 -1
- 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/files/_file.json.jbuilder +5 -13
- 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/sites/_site.json.jbuilder +1 -0
- data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +1 -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 +3 -3
- 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/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 +110 -4
- data/config/locales/en.yml +109 -7
- data/config/routes.rb +15 -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/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +3912 -1486
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +468 -1161
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +28125 -22
- data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +26589 -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/controllers/pageflow_scrolled/editor/chapters_controller.rb +5 -3
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +2 -2
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +2 -2
- data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -1
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +2 -2
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +1 -0
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +2 -1
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +60 -6
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +16 -2
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +21 -23
- data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +16 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +15 -14
- data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +12 -0
- data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +12 -1
- data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +19 -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 +2 -0
- data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +17 -9
- 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 +25 -5
- data/entry_types/scrolled/app/views/pageflow_scrolled/storylines/_storyline.json.jbuilder +7 -0
- data/entry_types/scrolled/config/locales/de.yml +614 -45
- data/entry_types/scrolled/config/locales/en.yml +586 -47
- 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 +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/additional_theme_assets.rb +27 -0
- data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +16 -4
- data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +1 -1
- data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -4
- data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +24 -22
- data/entry_types/scrolled/lib/pageflow_scrolled.rb +1 -1
- data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +6 -5
- data/entry_types/scrolled/package/config/webpack.js +22 -0
- data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1529 -0
- data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.css +1 -0
- data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +59 -0
- data/entry_types/scrolled/package/contentElements-editor.js +2075 -321
- data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
- data/entry_types/scrolled/package/contentElements-frontend.js +1019 -643
- data/entry_types/scrolled/package/editor.js +2086 -1091
- data/entry_types/scrolled/package/frontend/{EditableInlineText.module-ebd22921.js → FloatingPortalRootProvider-51914be7.js} +1200 -1258
- data/entry_types/scrolled/package/frontend/{PhonePlatformContext-4ec6b2de.js → PhonePlatformContext-9f76033e.js} +7 -8
- data/entry_types/scrolled/package/frontend/ThemeIcon-81f2f066.js +1932 -0
- data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-788e9cdb.js +39 -0
- data/entry_types/scrolled/package/frontend/{Viewer-1bb5597c.js → Viewer-0345ce57.js} +36 -63
- data/entry_types/scrolled/package/frontend/{Viewer-1ecf3375.js → Viewer-cdc549cc.js} +15 -22
- data/entry_types/scrolled/package/frontend/{Wavesurfer-7d9cf1b7.js → Wavesurfer-1cdc3925.js} +54 -74
- data/entry_types/scrolled/package/frontend/{components-024a9893.js → components-96660ffd.js} +1791 -841
- data/entry_types/scrolled/package/frontend/{index-11f32f10.js → index-eb670c2f.js} +11 -18
- data/entry_types/scrolled/package/frontend/index.css +1 -1
- data/entry_types/scrolled/package/frontend/index.js +517 -903
- data/entry_types/scrolled/package/frontend/{createSuper-d0f30da3.js → inherits-539844a6.js} +40 -56
- data/entry_types/scrolled/package/frontend/{useContentElementEditorState-4f4c3cf6.js → useContentElementEditorState-77fe6c79.js} +7 -8
- data/entry_types/scrolled/package/frontend/usePhonePlatform-c2ba875d.js +8 -0
- data/entry_types/scrolled/package/frontend-server.js +0 -1
- data/entry_types/scrolled/package/package.json +18 -10
- data/entry_types/scrolled/package/testHelpers.js +306 -70
- 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 +47 -66
- data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
- data/entry_types/scrolled/package/widgets/defaultNavigation.js +177 -207
- data/entry_types/scrolled/package/widgets/excursionDialog.css +1 -0
- data/entry_types/scrolled/package/widgets/excursionDialog.js +109 -0
- data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -0
- data/entry_types/scrolled/package/widgets/excursionSheet.js +262 -0
- data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
- data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +6 -9
- data/entry_types/scrolled/package/widgets/iconScrollIndicator.css +1 -0
- data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +48 -0
- data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -0
- data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +144 -0
- data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
- data/entry_types/scrolled/package/widgets/textInlineFileRights.js +26 -9
- data/entry_types/scrolled/package/widgets-server.js +1 -0
- data/entry_types/scrolled/spec/factories/chapters.rb +14 -1
- data/entry_types/scrolled/spec/factories/content_elements.rb +1 -1
- 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 +6 -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 +141 -18
- data/lib/pageflow/cutoff_modes.rb +39 -0
- data/lib/pageflow/editor_controller.rb +6 -10
- data/lib/pageflow/engine.rb +4 -5
- data/lib/pageflow/entry_export_import/attachment_files.rb +1 -1
- data/lib/pageflow/entry_export_import/entry_serialization.rb +5 -4
- data/lib/pageflow/entry_export_import/file_mappings.rb +1 -0
- data/lib/pageflow/entry_export_import/revision_serialization/import.rb +1 -1
- data/lib/pageflow/entry_export_import.rb +3 -3
- 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 +3 -3
- data/lib/pageflow/file_types.rb +3 -3
- 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/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/quota.rb +9 -5
- data/lib/pageflow/quotas.rb +1 -1
- data/lib/pageflow/rails_version.rb +1 -0
- 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 +3 -3
- data/lib/pageflow/user_mixin.rb +6 -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 +7 -2
- data/lib/tasks/pageflow_tasks.rake +1 -1
- data/package/editor.js +954 -868
- data/package/frontend.js +113 -387
- data/package/package.json +2 -1
- data/package/testHelpers.js +10 -56
- data/package/ui.js +209 -251
- 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/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_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 +26 -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 +98 -45
- 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/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/ToggleFullscreenCornerButton-b79159cc.js +0 -107
- data/entry_types/scrolled/package/frontend/arrowRight-62998af9.js +0 -77
- data/entry_types/scrolled/package/frontend/i18n-ce13a8bf.js +0 -1129
data/package/frontend.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import 'core-js/modules/es.array.from';
|
2
2
|
import 'core-js/modules/es.array.includes';
|
3
|
+
import 'core-js/modules/es.array.iterator';
|
3
4
|
import 'core-js/modules/es.object.assign';
|
4
5
|
import 'core-js/modules/es.object.entries';
|
5
6
|
import 'core-js/modules/es.object.keys';
|
@@ -148,17 +149,13 @@ function _slicedToArray(arr, i) {
|
|
148
149
|
var Persistence = /*#__PURE__*/function () {
|
149
150
|
function Persistence(_ref) {
|
150
151
|
var cookies = _ref.cookies;
|
151
|
-
|
152
152
|
_classCallCheck(this, Persistence);
|
153
|
-
|
154
153
|
this.cookies = cookies;
|
155
154
|
}
|
156
|
-
|
157
155
|
_createClass(Persistence, [{
|
158
156
|
key: "store",
|
159
157
|
value: function store(vendors, signal) {
|
160
158
|
var _this = this;
|
161
|
-
|
162
159
|
var vendorsByCookieName = vendors.reduce(function (sorted, vendor) {
|
163
160
|
var cookieName = vendor.cookieName;
|
164
161
|
sorted[cookieName] = sorted[cookieName] || [];
|
@@ -167,11 +164,9 @@ var Persistence = /*#__PURE__*/function () {
|
|
167
164
|
}, {});
|
168
165
|
Object.entries(vendorsByCookieName).forEach(function (_ref2) {
|
169
166
|
var _ref3 = _slicedToArray(_ref2, 2),
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
cookieName = _ref3[0],
|
168
|
+
vendors = _ref3[1];
|
173
169
|
var cookieDomain = vendors[0].cookieDomain;
|
174
|
-
|
175
170
|
_this.setCookie(cookieName, JSON.stringify(vendors.reduce(function (result, vendor) {
|
176
171
|
result[vendor.cookieKey || vendor.name] = signal === 'accepted' ? true : signal === 'denied' ? false : signal[vendor.name];
|
177
172
|
return result;
|
@@ -199,7 +194,6 @@ var Persistence = /*#__PURE__*/function () {
|
|
199
194
|
if (domain && !window.location.hostname.match(new RegExp("".concat(domain, "$")))) {
|
200
195
|
domain = null;
|
201
196
|
}
|
202
|
-
|
203
197
|
this.cookies.setItem(name, value, {
|
204
198
|
path: '/',
|
205
199
|
domain: domain,
|
@@ -210,7 +204,6 @@ var Persistence = /*#__PURE__*/function () {
|
|
210
204
|
});
|
211
205
|
}
|
212
206
|
}]);
|
213
|
-
|
214
207
|
return Persistence;
|
215
208
|
}();
|
216
209
|
|
@@ -219,9 +212,8 @@ var cookies = {
|
|
219
212
|
getItem: function getItem(sKey) {
|
220
213
|
if (!sKey) {
|
221
214
|
return null;
|
222
|
-
}
|
223
|
-
|
224
|
-
|
215
|
+
}
|
216
|
+
// eslint-disable-next-line no-useless-escape
|
225
217
|
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
|
226
218
|
},
|
227
219
|
setItem: function setItem() {
|
@@ -232,26 +224,22 @@ var cookies = {
|
|
232
224
|
if (!this.hasItem(sKey)) {
|
233
225
|
return false;
|
234
226
|
}
|
235
|
-
|
236
227
|
document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "");
|
237
228
|
return true;
|
238
229
|
},
|
239
230
|
hasItem: function hasItem(sKey) {
|
240
231
|
if (!sKey) {
|
241
232
|
return false;
|
242
|
-
}
|
243
|
-
|
244
|
-
|
233
|
+
}
|
234
|
+
// eslint-disable-next-line no-useless-escape
|
245
235
|
return new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=").test(document.cookie);
|
246
236
|
},
|
247
237
|
keys: function keys() {
|
248
238
|
// eslint-disable-next-line no-useless-escape
|
249
239
|
var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
|
250
|
-
|
251
240
|
for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {
|
252
241
|
aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);
|
253
242
|
}
|
254
|
-
|
255
243
|
return aKeys;
|
256
244
|
}
|
257
245
|
};
|
@@ -267,31 +255,26 @@ function setItemCookieString(key, value, expiresOrOptions, path, domain, secure)
|
|
267
255
|
});
|
268
256
|
}
|
269
257
|
}
|
270
|
-
|
271
258
|
function setItemCookieStringWithOptions(key, value, _ref) {
|
272
259
|
var expires = _ref.expires,
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
260
|
+
path = _ref.path,
|
261
|
+
domain = _ref.domain,
|
262
|
+
secure = _ref.secure,
|
263
|
+
sameSite = _ref.sameSite;
|
277
264
|
var expiresPart = "";
|
278
|
-
|
279
265
|
if (expires) {
|
280
266
|
switch (expires.constructor) {
|
281
267
|
case Number:
|
282
268
|
expiresPart = expires === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + expires;
|
283
269
|
break;
|
284
|
-
|
285
270
|
case String:
|
286
271
|
expiresPart = "; expires=" + expires;
|
287
272
|
break;
|
288
|
-
|
289
273
|
case Date:
|
290
274
|
expiresPart = "; expires=" + expires.toUTCString();
|
291
275
|
break;
|
292
276
|
}
|
293
277
|
}
|
294
|
-
|
295
278
|
return encodeURIComponent(key) + "=" + encodeURIComponent(value) + expiresPart + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : "") + (sameSite ? "; SameSite=" + sameSite : "") + (secure ? "; Secure" : "");
|
296
279
|
}
|
297
280
|
|
@@ -299,12 +282,9 @@ var supportedParadigms = ['external opt-out', 'opt-in', 'lazy opt-in', 'skip'];
|
|
299
282
|
var Consent = /*#__PURE__*/function () {
|
300
283
|
function Consent(_ref) {
|
301
284
|
var _this = this;
|
302
|
-
|
303
285
|
var cookies = _ref.cookies,
|
304
|
-
|
305
|
-
|
286
|
+
inEditor = _ref.inEditor;
|
306
287
|
_classCallCheck(this, Consent);
|
307
|
-
|
308
288
|
this.requestedPromise = new Promise(function (resolve) {
|
309
289
|
_this.requestedPromiseResolve = resolve;
|
310
290
|
});
|
@@ -315,29 +295,24 @@ var Consent = /*#__PURE__*/function () {
|
|
315
295
|
this.emitter = _objectSpread2({}, BackboneEvents);
|
316
296
|
this.inEditor = inEditor;
|
317
297
|
}
|
318
|
-
|
319
298
|
_createClass(Consent, [{
|
320
299
|
key: "registerVendor",
|
321
300
|
value: function registerVendor(name, _ref2) {
|
322
301
|
var displayName = _ref2.displayName,
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
302
|
+
description = _ref2.description,
|
303
|
+
paradigm = _ref2.paradigm,
|
304
|
+
cookieName = _ref2.cookieName,
|
305
|
+
cookieKey = _ref2.cookieKey,
|
306
|
+
cookieDomain = _ref2.cookieDomain;
|
329
307
|
if (this.vendorRegistrationClosed) {
|
330
308
|
throw new Error("Vendor ".concat(name, " has been registered after ") + 'registration has been closed.');
|
331
309
|
}
|
332
|
-
|
333
310
|
if (!name.match(/^[a-z0-9-_]+$/i)) {
|
334
311
|
throw new Error("Invalid vendor name '".concat(name, "'. ") + 'Only letters, numbers, hyphens and underscores are allowed.');
|
335
312
|
}
|
336
|
-
|
337
313
|
if (supportedParadigms.indexOf(paradigm) < 0) {
|
338
314
|
throw new Error("unknown paradigm ".concat(paradigm));
|
339
315
|
}
|
340
|
-
|
341
316
|
this.vendors.push({
|
342
317
|
displayName: displayName,
|
343
318
|
description: description,
|
@@ -352,30 +327,24 @@ var Consent = /*#__PURE__*/function () {
|
|
352
327
|
key: "closeVendorRegistration",
|
353
328
|
value: function closeVendorRegistration() {
|
354
329
|
var _this2 = this;
|
355
|
-
|
356
330
|
this.vendorRegistrationClosed = true;
|
357
|
-
|
358
331
|
if (!this.getUndecidedOptInVendors().length) {
|
359
332
|
this.triggerDecisionEvents();
|
360
333
|
return;
|
361
334
|
}
|
362
|
-
|
363
335
|
var vendors = this.getRequestedVendors();
|
364
336
|
this.requestedPromiseResolve({
|
365
337
|
vendors: this.withState(vendors),
|
366
338
|
acceptAll: function acceptAll() {
|
367
339
|
_this2.persistence.store(vendors, 'accepted');
|
368
|
-
|
369
340
|
_this2.triggerDecisionEvents();
|
370
341
|
},
|
371
342
|
denyAll: function denyAll() {
|
372
343
|
_this2.persistence.store(vendors, 'denied');
|
373
|
-
|
374
344
|
_this2.triggerDecisionEvents();
|
375
345
|
},
|
376
346
|
save: function save(vendorConsent) {
|
377
347
|
_this2.persistence.store(vendors, vendorConsent);
|
378
|
-
|
379
348
|
_this2.triggerDecisionEvents();
|
380
349
|
}
|
381
350
|
});
|
@@ -384,10 +353,8 @@ var Consent = /*#__PURE__*/function () {
|
|
384
353
|
key: "relevantVendors",
|
385
354
|
value: function relevantVendors() {
|
386
355
|
var _this3 = this;
|
387
|
-
|
388
356
|
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
389
|
-
|
390
|
-
|
357
|
+
additionalVendorNames = _ref3.include;
|
391
358
|
return this.withState(this.vendors.filter(function (vendor) {
|
392
359
|
return (additionalVendorNames === null || additionalVendorNames === void 0 ? void 0 : additionalVendorNames.includes(vendor.name)) || vendor.paradigm === 'opt-in' || vendor.paradigm === 'external opt-out' || vendor.paradigm === 'lazy opt-in' && _this3.persistence.read(vendor) !== 'undecided';
|
393
360
|
}), {
|
@@ -398,13 +365,10 @@ var Consent = /*#__PURE__*/function () {
|
|
398
365
|
key: "require",
|
399
366
|
value: function require(vendorName) {
|
400
367
|
var _this4 = this;
|
401
|
-
|
402
368
|
if (this.inEditor) {
|
403
369
|
return Promise.resolve('fulfilled');
|
404
370
|
}
|
405
|
-
|
406
371
|
var vendor = this.findVendor(vendorName, 'require consent for');
|
407
|
-
|
408
372
|
switch (vendor.paradigm) {
|
409
373
|
case 'opt-in':
|
410
374
|
case 'lazy opt-in':
|
@@ -413,29 +377,23 @@ var Consent = /*#__PURE__*/function () {
|
|
413
377
|
_this4.emitter.once("".concat(vendor.name, ":accepted"), function () {
|
414
378
|
return resolve('fulfilled');
|
415
379
|
});
|
416
|
-
|
417
380
|
_this4.emitter.once("".concat(vendor.name, ":denied"), function () {
|
418
381
|
return resolve('failed');
|
419
382
|
});
|
420
383
|
});
|
421
384
|
}
|
422
|
-
|
423
385
|
if (this.persistence.read(vendor) === 'accepted') {
|
424
386
|
return Promise.resolve('fulfilled');
|
425
387
|
} else {
|
426
388
|
return Promise.resolve('failed');
|
427
389
|
}
|
428
|
-
|
429
390
|
case 'external opt-out':
|
430
391
|
if (this.persistence.read(vendor) === 'denied') {
|
431
392
|
return Promise.resolve('failed');
|
432
393
|
}
|
433
|
-
|
434
394
|
return Promise.resolve('fulfilled');
|
435
|
-
|
436
395
|
case 'skip':
|
437
396
|
return Promise.resolve('fulfilled');
|
438
|
-
|
439
397
|
default:
|
440
398
|
// should not be used
|
441
399
|
return null;
|
@@ -445,13 +403,10 @@ var Consent = /*#__PURE__*/function () {
|
|
445
403
|
key: "requireAccepted",
|
446
404
|
value: function requireAccepted(vendorName) {
|
447
405
|
var _this5 = this;
|
448
|
-
|
449
406
|
if (this.inEditor) {
|
450
407
|
return Promise.resolve('fulfilled');
|
451
408
|
}
|
452
|
-
|
453
409
|
var vendor = this.findVendor(vendorName, 'require consent for');
|
454
|
-
|
455
410
|
if (vendor.paradigm === 'opt-in' || vendor.paradigm === 'lazy opt-in') {
|
456
411
|
if (this.getUndecidedOptInVendors().length || this.persistence.read(vendor) !== 'accepted') {
|
457
412
|
return new Promise(function (resolve) {
|
@@ -460,7 +415,6 @@ var Consent = /*#__PURE__*/function () {
|
|
460
415
|
});
|
461
416
|
});
|
462
417
|
}
|
463
|
-
|
464
418
|
return Promise.resolve('fulfilled');
|
465
419
|
} else {
|
466
420
|
return this.require(vendorName);
|
@@ -495,7 +449,6 @@ var Consent = /*#__PURE__*/function () {
|
|
495
449
|
key: "getUndecidedOptInVendors",
|
496
450
|
value: function getUndecidedOptInVendors() {
|
497
451
|
var _this6 = this;
|
498
|
-
|
499
452
|
return this.vendors.filter(function (vendor) {
|
500
453
|
return vendor.paradigm === 'opt-in' && _this6.persistence.read(vendor) === 'undecided';
|
501
454
|
});
|
@@ -504,7 +457,6 @@ var Consent = /*#__PURE__*/function () {
|
|
504
457
|
key: "triggerDecisionEvents",
|
505
458
|
value: function triggerDecisionEvents() {
|
506
459
|
var _this7 = this;
|
507
|
-
|
508
460
|
this.vendors.filter(function (vendor) {
|
509
461
|
return vendor.paradigm !== 'skip';
|
510
462
|
}).forEach(function (vendor) {
|
@@ -517,24 +469,19 @@ var Consent = /*#__PURE__*/function () {
|
|
517
469
|
var vendor = this.vendors.find(function (vendor) {
|
518
470
|
return vendor.name === vendorName;
|
519
471
|
});
|
520
|
-
|
521
472
|
if (!vendor) {
|
522
473
|
throw new Error("Cannot ".concat(actionForErrorMessage, " unknown vendor \"").concat(vendorName, "\". ") + 'Consider using consent.registerVendor.');
|
523
474
|
}
|
524
|
-
|
525
475
|
return vendor;
|
526
476
|
}
|
527
477
|
}, {
|
528
478
|
key: "withState",
|
529
479
|
value: function withState(vendors) {
|
530
480
|
var _this8 = this;
|
531
|
-
|
532
481
|
var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
533
|
-
|
534
|
-
|
482
|
+
applyDefaults = _ref4.applyDefaults;
|
535
483
|
return vendors.map(function (vendor) {
|
536
484
|
var state = _this8.persistence.read(vendor);
|
537
|
-
|
538
485
|
return _objectSpread2(_objectSpread2({}, vendor), {}, {
|
539
486
|
state: state === 'undecided' && applyDefaults ? _this8.getDefaultState(vendor) : state
|
540
487
|
});
|
@@ -546,14 +493,11 @@ var Consent = /*#__PURE__*/function () {
|
|
546
493
|
if (vendor.paradigm === 'external opt-out') {
|
547
494
|
return 'accepted';
|
548
495
|
}
|
549
|
-
|
550
496
|
return 'undecided';
|
551
497
|
}
|
552
498
|
}]);
|
553
|
-
|
554
499
|
return Consent;
|
555
500
|
}();
|
556
|
-
|
557
501
|
Consent.create = function () {
|
558
502
|
var inEditor = typeof PAGEFLOW_EDITOR !== 'undefined' && PAGEFLOW_EDITOR;
|
559
503
|
return new Consent({
|
@@ -617,19 +561,27 @@ var Agent = function Agent(userAgent) {
|
|
617
561
|
// - Edge also reports to be a Safari, but also reports to be Chrome
|
618
562
|
return matches(/Safari\//i) && !matches(/Chrome/i);
|
619
563
|
},
|
620
|
-
|
621
564
|
/**
|
622
565
|
* Returns true on iOS Safari.
|
623
566
|
* @return {boolean}
|
624
567
|
*/
|
625
568
|
matchesMobileSafari: function matchesMobileSafari() {
|
626
|
-
var
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
569
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
570
|
+
osVersions = _ref.osVersions;
|
571
|
+
var deviceMatchers = [/iPod/i, /iPad/i, /iPhone/i];
|
572
|
+
if (osVersions) {
|
573
|
+
return deviceMatchers.some(function (matcher) {
|
574
|
+
return userAgent.match(matcher);
|
575
|
+
}) && osVersions.some(function (osVersion) {
|
576
|
+
return userAgent.includes(osVersion.replace('.', '_'));
|
577
|
+
});
|
578
|
+
} else {
|
579
|
+
return matchesiPadSafari13AndAbove() || deviceMatchers.some(function (matcher) {
|
580
|
+
return userAgent.match(matcher);
|
581
|
+
}) && !window.MSStream // IE exclusion from being detected as an iOS device;
|
582
|
+
;
|
583
|
+
}
|
631
584
|
},
|
632
|
-
|
633
585
|
/**
|
634
586
|
* Returns true on Android.
|
635
587
|
* @return {boolean}
|
@@ -637,7 +589,6 @@ var Agent = function Agent(userAgent) {
|
|
637
589
|
matchesAndroid: function matchesAndroid() {
|
638
590
|
return matches(/Android/i);
|
639
591
|
},
|
640
|
-
|
641
592
|
/**
|
642
593
|
* Returns true on iOS or Android.
|
643
594
|
* @return {boolean}
|
@@ -648,7 +599,6 @@ var Agent = function Agent(userAgent) {
|
|
648
599
|
return userAgent.match(matcher);
|
649
600
|
}) || matchesiPadSafari13AndAbove();
|
650
601
|
},
|
651
|
-
|
652
602
|
/**
|
653
603
|
* Returns true on Internet Explorser version 9, 10 and 11.
|
654
604
|
* @return {boolean}
|
@@ -656,7 +606,6 @@ var Agent = function Agent(userAgent) {
|
|
656
606
|
matchesIEUpTo11: function matchesIEUpTo11() {
|
657
607
|
return userAgent.match(/Trident\//);
|
658
608
|
},
|
659
|
-
|
660
609
|
/**
|
661
610
|
* Returns true in InApp browser of Facebook app.
|
662
611
|
* @return {boolean}
|
@@ -685,7 +634,6 @@ var Agent = function Agent(userAgent) {
|
|
685
634
|
return this.matchesEdge() && !this.matchesMobilePlatform();
|
686
635
|
}
|
687
636
|
},
|
688
|
-
|
689
637
|
/**
|
690
638
|
* Returns true on Google Chrome.
|
691
639
|
* @return {boolean}
|
@@ -694,7 +642,6 @@ var Agent = function Agent(userAgent) {
|
|
694
642
|
// - Edge also reports to be a Chrome
|
695
643
|
return matches(/Chrome\//i) && !matches(/Edg/i);
|
696
644
|
},
|
697
|
-
|
698
645
|
/**
|
699
646
|
* Returns true on Firefox.
|
700
647
|
* @return {boolean}
|
@@ -702,7 +649,6 @@ var Agent = function Agent(userAgent) {
|
|
702
649
|
matchesFirefox: function matchesFirefox() {
|
703
650
|
return matches(/Firefox\//i) && !matches(/Seamonkey/i);
|
704
651
|
},
|
705
|
-
|
706
652
|
/**
|
707
653
|
* Returns true on Microsoft Edge.
|
708
654
|
* @return {boolean}
|
@@ -711,21 +657,19 @@ var Agent = function Agent(userAgent) {
|
|
711
657
|
return matches(/Edg\//i);
|
712
658
|
}
|
713
659
|
};
|
714
|
-
|
715
660
|
function matches(exp) {
|
716
661
|
return !!userAgent.match(exp);
|
717
662
|
}
|
718
|
-
|
719
663
|
function matchesMinVersion(exp, version) {
|
720
664
|
var match = userAgent.match(exp);
|
721
665
|
return match && match[1] && parseInt(match[1], 10) >= version;
|
722
|
-
}
|
666
|
+
}
|
667
|
+
|
668
|
+
//After ios13 update, iPad reports the same user string
|
723
669
|
//as Safari on Dekstop MacOS.
|
724
670
|
//At the time of this writing there are no other devices
|
725
671
|
//with multi-touch support other than IOS/iPadOS
|
726
672
|
//See: https://stackoverflow.com/a/58064481
|
727
|
-
|
728
|
-
|
729
673
|
function matchesiPadSafari13AndAbove() {
|
730
674
|
return agent.matchesSafari() && navigator.maxTouchPoints > 1 && navigator.platform === 'MacIntel';
|
731
675
|
}
|
@@ -737,11 +681,10 @@ var agent = new Agent(typeof navigator !== 'undefined' ? navigator.userAgent : '
|
|
737
681
|
*
|
738
682
|
* @since 0.9
|
739
683
|
*/
|
740
|
-
|
741
684
|
var browser = function () {
|
742
685
|
var tests = {},
|
743
|
-
|
744
|
-
|
686
|
+
results = {},
|
687
|
+
featureDetectionComplete = false;
|
745
688
|
var readyPromiseResolve;
|
746
689
|
var readyPromise = new Promise(function (resolve, reject) {
|
747
690
|
readyPromiseResolve = resolve;
|
@@ -750,7 +693,6 @@ var browser = function () {
|
|
750
693
|
off: {},
|
751
694
|
on: {},
|
752
695
|
unset: {},
|
753
|
-
|
754
696
|
/**
|
755
697
|
* Add a feature test.
|
756
698
|
*
|
@@ -761,31 +703,26 @@ var browser = function () {
|
|
761
703
|
*/
|
762
704
|
feature: function feature(name, test) {
|
763
705
|
var s = name.replace(/ /g, '_');
|
764
|
-
|
765
706
|
this.off[s] = function () {
|
766
707
|
window.localStorage['override ' + name] = 'off';
|
767
708
|
log('Feature off: ' + name, {
|
768
709
|
force: true
|
769
710
|
});
|
770
711
|
};
|
771
|
-
|
772
712
|
this.on[s] = function () {
|
773
713
|
window.localStorage['override ' + name] = 'on';
|
774
714
|
log('Feature on: ' + name, {
|
775
715
|
force: true
|
776
716
|
});
|
777
717
|
};
|
778
|
-
|
779
718
|
this.unset[s] = function () {
|
780
719
|
window.localStorage.removeItem('override ' + name);
|
781
720
|
log('Feature unset: ' + name, {
|
782
721
|
force: true
|
783
722
|
});
|
784
723
|
};
|
785
|
-
|
786
724
|
tests[name] = test;
|
787
725
|
},
|
788
|
-
|
789
726
|
/**
|
790
727
|
* Check whether the browser has a specific feature. This method
|
791
728
|
* may only be called after the `#ready` promise is resolved.
|
@@ -798,14 +735,11 @@ var browser = function () {
|
|
798
735
|
if (!featureDetectionComplete) {
|
799
736
|
throw 'Feature detection has not finished yet.';
|
800
737
|
}
|
801
|
-
|
802
738
|
if (results[name] === undefined) {
|
803
739
|
throw 'Unknown feature "' + name + '".';
|
804
740
|
}
|
805
|
-
|
806
741
|
return results[name];
|
807
742
|
},
|
808
|
-
|
809
743
|
/**
|
810
744
|
* A promise that is resolved once feature detection has finished.
|
811
745
|
*
|
@@ -815,16 +749,13 @@ var browser = function () {
|
|
815
749
|
ready: function ready() {
|
816
750
|
return readyPromise;
|
817
751
|
},
|
818
|
-
|
819
752
|
/** @api private */
|
820
753
|
detectFeatures: function detectFeatures() {
|
821
754
|
var promises = {};
|
822
|
-
|
823
755
|
var asyncHas = function asyncHas(name) {
|
824
756
|
var runTest = function runTest() {
|
825
757
|
var value,
|
826
|
-
|
827
|
-
|
758
|
+
underscoredName = name.replace(/ /g, '_');
|
828
759
|
if (debugMode() && location.href.indexOf('&has=' + underscoredName) >= 0) {
|
829
760
|
value = location.href.indexOf('&has=' + underscoredName + '_on') >= 0;
|
830
761
|
log('FEATURE OVERRIDDEN ' + name + ': ' + value, {
|
@@ -841,27 +772,24 @@ var browser = function () {
|
|
841
772
|
return tests[name](asyncHas);
|
842
773
|
}
|
843
774
|
};
|
844
|
-
|
845
775
|
promises[name] = promises[name] || Promise.all([runTest()]).then(function (a) {
|
846
776
|
return a[0];
|
847
777
|
});
|
848
778
|
return promises[name];
|
849
779
|
};
|
850
|
-
|
851
780
|
asyncHas.not = function (name) {
|
852
781
|
return asyncHas(name).then(function (result) {
|
853
782
|
return !result;
|
854
783
|
});
|
855
784
|
};
|
856
|
-
|
857
|
-
|
785
|
+
asyncHas.all = function /* arguments */
|
786
|
+
() {
|
858
787
|
return Promise.all(arguments).then(function (results) {
|
859
788
|
return results.every(function (result) {
|
860
789
|
return result;
|
861
790
|
});
|
862
791
|
});
|
863
792
|
};
|
864
|
-
|
865
793
|
Promise.all(Object.keys(tests).map(function (name) {
|
866
794
|
return asyncHas(name).then(function (result) {
|
867
795
|
var cssClassName = name.replace(/ /g, '_');
|
@@ -878,32 +806,36 @@ var browser = function () {
|
|
878
806
|
};
|
879
807
|
}();
|
880
808
|
|
809
|
+
browser.feature('broken ogg support', function () {
|
810
|
+
// ogg is not supported on iOS < 18.4 and broken on iOS 18.4
|
811
|
+
return agent.matchesMobileSafari();
|
812
|
+
});
|
813
|
+
|
881
814
|
browser.feature('autoplay support', function (has) {
|
882
815
|
return !agent.matchesSafari11AndAbove() && !agent.matchesMobilePlatform();
|
883
816
|
});
|
884
817
|
|
818
|
+
// See https://developer.mozilla.org/de/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support
|
819
|
+
|
885
820
|
browser.feature('css animations', function () {
|
886
821
|
var prefixes = ['Webkit', 'Moz', 'O', 'ms', 'Khtml'],
|
887
|
-
|
888
|
-
|
822
|
+
elm = document.createElement('div');
|
889
823
|
if (elm.style.animationName !== undefined) {
|
890
824
|
return true;
|
891
825
|
}
|
892
|
-
|
893
826
|
for (var i = 0; i < prefixes.length; i++) {
|
894
827
|
if (elm.style[prefixes[i] + 'AnimationName'] !== undefined) {
|
895
828
|
return true;
|
896
829
|
}
|
897
830
|
}
|
898
|
-
|
899
831
|
return false;
|
900
832
|
});
|
901
833
|
|
834
|
+
// Facebook app displays a toolbar at the bottom of the screen on iOS
|
902
835
|
// phone which hides parts of the browser viewport. Normally this is
|
903
836
|
// hidden once the user scrolls, but since there is no native
|
904
837
|
// scrolling in Pageflow, the bar stays and hides page elements like
|
905
838
|
// the slim player controls.
|
906
|
-
|
907
839
|
browser.feature('facebook toolbar', function (has) {
|
908
840
|
return has.all(has('iphone platform'), agent.matchesFacebookInAppBrowser());
|
909
841
|
});
|
@@ -943,10 +875,8 @@ browser.feature('request animation frame support', function () {
|
|
943
875
|
});
|
944
876
|
|
945
877
|
browser.feature('touch support', function () {
|
946
|
-
return 'ontouchstart' in window ||
|
947
|
-
/*
|
948
|
-
window.DocumentTouch && document instanceof window.DocumentTouch ||
|
949
|
-
/* > 0 on IE touch devices */
|
878
|
+
return 'ontouchstart' in window || /* Firefox on android */
|
879
|
+
window.DocumentTouch && document instanceof window.DocumentTouch || /* > 0 on IE touch devices */
|
950
880
|
navigator.maxTouchPoints;
|
951
881
|
});
|
952
882
|
|
@@ -976,6 +906,16 @@ browser.feature('mse and native hls support', function (has) {
|
|
976
906
|
browser.feature('native video player', function (has) {
|
977
907
|
return has('iphone platform');
|
978
908
|
});
|
909
|
+
browser.feature('video scaling bug fixed by load', function (has) {
|
910
|
+
// When reusing video elements for videos with different
|
911
|
+
// resolutions, Safari gets confused and scales videos incorrectly -
|
912
|
+
// drawing them to only cover a part of the element. This appears to
|
913
|
+
// not happen when the video is loaded or played immediately after
|
914
|
+
// changing the source. No longer reproducible in iOS 17.4.
|
915
|
+
return agent.matchesMobileSafari({
|
916
|
+
osVersions: ['17.0', '17.1', '17.2', '17.3']
|
917
|
+
});
|
918
|
+
});
|
979
919
|
|
980
920
|
browser.feature('volume control support', function (has) {
|
981
921
|
return has.not('ios platform');
|
@@ -995,28 +935,27 @@ browser.Agent = Agent;
|
|
995
935
|
* @alias pageflow.features
|
996
936
|
* @since 0.9
|
997
937
|
*/
|
998
|
-
|
999
938
|
var Features = /*#__PURE__*/function () {
|
1000
939
|
/** @lends pageflow.features */
|
1001
940
|
|
1002
941
|
/** @api private */
|
1003
942
|
function Features() {
|
1004
943
|
_classCallCheck(this, Features);
|
1005
|
-
|
1006
944
|
this.registry = {};
|
1007
945
|
this.enabledFeatureNames = [];
|
1008
946
|
}
|
947
|
+
|
1009
948
|
/**
|
1010
949
|
* `pageflow.features` has been renamed to `pageflow.browser`.
|
1011
950
|
* @deprecated
|
1012
951
|
*/
|
1013
|
-
|
1014
|
-
|
1015
952
|
_createClass(Features, [{
|
1016
953
|
key: "has",
|
1017
|
-
value: function has(
|
954
|
+
value: function has( /* arguments */
|
955
|
+
) {
|
1018
956
|
return browser.has.apply(browser, arguments);
|
1019
957
|
}
|
958
|
+
|
1020
959
|
/**
|
1021
960
|
* Register a function to configure a feature when it is active.
|
1022
961
|
*
|
@@ -1026,7 +965,6 @@ var Features = /*#__PURE__*/function () {
|
|
1026
965
|
* @param fn [Function] Function to call when the given feature
|
1027
966
|
* is activate.
|
1028
967
|
*/
|
1029
|
-
|
1030
968
|
}, {
|
1031
969
|
key: "register",
|
1032
970
|
value: function register(scope, name, fn) {
|
@@ -1034,20 +972,20 @@ var Features = /*#__PURE__*/function () {
|
|
1034
972
|
this.registry[scope][name] = this.registry[scope][name] || [];
|
1035
973
|
this.registry[scope][name].push(fn);
|
1036
974
|
}
|
975
|
+
|
1037
976
|
/**
|
1038
977
|
* Check if a feature as been enabled.
|
1039
978
|
*
|
1040
979
|
* @param name [String]
|
1041
980
|
* @return [Boolean]
|
1042
981
|
*/
|
1043
|
-
|
1044
982
|
}, {
|
1045
983
|
key: "isEnabled",
|
1046
984
|
value: function isEnabled(name) {
|
1047
985
|
return this.enabledFeatureNames.includes(name);
|
1048
986
|
}
|
1049
|
-
/** @api private */
|
1050
987
|
|
988
|
+
/** @api private */
|
1051
989
|
}, {
|
1052
990
|
key: "enable",
|
1053
991
|
value: function enable(scope, names) {
|
@@ -1060,17 +998,15 @@ var Features = /*#__PURE__*/function () {
|
|
1060
998
|
});
|
1061
999
|
}
|
1062
1000
|
}]);
|
1063
|
-
|
1064
1001
|
return Features;
|
1065
1002
|
}();
|
1066
1003
|
var features = new Features();
|
1067
1004
|
|
1068
1005
|
var handleFailedPlay = function handleFailedPlay(player, options) {
|
1069
1006
|
var originalPlay = player.play;
|
1070
|
-
|
1071
|
-
|
1007
|
+
player.play = function /* arguments */
|
1008
|
+
() {
|
1072
1009
|
var result = originalPlay.apply(player, arguments);
|
1073
|
-
|
1074
1010
|
if (result && typeof result["catch"] !== 'undefined') {
|
1075
1011
|
return result["catch"](function (e) {
|
1076
1012
|
if (e.name === 'NotAllowedError' && options.hasAutoplaySupport) {
|
@@ -1089,7 +1025,6 @@ var handleFailedPlay = function handleFailedPlay(player, options) {
|
|
1089
1025
|
}
|
1090
1026
|
});
|
1091
1027
|
}
|
1092
|
-
|
1093
1028
|
return result;
|
1094
1029
|
};
|
1095
1030
|
};
|
@@ -1099,43 +1034,36 @@ var asyncPlay = function asyncPlay(player) {
|
|
1099
1034
|
var originalPause = player.pause;
|
1100
1035
|
var intendingToPlay = false;
|
1101
1036
|
var intendingToPause = false;
|
1102
|
-
|
1103
|
-
|
1037
|
+
player.play = function /* arguments */
|
1038
|
+
() {
|
1104
1039
|
player.intendToPlay();
|
1105
1040
|
return originalPlay.apply(player, arguments);
|
1106
1041
|
};
|
1107
|
-
|
1108
|
-
|
1042
|
+
player.pause = function /* arguments */
|
1043
|
+
() {
|
1109
1044
|
player.intendToPause();
|
1110
1045
|
return originalPause.apply(player, arguments);
|
1111
1046
|
};
|
1112
|
-
|
1113
1047
|
player.intendToPlay = function () {
|
1114
1048
|
intendingToPlay = true;
|
1115
1049
|
intendingToPause = false;
|
1116
1050
|
};
|
1117
|
-
|
1118
1051
|
player.intendToPause = function () {
|
1119
1052
|
intendingToPause = true;
|
1120
1053
|
intendingToPlay = false;
|
1121
1054
|
};
|
1122
|
-
|
1123
1055
|
player.intendingToPlay = function () {
|
1124
1056
|
return intendingToPlay;
|
1125
1057
|
};
|
1126
|
-
|
1127
1058
|
player.intendingToPause = function () {
|
1128
1059
|
return intendingToPause;
|
1129
1060
|
};
|
1130
|
-
|
1131
1061
|
player.ifIntendingToPause = function () {
|
1132
1062
|
return promiseFromBoolean(intendingToPause);
|
1133
1063
|
};
|
1134
|
-
|
1135
1064
|
player.ifIntendingToPlay = function () {
|
1136
1065
|
return promiseFromBoolean(intendingToPlay);
|
1137
1066
|
};
|
1138
|
-
|
1139
1067
|
function promiseFromBoolean(value) {
|
1140
1068
|
return new Promise(function (resolve, reject) {
|
1141
1069
|
if (value) {
|
@@ -1149,16 +1077,14 @@ var asyncPlay = function asyncPlay(player) {
|
|
1149
1077
|
|
1150
1078
|
var hooks = function hooks(player, _hooks) {
|
1151
1079
|
var originalPlay = player.play;
|
1152
|
-
|
1153
1080
|
player.updateHooks = function (newHooks) {
|
1154
1081
|
_hooks = newHooks;
|
1155
1082
|
};
|
1156
|
-
|
1157
|
-
|
1083
|
+
player.play = function /* args */
|
1084
|
+
() {
|
1158
1085
|
var args = arguments;
|
1159
1086
|
player.trigger('beforeplay');
|
1160
1087
|
player.intendToPlay();
|
1161
|
-
|
1162
1088
|
if (_hooks.before) {
|
1163
1089
|
return Promise.all([_hooks.before()]).then(function () {
|
1164
1090
|
return player.ifIntendingToPlay().then(function () {
|
@@ -1169,18 +1095,15 @@ var hooks = function hooks(player, _hooks) {
|
|
1169
1095
|
return originalPlay.apply(player, args);
|
1170
1096
|
}
|
1171
1097
|
};
|
1172
|
-
|
1173
1098
|
if (player.afterHookListener) {
|
1174
1099
|
player.off('pause', player.afterHookListener);
|
1175
1100
|
player.off('ended', player.afterHookListener);
|
1176
1101
|
}
|
1177
|
-
|
1178
1102
|
player.afterHookListener = function () {
|
1179
1103
|
if (_hooks.after) {
|
1180
1104
|
_hooks.after();
|
1181
1105
|
}
|
1182
1106
|
};
|
1183
|
-
|
1184
1107
|
player.on('pause', player.afterHookListener);
|
1185
1108
|
player.on('ended', player.afterHookListener);
|
1186
1109
|
};
|
@@ -1190,19 +1113,16 @@ var volumeBinding = function volumeBinding(player, settings, options) {
|
|
1190
1113
|
var originalPlay = player.play;
|
1191
1114
|
var originalPause = player.pause;
|
1192
1115
|
var volumeFactor = 'volumeFactor' in options ? options.volumeFactor : 1;
|
1193
|
-
|
1194
1116
|
player.play = function () {
|
1195
1117
|
player.intendToPlay();
|
1196
1118
|
player.volume(player.targetVolume());
|
1197
1119
|
listenToVolumeSetting();
|
1198
1120
|
return originalPlay.call(player);
|
1199
1121
|
};
|
1200
|
-
|
1201
1122
|
player.playAndFadeIn = function (duration) {
|
1202
1123
|
if (!player.paused() && !player.intendingToPause()) {
|
1203
1124
|
return Promise.resolve();
|
1204
1125
|
}
|
1205
|
-
|
1206
1126
|
player.intendToPlay();
|
1207
1127
|
player.volume(0);
|
1208
1128
|
return Promise.all([originalPlay.call(player)]).then(function () {
|
@@ -1214,17 +1134,14 @@ var volumeBinding = function volumeBinding(player, settings, options) {
|
|
1214
1134
|
});
|
1215
1135
|
});
|
1216
1136
|
};
|
1217
|
-
|
1218
1137
|
player.pause = function () {
|
1219
1138
|
stopListeningToVolumeSetting();
|
1220
1139
|
originalPause.call(player);
|
1221
1140
|
};
|
1222
|
-
|
1223
1141
|
player.fadeOutAndPause = function (duration) {
|
1224
1142
|
if (player.paused() && !player.intendingToPlay()) {
|
1225
1143
|
return Promise.resolve();
|
1226
1144
|
}
|
1227
|
-
|
1228
1145
|
player.intendToPause();
|
1229
1146
|
stopListeningToVolumeSetting();
|
1230
1147
|
return player.fadeVolume(0, duration).then(function () {
|
@@ -1233,26 +1150,21 @@ var volumeBinding = function volumeBinding(player, settings, options) {
|
|
1233
1150
|
});
|
1234
1151
|
});
|
1235
1152
|
};
|
1236
|
-
|
1237
1153
|
player.changeVolumeFactor = function (factor, duration) {
|
1238
1154
|
volumeFactor = factor;
|
1239
1155
|
return player.fadeVolume(player.targetVolume(), duration);
|
1240
1156
|
};
|
1241
|
-
|
1242
1157
|
player.targetVolume = function () {
|
1243
1158
|
return (options.ignoreVolumeSetting ? 1 : settings.get('volume')) * volumeFactor;
|
1244
1159
|
};
|
1245
|
-
|
1246
1160
|
function listenToVolumeSetting() {
|
1247
1161
|
player.on('dispose', stopListeningToVolumeSetting);
|
1248
1162
|
settings.on('change:volume', onVolumeChange);
|
1249
1163
|
}
|
1250
|
-
|
1251
1164
|
function stopListeningToVolumeSetting() {
|
1252
1165
|
player.off('dispose', stopListeningToVolumeSetting);
|
1253
1166
|
settings.off('change:volume', onVolumeChange);
|
1254
1167
|
}
|
1255
|
-
|
1256
1168
|
function onVolumeChange(model, value) {
|
1257
1169
|
player.fadeVolume(player.targetVolume(), 40);
|
1258
1170
|
}
|
@@ -1264,7 +1176,6 @@ var volumeBinding = function volumeBinding(player, settings, options) {
|
|
1264
1176
|
*
|
1265
1177
|
* @since 12.1
|
1266
1178
|
*/
|
1267
|
-
|
1268
1179
|
var audioContext = {
|
1269
1180
|
/**
|
1270
1181
|
* @returns [AudioContext]
|
@@ -1273,7 +1184,6 @@ var audioContext = {
|
|
1273
1184
|
*/
|
1274
1185
|
get: function get() {
|
1275
1186
|
var AudioContext = window.AudioContext || window.webkitAudioContext;
|
1276
|
-
|
1277
1187
|
if (typeof this._audioContext === 'undefined') {
|
1278
1188
|
try {
|
1279
1189
|
this._audioContext = AudioContext && new AudioContext();
|
@@ -1284,7 +1194,6 @@ var audioContext = {
|
|
1284
1194
|
});
|
1285
1195
|
}
|
1286
1196
|
}
|
1287
|
-
|
1288
1197
|
return this._audioContext;
|
1289
1198
|
}
|
1290
1199
|
};
|
@@ -1298,18 +1207,15 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1298
1207
|
var lastDuration;
|
1299
1208
|
var lastStartValue;
|
1300
1209
|
var allowedMinValue = 0.000001;
|
1301
|
-
|
1302
1210
|
if (audioContext.state === 'suspended') {
|
1303
1211
|
events.on('background_media:unmute', function () {
|
1304
1212
|
player.volume(currentValue);
|
1305
1213
|
});
|
1306
1214
|
}
|
1307
|
-
|
1308
1215
|
function tryResumeIfSuspended() {
|
1309
1216
|
return new Promise(function (resolve, reject) {
|
1310
1217
|
if (audioContext.state === 'suspended') {
|
1311
1218
|
var maybePromise = audioContext.resume();
|
1312
|
-
|
1313
1219
|
if (maybePromise && maybePromise.then) {
|
1314
1220
|
maybePromise.then(handlePromise);
|
1315
1221
|
} else {
|
@@ -1318,7 +1224,6 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1318
1224
|
} else {
|
1319
1225
|
resolve();
|
1320
1226
|
}
|
1321
|
-
|
1322
1227
|
function handlePromise() {
|
1323
1228
|
if (audioContext.state === 'suspended') {
|
1324
1229
|
reject();
|
@@ -1328,7 +1233,6 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1328
1233
|
}
|
1329
1234
|
});
|
1330
1235
|
}
|
1331
|
-
|
1332
1236
|
player.volume = function (value) {
|
1333
1237
|
if (typeof value !== 'undefined') {
|
1334
1238
|
tryResumeIfSuspended().then(function () {
|
@@ -1340,10 +1244,8 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1340
1244
|
currentValue = ensureInAllowedRange(value);
|
1341
1245
|
});
|
1342
1246
|
}
|
1343
|
-
|
1344
1247
|
return Math.round(currentValue * 100) / 100;
|
1345
1248
|
};
|
1346
|
-
|
1347
1249
|
player.fadeVolume = function (value, duration) {
|
1348
1250
|
return tryResumeIfSuspended().then(function () {
|
1349
1251
|
ensureGainNode();
|
@@ -1361,9 +1263,7 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1361
1263
|
return Promise.resolve();
|
1362
1264
|
});
|
1363
1265
|
};
|
1364
|
-
|
1365
1266
|
player.one('dispose', cancel);
|
1366
|
-
|
1367
1267
|
function ensureGainNode() {
|
1368
1268
|
if (!gainNode) {
|
1369
1269
|
gainNode = audioContext.createGain();
|
@@ -1372,14 +1272,12 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1372
1272
|
gainNode.connect(audioContext.destination);
|
1373
1273
|
}
|
1374
1274
|
}
|
1375
|
-
|
1376
1275
|
function resolveCurrent() {
|
1377
1276
|
clearTimeout(currentTimeout);
|
1378
1277
|
currentResolve('done');
|
1379
1278
|
currentTimeout = null;
|
1380
1279
|
currentResolve = null;
|
1381
1280
|
}
|
1382
|
-
|
1383
1281
|
function cancel() {
|
1384
1282
|
if (currentResolve) {
|
1385
1283
|
gainNode.gain.cancelScheduledValues(audioContext.currentTime);
|
@@ -1390,13 +1288,11 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1390
1288
|
updateCurrentValueFromComputedValue();
|
1391
1289
|
}
|
1392
1290
|
}
|
1393
|
-
|
1394
1291
|
function recordFadeStart(duration) {
|
1395
1292
|
lastStartTime = audioContext.currentTime;
|
1396
1293
|
lastStartValue = currentValue;
|
1397
1294
|
lastDuration = duration;
|
1398
1295
|
}
|
1399
|
-
|
1400
1296
|
function updateCurrentValueFromComputedValue() {
|
1401
1297
|
// Firefox 54 on Ubuntu does not provide computed values when gain
|
1402
1298
|
// was changed via one of the scheduling methods. Instead
|
@@ -1411,7 +1307,6 @@ var webAudio = function webAudio(player, audioContext) {
|
|
1411
1307
|
currentValue = gainNode.gain.value;
|
1412
1308
|
}
|
1413
1309
|
}
|
1414
|
-
|
1415
1310
|
function ensureInAllowedRange(value) {
|
1416
1311
|
return value < allowedMinValue ? allowedMinValue : value;
|
1417
1312
|
}
|
@@ -1427,15 +1322,12 @@ var interval = function interval(player) {
|
|
1427
1322
|
var originalVolume = player.volume;
|
1428
1323
|
var fadeVolumeResolve;
|
1429
1324
|
var fadeVolumeInterval;
|
1430
|
-
|
1431
1325
|
player.volume = function (value) {
|
1432
1326
|
if (typeof value !== 'undefined') {
|
1433
1327
|
cancelFadeVolume();
|
1434
1328
|
}
|
1435
|
-
|
1436
1329
|
return originalVolume.apply(player, arguments);
|
1437
1330
|
};
|
1438
|
-
|
1439
1331
|
player.fadeVolume = function (value, duration) {
|
1440
1332
|
cancelFadeVolume();
|
1441
1333
|
return new Promise(function (resolve, reject) {
|
@@ -1443,14 +1335,12 @@ var interval = function interval(player) {
|
|
1443
1335
|
var startValue = volume();
|
1444
1336
|
var steps = duration / resolution;
|
1445
1337
|
var leap = (value - startValue) / steps;
|
1446
|
-
|
1447
1338
|
if (value === startValue) {
|
1448
1339
|
resolve();
|
1449
1340
|
} else {
|
1450
1341
|
fadeVolumeResolve = resolve;
|
1451
1342
|
fadeVolumeInterval = setInterval(function () {
|
1452
1343
|
volume(volume() + leap);
|
1453
|
-
|
1454
1344
|
if (volume() >= value && value >= startValue || volume() <= value && value <= startValue) {
|
1455
1345
|
resolveFadeVolume();
|
1456
1346
|
}
|
@@ -1458,26 +1348,22 @@ var interval = function interval(player) {
|
|
1458
1348
|
}
|
1459
1349
|
});
|
1460
1350
|
};
|
1461
|
-
|
1462
1351
|
player.one('dispose', cancelFadeVolume);
|
1463
|
-
|
1464
|
-
|
1352
|
+
function volume( /* arguments */
|
1353
|
+
) {
|
1465
1354
|
return originalVolume.apply(player, arguments);
|
1466
1355
|
}
|
1467
|
-
|
1468
1356
|
function resolveFadeVolume() {
|
1469
1357
|
clearInterval(fadeVolumeInterval);
|
1470
1358
|
fadeVolumeResolve('done');
|
1471
1359
|
fadeVolumeInterval = null;
|
1472
1360
|
fadeVolumeResolve = null;
|
1473
1361
|
}
|
1474
|
-
|
1475
1362
|
function cancelFadeVolume() {
|
1476
1363
|
if (fadeVolumeResolve) {
|
1477
1364
|
fadeVolumeResolve('cancelled');
|
1478
1365
|
fadeVolumeResolve = null;
|
1479
1366
|
}
|
1480
|
-
|
1481
1367
|
if (fadeVolumeInterval) {
|
1482
1368
|
clearInterval(fadeVolumeInterval);
|
1483
1369
|
fadeVolumeInterval = null;
|
@@ -1501,8 +1387,8 @@ volumeFading.webAudio = webAudio;
|
|
1501
1387
|
|
1502
1388
|
var loadWaiting = function loadWaiting(player) {
|
1503
1389
|
var originalFadeVolume = player.fadeVolume;
|
1504
|
-
|
1505
|
-
|
1390
|
+
player.fadeVolume = function /* args */
|
1391
|
+
() {
|
1506
1392
|
var args = arguments;
|
1507
1393
|
return Promise.all([this.loadedPromise]).then(function () {
|
1508
1394
|
return originalFadeVolume.apply(player, args);
|
@@ -1513,13 +1399,11 @@ var loadWaiting = function loadWaiting(player) {
|
|
1513
1399
|
var Settings = /*#__PURE__*/function () {
|
1514
1400
|
function Settings() {
|
1515
1401
|
_classCallCheck(this, Settings);
|
1516
|
-
|
1517
1402
|
this.attributes = {
|
1518
1403
|
volume: 1
|
1519
1404
|
};
|
1520
1405
|
this.initialize();
|
1521
1406
|
}
|
1522
|
-
|
1523
1407
|
_createClass(Settings, [{
|
1524
1408
|
key: "get",
|
1525
1409
|
value: function get(attributeName) {
|
@@ -1529,18 +1413,15 @@ var Settings = /*#__PURE__*/function () {
|
|
1529
1413
|
key: "set",
|
1530
1414
|
value: function set(key, value) {
|
1531
1415
|
var attrs;
|
1532
|
-
|
1533
1416
|
if (typeof key === 'object') {
|
1534
1417
|
attrs = key;
|
1535
1418
|
} else {
|
1536
1419
|
(attrs = {})[key] = value;
|
1537
1420
|
}
|
1538
|
-
|
1539
1421
|
for (var attr in attrs) {
|
1540
1422
|
this.attributes[attr] = attrs[attr];
|
1541
1423
|
this.trigger('change:' + attr);
|
1542
1424
|
}
|
1543
|
-
|
1544
1425
|
this.trigger('change');
|
1545
1426
|
}
|
1546
1427
|
}, {
|
@@ -1552,7 +1433,6 @@ var Settings = /*#__PURE__*/function () {
|
|
1552
1433
|
key: "initialize",
|
1553
1434
|
value: function initialize() {
|
1554
1435
|
var storage = this.getLocalStorage();
|
1555
|
-
|
1556
1436
|
if (storage) {
|
1557
1437
|
if (storage['pageflow.settings']) {
|
1558
1438
|
try {
|
@@ -1561,7 +1441,6 @@ var Settings = /*#__PURE__*/function () {
|
|
1561
1441
|
log(e);
|
1562
1442
|
}
|
1563
1443
|
}
|
1564
|
-
|
1565
1444
|
this.on('change', function () {
|
1566
1445
|
storage['pageflow.settings'] = JSON.stringify(this.attributes);
|
1567
1446
|
});
|
@@ -1579,10 +1458,8 @@ var Settings = /*#__PURE__*/function () {
|
|
1579
1458
|
}
|
1580
1459
|
}
|
1581
1460
|
}]);
|
1582
|
-
|
1583
1461
|
return Settings;
|
1584
1462
|
}();
|
1585
|
-
|
1586
1463
|
Object.assign(Settings.prototype, BackboneEvents);
|
1587
1464
|
var settings = new Settings();
|
1588
1465
|
|
@@ -1592,16 +1469,13 @@ var mediaPlayer = {
|
|
1592
1469
|
hasAutoplaySupport: browser.has('autoplay support')
|
1593
1470
|
}, options));
|
1594
1471
|
asyncPlay(player);
|
1595
|
-
|
1596
1472
|
if (options.hooks) {
|
1597
1473
|
hooks(player, options.hooks);
|
1598
1474
|
}
|
1599
|
-
|
1600
1475
|
if (options.volumeFading) {
|
1601
1476
|
volumeFading(player);
|
1602
1477
|
volumeBinding(player, settings, options);
|
1603
1478
|
}
|
1604
|
-
|
1605
1479
|
if (options.loadWaiting) {
|
1606
1480
|
loadWaiting(player);
|
1607
1481
|
}
|
@@ -1617,12 +1491,12 @@ mediaPlayer.asyncPlay = asyncPlay;
|
|
1617
1491
|
|
1618
1492
|
// Replacement for Underscore's throttle, because scrolled entries
|
1619
1493
|
// don't have Underscore anymore
|
1494
|
+
|
1620
1495
|
function throttle(func, timeFrame) {
|
1621
1496
|
var lastTime = 0;
|
1622
1497
|
return function (options) {
|
1623
1498
|
var now = new Date();
|
1624
1499
|
func = func.bind(this);
|
1625
|
-
|
1626
1500
|
if (now - lastTime >= timeFrame) {
|
1627
1501
|
func(options);
|
1628
1502
|
lastTime = now;
|
@@ -1641,7 +1515,6 @@ var mediaEvents = function mediaEvents(player, context) {
|
|
1641
1515
|
bitrate: 128000
|
1642
1516
|
});
|
1643
1517
|
}
|
1644
|
-
|
1645
1518
|
player.on('play', function () {
|
1646
1519
|
triggerMediaEvent('play');
|
1647
1520
|
});
|
@@ -1666,28 +1539,23 @@ var pauseInBackground = function pauseInBackground(player) {
|
|
1666
1539
|
var interval;
|
1667
1540
|
var lastInterval;
|
1668
1541
|
var resolution = 100;
|
1669
|
-
|
1670
1542
|
function startProbeInterval() {
|
1671
1543
|
interval = setInterval(function () {
|
1672
1544
|
lastInterval = new Date().getTime();
|
1673
1545
|
}, resolution);
|
1674
1546
|
}
|
1675
|
-
|
1676
1547
|
function stopProbeInterval() {
|
1677
1548
|
clearInterval(interval);
|
1678
1549
|
interval = null;
|
1679
1550
|
}
|
1680
|
-
|
1681
1551
|
function pauseIfProbeIntervalHalted() {
|
1682
1552
|
if (intervalHalted()) {
|
1683
1553
|
player.pause();
|
1684
1554
|
}
|
1685
1555
|
}
|
1686
|
-
|
1687
1556
|
function intervalHalted() {
|
1688
1557
|
return interval && lastInterval < new Date().getTime() - resolution * 5;
|
1689
1558
|
}
|
1690
|
-
|
1691
1559
|
player.on('play', startProbeInterval);
|
1692
1560
|
player.on('pause', stopProbeInterval);
|
1693
1561
|
player.on('ended', stopProbeInterval);
|
@@ -1703,24 +1571,20 @@ var pauseInBackground = function pauseInBackground(player) {
|
|
1703
1571
|
*/
|
1704
1572
|
var seekWithInvalidStateHandling = function seekWithInvalidStateHandling(player) {
|
1705
1573
|
var originalSeek = player.seek;
|
1706
|
-
|
1707
1574
|
player.seek = function (time) {
|
1708
1575
|
return retryOnProgress(function () {
|
1709
1576
|
originalSeek.call(player, time);
|
1710
1577
|
});
|
1711
1578
|
};
|
1712
|
-
|
1713
1579
|
function retryOnProgress(fn) {
|
1714
1580
|
var tries = 0;
|
1715
1581
|
return new Promise(function (resolve, reject) {
|
1716
1582
|
function tryOrWaitForProgress() {
|
1717
1583
|
tries += 1;
|
1718
|
-
|
1719
1584
|
if (tries >= 50) {
|
1720
1585
|
reject();
|
1721
1586
|
return;
|
1722
1587
|
}
|
1723
|
-
|
1724
1588
|
try {
|
1725
1589
|
fn();
|
1726
1590
|
resolve();
|
@@ -1728,7 +1592,6 @@ var seekWithInvalidStateHandling = function seekWithInvalidStateHandling(player)
|
|
1728
1592
|
player.one('progress', tryOrWaitForProgress);
|
1729
1593
|
}
|
1730
1594
|
}
|
1731
|
-
|
1732
1595
|
tryOrWaitForProgress();
|
1733
1596
|
});
|
1734
1597
|
}
|
@@ -1772,7 +1635,6 @@ var getMediaElementMethod = function getMediaElementMethod(player) {
|
|
1772
1635
|
*
|
1773
1636
|
* @class
|
1774
1637
|
*/
|
1775
|
-
|
1776
1638
|
var AudioPlayer = function AudioPlayer(sources, options) {
|
1777
1639
|
options = options || {};
|
1778
1640
|
var codecMapping = {
|
@@ -1800,22 +1662,18 @@ var AudioPlayer = function AudioPlayer(sources, options) {
|
|
1800
1662
|
audio.readyPromise = readyPromise;
|
1801
1663
|
audio.loadedPromise = loadedPromise;
|
1802
1664
|
audio.on('load', loadedResolve);
|
1803
|
-
|
1804
1665
|
if (options.mediaEvents) {
|
1805
1666
|
mediaEvents(audio, options.context);
|
1806
1667
|
}
|
1807
|
-
|
1808
1668
|
if (options.pauseInBackground && browser.has('mobile platform')) {
|
1809
1669
|
pauseInBackground(audio);
|
1810
1670
|
}
|
1811
|
-
|
1812
1671
|
mediaPlayer.enhance(audio, _objectSpread2({
|
1813
1672
|
loadWaiting: true
|
1814
1673
|
}, options));
|
1815
1674
|
seekWithInvalidStateHandling(audio);
|
1816
1675
|
rewindMethod(audio);
|
1817
1676
|
getMediaElementMethod(audio);
|
1818
|
-
|
1819
1677
|
audio.src = function (sources) {
|
1820
1678
|
readyPromise.then(function () {
|
1821
1679
|
var source = (sources || []).find(function (source) {
|
@@ -1824,44 +1682,34 @@ var AudioPlayer = function AudioPlayer(sources, options) {
|
|
1824
1682
|
audio.load(source ? source.src : '');
|
1825
1683
|
});
|
1826
1684
|
};
|
1827
|
-
|
1828
1685
|
var originalLoad = audio.load;
|
1829
|
-
|
1830
1686
|
audio.load = function (src) {
|
1831
1687
|
if (!src) {
|
1832
1688
|
this.duration = 0;
|
1833
1689
|
}
|
1834
|
-
|
1835
1690
|
this.currentSrc = src;
|
1836
1691
|
this.position = 0;
|
1837
1692
|
this.trigger('timeupdate', this.position, this.duration);
|
1838
1693
|
originalLoad.apply(this, arguments);
|
1839
1694
|
};
|
1840
|
-
|
1841
1695
|
var originalSeek = audio.seek;
|
1842
|
-
|
1843
1696
|
audio.seek = function () {
|
1844
1697
|
if (this.currentSrc) {
|
1845
1698
|
return originalSeek.apply(this, arguments);
|
1846
1699
|
}
|
1847
1700
|
};
|
1848
|
-
|
1849
1701
|
var originalPlay = audio.play;
|
1850
|
-
|
1851
1702
|
audio.play = function () {
|
1852
1703
|
if (this.currentSrc) {
|
1853
1704
|
originalPlay.apply(this, arguments);
|
1854
1705
|
}
|
1855
1706
|
};
|
1856
|
-
|
1857
1707
|
audio.paused = function () {
|
1858
1708
|
return !audio.playing;
|
1859
1709
|
};
|
1860
|
-
|
1861
1710
|
audio.src(sources);
|
1862
1711
|
return audio;
|
1863
1712
|
};
|
1864
|
-
|
1865
1713
|
AudioPlayer.fromAudioTag = function (element, options) {
|
1866
1714
|
return new AudioPlayer(element.find('source').map(function () {
|
1867
1715
|
return {
|
@@ -1872,7 +1720,6 @@ AudioPlayer.fromAudioTag = function (element, options) {
|
|
1872
1720
|
tag: element[0]
|
1873
1721
|
}, options));
|
1874
1722
|
};
|
1875
|
-
|
1876
1723
|
AudioPlayer.fromScriptTag = function (element, options) {
|
1877
1724
|
var sources = element.length ? JSON.parse(element.text()) : [];
|
1878
1725
|
return new AudioPlayer(sources, options);
|
@@ -1882,33 +1729,24 @@ var Null = function Null() {
|
|
1882
1729
|
this.playAndFadeIn = function () {
|
1883
1730
|
return Promise.resolve();
|
1884
1731
|
};
|
1885
|
-
|
1886
1732
|
this.fadeOutAndPause = function () {
|
1887
1733
|
return Promise.resolve();
|
1888
1734
|
};
|
1889
|
-
|
1890
1735
|
this.changeVolumeFactor = function () {
|
1891
1736
|
return Promise.resolve();
|
1892
1737
|
};
|
1893
|
-
|
1894
1738
|
this.play = function () {};
|
1895
|
-
|
1896
1739
|
this.pause = function () {};
|
1897
|
-
|
1898
1740
|
this.paused = function () {
|
1899
1741
|
return true;
|
1900
1742
|
};
|
1901
|
-
|
1902
1743
|
this.seek = function () {
|
1903
1744
|
return Promise.resolve();
|
1904
1745
|
};
|
1905
|
-
|
1906
1746
|
this.rewind = function () {
|
1907
1747
|
return Promise.resolve();
|
1908
1748
|
};
|
1909
|
-
|
1910
1749
|
this.formatTime = function () {};
|
1911
|
-
|
1912
1750
|
this.one = function (event, handler) {
|
1913
1751
|
handler();
|
1914
1752
|
};
|
@@ -1945,9 +1783,7 @@ var filterSources = function filterSources(playerElement) {
|
|
1945
1783
|
if (playerElement.tagName.toLowerCase() !== 'video') {
|
1946
1784
|
return playerElement;
|
1947
1785
|
}
|
1948
|
-
|
1949
1786
|
var changed = false;
|
1950
|
-
|
1951
1787
|
if (browser.has('mp4 support only')) {
|
1952
1788
|
// keep only mp4 source
|
1953
1789
|
playerElement.querySelectorAll('source').forEach(function (source) {
|
@@ -1959,13 +1795,11 @@ var filterSources = function filterSources(playerElement) {
|
|
1959
1795
|
} else if (browser.has('mse and native hls support')) {
|
1960
1796
|
// remove dash source to ensure hls is used
|
1961
1797
|
var dashSource = playerElement.querySelector('source[type="application/dash+xml"]');
|
1962
|
-
|
1963
1798
|
if (dashSource) {
|
1964
1799
|
playerElement.removeChild(dashSource);
|
1965
1800
|
changed = true;
|
1966
1801
|
}
|
1967
1802
|
}
|
1968
|
-
|
1969
1803
|
if (changed) {
|
1970
1804
|
// the video tags initially in the dom are broken since they "saw"
|
1971
1805
|
// the other sources. replace with clone
|
@@ -1979,7 +1813,6 @@ var filterSources = function filterSources(playerElement) {
|
|
1979
1813
|
|
1980
1814
|
var useSlimPlayerControlsDuringPhonePlayback = function useSlimPlayerControlsDuringPhonePlayback(player) {
|
1981
1815
|
var originalPlay = player.play;
|
1982
|
-
|
1983
1816
|
player.play = function () {
|
1984
1817
|
if (browser.has('phone platform') && !browser.has('native video player')) {
|
1985
1818
|
state.widgets.use({
|
@@ -1989,34 +1822,27 @@ var useSlimPlayerControlsDuringPhonePlayback = function useSlimPlayerControlsDur
|
|
1989
1822
|
player.one('pause', restoreWidgets);
|
1990
1823
|
});
|
1991
1824
|
}
|
1992
|
-
|
1993
1825
|
return originalPlay.apply(this, arguments);
|
1994
1826
|
};
|
1995
1827
|
};
|
1996
1828
|
|
1997
1829
|
var prebuffering = function prebuffering(player) {
|
1998
1830
|
var prebufferPromiseReject;
|
1999
|
-
|
2000
1831
|
player.isBufferedAhead = function (delta, silent) {
|
2001
1832
|
// video.js only gives us one time range starting from 0 here. We
|
2002
1833
|
// still ask for the last time range to be on the safe side.
|
2003
1834
|
var timeRanges = player.buffered();
|
2004
1835
|
var currentBufferTime = timeRanges.end(timeRanges.length - 1);
|
2005
1836
|
var desiredBufferTime = player.currentTime() + delta;
|
2006
|
-
|
2007
1837
|
if (player.duration()) {
|
2008
1838
|
desiredBufferTime = Math.min(desiredBufferTime, Math.floor(player.duration()));
|
2009
1839
|
}
|
2010
|
-
|
2011
1840
|
var result = currentBufferTime >= desiredBufferTime;
|
2012
|
-
|
2013
1841
|
if (!silent) {
|
2014
1842
|
log('buffered ahead ' + delta + ': ' + result + ' (' + currentBufferTime + '/' + desiredBufferTime + ')');
|
2015
1843
|
}
|
2016
|
-
|
2017
1844
|
return result;
|
2018
1845
|
};
|
2019
|
-
|
2020
1846
|
player.prebuffer = function (options) {
|
2021
1847
|
options = options || {};
|
2022
1848
|
var delta = options.secondsToBuffer || 10;
|
@@ -2024,22 +1850,18 @@ var prebuffering = function prebuffering(player) {
|
|
2024
1850
|
var interval = 200;
|
2025
1851
|
var maxCount = secondsToWait * 1000 / interval;
|
2026
1852
|
var count = 0;
|
2027
|
-
|
2028
1853
|
if (browser.has('prebuffering support')) {
|
2029
1854
|
if (!player.isBufferedAhead(delta) && !player.prebufferPromise) {
|
2030
1855
|
log('prebuffering video ' + player.src());
|
2031
1856
|
player.prebufferPromise = new Promise(function (resolve, reject) {
|
2032
1857
|
prebufferPromiseReject = reject;
|
2033
1858
|
wait();
|
2034
|
-
|
2035
1859
|
function wait() {
|
2036
1860
|
setTimeout(function () {
|
2037
1861
|
if (!player.prebufferPromise) {
|
2038
1862
|
return;
|
2039
1863
|
}
|
2040
|
-
|
2041
1864
|
count++;
|
2042
|
-
|
2043
1865
|
if (player.isBufferedAhead(delta) || count > maxCount) {
|
2044
1866
|
log('finished prebuffering video ' + player.src());
|
2045
1867
|
resolve();
|
@@ -2052,10 +1874,8 @@ var prebuffering = function prebuffering(player) {
|
|
2052
1874
|
});
|
2053
1875
|
}
|
2054
1876
|
}
|
2055
|
-
|
2056
1877
|
return player.prebufferPromise ? player.prebufferPromise : Promise.resolve();
|
2057
1878
|
};
|
2058
|
-
|
2059
1879
|
player.abortPrebuffering = function () {
|
2060
1880
|
if (player.prebufferPromise) {
|
2061
1881
|
log('ABORT prebuffering');
|
@@ -2063,14 +1883,11 @@ var prebuffering = function prebuffering(player) {
|
|
2063
1883
|
player.prebufferPromise = null;
|
2064
1884
|
}
|
2065
1885
|
};
|
2066
|
-
|
2067
1886
|
var originalPause = player.pause;
|
2068
|
-
|
2069
1887
|
player.pause = function () {
|
2070
1888
|
player.abortPrebuffering();
|
2071
1889
|
return originalPause.apply(this, arguments);
|
2072
1890
|
};
|
2073
|
-
|
2074
1891
|
player.one('dispose', function () {
|
2075
1892
|
player.abortPrebuffering();
|
2076
1893
|
});
|
@@ -2114,7 +1931,9 @@ var cueSettingsMethods = function cueSettingsMethods(player) {
|
|
2114
1931
|
}
|
2115
1932
|
}
|
2116
1933
|
}
|
2117
|
-
});
|
1934
|
+
});
|
1935
|
+
|
1936
|
+
// Setting `line` does not update display directly, but only when
|
2118
1937
|
// the next cue is displayed. This is problematic, when we
|
2119
1938
|
// reposition text tracks to prevent overlap with player
|
2120
1939
|
// controls. Triggering the event makes VideoJS update positions.
|
@@ -2122,14 +1941,12 @@ var cueSettingsMethods = function cueSettingsMethods(player) {
|
|
2122
1941
|
// track changed since the last call, i.e. `line` has been changed
|
2123
1942
|
// for a cue even though the previous call had the same
|
2124
1943
|
// parameters.
|
2125
|
-
|
2126
1944
|
if ((this.prevLine !== line || changed) && command != 'lazy') {
|
2127
1945
|
var tech = player.tech({
|
2128
1946
|
IWillNotUseThisInPlugins: true
|
2129
1947
|
});
|
2130
1948
|
tech && tech.trigger('texttrackchange');
|
2131
1949
|
}
|
2132
|
-
|
2133
1950
|
this.prevLine = line;
|
2134
1951
|
};
|
2135
1952
|
};
|
@@ -2147,11 +1964,10 @@ var mediaEvents$1 = function mediaEvents(player, context) {
|
|
2147
1964
|
player.updateMediaEventsContext = function (newContext) {
|
2148
1965
|
context = newContext;
|
2149
1966
|
};
|
2150
|
-
|
2151
1967
|
function triggerMediaEvent(name) {
|
2152
1968
|
if (context) {
|
2153
1969
|
events.trigger('media:' + name, {
|
2154
|
-
fileName: player.currentSrc(),
|
1970
|
+
fileName: player.previousSrc || player.currentSrc(),
|
2155
1971
|
context: context,
|
2156
1972
|
currentTime: player.currentTime(),
|
2157
1973
|
duration: player.duration(),
|
@@ -2161,7 +1977,6 @@ var mediaEvents$1 = function mediaEvents(player, context) {
|
|
2161
1977
|
});
|
2162
1978
|
}
|
2163
1979
|
}
|
2164
|
-
|
2165
1980
|
player.on('play', function () {
|
2166
1981
|
triggerMediaEvent('play');
|
2167
1982
|
});
|
@@ -2181,22 +1996,18 @@ var mediaEvents$1 = function mediaEvents(player, context) {
|
|
2181
1996
|
|
2182
1997
|
var bufferUnderrunWaiting = function bufferUnderrunWaiting(player) {
|
2183
1998
|
var originalPause = player.pause;
|
2184
|
-
|
2185
1999
|
player.pause = function () {
|
2186
2000
|
cancelWaiting();
|
2187
2001
|
originalPause.apply(this, arguments);
|
2188
2002
|
};
|
2189
|
-
|
2190
2003
|
function pauseAndPreloadOnUnderrun() {
|
2191
2004
|
if (bufferUnderrun()) {
|
2192
2005
|
pauseAndPreload();
|
2193
2006
|
}
|
2194
2007
|
}
|
2195
|
-
|
2196
2008
|
function bufferUnderrun() {
|
2197
2009
|
return !player.isBufferedAhead(0.1, true) && !player.waitingOnUnderrun && !ignoringUnderruns();
|
2198
2010
|
}
|
2199
|
-
|
2200
2011
|
function pauseAndPreload() {
|
2201
2012
|
log('Buffer underrun');
|
2202
2013
|
player.trigger('bufferunderrun');
|
@@ -2214,7 +2025,6 @@ var bufferUnderrunWaiting = function bufferUnderrunWaiting(player) {
|
|
2214
2025
|
}
|
2215
2026
|
}, function () {});
|
2216
2027
|
}
|
2217
|
-
|
2218
2028
|
function cancelWaiting() {
|
2219
2029
|
if (player.waitingOnUnderrun) {
|
2220
2030
|
player.ignoreUnderrunsUntil = new Date().getTime() + 5 * 1000;
|
@@ -2222,21 +2032,16 @@ var bufferUnderrunWaiting = function bufferUnderrunWaiting(player) {
|
|
2222
2032
|
player.trigger('bufferunderruncontinue');
|
2223
2033
|
}
|
2224
2034
|
}
|
2225
|
-
|
2226
2035
|
function ignoringUnderruns() {
|
2227
2036
|
var r = player.ignoreUnderrunsUntil && new Date().getTime() < player.ignoreUnderrunsUntil;
|
2228
|
-
|
2229
2037
|
if (r) {
|
2230
2038
|
log('ignoring underrun');
|
2231
2039
|
}
|
2232
|
-
|
2233
2040
|
return r;
|
2234
2041
|
}
|
2235
|
-
|
2236
2042
|
function stopListeningForProgress() {
|
2237
2043
|
player.off('progress', pauseAndPreloadOnUnderrun);
|
2238
2044
|
}
|
2239
|
-
|
2240
2045
|
if (browser.has('buffer underrun waiting support')) {
|
2241
2046
|
player.on('play', function () {
|
2242
2047
|
player.on('progress', pauseAndPreloadOnUnderrun);
|
@@ -2268,24 +2073,19 @@ var VideoPlayer = function VideoPlayer(element, options) {
|
|
2268
2073
|
options = options || {};
|
2269
2074
|
element = filterSources(element);
|
2270
2075
|
var player = VideoJS(element, options);
|
2271
|
-
|
2272
2076
|
if (options.useSlimPlayerControlsDuringPhonePlayback) {
|
2273
2077
|
useSlimPlayerControlsDuringPhonePlayback(player);
|
2274
2078
|
}
|
2275
|
-
|
2276
2079
|
prebuffering(player);
|
2277
2080
|
cueSettingsMethods(player);
|
2278
2081
|
getMediaElementMethod$1(player);
|
2279
2082
|
rewindMethod$1(player);
|
2280
|
-
|
2281
2083
|
if (options.mediaEvents) {
|
2282
2084
|
mediaEvents$1(player, options.context);
|
2283
2085
|
}
|
2284
|
-
|
2285
2086
|
if (options.bufferUnderrunWaiting) {
|
2286
2087
|
bufferUnderrunWaiting(player);
|
2287
2088
|
}
|
2288
|
-
|
2289
2089
|
mediaPlayer.enhance(player, options);
|
2290
2090
|
return player;
|
2291
2091
|
};
|
@@ -2329,7 +2129,6 @@ var createMediaPlayer = function createMediaPlayer(options) {
|
|
2329
2129
|
return {};
|
2330
2130
|
}
|
2331
2131
|
};
|
2332
|
-
|
2333
2132
|
player.playOrPlayOnLoad = function () {
|
2334
2133
|
if (this.readyState() > 0) {
|
2335
2134
|
player.play();
|
@@ -2337,7 +2136,6 @@ var createMediaPlayer = function createMediaPlayer(options) {
|
|
2337
2136
|
player.on('loadedmetadata', player.play);
|
2338
2137
|
}
|
2339
2138
|
};
|
2340
|
-
|
2341
2139
|
player.addClass('video-js');
|
2342
2140
|
player.addClass('player');
|
2343
2141
|
return player;
|
@@ -2358,6 +2156,7 @@ var createMediaPlayer = function createMediaPlayer(options) {
|
|
2358
2156
|
* See the License for the specific language governing permissions and
|
2359
2157
|
* limitations under the License.
|
2360
2158
|
*/
|
2159
|
+
|
2361
2160
|
var BLANK_AUDIO_SRC = 'data:audio/wav;base64,UklGRjIAAABXQVZFZm10IBA' + 'AAAABAAEAIlYAAESsAAACABAAZGF0YRAAAAAAAAAAAAAAAAAAAAAAAA==';
|
2362
2161
|
var BLANK_VIDEO_SRC = 'data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAG' + 'lzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARw' + 'AAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIE' + 'guMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3' + 'd3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYm' + 'xvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3' + 'JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbG' + 'lzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV' + '9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3Rocm' + 'VhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb2' + '5zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbn' + 'RfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcm' + 'M9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcH' + 'N0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYW' + 'xfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8m' + 'KAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4G' + 'SAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkA' + 'IZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAE' + 'mQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgA' + 'AAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC' + '/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkA' + 'IZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAE' + 'mQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgA' + 'AAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC' + '/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkA' + 'IZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAE' + 'mQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgA' + 'AAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgC' + 'vAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAh' + 'kAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQ' + 'AAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAA' + 'AAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAA' + 'BAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobW' + 'RpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZG' + 'UAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAA' + 'AAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAA' + 'AAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAA' + 'ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFW' + 'dCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAA' + 'AAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2' + 'MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAA' + 'AACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAA' + 'oAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAA' + 'AAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABC' + 'UAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAA' + 'AFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAA' + 'AAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA' + 'AAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAA' + 'AAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAA' + 'AAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAA' + 'AAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZA' + 'AAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAA' + 'AAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAA' + 'AAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAA' + 'IAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAA' + 'AACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAA' + 'EAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAA' + 'AAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAA' + 'IAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAA' + 'AAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAAD' + 'MAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAA' + 'AACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAA' + 'kAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAA' + 'AACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAA' + 'AAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAA' + 'AEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ' + '0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAA' + 'AAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYX' + 'ZmNTUuMzMuMTAw';
|
2363
2162
|
var blankSources = {
|
@@ -2372,83 +2171,72 @@ var blankSources = {
|
|
2372
2171
|
};
|
2373
2172
|
|
2374
2173
|
/** @const @enum {string} */
|
2375
|
-
|
2376
2174
|
var MediaType = {
|
2377
2175
|
AUDIO: 'audio',
|
2378
2176
|
VIDEO: 'video'
|
2379
2177
|
};
|
2380
2178
|
var elId = 0;
|
2179
|
+
|
2381
2180
|
/**
|
2382
2181
|
* Media pool class handles the pool of Videojs media players
|
2383
2182
|
*/
|
2384
|
-
|
2385
2183
|
var MediaPool = /*#__PURE__*/function () {
|
2386
2184
|
function MediaPool() {
|
2387
|
-
var _this$mediaFactory_;
|
2388
|
-
|
2389
2185
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
2390
2186
|
playerCount: 4
|
2391
2187
|
};
|
2392
|
-
|
2393
2188
|
_classCallCheck(this, MediaPool);
|
2394
|
-
|
2395
2189
|
this.playerCount = options.playerCount;
|
2396
2190
|
this.allocatedPlayers = {};
|
2397
2191
|
this.unAllocatedPlayers = {};
|
2398
|
-
this.mediaFactory_ = (
|
2192
|
+
this.mediaFactory_ = _defineProperty(_defineProperty({}, MediaType.AUDIO, function () {
|
2399
2193
|
var audioEl = document.createElement('audio');
|
2400
2194
|
audioEl.setAttribute('crossorigin', 'anonymous');
|
2401
2195
|
return audioEl;
|
2402
|
-
}),
|
2196
|
+
}), MediaType.VIDEO, function () {
|
2403
2197
|
var videoEl = document.createElement('video');
|
2404
2198
|
videoEl.setAttribute('crossorigin', 'anonymous');
|
2405
2199
|
return videoEl;
|
2406
|
-
})
|
2200
|
+
});
|
2407
2201
|
}
|
2408
|
-
|
2409
2202
|
_createClass(MediaPool, [{
|
2410
2203
|
key: "allocatePlayer",
|
2411
2204
|
value: function allocatePlayer(_ref) {
|
2412
2205
|
var playerType = _ref.playerType,
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2419
|
-
|
2420
|
-
|
2421
|
-
|
2422
|
-
|
2423
|
-
|
2206
|
+
playerId = _ref.playerId,
|
2207
|
+
playsInline = _ref.playsInline,
|
2208
|
+
mediaEventsContextData = _ref.mediaEventsContextData,
|
2209
|
+
hooks = _ref.hooks,
|
2210
|
+
poster = _ref.poster,
|
2211
|
+
_ref$loop = _ref.loop,
|
2212
|
+
loop = _ref$loop === void 0 ? false : _ref$loop,
|
2213
|
+
_ref$controls = _ref.controls,
|
2214
|
+
controls = _ref$controls === void 0 ? false : _ref$controls,
|
2215
|
+
altText = _ref.altText,
|
2216
|
+
onRelease = _ref.onRelease;
|
2424
2217
|
var player = undefined;
|
2425
|
-
|
2426
2218
|
if (!this.unAllocatedPlayers[playerType]) {
|
2427
2219
|
this.populateMediaPool_();
|
2428
2220
|
}
|
2429
|
-
|
2430
2221
|
if (this.unAllocatedPlayers[playerType].length == 0) {
|
2431
2222
|
this.freeOnePlayer(playerType);
|
2432
2223
|
}
|
2433
|
-
|
2434
2224
|
player = this.unAllocatedPlayers[playerType].pop();
|
2435
|
-
|
2436
2225
|
if (player) {
|
2437
2226
|
player.pause();
|
2438
2227
|
player.getMediaElement().loop = loop;
|
2439
2228
|
player.getMediaElement().setAttribute('alt', altText);
|
2440
2229
|
player.poster(poster);
|
2441
2230
|
player.controls(controls);
|
2442
|
-
|
2443
2231
|
if (playsInline) {
|
2444
2232
|
player.playsinline(true);
|
2445
2233
|
}
|
2446
|
-
|
2447
2234
|
player.updateHooks(hooks || {});
|
2448
2235
|
player.updateMediaEventsContext(mediaEventsContextData);
|
2449
2236
|
this.allocatedPlayers[playerType].push(player);
|
2450
2237
|
player.playerId = playerId || this.allocatedPlayers[playerType].length;
|
2451
2238
|
player.releaseCallback = onRelease;
|
2239
|
+
player.previousSrc = null;
|
2452
2240
|
return player;
|
2453
2241
|
} else {
|
2454
2242
|
console.log('no player found for allocation');
|
@@ -2467,6 +2255,7 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2467
2255
|
this.allocatedPlayers[type] = this.allocatedPlayers[type].filter(function (p) {
|
2468
2256
|
return p != player;
|
2469
2257
|
});
|
2258
|
+
player.previousSrc = player.currentSrc();
|
2470
2259
|
player.controls(false);
|
2471
2260
|
player.getMediaElement().loop = false;
|
2472
2261
|
player.playsinline(false);
|
@@ -2474,22 +2263,20 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2474
2263
|
player.poster('');
|
2475
2264
|
clearTextTracks(player);
|
2476
2265
|
this.unAllocatedPlayers[type].push(player);
|
2477
|
-
|
2478
2266
|
if (player.releaseCallback) {
|
2479
2267
|
player.releaseCallback();
|
2480
2268
|
player.releaseCallback = null;
|
2481
2269
|
}
|
2270
|
+
player.pause();
|
2482
2271
|
}
|
2483
2272
|
}
|
2484
2273
|
}, {
|
2485
2274
|
key: "blessAll",
|
2486
2275
|
value: function blessAll(value) {
|
2487
2276
|
var _this = this;
|
2488
|
-
|
2489
2277
|
if (this.unAllocatedPlayers[MediaType.AUDIO] == undefined || this.unAllocatedPlayers[MediaType.VIDEO] == undefined) {
|
2490
2278
|
this.populateMediaPool_();
|
2491
2279
|
}
|
2492
|
-
|
2493
2280
|
this.forEachMediaType(function (key) {
|
2494
2281
|
_this.allPlayersForType(MediaType[key]).forEach(function (player) {
|
2495
2282
|
player.muted(value);
|
@@ -2502,18 +2289,15 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2502
2289
|
if (this.unAllocatedPlayers[type]) {
|
2503
2290
|
return [].concat(_toConsumableArray(this.unAllocatedPlayers[type]), _toConsumableArray(this.allocatedPlayers[type]));
|
2504
2291
|
}
|
2505
|
-
|
2506
2292
|
return [];
|
2507
2293
|
}
|
2508
2294
|
}, {
|
2509
2295
|
key: "getMediaTypeFromEl",
|
2510
2296
|
value: function getMediaTypeFromEl(mediaElement) {
|
2511
2297
|
var tagName = mediaElement.tagName.toLowerCase();
|
2512
|
-
|
2513
2298
|
if (tagName == 'div') {
|
2514
2299
|
tagName = mediaElement.children[0].tagName.toLowerCase();
|
2515
2300
|
}
|
2516
|
-
|
2517
2301
|
return this.getMediaType(tagName);
|
2518
2302
|
}
|
2519
2303
|
}, {
|
@@ -2522,7 +2306,6 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2522
2306
|
switch (tagName) {
|
2523
2307
|
case 'audio':
|
2524
2308
|
return MediaType.AUDIO;
|
2525
|
-
|
2526
2309
|
case 'video':
|
2527
2310
|
return MediaType.VIDEO;
|
2528
2311
|
}
|
@@ -2536,12 +2319,10 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2536
2319
|
key: "createPlayer_",
|
2537
2320
|
value: function createPlayer_(type, mediaEl) {
|
2538
2321
|
mediaEl.setAttribute('pool-element', elId++);
|
2539
|
-
|
2540
2322
|
if (!this.unAllocatedPlayers[type]) {
|
2541
2323
|
this.unAllocatedPlayers[type] = [];
|
2542
2324
|
this.allocatedPlayers[type] = [];
|
2543
2325
|
}
|
2544
|
-
|
2545
2326
|
var player = createMediaPlayer({
|
2546
2327
|
mediaElement: mediaEl,
|
2547
2328
|
tagName: type
|
@@ -2555,7 +2336,6 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2555
2336
|
key: "initializeMediaPool_",
|
2556
2337
|
value: function initializeMediaPool_(type, mediaElSeed) {
|
2557
2338
|
var playerCount = typeof this.playerCount === 'function' ? this.playerCount(type) : this.playerCount;
|
2558
|
-
|
2559
2339
|
while (this.allPlayersForType(type).length < playerCount) {
|
2560
2340
|
this.createPlayer_(type, mediaElSeed.cloneNode(true));
|
2561
2341
|
}
|
@@ -2564,24 +2344,18 @@ var MediaPool = /*#__PURE__*/function () {
|
|
2564
2344
|
key: "populateMediaPool_",
|
2565
2345
|
value: function populateMediaPool_() {
|
2566
2346
|
var _this2 = this;
|
2567
|
-
|
2568
2347
|
this.forEachMediaType(function (key) {
|
2569
2348
|
var type = MediaType[key];
|
2570
|
-
|
2571
2349
|
var mediaEl = _this2.mediaFactory_[type].call(_this2);
|
2572
|
-
|
2573
2350
|
_this2.initializeMediaPool_(type, mediaEl);
|
2574
2351
|
});
|
2575
2352
|
}
|
2576
2353
|
}]);
|
2577
|
-
|
2578
2354
|
return MediaPool;
|
2579
2355
|
}();
|
2580
|
-
|
2581
2356
|
function clearTextTracks(player) {
|
2582
2357
|
var tracks = player.textTracks();
|
2583
2358
|
var i = tracks.length;
|
2584
|
-
|
2585
2359
|
while (i--) {
|
2586
2360
|
player.removeRemoteTextTrack(tracks[i]);
|
2587
2361
|
}
|
@@ -2594,11 +2368,9 @@ var media = {
|
|
2594
2368
|
}
|
2595
2369
|
}),
|
2596
2370
|
muteState: true,
|
2597
|
-
|
2598
2371
|
get muted() {
|
2599
2372
|
return this.muteState;
|
2600
2373
|
},
|
2601
|
-
|
2602
2374
|
mute: function mute(value) {
|
2603
2375
|
this.muteState = value;
|
2604
2376
|
this.playerPool.blessAll(value);
|
@@ -2607,17 +2379,17 @@ var media = {
|
|
2607
2379
|
getPlayer: function getPlayer(fileSource, options) {
|
2608
2380
|
options.playerType = options.tagName || MediaType.VIDEO;
|
2609
2381
|
var player = this.playerPool.allocatePlayer(options);
|
2610
|
-
|
2611
2382
|
if (player) {
|
2612
2383
|
player.muted(this.muteState);
|
2613
2384
|
player.src(fileSource);
|
2614
|
-
|
2615
2385
|
if (options.textTrackSources) {
|
2616
2386
|
options.textTrackSources.forEach(function (track) {
|
2617
2387
|
return player.addRemoteTextTrack(track, true);
|
2618
2388
|
});
|
2619
2389
|
}
|
2620
|
-
|
2390
|
+
if (browser.has('video scaling bug fixed by load')) {
|
2391
|
+
player.load();
|
2392
|
+
}
|
2621
2393
|
return player;
|
2622
2394
|
}
|
2623
2395
|
},
|
@@ -2634,47 +2406,39 @@ Object.assign(media, BackboneEvents);
|
|
2634
2406
|
*
|
2635
2407
|
* @class
|
2636
2408
|
*/
|
2637
|
-
|
2638
2409
|
var MultiPlayer = function MultiPlayer(pool, options) {
|
2639
2410
|
if (options.crossFade && options.playFromBeginning) {
|
2640
2411
|
throw 'pageflow.Audio.MultiPlayer: The options crossFade and playFromBeginning can not be used together at the moment.';
|
2641
2412
|
}
|
2642
|
-
|
2643
2413
|
var current = new AudioPlayer.Null();
|
2644
2414
|
var currentId = null;
|
2645
2415
|
var that = this;
|
2416
|
+
|
2646
2417
|
/**
|
2647
2418
|
* Continue playback.
|
2648
2419
|
*/
|
2649
|
-
|
2650
2420
|
this.resume = function () {
|
2651
2421
|
return current.play();
|
2652
2422
|
};
|
2423
|
+
|
2653
2424
|
/**
|
2654
2425
|
* Continue playback with fade in.
|
2655
2426
|
*/
|
2656
|
-
|
2657
|
-
|
2658
2427
|
this.resumeAndFadeIn = function () {
|
2659
2428
|
return current.playAndFadeIn(options.fadeDuration);
|
2660
2429
|
};
|
2661
|
-
|
2662
2430
|
this.seek = function (position) {
|
2663
2431
|
return current.seek(position);
|
2664
2432
|
};
|
2665
|
-
|
2666
2433
|
this.pause = function () {
|
2667
2434
|
return current.pause();
|
2668
2435
|
};
|
2669
|
-
|
2670
2436
|
this.paused = function () {
|
2671
2437
|
return current.paused();
|
2672
2438
|
};
|
2673
|
-
|
2674
2439
|
this.fadeOutAndPause = function () {
|
2675
2440
|
return current.fadeOutAndPause(options.fadeDuration);
|
2676
2441
|
};
|
2677
|
-
|
2678
2442
|
this.fadeOutIfPlaying = function () {
|
2679
2443
|
if (current.paused()) {
|
2680
2444
|
return Promise.resolve();
|
@@ -2682,48 +2446,38 @@ var MultiPlayer = function MultiPlayer(pool, options) {
|
|
2682
2446
|
return current.fadeOutAndPause(options.fadeDuration);
|
2683
2447
|
}
|
2684
2448
|
};
|
2685
|
-
|
2686
2449
|
this.position = function () {
|
2687
2450
|
return current.position;
|
2688
2451
|
};
|
2689
|
-
|
2690
2452
|
this.duration = function () {
|
2691
2453
|
return current.duration;
|
2692
2454
|
};
|
2693
|
-
|
2694
2455
|
this.fadeTo = function (id) {
|
2695
2456
|
return changeCurrent(id, function (player) {
|
2696
2457
|
return player.playAndFadeIn(options.fadeDuration);
|
2697
2458
|
});
|
2698
2459
|
};
|
2699
|
-
|
2700
2460
|
this.play = function (id) {
|
2701
2461
|
return changeCurrent(id, function (player) {
|
2702
2462
|
return player.play();
|
2703
2463
|
});
|
2704
2464
|
};
|
2705
|
-
|
2706
2465
|
this.changeVolumeFactor = function (factor) {
|
2707
2466
|
return current.changeVolumeFactor(factor, options.fadeDuration);
|
2708
2467
|
};
|
2709
|
-
|
2710
2468
|
this.formatTime = function (time) {
|
2711
2469
|
return current.formatTime(time);
|
2712
2470
|
};
|
2713
|
-
|
2714
2471
|
function changeCurrent(id, callback) {
|
2715
2472
|
if (!options.playFromBeginning && id === currentId && !current.paused()) {
|
2716
2473
|
return Promise.resolve();
|
2717
2474
|
}
|
2718
|
-
|
2719
2475
|
var player = pool.get(id);
|
2720
2476
|
currentId = id;
|
2721
2477
|
var fadeOutPromise = current.fadeOutAndPause(options.fadeDuration);
|
2722
|
-
|
2723
2478
|
if (current._stopMultiPlayerEventPropagation && current.paused()) {
|
2724
2479
|
current._stopMultiPlayerEventPropagation();
|
2725
2480
|
}
|
2726
|
-
|
2727
2481
|
return handleCrossFade(fadeOutPromise).then(function () {
|
2728
2482
|
current = player;
|
2729
2483
|
startEventPropagation(current, id);
|
@@ -2732,7 +2486,6 @@ var MultiPlayer = function MultiPlayer(pool, options) {
|
|
2732
2486
|
});
|
2733
2487
|
});
|
2734
2488
|
}
|
2735
|
-
|
2736
2489
|
function handleCrossFade(fadePomise) {
|
2737
2490
|
if (options.crossFade) {
|
2738
2491
|
return Promise.resolve();
|
@@ -2740,7 +2493,6 @@ var MultiPlayer = function MultiPlayer(pool, options) {
|
|
2740
2493
|
return fadePomise;
|
2741
2494
|
}
|
2742
2495
|
}
|
2743
|
-
|
2744
2496
|
function handlePlayFromBeginning(player) {
|
2745
2497
|
if (options.playFromBeginning || options.rewindOnChange) {
|
2746
2498
|
return player.rewind();
|
@@ -2748,48 +2500,40 @@ var MultiPlayer = function MultiPlayer(pool, options) {
|
|
2748
2500
|
return Promise.resolve();
|
2749
2501
|
}
|
2750
2502
|
}
|
2751
|
-
|
2752
2503
|
function startEventPropagation(player, id) {
|
2753
2504
|
var playCallback = function playCallback() {
|
2754
2505
|
that.trigger('play', {
|
2755
2506
|
audioFileId: id
|
2756
2507
|
});
|
2757
2508
|
};
|
2758
|
-
|
2759
2509
|
var pauseCallback = function pauseCallback() {
|
2760
2510
|
that.trigger('pause', {
|
2761
2511
|
audioFileId: id
|
2762
2512
|
});
|
2763
|
-
|
2764
2513
|
if (currentId !== id) {
|
2765
2514
|
player._stopMultiPlayerEventPropagation();
|
2766
2515
|
}
|
2767
2516
|
};
|
2768
|
-
|
2769
2517
|
var timeUpdateCallback = function timeUpdateCallback() {
|
2770
2518
|
that.trigger('timeupdate', {
|
2771
2519
|
audioFileId: id
|
2772
2520
|
});
|
2773
2521
|
};
|
2774
|
-
|
2775
2522
|
var endedCallback = function endedCallback() {
|
2776
2523
|
that.trigger('ended', {
|
2777
2524
|
audioFileId: id
|
2778
2525
|
});
|
2779
2526
|
};
|
2780
|
-
|
2781
2527
|
var playFailedCallback = function playFailedCallback() {
|
2782
2528
|
that.trigger('playfailed', {
|
2783
2529
|
audioFileId: id
|
2784
2530
|
});
|
2785
2531
|
};
|
2786
|
-
|
2787
2532
|
player.on('play', playCallback);
|
2788
2533
|
player.on('pause', pauseCallback);
|
2789
2534
|
player.on('timeupdate', timeUpdateCallback);
|
2790
2535
|
player.on('ended', endedCallback);
|
2791
2536
|
player.on('playfailed', playFailedCallback);
|
2792
|
-
|
2793
2537
|
player._stopMultiPlayerEventPropagation = function () {
|
2794
2538
|
player.off('play', playCallback);
|
2795
2539
|
player.off('pause', pauseCallback);
|
@@ -2803,8 +2547,7 @@ Object.assign(MultiPlayer.prototype, BackboneEvents);
|
|
2803
2547
|
|
2804
2548
|
var PlayerSourceIDMap = function PlayerSourceIDMap(media) {
|
2805
2549
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
2806
|
-
|
2807
|
-
|
2550
|
+
playerOptions = _ref.playerOptions;
|
2808
2551
|
return {
|
2809
2552
|
current: undefined,
|
2810
2553
|
previous: undefined,
|
@@ -2815,11 +2558,9 @@ var PlayerSourceIDMap = function PlayerSourceIDMap(media) {
|
|
2815
2558
|
if (!this[sourceID]) {
|
2816
2559
|
return new AudioPlayer.Null();
|
2817
2560
|
}
|
2818
|
-
|
2819
2561
|
if (this.current && this.current.playerId === sourceID) {
|
2820
2562
|
return this.current;
|
2821
2563
|
}
|
2822
|
-
|
2823
2564
|
if (this.previous && this.previous.playerId === sourceID) {
|
2824
2565
|
var holder = this.current;
|
2825
2566
|
this.current = this.previous;
|
@@ -2828,14 +2569,12 @@ var PlayerSourceIDMap = function PlayerSourceIDMap(media) {
|
|
2828
2569
|
if (this.previous) {
|
2829
2570
|
media.releasePlayer(this.previous);
|
2830
2571
|
}
|
2831
|
-
|
2832
2572
|
this.previous = this.current;
|
2833
2573
|
this.current = media.getPlayer(this[sourceID], _objectSpread2({
|
2834
2574
|
filePermaId: sourceID,
|
2835
2575
|
playerId: sourceID
|
2836
2576
|
}, playerOptions));
|
2837
2577
|
}
|
2838
|
-
|
2839
2578
|
return this.current;
|
2840
2579
|
}
|
2841
2580
|
};
|
@@ -2843,12 +2582,10 @@ var PlayerSourceIDMap = function PlayerSourceIDMap(media) {
|
|
2843
2582
|
|
2844
2583
|
var PlayerPool = function PlayerPool(audio, options) {
|
2845
2584
|
this.players = {};
|
2846
|
-
|
2847
2585
|
this.get = function (audioFileId) {
|
2848
2586
|
this.players[audioFileId] = this.players[audioFileId] || audio.createPlayer(audioFileId, options);
|
2849
2587
|
return this.players[audioFileId];
|
2850
2588
|
};
|
2851
|
-
|
2852
2589
|
this.dispose = function () {
|
2853
2590
|
this.players = {};
|
2854
2591
|
};
|
@@ -2859,11 +2596,11 @@ var PlayerPool = function PlayerPool(audio, options) {
|
|
2859
2596
|
* @alias pageflow.audio
|
2860
2597
|
* @member
|
2861
2598
|
*/
|
2862
|
-
|
2863
2599
|
var Audio = function Audio(options) {
|
2864
2600
|
this.getSources = options.getSources || function (audioFileId) {
|
2865
2601
|
return options.audioFiles[audioFileId] || '';
|
2866
2602
|
};
|
2603
|
+
|
2867
2604
|
/**
|
2868
2605
|
* Creates a player for the given audio file.
|
2869
2606
|
*
|
@@ -2877,11 +2614,8 @@ var Audio = function Audio(options) {
|
|
2877
2614
|
*
|
2878
2615
|
* @static
|
2879
2616
|
*/
|
2880
|
-
|
2881
|
-
|
2882
2617
|
this.createPlayer = function (audioFileId, options) {
|
2883
2618
|
var sources = this.getSources(removeSuffix(audioFileId));
|
2884
|
-
|
2885
2619
|
if (sources) {
|
2886
2620
|
return new AudioPlayer(sources, _objectSpread2({
|
2887
2621
|
volumeFading: true
|
@@ -2890,6 +2624,7 @@ var Audio = function Audio(options) {
|
|
2890
2624
|
return new AudioPlayer.Null();
|
2891
2625
|
}
|
2892
2626
|
};
|
2627
|
+
|
2893
2628
|
/**
|
2894
2629
|
* Create a `MultiPlayer` to play and fade between multiple audio
|
2895
2630
|
* files.
|
@@ -2908,21 +2643,16 @@ var Audio = function Audio(options) {
|
|
2908
2643
|
*
|
2909
2644
|
* @return {pageflow.Audio.MultiPlayer}
|
2910
2645
|
*/
|
2911
|
-
|
2912
|
-
|
2913
2646
|
this.createMultiPlayer = function (options) {
|
2914
2647
|
return new MultiPlayer(new PlayerPool(this, options), options);
|
2915
2648
|
};
|
2916
|
-
|
2917
2649
|
function removeSuffix(id) {
|
2918
2650
|
if (!id) {
|
2919
2651
|
return id;
|
2920
2652
|
}
|
2921
|
-
|
2922
2653
|
return parseInt(id.toString().split('.')[0], 10);
|
2923
2654
|
}
|
2924
2655
|
};
|
2925
|
-
|
2926
2656
|
Audio.setup = function (options) {
|
2927
2657
|
state.audio = new Audio(options);
|
2928
2658
|
};
|
@@ -2931,21 +2661,17 @@ Audio.PlayerPool = PlayerPool;
|
|
2931
2661
|
|
2932
2662
|
var isEventAdded = false;
|
2933
2663
|
var callbacks = [];
|
2934
|
-
|
2935
2664
|
var muteInBackground = function muteInBackground() {
|
2936
2665
|
callbacks.forEach(function (cb) {
|
2937
2666
|
cb(document.visibilityState);
|
2938
2667
|
});
|
2939
2668
|
};
|
2940
|
-
|
2941
2669
|
function documentHiddenState(callback) {
|
2942
2670
|
callbacks.push(callback);
|
2943
|
-
|
2944
2671
|
if (!isEventAdded) {
|
2945
2672
|
isEventAdded = true;
|
2946
2673
|
document.addEventListener('visibilitychange', muteInBackground, false);
|
2947
2674
|
}
|
2948
|
-
|
2949
2675
|
return {
|
2950
2676
|
removeCallback: function removeCallback() {
|
2951
2677
|
callbacks = callbacks.filter(function (c) {
|