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
@@ -13,15 +13,6 @@ module Pageflow
13
13
  cattr_accessor :nested_revision_component_collection_names, default: []
14
14
  end
15
15
 
16
- # @api private
17
- def copy_nested_revision_component_to(record, reset_perma_ids: false)
18
- nested_revision_component_collection_names.each do |collection_name|
19
- send(collection_name).each do |nested|
20
- nested.copy_to(record.send(collection_name), reset_perma_ids: reset_perma_ids)
21
- end
22
- end
23
- end
24
-
25
16
  # Macro methods to declare nested revision components
26
17
  module ClassMethods
27
18
  # Call this macro in the body of a class which includes
@@ -39,27 +30,18 @@ module Pageflow
39
30
  include Container
40
31
 
41
32
  def duplicate
42
- copy_with(reset_perma_ids: true) do |record|
43
- yield record if block_given?
44
- record.save!
45
- end
46
- end
47
-
48
- # @api private
49
- def copy_to(collection, reset_perma_ids: false)
50
- copy_with(reset_perma_ids: reset_perma_ids) do |record|
51
- collection << record
52
- end
53
- end
33
+ record = dup
34
+ record.perma_id = nil
54
35
 
55
- private
36
+ yield record if block_given?
56
37
 
57
- def copy_with(reset_perma_ids:)
58
- record = dup
59
- record.perma_id = nil if reset_perma_ids && record.respond_to?(:perma_id=)
38
+ record.save!
60
39
 
61
- yield record
62
- copy_nested_revision_component_to(record, reset_perma_ids: reset_perma_ids)
40
+ NestedRevisionComponentCopy.new(
41
+ from: self,
42
+ to: record,
43
+ reset_perma_ids: true
44
+ ).perform_for_nested_revision_components
63
45
 
64
46
  record
65
47
  end
@@ -11,7 +11,7 @@ module Pageflow
11
11
  # @since 12.2
12
12
  def news_item(name, options)
13
13
  after_global_configure do |config|
14
- config.news.item(name, options) if config.news
14
+ config.news&.item(name, options)
15
15
  end
16
16
  end
17
17
  end
@@ -63,7 +63,6 @@ module Pageflow
63
63
  []
64
64
  end
65
65
 
66
-
67
66
  # ActiveRecord models to be copied together with a revision.
68
67
  #
69
68
  # This allows authors of PageTypes to attach models to the Pageflow
@@ -217,12 +216,12 @@ module Pageflow
217
216
  # }
218
217
  # });
219
218
  #
220
- def json_seed_template
221
- end
219
+ def json_seed_template; end
222
220
 
223
221
  # Helper method to define the name of a subclassed page type.
224
222
  def self.name(name = nil)
225
223
  return super() unless name
224
+
226
225
  define_method :name do
227
226
  name
228
227
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class PageTypes
2
+ class PageTypes # rubocop:todo Style/Documentation
3
3
  include Enumerable
4
4
 
5
5
  def initialize
@@ -28,8 +28,8 @@ module Pageflow
28
28
  map(&:name)
29
29
  end
30
30
 
31
- def each(&block)
32
- @page_types.each(&block)
31
+ def each(&)
32
+ @page_types.each(&)
33
33
  end
34
34
 
35
35
  def setup(config)
@@ -14,7 +14,7 @@ module Pageflow
14
14
  end
15
15
 
16
16
  def class_basename(attachment, _style)
17
- attachment \
17
+ attachment
18
18
  .instance
19
19
  .class
20
20
  .name
@@ -3,6 +3,7 @@ require 'fileutils'
3
3
 
4
4
  module Pageflow
5
5
  module PaperclipProcessors
6
+ # @api private
6
7
  class Vtt < Paperclip::Processor
7
8
  def make
8
9
  destination = make_tempfile_for(file.path)
@@ -29,8 +29,8 @@ module Pageflow
29
29
  ANIMATED_FORMATS.include?(@current_format) ? "#{source.path}[n=-1]" : source.path,
30
30
  width,
31
31
  size: @should_crop ? :both : :down,
32
- height: height,
33
- crop: crop
32
+ height:,
33
+ crop:
34
34
  )
35
35
  thumbnail.webpsave(destination.path)
36
36
  rescue Vips::Error => e
@@ -29,9 +29,9 @@ module Pageflow
29
29
  private
30
30
 
31
31
  def render(partial, entry, format: :html)
32
- @renderer.render(partial: partial,
32
+ @renderer.render(partial:,
33
33
  formats: format,
34
- locals: {entry: entry})
34
+ locals: {entry:})
35
35
  end
36
36
  end
37
37
  end
@@ -7,7 +7,6 @@ module Pageflow
7
7
  # Override to configure Pageflow
8
8
  #
9
9
  # @param [Configuration] config
10
- def configure(config)
11
- end
10
+ def configure(config); end
12
11
  end
13
12
  end
@@ -1,6 +1,6 @@
1
1
  module Pageflow
2
- class Quota
3
- class ExhaustedError < RuntimeError
2
+ class Quota # rubocop:todo Style/Documentation
3
+ class ExhaustedError < RuntimeError # rubocop:todo Style/Documentation
4
4
  attr_reader :quota
5
5
 
6
6
  def initialize(quota)
@@ -18,7 +18,11 @@ module Pageflow
18
18
  end
19
19
 
20
20
  def state
21
- raise(NotImplementedError, 'Quota#state must be implemented and return either "available", "exhausted" or "exceeded".')
21
+ raise(
22
+ NotImplementedError,
23
+ 'Quota#state must be implemented and return either ' \
24
+ '"available", "exhausted" or "exceeded".'
25
+ )
22
26
  end
23
27
 
24
28
  def state_description
@@ -45,11 +49,11 @@ module Pageflow
45
49
  raise(ExceededError.new(self), "Quota '#{name}' exceeded.") if exceeded?
46
50
  end
47
51
 
48
- def assume(assumptions)
52
+ def assume(_assumptions)
49
53
  self
50
54
  end
51
55
 
52
- class Unlimited < Quota
56
+ class Unlimited < Quota # rubocop:todo Style/Documentation
53
57
  def state
54
58
  'available'
55
59
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Quotas
2
+ class Quotas # rubocop:todo Style/Documentation
3
3
  def initialize
4
4
  @factories = HashWithIndifferentAccess.new
5
5
  end
@@ -1,4 +1,5 @@
1
1
  module Pageflow
2
+ # @api private
2
3
  module RailsVersion
3
4
  extend self
4
5
 
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- module React
2
+ module React # rubocop:todo Style/Documentation
3
3
  # @deprecated Use `PageflowPaged::React.create_page_type` instead.
4
4
  def self.create_page_type(name, options = {})
5
5
  PageflowPaged::React.create_page_type(name, options)
@@ -8,35 +8,18 @@ module Pageflow
8
8
  module RevisionComponent
9
9
  extend ActiveSupport::Concern
10
10
 
11
- ADVISORY_LOCK_TIMEOUT_SECONDS = 5
11
+ include AutoGeneratedPermaId
12
+ include NestedRevisionComponent::Container
12
13
 
13
- class PermaIdGenerationAdvisoryLockTimeout < StandardError; end
14
+ def entry_for_auto_generated_perma_id
15
+ revision.entry
16
+ end
14
17
 
15
18
  included do
16
- include AutoGeneratedPermaId
17
- include NestedRevisionComponent::Container
18
-
19
19
  belongs_to :revision, class_name: 'Pageflow::Revision', touch: true
20
20
  end
21
21
 
22
- def copy_to(revision)
23
- record = dup
24
- record.revision = revision
25
- record.save!
26
-
27
- copy_nested_revision_component_to(record)
28
- end
29
-
30
- module ClassMethods
31
- # Recommended way to create revision components. Uses an
32
- # advisory lock to ensure concurrently created records are not
33
- # assigned the same perma id.
34
- def create_with_lock!(attributes, &block)
35
- with_advisory_lock_for_perma_id_generation! do
36
- create!(attributes, &block)
37
- end
38
- end
39
-
22
+ module ClassMethods # rubocop:todo Style/Documentation
40
23
  def all_for_revision(revision)
41
24
  where(revision_id: revision.id)
42
25
  end
@@ -44,24 +27,9 @@ module Pageflow
44
27
  def from_perma_ids(revision, perma_ids)
45
28
  return [] if revision.blank? || perma_ids.blank?
46
29
 
47
- perma_ids.map do |perma_id|
30
+ perma_ids.map { |perma_id|
48
31
  find_by_revision_id_and_perma_id(revision.id, perma_id)
49
- end.compact
50
- end
51
-
52
- private
53
-
54
- def with_advisory_lock_for_perma_id_generation!(&block)
55
- r = with_advisory_lock_result_for_perma_id_generation(&block)
56
- raise(PermaIdGenerationAdvisoryLockTimeout) unless r.lock_was_acquired?
57
-
58
- r.result
59
- end
60
-
61
- def with_advisory_lock_result_for_perma_id_generation(&block)
62
- with_advisory_lock_result("#{table_name}_perma_id",
63
- timeout_seconds: ADVISORY_LOCK_TIMEOUT_SECONDS,
64
- &block)
32
+ }.compact
65
33
  end
66
34
  end
67
35
  end
@@ -1,18 +1,28 @@
1
1
  module Pageflow
2
- class RevisionComponents
2
+ class RevisionComponents # rubocop:todo Style/Documentation
3
3
  include Enumerable
4
4
 
5
5
  def initialize
6
6
  @revision_components = []
7
+ @create_defaults_hooks = []
7
8
  end
8
9
 
9
- def register(revision_component)
10
- @revision_components << revision_component unless
11
- @revision_components.include?(revision_component)
10
+ def register(revision_component, create_defaults: false)
11
+ return if @revision_components.include?(revision_component)
12
+
13
+ @revision_components << revision_component
14
+
15
+ return unless create_defaults
16
+
17
+ @create_defaults_hooks << ->(revision) { revision_component.create_defaults(revision) }
18
+ end
19
+
20
+ def each(&)
21
+ @revision_components.each(&)
12
22
  end
13
23
 
14
- def each(&block)
15
- @revision_components.each(&block)
24
+ def create_defaults(revision)
25
+ @create_defaults_hooks.each { |hook| hook.call(revision) }
16
26
  end
17
27
  end
18
28
  end
@@ -17,7 +17,7 @@ module Pageflow
17
17
  # last_name: 'Doe')
18
18
  # end
19
19
  module Seeds
20
- DEFAULT_USER_PASSWORD = '!Pass123'
20
+ DEFAULT_USER_PASSWORD = '!Pass123'.freeze
21
21
 
22
22
  # Create an {Account} with a default {Site} if no account by
23
23
  # that name exists.
@@ -26,7 +26,7 @@ module Pageflow
26
26
  # @option attributes [String] :name required
27
27
  # @yield [account] a block to be called before the account is saved
28
28
  # @return [Account] newly created account
29
- def account(attributes, &block)
29
+ def account(attributes)
30
30
  Account.find_or_create_by!(attributes.slice(:name)) do |account|
31
31
  account.attributes = attributes.reverse_merge(name: 'Pageflow')
32
32
 
@@ -52,7 +52,7 @@ module Pageflow
52
52
  # @param [Hash] attributes further attributes to override defaults
53
53
  # @yield [site] a block which is passed the newly built site
54
54
  # @return [Site] newly built site
55
- def build_default_site_for(account, attributes = {}, &block)
55
+ def build_default_site_for(account, attributes = {}, &)
56
56
  default_attributes = {
57
57
  imprint_link_label: 'Impressum',
58
58
  imprint_link_url: 'http://example.com/impressum.html',
@@ -60,7 +60,7 @@ module Pageflow
60
60
  copyright_link_url: 'http://www.example.com/copyright.html'
61
61
  }
62
62
 
63
- account.build_default_site(default_attributes.merge(attributes), &block)
63
+ account.build_default_site(default_attributes.merge(attributes), &)
64
64
  end
65
65
 
66
66
  # Create a {User} if none with the given email exists yet.
@@ -69,7 +69,7 @@ module Pageflow
69
69
  # @option attributes [String] :email required
70
70
  # @yield [user] a block to be called before the user is saved
71
71
  # @return [User] newly created user
72
- def user(attributes, &block)
72
+ def user(attributes)
73
73
  default_attributes = {
74
74
  password: default_user_password,
75
75
  first_name: 'Elliot',
@@ -146,9 +146,7 @@ module Pageflow
146
146
  (attributes[:account].present? && attributes[:entity].present?)
147
147
  say_attribute_precedence(':entity', ':entry and :account')
148
148
  end
149
- unless attributes[:entity].present?
150
- entry_or_account_attributes_specified attributes
151
- end
149
+ entry_or_account_attributes_specified attributes unless attributes[:entity].present?
152
150
 
153
151
  if attributes[:entity].is_a?(Entry) || attributes[:entry].present?
154
152
  entry = attributes[:entity] || attributes[:entry]
@@ -173,14 +171,14 @@ module Pageflow
173
171
  end
174
172
 
175
173
  def say_creating_user(user)
176
- say(<<-END)
174
+ say(<<-TEXT)
177
175
 
178
176
  user with login:
179
177
 
180
178
  email: #{user.email}
181
179
  password: #{user.password}
182
180
 
183
- END
181
+ TEXT
184
182
  end
185
183
 
186
184
  def say_creating_entry(entry)
@@ -188,13 +186,13 @@ END
188
186
  end
189
187
 
190
188
  def say_creating_membership(membership)
191
- say(" -- '#{membership.role}' membership for user '#{membership.user.email}' on " +
189
+ say(" -- '#{membership.role}' membership for user '#{membership.user.email}' on " \
192
190
  "#{membership.entity_type == 'Pageflow::Entry' ? 'entry' : 'account'} " +
193
- %|'#{if membership.entity_type == "Pageflow::Entry"
191
+ %('#{if membership.entity_type == 'Pageflow::Entry'
194
192
  membership.entity.title
195
193
  else
196
194
  membership.entity.name
197
- end}'\n|)
195
+ end}'\n))
198
196
  end
199
197
 
200
198
  def say_attribute_precedence(subject, object)
@@ -208,9 +206,7 @@ END
208
206
  def entry_or_account_attributes_specified(attributes)
209
207
  if attributes[:entry].present? || attributes[:account].present?
210
208
  attributes[:entity] = attributes[:entry]
211
- if attributes[:account].present?
212
- say_attribute_precedence(':entry', ':account')
213
- end
209
+ say_attribute_precedence(':entry', ':account') if attributes[:account].present?
214
210
  else
215
211
  attributes[:entity] = attributes[:account]
216
212
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Theme
2
+ class Theme # rubocop:todo Style/Documentation
3
3
  attr_reader :name, :directory_name, :options
4
4
 
5
5
  def initialize(name, options = {})
@@ -8,8 +8,8 @@ module Pageflow
8
8
  # a specific site.
9
9
  def update(site:, entry_type_name:, overrides: {}, file_ids: {})
10
10
  ThemeCustomization
11
- .find_or_initialize_by(site: site, entry_type_name: entry_type_name)
12
- .update!(overrides: overrides, selected_file_ids: file_ids)
11
+ .find_or_initialize_by(site:, entry_type_name:)
12
+ .update!(overrides:, selected_file_ids: file_ids)
13
13
  end
14
14
 
15
15
  # Construct an entry that uses the given overrides and files in
@@ -19,15 +19,15 @@ module Pageflow
19
19
  def preview(site:, entry:, overrides: {}, file_ids: {})
20
20
  theme_customization =
21
21
  ThemeCustomization
22
- .find_or_initialize_by(site: site, entry_type_name: entry.type_name)
22
+ .find_or_initialize_by(site:, entry_type_name: entry.type_name)
23
23
 
24
- theme_customization.assign_attributes(overrides: overrides, selected_file_ids: file_ids)
24
+ theme_customization.assign_attributes(overrides:, selected_file_ids: file_ids)
25
25
 
26
- theme = CustomizedTheme.build(entry: entry,
26
+ theme = CustomizedTheme.build(entry: PublishedEntry.new(entry, entry.draft),
27
27
  theme: entry.draft.theme,
28
- theme_customization: theme_customization)
28
+ theme_customization:)
29
29
 
30
- PublishedEntry.new(entry, entry.draft, theme: theme)
30
+ PublishedEntry.new(entry, entry.draft, theme:)
31
31
  end
32
32
 
33
33
  # Get customization for entry type and site.
@@ -35,7 +35,7 @@ module Pageflow
35
35
  # @return [ThemeCustomization]
36
36
  def get(site:, entry_type_name:)
37
37
  ThemeCustomization
38
- .find_or_initialize_by(site: site, entry_type_name: entry_type_name)
38
+ .find_or_initialize_by(site:, entry_type_name:)
39
39
  end
40
40
 
41
41
  # Upload a file that shall be used to customize a theme. Uploading
@@ -46,9 +46,9 @@ module Pageflow
46
46
  def upload_file(site:, entry_type_name:, type_name:, attachment:)
47
47
  theme_customization_file =
48
48
  ThemeCustomization
49
- .find_or_create_by(site: site, entry_type_name: entry_type_name)
49
+ .find_or_create_by(site:, entry_type_name:)
50
50
  .uploaded_files
51
- .build(type_name: type_name)
51
+ .build(type_name:)
52
52
 
53
53
  # Assign attachment in separate step to make sure theme
54
54
  # customization association (which is used to look up Paperclip
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Themes
2
+ class Themes # rubocop:todo Style/Documentation
3
3
  include Enumerable
4
4
 
5
5
  def initialize
@@ -52,8 +52,8 @@ module Pageflow
52
52
  map(&:name)
53
53
  end
54
54
 
55
- def each(&block)
56
- @themes.values.each(&block)
55
+ def each(&)
56
+ @themes.values.each(&)
57
57
  end
58
58
  end
59
59
  end
@@ -34,11 +34,11 @@ module Pageflow
34
34
  end
35
35
 
36
36
  def full_name
37
- [first_name, last_name] * ' '
37
+ [first_name, last_name].join(' ')
38
38
  end
39
39
 
40
40
  def formal_name
41
- [last_name, first_name] * ', '
41
+ [last_name, first_name].join(', ')
42
42
  end
43
43
 
44
44
  def locale
@@ -47,7 +47,7 @@ module Pageflow
47
47
 
48
48
  def update_with_password(attributes)
49
49
  if needs_password?(attributes)
50
- super(attributes)
50
+ super
51
51
  else
52
52
  # remove the virtual current_password attribute update_without_password
53
53
  # doesn't know how to ignore it
@@ -66,11 +66,11 @@ module Pageflow
66
66
  end
67
67
 
68
68
  # Configure devise to send emails using ActiveJob.
69
- def send_devise_notification(notification, *args)
70
- devise_mailer.send(notification, self, *args).deliver_later
69
+ def send_devise_notification(notification, *)
70
+ devise_mailer.send(notification, self, *).deliver_later
71
71
  end
72
72
 
73
- module ClassMethods
73
+ module ClassMethods # rubocop:todo Style/Documentation
74
74
  def ransackable_attributes(_auth_object = nil)
75
75
  %w[first_name last_name email]
76
76
  end
@@ -1,3 +1,3 @@
1
1
  module Pageflow
2
- VERSION = '17.0.5'.freeze
2
+ VERSION = '17.1.0'.freeze
3
3
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class WidgetType
2
+ class WidgetType # rubocop:todo Style/Documentation
3
3
  class NotFoundError < RuntimeError
4
4
  end
5
5
 
@@ -44,7 +44,7 @@ module Pageflow
44
44
 
45
45
  # Override to return html as string.
46
46
  def render(template, entry)
47
- template.render(File.join('pageflow', name, 'widget'), entry: entry)
47
+ template.render(File.join('pageflow', name, 'widget'), entry:)
48
48
  end
49
49
 
50
50
  # Override instead of render_head_fragment to use the widget
@@ -56,11 +56,11 @@ module Pageflow
56
56
 
57
57
  # Override to return html that should be placed in the head
58
58
  # element of the page. Not supported inside the editor.
59
- def render_head_fragment(template, entry)
59
+ def render_head_fragment(_template, _entry)
60
60
  ''
61
61
  end
62
62
 
63
- class Null < WidgetType
63
+ class Null < WidgetType # rubocop:todo Style/Documentation
64
64
  def initialize(role)
65
65
  @role = role
66
66
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class WidgetTypes
2
+ class WidgetTypes # rubocop:todo Style/Documentation
3
3
  include Enumerable
4
4
 
5
5
  attr_reader :defaults_by_role
@@ -10,10 +10,10 @@ module Pageflow
10
10
 
11
11
  def register(widget_type, options = {})
12
12
  @widget_types[widget_type.name] = widget_type
13
- if options[:default]
14
- widget_type.roles.each do |role|
15
- defaults_by_role[role] = widget_type
16
- end
13
+ return unless options[:default]
14
+
15
+ widget_type.roles.each do |role|
16
+ defaults_by_role[role] = widget_type
17
17
  end
18
18
  end
19
19
 
@@ -27,8 +27,8 @@ module Pageflow
27
27
  @default_configurations = {}
28
28
  end
29
29
 
30
- def each(&block)
31
- @widget_types.values.each(&block)
30
+ def each(&)
31
+ @widget_types.values.each(&)
32
32
  end
33
33
 
34
34
  def find_by_name!(name)
@@ -37,8 +37,8 @@ module Pageflow
37
37
  end
38
38
  end
39
39
 
40
- def fetch_by_name(name, &block)
41
- @widget_types.fetch(name, &block)
40
+ def fetch_by_name(name, &)
41
+ @widget_types.fetch(name, &)
42
42
  end
43
43
 
44
44
  def type_name?(name)