pageflow 15.6.1 → 15.7.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pageflow might be problematic. Click here for more details.

Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +236 -11
  3. data/README.md +1 -2
  4. data/admins/pageflow/entry.rb +28 -57
  5. data/admins/pageflow/user.rb +1 -3
  6. data/app/assets/images/pageflow/admin/icons/buttons/editor.svg +2 -0
  7. data/app/assets/images/pageflow/admin/icons/buttons/preview.svg +2 -0
  8. data/app/assets/images/pageflow/admin/icons/buttons/show_public.svg +2 -0
  9. data/app/assets/images/pageflow/admin/icons/delete.svg +9 -0
  10. data/app/assets/images/pageflow/admin/icons/done.svg +6 -0
  11. data/app/assets/images/pageflow/admin/icons/edit.svg +7 -0
  12. data/app/assets/images/pageflow/admin/icons/editor.svg +2 -0
  13. data/app/assets/images/pageflow/admin/icons/folder.svg +8 -0
  14. data/app/assets/images/pageflow/admin/icons/folder_active.svg +8 -0
  15. data/app/assets/images/pageflow/admin/icons/info.svg +3 -0
  16. data/app/assets/images/pageflow/admin/icons/new.svg +5 -0
  17. data/app/assets/images/pageflow/admin/icons/preview.svg +2 -0
  18. data/app/assets/images/pageflow/admin/icons/published.svg +2 -0
  19. data/app/assets/images/pageflow/admin/icons/published_with_password.svg +2 -0
  20. data/app/assets/images/pageflow/admin/icons/show_public.svg +2 -0
  21. data/app/assets/images/pageflow/editor/blank_entry/logo.png +0 -0
  22. data/app/assets/images/pageflow/themes/default/embed_opt_in.svg +3 -0
  23. data/app/assets/images/pageflow/themes/default/embed_opt_out_info.svg +16 -0
  24. data/app/assets/javascripts/pageflow/admin/entries.js +9 -57
  25. data/app/assets/javascripts/pageflow/dist/ui.js +127 -10
  26. data/app/assets/stylesheets/pageflow/admin/active_admin_patches.scss +18 -16
  27. data/app/assets/stylesheets/pageflow/admin/badge_list.scss +25 -35
  28. data/app/assets/stylesheets/pageflow/admin/columns.scss +13 -11
  29. data/app/assets/stylesheets/pageflow/admin/embed_code.scss +1 -4
  30. data/app/assets/stylesheets/pageflow/admin/entries/folders.scss +44 -19
  31. data/app/assets/stylesheets/pageflow/admin/entries.scss +15 -31
  32. data/app/assets/stylesheets/pageflow/admin/features.scss +3 -1
  33. data/app/assets/stylesheets/pageflow/admin/forms.scss +14 -12
  34. data/app/assets/stylesheets/pageflow/admin/hint.scss +8 -14
  35. data/app/assets/stylesheets/pageflow/admin/icon_button.scss +25 -14
  36. data/app/assets/stylesheets/pageflow/admin/icon_link.scss +31 -15
  37. data/app/assets/stylesheets/pageflow/admin/publication_state_indicator.scss +14 -7
  38. data/app/assets/stylesheets/pageflow/admin/status_tags.scss +5 -4
  39. data/app/assets/stylesheets/pageflow/admin/tabs_view.scss +36 -34
  40. data/app/assets/stylesheets/pageflow/admin/tooltip_bubble.scss +15 -11
  41. data/app/assets/stylesheets/pageflow/admin.scss +12 -0
  42. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +15 -61
  43. data/app/assets/stylesheets/pageflow/editor/base.scss +28 -13
  44. data/app/assets/stylesheets/pageflow/editor/blank_entry.scss +6 -6
  45. data/app/assets/stylesheets/pageflow/editor/change_theme.scss +28 -71
  46. data/app/assets/stylesheets/pageflow/editor/composables.scss +2 -2
  47. data/app/assets/stylesheets/pageflow/editor/confirm_encoding.scss +18 -36
  48. data/app/assets/stylesheets/pageflow/editor/confirm_upload.scss +12 -39
  49. data/app/assets/stylesheets/pageflow/editor/dialogs.scss +39 -12
  50. data/app/assets/stylesheets/pageflow/editor/disabled_atmo_indicator.scss +3 -3
  51. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +7 -10
  52. data/app/assets/stylesheets/pageflow/editor/emulation_mode_button.scss +3 -8
  53. data/app/assets/stylesheets/pageflow/editor/failures.scss +3 -3
  54. data/app/assets/stylesheets/pageflow/editor/file_import.scss +22 -38
  55. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +3 -7
  56. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +4 -24
  57. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +10 -11
  58. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -8
  59. data/app/assets/stylesheets/pageflow/editor/files.scss +7 -6
  60. data/app/assets/stylesheets/pageflow/editor/files_explorer.scss +13 -30
  61. data/app/assets/stylesheets/pageflow/editor/files_gallery.scss +15 -11
  62. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +6 -7
  63. data/app/assets/stylesheets/pageflow/editor/help.scss +19 -14
  64. data/app/assets/stylesheets/pageflow/editor/help_image.scss +1 -1
  65. data/app/assets/stylesheets/pageflow/editor/info_box.scss +19 -0
  66. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +7 -11
  67. data/app/assets/stylesheets/pageflow/editor/inputs/file_processing_state_display.scss +0 -2
  68. data/app/assets/stylesheets/pageflow/editor/inputs/reference.scss +7 -11
  69. data/app/assets/stylesheets/pageflow/editor/list.scss +13 -10
  70. data/app/assets/stylesheets/pageflow/editor/loading.scss +1 -1
  71. data/app/assets/stylesheets/pageflow/editor/locked.scss +9 -5
  72. data/app/assets/stylesheets/pageflow/editor/menu.scss +5 -5
  73. data/app/assets/stylesheets/pageflow/editor/notifications.scss +15 -14
  74. data/app/assets/stylesheets/pageflow/editor/other_entry_item.scss +7 -3
  75. data/app/assets/stylesheets/pageflow/editor/outline.scss +57 -19
  76. data/app/assets/stylesheets/pageflow/editor/page_links.scss +10 -8
  77. data/app/assets/stylesheets/pageflow/editor/page_selection.scss +2 -29
  78. data/app/assets/stylesheets/pageflow/editor/publish_entry.scss +5 -6
  79. data/app/assets/stylesheets/pageflow/editor/quotas.scss +2 -3
  80. data/app/assets/stylesheets/pageflow/editor/select_button.scss +12 -6
  81. data/app/assets/stylesheets/pageflow/editor/sidebar_footer.scss +1 -5
  82. data/app/assets/stylesheets/pageflow/editor/storyline_picker.scss +6 -2
  83. data/app/assets/stylesheets/pageflow/editor/text_tracks.scss +6 -22
  84. data/app/assets/stylesheets/pageflow/editor/widgets.scss +2 -2
  85. data/app/assets/stylesheets/pageflow/editor/wysihtml5.scss +35 -29
  86. data/app/assets/stylesheets/pageflow/mixins/background_icons.scss +3 -3
  87. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +50 -68
  88. data/app/assets/stylesheets/pageflow/themes/default/base.scss +2 -0
  89. data/app/assets/stylesheets/pageflow/themes/default/consent/bar.scss +156 -0
  90. data/app/assets/stylesheets/pageflow/themes/default/consent/vendor_list.scss +62 -0
  91. data/app/assets/stylesheets/pageflow/themes/default/consent.scss +2 -0
  92. data/app/assets/stylesheets/pageflow/themes/default/logo/alignment.scss +7 -0
  93. data/app/assets/stylesheets/pageflow/themes/default/page/shadow.scss +44 -0
  94. data/app/assets/stylesheets/pageflow/themes/default/third_party_embed_consent.scss +103 -0
  95. data/app/assets/stylesheets/pageflow/ui/forms.scss +79 -84
  96. data/app/assets/stylesheets/pageflow/ui/functions.scss +56 -0
  97. data/app/assets/stylesheets/pageflow/ui/input/check_box_group_input.scss +2 -3
  98. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +6 -6
  99. data/app/assets/stylesheets/pageflow/ui/input/extended_select_input.scss +63 -50
  100. data/app/assets/stylesheets/pageflow/ui/normalize/forms.scss +153 -0
  101. data/app/assets/stylesheets/pageflow/ui/normalize.scss +278 -0
  102. data/app/assets/stylesheets/pageflow/ui/properties.scss +44 -0
  103. data/app/assets/stylesheets/pageflow/ui/table_cells/delete_row_table_cell.scss +1 -1
  104. data/app/assets/stylesheets/pageflow/ui/table_view.scss +14 -18
  105. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -11
  106. data/app/assets/stylesheets/pageflow/ui/tooltip.scss +6 -8
  107. data/app/assets/stylesheets/pageflow/ui/validation_error_messages.scss +6 -0
  108. data/app/assets/stylesheets/pageflow/ui.scss +4 -0
  109. data/app/controllers/pageflow/edit_locks_controller.rb +3 -1
  110. data/app/helpers/pageflow/admin/entries_helper.rb +2 -12
  111. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  112. data/app/helpers/pageflow/entries_helper.rb +41 -2
  113. data/app/helpers/pageflow/file_background_images_helper.rb +1 -1
  114. data/app/helpers/pageflow/page_types_helper.rb +1 -1
  115. data/app/helpers/pageflow/themes_helper.rb +1 -1
  116. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -1
  117. data/app/jobs/pageflow/poll_zencoder_job.rb +1 -9
  118. data/app/models/pageflow/audio_file.rb +17 -0
  119. data/app/models/pageflow/audio_file_url_templates.rb +4 -1
  120. data/app/models/pageflow/customized_theme.rb +37 -0
  121. data/app/models/pageflow/draft_entry.rb +6 -59
  122. data/app/models/pageflow/entry_at_revision.rb +68 -0
  123. data/app/models/pageflow/entry_role_query.rb +44 -24
  124. data/app/models/pageflow/image_file_css_background_image_urls.rb +8 -2
  125. data/app/models/pageflow/published_entry.rb +9 -56
  126. data/app/models/pageflow/theme_customization.rb +46 -0
  127. data/app/models/pageflow/theme_customization_file.rb +58 -0
  128. data/app/models/pageflow/video_file.rb +11 -1
  129. data/app/models/pageflow/video_file_url_templates.rb +1 -0
  130. data/app/policies/pageflow/entry_policy.rb +4 -0
  131. data/app/state_machines/pageflow/media_encoding_state_machine.rb +23 -4
  132. data/app/views/admin/entries/_form.html.erb +50 -0
  133. data/app/views/admin/entries/entry_type_name_input.html.erb +5 -0
  134. data/app/views/admin/features/_form.html.erb +1 -1
  135. data/app/views/admin/memberships/_form.html.erb +2 -3
  136. data/app/views/admin/users/_form.html.erb +1 -1
  137. data/app/views/admin/users/invitation.html.erb +2 -2
  138. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +10 -9
  139. data/app/views/components/pageflow/admin/members_tab.rb +5 -1
  140. data/app/views/components/pageflow/admin/revisions_tab.rb +13 -3
  141. data/app/views/components/pageflow/admin/timestamp.rb +20 -0
  142. data/app/views/components/pageflow/admin/user_account_badge_list.rb +5 -6
  143. data/app/views/pageflow/admin/entries/_cannot_add_user.html.erb +9 -5
  144. data/app/views/pageflow/admin/entries/_entry_type_name_input.html.erb +7 -0
  145. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +13 -0
  146. data/app/views/pageflow/editor/encoding_confirmations/_intro.html.erb +0 -0
  147. data/app/views/pageflow/editor/encoding_confirmations/check.json.jbuilder +14 -2
  148. data/config/initializers/paperclip.rb +16 -1
  149. data/config/locales/de.yml +24 -28
  150. data/config/locales/en.yml +19 -10
  151. data/db/migrate/20210528073122_create_pageflow_theme_customizations.rb +11 -0
  152. data/db/migrate/20210531090654_create_pageflow_theme_customization_files.rb +15 -0
  153. data/db/migrate/20210531102228_add_selected_file_ids_to_theme_customizations.rb +5 -0
  154. data/db/migrate/20211020085902_add_canonical_entry_url_prefix_to_themings.rb +5 -0
  155. data/db/migrate/20220503150010_add_peak_data_to_audio_files.rb +5 -0
  156. data/db/migrate/20220705084830_add_trailing_slash_in_canonical_urls_to_themings.rb +5 -0
  157. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +256 -124
  158. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +566 -167
  159. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +5 -5
  160. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +4 -4
  161. data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +38 -0
  162. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_in.html.erb +12 -0
  163. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_out_info.html.erb +10 -0
  164. data/entry_types/paged/config/initializers/features.rb +2 -0
  165. data/entry_types/paged/config/locales/new/video_contain.de.yml +7 -0
  166. data/entry_types/paged/config/locales/new/video_contain.en.yml +7 -0
  167. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  168. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +1 -0
  169. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +58 -0
  170. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +37 -3
  171. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +92 -6
  172. data/entry_types/scrolled/app/helpers/pageflow_scrolled/webpack_public_path_helper.rb +20 -0
  173. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +7 -0
  174. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +5 -2
  175. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +5 -1
  176. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +5 -4
  177. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +16 -0
  178. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +13 -2
  179. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_widget.json.jbuilder +2 -0
  180. data/entry_types/scrolled/config/locales/de.yml +1 -8
  181. data/entry_types/scrolled/config/locales/en.yml +1 -9
  182. data/entry_types/scrolled/config/locales/new/before_after_slider.de.yml +8 -0
  183. data/entry_types/scrolled/config/locales/new/before_after_slider.en.yml +8 -0
  184. data/entry_types/scrolled/config/locales/new/center_ragged.de.yml +8 -0
  185. data/entry_types/scrolled/config/locales/new/center_ragged.en.yml +9 -0
  186. data/entry_types/scrolled/config/locales/new/consent.de.yml +25 -0
  187. data/entry_types/scrolled/config/locales/new/consent.en.yml +24 -0
  188. data/entry_types/scrolled/config/locales/new/content_element_categories.de.yml +39 -0
  189. data/entry_types/scrolled/config/locales/new/content_element_categories.en.yml +39 -0
  190. data/entry_types/scrolled/config/locales/new/default_transition.de.yml +14 -0
  191. data/entry_types/scrolled/config/locales/new/default_transition.en.yml +14 -0
  192. data/entry_types/scrolled/config/locales/new/header_line_breaks.de.yml +28 -0
  193. data/entry_types/scrolled/config/locales/new/header_line_breaks.en.yml +27 -0
  194. data/entry_types/scrolled/config/locales/new/header_size.de.yml +17 -0
  195. data/entry_types/scrolled/config/locales/new/header_size.en.yml +17 -0
  196. data/entry_types/scrolled/config/locales/new/iframe_embed.de.yml +39 -0
  197. data/entry_types/scrolled/config/locales/new/iframe_embed.en.yml +39 -0
  198. data/entry_types/scrolled/config/locales/new/inline_loops.de.yml +26 -0
  199. data/entry_types/scrolled/config/locales/new/inline_loops.en.yml +26 -0
  200. data/entry_types/scrolled/config/locales/new/portrait_inline_image.de.yml +9 -0
  201. data/entry_types/scrolled/config/locales/new/portrait_inline_image.en.yml +9 -0
  202. data/entry_types/scrolled/config/locales/new/section_width.de.yml +10 -0
  203. data/entry_types/scrolled/config/locales/new/section_width.en.yml +10 -0
  204. data/entry_types/scrolled/config/locales/new/typography_variants.de.yml +7 -0
  205. data/entry_types/scrolled/config/locales/new/typography_variants.en.yml +7 -0
  206. data/entry_types/scrolled/config/locales/new/video_embed_poster.de.yml +8 -0
  207. data/entry_types/scrolled/config/locales/new/video_embed_poster.en.yml +8 -0
  208. data/entry_types/scrolled/config/locales/new/waveform_styles.de.yml +11 -0
  209. data/entry_types/scrolled/config/locales/new/waveform_styles.en.yml +12 -0
  210. data/entry_types/scrolled/config/locales/new/widgets.de.yml +6 -0
  211. data/entry_types/scrolled/config/locales/new/widgets.en.yml +6 -0
  212. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +29 -5
  213. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +8 -6
  214. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +37 -0
  215. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +57 -0
  216. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +49 -0
  217. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +8 -0
  218. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +42 -0
  219. data/entry_types/scrolled/lib/pageflow_scrolled.rb +17 -1
  220. data/entry_types/scrolled/package/contentElements-editor.js +323 -89
  221. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  222. data/entry_types/scrolled/package/contentElements-frontend.js +719 -529
  223. data/entry_types/scrolled/package/editor.js +459 -261
  224. data/entry_types/scrolled/package/frontend/{EditableText-7093fd0e.js → EditableInlineText.module-b9923660.js} +284 -362
  225. data/entry_types/scrolled/package/frontend/{i18n-4dc6c377.js → PhonePlatformContext-9fb97827.js} +199 -106
  226. data/entry_types/scrolled/package/frontend/{Viewer-e49e7807.js → Viewer-e2290ea0.js} +196 -79
  227. data/entry_types/scrolled/package/frontend/{Wavesurfer-0adf5667.js → Wavesurfer-7d9cf1b7.js} +16 -58
  228. data/entry_types/scrolled/package/frontend/{components-6a6793ca.js → components-6ab26015.js} +664 -671
  229. data/entry_types/scrolled/package/frontend/{getPrototypeOf-63c7c8e8.js → createSuper-d0f30da3.js} +34 -5
  230. data/entry_types/scrolled/package/frontend/index.css +1 -9
  231. data/entry_types/scrolled/package/frontend/index.js +1919 -2386
  232. data/entry_types/scrolled/package/frontend/{useBrowserFeature-91a4c29d.js → usePhonePlatform-2857c22b.js} +9 -8
  233. data/entry_types/scrolled/package/frontend-server.js +3 -6
  234. data/entry_types/scrolled/package/package.json +16 -8
  235. data/entry_types/scrolled/package/testHelpers.js +456 -0
  236. data/entry_types/scrolled/package/values/breakpoints.module.css +9 -0
  237. data/entry_types/scrolled/package/values/colors.module.css +5 -0
  238. data/entry_types/scrolled/package/widgets/defaultNavigation.css +9 -0
  239. data/entry_types/scrolled/package/widgets/defaultNavigation.js +612 -0
  240. data/entry_types/scrolled/spec/fixtures/image.svg +1 -0
  241. data/lib/pageflow/ability_mixin.rb +4 -0
  242. data/lib/pageflow/built_in_widget_type.rb +4 -0
  243. data/lib/pageflow/built_in_widget_types_plugin.rb +7 -0
  244. data/lib/pageflow/configuration.rb +34 -1
  245. data/lib/pageflow/entry_type.rb +11 -2
  246. data/lib/pageflow/entry_type_configuration.rb +2 -0
  247. data/lib/pageflow/file_type.rb +24 -0
  248. data/lib/pageflow/paperclip_processors/audio_waveform.rb +42 -0
  249. data/lib/pageflow/paperclip_processors/noop.rb +10 -0
  250. data/lib/pageflow/theme_customizations.rb +61 -0
  251. data/lib/pageflow/version.rb +1 -1
  252. data/lib/pageflow.rb +9 -0
  253. data/package/config/jest/index.js +2 -1
  254. data/package/config/postcss/scaleFunctions.js +71 -0
  255. data/package/editor.js +95 -85
  256. data/package/frontend.js +521 -161
  257. data/package/package.json +5 -3
  258. data/package/testHelpers.js +26 -5
  259. data/package/ui.js +124 -11
  260. data/spec/factories/draft_entries.rb +19 -1
  261. data/spec/factories/entries.rb +4 -0
  262. data/spec/factories/published_entries.rb +6 -0
  263. data/spec/fixtures/audio.ogg +0 -0
  264. metadata +118 -14
  265. data/app/views/admin/entries/_not_allowed_to_see_entry_types.json.jbuilder +0 -2
  266. data/app/views/admin/entries/entry_types.json.jbuilder +0 -4
  267. data/package/config/jest/transformers/upwardBabel.js +0 -5
@@ -2844,53 +2844,216 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
2844
2844
 
2845
2845
  var backboneEventsStandalone$1 = backboneEventsStandalone;
2846
2846
 
2847
- var log = function log(text, options) {
2848
- if (window.console && (debugMode() || options && options.force)) {
2849
- window.console.log(text);
2847
+ function _defineProperty(obj, key, value) {
2848
+ if (key in obj) {
2849
+ Object.defineProperty(obj, key, {
2850
+ value: value,
2851
+ enumerable: true,
2852
+ configurable: true,
2853
+ writable: true
2854
+ });
2855
+ } else {
2856
+ obj[key] = value;
2850
2857
  }
2851
- };
2852
2858
 
2853
- var debugMode = function debugMode() {
2854
- return window.location.href.indexOf('debug=true') >= 0;
2855
- };
2859
+ return obj;
2860
+ }
2856
2861
 
2857
- var state = typeof window !== 'undefined' && window.pageflow || {};
2858
- var assetUrls = state.assetUrls || {}; // https://developer.mozilla.org/en-US/docs/Web/API/document.cookie
2862
+ function ownKeys$1(object, enumerableOnly) {
2863
+ var keys = Object.keys(object);
2859
2864
 
2860
- var cookies = {
2861
- getItem: function getItem(sKey) {
2862
- if (!sKey) {
2863
- return null;
2864
- } // eslint-disable-next-line no-useless-escape
2865
+ if (Object.getOwnPropertySymbols) {
2866
+ var symbols = Object.getOwnPropertySymbols(object);
2867
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
2868
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
2869
+ });
2870
+ keys.push.apply(keys, symbols);
2871
+ }
2865
2872
 
2873
+ return keys;
2874
+ }
2866
2875
 
2867
- return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
2868
- },
2869
- setItem: function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
2870
- // eslint-disable-next-line no-useless-escape
2871
- if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) {
2872
- return false;
2876
+ function _objectSpread2(target) {
2877
+ for (var i = 1; i < arguments.length; i++) {
2878
+ var source = arguments[i] != null ? arguments[i] : {};
2879
+
2880
+ if (i % 2) {
2881
+ ownKeys$1(Object(source), true).forEach(function (key) {
2882
+ _defineProperty(target, key, source[key]);
2883
+ });
2884
+ } else if (Object.getOwnPropertyDescriptors) {
2885
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
2886
+ } else {
2887
+ ownKeys$1(Object(source)).forEach(function (key) {
2888
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
2889
+ });
2873
2890
  }
2891
+ }
2874
2892
 
2875
- var sExpires = "";
2893
+ return target;
2894
+ }
2876
2895
 
2877
- if (vEnd) {
2878
- switch (vEnd.constructor) {
2879
- case Number:
2880
- sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
2881
- break;
2896
+ function _classCallCheck(instance, Constructor) {
2897
+ if (!(instance instanceof Constructor)) {
2898
+ throw new TypeError("Cannot call a class as a function");
2899
+ }
2900
+ }
2882
2901
 
2883
- case String:
2884
- sExpires = "; expires=" + vEnd;
2885
- break;
2902
+ function _defineProperties(target, props) {
2903
+ for (var i = 0; i < props.length; i++) {
2904
+ var descriptor = props[i];
2905
+ descriptor.enumerable = descriptor.enumerable || false;
2906
+ descriptor.configurable = true;
2907
+ if ("value" in descriptor) descriptor.writable = true;
2908
+ Object.defineProperty(target, descriptor.key, descriptor);
2909
+ }
2910
+ }
2886
2911
 
2887
- case Date:
2888
- sExpires = "; expires=" + vEnd.toUTCString();
2889
- break;
2890
- }
2912
+ function _createClass(Constructor, protoProps, staticProps) {
2913
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
2914
+ if (staticProps) _defineProperties(Constructor, staticProps);
2915
+ return Constructor;
2916
+ }
2917
+
2918
+ function _arrayWithHoles(arr) {
2919
+ if (Array.isArray(arr)) return arr;
2920
+ }
2921
+
2922
+ function _iterableToArrayLimit(arr, i) {
2923
+ if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
2924
+ var _arr = [];
2925
+ var _n = true;
2926
+ var _d = false;
2927
+ var _e = undefined;
2928
+
2929
+ try {
2930
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
2931
+ _arr.push(_s.value);
2932
+
2933
+ if (i && _arr.length === i) break;
2934
+ }
2935
+ } catch (err) {
2936
+ _d = true;
2937
+ _e = err;
2938
+ } finally {
2939
+ try {
2940
+ if (!_n && _i["return"] != null) _i["return"]();
2941
+ } finally {
2942
+ if (_d) throw _e;
2943
+ }
2944
+ }
2945
+
2946
+ return _arr;
2947
+ }
2948
+
2949
+ function _arrayLikeToArray(arr, len) {
2950
+ if (len == null || len > arr.length) len = arr.length;
2951
+
2952
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
2953
+ arr2[i] = arr[i];
2954
+ }
2955
+
2956
+ return arr2;
2957
+ }
2958
+
2959
+ function _unsupportedIterableToArray(o, minLen) {
2960
+ if (!o) return;
2961
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
2962
+ var n = Object.prototype.toString.call(o).slice(8, -1);
2963
+ if (n === "Object" && o.constructor) n = o.constructor.name;
2964
+ if (n === "Map" || n === "Set") return Array.from(n);
2965
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
2966
+ }
2967
+
2968
+ function _nonIterableRest() {
2969
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2970
+ }
2971
+
2972
+ function _slicedToArray(arr, i) {
2973
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
2974
+ }
2975
+
2976
+ var Persistence = /*#__PURE__*/function () {
2977
+ function Persistence(_ref) {
2978
+ var cookies = _ref.cookies;
2979
+
2980
+ _classCallCheck(this, Persistence);
2981
+
2982
+ this.cookies = cookies;
2983
+ }
2984
+
2985
+ _createClass(Persistence, [{
2986
+ key: "store",
2987
+ value: function store(vendors, signal) {
2988
+ var _this = this;
2989
+
2990
+ var vendorsByCookieName = vendors.reduce(function (sorted, vendor) {
2991
+ var cookieName = vendor.cookieName;
2992
+ sorted[cookieName] = sorted[cookieName] || [];
2993
+ sorted[cookieName].push(vendor);
2994
+ return sorted;
2995
+ }, {});
2996
+ Object.entries(vendorsByCookieName).forEach(function (_ref2) {
2997
+ var _ref3 = _slicedToArray(_ref2, 2),
2998
+ cookieName = _ref3[0],
2999
+ vendors = _ref3[1];
3000
+
3001
+ var cookieDomain = vendors[0].cookieDomain;
3002
+
3003
+ _this.setCookie(cookieName, JSON.stringify(vendors.reduce(function (result, vendor) {
3004
+ result[vendor.cookieKey || vendor.name] = signal === 'accepted' ? true : signal === 'denied' ? false : signal[vendor.name];
3005
+ return result;
3006
+ }, {})), cookieDomain);
3007
+ });
3008
+ }
3009
+ }, {
3010
+ key: "update",
3011
+ value: function update(vendor, signal) {
3012
+ var content = this.cookies.getItem(vendor.cookieName);
3013
+ var flags = content ? JSON.parse(content) : {};
3014
+ this.setCookie(vendor.cookieName, JSON.stringify(_objectSpread2(_objectSpread2({}, flags), {}, _defineProperty({}, vendor.cookieKey || vendor.name, signal))), vendor.cookieDomain);
3015
+ }
3016
+ }, {
3017
+ key: "read",
3018
+ value: function read(vendor) {
3019
+ var content = this.cookies.getItem(vendor.cookieName);
3020
+ var flags = content ? JSON.parse(content) : {};
3021
+ var flag = flags[vendor.cookieKey || vendor.name];
3022
+ return flag === true ? 'accepted' : flag === false ? 'denied' : 'undecided';
2891
3023
  }
3024
+ }, {
3025
+ key: "setCookie",
3026
+ value: function setCookie(name, value, domain) {
3027
+ if (domain && !window.location.hostname.match(new RegExp("".concat(domain, "$")))) {
3028
+ domain = null;
3029
+ }
3030
+
3031
+ this.cookies.setItem(name, value, {
3032
+ path: '/',
3033
+ domain: domain,
3034
+ expires: Infinity,
3035
+ // Ensure cookie can be read iframe embed
3036
+ sameSite: 'None',
3037
+ secure: true
3038
+ });
3039
+ }
3040
+ }]);
2892
3041
 
2893
- document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
3042
+ return Persistence;
3043
+ }(); // https://developer.mozilla.org/en-US/docs/Web/API/document.cookie
3044
+
3045
+
3046
+ var cookies = {
3047
+ getItem: function getItem(sKey) {
3048
+ if (!sKey) {
3049
+ return null;
3050
+ } // eslint-disable-next-line no-useless-escape
3051
+
3052
+
3053
+ return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
3054
+ },
3055
+ setItem: function setItem() {
3056
+ document.cookie = setItemCookieString.apply(void 0, arguments);
2894
3057
  return true;
2895
3058
  },
2896
3059
  removeItem: function removeItem(sKey, sPath, sDomain) {
@@ -2920,6 +3083,311 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
2920
3083
  return aKeys;
2921
3084
  }
2922
3085
  };
3086
+
3087
+ function setItemCookieString(key, value, expiresOrOptions, path, domain, secure) {
3088
+ if (expiresOrOptions && typeof expiresOrOptions === 'object' && expiresOrOptions.constructor !== Date) {
3089
+ return setItemCookieStringWithOptions(key, value, expiresOrOptions);
3090
+ } else {
3091
+ return setItemCookieStringWithOptions(key, value, {
3092
+ expires: expiresOrOptions,
3093
+ path: path,
3094
+ domain: domain,
3095
+ secure: secure
3096
+ });
3097
+ }
3098
+ }
3099
+
3100
+ function setItemCookieStringWithOptions(key, value, _ref) {
3101
+ var expires = _ref.expires,
3102
+ path = _ref.path,
3103
+ domain = _ref.domain,
3104
+ secure = _ref.secure,
3105
+ sameSite = _ref.sameSite;
3106
+ var expiresPart = "";
3107
+
3108
+ if (expires) {
3109
+ switch (expires.constructor) {
3110
+ case Number:
3111
+ expiresPart = expires === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + expires;
3112
+ break;
3113
+
3114
+ case String:
3115
+ expiresPart = "; expires=" + expires;
3116
+ break;
3117
+
3118
+ case Date:
3119
+ expiresPart = "; expires=" + expires.toUTCString();
3120
+ break;
3121
+ }
3122
+ }
3123
+
3124
+ return encodeURIComponent(key) + "=" + encodeURIComponent(value) + expiresPart + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : "") + (sameSite ? "; SameSite=" + sameSite : "") + (secure ? "; Secure" : "");
3125
+ }
3126
+
3127
+ var supportedParadigms = ['external opt-out', 'opt-in', 'lazy opt-in', 'skip'];
3128
+
3129
+ var Consent = /*#__PURE__*/function () {
3130
+ function Consent(_ref) {
3131
+ var _this = this;
3132
+
3133
+ var cookies = _ref.cookies,
3134
+ inEditor = _ref.inEditor;
3135
+
3136
+ _classCallCheck(this, Consent);
3137
+
3138
+ this.requestedPromise = new Promise(function (resolve) {
3139
+ _this.requestedPromiseResolve = resolve;
3140
+ });
3141
+ this.vendors = [];
3142
+ this.persistence = new Persistence({
3143
+ cookies: cookies
3144
+ });
3145
+ this.emitter = _objectSpread2({}, backboneEventsStandalone$1);
3146
+ this.inEditor = inEditor;
3147
+ }
3148
+
3149
+ _createClass(Consent, [{
3150
+ key: "registerVendor",
3151
+ value: function registerVendor(name, _ref2) {
3152
+ var displayName = _ref2.displayName,
3153
+ description = _ref2.description,
3154
+ paradigm = _ref2.paradigm,
3155
+ cookieName = _ref2.cookieName,
3156
+ cookieKey = _ref2.cookieKey,
3157
+ cookieDomain = _ref2.cookieDomain;
3158
+
3159
+ if (this.vendorRegistrationClosed) {
3160
+ throw new Error("Vendor ".concat(name, " has been registered after ") + 'registration has been closed.');
3161
+ }
3162
+
3163
+ if (!name.match(/^[a-z0-9-_]+$/i)) {
3164
+ throw new Error("Invalid vendor name '".concat(name, "'. ") + 'Only letters, numbers, hyphens and underscores are allowed.');
3165
+ }
3166
+
3167
+ if (supportedParadigms.indexOf(paradigm) < 0) {
3168
+ throw new Error("unknown paradigm ".concat(paradigm));
3169
+ }
3170
+
3171
+ this.vendors.push({
3172
+ displayName: displayName,
3173
+ description: description,
3174
+ name: name,
3175
+ paradigm: paradigm,
3176
+ cookieName: cookieName || 'pageflow_consent',
3177
+ cookieKey: cookieKey,
3178
+ cookieDomain: cookieDomain
3179
+ });
3180
+ }
3181
+ }, {
3182
+ key: "closeVendorRegistration",
3183
+ value: function closeVendorRegistration() {
3184
+ var _this2 = this;
3185
+
3186
+ this.vendorRegistrationClosed = true;
3187
+
3188
+ if (!this.getUndecidedOptInVendors().length) {
3189
+ this.triggerDecisionEvents();
3190
+ return;
3191
+ }
3192
+
3193
+ var vendors = this.getRequestedVendors();
3194
+ this.requestedPromiseResolve({
3195
+ vendors: this.withState(vendors),
3196
+ acceptAll: function acceptAll() {
3197
+ _this2.persistence.store(vendors, 'accepted');
3198
+
3199
+ _this2.triggerDecisionEvents();
3200
+ },
3201
+ denyAll: function denyAll() {
3202
+ _this2.persistence.store(vendors, 'denied');
3203
+
3204
+ _this2.triggerDecisionEvents();
3205
+ },
3206
+ save: function save(vendorConsent) {
3207
+ _this2.persistence.store(vendors, vendorConsent);
3208
+
3209
+ _this2.triggerDecisionEvents();
3210
+ }
3211
+ });
3212
+ }
3213
+ }, {
3214
+ key: "relevantVendors",
3215
+ value: function relevantVendors() {
3216
+ var _this3 = this;
3217
+
3218
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
3219
+ additionalVendorNames = _ref3.include;
3220
+
3221
+ return this.withState(this.vendors.filter(function (vendor) {
3222
+ 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';
3223
+ }));
3224
+ }
3225
+ }, {
3226
+ key: "require",
3227
+ value: function require(vendorName) {
3228
+ var _this4 = this;
3229
+
3230
+ if (this.inEditor) {
3231
+ return Promise.resolve('fulfilled');
3232
+ }
3233
+
3234
+ var vendor = this.findVendor(vendorName, 'require consent for');
3235
+
3236
+ switch (vendor.paradigm) {
3237
+ case 'opt-in':
3238
+ case 'lazy opt-in':
3239
+ if (this.getUndecidedOptInVendors().length) {
3240
+ return new Promise(function (resolve) {
3241
+ _this4.emitter.once("".concat(vendor.name, ":accepted"), function () {
3242
+ return resolve('fulfilled');
3243
+ });
3244
+
3245
+ _this4.emitter.once("".concat(vendor.name, ":denied"), function () {
3246
+ return resolve('failed');
3247
+ });
3248
+ });
3249
+ }
3250
+
3251
+ if (this.persistence.read(vendor) === 'accepted') {
3252
+ return Promise.resolve('fulfilled');
3253
+ } else {
3254
+ return Promise.resolve('failed');
3255
+ }
3256
+
3257
+ case 'external opt-out':
3258
+ if (this.persistence.read(vendor) === 'denied') {
3259
+ return Promise.resolve('failed');
3260
+ }
3261
+
3262
+ return Promise.resolve('fulfilled');
3263
+
3264
+ case 'skip':
3265
+ return Promise.resolve('fulfilled');
3266
+
3267
+ default:
3268
+ // should not be used
3269
+ return null;
3270
+ }
3271
+ }
3272
+ }, {
3273
+ key: "requireAccepted",
3274
+ value: function requireAccepted(vendorName) {
3275
+ var _this5 = this;
3276
+
3277
+ if (this.inEditor) {
3278
+ return Promise.resolve('fulfilled');
3279
+ }
3280
+
3281
+ var vendor = this.findVendor(vendorName, 'require consent for');
3282
+
3283
+ if (vendor.paradigm === 'opt-in' || vendor.paradigm === 'lazy opt-in') {
3284
+ if (this.getUndecidedOptInVendors().length || this.persistence.read(vendor) !== 'accepted') {
3285
+ return new Promise(function (resolve) {
3286
+ _this5.emitter.once("".concat(vendor.name, ":accepted"), function () {
3287
+ return resolve('fulfilled');
3288
+ });
3289
+ });
3290
+ }
3291
+
3292
+ return Promise.resolve('fulfilled');
3293
+ } else {
3294
+ return this.require(vendorName);
3295
+ }
3296
+ }
3297
+ }, {
3298
+ key: "requested",
3299
+ value: function requested() {
3300
+ return this.requestedPromise;
3301
+ }
3302
+ }, {
3303
+ key: "accept",
3304
+ value: function accept(vendorName) {
3305
+ var vendor = this.findVendor(vendorName, 'accept');
3306
+ this.persistence.update(vendor, true);
3307
+ this.emitter.trigger("".concat(vendor.name, ":accepted"));
3308
+ }
3309
+ }, {
3310
+ key: "deny",
3311
+ value: function deny(vendorName) {
3312
+ var vendor = this.findVendor(vendorName, 'deny');
3313
+ this.persistence.update(vendor, false);
3314
+ }
3315
+ }, {
3316
+ key: "getRequestedVendors",
3317
+ value: function getRequestedVendors() {
3318
+ return this.vendors.filter(function (vendor) {
3319
+ return vendor.paradigm !== 'skip';
3320
+ });
3321
+ }
3322
+ }, {
3323
+ key: "getUndecidedOptInVendors",
3324
+ value: function getUndecidedOptInVendors() {
3325
+ var _this6 = this;
3326
+
3327
+ return this.vendors.filter(function (vendor) {
3328
+ return vendor.paradigm === 'opt-in' && _this6.persistence.read(vendor) === 'undecided';
3329
+ });
3330
+ }
3331
+ }, {
3332
+ key: "triggerDecisionEvents",
3333
+ value: function triggerDecisionEvents() {
3334
+ var _this7 = this;
3335
+
3336
+ this.vendors.filter(function (vendor) {
3337
+ return vendor.paradigm !== 'skip';
3338
+ }).forEach(function (vendor) {
3339
+ _this7.emitter.trigger("".concat(vendor.name, ":").concat(_this7.persistence.read(vendor)));
3340
+ });
3341
+ }
3342
+ }, {
3343
+ key: "findVendor",
3344
+ value: function findVendor(vendorName, actionForErrorMessage) {
3345
+ var vendor = this.vendors.find(function (vendor) {
3346
+ return vendor.name === vendorName;
3347
+ });
3348
+
3349
+ if (!vendor) {
3350
+ throw new Error("Cannot ".concat(actionForErrorMessage, " unknown vendor \"").concat(vendorName, "\". ") + 'Consider using consent.registerVendor.');
3351
+ }
3352
+
3353
+ return vendor;
3354
+ }
3355
+ }, {
3356
+ key: "withState",
3357
+ value: function withState(vendors) {
3358
+ var _this8 = this;
3359
+
3360
+ return vendors.map(function (vendor) {
3361
+ return _objectSpread2(_objectSpread2({}, vendor), {}, {
3362
+ state: _this8.persistence.read(vendor)
3363
+ });
3364
+ });
3365
+ }
3366
+ }]);
3367
+
3368
+ return Consent;
3369
+ }();
3370
+
3371
+ Consent.create = function () {
3372
+ var inEditor = typeof PAGEFLOW_EDITOR !== 'undefined' && PAGEFLOW_EDITOR;
3373
+ return new Consent({
3374
+ cookies: cookies,
3375
+ inEditor: inEditor
3376
+ });
3377
+ };
3378
+
3379
+ var log = function log(text, options) {
3380
+ if (window.console && (debugMode() || options && options.force)) {
3381
+ window.console.log(text);
3382
+ }
3383
+ };
3384
+
3385
+ var debugMode = function debugMode() {
3386
+ return window.location.href.indexOf('debug=true') >= 0;
3387
+ };
3388
+
3389
+ var state = typeof window !== 'undefined' && window.pageflow || {};
3390
+ var assetUrls = state.assetUrls || {};
2923
3391
  var events = Object.assign({}, backboneEventsStandalone$1);
2924
3392
  /**
2925
3393
  * Detect browser via user agent. Use only if feature detection is not
@@ -2975,6 +3443,14 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
2975
3443
  matchesiPadSafari13AndAbove();
2976
3444
  },
2977
3445
 
3446
+ /**
3447
+ * Returns true on Android.
3448
+ * @return {boolean}
3449
+ */
3450
+ matchesAndroid: function matchesAndroid() {
3451
+ return matches(/Android/i);
3452
+ },
3453
+
2978
3454
  /**
2979
3455
  * Returns true on iOS or Android.
2980
3456
  * @return {boolean}
@@ -3191,9 +3667,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3191
3667
  });
3192
3668
  };
3193
3669
 
3194
- asyncHas.all = function ()
3195
- /* arguments */
3196
- {
3670
+ asyncHas.all = function () {
3197
3671
  return Promise.all(arguments).then(function (results) {
3198
3672
  return results.every(function (result) {
3199
3673
  return result;
@@ -3301,9 +3775,6 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3301
3775
  browser.feature('mse and native hls support', function (has) {
3302
3776
  return agent.matchesSafari() && !agent.matchesMobilePlatform();
3303
3777
  });
3304
- browser.feature('hls support', function (has) {
3305
- return agent.matchesSafari() || agent.matchesMobilePlatform();
3306
- });
3307
3778
  browser.feature('native video player', function (has) {
3308
3779
  return has('iphone platform');
3309
3780
  });
@@ -3315,28 +3786,6 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3315
3786
  });
3316
3787
  browser.agent = agent;
3317
3788
  browser.Agent = Agent;
3318
-
3319
- function _classCallCheck(instance, Constructor) {
3320
- if (!(instance instanceof Constructor)) {
3321
- throw new TypeError("Cannot call a class as a function");
3322
- }
3323
- }
3324
-
3325
- function _defineProperties(target, props) {
3326
- for (var i = 0; i < props.length; i++) {
3327
- var descriptor = props[i];
3328
- descriptor.enumerable = descriptor.enumerable || false;
3329
- descriptor.configurable = true;
3330
- if ("value" in descriptor) descriptor.writable = true;
3331
- Object.defineProperty(target, descriptor.key, descriptor);
3332
- }
3333
- }
3334
-
3335
- function _createClass(Constructor, protoProps, staticProps) {
3336
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
3337
- if (staticProps) _defineProperties(Constructor, staticProps);
3338
- return Constructor;
3339
- }
3340
3789
  /**
3341
3790
  * Let plugins register functions which extend the editor or
3342
3791
  * slideshow with certain functionality when a named feature is
@@ -3346,10 +3795,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3346
3795
  * @since 0.9
3347
3796
  */
3348
3797
 
3349
-
3350
- var Features =
3351
- /*#__PURE__*/
3352
- function () {
3798
+ var Features = /*#__PURE__*/function () {
3353
3799
  /** @lends pageflow.features */
3354
3800
 
3355
3801
  /** @api private */
@@ -3367,9 +3813,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3367
3813
 
3368
3814
  _createClass(Features, [{
3369
3815
  key: "has",
3370
- value: function has()
3371
- /* arguments */
3372
- {
3816
+ value: function has() {
3373
3817
  return browser.has.apply(browser, arguments);
3374
3818
  }
3375
3819
  /**
@@ -3421,61 +3865,10 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3421
3865
 
3422
3866
  var features = new Features();
3423
3867
 
3424
- function _defineProperty(obj, key, value) {
3425
- if (key in obj) {
3426
- Object.defineProperty(obj, key, {
3427
- value: value,
3428
- enumerable: true,
3429
- configurable: true,
3430
- writable: true
3431
- });
3432
- } else {
3433
- obj[key] = value;
3434
- }
3435
-
3436
- return obj;
3437
- }
3438
-
3439
- function ownKeys$1(object, enumerableOnly) {
3440
- var keys = Object.keys(object);
3441
-
3442
- if (Object.getOwnPropertySymbols) {
3443
- var symbols = Object.getOwnPropertySymbols(object);
3444
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
3445
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
3446
- });
3447
- keys.push.apply(keys, symbols);
3448
- }
3449
-
3450
- return keys;
3451
- }
3452
-
3453
- function _objectSpread2(target) {
3454
- for (var i = 1; i < arguments.length; i++) {
3455
- var source = arguments[i] != null ? arguments[i] : {};
3456
-
3457
- if (i % 2) {
3458
- ownKeys$1(Object(source), true).forEach(function (key) {
3459
- _defineProperty(target, key, source[key]);
3460
- });
3461
- } else if (Object.getOwnPropertyDescriptors) {
3462
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
3463
- } else {
3464
- ownKeys$1(Object(source)).forEach(function (key) {
3465
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
3466
- });
3467
- }
3468
- }
3469
-
3470
- return target;
3471
- }
3472
-
3473
3868
  var handleFailedPlay = function handleFailedPlay(player, options) {
3474
3869
  var originalPlay = player.play;
3475
3870
 
3476
- player.play = function ()
3477
- /* arguments */
3478
- {
3871
+ player.play = function () {
3479
3872
  var result = originalPlay.apply(player, arguments);
3480
3873
 
3481
3874
  if (result && typeof result["catch"] !== 'undefined') {
@@ -3507,16 +3900,12 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3507
3900
  var intendingToPlay = false;
3508
3901
  var intendingToPause = false;
3509
3902
 
3510
- player.play = function ()
3511
- /* arguments */
3512
- {
3903
+ player.play = function () {
3513
3904
  player.intendToPlay();
3514
3905
  return originalPlay.apply(player, arguments);
3515
3906
  };
3516
3907
 
3517
- player.pause = function ()
3518
- /* arguments */
3519
- {
3908
+ player.pause = function () {
3520
3909
  player.intendToPause();
3521
3910
  return originalPause.apply(player, arguments);
3522
3911
  };
@@ -3565,9 +3954,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3565
3954
  _hooks = newHooks;
3566
3955
  };
3567
3956
 
3568
- player.play = function ()
3569
- /* args */
3570
- {
3957
+ player.play = function () {
3571
3958
  var args = arguments;
3572
3959
  player.trigger('beforeplay');
3573
3960
  player.intendToPlay();
@@ -3874,9 +4261,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3874
4261
 
3875
4262
  player.one('dispose', cancelFadeVolume);
3876
4263
 
3877
- function volume()
3878
- /* arguments */
3879
- {
4264
+ function volume() {
3880
4265
  return originalVolume.apply(player, arguments);
3881
4266
  }
3882
4267
 
@@ -3917,9 +4302,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3917
4302
  var loadWaiting = function loadWaiting(player) {
3918
4303
  var originalFadeVolume = player.fadeVolume;
3919
4304
 
3920
- player.fadeVolume = function ()
3921
- /* args */
3922
- {
4305
+ player.fadeVolume = function () {
3923
4306
  var args = arguments;
3924
4307
  return Promise.all([this.loadedPromise]).then(function () {
3925
4308
  return originalFadeVolume.apply(player, args);
@@ -3927,9 +4310,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
3927
4310
  };
3928
4311
  };
3929
4312
 
3930
- var Settings =
3931
- /*#__PURE__*/
3932
- function () {
4313
+ var Settings = /*#__PURE__*/function () {
3933
4314
  function Settings() {
3934
4315
  _classCallCheck(this, Settings);
3935
4316
 
@@ -4321,16 +4702,6 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4321
4702
  AudioPlayer.rewindMethod = rewindMethod;
4322
4703
  AudioPlayer.pauseInBackground = pauseInBackground;
4323
4704
 
4324
- function _arrayLikeToArray(arr, len) {
4325
- if (len == null || len > arr.length) len = arr.length;
4326
-
4327
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
4328
- arr2[i] = arr[i];
4329
- }
4330
-
4331
- return arr2;
4332
- }
4333
-
4334
4705
  function _arrayWithoutHoles(arr) {
4335
4706
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
4336
4707
  }
@@ -4339,15 +4710,6 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4339
4710
  if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
4340
4711
  }
4341
4712
 
4342
- function _unsupportedIterableToArray(o, minLen) {
4343
- if (!o) return;
4344
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
4345
- var n = Object.prototype.toString.call(o).slice(8, -1);
4346
- if (n === "Object" && o.constructor) n = o.constructor.name;
4347
- if (n === "Map" || n === "Set") return Array.from(n);
4348
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
4349
- }
4350
-
4351
4713
  function _nonIterableSpread() {
4352
4714
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
4353
4715
  }
@@ -4795,9 +5157,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
4795
5157
  * Media pool class handles the pool of Videojs media players
4796
5158
  */
4797
5159
 
4798
- var MediaPool =
4799
- /*#__PURE__*/
4800
- function () {
5160
+ var MediaPool = /*#__PURE__*/function () {
4801
5161
  function MediaPool() {
4802
5162
  var _this$mediaFactory_;
4803
5163
 
@@ -5362,6 +5722,8 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
5362
5722
  };
5363
5723
  }
5364
5724
 
5725
+ var consent = Consent.create();
5726
+
5365
5727
  /**
5366
5728
  * Mute feature settings for background media (ATMO and background videos)
5367
5729
  *
@@ -5944,6 +6306,19 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
5944
6306
  };
5945
6307
  return {
5946
6308
  repository: [],
6309
+ initializers: {},
6310
+ registerInitializer: function registerInitializer(name, fn) {
6311
+ this.initializers[name] = fn;
6312
+ },
6313
+ invokeInitializers: function invokeInitializers(pages) {
6314
+ var _this = this;
6315
+
6316
+ _.each(pages, function (page) {
6317
+ if (_this.initializers[page.template]) {
6318
+ _this.initializers[page.template](page.configuration);
6319
+ }
6320
+ });
6321
+ },
5947
6322
  register: function register(name, pageType) {
5948
6323
  var constructor = function constructor() {};
5949
6324
 
@@ -8830,6 +9205,29 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
8830
9205
  });
8831
9206
  })($);
8832
9207
 
9208
+ $.widget('pageflow.thirdPartyEmbedConsent', {
9209
+ _create: function _create() {
9210
+ var element = this.element;
9211
+ var vendorName = this.element.find('[data-consent-vendor]').data('consentVendor');
9212
+
9213
+ if (!vendorName) {
9214
+ return;
9215
+ }
9216
+
9217
+ consent.requireAccepted(vendorName).then(function (result) {
9218
+ if (result === 'fulfilled') {
9219
+ element.addClass('consent_given');
9220
+ }
9221
+ });
9222
+
9223
+ this._on(this.element, {
9224
+ 'click .third_party_embed_opt_in-button': function clickThird_party_embed_opt_inButton() {
9225
+ consent.accept(vendorName);
9226
+ }
9227
+ });
9228
+ }
9229
+ });
9230
+
8833
9231
  (function ($) {
8834
9232
  $.widget('pageflow.topButton', {
8835
9233
  _create: function _create() {
@@ -9007,11 +9405,13 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9007
9405
  });
9008
9406
  $('.overview').overview();
9009
9407
  $('.multimedia_alert').multimediaAlert();
9408
+ pageType.invokeInitializers(state$1.pages);
9010
9409
  widgetTypes.enhance(body);
9011
9410
  delayedStart.perform();
9012
9411
  phoneLandscapeFullscreen();
9013
9412
  }
9014
9413
  });
9414
+ consent.closeVendorRegistration();
9015
9415
  });
9016
9416
  links.setup();
9017
9417
  FocusOutline.setup(body);
@@ -9117,9 +9517,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9117
9517
  return videoPlayer && videoPlayer.paused();
9118
9518
  };
9119
9519
 
9120
- this.volume = function ()
9121
- /* arguments */
9122
- {
9520
+ this.volume = function () {
9123
9521
  if (!videoPlayer) {
9124
9522
  return 0;
9125
9523
  }
@@ -9136,9 +9534,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9136
9534
  };
9137
9535
 
9138
9536
  _.each(['play', 'playAndFadeIn', 'pause', 'fadeOutAndPause', 'prebuffer', 'src', 'on', 'load', 'currentTime', 'muted'], function (method) {
9139
- that[method] = function ()
9140
- /* args */
9141
- {
9537
+ that[method] = function () {
9142
9538
  var args = arguments;
9143
9539
 
9144
9540
  if (!videoPlayer) {
@@ -9193,6 +9589,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9193
9589
  exports.Audio = Audio;
9194
9590
  exports.AudioPlayer = AudioPlayer;
9195
9591
  exports.ChapterFilter = ChapterFilter;
9592
+ exports.Consent = Consent;
9196
9593
  exports.DelayedStart = DelayedStart;
9197
9594
  exports.DomOrderScrollNavigator = DomOrderScrollNavigator;
9198
9595
  exports.EntryData = EntryData;
@@ -9220,6 +9617,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9220
9617
  exports.blankSources = blankSources;
9221
9618
  exports.browser = browser;
9222
9619
  exports.commonPageCssClasses = commonPageCssClasses;
9620
+ exports.consent = consent;
9223
9621
  exports.cookieNotice = cookieNotice;
9224
9622
  exports.cookies = cookies;
9225
9623
  exports.debugMode = debugMode;
@@ -9246,6 +9644,7 @@ this.pageflow_paged.frontend = (function (exports, jqueryUi, $, Backbone, _, Vid
9246
9644
  exports.preload = preload;
9247
9645
  exports.ready = ready;
9248
9646
  exports.readyDeferred = readyDeferred;
9647
+ exports.setItemCookieString = setItemCookieString;
9249
9648
  exports.settings = settings;
9250
9649
  exports.theme = theme;
9251
9650
  exports.videoHelpers = videoHelpers;