pageflow 15.6.1 → 15.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +253 -11
  3. data/README.md +1 -2
  4. data/admins/pageflow/entry.rb +28 -57
  5. data/admins/pageflow/membership.rb +5 -1
  6. data/admins/pageflow/user.rb +1 -3
  7. data/app/assets/images/pageflow/admin/icons/buttons/editor.svg +2 -0
  8. data/app/assets/images/pageflow/admin/icons/buttons/preview.svg +2 -0
  9. data/app/assets/images/pageflow/admin/icons/buttons/show_public.svg +2 -0
  10. data/app/assets/images/pageflow/admin/icons/delete.svg +9 -0
  11. data/app/assets/images/pageflow/admin/icons/done.svg +6 -0
  12. data/app/assets/images/pageflow/admin/icons/edit.svg +7 -0
  13. data/app/assets/images/pageflow/admin/icons/editor.svg +2 -0
  14. data/app/assets/images/pageflow/admin/icons/folder.svg +8 -0
  15. data/app/assets/images/pageflow/admin/icons/folder_active.svg +8 -0
  16. data/app/assets/images/pageflow/admin/icons/info.svg +3 -0
  17. data/app/assets/images/pageflow/admin/icons/new.svg +5 -0
  18. data/app/assets/images/pageflow/admin/icons/preview.svg +2 -0
  19. data/app/assets/images/pageflow/admin/icons/published.svg +2 -0
  20. data/app/assets/images/pageflow/admin/icons/published_with_password.svg +2 -0
  21. data/app/assets/images/pageflow/admin/icons/show_public.svg +2 -0
  22. data/app/assets/images/pageflow/editor/blank_entry/logo.png +0 -0
  23. data/app/assets/images/pageflow/themes/default/embed_opt_in.svg +3 -0
  24. data/app/assets/images/pageflow/themes/default/embed_opt_out_info.svg +16 -0
  25. data/app/assets/javascripts/pageflow/admin/entries.js +9 -57
  26. data/app/assets/javascripts/pageflow/dist/editor.js +11890 -0
  27. data/app/assets/javascripts/pageflow/dist/frontend.js +5800 -0
  28. data/app/assets/javascripts/pageflow/dist/react-client.js +22 -0
  29. data/app/assets/javascripts/pageflow/dist/react-server.js +19 -0
  30. data/app/assets/javascripts/pageflow/dist/ui.js +127 -10
  31. data/app/assets/stylesheets/pageflow/admin/active_admin_patches.scss +18 -16
  32. data/app/assets/stylesheets/pageflow/admin/badge_list.scss +25 -35
  33. data/app/assets/stylesheets/pageflow/admin/columns.scss +13 -11
  34. data/app/assets/stylesheets/pageflow/admin/embed_code.scss +1 -4
  35. data/app/assets/stylesheets/pageflow/admin/entries/folders.scss +44 -19
  36. data/app/assets/stylesheets/pageflow/admin/entries.scss +15 -31
  37. data/app/assets/stylesheets/pageflow/admin/features.scss +3 -1
  38. data/app/assets/stylesheets/pageflow/admin/forms.scss +14 -12
  39. data/app/assets/stylesheets/pageflow/admin/hint.scss +8 -14
  40. data/app/assets/stylesheets/pageflow/admin/icon_button.scss +25 -14
  41. data/app/assets/stylesheets/pageflow/admin/icon_link.scss +31 -15
  42. data/app/assets/stylesheets/pageflow/admin/publication_state_indicator.scss +14 -7
  43. data/app/assets/stylesheets/pageflow/admin/status_tags.scss +5 -4
  44. data/app/assets/stylesheets/pageflow/admin/tabs_view.scss +36 -34
  45. data/app/assets/stylesheets/pageflow/admin/tooltip_bubble.scss +15 -11
  46. data/app/assets/stylesheets/pageflow/admin.scss +12 -0
  47. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +15 -61
  48. data/app/assets/stylesheets/pageflow/editor/base.scss +28 -13
  49. data/app/assets/stylesheets/pageflow/editor/blank_entry.scss +6 -6
  50. data/app/assets/stylesheets/pageflow/editor/change_theme.scss +28 -71
  51. data/app/assets/stylesheets/pageflow/editor/composables.scss +2 -2
  52. data/app/assets/stylesheets/pageflow/editor/confirm_encoding.scss +18 -36
  53. data/app/assets/stylesheets/pageflow/editor/confirm_upload.scss +12 -39
  54. data/app/assets/stylesheets/pageflow/editor/dialogs.scss +39 -12
  55. data/app/assets/stylesheets/pageflow/editor/disabled_atmo_indicator.scss +3 -3
  56. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +7 -10
  57. data/app/assets/stylesheets/pageflow/editor/emulation_mode_button.scss +3 -8
  58. data/app/assets/stylesheets/pageflow/editor/failures.scss +3 -3
  59. data/app/assets/stylesheets/pageflow/editor/file_import.scss +22 -38
  60. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +3 -7
  61. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +4 -24
  62. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +10 -11
  63. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -8
  64. data/app/assets/stylesheets/pageflow/editor/files.scss +7 -6
  65. data/app/assets/stylesheets/pageflow/editor/files_explorer.scss +13 -30
  66. data/app/assets/stylesheets/pageflow/editor/files_gallery.scss +15 -11
  67. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +6 -7
  68. data/app/assets/stylesheets/pageflow/editor/help.scss +19 -14
  69. data/app/assets/stylesheets/pageflow/editor/help_image.scss +1 -1
  70. data/app/assets/stylesheets/pageflow/editor/info_box.scss +19 -0
  71. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +7 -11
  72. data/app/assets/stylesheets/pageflow/editor/inputs/file_processing_state_display.scss +0 -2
  73. data/app/assets/stylesheets/pageflow/editor/inputs/reference.scss +7 -11
  74. data/app/assets/stylesheets/pageflow/editor/list.scss +13 -10
  75. data/app/assets/stylesheets/pageflow/editor/loading.scss +1 -1
  76. data/app/assets/stylesheets/pageflow/editor/locked.scss +9 -5
  77. data/app/assets/stylesheets/pageflow/editor/menu.scss +5 -5
  78. data/app/assets/stylesheets/pageflow/editor/notifications.scss +15 -14
  79. data/app/assets/stylesheets/pageflow/editor/other_entry_item.scss +7 -3
  80. data/app/assets/stylesheets/pageflow/editor/outline.scss +57 -19
  81. data/app/assets/stylesheets/pageflow/editor/page_links.scss +10 -8
  82. data/app/assets/stylesheets/pageflow/editor/page_selection.scss +2 -29
  83. data/app/assets/stylesheets/pageflow/editor/publish_entry.scss +5 -6
  84. data/app/assets/stylesheets/pageflow/editor/quotas.scss +2 -3
  85. data/app/assets/stylesheets/pageflow/editor/select_button.scss +12 -6
  86. data/app/assets/stylesheets/pageflow/editor/sidebar_footer.scss +1 -5
  87. data/app/assets/stylesheets/pageflow/editor/storyline_picker.scss +6 -2
  88. data/app/assets/stylesheets/pageflow/editor/text_tracks.scss +6 -22
  89. data/app/assets/stylesheets/pageflow/editor/widgets.scss +2 -2
  90. data/app/assets/stylesheets/pageflow/editor/wysihtml5.scss +35 -29
  91. data/app/assets/stylesheets/pageflow/mixins/background_icons.scss +3 -3
  92. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +50 -68
  93. data/app/assets/stylesheets/pageflow/themes/default/base.scss +2 -0
  94. data/app/assets/stylesheets/pageflow/themes/default/consent/bar.scss +156 -0
  95. data/app/assets/stylesheets/pageflow/themes/default/consent/vendor_list.scss +62 -0
  96. data/app/assets/stylesheets/pageflow/themes/default/consent.scss +2 -0
  97. data/app/assets/stylesheets/pageflow/themes/default/logo/alignment.scss +7 -0
  98. data/app/assets/stylesheets/pageflow/themes/default/page/shadow.scss +44 -0
  99. data/app/assets/stylesheets/pageflow/themes/default/third_party_embed_consent.scss +103 -0
  100. data/app/assets/stylesheets/pageflow/ui/forms.scss +79 -84
  101. data/app/assets/stylesheets/pageflow/ui/functions.scss +56 -0
  102. data/app/assets/stylesheets/pageflow/ui/input/check_box_group_input.scss +2 -3
  103. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +6 -6
  104. data/app/assets/stylesheets/pageflow/ui/input/extended_select_input.scss +63 -50
  105. data/app/assets/stylesheets/pageflow/ui/normalize/forms.scss +153 -0
  106. data/app/assets/stylesheets/pageflow/ui/normalize.scss +278 -0
  107. data/app/assets/stylesheets/pageflow/ui/properties.scss +44 -0
  108. data/app/assets/stylesheets/pageflow/ui/table_cells/delete_row_table_cell.scss +1 -1
  109. data/app/assets/stylesheets/pageflow/ui/table_view.scss +14 -18
  110. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -11
  111. data/app/assets/stylesheets/pageflow/ui/tooltip.scss +6 -8
  112. data/app/assets/stylesheets/pageflow/ui/validation_error_messages.scss +6 -0
  113. data/app/assets/stylesheets/pageflow/ui.scss +4 -0
  114. data/app/controllers/pageflow/edit_locks_controller.rb +3 -1
  115. data/app/helpers/pageflow/admin/entries_helper.rb +2 -12
  116. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  117. data/app/helpers/pageflow/entries_helper.rb +41 -2
  118. data/app/helpers/pageflow/file_background_images_helper.rb +1 -1
  119. data/app/helpers/pageflow/page_types_helper.rb +1 -1
  120. data/app/helpers/pageflow/themes_helper.rb +1 -1
  121. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -1
  122. data/app/jobs/pageflow/poll_zencoder_job.rb +1 -9
  123. data/app/models/pageflow/audio_file.rb +17 -0
  124. data/app/models/pageflow/audio_file_url_templates.rb +4 -1
  125. data/app/models/pageflow/customized_theme.rb +37 -0
  126. data/app/models/pageflow/draft_entry.rb +6 -59
  127. data/app/models/pageflow/entry.rb +8 -0
  128. data/app/models/pageflow/entry_at_revision.rb +68 -0
  129. data/app/models/pageflow/entry_role_query.rb +44 -24
  130. data/app/models/pageflow/image_file_css_background_image_urls.rb +8 -2
  131. data/app/models/pageflow/published_entry.rb +9 -56
  132. data/app/models/pageflow/theme_customization.rb +46 -0
  133. data/app/models/pageflow/theme_customization_file.rb +58 -0
  134. data/app/models/pageflow/video_file.rb +11 -1
  135. data/app/models/pageflow/video_file_url_templates.rb +1 -0
  136. data/app/policies/pageflow/entry_policy.rb +4 -0
  137. data/app/state_machines/pageflow/media_encoding_state_machine.rb +23 -4
  138. data/app/views/admin/entries/_form.html.erb +50 -0
  139. data/app/views/admin/entries/entry_type_name_input.html.erb +5 -0
  140. data/app/views/admin/features/_form.html.erb +1 -1
  141. data/app/views/admin/memberships/_form.html.erb +2 -3
  142. data/app/views/admin/users/_form.html.erb +1 -1
  143. data/app/views/admin/users/invitation.html.erb +2 -2
  144. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +10 -9
  145. data/app/views/components/pageflow/admin/members_tab.rb +5 -1
  146. data/app/views/components/pageflow/admin/revisions_tab.rb +13 -3
  147. data/app/views/components/pageflow/admin/timestamp.rb +20 -0
  148. data/app/views/components/pageflow/admin/user_account_badge_list.rb +5 -6
  149. data/app/views/pageflow/admin/entries/_cannot_add_user.html.erb +9 -5
  150. data/app/views/pageflow/admin/entries/_entry_type_name_input.html.erb +7 -0
  151. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +13 -0
  152. data/app/views/pageflow/editor/encoding_confirmations/_intro.html.erb +0 -0
  153. data/app/views/pageflow/editor/encoding_confirmations/check.json.jbuilder +14 -2
  154. data/config/initializers/paperclip.rb +16 -1
  155. data/config/locales/de.yml +24 -28
  156. data/config/locales/en.yml +19 -10
  157. data/db/migrate/20210528073122_create_pageflow_theme_customizations.rb +11 -0
  158. data/db/migrate/20210531090654_create_pageflow_theme_customization_files.rb +15 -0
  159. data/db/migrate/20210531102228_add_selected_file_ids_to_theme_customizations.rb +5 -0
  160. data/db/migrate/20211020085902_add_canonical_entry_url_prefix_to_themings.rb +5 -0
  161. data/db/migrate/20220503150010_add_peak_data_to_audio_files.rb +5 -0
  162. data/db/migrate/20220705084830_add_trailing_slash_in_canonical_urls_to_themings.rb +5 -0
  163. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +256 -124
  164. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +566 -167
  165. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +5 -5
  166. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +4 -4
  167. data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +38 -0
  168. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_in.html.erb +12 -0
  169. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_out_info.html.erb +10 -0
  170. data/entry_types/paged/config/initializers/features.rb +2 -0
  171. data/entry_types/paged/config/locales/new/video_contain.de.yml +7 -0
  172. data/entry_types/paged/config/locales/new/video_contain.en.yml +7 -0
  173. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  174. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +1 -0
  175. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +58 -0
  176. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +37 -3
  177. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +92 -6
  178. data/entry_types/scrolled/app/helpers/pageflow_scrolled/webpack_public_path_helper.rb +20 -0
  179. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +7 -0
  180. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +5 -2
  181. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +5 -1
  182. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +5 -4
  183. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +16 -0
  184. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +13 -2
  185. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_widget.json.jbuilder +2 -0
  186. data/entry_types/scrolled/config/locales/de.yml +1 -8
  187. data/entry_types/scrolled/config/locales/en.yml +1 -9
  188. data/entry_types/scrolled/config/locales/new/before_after_slider.de.yml +8 -0
  189. data/entry_types/scrolled/config/locales/new/before_after_slider.en.yml +8 -0
  190. data/entry_types/scrolled/config/locales/new/center_ragged.de.yml +8 -0
  191. data/entry_types/scrolled/config/locales/new/center_ragged.en.yml +9 -0
  192. data/entry_types/scrolled/config/locales/new/consent.de.yml +25 -0
  193. data/entry_types/scrolled/config/locales/new/consent.en.yml +24 -0
  194. data/entry_types/scrolled/config/locales/new/content_element_categories.de.yml +39 -0
  195. data/entry_types/scrolled/config/locales/new/content_element_categories.en.yml +39 -0
  196. data/entry_types/scrolled/config/locales/new/default_transition.de.yml +14 -0
  197. data/entry_types/scrolled/config/locales/new/default_transition.en.yml +14 -0
  198. data/entry_types/scrolled/config/locales/new/header_line_breaks.de.yml +28 -0
  199. data/entry_types/scrolled/config/locales/new/header_line_breaks.en.yml +27 -0
  200. data/entry_types/scrolled/config/locales/new/header_size.de.yml +17 -0
  201. data/entry_types/scrolled/config/locales/new/header_size.en.yml +17 -0
  202. data/entry_types/scrolled/config/locales/new/iframe_embed.de.yml +39 -0
  203. data/entry_types/scrolled/config/locales/new/iframe_embed.en.yml +39 -0
  204. data/entry_types/scrolled/config/locales/new/inline_loops.de.yml +26 -0
  205. data/entry_types/scrolled/config/locales/new/inline_loops.en.yml +26 -0
  206. data/entry_types/scrolled/config/locales/new/portrait_inline_image.de.yml +9 -0
  207. data/entry_types/scrolled/config/locales/new/portrait_inline_image.en.yml +9 -0
  208. data/entry_types/scrolled/config/locales/new/section_width.de.yml +10 -0
  209. data/entry_types/scrolled/config/locales/new/section_width.en.yml +10 -0
  210. data/entry_types/scrolled/config/locales/new/typography_variants.de.yml +7 -0
  211. data/entry_types/scrolled/config/locales/new/typography_variants.en.yml +7 -0
  212. data/entry_types/scrolled/config/locales/new/video_embed_poster.de.yml +8 -0
  213. data/entry_types/scrolled/config/locales/new/video_embed_poster.en.yml +8 -0
  214. data/entry_types/scrolled/config/locales/new/waveform_styles.de.yml +11 -0
  215. data/entry_types/scrolled/config/locales/new/waveform_styles.en.yml +12 -0
  216. data/entry_types/scrolled/config/locales/new/widgets.de.yml +6 -0
  217. data/entry_types/scrolled/config/locales/new/widgets.en.yml +6 -0
  218. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +29 -5
  219. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +8 -6
  220. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +37 -0
  221. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +57 -0
  222. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +49 -0
  223. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +8 -0
  224. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +42 -0
  225. data/entry_types/scrolled/lib/pageflow_scrolled.rb +17 -1
  226. data/entry_types/scrolled/package/contentElements-editor.js +323 -89
  227. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  228. data/entry_types/scrolled/package/contentElements-frontend.js +719 -529
  229. data/entry_types/scrolled/package/editor.js +459 -261
  230. data/entry_types/scrolled/package/frontend/{EditableText-7093fd0e.js → EditableInlineText.module-b9923660.js} +284 -362
  231. data/entry_types/scrolled/package/frontend/{i18n-4dc6c377.js → PhonePlatformContext-9fb97827.js} +199 -106
  232. data/entry_types/scrolled/package/frontend/{Viewer-e49e7807.js → Viewer-e2290ea0.js} +196 -79
  233. data/entry_types/scrolled/package/frontend/{Wavesurfer-0adf5667.js → Wavesurfer-7d9cf1b7.js} +16 -58
  234. data/entry_types/scrolled/package/frontend/{components-6a6793ca.js → components-6ab26015.js} +664 -671
  235. data/entry_types/scrolled/package/frontend/{getPrototypeOf-63c7c8e8.js → createSuper-d0f30da3.js} +34 -5
  236. data/entry_types/scrolled/package/frontend/index.css +1 -9
  237. data/entry_types/scrolled/package/frontend/index.js +1919 -2386
  238. data/entry_types/scrolled/package/frontend/{useBrowserFeature-91a4c29d.js → usePhonePlatform-2857c22b.js} +9 -8
  239. data/entry_types/scrolled/package/frontend-server.js +3 -6
  240. data/entry_types/scrolled/package/package.json +16 -8
  241. data/entry_types/scrolled/package/testHelpers.js +456 -0
  242. data/entry_types/scrolled/package/values/breakpoints.module.css +9 -0
  243. data/entry_types/scrolled/package/values/colors.module.css +5 -0
  244. data/entry_types/scrolled/package/widgets/defaultNavigation.css +9 -0
  245. data/entry_types/scrolled/package/widgets/defaultNavigation.js +612 -0
  246. data/entry_types/scrolled/spec/fixtures/image.svg +1 -0
  247. data/lib/pageflow/ability_mixin.rb +4 -0
  248. data/lib/pageflow/built_in_widget_type.rb +4 -0
  249. data/lib/pageflow/built_in_widget_types_plugin.rb +7 -0
  250. data/lib/pageflow/configuration.rb +34 -1
  251. data/lib/pageflow/entry_type.rb +11 -2
  252. data/lib/pageflow/entry_type_configuration.rb +2 -0
  253. data/lib/pageflow/file_type.rb +24 -0
  254. data/lib/pageflow/paperclip_processors/audio_waveform.rb +42 -0
  255. data/lib/pageflow/paperclip_processors/noop.rb +10 -0
  256. data/lib/pageflow/theme_customizations.rb +61 -0
  257. data/lib/pageflow/user_mixin.rb +6 -0
  258. data/lib/pageflow/version.rb +1 -1
  259. data/lib/pageflow.rb +9 -0
  260. data/package/config/jest/index.js +2 -1
  261. data/package/config/postcss/scaleFunctions.js +71 -0
  262. data/package/editor.js +95 -85
  263. data/package/frontend.js +521 -161
  264. data/package/package.json +5 -3
  265. data/package/testHelpers.js +26 -5
  266. data/package/ui.js +124 -11
  267. data/spec/factories/draft_entries.rb +19 -1
  268. data/spec/factories/entries.rb +4 -0
  269. data/spec/factories/published_entries.rb +6 -0
  270. data/spec/fixtures/audio.ogg +0 -0
  271. metadata +123 -15
  272. data/app/views/admin/entries/_not_allowed_to_see_entry_types.json.jbuilder +0 -2
  273. data/app/views/admin/entries/entry_types.json.jbuilder +0 -4
  274. data/package/config/jest/transformers/upwardBabel.js +0 -5
@@ -147,9 +147,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
147
147
  }).flatten().value();
148
148
  }
149
149
 
150
- var i18nUtils =
151
- /*#__PURE__*/
152
- Object.freeze({
150
+ var i18nUtils = /*#__PURE__*/Object.freeze({
153
151
  __proto__: null,
154
152
  attributeTranslationKeys: attributeTranslationKeys,
155
153
  attributeTranslation: attributeTranslation,
@@ -340,9 +338,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
340
338
  return ".".concat(classNames.replace(/ /g, '.'));
341
339
  }
342
340
 
343
- var cssModulesUtils =
344
- /*#__PURE__*/
345
- Object.freeze({
341
+ var cssModulesUtils = /*#__PURE__*/Object.freeze({
346
342
  __proto__: null,
347
343
  ui: ui,
348
344
  events: events,
@@ -359,6 +355,23 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
359
355
 
360
356
 
361
357
  BaseObject.extend = Backbone.Model.extend;
358
+ var serverSideValidation = {
359
+ initialize: function initialize() {
360
+ var _this = this;
361
+
362
+ this.validationErrors = {};
363
+ this.listenTo(this, 'error', function (model, request) {
364
+ if (request.status === 422) {
365
+ _this.validationErrors = JSON.parse(request.responseText).errors;
366
+
367
+ _this.trigger('invalid');
368
+ }
369
+ });
370
+ this.listenTo(this, 'sync', function () {
371
+ _this.validationErrors = {};
372
+ });
373
+ }
374
+ };
362
375
  var CollectionView = Marionette.View.extend({
363
376
  initialize: function initialize() {
364
377
  this.rendered = false;
@@ -757,10 +770,12 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
757
770
  this.configure();
758
771
  },
759
772
  configure: function configure() {},
760
- tab: function tab(name, callback) {
773
+ tab: function tab(name, callbackOrOptions, callback) {
774
+ callback = callback || callbackOrOptions;
775
+ var options = callback ? callbackOrOptions : {};
761
776
  this.tabsView.tab(name, _.bind(function () {
762
777
  var tabView = new ConfigurationEditorTabView({
763
- model: this.model,
778
+ model: options.model || this.model,
764
779
  placeholderModel: this.options.placeholderModel,
765
780
  tab: name,
766
781
  attributeTranslationKeyPrefixes: this.options.attributeTranslationKeyPrefixes
@@ -900,7 +915,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
900
915
  var TableHeaderCellView = TableCellView.extend({
901
916
  tagName: 'th',
902
917
  render: function render() {
903
- this.$el.text(this.attributeTranslation('column_header'));
918
+ this.$el.text(this.options.column.headerText || this.attributeTranslation('column_header'));
904
919
  this.$el.data('columnName', this.options.column.name);
905
920
  return this;
906
921
  }
@@ -1273,6 +1288,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1273
1288
  return this.getAttributeBoundOption('disabled');
1274
1289
  },
1275
1290
  updateDisabled: function updateDisabled() {
1291
+ this.$el.toggleClass('input-disabled', !!this.isDisabled());
1276
1292
  this.updateInlineHelp();
1277
1293
 
1278
1294
  if (this.ui.input) {
@@ -1499,6 +1515,30 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1499
1515
  return this.options.placeholderModel && this.options.placeholderModel.get(this.options.propertyName);
1500
1516
  }
1501
1517
  };
1518
+ var viewWithValidationErrorMessages = {
1519
+ onRender: function onRender() {
1520
+ this.listenTo(this.model, 'invalid sync', this.updateValidationErrorMessages);
1521
+ this.updateValidationErrorMessages();
1522
+ },
1523
+ updateValidationErrorMessages: function updateValidationErrorMessages() {
1524
+ var _this = this;
1525
+
1526
+ var errors = this.model.validationErrors && this.model.validationErrors[this.options.propertyName] || [];
1527
+
1528
+ if (errors.length) {
1529
+ this.validationErrorList = this.validationErrorList || $('<ul class="validation_error_messages" />').appendTo(this.el);
1530
+ this.validationErrorList.html('');
1531
+ errors.forEach(function (error) {
1532
+ return _this.validationErrorList.append("<li>".concat(error, "</li>"));
1533
+ });
1534
+ this.$el.addClass('invalid');
1535
+ } else if (this.validationErrorList) {
1536
+ this.validationErrorList.remove();
1537
+ this.validationErrorList = null;
1538
+ this.$el.removeClass('invalid');
1539
+ }
1540
+ }
1541
+ };
1502
1542
 
1503
1543
  function template$6(data) {
1504
1544
  var __p = '';
@@ -1527,7 +1567,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
1527
1567
 
1528
1568
 
1529
1569
  var TextInputView = Marionette.ItemView.extend({
1530
- mixins: [inputView, inputWithPlaceholderText],
1570
+ mixins: [inputView, inputWithPlaceholderText, viewWithValidationErrorMessages],
1531
1571
  template: template$6,
1532
1572
  ui: {
1533
1573
  input: 'input'
@@ -2011,7 +2051,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2011
2051
  var __t,
2012
2052
  __p = '';
2013
2053
 
2014
- __p += '<label>\n <span class="name"></span>\n <span class="inline_help"></span>\n</label>\n\n<!-- inline style for wysihtml5 to pick up -->\n<textarea style="width: 100%;" dir="auto"></textarea>\n\n<div class="toolbar">\n <a data-wysihtml5-command="bold" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.bold')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="italic" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.italic')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="underline" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.underline')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="createLink" class="link_button" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.create_link')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="insertOrderedList" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.insert_ordered_list')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="insertUnorderedList" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.insert_unordered_list')) == null ? '' : __t) + '"></a>\n\n <div data-wysihtml5-dialog="createLink" class="dialog link_dialog" style="display: none;">\n <div class="link_type_select">\n <label>\n <input type="radio" name="link_type" class="url_link_radio_button">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.link_type.url')) == null ? '' : __t) + '\n </label>\n <label>\n <input type="radio" name="link_type" class="fragment_link_radio_button">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.link_type.page_link')) == null ? '' : __t) + '\n </label>\n </div>\n <div class="url_link_panel">\n <label>\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.target')) == null ? '' : __t) + '\n </label>\n <input type="text" class="display_url">\n <div class="open_in_new_tab_section">\n <label>\n <input type="checkbox" class="open_in_new_tab">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.open_in_new_tab')) == null ? '' : __t) + '\n </label>\n <span class="inline_help">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.open_in_new_tab_help')) == null ? '' : __t) + '\n </span>\n </div>\n </div>\n <div class="fragment_link_panel">\n <!-- LinkInputView is inserted here -->\n </div>\n\n <!-- wysihtml5 does not handle hidden fields correctly -->\n <div class="internal">\n <input type="text" data-wysihtml5-dialog-field="href" class="current_url" value="">\n <input type="text" data-wysihtml5-dialog-field="target" class="current_target" value="_blank">\n </div>\n\n <a class="button" data-wysihtml5-dialog-action="save">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.save')) == null ? '' : __t) + '\n </a>\n <a class="button" data-wysihtml5-dialog-action="cancel">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.cancel')) == null ? '' : __t) + '\n </a>\n\n <a data-wysihtml5-command="removeLink">' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.remove_link')) == null ? '' : __t) + '</a>\n </div>\n</div>\n';
2054
+ __p += '<label>\n <span class="name"></span>\n <span class="inline_help"></span>\n</label>\n\n<!-- inline style for wysihtml5 to pick up -->\n<textarea style="width: 100%;" dir="auto"></textarea>\n\n<div class="toolbar">\n <a data-wysihtml5-command="bold" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.bold')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="italic" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.italic')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="underline" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.underline')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="createLink" class="link_button" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.create_link')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="insertOrderedList" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.insert_ordered_list')) == null ? '' : __t) + '"></a>\n <a data-wysihtml5-command="insertUnorderedList" title="' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.insert_unordered_list')) == null ? '' : __t) + '"></a>\n\n <div data-wysihtml5-dialog="createLink" class="dialog link_dialog" style="display: none;">\n <div class="link_type_select">\n <label>\n <input type="radio" name="link_type" class="url_link_radio_button">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.link_type.url')) == null ? '' : __t) + '\n </label>\n <label>\n <input type="radio" name="link_type" class="fragment_link_radio_button">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.link_type.page_link')) == null ? '' : __t) + '\n </label>\n </div>\n <div class="url_link_panel">\n <label>\n <span>\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.target')) == null ? '' : __t) + '\n </span>\n </label>\n <input type="text" class="display_url">\n <div class="open_in_new_tab_section">\n <label>\n <input type="checkbox" class="open_in_new_tab">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.open_in_new_tab')) == null ? '' : __t) + '\n </label>\n <span class="inline_help">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.open_in_new_tab_help')) == null ? '' : __t) + '\n </span>\n </div>\n </div>\n <div class="fragment_link_panel">\n <!-- LinkInputView is inserted here -->\n </div>\n\n <!-- wysihtml5 does not handle hidden fields correctly -->\n <div class="internal">\n <input type="text" data-wysihtml5-dialog-field="href" class="current_url" value="">\n <input type="text" data-wysihtml5-dialog-field="target" class="current_target" value="_blank">\n </div>\n\n <a class="button" data-wysihtml5-dialog-action="save">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.save')) == null ? '' : __t) + '\n </a>\n <a class="button" data-wysihtml5-dialog-action="cancel">\n ' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.cancel')) == null ? '' : __t) + '\n </a>\n\n <a data-wysihtml5-command="removeLink">' + ((__t = I18n.t('pageflow.ui.templates.inputs.text_area_input.remove_link')) == null ? '' : __t) + '</a>\n </div>\n</div>\n';
2015
2055
  return __p;
2016
2056
  }
2017
2057
  /**
@@ -2335,6 +2375,15 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2335
2375
  supportedHosts: function supportedHosts() {
2336
2376
  return this.options.supportedHosts;
2337
2377
  },
2378
+ // Host names used to be expected to include protocols. Remove
2379
+ // protocols for backwards compatilbity. Since supportedHosts
2380
+ // is supposed to be overridden in subclasses, we do it in a
2381
+ // separate method.
2382
+ supportedHostsWithoutLegacyProtocols: function supportedHostsWithoutLegacyProtocols() {
2383
+ return _.map(this.supportedHosts(), function (host) {
2384
+ return host.replace(/^https?:\/\//, '');
2385
+ });
2386
+ },
2338
2387
  validate: function validate(success) {
2339
2388
  var view = this;
2340
2389
  var options = this.options;
@@ -2371,23 +2420,26 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2371
2420
  }
2372
2421
 
2373
2422
  function hasSupportedHost(url) {
2374
- return _.any(view.supportedHosts(), function (host) {
2375
- return url.match(new RegExp('^' + host));
2423
+ return _.any(view.supportedHostsWithoutLegacyProtocols(), function (host) {
2424
+ return url.match(new RegExp('^https?://' + host));
2376
2425
  });
2377
2426
  }
2378
2427
 
2379
2428
  function displayValidationError(message) {
2380
2429
  view.$el.addClass('invalid');
2430
+ view.ui.input.attr('aria-invalid', 'true');
2381
2431
  view.ui.validation.removeClass('pending').addClass('failed').html(message).show();
2382
2432
  }
2383
2433
 
2384
2434
  function displayValidationPending(message) {
2385
2435
  view.$el.removeClass('invalid');
2436
+ view.ui.input.removeAttr('aria-invalid');
2386
2437
  view.ui.validation.removeClass('failed').addClass('pending').html(message).show();
2387
2438
  }
2388
2439
 
2389
2440
  function resetValidationError(message) {
2390
2441
  view.$el.removeClass('invalid');
2442
+ view.ui.input.attr('aria-invalid', 'false');
2391
2443
  view.ui.validation.hide();
2392
2444
  }
2393
2445
  }
@@ -2620,6 +2672,15 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2620
2672
  * Ignore the attribute value if the input is disabled and display
2621
2673
  * an unchecked check box.
2622
2674
  *
2675
+ * @param {boolean} [options.displayCheckedIfDisabled=false]
2676
+ * Ignore the attribute value if the input is disabled and display
2677
+ * an checked check box.
2678
+ *
2679
+ * @param {string} [options.storeInverted]
2680
+ * Display checked by default and store true in given attribute when
2681
+ * unchecked. The property name passed to `input` is only used for
2682
+ * translations.
2683
+ *
2623
2684
  * @class
2624
2685
  */
2625
2686
 
@@ -2646,7 +2707,13 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2646
2707
  },
2647
2708
  save: function save() {
2648
2709
  if (!this.isDisabled()) {
2649
- this.model.set(this.options.propertyName, this.ui.input.is(':checked'));
2710
+ var value = this.ui.input.is(':checked');
2711
+
2712
+ if (this.options.storeInverted) {
2713
+ this.model.set(this.options.storeInverted, !value);
2714
+ } else {
2715
+ this.model.set(this.options.propertyName, value);
2716
+ }
2650
2717
  }
2651
2718
  },
2652
2719
  load: function load() {
@@ -2657,11 +2724,46 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2657
2724
  displayValue: function displayValue() {
2658
2725
  if (this.isDisabled() && this.options.displayUncheckedIfDisabled) {
2659
2726
  return false;
2727
+ } else if (this.isDisabled() && this.options.displayCheckedIfDisabled) {
2728
+ return true;
2729
+ } else if (this.options.storeInverted) {
2730
+ return !this.model.get(this.options.storeInverted);
2660
2731
  } else {
2661
2732
  return this.model.get(this.options.propertyName);
2662
2733
  }
2663
2734
  }
2664
2735
  });
2736
+ /**
2737
+ * Render a separator in a {@link ConfigurationEditorView} tab.
2738
+ *
2739
+ * @example
2740
+ *
2741
+ * this.view(SeparatorView);
2742
+ *
2743
+ * @class
2744
+ */
2745
+
2746
+ var SeparatorView = Marionette.View.extend({
2747
+ className: 'separator'
2748
+ });
2749
+ /**
2750
+ * Render an input that is only a label. Can be used to render
2751
+ * additional inline help.
2752
+ *
2753
+ * See {@link inputView} for further options
2754
+ *
2755
+ * @class
2756
+ */
2757
+
2758
+ var LabelOnlyView = Marionette.ItemView.extend({
2759
+ mixins: [inputView],
2760
+ template: function template() {
2761
+ return "\n <label>\n <span class=\"name\"></span>\n <span class=\"inline_help\"></span>\n </label>\n ";
2762
+ },
2763
+ ui: {
2764
+ label: 'label'
2765
+ }
2766
+ });
2665
2767
  /**
2666
2768
  * A table cell mapping column attribute values to a list of
2667
2769
  * translations.
@@ -2877,7 +2979,11 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
2877
2979
  }
2878
2980
  }
2879
2981
  };
2880
- Cocktail.mixin(Marionette.View, subviewContainer);
2982
+
2983
+ if (!Marionette.View.prototype.appendSubview) {
2984
+ Cocktail.mixin(Marionette.View, subviewContainer);
2985
+ }
2986
+
2881
2987
  var tooltipContainer = {
2882
2988
  events: {
2883
2989
  'mouseover [data-tooltip]': function mouseoverDataTooltip(event) {
@@ -3243,10 +3349,14 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3243
3349
  model: this.model.configuration,
3244
3350
  attributeTranslationKeyPrefixes: ['pageflow.editor.files.attributes.' + fileType.collectionName, 'pageflow.editor.files.common_attributes', 'pageflow.editor.nested_files.' + fileType.collectionName, 'pageflow.editor.nested_files.common_attributes']
3245
3351
  });
3246
- tab.input('file_name', TextInputView, {
3247
- model: this.model,
3248
- disabled: true
3249
- });
3352
+
3353
+ if (this.options.displayFileName) {
3354
+ tab.input('file_name', TextInputView, {
3355
+ model: this.model,
3356
+ disabled: true
3357
+ });
3358
+ }
3359
+
3250
3360
  tab.input('rights', TextInputView, {
3251
3361
  model: this.model,
3252
3362
  placeholder: entry.get('default_file_rights')
@@ -3291,7 +3401,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3291
3401
  var __t,
3292
3402
  __p = '';
3293
3403
 
3294
- __p += '<div class="box">\n <div class="content">\n </div>\n\n <div class="footer">\n <a href="" class="close">\n ' + ((__t = I18n.t('pageflow.editor.templates.file_settings_dialog.close')) == null ? '' : __t) + '\n </a>\n </div>\n</div>\n';
3404
+ __p += '<div class="box">\n <div class="content">\n <h1 class="dialog-header"></h1>\n </div>\n\n <div class="footer">\n <a href="" class="close">\n ' + ((__t = I18n.t('pageflow.editor.templates.file_settings_dialog.close')) == null ? '' : __t) + '\n </a>\n </div>\n</div>\n';
3295
3405
  return __p;
3296
3406
  }
3297
3407
 
@@ -3300,9 +3410,11 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
3300
3410
  className: 'file_settings_dialog editor dialog',
3301
3411
  mixins: [dialogView],
3302
3412
  ui: {
3303
- content: '.content'
3413
+ content: '.content',
3414
+ header: '.dialog-header'
3304
3415
  },
3305
3416
  onRender: function onRender() {
3417
+ this.ui.header.text(this.model.title());
3306
3418
  this.tabsView = new TabsView({
3307
3419
  model: this.model,
3308
3420
  i18n: 'pageflow.editor.files.settings_dialog_tabs',
@@ -5229,8 +5341,8 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
5229
5341
  initialize: function initialize(attributes, options) {
5230
5342
  Configuration.prototype.initialize.apply(this, attributes, options);
5231
5343
  this.configuration = new EntryMetadataConfiguration(_.clone(attributes.configuration) || {});
5232
- this.listenTo(this.configuration, 'change', function () {
5233
- this.trigger('change');
5344
+ this.listenTo(this.configuration, 'change', function (model, options) {
5345
+ this.trigger('change', model, options);
5234
5346
  this.parent.save();
5235
5347
  });
5236
5348
  },
@@ -6752,7 +6864,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6752
6864
 
6753
6865
  __p += '<div class="blank_slate">\n <p>\n ' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.all_released')) == null ? '' : __t) + '\n </p>\n <p>\n ' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.link_to_progress', {
6754
6866
  link: '<a href="#/files/video_files">' + I18n.t('pageflow.editor.templates.confirm_encoding.manage_files') + '</a>'
6755
- })) == null ? '' : __t) + '\n </p>\n</div>\n\n<div class="video_files_panel">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.videos_tab')) == null ? '' : __t) + '</h2>\n</div>\n\n<div class="audio_files_panel">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.audios_tab')) == null ? '' : __t) + '</h2>\n</div>\n\n<div class="summary">\n</div>\n<button class="confirm">' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.confirm_button')) == null ? '' : __t) + '</button>\n';
6867
+ })) == null ? '' : __t) + '\n </p>\n</div>\n\n<div class="intro">\n</div>\n\n<div class="video_files_panel">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.videos_tab')) == null ? '' : __t) + '</h2>\n</div>\n\n<div class="audio_files_panel">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.audios_tab')) == null ? '' : __t) + '</h2>\n</div>\n\n<div class="summary">\n</div>\n<button class="confirm">' + ((__t = I18n.t('pageflow.editor.templates.confirm_encoding.confirm_button')) == null ? '' : __t) + '</button>\n';
6756
6868
  return __p;
6757
6869
  }
6758
6870
 
@@ -6764,6 +6876,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6764
6876
  videoFilesPanel: '.video_files_panel',
6765
6877
  audioFilesPanel: '.audio_files_panel',
6766
6878
  summary: '.summary',
6879
+ intro: '.intro',
6767
6880
  confirmButton: 'button'
6768
6881
  },
6769
6882
  events: {
@@ -6805,10 +6918,12 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
6805
6918
  },
6806
6919
  updateBlankSlate: function updateBlankSlate() {
6807
6920
  this.ui.blankSlate.toggle(!this.confirmableVideoFiles.length && !this.confirmableAudioFiles.length);
6921
+ this.ui.intro.toggle(!!this.confirmableVideoFiles.length || !!this.confirmableAudioFiles.length);
6808
6922
  this.ui.videoFilesPanel.toggle(!!this.confirmableVideoFiles.length);
6809
6923
  this.ui.audioFilesPanel.toggle(!!this.confirmableAudioFiles.length);
6810
6924
  },
6811
6925
  updateSummary: function updateSummary(enabled) {
6926
+ this.ui.intro.html(this.model.get('intro_html'));
6812
6927
  this.ui.summary.html(this.model.get('summary_html'));
6813
6928
  this.ui.confirmButton.toggleClass('checking', !!this.model.get('checking'));
6814
6929
 
@@ -7197,13 +7312,13 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7197
7312
  var __t,
7198
7313
  __p = '';
7199
7314
 
7200
- __p += '<div class="box">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.title')) == null ? '' : __t) + '</h2>\n <p>' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.help')) == null ? '' : __t) + '</p>\n\n <div class="wrapper">\n </div>\n\n <h3>' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.preview_title')) == null ? '' : __t) + '</h3>\n <div class="previews">\n <div>\n </div>\n </div>\n\n <div class="footer">\n <a href="" class="save">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.save')) == null ? '' : __t) + '</a>\n <a href="" class="close">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.cancel')) == null ? '' : __t) + '</a>\n </div>\n</div>\n';
7315
+ __p += '<div class="box">\n <div class="content">\n <h2 class="dialog-header">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.title')) == null ? '' : __t) + '</h2>\n <p class="dialog-hint">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.help')) == null ? '' : __t) + '</p>\n\n <div class="wrapper">\n </div>\n\n <h3>' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.preview_title')) == null ? '' : __t) + '</h3>\n <div class="previews">\n <div>\n </div>\n </div>\n </div>\n\n <div class="footer">\n <a href="" class="save">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.save')) == null ? '' : __t) + '</a>\n <a href="" class="close">' + ((__t = I18n.t('pageflow.editor.templates.background_positioning.cancel')) == null ? '' : __t) + '</a>\n </div>\n</div>\n';
7201
7316
  return __p;
7202
7317
  }
7203
7318
 
7204
7319
  var BackgroundPositioningView = Marionette.ItemView.extend({
7205
7320
  template: template$b$1,
7206
- className: 'background_positioning dialog',
7321
+ className: 'background_positioning editor dialog',
7207
7322
  mixins: [dialogView],
7208
7323
  ui: {
7209
7324
  previews: '.previews > div',
@@ -7754,7 +7869,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7754
7869
  var __t,
7755
7870
  __p = '';
7756
7871
 
7757
- __p += '<div class="box">\n <div class="content">\n <div>\n <h2 class="themes_header">' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.header')) == null ? '' : __t) + '</h2>\n <div class="themes_panel">\n </div>\n <div class="preview_panel">\n <h2 class="preview_header">' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.preview_header_prefix')) == null ? '' : __t) + '\n <span class="preview_header_theme_name"></span>' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.preview_header_suffix')) == null ? '' : __t) + '\n </h2>\n <div class="preview_image_region">\n <img class="preview_image" src="default_template.png">\n </div>\n </div>\n </div>\n </div>\n\n <div class="footer">\n <a href="" class="close">\n ' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.close')) == null ? '' : __t) + '\n </a>\n </div>\n</div>\n';
7872
+ __p += '<div class="box">\n <h1 class="dialog-header">\n ' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.header')) == null ? '' : __t) + '\n </h1>\n <div class="panels">\n <div class="themes_panel">\n </div>\n <div class="preview_panel">\n <h2 class="dialog-sub_header">\n ' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.preview_header_prefix')) == null ? '' : __t) + '\n <span class="preview_header_theme_name"></span>\n ' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.preview_header_suffix')) == null ? '' : __t) + '\n </h2>\n <div class="preview_image_region">\n <img class="preview_image" src="default_template.png">\n </div>\n </div>\n </div>\n <div class="footer">\n <a href="" class="close">\n ' + ((__t = I18n.t('pageflow.editor.templates.change_theme_dialog.close')) == null ? '' : __t) + '\n </a>\n </div>\n</div>\n';
7758
7873
  return __p;
7759
7874
  }
7760
7875
 
@@ -7763,7 +7878,6 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
7763
7878
  className: 'change_theme dialog editor',
7764
7879
  mixins: [dialogView],
7765
7880
  ui: {
7766
- content: '.content',
7767
7881
  themesPanel: '.themes_panel',
7768
7882
  previewPanel: '.preview_panel',
7769
7883
  previewImageRegion: '.preview_image_region',
@@ -8269,7 +8383,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8269
8383
  var __t,
8270
8384
  __p = '';
8271
8385
 
8272
- __p += '<div class="box">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.reuse_files')) == null ? '' : __t) + '</h2>\n\n <div class="panels">\n <ul class="entries_panel">\n </ul>\n\n <div class="files_panel">\n </div>\n </div>\n\n <div class="footer">\n <button class="ok">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.ok')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.cancel')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8386
+ __p += '<div class="box">\n <h1 class="dialog-header">\n ' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.reuse_files')) == null ? '' : __t) + '\n </h1>\n\n <div class="panels">\n <ul class="entries_panel">\n </ul>\n\n <div class="files_panel">\n </div>\n </div>\n\n <div class="footer">\n <button class="ok">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.ok')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.cancel')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8273
8387
  return __p;
8274
8388
  }
8275
8389
 
@@ -8735,7 +8849,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8735
8849
  var __t,
8736
8850
  __p = '';
8737
8851
 
8738
- __p += '<div class="box file_importer_box">\n <h1 class="dialog-header">' + ((__t = I18n.t('pageflow.editor.file_importers.' + data.importerKey + '.dialog_label')) == null ? '' : __t) + '</h1>\n\n <div class="content_panel">\n \n </div>\n\n <div class="footer">\n <div class="disclaimer">\n <p>' + ((__t = I18n.t('pageflow.editor.file_importers.' + data.importerKey + '.disclaimer')) == null ? '' : __t) + '</p>\n </div>\n <button class="import">' + ((__t = I18n.t('pageflow.editor.views.files_view.import')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.cancel')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8852
+ __p += '<div class="box file_importer_box">\n <h1 class="dialog-header">' + ((__t = I18n.t('pageflow.editor.file_importers.' + data.importerKey + '.dialog_label')) == null ? '' : __t) + '</h1>\n\n <div class="content_panel">\n \n </div>\n\n <div class="footer">\n <div class="disclaimer">\n ' + ((__t = I18n.t('pageflow.editor.file_importers.' + data.importerKey + '.disclaimer')) == null ? '' : __t) + '\n </div>\n <button class="import" disabled>' + ((__t = I18n.t('pageflow.editor.views.files_view.import')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.files_explorer.cancel')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8739
8853
  return __p;
8740
8854
  }
8741
8855
 
@@ -8743,18 +8857,11 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8743
8857
  var __t,
8744
8858
  __p = '';
8745
8859
 
8746
- __p += '<div class="box">\n <h1 class="dialog-header">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.header')) == null ? '' : __t) + '</h1>\n <p class="dialog-hint">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.hint')) == null ? '' : __t) + '</p>\n\n <div class="files_panel">\n </div>\n\n <div class="selected_file_panel">\n <h2>' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.edit_file_header')) == null ? '' : __t) + '</h2>\n <div class="selected_file_region">\n </div>\n </div>\n\n <div class="footer">\n <button class="upload">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.upload')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.close')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8747
- return __p;
8748
- }
8749
-
8750
- function template$z(data) {
8751
- var __p = '';
8752
- __p += '<h2></h2>\n';
8860
+ __p += '<div class="box">\n <h1 class="dialog-header">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.header')) == null ? '' : __t) + '</h1>\n <p class="dialog-hint">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.hint')) == null ? '' : __t) + '</p>\n\n <div class="panels">\n <div class="files_panel">\n </div>\n\n <div class="selected_file_panel">\n <h2 class="dialog-sub_header">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.edit_file_header')) == null ? '' : __t) + '</h2>\n <div class="selected_file_region">\n </div>\n </div>\n </div>\n\n <div class="footer">\n <button class="upload">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.upload')) == null ? '' : __t) + '</button>\n <button class="close">' + ((__t = I18n.t('pageflow.editor.templates.confirm_upload.close')) == null ? '' : __t) + '</button>\n </div>\n</div>\n';
8753
8861
  return __p;
8754
8862
  }
8755
8863
 
8756
- var UploadableFilesView = Marionette.ItemView.extend({
8757
- template: template$z,
8864
+ var UploadableFilesView = Marionette.View.extend({
8758
8865
  className: 'uploadable_files',
8759
8866
  ui: {
8760
8867
  header: 'h2'
@@ -8766,24 +8873,27 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8766
8873
  this.options.selection.set('file', this.uploadableFiles.first());
8767
8874
  }
8768
8875
  },
8769
- onRender: function onRender() {
8770
- this.ui.header.text(I18n$1.t('pageflow.editor.files.tabs.' + this.options.fileType.collectionName));
8876
+ render: function render() {
8771
8877
  this.appendSubview(new TableView({
8772
8878
  collection: this.uploadableFiles,
8773
8879
  attributeTranslationKeyPrefixes: ['pageflow.editor.files.attributes.' + this.options.fileType.collectionName, 'pageflow.editor.files.common_attributes'],
8774
- columns: this.commonColumns().concat(this.fileTypeColumns()),
8880
+ columns: this.commonColumns({
8881
+ fileTypeDisplayName: I18n$1.t('pageflow.editor.files.tabs.' + this.options.fileType.collectionName)
8882
+ }).concat(this.fileTypeColumns()),
8775
8883
  selection: this.options.selection,
8776
8884
  selectionAttribute: 'file'
8777
8885
  }));
8778
8886
  this.listenTo(this.uploadableFiles, 'add remove', this.update);
8779
8887
  this.update();
8888
+ return this;
8780
8889
  },
8781
8890
  update: function update() {
8782
8891
  this.$el.toggleClass('is_empty', this.uploadableFiles.length === 0);
8783
8892
  },
8784
- commonColumns: function commonColumns() {
8893
+ commonColumns: function commonColumns(options) {
8785
8894
  return [{
8786
8895
  name: 'file_name',
8896
+ headerText: options.fileTypeDisplayName,
8787
8897
  cellView: TextTableCellView
8788
8898
  }, {
8789
8899
  name: 'rights',
@@ -8956,7 +9066,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8956
9066
  app.dialogRegion.show(new FilesImporterView(options).render());
8957
9067
  };
8958
9068
 
8959
- function template$A(data) {
9069
+ function template$z(data) {
8960
9070
  var __t,
8961
9071
  __p = '';
8962
9072
 
@@ -8965,7 +9075,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
8965
9075
  }
8966
9076
 
8967
9077
  var SelectButtonView = Marionette.ItemView.extend({
8968
- template: template$A,
9078
+ template: template$z,
8969
9079
  className: 'select_button',
8970
9080
  ui: {
8971
9081
  button: 'button',
@@ -9000,7 +9110,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9000
9110
  }
9001
9111
  });
9002
9112
 
9003
- function template$B(data) {
9113
+ function template$A(data) {
9004
9114
  var __t,
9005
9115
  __p = '';
9006
9116
 
@@ -9009,7 +9119,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9009
9119
  }
9010
9120
 
9011
9121
  var FilesView = Marionette.ItemView.extend({
9012
- template: template$B,
9122
+ template: template$A,
9013
9123
  className: 'manage_files',
9014
9124
  events: {
9015
9125
  'click a.back': 'goBack',
@@ -9094,14 +9204,14 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9094
9204
  }
9095
9205
  });
9096
9206
 
9097
- function template$C(data) {
9207
+ function template$B(data) {
9098
9208
  var __p = '';
9099
9209
  __p += '<div class="quota_state">\n</div>\n<div class="outlet">\n</div>\n<div class="exhausted_message">\n</div>\n';
9100
9210
  return __p;
9101
9211
  }
9102
9212
 
9103
9213
  var EntryPublicationQuotaDecoratorView = Marionette.Layout.extend({
9104
- template: template$C,
9214
+ template: template$B,
9105
9215
  className: 'quota_decorator',
9106
9216
  regions: {
9107
9217
  outlet: '.outlet'
@@ -9142,7 +9252,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9142
9252
  }
9143
9253
  });
9144
9254
 
9145
- function template$D(data) {
9255
+ function template$C(data) {
9146
9256
  var __t,
9147
9257
  __p = '';
9148
9258
 
@@ -9151,7 +9261,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9151
9261
  }
9152
9262
 
9153
9263
  var PublishEntryView = Marionette.ItemView.extend({
9154
- template: template$D,
9264
+ template: template$C,
9155
9265
  className: 'publish_entry',
9156
9266
  ui: {
9157
9267
  publishUntilFields: '.publish_until_fields',
@@ -9424,11 +9534,13 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9424
9534
  editor.setDefaultHelpEntry('pageflow.help_entries.files');
9425
9535
  },
9426
9536
  confirmableFiles: function confirmableFiles(preselectedFileType, preselectedFileId) {
9537
+ var model = EncodingConfirmation.createWithPreselection({
9538
+ fileType: preselectedFileType,
9539
+ fileId: preselectedFileId
9540
+ });
9541
+ model.check();
9427
9542
  this.region.show(ConfirmEncodingView.create({
9428
- model: EncodingConfirmation.createWithPreselection({
9429
- fileType: preselectedFileType,
9430
- fileId: preselectedFileId
9431
- })
9543
+ model: model
9432
9544
  }));
9433
9545
  },
9434
9546
  metaData: function metaData(tab) {
@@ -9532,7 +9644,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9532
9644
  }
9533
9645
  });
9534
9646
 
9535
- function template$E(data) {
9647
+ function template$D(data) {
9536
9648
  var __t,
9537
9649
  __p = '';
9538
9650
 
@@ -9541,7 +9653,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9541
9653
  }
9542
9654
 
9543
9655
  var HelpView = Marionette.ItemView.extend({
9544
- template: template$E,
9656
+ template: template$D,
9545
9657
  className: 'help',
9546
9658
  ui: {
9547
9659
  placeholder: '.placeholder',
@@ -9617,7 +9729,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9617
9729
  className: 'model_thumbnail page_thumbnail'
9618
9730
  });
9619
9731
 
9620
- function template$F(data) {
9732
+ function template$E(data) {
9621
9733
  var __t,
9622
9734
  __p = '';
9623
9735
 
@@ -9626,7 +9738,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9626
9738
  }
9627
9739
 
9628
9740
  var PageLinkItemView = Marionette.ItemView.extend({
9629
- template: template$F,
9741
+ template: template$E,
9630
9742
  tagName: 'li',
9631
9743
  className: 'page_link',
9632
9744
  ui: {
@@ -9676,7 +9788,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9676
9788
  }
9677
9789
  });
9678
9790
 
9679
- function template$G(data) {
9791
+ function template$F(data) {
9680
9792
  var __t,
9681
9793
  __p = '';
9682
9794
 
@@ -9685,7 +9797,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9685
9797
  }
9686
9798
 
9687
9799
  var PageLinksView = Marionette.ItemView.extend({
9688
- template: template$G,
9800
+ template: template$F,
9689
9801
  className: 'page_links',
9690
9802
  ui: {
9691
9803
  links: 'ul.links',
@@ -9721,14 +9833,14 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9721
9833
  }
9722
9834
  });
9723
9835
 
9724
- function template$H(data) {
9836
+ function template$G(data) {
9725
9837
  var __p = '';
9726
9838
  __p += '<div class="emulation_mode_button-wrapper"\n data-tooltip-align="top center">\n <div class="emulation_mode_button-desktop_icon"/>\n <div class="emulation_mode_button-phone_icon"/>\n <div class="emulation_mode_button-track" />\n <div class="emulation_mode_button-thumb" />\n</div>\n';
9727
9839
  return __p;
9728
9840
  }
9729
9841
 
9730
9842
  var EmulationModeButtonView = Marionette.ItemView.extend({
9731
- template: template$H,
9843
+ template: template$G,
9732
9844
  className: 'emulation_mode_button',
9733
9845
  mixins: [tooltipContainer],
9734
9846
  ui: {
@@ -9762,7 +9874,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9762
9874
  }
9763
9875
  });
9764
9876
 
9765
- function template$I(data) {
9877
+ function template$H(data) {
9766
9878
  var __t,
9767
9879
  __p = '';
9768
9880
 
@@ -9771,7 +9883,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9771
9883
  }
9772
9884
 
9773
9885
  var HelpButtonView = Marionette.ItemView.extend({
9774
- template: template$I,
9886
+ template: template$H,
9775
9887
  className: 'help_button',
9776
9888
  events: {
9777
9889
  'click': function click() {
@@ -9808,7 +9920,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9808
9920
  }
9809
9921
  });
9810
9922
 
9811
- function template$J(data) {
9923
+ function template$I(data) {
9812
9924
  var __t,
9813
9925
  __p = '';
9814
9926
 
@@ -9817,7 +9929,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9817
9929
  }
9818
9930
 
9819
9931
  var ListItemView = Marionette.ItemView.extend({
9820
- template: template$J,
9932
+ template: template$I,
9821
9933
  tagName: 'li',
9822
9934
  className: 'list_item',
9823
9935
  ui: {
@@ -9891,16 +10003,16 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
9891
10003
  }
9892
10004
  });
9893
10005
 
9894
- function template$K(data) {
10006
+ function template$J(data) {
9895
10007
  var __t,
9896
10008
  __p = '';
9897
10009
 
9898
- __p += '<div class="checking notice">\n <p>' + ((__t = I18n.t('pageflow.editor.templates.locked.loading')) == null ? '' : __t) + '</p>\n\n <a class="close" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.close')) == null ? '' : __t) + '</a>\n</div>\n\n<div class="error notice">\n <div class="message"></div>\n\n <a class="close" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.close')) == null ? '' : __t) + '</a>\n <a class="break" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.open_here')) == null ? '' : __t) + '</a>\n</div>\n\n';
10010
+ __p += '<div class="checking notice editor">\n <p>' + ((__t = I18n.t('pageflow.editor.templates.locked.loading')) == null ? '' : __t) + '</p>\n\n <a class="close" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.close')) == null ? '' : __t) + '</a>\n</div>\n\n<div class="error notice editor">\n <p class="message"></p>\n\n <a class="close" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.close')) == null ? '' : __t) + '</a>\n <a class="break" href="#">' + ((__t = I18n.t('pageflow.editor.templates.locked.open_here')) == null ? '' : __t) + '</a>\n</div>\n\n';
9899
10011
  return __p;
9900
10012
  }
9901
10013
 
9902
10014
  var LockedView = Marionette.ItemView.extend({
9903
- template: template$K,
10015
+ template: template$J,
9904
10016
  className: 'locked checking',
9905
10017
  ui: {
9906
10018
  breakButton: '.break',
@@ -10090,7 +10202,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10090
10202
  }
10091
10203
  });
10092
10204
 
10093
- function template$L(data) {
10205
+ function template$K(data) {
10094
10206
  var __t,
10095
10207
  __p = '';
10096
10208
 
@@ -10103,7 +10215,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10103
10215
  var NotificationsView = Marionette.ItemView.extend({
10104
10216
  className: 'notifications',
10105
10217
  tagName: 'ul',
10106
- template: template$L,
10218
+ template: template$K,
10107
10219
  ui: {
10108
10220
  failedCount: '.failed .count',
10109
10221
  uploadingCount: '.uploading .count',
@@ -10188,15 +10300,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10188
10300
  return this.model.getReference(this.options.propertyName, this.options.collection);
10189
10301
  }
10190
10302
  });
10191
-
10192
- function template$M(data) {
10193
- var __p = '';
10194
- __p += '<h2></h2>\n';
10195
- return __p;
10196
- }
10197
-
10198
- var NestedFilesView = Marionette.ItemView.extend({
10199
- template: template$M,
10303
+ var NestedFilesView = Marionette.View.extend({
10200
10304
  className: 'nested_files',
10201
10305
  ui: {
10202
10306
  header: 'h2'
@@ -10215,8 +10319,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10215
10319
  this.listenTo(this.collection, 'request', this.update);
10216
10320
  this.listenTo(this.collection, 'sync', this.update);
10217
10321
  },
10218
- onRender: function onRender() {
10219
- this.ui.header.text(this.collection.parentModel.get('file_name'));
10322
+ render: function render() {
10220
10323
  this.appendSubview(new TableView({
10221
10324
  collection: this.collection,
10222
10325
  attributeTranslationKeyPrefixes: ['pageflow.editor.nested_files.' + this.options.fileType.collectionName],
@@ -10226,6 +10329,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10226
10329
  blankSlateText: this.options.tableBlankSlateText
10227
10330
  }));
10228
10331
  this.update();
10332
+ return this;
10229
10333
  },
10230
10334
  update: function update() {
10231
10335
  this.$el.toggleClass('is_empty', this.collection.length === 0);
@@ -10272,16 +10376,16 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10272
10376
  }, 200)
10273
10377
  });
10274
10378
 
10275
- function template$N(data) {
10379
+ function template$L(data) {
10276
10380
  var __t,
10277
10381
  __p = '';
10278
10382
 
10279
- __p += '<div class="text_tracks_container">\n <div class="files_upload_panel">\n <div class="files_panel">\n </div>\n <a class="upload" href="">' + ((__t = I18n.t('pageflow.editor.templates.text_tracks.upload')) == null ? '' : __t) + '</a>\n </div>\n\n <div class="selected_file_panel">\n <h2 class="selected_file_header">' + ((__t = I18n.t('pageflow.editor.templates.text_tracks.edit_file_header')) == null ? '' : __t) + '</h2>\n <div class="selected_file_region">\n </div>\n </div>\n</div>\n';
10383
+ __p += '<div class="text_tracks_container">\n <div class="files_upload_panel">\n <div class="files_panel">\n </div>\n <a class="upload" href="">' + ((__t = I18n.t('pageflow.editor.templates.text_tracks.upload')) == null ? '' : __t) + '</a>\n </div>\n\n <div class="selected_file_panel">\n <h2 class="selected_file_header dialog-sub_header">' + ((__t = I18n.t('pageflow.editor.templates.text_tracks.edit_file_header')) == null ? '' : __t) + '</h2>\n <div class="selected_file_region">\n </div>\n </div>\n</div>\n';
10280
10384
  return __p;
10281
10385
  }
10282
10386
 
10283
10387
  var TextTracksView = Marionette.Layout.extend({
10284
- template: template$N,
10388
+ template: template$L,
10285
10389
  className: 'text_tracks',
10286
10390
  regions: {
10287
10391
  selectedFileRegion: '.selected_file_region'
@@ -10319,6 +10423,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10319
10423
  if (selectedFile) {
10320
10424
  this.selectedFileRegion.show(new EditFileView({
10321
10425
  model: selectedFile,
10426
+ displayFileName: true,
10322
10427
  attributeTranslationKeyPrefixes: ['pageflow.editor.nested_files.text_track_files']
10323
10428
  }));
10324
10429
  this.ui.selectedFileHeader.toggle(true);
@@ -10343,7 +10448,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10343
10448
  }
10344
10449
  });
10345
10450
 
10346
- function template$O(data) {
10451
+ function template$M(data) {
10347
10452
  var __p = '';
10348
10453
  __p += '<label>\n <span class="list_label"></span>\n</label>\n\n<ul class="list_items"></ul>\n';
10349
10454
  return __p;
@@ -10390,7 +10495,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10390
10495
 
10391
10496
 
10392
10497
  var ListView = Marionette.ItemView.extend({
10393
- template: template$O,
10498
+ template: template$M,
10394
10499
  className: 'list',
10395
10500
  ui: {
10396
10501
  label: '.list_label',
@@ -10590,6 +10695,17 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10590
10695
  }
10591
10696
  })
10592
10697
  });
10698
+ editor.widgetTypes.register('consent_bar', {
10699
+ configurationEditorView: ConfigurationEditorView.extend({
10700
+ configure: function configure() {
10701
+ this.tab('consent_bar', function () {
10702
+ this.view(InfoBoxView, {
10703
+ text: I18n$1.t('pageflow.editor.consent_bar.widget_type_info_box_text')
10704
+ });
10705
+ });
10706
+ }
10707
+ })
10708
+ });
10593
10709
  editor.widgetTypes.registerRole('cookie_notice', {
10594
10710
  isOptional: true
10595
10711
  });
@@ -10898,9 +11014,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10898
11014
  }
10899
11015
  });
10900
11016
  });
10901
- app.addInitializer(function ()
10902
- /* args */
10903
- {
11017
+ app.addInitializer(function () {
10904
11018
  var context = this;
10905
11019
  var args = arguments;
10906
11020
 
@@ -10994,7 +11108,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
10994
11108
  }
10995
11109
  });
10996
11110
 
10997
- function template$P(data) {
11111
+ function template$N(data) {
10998
11112
  var __t, __p = '';
10999
11113
  __p += '<a href="">\n <span class="type_pictogram"></span>\n <span class="page_thumbnail"></span>\n <span class="title"></span>\n <span class="failure_icon" title="' +
11000
11114
  ((__t = ( I18n.t('pageflow.editor.templates.page_item.save_error') )) == null ? '' : __t) +
@@ -11004,7 +11118,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11004
11118
 
11005
11119
  var PageItemView = Marionette.ItemView.extend({
11006
11120
  tagName: 'li',
11007
- template: template$P,
11121
+ template: template$N,
11008
11122
  ui: {
11009
11123
  title: '.title',
11010
11124
  pictogram: '.type_pictogram',
@@ -11024,19 +11138,29 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11024
11138
  update: function update() {
11025
11139
  this.$el.attr('data-id', this.model.id);
11026
11140
  this.$el.attr('data-perma-id', this.model.get('perma_id'));
11141
+ this.$el.attr('title', this._getItemTitle());
11027
11142
  this.$el.toggleClass('active', this.model.get('active'));
11028
11143
  this.$el.toggleClass('disabled', !!(this.options.isDisabled && this.options.isDisabled(this.model)));
11029
- this.$el.toggleClass('display_in_navigation', !!this.model.configuration.get('display_in_navigation'));
11144
+ this.$el.toggleClass('hide_in_navigation', !this.model.configuration.get('display_in_navigation'));
11030
11145
  this.$el.removeClass(editor.pageTypes.pluck('name').join(' ')).addClass(this.model.get('template'));
11031
11146
  this.ui.pictogram.attr('title', this._getPictogramTitle());
11032
- this.ui.title.text(this.model.title() || I18n$1.t('pageflow.editor.views.page_item_view.unnamed'));
11147
+ this.ui.title.text(this._getTitle());
11033
11148
  },
11034
11149
  _getPictogramTitle: function _getPictogramTitle() {
11035
- var result = I18n$1.t(this.model.pageType().translationKey());
11036
- result += ' Seite';
11150
+ return I18n$1.t(this.model.pageType().translationKey()) + ' Seite';
11151
+ },
11152
+ _getItemTitle: function _getItemTitle() {
11153
+ if (this.options.displayInNavigationHint && !this.model.configuration.get('display_in_navigation')) {
11154
+ return 'nicht in Navigationsleiste';
11155
+ }
11156
+
11157
+ return '';
11158
+ },
11159
+ _getTitle: function _getTitle() {
11160
+ var result = this.model.title() || I18n$1.t('pageflow.editor.views.page_item_view.unnamed');
11037
11161
 
11038
11162
  if (this.options.displayInNavigationHint && !this.model.configuration.get('display_in_navigation')) {
11039
- result += ' (nicht in Navigationsleiste)';
11163
+ return "(".concat(result, ")");
11040
11164
  }
11041
11165
 
11042
11166
  return result;
@@ -11059,9 +11183,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11059
11183
  }
11060
11184
  });
11061
11185
 
11062
- function template$Q(data) {
11186
+ function template$O(data) {
11063
11187
  var __t, __p = '';
11064
- __p += '<a class="edit_chapter" href="">\n <span class="pictogram"></span>\n <span class="number"></span>\n <span class="title"></span>\n <span class="failure_icon" title=' +
11188
+ __p += '<a class="edit_chapter" href="">\n <span class="drag_handle"></span>\n <span class="number"></span>\n <span class="title"></span>\n <span class="failure_icon" title=' +
11065
11189
  ((__t = ( I18n.t('pageflow.editor.templates.chapter_item.save_error') )) == null ? '' : __t) +
11066
11190
  ' />\n</a>\n\n<ul class="pages outline"></ul>\n\n<a href="" class="add_page">' +
11067
11191
  ((__t = ( I18n.t('pageflow.editor.templates.chapter_item.new_page') )) == null ? '' : __t) +
@@ -11071,7 +11195,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11071
11195
 
11072
11196
  var ChapterItemView = Marionette.ItemView.extend({
11073
11197
  tagName: 'li',
11074
- template: template$Q,
11198
+ template: template$O,
11075
11199
  ui: {
11076
11200
  title: '> a > .title',
11077
11201
  number: '> a > .number',
@@ -11099,6 +11223,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11099
11223
 
11100
11224
  var NavigatableChapterItemView = ChapterItemView.extend({
11101
11225
  mixins: [loadable, failureIndicatingView],
11226
+ className: 'draggable',
11102
11227
  events: {
11103
11228
  'click a.add_page': function clickAAdd_page() {
11104
11229
  this.model.addPage();
@@ -11115,18 +11240,18 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11115
11240
  }
11116
11241
  });
11117
11242
 
11118
- function template$R(data) {
11243
+ function template$P(data) {
11119
11244
  var __t, __p = '';
11120
11245
  __p += '<h2>' +
11121
11246
  ((__t = ( I18n.t('pageflow.editor.templates.storyline_outline.header') )) == null ? '' : __t) +
11122
- '</h2>\n<ul class="storyline_outline_chapters chapters"></ul>\n\n<a class="add_chapter" href="">' +
11247
+ '</h2>\n<ul class="storyline_outline_chapters chapters outline"></ul>\n\n<a class="add_chapter" href="">' +
11123
11248
  ((__t = ( I18n.t('pageflow.editor.templates.storyline_outline.new_chapter') )) == null ? '' : __t) +
11124
11249
  '</a>\n';
11125
11250
  return __p
11126
11251
  }
11127
11252
 
11128
11253
  var StorylineOutlineView = Marionette.Layout.extend({
11129
- template: template$R,
11254
+ template: template$P,
11130
11255
  className: 'storyline_outline',
11131
11256
  ui: {
11132
11257
  chapters: 'ul.storyline_outline_chapters'
@@ -11137,7 +11262,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11137
11262
  }
11138
11263
  },
11139
11264
  onRender: function onRender() {
11140
- this.ui.chapters.toggleClass('outline navigatable', !!this.options.navigatable);
11265
+ this.ui.chapters.toggleClass('navigatable', !!this.options.navigatable);
11141
11266
  var collectionView = this.options.sortable ? SortableCollectionView : CollectionView;
11142
11267
  new collectionView({
11143
11268
  el: this.ui.chapters,
@@ -11154,7 +11279,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11154
11279
  }
11155
11280
  });
11156
11281
 
11157
- function template$S(data) {
11282
+ function template$Q(data) {
11158
11283
  var __t, __p = '';
11159
11284
  __p += '<div class="storyline_picker_storylines">\n <div class="storyline_picker_select_region"></div>\n <a href="" class="add_storyline" title="' +
11160
11285
  ((__t = ( I18n.t('pageflow.editor.templates.storyline_picker.add') )) == null ? '' : __t) +
@@ -11165,7 +11290,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11165
11290
  }
11166
11291
 
11167
11292
  var StorylinePickerView = Marionette.Layout.extend({
11168
- template: template$S,
11293
+ template: template$Q,
11169
11294
  className: 'storyline_picker',
11170
11295
  regions: {
11171
11296
  selectRegion: '.storyline_picker_select_region',
@@ -11269,7 +11394,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11269
11394
  }, options));
11270
11395
  };
11271
11396
 
11272
- function template$T(data) {
11397
+ function template$R(data) {
11273
11398
  var __t, __p = '';
11274
11399
  __p += '<h2>' +
11275
11400
  ((__t = ( I18n.t('pageflow.editor.blank_entry.header') )) == null ? '' : __t) +
@@ -11288,7 +11413,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11288
11413
  }
11289
11414
 
11290
11415
  var BlankEntryView = Marionette.ItemView.extend({
11291
- template: template$T,
11416
+ template: template$R,
11292
11417
  className: 'blank_entry'
11293
11418
  });
11294
11419
 
@@ -11385,7 +11510,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11385
11510
  }
11386
11511
  });
11387
11512
 
11388
- function template$U(data) {
11513
+ function template$S(data) {
11389
11514
  var __t, __p = '';
11390
11515
  __p += '<div class="container">\n <div class="header"></div>\n <div class="overview"></div>\n\n <div class="entry"></div>\n</div>\n<div class="navigation_disabled_hint">\n ' +
11391
11516
  ((__t = ( I18n.t('pageflow.editor.templates.entry_preview.navigation_disabled_hint') )) == null ? '' : __t) +
@@ -11394,7 +11519,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11394
11519
  }
11395
11520
 
11396
11521
  var EntryPreviewView = Marionette.ItemView.extend({
11397
- template: template$U,
11522
+ template: template$S,
11398
11523
  className: 'entry_preview',
11399
11524
  ui: {
11400
11525
  container: '> .container',
@@ -11569,19 +11694,19 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11569
11694
  }
11570
11695
  };
11571
11696
 
11572
- function template$V(data) {
11697
+ function template$T(data) {
11573
11698
  var __t, __p = '';
11574
- __p += '<div class="box">\n <h2>' +
11699
+ __p += '<div class="box">\n <h1 class="dialog-header">\n ' +
11575
11700
  ((__t = ( I18n.t('pageflow.editor.templates.page_selection.title') )) == null ? '' : __t) +
11576
- '</h2>\n\n <div class="wrapper editor">\n <div class="storyline_picker">\n </div>\n </div>\n\n <div class="footer">\n <a href="" class="close">' +
11701
+ '\n </h1>\n\n <div class="content">\n <div class="storyline_picker">\n </div>\n </div>\n\n <div class="footer">\n <a href="" class="close">' +
11577
11702
  ((__t = ( I18n.t('pageflow.editor.templates.page_selection.cancel') )) == null ? '' : __t) +
11578
11703
  '</a>\n </div>\n</div>\n';
11579
11704
  return __p
11580
11705
  }
11581
11706
 
11582
11707
  var PageSelectionView = Marionette.ItemView.extend({
11583
- template: template$V,
11584
- className: 'page_selection dialog',
11708
+ template: template$T,
11709
+ className: 'page_selection dialog editor',
11585
11710
  mixins: [dialogView],
11586
11711
  ui: {
11587
11712
  storylines: '.storyline_picker',
@@ -11633,7 +11758,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11633
11758
  }
11634
11759
  });
11635
11760
 
11636
- function template$W(data) {
11761
+ function template$U(data) {
11637
11762
  var __t, __p = '';
11638
11763
  __p += '<a class="back">' +
11639
11764
  ((__t = ( I18n.t('pageflow.editor.templates.edit_chapter.outline') )) == null ? '' : __t) +
@@ -11648,7 +11773,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11648
11773
  }
11649
11774
 
11650
11775
  var EditChapterView = Marionette.Layout.extend({
11651
- template: template$W,
11776
+ template: template$U,
11652
11777
  className: 'edit_chapter',
11653
11778
  mixins: [failureIndicatingView],
11654
11779
  regions: {
@@ -11690,7 +11815,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11690
11815
  }
11691
11816
  });
11692
11817
 
11693
- function template$X(data) {
11818
+ function template$V(data) {
11694
11819
  var __t, __p = '';
11695
11820
  __p += '<a class="back">' +
11696
11821
  ((__t = ( I18n.t('pageflow.editor.templates.edit_page_link.back') )) == null ? '' : __t) +
@@ -11701,7 +11826,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11701
11826
  }
11702
11827
 
11703
11828
  var EditPageLinkView = Marionette.Layout.extend({
11704
- template: template$X,
11829
+ template: template$V,
11705
11830
  regions: {
11706
11831
  formContainer: '.form_container'
11707
11832
  },
@@ -11740,7 +11865,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11740
11865
  }
11741
11866
  });
11742
11867
 
11743
- function template$Y(data) {
11868
+ function template$W(data) {
11744
11869
  var __t, __p = '';
11745
11870
  __p += '<a class="back">' +
11746
11871
  ((__t = ( I18n.t('pageflow.editor.templates.edit_page.outline') )) == null ? '' : __t) +
@@ -11755,7 +11880,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11755
11880
  }
11756
11881
 
11757
11882
  var EditPageView = Marionette.Layout.extend({
11758
- template: template$Y,
11883
+ template: template$W,
11759
11884
  className: 'edit_page',
11760
11885
  mixins: [failureIndicatingView],
11761
11886
  regions: {
@@ -11825,7 +11950,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11825
11950
  }
11826
11951
  });
11827
11952
 
11828
- function template$Z(data) {
11953
+ function template$X(data) {
11829
11954
  var __t, __p = '';
11830
11955
  __p += '<a class="back">' +
11831
11956
  ((__t = ( I18n.t('pageflow.editor.templates.edit_storyline.outline') )) == null ? '' : __t) +
@@ -11840,7 +11965,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
11840
11965
  }
11841
11966
 
11842
11967
  var EditStorylineView = Marionette.Layout.extend({
11843
- template: template$Z,
11968
+ template: template$X,
11844
11969
  className: 'edit_storyline',
11845
11970
  mixins: [failureIndicatingView, tooltipContainer],
11846
11971
  regions: {
@@ -12059,6 +12184,9 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12059
12184
  });
12060
12185
  this.tab('options', function () {
12061
12186
  this.input('autoplay', CheckBoxInputView);
12187
+ this.input('smart_contain', CheckBoxInputView, {
12188
+ storeInverted: 'contain'
12189
+ });
12062
12190
 
12063
12191
  if (frontend.features.isEnabled('auto_change_page')) {
12064
12192
  this.input('auto_change_page_on_ended', CheckBoxInputView);
@@ -12349,6 +12477,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12349
12477
  exports.InfoBoxView = InfoBoxView;
12350
12478
  exports.InvalidNestedTypeError = InvalidNestedTypeError;
12351
12479
  exports.JsonInputView = JsonInputView;
12480
+ exports.LabelOnlyView = LabelOnlyView;
12352
12481
  exports.LazyVideoEmbeddedView = LazyVideoEmbeddedView;
12353
12482
  exports.ListItemView = ListItemView;
12354
12483
  exports.ListView = ListView;
@@ -12386,6 +12515,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12386
12515
  exports.ScrollingView = ScrollingView;
12387
12516
  exports.SelectButtonView = SelectButtonView;
12388
12517
  exports.SelectInputView = SelectInputView;
12518
+ exports.SeparatorView = SeparatorView;
12389
12519
  exports.SidebarController = SidebarController;
12390
12520
  exports.SidebarFooterView = SidebarFooterView;
12391
12521
  exports.SidebarRouter = SidebarRouter;
@@ -12456,6 +12586,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12456
12586
  exports.polling = polling;
12457
12587
  exports.retryable = retryable;
12458
12588
  exports.selectableView = selectableView;
12589
+ exports.serverSideValidation = serverSideValidation;
12459
12590
  exports.stageProvider = stageProvider;
12460
12591
  exports.startEditor = startEditor;
12461
12592
  exports.state = state;
@@ -12464,6 +12595,7 @@ var pageflow_paged = (function (exports, Backbone, _, Marionette, $, I18n$1, Chi
12464
12595
  exports.tooltipContainer = tooltipContainer;
12465
12596
  exports.transientReferences = transientReferences;
12466
12597
  exports.validFileTypeTranslationList = validFileTypeTranslationList;
12598
+ exports.viewWithValidationErrorMessages = viewWithValidationErrorMessages;
12467
12599
 
12468
12600
  return exports;
12469
12601