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
@@ -1,24 +1,9 @@
1
1
  import React, { useReducer, useMemo, useCallback, createContext as createContext$1, useContext } from 'react';
2
+ import I18n from 'i18n-js';
2
3
  import { createContext, useContextSelector } from 'use-context-selector';
3
4
  import { createSelectorCreator, defaultMemoize, createSelector } from 'reselect';
4
- import I18n from 'i18n-js';
5
5
  import slugify from 'slugify';
6
6
 
7
- function _defineProperty(obj, key, value) {
8
- if (key in obj) {
9
- Object.defineProperty(obj, key, {
10
- value: value,
11
- enumerable: true,
12
- configurable: true,
13
- writable: true
14
- });
15
- } else {
16
- obj[key] = value;
17
- }
18
-
19
- return obj;
20
- }
21
-
22
7
  function _arrayWithHoles(arr) {
23
8
  if (Array.isArray(arr)) return arr;
24
9
  }
@@ -77,6 +62,21 @@ function _slicedToArray(arr, i) {
77
62
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
78
63
  }
79
64
 
65
+ function _defineProperty(obj, key, value) {
66
+ if (key in obj) {
67
+ Object.defineProperty(obj, key, {
68
+ value: value,
69
+ enumerable: true,
70
+ configurable: true,
71
+ writable: true
72
+ });
73
+ } else {
74
+ obj[key] = value;
75
+ }
76
+
77
+ return obj;
78
+ }
79
+
80
80
  function ownKeys(object, enumerableOnly) {
81
81
  var keys = Object.keys(object);
82
82
 
@@ -266,12 +266,9 @@ function EntryStateProvider(_ref) {
266
266
  dispatch: dispatch
267
267
  };
268
268
  }, [collections, dispatch, seed]);
269
- return (
270
- /*#__PURE__*/
271
- React.createElement(Context.Provider, {
272
- value: value
273
- }, children)
274
- );
269
+ return /*#__PURE__*/React.createElement(Context.Provider, {
270
+ value: value
271
+ }, children);
275
272
  }
276
273
 
277
274
  function useEntryState() {
@@ -307,6 +304,25 @@ function useEntryStateCollectionItems(collectionName, filter) {
307
304
  });
308
305
  }
309
306
 
307
+ /**
308
+ * Returns data generated by a Ruby lambda registered server
309
+ * side via `config.additional_frontend_seed_data.register`.
310
+ *
311
+ * @example
312
+ *
313
+ * const data = useAdditionalSeedData('someSeed');
314
+ */
315
+
316
+ function useAdditionalSeedData(name) {
317
+ var config = useEntryStateConfig();
318
+
319
+ if (!config.additionalSeedData[name]) {
320
+ throw new Error("Could not find additional seed data with name '".concat(name, "'."));
321
+ }
322
+
323
+ return config.additionalSeedData[name];
324
+ }
325
+
310
326
  /**
311
327
  * Returns a nested data structure representing the metadata of the entry.
312
328
  *
@@ -385,10 +401,10 @@ var EmailIcon = (function (_ref) {
385
401
  var _ref$styles = _ref.styles,
386
402
  props = _objectWithoutProperties(_ref, ["styles"]);
387
403
 
388
- return React.createElement("svg", _extends({
404
+ return /*#__PURE__*/React.createElement("svg", _extends({
389
405
  xmlns: "http://www.w3.org/2000/svg",
390
406
  viewBox: "0 0 612 612"
391
- }, props), React.createElement("path", {
407
+ }, props), /*#__PURE__*/React.createElement("path", {
392
408
  d: "M573.75 57.375H38.25C17.136 57.375 0 74.511 0 95.625v420.75c0 21.133 17.136 38.25 38.25 38.25h535.5c21.133 0 38.25-17.117 38.25-38.25V95.625c0-21.114-17.117-38.25-38.25-38.25zM554.625 497.25H57.375V204.657l224.03 187.999c7.134 5.967 15.874 8.97 24.595 8.97 8.74 0 17.461-3.003 24.595-8.97l224.03-187.999V497.25zm0-367.487L306 338.379 57.375 129.763V114.75h497.25v15.013z"
393
409
  }));
394
410
  });
@@ -414,10 +430,10 @@ var FacebookIcon = (function (_ref) {
414
430
  var _ref$styles = _ref.styles,
415
431
  props = _objectWithoutProperties(_ref, ["styles"]);
416
432
 
417
- return React.createElement("svg", _extends$1({
433
+ return /*#__PURE__*/React.createElement("svg", _extends$1({
418
434
  xmlns: "http://www.w3.org/2000/svg",
419
435
  viewBox: "0 0 430.113 430.114"
420
- }, props), React.createElement("path", {
436
+ }, props), /*#__PURE__*/React.createElement("path", {
421
437
  d: "M158.081 83.3v59.218h-43.385v72.412h43.385v215.183h89.122V214.936h59.805s5.601-34.721 8.316-72.685H247.54V92.74c0-7.4 9.717-17.354 19.321-17.354h48.557V.001h-66.021C155.878-.004 158.081 72.48 158.081 83.3z"
422
438
  }));
423
439
  });
@@ -443,10 +459,10 @@ var LinkedInIcon = (function (_ref) {
443
459
  var _ref$styles = _ref.styles,
444
460
  props = _objectWithoutProperties(_ref, ["styles"]);
445
461
 
446
- return React.createElement("svg", _extends$2({
462
+ return /*#__PURE__*/React.createElement("svg", _extends$2({
447
463
  xmlns: "http://www.w3.org/2000/svg",
448
464
  viewBox: "0 0 430.117 430.117"
449
- }, props), React.createElement("path", {
465
+ }, props), /*#__PURE__*/React.createElement("path", {
450
466
  d: "M430.117 261.543V420.56h-92.188V272.193c0-37.271-13.334-62.707-46.703-62.707-25.473 0-40.632 17.142-47.301 33.724-2.432 5.928-3.058 14.179-3.058 22.477V420.56h-92.219s1.242-251.285 0-277.32h92.21v39.309c-.187.294-.43.611-.606.896h.606v-.896c12.251-18.869 34.13-45.824 83.102-45.824 60.673-.001 106.157 39.636 106.157 124.818zM52.183 9.558C20.635 9.558 0 30.251 0 57.463c0 26.619 20.038 47.94 50.959 47.94h.616c32.159 0 52.159-21.317 52.159-47.94-.606-27.212-20-47.905-51.551-47.905zM5.477 420.56h92.184V143.24H5.477v277.32z"
451
467
  }));
452
468
  });
@@ -472,10 +488,10 @@ var TelegramIcon = (function (_ref) {
472
488
  var _ref$styles = _ref.styles,
473
489
  props = _objectWithoutProperties(_ref, ["styles"]);
474
490
 
475
- return React.createElement("svg", _extends$3({
491
+ return /*#__PURE__*/React.createElement("svg", _extends$3({
476
492
  xmlns: "http://www.w3.org/2000/svg",
477
493
  viewBox: "0 0 512.004 512.004"
478
- }, props), React.createElement("path", {
494
+ }, props), /*#__PURE__*/React.createElement("path", {
479
495
  d: "M508.194 20.517c-4.43-4.96-11.42-6.29-17.21-3.76l-482 211a15.01 15.01 0 00-8.98 13.41 15.005 15.005 0 008.38 13.79l115.09 56.6 28.68 172.06c.93 6.53 6.06 11.78 12.74 12.73 4.8.69 9.57-1 12.87-4.4l90.86-90.86 129.66 92.62a15.02 15.02 0 0014.24 1.74 15.01 15.01 0 009.19-11.01l90-451c.89-4.47-.26-9.26-3.52-12.92zm-372.84 263.45l-84.75-41.68 334.82-146.57-250.07 188.25zm46.94 44.59l-13.95 69.75-15.05-90.3 183.97-138.49-150.88 151.39c-2.12 2.12-3.53 4.88-4.09 7.65zm9.13 107.3l15.74-78.67 36.71 26.22-52.45 52.45zm205.41 19.94l-176.73-126.23 252.47-253.31-75.74 379.54z"
480
496
  }));
481
497
  });
@@ -501,10 +517,10 @@ var TwitterIcon = (function (_ref) {
501
517
  var _ref$styles = _ref.styles,
502
518
  props = _objectWithoutProperties(_ref, ["styles"]);
503
519
 
504
- return React.createElement("svg", _extends$4({
520
+ return /*#__PURE__*/React.createElement("svg", _extends$4({
505
521
  xmlns: "http://www.w3.org/2000/svg",
506
522
  viewBox: "0 0 612 612"
507
- }, props), React.createElement("path", {
523
+ }, props), /*#__PURE__*/React.createElement("path", {
508
524
  d: "M612 116.258a250.714 250.714 0 01-72.088 19.772c25.929-15.527 45.777-40.155 55.184-69.411-24.322 14.379-51.169 24.82-79.775 30.48-22.907-24.437-55.49-39.658-91.63-39.658-69.334 0-125.551 56.217-125.551 125.513 0 9.828 1.109 19.427 3.251 28.606-104.326-5.24-196.835-55.223-258.75-131.174-10.823 18.51-16.98 40.078-16.98 63.101 0 43.559 22.181 81.993 55.835 104.479a125.556 125.556 0 01-56.867-15.756v1.568c0 60.806 43.291 111.554 100.693 123.104-10.517 2.83-21.607 4.398-33.08 4.398-8.107 0-15.947-.803-23.634-2.333 15.985 49.907 62.336 86.199 117.253 87.194-42.947 33.654-97.099 53.655-155.916 53.655-10.134 0-20.116-.612-29.944-1.721 55.567 35.681 121.536 56.485 192.438 56.485 230.948 0 357.188-191.291 357.188-357.188l-.421-16.253c24.666-17.593 46.005-39.697 62.794-64.861z"
509
525
  }));
510
526
  });
@@ -530,10 +546,10 @@ var WhatsAppIcon = (function (_ref) {
530
546
  var _ref$styles = _ref.styles,
531
547
  props = _objectWithoutProperties(_ref, ["styles"]);
532
548
 
533
- return React.createElement("svg", _extends$5({
549
+ return /*#__PURE__*/React.createElement("svg", _extends$5({
534
550
  xmlns: "http://www.w3.org/2000/svg",
535
551
  viewBox: "0 0 90 90"
536
- }, props), React.createElement("path", {
552
+ }, props), /*#__PURE__*/React.createElement("path", {
537
553
  d: "M90 43.841c0 24.213-19.779 43.841-44.182 43.841a44.256 44.256 0 01-21.357-5.455L0 90l7.975-23.522a43.38 43.38 0 01-6.34-22.637C1.635 19.628 21.416 0 45.818 0 70.223 0 90 19.628 90 43.841zM45.818 6.982c-20.484 0-37.146 16.535-37.146 36.859 0 8.065 2.629 15.534 7.076 21.61L11.107 79.14l14.275-4.537A37.122 37.122 0 0045.819 80.7c20.481 0 37.146-16.533 37.146-36.857S66.301 6.982 45.818 6.982zm22.311 46.956c-.273-.447-.994-.717-2.076-1.254-1.084-.537-6.41-3.138-7.4-3.495-.993-.358-1.717-.538-2.438.537-.721 1.076-2.797 3.495-3.43 4.212-.632.719-1.263.809-2.347.271-1.082-.537-4.571-1.673-8.708-5.333-3.219-2.848-5.393-6.364-6.025-7.441-.631-1.075-.066-1.656.475-2.191.488-.482 1.084-1.255 1.625-1.882.543-.628.723-1.075 1.082-1.793.363-.717.182-1.344-.09-1.883-.27-.537-2.438-5.825-3.34-7.977-.902-2.15-1.803-1.792-2.436-1.792-.631 0-1.354-.09-2.076-.09s-1.896.269-2.889 1.344c-.992 1.076-3.789 3.676-3.789 8.963 0 5.288 3.879 10.397 4.422 11.113.541.716 7.49 11.92 18.5 16.223C58.2 65.771 58.2 64.336 60.186 64.156c1.984-.179 6.406-2.599 7.312-5.107.9-2.512.9-4.663.631-5.111z"
538
554
  }));
539
555
  });
@@ -564,41 +580,41 @@ function useShareProviders(_ref) {
564
580
  var isPhonePlatform = _ref.isPhonePlatform;
565
581
  var config = useEntryStateConfig();
566
582
  var entryMetadata = useEntryMetadata();
567
- var shareProviders = entryMetadata ? entryMetadata.shareProviders : {};
583
+ var shareProviders = (entryMetadata === null || entryMetadata === void 0 ? void 0 : entryMetadata.shareProviders) || {};
568
584
  var urlTemplates = config.shareUrlTemplates;
569
- var sharing = {
570
- email: {
571
- icon: EmailIcon,
572
- name: 'Mail',
573
- url: urlTemplates.email
574
- },
575
- facebook: {
576
- icon: FacebookIcon,
577
- name: 'Facebook',
578
- url: urlTemplates.facebook
579
- },
580
- linked_in: {
581
- icon: LinkedInIcon,
582
- name: 'LinkedIn',
583
- url: urlTemplates.linked_in
584
- },
585
- telegram: {
586
- icon: TelegramIcon,
587
- name: 'Telegram',
588
- url: urlTemplates.telegram
589
- },
590
- twitter: {
591
- icon: TwitterIcon,
592
- name: 'Twitter',
593
- url: urlTemplates.twitter
594
- },
595
- whats_app: {
596
- icon: WhatsAppIcon,
597
- name: 'WhatsApp',
598
- url: urlTemplates.whats_app
599
- }
600
- };
601
585
  return useMemo(function () {
586
+ var sharing = {
587
+ email: {
588
+ icon: EmailIcon,
589
+ name: 'Mail',
590
+ url: urlTemplates.email
591
+ },
592
+ facebook: {
593
+ icon: FacebookIcon,
594
+ name: 'Facebook',
595
+ url: urlTemplates.facebook
596
+ },
597
+ linked_in: {
598
+ icon: LinkedInIcon,
599
+ name: 'LinkedIn',
600
+ url: urlTemplates.linked_in
601
+ },
602
+ telegram: {
603
+ icon: TelegramIcon,
604
+ name: 'Telegram',
605
+ url: urlTemplates.telegram
606
+ },
607
+ twitter: {
608
+ icon: TwitterIcon,
609
+ name: 'Twitter',
610
+ url: urlTemplates.twitter
611
+ },
612
+ whats_app: {
613
+ icon: WhatsAppIcon,
614
+ name: 'WhatsApp',
615
+ url: urlTemplates.whats_app
616
+ }
617
+ };
602
618
  return activeShareProviders(shareProviders, isPhonePlatform).map(function (provider) {
603
619
  var config = sharing[provider];
604
620
  return {
@@ -607,7 +623,7 @@ function useShareProviders(_ref) {
607
623
  url: config.url
608
624
  };
609
625
  });
610
- }, [shareProviders, isPhonePlatform]);
626
+ }, [shareProviders, isPhonePlatform, urlTemplates]);
611
627
  }
612
628
 
613
629
  function activeShareProviders(shareProvidersConfig, isPhonePlatform) {
@@ -648,8 +664,8 @@ function useShareUrl() {
648
664
  }
649
665
 
650
666
  /**
651
- * Returns a nested data structure representing the chapters, sections
652
- * and content elements of the entry.
667
+ * Returns a nested data structure representing the chapters and sections
668
+ * of the entry.
653
669
  *
654
670
  * @private
655
671
  *
@@ -670,6 +686,9 @@ function useShareUrl() {
670
686
  * sectionIndex: 0,
671
687
  * transition: 'scroll',
672
688
  *
689
+ * // references to parent chapter
690
+ * chapter: { ... },
691
+ *
673
692
  * // references to adjacent section objects
674
693
  * previousSection: { ... },
675
694
  * nextSection: { ... },
@@ -692,14 +711,64 @@ function useEntryStructure() {
692
711
  section.nextSection = linkedSections[index + 1];
693
712
  });
694
713
  return chapters.map(function (chapter) {
714
+ var chapterSections = linkedSections.filter(function (item) {
715
+ return item.chapterId === chapter.id;
716
+ });
717
+ chapterSections.forEach(function (section) {
718
+ return section.chapter = chapter;
719
+ });
695
720
  return _objectSpread2(_objectSpread2({}, chapter), {}, {
696
- sections: linkedSections.filter(function (item) {
697
- return item.chapterId === chapter.id;
698
- })
721
+ sections: chapterSections
699
722
  });
700
723
  });
701
724
  }, [chapters, sections]);
702
725
  }
726
+ /**
727
+ * Returns an array of sections each with a chapter property containing
728
+ * data about the parent chapter.
729
+ *
730
+ * @private
731
+ *
732
+ * @example
733
+ *
734
+ * const sections = useSectionsWithChapter();
735
+ * sections // =>
736
+ * [
737
+ * {
738
+ * id: 1,
739
+ * permaId: 101,
740
+ * chapterId: 3,
741
+ * transition: 'scroll',
742
+ * chapter: {
743
+ * id: 3,
744
+ * permaId: 5,
745
+ * title: 'Chapter 1',
746
+ * summary: 'An introductory chapter',
747
+ * chapterSlug: 'chapter-1'
748
+ * },
749
+ * }
750
+ * ]
751
+ */
752
+
753
+ function useSectionsWithChapter() {
754
+ var chapters = useChapters();
755
+ var sections = useEntryStateCollectionItems('sections');
756
+ var chaptersById = useMemo(function () {
757
+ return chapters.reduce(function (result, chapter) {
758
+ result[chapter.id] = chapter;
759
+ return result;
760
+ }, {});
761
+ }, [chapters]);
762
+ return useMemo(function () {
763
+ return sections.map(function (section, sectionIndex) {
764
+ return _objectSpread2(_objectSpread2({
765
+ sectionIndex: sectionIndex
766
+ }, sectionData(section)), {}, {
767
+ chapter: chaptersById[section.chapterId]
768
+ });
769
+ });
770
+ }, [chaptersById, sections]);
771
+ }
703
772
  /**
704
773
  * Returns a nested data structure representing the content elements
705
774
  * of section.
@@ -753,34 +822,36 @@ function useSectionContentElements(_ref2) {
753
822
  }
754
823
  function useChapters() {
755
824
  var chapters = useEntryStateCollectionItems('chapters');
756
- var chapterSlugs = {};
757
- return chapters.map(function (chapter) {
758
- var chapterSlug = chapter.configuration.title;
759
-
760
- if (chapterSlug) {
761
- chapterSlug = slugify(chapterSlug, {
762
- lower: true,
763
- locale: 'de',
764
- strict: true
765
- });
825
+ return useMemo(function () {
826
+ var chapterSlugs = {};
827
+ return chapters.map(function (chapter) {
828
+ var chapterSlug = chapter.configuration.title;
766
829
 
767
- if (chapterSlugs[chapterSlug]) {
768
- chapterSlug = chapterSlug + '-' + chapter.permaId; //append permaId if chapter reference is not unique
769
- }
830
+ if (chapterSlug) {
831
+ chapterSlug = slugify(chapterSlug, {
832
+ lower: true,
833
+ locale: 'de',
834
+ strict: true
835
+ });
770
836
 
771
- chapterSlugs[chapterSlug] = chapter;
772
- } else {
773
- chapterSlug = 'chapter-' + chapter.permaId;
774
- }
837
+ if (chapterSlugs[chapterSlug]) {
838
+ chapterSlug = chapterSlug + '-' + chapter.permaId; //append permaId if chapter reference is not unique
839
+ }
775
840
 
776
- return {
777
- id: chapter.id,
778
- permaId: chapter.permaId,
779
- title: chapter.configuration.title,
780
- summary: chapter.configuration.summary,
781
- chapterSlug: chapterSlug
782
- };
783
- });
841
+ chapterSlugs[chapterSlug] = chapter;
842
+ } else {
843
+ chapterSlug = 'chapter-' + chapter.permaId;
844
+ }
845
+
846
+ return {
847
+ id: chapter.id,
848
+ permaId: chapter.permaId,
849
+ title: chapter.configuration.title,
850
+ summary: chapter.configuration.summary,
851
+ chapterSlug: chapterSlug
852
+ };
853
+ });
854
+ }, [chapters]);
784
855
  }
785
856
 
786
857
  function extendFile(collectionName, file, config) {
@@ -830,7 +901,9 @@ function getFileUrl(collectionName, file, quality, urlTemplates) {
830
901
  var template = templates[quality];
831
902
 
832
903
  if (template) {
833
- return template.replace(':id_partition', idPartition(file.id)).replace(':basename', file.basename);
904
+ return template.replace(':id_partition', idPartition(file.id)).replace(':basename', file.basename).replace(':pageflow_hls_qualities', function () {
905
+ return hlsQualities(file);
906
+ });
834
907
  }
835
908
  }
836
909
 
@@ -848,6 +921,12 @@ function pad(string, size) {
848
921
  return (Array(size).fill(0).join('') + string).slice(-size);
849
922
  }
850
923
 
924
+ function hlsQualities(file) {
925
+ return ['low', 'medium', 'high', 'fullhd', '4k'].filter(function (quality) {
926
+ return file.variants.includes(quality);
927
+ }).join(',');
928
+ }
929
+
851
930
  /**
852
931
  * Look up a file by its collection and perma id.
853
932
  *
@@ -891,6 +970,11 @@ function useNestedFiles(_ref) {
891
970
  });
892
971
  }
893
972
 
973
+ function getFileUrlTemplateHost(seed, collectionName, variant) {
974
+ var hlsUrlTemplate = seed.config.fileUrlTemplates[collectionName][variant];
975
+ return hlsUrlTemplate.split('//')[1].split('/')[0];
976
+ }
977
+
894
978
  /**
895
979
  * Returns a string (comma-separated list) of copyrights of
896
980
  * all images used in the entry.
@@ -1016,6 +1100,16 @@ function useTheme() {
1016
1100
  return config.theme;
1017
1101
  }
1018
1102
 
1103
+ function useWidget(_ref) {
1104
+ var role = _ref.role;
1105
+ var widgets = useEntryStateCollectionItems('widgets');
1106
+ return useMemo(function () {
1107
+ return widgets.find(function (widget) {
1108
+ return widget.role === role && widget.typeName;
1109
+ });
1110
+ }, [role, widgets]);
1111
+ }
1112
+
1019
1113
  function updateContentElementConfiguration(_ref) {
1020
1114
  var dispatch = _ref.dispatch,
1021
1115
  permaId = _ref.permaId,
@@ -1043,12 +1137,9 @@ function LocaleProvider(_ref2) {
1043
1137
  var _ref3 = useEntryMetadata() || {},
1044
1138
  locale = _ref3.locale;
1045
1139
 
1046
- return (
1047
- /*#__PURE__*/
1048
- React.createElement(LocaleContext.Provider, {
1049
- value: locale
1050
- }, children)
1051
- );
1140
+ return /*#__PURE__*/React.createElement(LocaleContext.Provider, {
1141
+ value: locale
1142
+ }, children);
1052
1143
  }
1053
1144
  function useLocale() {
1054
1145
  return useContext(LocaleContext);
@@ -1089,4 +1180,6 @@ function useI18n() {
1089
1180
  };
1090
1181
  }
1091
1182
 
1092
- export { EntryStateProvider as E, LocaleProvider as L, _slicedToArray as _, _defineProperty as a, _objectWithoutProperties as b, useFileRights as c, useLegalInfo as d, useCredits as e, useShareProviders as f, useShareUrl as g, useTheme as h, useChapters as i, useEntryStructure as j, _objectSpread2 as k, useEntryMetadata as l, useNestedFiles as m, useFile as n, useSectionContentElements as o, _toConsumableArray as p, useAvailableQualities as q, useEntryStateDispatch as r, useSection as s, setupI18n as t, useI18n as u, useLocale as v, updateContentElementConfiguration as w };
1183
+ var PhonePlatformContext = React.createContext(false);
1184
+
1185
+ export { updateContentElementConfiguration as A, EntryStateProvider as E, LocaleProvider as L, PhonePlatformContext as P, _objectWithoutProperties as _, _objectSpread2 as a, _defineProperty as b, _slicedToArray as c, useLocale as d, useLegalInfo as e, useTheme as f, useEntryMetadata as g, useNestedFiles as h, useFile as i, useSectionContentElements as j, useSectionsWithChapter as k, useEntryStructure as l, useWidget as m, getFileUrlTemplateHost as n, _toConsumableArray as o, useAvailableQualities as p, useEntryStateDispatch as q, useSection as r, setupI18n as s, useAdditionalSeedData as t, useI18n as u, useChapters as v, useCredits as w, useFileRights as x, useShareProviders as y, useShareUrl as z };