pageflow 17.0.5 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +362 -35
  3. data/README.md +0 -1
  4. data/admins/pageflow/accounts.rb +16 -14
  5. data/admins/pageflow/entry.rb +68 -20
  6. data/admins/pageflow/entry_templates.rb +10 -9
  7. data/admins/pageflow/folder.rb +1 -1
  8. data/admins/pageflow/membership.rb +4 -4
  9. data/admins/pageflow/revisions.rb +5 -5
  10. data/admins/pageflow/site_root_entry.rb +64 -0
  11. data/admins/pageflow/sites.rb +12 -3
  12. data/admins/pageflow/translations.rb +75 -0
  13. data/admins/pageflow/user.rb +21 -35
  14. data/app/assets/javascripts/pageflow/admin/entries.js +30 -5
  15. data/app/assets/javascripts/pageflow/dist/ui.js +2865 -257
  16. data/app/assets/stylesheets/pageflow/admin/entries/index_table.scss +2 -1
  17. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +2 -1
  18. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +6 -0
  19. data/app/assets/stylesheets/pageflow/editor/base.scss +2 -0
  20. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +7 -1
  21. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +5 -1
  22. data/app/assets/stylesheets/pageflow/editor/files.scss +28 -16
  23. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +24 -0
  24. data/app/assets/stylesheets/pageflow/editor/info_box.scss +11 -3
  25. data/app/assets/stylesheets/pageflow/editor/list.scss +6 -4
  26. data/app/assets/stylesheets/pageflow/editor/list_search_field.scss +52 -0
  27. data/app/assets/stylesheets/pageflow/editor/outline.scss +0 -13
  28. data/app/assets/stylesheets/pageflow/editor/select_button.scss +1 -1
  29. data/app/assets/stylesheets/pageflow/editor/sortable.scss +12 -0
  30. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +4 -4
  31. data/app/assets/stylesheets/pageflow/ui/forms.scss +4 -0
  32. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +8 -0
  33. data/app/assets/stylesheets/pageflow/ui/input/file_name_input.scss +37 -0
  34. data/app/assets/stylesheets/pageflow/ui/properties.scss +5 -0
  35. data/app/assets/stylesheets/pageflow/ui.scss +1 -0
  36. data/app/controllers/concerns/pageflow/controller_delegation.rb +1 -1
  37. data/app/controllers/concerns/pageflow/edit_locking.rb +17 -10
  38. data/app/controllers/concerns/pageflow/entry_password_protection.rb +1 -0
  39. data/app/controllers/concerns/pageflow/public_https_mode.rb +2 -1
  40. data/app/controllers/concerns/pageflow/quota_verification.rb +5 -4
  41. data/app/controllers/pageflow/admin/initial_passwords_controller.rb +1 -0
  42. data/app/controllers/pageflow/application_controller.rb +19 -19
  43. data/app/controllers/pageflow/chapters_controller.rb +3 -2
  44. data/app/controllers/pageflow/edit_locks_controller.rb +3 -2
  45. data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +1 -0
  46. data/app/controllers/pageflow/editor/entries_controller.rb +2 -1
  47. data/app/controllers/pageflow/editor/entry_publications_controller.rb +1 -0
  48. data/app/controllers/pageflow/editor/file_import_controller.rb +3 -3
  49. data/app/controllers/pageflow/editor/files_controller.rb +7 -6
  50. data/app/controllers/pageflow/editor/widgets_controller.rb +1 -0
  51. data/app/controllers/pageflow/entries_controller.rb +77 -17
  52. data/app/controllers/pageflow/feeds_controller.rb +1 -1
  53. data/app/controllers/pageflow/files_controller.rb +1 -0
  54. data/app/controllers/pageflow/pages_controller.rb +4 -2
  55. data/app/controllers/pageflow/revisions_controller.rb +2 -1
  56. data/app/controllers/pageflow/sitemaps_controller.rb +1 -1
  57. data/app/controllers/pageflow/storylines_controller.rb +1 -0
  58. data/app/helpers/pageflow/admin/cutoff_modes_helper.rb +12 -0
  59. data/app/helpers/pageflow/admin/entries_helper.rb +1 -1
  60. data/app/helpers/pageflow/admin/entry_translations_helper.rb +18 -0
  61. data/app/helpers/pageflow/admin/features_helper.rb +1 -1
  62. data/app/helpers/pageflow/admin/form_helper.rb +3 -3
  63. data/app/helpers/pageflow/admin/locales_helper.rb +10 -2
  64. data/app/helpers/pageflow/admin/memberships_helper.rb +32 -32
  65. data/app/helpers/pageflow/admin/revisions_helper.rb +1 -1
  66. data/app/helpers/pageflow/admin/sites_helper.rb +22 -0
  67. data/app/helpers/pageflow/admin/users_helper.rb +7 -5
  68. data/app/helpers/pageflow/admin/widgets_helper.rb +3 -3
  69. data/app/helpers/pageflow/asset_urls_helper.rb +1 -1
  70. data/app/helpers/pageflow/audio_files_helper.rb +5 -2
  71. data/app/helpers/pageflow/background_image_helper.rb +7 -6
  72. data/app/helpers/pageflow/common_entry_seed_helper.rb +2 -4
  73. data/app/helpers/pageflow/editor/config_helper.rb +1 -1
  74. data/app/helpers/pageflow/editor/files_helper.rb +1 -1
  75. data/app/helpers/pageflow/embed_code_helper.rb +3 -3
  76. data/app/helpers/pageflow/entries_helper.rb +58 -34
  77. data/app/helpers/pageflow/entry_json_seed_helper.rb +3 -2
  78. data/app/helpers/pageflow/feeds_helper.rb +2 -2
  79. data/app/helpers/pageflow/file_background_images_helper.rb +2 -2
  80. data/app/helpers/pageflow/file_thumbnails_helper.rb +4 -3
  81. data/app/helpers/pageflow/files_helper.rb +5 -4
  82. data/app/helpers/pageflow/folders_helper.rb +8 -5
  83. data/app/helpers/pageflow/help_entries_helper.rb +2 -2
  84. data/app/helpers/pageflow/hreflang_links_helper.rb +37 -0
  85. data/app/helpers/pageflow/info_box_helper.rb +7 -11
  86. data/app/helpers/pageflow/media_query_helper.rb +3 -3
  87. data/app/helpers/pageflow/navigation_bar_helper.rb +1 -1
  88. data/app/helpers/pageflow/overview_helper.rb +1 -1
  89. data/app/helpers/pageflow/page_types_helper.rb +5 -5
  90. data/app/helpers/pageflow/pages_helper.rb +29 -15
  91. data/app/helpers/pageflow/public_i18n_helper.rb +1 -1
  92. data/app/helpers/pageflow/quota_helper.rb +4 -4
  93. data/app/helpers/pageflow/render_json_helper.rb +6 -3
  94. data/app/helpers/pageflow/revision_file_helper.rb +2 -1
  95. data/app/helpers/pageflow/sites_helper.rb +3 -3
  96. data/app/helpers/pageflow/social_share_helper.rb +24 -10
  97. data/app/helpers/pageflow/social_share_links_helper.rb +12 -9
  98. data/app/helpers/pageflow/structured_data_helper.rb +1 -1
  99. data/app/helpers/pageflow/stub_page_configuration.rb +7 -3
  100. data/app/helpers/pageflow/text_direction_helper.rb +1 -1
  101. data/app/helpers/pageflow/themes_helper.rb +1 -1
  102. data/app/helpers/pageflow/video_files_helper.rb +29 -13
  103. data/app/helpers/pageflow/widgets_helper.rb +7 -6
  104. data/app/inputs/pageflow_permalink_input.rb +3 -2
  105. data/app/jobs/pageflow/application_job.rb +1 -0
  106. data/app/jobs/pageflow/entry_export_import/upload_and_publish_file_job.rb +1 -1
  107. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -0
  108. data/app/jobs/pageflow/poll_zencoder_job.rb +3 -2
  109. data/app/jobs/pageflow/process_image_or_text_track_job.rb +1 -0
  110. data/app/jobs/pageflow/prune_auto_snapshots_job.rb +1 -0
  111. data/app/jobs/pageflow/request_meta_data_from_zencoder_job.rb +1 -0
  112. data/app/jobs/pageflow/submit_file_to_zencoder_job.rb +1 -0
  113. data/app/mailers/pageflow/user_mailer.rb +1 -0
  114. data/app/models/concerns/pageflow/auto_generated_perma_id.rb +13 -1
  115. data/app/models/concerns/pageflow/entry_publication_states.rb +7 -3
  116. data/app/models/concerns/pageflow/feature_target.rb +8 -4
  117. data/app/models/concerns/pageflow/output_source.rb +3 -3
  118. data/app/models/concerns/pageflow/permalinkable.rb +2 -1
  119. data/app/models/concerns/pageflow/reusable_file.rb +23 -23
  120. data/app/models/concerns/pageflow/serialization_blacklist.rb +1 -1
  121. data/app/models/concerns/pageflow/suspendable.rb +5 -3
  122. data/app/models/concerns/pageflow/theme_referencer.rb +1 -1
  123. data/app/models/concerns/pageflow/translatable.rb +62 -0
  124. data/app/models/concerns/pageflow/uploadable_file.rb +6 -6
  125. data/app/models/pageflow/account.rb +6 -5
  126. data/app/models/pageflow/account_member_query.rb +1 -1
  127. data/app/models/pageflow/account_role_query.rb +1 -1
  128. data/app/models/pageflow/application_query.rb +1 -1
  129. data/app/models/pageflow/application_record.rb +1 -1
  130. data/app/models/pageflow/audio_file.rb +4 -4
  131. data/app/models/pageflow/audio_file_url_templates.rb +1 -1
  132. data/app/models/pageflow/authentication_token.rb +2 -2
  133. data/app/models/pageflow/chapter.rb +6 -1
  134. data/app/models/pageflow/chapter_scaffold.rb +2 -4
  135. data/app/models/pageflow/cname_site_request_scope.rb +1 -1
  136. data/app/models/pageflow/customized_theme.rb +6 -6
  137. data/app/models/pageflow/draft_entry.rb +37 -9
  138. data/app/models/pageflow/edit_lock.rb +19 -21
  139. data/app/models/pageflow/encoding_confirmation.rb +2 -2
  140. data/app/models/pageflow/entries_feed.rb +2 -2
  141. data/app/models/pageflow/entry.rb +44 -30
  142. data/app/models/pageflow/entry_at_revision.rb +5 -1
  143. data/app/models/pageflow/entry_duplicate.rb +8 -5
  144. data/app/models/pageflow/entry_publication.rb +2 -2
  145. data/app/models/pageflow/entry_role_query.rb +4 -4
  146. data/app/models/pageflow/entry_template.rb +4 -4
  147. data/app/models/pageflow/entry_title_or_account_name_query.rb +2 -2
  148. data/app/models/pageflow/entry_translation_group.rb +42 -0
  149. data/app/models/pageflow/file_reuse.rb +2 -2
  150. data/app/models/pageflow/file_usage.rb +10 -3
  151. data/app/models/pageflow/folder.rb +2 -2
  152. data/app/models/pageflow/home_button.rb +7 -7
  153. data/app/models/pageflow/image_file.rb +20 -5
  154. data/app/models/pageflow/image_file_url_templates.rb +1 -1
  155. data/app/models/pageflow/invitation_form.rb +2 -1
  156. data/app/models/pageflow/managed_user_query.rb +1 -1
  157. data/app/models/pageflow/membership.rb +5 -5
  158. data/app/models/pageflow/nested_revision_component_copy.rb +263 -0
  159. data/app/models/pageflow/null_user.rb +1 -1
  160. data/app/models/pageflow/overview_button.rb +1 -1
  161. data/app/models/pageflow/page.rb +7 -3
  162. data/app/models/pageflow/permalink.rb +23 -2
  163. data/app/models/pageflow/permalink_directory.rb +7 -0
  164. data/app/models/pageflow/permalink_redirect.rb +7 -0
  165. data/app/models/pageflow/positioned_file.rb +5 -5
  166. data/app/models/pageflow/potential_entry_translations.rb +55 -0
  167. data/app/models/pageflow/potential_memberships.rb +5 -4
  168. data/app/models/pageflow/published_entry.rb +62 -11
  169. data/app/models/pageflow/revision.rb +24 -15
  170. data/app/models/pageflow/roles.rb +14 -18
  171. data/app/models/pageflow/site.rb +36 -3
  172. data/app/models/pageflow/site_root_entry_form.rb +27 -0
  173. data/app/models/pageflow/sitemaps.rb +10 -1
  174. data/app/models/pageflow/storyline.rb +5 -2
  175. data/app/models/pageflow/storyline_scaffold.rb +1 -1
  176. data/app/models/pageflow/text_track_file.rb +1 -1
  177. data/app/models/pageflow/text_track_file_url_templates.rb +1 -1
  178. data/app/models/pageflow/theme_customization_file.rb +3 -2
  179. data/app/models/pageflow/thumbnail_file_resolver.rb +1 -1
  180. data/app/models/pageflow/url_template.rb +1 -1
  181. data/app/models/pageflow/used_file.rb +7 -3
  182. data/app/models/pageflow/user_name_query.rb +2 -2
  183. data/app/models/pageflow/video_file.rb +22 -15
  184. data/app/models/pageflow/video_file_url_templates.rb +6 -4
  185. data/app/models/pageflow/widget.rb +4 -3
  186. data/app/models/pageflow/with_file_usage_extension.rb +1 -1
  187. data/app/models/pageflow/zencoder_attachment.rb +8 -8
  188. data/app/policies/pageflow/account_policy.rb +3 -1
  189. data/app/policies/pageflow/admin/admin_only_tab_policy.rb +1 -0
  190. data/app/policies/pageflow/admin/entry_tab_policy.rb +1 -0
  191. data/app/policies/pageflow/application_policy.rb +2 -0
  192. data/app/policies/pageflow/entry_policy.rb +7 -1
  193. data/app/policies/pageflow/entry_template_policy.rb +2 -1
  194. data/app/policies/pageflow/file_policy.rb +4 -7
  195. data/app/policies/pageflow/folder_policy.rb +18 -8
  196. data/app/policies/pageflow/membership_policy.rb +6 -4
  197. data/app/policies/pageflow/site_policy.rb +10 -3
  198. data/app/policies/pageflow/user_policy.rb +6 -4
  199. data/app/state_machines/pageflow/image_and_text_track_processing_state_machine.rb +3 -2
  200. data/app/state_machines/pageflow/media_encoding_state_machine.rb +5 -4
  201. data/app/views/admin/accounts/_entry_template_details.html.arb +2 -2
  202. data/app/views/admin/entries/_attributes_table.html.arb +6 -5
  203. data/app/views/admin/entries/_form.html.erb +2 -1
  204. data/app/views/admin/entries/_permalink_inputs.html.erb +9 -2
  205. data/app/views/admin/entry_templates/_form.html.erb +1 -3
  206. data/app/views/admin/site_root_entry/choose.html.erb +19 -0
  207. data/app/views/admin/sites/_fields.html.erb +14 -1
  208. data/app/views/admin/translations/_form.html.erb +31 -0
  209. data/app/views/admin/users/_attributes_table.html.arb +13 -0
  210. data/app/views/components/pageflow/admin/add_membership_button.rb +13 -12
  211. data/app/views/components/pageflow/admin/custom_scopes_renderer.rb +1 -0
  212. data/app/views/components/pageflow/admin/embed_code_field.rb +1 -0
  213. data/app/views/components/pageflow/admin/embedded_index_table.rb +9 -10
  214. data/app/views/components/pageflow/admin/entries_tab.rb +1 -0
  215. data/app/views/components/pageflow/admin/entry_publication_state_indicator.rb +6 -5
  216. data/app/views/components/pageflow/admin/entry_templates_tab.rb +2 -1
  217. data/app/views/components/pageflow/admin/entry_translations_tab.rb +102 -0
  218. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +1 -0
  219. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +9 -8
  220. data/app/views/components/pageflow/admin/features_tab.rb +1 -0
  221. data/app/views/components/pageflow/admin/grouped_folder_list.rb +1 -0
  222. data/app/views/components/pageflow/admin/icon_link_to.rb +1 -0
  223. data/app/views/components/pageflow/admin/members_tab.rb +4 -3
  224. data/app/views/components/pageflow/admin/membership_role_with_tooltip.rb +3 -2
  225. data/app/views/components/pageflow/admin/revisions_tab.rb +14 -10
  226. data/app/views/components/pageflow/admin/sites_tab.rb +1 -0
  227. data/app/views/components/pageflow/admin/tabs_view.rb +1 -0
  228. data/app/views/components/pageflow/admin/timestamp.rb +6 -5
  229. data/app/views/components/pageflow/admin/user_account_badge_list.rb +2 -3
  230. data/app/views/components/pageflow/admin/user_accounts_tab.rb +1 -0
  231. data/app/views/components/pageflow/admin/user_entries_tab.rb +1 -0
  232. data/app/views/components/pageflow/admin/users_tab.rb +1 -0
  233. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -1
  234. data/app/views/pageflow/editor/entries/index.json.jbuilder +1 -1
  235. data/app/views/pageflow/editor/entries/show.json.jbuilder +1 -1
  236. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +2 -2
  237. data/app/views/pageflow/editor/files/_file.json.jbuilder +5 -13
  238. data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
  239. data/app/views/pageflow/editor/files/index.json.jbuilder +1 -1
  240. data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
  241. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +1 -3
  242. data/app/views/pageflow/entries/share_menu/_bluesky_link.html.erb +8 -0
  243. data/app/views/pageflow/entries/share_menu/_threads_link.html.erb +8 -0
  244. data/app/views/pageflow/files/_file.json.jbuilder +3 -3
  245. data/app/views/pageflow/sitemaps/index.xml.builder +9 -1
  246. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
  247. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
  248. data/config/initializers/active_admin_patches.rb +3 -6
  249. data/config/initializers/admin_resource_tabs.rb +3 -0
  250. data/config/initializers/paperclip.rb +1 -0
  251. data/config/initializers/symmetric_encryption.rb +1 -1
  252. data/config/initializers/zencoder.rb +24 -13
  253. data/config/locales/de.yml +110 -4
  254. data/config/locales/en.yml +109 -7
  255. data/config/routes.rb +15 -13
  256. data/config/spring.rb +2 -1
  257. data/db/migrate/20140418225525_setup_schema.rb +2 -2
  258. data/db/migrate/20190306161431_copy_file_attributes_of_failed_uploads.rb +2 -2
  259. data/db/migrate/20190820152900_drop_accounts_themes.rb +2 -1
  260. data/db/migrate/20191202145757_create_pageflow_scrolled_sections.rb +11 -11
  261. data/db/migrate/20191202150657_create_pageflow_scrolled_chapters.rb +1 -1
  262. data/db/migrate/20191202154723_create_pageflow_scrolled_content_elements.rb +9 -9
  263. data/db/migrate/20191219143450_add_position_to_content_elements.rb +2 -1
  264. data/db/migrate/20200117133200_change_revision_appearance_option_default_and_null.rb +2 -1
  265. data/db/migrate/20200122115400_create_pageflow_entry_templates.rb +25 -25
  266. data/db/migrate/20200206134400_convert_legacy_scrolled_content_element_types.rb +3 -3
  267. data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +2 -2
  268. data/db/migrate/20230120092923_create_other_files.rb +2 -1
  269. data/db/migrate/20230419083307_create_pageflow_entry_translation_group.rb +9 -0
  270. data/db/migrate/20240612110434_add_cutoff_mode_name_to_sites.rb +5 -0
  271. data/db/migrate/20240918084059_create_pageflow_permalink_redirects.rb +14 -0
  272. data/db/migrate/20250508172234_ensure_scrolled_entries_have_main_storyline.rb +14 -0
  273. data/db/migrate/20250617090048_add_custom404_entry_to_sites.rb +5 -0
  274. data/db/migrate/20250617100000_add_perma_id_counter_to_entries.rb +28 -0
  275. data/db/migrate/20250722174123_add_perma_id_to_chapters.rb +10 -0
  276. data/db/migrate/20250725080603_add_perma_id_indexes_to_revision_components.rb +13 -0
  277. data/db/migrate/20250726000000_add_display_name_to_file_usages.rb +5 -0
  278. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +3912 -1486
  279. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +468 -1161
  280. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +28125 -22
  281. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +26589 -19
  282. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  283. data/entry_types/paged/app/helpers/pageflow_paged/page_background_asset_helper.rb +1 -1
  284. data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +7 -7
  285. data/entry_types/paged/app/views/pageflow_paged/editor/entries/_seed.json.jbuilder +1 -0
  286. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  287. data/entry_types/paged/lib/pageflow_paged/plugin.rb +4 -0
  288. data/entry_types/paged/lib/pageflow_paged/react/page_type.rb +1 -1
  289. data/entry_types/paged/lib/pageflow_paged/react/widget_type.rb +3 -3
  290. data/entry_types/paged/lib/pageflow_paged.rb +1 -1
  291. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +5 -3
  292. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +2 -2
  293. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +2 -2
  294. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -1
  295. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +2 -2
  296. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +1 -0
  297. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +2 -1
  298. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +60 -6
  299. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +16 -2
  300. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +21 -23
  301. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +16 -1
  302. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +15 -14
  303. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +12 -0
  304. data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +12 -1
  305. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +19 -1
  306. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -0
  307. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +2 -2
  308. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +2 -0
  309. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +17 -9
  310. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry_translations.json.jbuilder +14 -0
  311. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +25 -5
  312. data/entry_types/scrolled/app/views/pageflow_scrolled/storylines/_storyline.json.jbuilder +7 -0
  313. data/entry_types/scrolled/config/locales/de.yml +614 -45
  314. data/entry_types/scrolled/config/locales/en.yml +586 -47
  315. data/entry_types/scrolled/config/routes.rb +18 -8
  316. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +11 -11
  317. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantDesktop.svg +56 -0
  318. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantMobile.svg +22 -0
  319. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +26 -11
  320. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +27 -8
  321. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
  322. data/entry_types/scrolled/lib/pageflow_scrolled/additional_theme_assets.rb +27 -0
  323. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +16 -4
  324. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +1 -1
  325. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -4
  326. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +24 -22
  327. data/entry_types/scrolled/lib/pageflow_scrolled.rb +1 -1
  328. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +6 -5
  329. data/entry_types/scrolled/package/config/webpack.js +22 -0
  330. data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -0
  331. data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1529 -0
  332. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.css +1 -0
  333. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +59 -0
  334. data/entry_types/scrolled/package/contentElements-editor.js +2075 -321
  335. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  336. data/entry_types/scrolled/package/contentElements-frontend.js +1019 -643
  337. data/entry_types/scrolled/package/editor.js +2086 -1091
  338. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-ebd22921.js → FloatingPortalRootProvider-51914be7.js} +1200 -1258
  339. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-4ec6b2de.js → PhonePlatformContext-9f76033e.js} +7 -8
  340. data/entry_types/scrolled/package/frontend/ThemeIcon-81f2f066.js +1932 -0
  341. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-788e9cdb.js +39 -0
  342. data/entry_types/scrolled/package/frontend/{Viewer-1bb5597c.js → Viewer-0345ce57.js} +36 -63
  343. data/entry_types/scrolled/package/frontend/{Viewer-1ecf3375.js → Viewer-cdc549cc.js} +15 -22
  344. data/entry_types/scrolled/package/frontend/{Wavesurfer-7d9cf1b7.js → Wavesurfer-1cdc3925.js} +54 -74
  345. data/entry_types/scrolled/package/frontend/{components-024a9893.js → components-96660ffd.js} +1791 -841
  346. data/entry_types/scrolled/package/frontend/{index-11f32f10.js → index-eb670c2f.js} +11 -18
  347. data/entry_types/scrolled/package/frontend/index.css +1 -1
  348. data/entry_types/scrolled/package/frontend/index.js +517 -903
  349. data/entry_types/scrolled/package/frontend/{createSuper-d0f30da3.js → inherits-539844a6.js} +40 -56
  350. data/entry_types/scrolled/package/frontend/{useContentElementEditorState-4f4c3cf6.js → useContentElementEditorState-77fe6c79.js} +7 -8
  351. data/entry_types/scrolled/package/frontend/usePhonePlatform-c2ba875d.js +8 -0
  352. data/entry_types/scrolled/package/frontend-server.js +0 -1
  353. data/entry_types/scrolled/package/package.json +18 -10
  354. data/entry_types/scrolled/package/testHelpers.js +306 -70
  355. data/entry_types/scrolled/package/values/widgets.module.css +18 -0
  356. data/entry_types/scrolled/package/widgets/consentBar.css +1 -1
  357. data/entry_types/scrolled/package/widgets/consentBar.js +47 -66
  358. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  359. data/entry_types/scrolled/package/widgets/defaultNavigation.js +177 -207
  360. data/entry_types/scrolled/package/widgets/excursionDialog.css +1 -0
  361. data/entry_types/scrolled/package/widgets/excursionDialog.js +109 -0
  362. data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -0
  363. data/entry_types/scrolled/package/widgets/excursionSheet.js +262 -0
  364. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
  365. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +6 -9
  366. data/entry_types/scrolled/package/widgets/iconScrollIndicator.css +1 -0
  367. data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +48 -0
  368. data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -0
  369. data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +144 -0
  370. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
  371. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +26 -9
  372. data/entry_types/scrolled/package/widgets-server.js +1 -0
  373. data/entry_types/scrolled/spec/factories/chapters.rb +14 -1
  374. data/entry_types/scrolled/spec/factories/content_elements.rb +1 -1
  375. data/lib/generators/pageflow/active_admin_initializer/active_admin_initializer_generator.rb +5 -3
  376. data/lib/generators/pageflow/assets/assets_generator.rb +7 -5
  377. data/lib/generators/pageflow/cancan/cancan_generator.rb +2 -1
  378. data/lib/generators/pageflow/cancan/templates/ability.rb +1 -1
  379. data/lib/generators/pageflow/error_pages/error_pages_generator.rb +2 -1
  380. data/lib/generators/pageflow/initializer/initializer_generator.rb +3 -2
  381. data/lib/generators/pageflow/install/install_generator.rb +2 -2
  382. data/lib/generators/pageflow/procfile/procfile_generator.rb +2 -1
  383. data/lib/generators/pageflow/resque/resque_generator.rb +6 -4
  384. data/lib/generators/pageflow/resque/templates/resque.rake +1 -1
  385. data/lib/generators/pageflow/routes/routes_generator.rb +4 -2
  386. data/lib/generators/pageflow/seeds/seeds_generator.rb +3 -2
  387. data/lib/generators/pageflow/seeds/templates/seeds.rb +6 -6
  388. data/lib/generators/pageflow/theme/theme_generator.rb +2 -1
  389. data/lib/generators/pageflow/user/user_generator.rb +2 -1
  390. data/lib/pageflow/ability_mixin.rb +25 -15
  391. data/lib/pageflow/active_admin_patches/views/attributes_table.rb +1 -0
  392. data/lib/pageflow/active_admin_patches/views/pages/base.rb +3 -2
  393. data/lib/pageflow/active_admin_patches/views/table_for.rb +1 -0
  394. data/lib/pageflow/additional_headers.rb +27 -0
  395. data/lib/pageflow/admin/attributes_table_rows.rb +3 -3
  396. data/lib/pageflow/admin/tabs.rb +1 -1
  397. data/lib/pageflow/built_in_file_type.rb +1 -1
  398. data/lib/pageflow/built_in_page_types_plugin.rb +1 -1
  399. data/lib/pageflow/built_in_widget_type.rb +2 -2
  400. data/lib/pageflow/built_in_widget_types_plugin.rb +2 -1
  401. data/lib/pageflow/configuration.rb +141 -18
  402. data/lib/pageflow/cutoff_modes.rb +39 -0
  403. data/lib/pageflow/editor_controller.rb +6 -10
  404. data/lib/pageflow/engine.rb +4 -5
  405. data/lib/pageflow/entry_export_import/attachment_files.rb +1 -1
  406. data/lib/pageflow/entry_export_import/entry_serialization.rb +5 -4
  407. data/lib/pageflow/entry_export_import/file_mappings.rb +1 -0
  408. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +1 -1
  409. data/lib/pageflow/entry_export_import.rb +3 -3
  410. data/lib/pageflow/entry_types.rb +2 -2
  411. data/lib/pageflow/feature.rb +1 -1
  412. data/lib/pageflow/features.rb +4 -6
  413. data/lib/pageflow/file_importers.rb +4 -4
  414. data/lib/pageflow/file_type.rb +3 -3
  415. data/lib/pageflow/file_types.rb +3 -3
  416. data/lib/pageflow/global_config_api.rb +5 -6
  417. data/lib/pageflow/help_entries.rb +7 -7
  418. data/lib/pageflow/help_entry.rb +1 -1
  419. data/lib/pageflow/hooks.rb +1 -1
  420. data/lib/pageflow/nested_revision_component.rb +9 -27
  421. data/lib/pageflow/news_item_api.rb +1 -1
  422. data/lib/pageflow/page_type.rb +2 -3
  423. data/lib/pageflow/page_types.rb +3 -3
  424. data/lib/pageflow/paperclip_interpolations/support.rb +1 -1
  425. data/lib/pageflow/paperclip_processors/vtt.rb +1 -0
  426. data/lib/pageflow/paperclip_processors/webp.rb +2 -2
  427. data/lib/pageflow/partial_editor_fragment_renderer.rb +2 -2
  428. data/lib/pageflow/plugin.rb +1 -2
  429. data/lib/pageflow/quota.rb +9 -5
  430. data/lib/pageflow/quotas.rb +1 -1
  431. data/lib/pageflow/rails_version.rb +1 -0
  432. data/lib/pageflow/react.rb +1 -1
  433. data/lib/pageflow/revision_component.rb +8 -40
  434. data/lib/pageflow/revision_components.rb +16 -6
  435. data/lib/pageflow/seeds.rb +12 -16
  436. data/lib/pageflow/theme.rb +1 -1
  437. data/lib/pageflow/theme_customizations.rb +10 -10
  438. data/lib/pageflow/themes.rb +3 -3
  439. data/lib/pageflow/user_mixin.rb +6 -6
  440. data/lib/pageflow/version.rb +1 -1
  441. data/lib/pageflow/widget_type.rb +4 -4
  442. data/lib/pageflow/widget_types.rb +9 -9
  443. data/lib/pageflow/zencoder_api.rb +32 -42
  444. data/lib/pageflow/zencoder_audio_output_definition.rb +14 -13
  445. data/lib/pageflow/zencoder_meta_data_output_definition.rb +3 -2
  446. data/lib/pageflow/zencoder_output_definition.rb +16 -14
  447. data/lib/pageflow/zencoder_video_output_definition.rb +140 -88
  448. data/lib/pageflow.rb +7 -2
  449. data/lib/tasks/pageflow_tasks.rake +1 -1
  450. data/package/editor.js +954 -868
  451. data/package/frontend.js +113 -387
  452. data/package/package.json +2 -1
  453. data/package/testHelpers.js +10 -56
  454. data/package/ui.js +209 -251
  455. data/spec/factories/accounts.rb +37 -22
  456. data/spec/factories/audio_files.rb +2 -2
  457. data/spec/factories/authentication_tokens.rb +4 -4
  458. data/spec/factories/chapters.rb +4 -4
  459. data/spec/factories/draft_entries.rb +14 -6
  460. data/spec/factories/edit_locks.rb +1 -1
  461. data/spec/factories/entries.rb +28 -19
  462. data/spec/factories/entry_translation_groups.rb +6 -0
  463. data/spec/factories/file_usages.rb +2 -1
  464. data/spec/factories/folders.rb +1 -1
  465. data/spec/factories/image_files.rb +2 -2
  466. data/spec/factories/pages.rb +3 -3
  467. data/spec/factories/published_entries.rb +26 -8
  468. data/spec/factories/revisions.rb +1 -1
  469. data/spec/factories/sites.rb +6 -0
  470. data/spec/factories/test_multi_attachment_files.rb +1 -1
  471. data/spec/factories/text_track_files.rb +1 -1
  472. data/spec/factories/uploadable_files.rb +1 -1
  473. data/spec/factories/users.rb +6 -6
  474. data/spec/factories/video_files.rb +2 -2
  475. data/spec/factories/widgets.rb +1 -1
  476. data/spec/fixtures/7x15_rotated.jpg +0 -0
  477. data/vendor/assets/javascripts/wysihtml-toolbar.js +19288 -0
  478. metadata +98 -45
  479. data/config/initializers/revision_components.rb +0 -5
  480. data/config/locales/twitter_to_x.de.yml +0 -6
  481. data/config/locales/twitter_to_x.en.yml +0 -6
  482. data/entry_types/scrolled/config/locales/twitter_to_x.de.yml +0 -12
  483. data/entry_types/scrolled/config/locales/twitter_to_x.en.yml +0 -12
  484. data/entry_types/scrolled/config/locales/vr_image_projection.de.yml +0 -24
  485. data/entry_types/scrolled/config/locales/vr_image_projection.en.yml +0 -24
  486. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-b79159cc.js +0 -107
  487. data/entry_types/scrolled/package/frontend/arrowRight-62998af9.js +0 -77
  488. data/entry_types/scrolled/package/frontend/i18n-ce13a8bf.js +0 -1129
@@ -1,5 +1,5 @@
1
- import { frontend } from 'pageflow-scrolled/frontend';
2
- import React from 'react';
1
+ import { useDarkBackground, useContentElementEditorState, frontend } from 'pageflow-scrolled/frontend';
2
+ import React, { useEffect } from 'react';
3
3
  import classNames from 'classnames';
4
4
 
5
5
  function _defineProperty(obj, key, value) {
@@ -17,18 +17,35 @@ function _defineProperty(obj, key, value) {
17
17
  return obj;
18
18
  }
19
19
 
20
- var styles = {"text":"TextInlineFileRights-module_text__1tT0W","forSection":"TextInlineFileRights-module_forSection__22xHD"};
20
+ var styles = {"darkContentSurfaceColor":"var(--theme-dark-content-surface-color, #101010)","lightContentSurfaceColor":"var(--theme-light-content-surface-color, #fff)","darkContentTextColor":"var(--theme-dark-content-text-color, #222)","lightContentTextColor":"var(--theme-light-content-text-color, #fff)","contentColorScope":"colors-module_contentColorScope__3ypcw","text":"TextInlineFileRights-module_text__1tT0W","withBackdrop":"TextInlineFileRights-module_withBackdrop__2cRu8","darkBackground":"TextInlineFileRights-module_darkBackground__3oIUp","forSection":"TextInlineFileRights-module_forSection__22xHD"};
21
21
 
22
22
  function TextInlineFileRights(_ref) {
23
- var context = _ref.context,
24
- children = _ref.children;
25
-
26
- if (context === 'insideElement' || context === 'playerControls') {
23
+ var configuration = _ref.configuration,
24
+ context = _ref.context,
25
+ children = _ref.children;
26
+ var darkBackground = useDarkBackground();
27
+ var _useContentElementEdi = useContentElementEditorState(),
28
+ setTransientState = _useContentElementEdi.setTransientState;
29
+ var supported = context !== 'insideElement' && context !== 'playerControls';
30
+ useEffect(function () {
31
+ if (supported) {
32
+ setTransientState({
33
+ hasFileRights: true
34
+ });
35
+ }
36
+ return function () {
37
+ if (supported) {
38
+ setTransientState({
39
+ hasFileRights: false
40
+ });
41
+ }
42
+ };
43
+ }, [setTransientState, supported]);
44
+ if (!supported) {
27
45
  return null;
28
46
  }
29
-
30
47
  return /*#__PURE__*/React.createElement("div", {
31
- className: classNames(styles.text, _defineProperty({}, styles.forSection, context === 'section'))
48
+ className: classNames(styles.text, _defineProperty(_defineProperty(_defineProperty({}, styles.forSection, context === 'section'), styles.withBackdrop, context === 'section' || configuration.showTextInlineFileRightsBackdrop), styles.darkBackground, darkBackground))
32
49
  }, /*#__PURE__*/React.createElement("div", null, children));
33
50
  }
34
51
 
@@ -2,3 +2,4 @@ import 'pageflow-scrolled/widgets/defaultNavigation';
2
2
  import 'pageflow-scrolled/widgets/consentBar';
3
3
  import 'pageflow-scrolled/widgets/iconInlineFileRights';
4
4
  import 'pageflow-scrolled/widgets/textInlineFileRights';
5
+ import 'pageflow-scrolled/widgets/iconScrollIndicator';
@@ -1,7 +1,20 @@
1
1
  module PageflowScrolled
2
2
  FactoryBot.define do
3
3
  factory :scrolled_chapter, class: Chapter do
4
- revision
4
+ transient do
5
+ revision { nil }
6
+ end
7
+
8
+ before(:create) do |chapter, evaluator|
9
+ if chapter.storyline.nil?
10
+ revision = evaluator.revision || build(:revision)
11
+ chapter.storyline = Storyline.all_for_revision(revision).first ||
12
+ create(:scrolled_storyline,
13
+ revision:,
14
+ configuration: {main: true})
15
+ end
16
+ end
17
+
5
18
  configuration do
6
19
  {
7
20
  title: 'chapter title'
@@ -10,7 +10,7 @@ module PageflowScrolled
10
10
  before(:create) do |content_element, evaluator|
11
11
  if evaluator.revision
12
12
  chapter = create(:scrolled_chapter, revision: evaluator.revision)
13
- content_element.section = create(:section, chapter: chapter)
13
+ content_element.section = create(:section, chapter:)
14
14
  end
15
15
  end
16
16
  end
@@ -2,8 +2,9 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class ActiveAdminInitializerGenerator < Rails::Generators::Base
6
- desc "Configure active admin utilitiy menu to contain profile link."
7
+ desc 'Configure active admin utilitiy menu to contain profile link.'
7
8
 
8
9
  def configure_active_admin_load_path
9
10
  prepend_to_file 'config/initializers/active_admin.rb' do
@@ -12,7 +13,8 @@ module Pageflow
12
13
  end
13
14
 
14
15
  def configure_active_admin
15
- inject_into_file 'config/initializers/active_admin.rb', after: "ActiveAdmin.setup do |config|\n" do
16
+ inject_into_file 'config/initializers/active_admin.rb',
17
+ after: "ActiveAdmin.setup do |config|\n" do
16
18
  <<-RUBY
17
19
  Pageflow.active_admin_settings(config)
18
20
 
@@ -26,7 +28,7 @@ module Pageflow
26
28
  admin.add_logout_button_to_menu(menu)
27
29
  end
28
30
  end
29
- RUBY
31
+ RUBY
30
32
  end
31
33
  end
32
34
 
@@ -2,10 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class AssetsGenerator < Rails::Generators::Base
6
- desc "Install the pageflow assets."
7
+ desc 'Install the pageflow assets.'
7
8
 
8
- source_root File.expand_path("../templates", __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def create_assets
11
12
  template 'editor.js', 'app/assets/javascripts/pageflow/editor.js'
@@ -26,9 +27,10 @@ module Pageflow
26
27
  end
27
28
 
28
29
  def initialize_on_precompile
29
- inject_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do
30
- " # required for i18n-js gem\n" +
31
- " config.assets.initialize_on_precompile = true\n\n"
30
+ inject_into_file 'config/application.rb',
31
+ after: "class Application < Rails::Application\n" do
32
+ " # required for i18n-js gem\n " \
33
+ "config.assets.initialize_on_precompile = true\n\n"
32
34
  end
33
35
  end
34
36
  end
@@ -2,10 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class CancanGenerator < Rails::Generators::Base
6
7
  desc 'Setup ability class.'
7
8
 
8
- source_root File.expand_path('../templates', __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def create_ability
11
12
  template 'ability.rb', 'app/models/ability.rb'
@@ -7,6 +7,6 @@ class Ability
7
7
  pageflow_default_abilities(user)
8
8
 
9
9
  # Allow signed-in users to view the admin dashboard
10
- can :read, ActiveAdmin::Page, :name => "Dashboard"
10
+ can :read, ActiveAdmin::Page, name: 'Dashboard'
11
11
  end
12
12
  end
@@ -2,10 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class ErrorPagesGenerator < Rails::Generators::Base
6
7
  desc 'Generate error pages.'
7
8
 
8
- source_root File.expand_path('../templates', __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def create_not_found
11
12
  copy_file '404.html', 'public/pageflow/error_pages/404.html'
@@ -2,10 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class InitializerGenerator < Rails::Generators::Base
6
- desc "Install the pageflow initializer."
7
+ desc 'Install the pageflow initializer.'
7
8
 
8
- source_root File.expand_path("../templates", __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def create_initializer
11
12
  template 'pageflow.rb', 'config/initializers/pageflow.rb'
@@ -1,8 +1,8 @@
1
1
  module Pageflow
2
2
  module Generators
3
+ # @api private
3
4
  class InstallGenerator < Rails::Generators::Base
4
-
5
- desc "Installs Pageflow and generates the necessary migrations."
5
+ desc 'Installs Pageflow and generates the necessary migrations.'
6
6
 
7
7
  def generate_all
8
8
  generate 'active_admin:install User --skip-users'
@@ -2,10 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class ProcfileGenerator < Rails::Generators::Base
6
7
  desc 'Generate a Procfile in Rails root.'
7
8
 
8
- source_root File.expand_path('../templates', __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def generate_procfile
11
12
  copy_file 'Procfile', 'Procfile'
@@ -2,20 +2,22 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class ResqueGenerator < Rails::Generators::Base
6
- desc "Configure resque for pageflow."
7
+ desc 'Configure resque for pageflow.'
7
8
 
8
- source_root File.expand_path("../templates", __FILE__)
9
+ source_root File.expand_path('templates', __dir__)
9
10
 
10
11
  def create_initializers
11
12
  template 'resque.rb', 'config/initializers/resque.rb'
12
- template 'resque_enqueue_after_commit_patch.rb', 'config/initializers/resque_enqueue_after_commit_patch.rb'
13
+ template 'resque_enqueue_after_commit_patch.rb',
14
+ 'config/initializers/resque_enqueue_after_commit_patch.rb'
13
15
  template 'resque.rake', 'lib/tasks/resque.rake'
14
16
 
15
17
  inject_into_file 'config/application.rb', after: /config.load_defaults .*\n/ do
16
18
  <<-RUBY
17
19
  config.active_job.queue_adapter = :resque
18
- RUBY
20
+ RUBY
19
21
  end
20
22
  end
21
23
  end
@@ -3,5 +3,5 @@ require 'resque/scheduler/tasks'
3
3
 
4
4
  namespace :resque do
5
5
  # Tell resque to initialize the rails app in worker processes
6
- task :setup => :environment
6
+ task setup: :environment
7
7
  end
@@ -2,8 +2,9 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class RoutesGenerator < Rails::Generators::Base
6
- desc "Injects the pageflow mount call into config/routes.rb"
7
+ desc 'Injects the pageflow mount call into config/routes.rb'
7
8
 
8
9
  def add_route
9
10
  inject_into_file 'config/routes.rb', after: " ActiveAdmin.routes(self)\n" do
@@ -19,7 +20,8 @@ module Pageflow
19
20
  end
20
21
 
21
22
  def require_resque_server
22
- prepend_to_file 'config/routes.rb', "require 'resque/server'\nrequire 'resque/scheduler/server'\n\n"
23
+ prepend_to_file 'config/routes.rb',
24
+ "require 'resque/server'\nrequire 'resque/scheduler/server'\n\n"
23
25
  end
24
26
  end
25
27
  end
@@ -3,14 +3,15 @@ require 'securerandom'
3
3
 
4
4
  module Pageflow
5
5
  module Generators
6
+ # @api private
6
7
  class SeedsGenerator < Rails::Generators::Base
7
- desc "Requires the pageflow seeds in db/seeds.rb"
8
+ desc 'Requires the pageflow seeds in db/seeds.rb'
8
9
 
9
10
  argument :password,
10
11
  default: SecureRandom.random_number(36**12).to_s(36).rjust(12, '0'),
11
12
  desc: 'Default user password'
12
13
 
13
- source_root File.expand_path("../templates", __FILE__)
14
+ source_root File.expand_path('templates', __dir__)
14
15
 
15
16
  def create_initializer
16
17
  template 'seeds.rb', 'db/seeds.rb'
@@ -2,7 +2,7 @@
2
2
  # It will create example users for each of the Pageflow roles.
3
3
  # Feel free to edit or remove it; these entries are not required for Pageflow to function.
4
4
 
5
- include Pageflow::Seeds
5
+ include Pageflow::Seeds # rubocop:disable Style/MixinUsage
6
6
 
7
7
  default_user_password('<%= password %>')
8
8
 
@@ -13,11 +13,11 @@ member_account = account(name: 'Stagg Enterprises')
13
13
  account(name: 'Waterloo Road Comprehensive')
14
14
 
15
15
  account(name: 'Pageflow') do |account|
16
- politics_entry = sample_entry(account: account, title: 'Story in Politics')
17
- sports_entry = sample_entry(account: account, title: 'Story in Sports')
18
- finance_entry = sample_entry(account: account, title: 'Story in Finance')
19
- entertainment_entry = sample_entry(account: account, title: 'Story in Entertainment')
20
- sample_entry(account: account, title: 'Story in Science')
16
+ politics_entry = sample_entry(account:, title: 'Story in Politics')
17
+ sports_entry = sample_entry(account:, title: 'Story in Sports')
18
+ finance_entry = sample_entry(account:, title: 'Story in Finance')
19
+ entertainment_entry = sample_entry(account:, title: 'Story in Entertainment')
20
+ sample_entry(account:, title: 'Story in Science')
21
21
 
22
22
  user(email: 'admin@example.com',
23
23
  first_name: 'Alice',
@@ -2,6 +2,7 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class ThemeGenerator < Rails::Generators::Base
6
7
  desc 'Creates a configurable theme based on the default theme.'
7
8
 
@@ -10,7 +11,7 @@ module Pageflow
10
11
  default: 'custom',
11
12
  desc: 'The name of the new theme'
12
13
 
13
- source_root File.expand_path('../templates', __FILE__)
14
+ source_root File.expand_path('templates', __dir__)
14
15
 
15
16
  def copy_template
16
17
  directory('themes', File.join('app', 'assets', 'stylesheets', 'pageflow', 'themes'))
@@ -2,8 +2,9 @@ require 'rails/generators'
2
2
 
3
3
  module Pageflow
4
4
  module Generators
5
+ # @api private
5
6
  class UserGenerator < Rails::Generators::Base
6
- desc "Injects the Pageflow::User mixin into the User class."
7
+ desc 'Injects the Pageflow::User mixin into the User class.'
7
8
 
8
9
  def include_mixin
9
10
  inject_into_file 'app/models/user.rb', before: /end$/ do
@@ -35,8 +35,8 @@ module Pageflow
35
35
  membership.entity.nil? ||
36
36
  membership.user.nil? ||
37
37
  (!(membership.user.entries.include?(membership.entity) ||
38
- membership.user.accounts.include?(membership.entity))) &&
39
- MembershipPolicy.new(user, membership).create?
38
+ membership.user.accounts.include?(membership.entity)) &&
39
+ MembershipPolicy.new(user, membership).create?)
40
40
  end
41
41
 
42
42
  can :index, Membership, MembershipPolicy::Scope.new(user, Membership).indexable
@@ -111,6 +111,12 @@ module Pageflow
111
111
  AccountPolicy.new(user, account).see_entry_types?
112
112
  end
113
113
 
114
+ can :manage, ActiveAdmin::Page, name: 'Site Root Entry'
115
+
116
+ can :manage_root_entry, Site do |site|
117
+ SitePolicy.new(user, site).manage_root_entry?
118
+ end
119
+
114
120
  unless user.admin?
115
121
  can :configure_folder_on, Account do |account|
116
122
  AccountPolicy.new(user, account).configure_folder_on?
@@ -156,6 +162,10 @@ module Pageflow
156
162
  EntryPolicy.new(user, entry).duplicate?
157
163
  end
158
164
 
165
+ can :manage_translations, Entry do |entry|
166
+ EntryPolicy.new(user, entry).manage_translations?
167
+ end
168
+
159
169
  can :edit_outline, Entry do |entry|
160
170
  EntryPolicy.new(user, entry).edit_outline?
161
171
  end
@@ -273,20 +283,20 @@ module Pageflow
273
283
  UserPolicy.new(user, user_to_delete).delete_own_user?
274
284
  end
275
285
 
276
- if user.admin?
277
- can [:create, :configure_folder_on], Account
278
- can :create_any, :accounts
279
- can :destroy, Account do |account|
280
- account.users.empty? && account.entries.empty?
281
- end
282
- can :manage, [Storyline, Chapter, Page]
283
- can :manage, [Entry, Revision]
284
- can :manage, Pageflow.config.file_types.map(&:model)
285
- can :manage, Folder
286
- can :manage, Site
287
- can :manage, EntryTemplate
288
- can :manage, ::User
286
+ return unless user.admin?
287
+
288
+ can [:create, :configure_folder_on], Account
289
+ can :create_any, :accounts
290
+ can :destroy, Account do |account|
291
+ account.users.empty? && account.entries.empty?
289
292
  end
293
+ can :manage, [Storyline, Chapter, Page]
294
+ can :manage, [Entry, Revision]
295
+ can :manage, Pageflow.config.file_types.map(&:model)
296
+ can :manage, Folder
297
+ can :manage, Site
298
+ can :manage, EntryTemplate
299
+ can :manage, ::User
290
300
  end
291
301
  end
292
302
  end
@@ -1,6 +1,7 @@
1
1
  module Pageflow
2
2
  module ActiveAdminPatches
3
3
  module Views
4
+ # @api private
4
5
  module AttributesTable
5
6
  def boolean_status_tag_row(name, yes_state = :warning)
6
7
  status_tag_row(name,
@@ -2,9 +2,10 @@ module Pageflow
2
2
  module ActiveAdminPatches
3
3
  module Views
4
4
  module Pages
5
+ # @api private
5
6
  module Base
6
- def build(*args)
7
- super(*args)
7
+ def build(*)
8
+ super
8
9
  set_attribute(:lang, I18n.locale)
9
10
  end
10
11
  end
@@ -1,6 +1,7 @@
1
1
  module Pageflow
2
2
  module ActiveAdminPatches
3
3
  module Views
4
+ # @api private
4
5
  module TableFor
5
6
  def row_attributes
6
7
  @collection.each_with_index do |item, i|
@@ -0,0 +1,27 @@
1
+ module Pageflow
2
+ # Register additional response headers for published entries.
3
+ class AdditionalHeaders
4
+ # @api private
5
+ def initialize
6
+ @headers = []
7
+ end
8
+
9
+ # Either a hash of name values pair or a callable taking a
10
+ # {PublishedEntry} record and an {ActionDispatch::Request} object
11
+ # and returns a hash.
12
+ def register(headers)
13
+ @headers << headers
14
+ end
15
+
16
+ # @api private
17
+ def for(entry, request)
18
+ @headers.map { |headers|
19
+ if headers.respond_to?(:call)
20
+ headers.call(entry, request)
21
+ else
22
+ headers
23
+ end
24
+ }.reduce({}, :merge)
25
+ end
26
+ end
27
+ end
@@ -4,7 +4,7 @@ module Pageflow
4
4
  #
5
5
  # @since 12.2
6
6
  module Admin
7
- class AttributesTableRows
7
+ class AttributesTableRows # rubocop:todo Style/Documentation
8
8
  # @api private
9
9
  def initialize
10
10
  @rows = {}
@@ -31,8 +31,8 @@ module Pageflow
31
31
  def register(resource_name, name, options = {}, &block)
32
32
  @rows[resource_name] ||= []
33
33
  @rows[resource_name] << {
34
- name: name,
35
- block: block,
34
+ name:,
35
+ block:,
36
36
  options: options.except(:before, :after),
37
37
  **options.slice(:before, :after)
38
38
  }
@@ -1,6 +1,6 @@
1
1
  module Pageflow
2
2
  module Admin
3
- class Tabs
3
+ class Tabs # rubocop:todo Style/Documentation
4
4
  # @api private
5
5
  def initialize
6
6
  @tabs = {}
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- module BuiltInFileType
2
+ module BuiltInFileType # rubocop:todo Style/Documentation
3
3
  # Factory methods to decouple Pageflow initializers from concrete
4
4
  # file type classes, making more transparent which file types are
5
5
  # available as built-ins.
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class BuiltInPageTypesPlugin < Plugin
2
+ class BuiltInPageTypesPlugin < Plugin # rubocop:todo Style/Documentation
3
3
  def configure(config)
4
4
  config.for_entry_type(PageflowPaged.entry_type) do |entry_type_config|
5
5
  entry_type_config.page_types.register(BuiltInPageType.plain)
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class BuiltInWidgetType < WidgetType
2
+ class BuiltInWidgetType < WidgetType # rubocop:todo Style/Documentation
3
3
  attr_reader :name, :roles, :partial_path
4
4
 
5
5
  def initialize(name, roles, partial_path)
@@ -13,7 +13,7 @@ module Pageflow
13
13
  end
14
14
 
15
15
  def render(template, entry)
16
- template.render(partial_path, entry: entry, widget_type_name: name)
16
+ template.render(partial_path, entry:, widget_type_name: name)
17
17
  end
18
18
 
19
19
  def self.navigation
@@ -46,7 +46,8 @@ module Pageflow
46
46
 
47
47
  def player_controls(config)
48
48
  config.widget_types.register(Pageflow::BuiltInWidgetType.slim_player_controls)
49
- config.widget_types.register(Pageflow::BuiltInWidgetType.classic_player_controls, default: true)
49
+ config.widget_types.register(Pageflow::BuiltInWidgetType.classic_player_controls,
50
+ default: true)
50
51
  end
51
52
 
52
53
  def cookie_notice(config)