pageflow 17.0.5 → 17.2.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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +342 -41
  3. data/README.md +3 -5
  4. data/admins/pageflow/accounts.rb +22 -20
  5. data/admins/pageflow/entry.rb +76 -26
  6. data/admins/pageflow/entry_templates.rb +10 -9
  7. data/admins/pageflow/folder.rb +1 -1
  8. data/admins/pageflow/membership.rb +15 -15
  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/images/pageflow/admin/icons/comment.svg +1 -0
  15. data/app/assets/javascripts/pageflow/admin/entries.js +30 -5
  16. data/app/assets/javascripts/pageflow/dist/ui.js +4228 -900
  17. data/app/assets/javascripts/pageflow/editor/vendor.js +0 -1
  18. data/app/assets/javascripts/pageflow/ui.js +0 -1
  19. data/app/assets/stylesheets/pageflow/admin/entries/index_table.scss +2 -1
  20. data/app/assets/stylesheets/pageflow/admin/entry_comments_indicator.scss +45 -0
  21. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +8 -0
  22. data/app/assets/stylesheets/pageflow/admin.scss +1 -0
  23. data/app/assets/stylesheets/pageflow/animations/spin.scss +9 -0
  24. data/app/assets/stylesheets/pageflow/animations.scss +1 -0
  25. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +27 -5
  26. data/app/assets/stylesheets/pageflow/editor/base.scss +11 -1
  27. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +20 -2
  28. data/app/assets/stylesheets/pageflow/editor/edit_configuration_view.scss +5 -0
  29. data/app/assets/stylesheets/pageflow/editor/file_folders.scss +127 -0
  30. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +5 -2
  31. data/app/assets/stylesheets/pageflow/editor/file_meta_data_overlay.scss +45 -0
  32. data/app/assets/stylesheets/pageflow/editor/file_preview.scss +138 -0
  33. data/app/assets/stylesheets/pageflow/editor/file_references.scss +68 -0
  34. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +1 -1
  35. data/app/assets/stylesheets/pageflow/editor/file_stage_icons.scss +17 -0
  36. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +25 -32
  37. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +31 -48
  38. data/app/assets/stylesheets/pageflow/editor/file_type_pills.scss +73 -0
  39. data/app/assets/stylesheets/pageflow/editor/files.scss +242 -50
  40. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +161 -9
  41. data/app/assets/stylesheets/pageflow/editor/folder_breadcrumb.scss +40 -0
  42. data/app/assets/stylesheets/pageflow/editor/info_box.scss +23 -3
  43. data/app/assets/stylesheets/pageflow/editor/inputs/edit_defaults_button.scss +15 -0
  44. data/app/assets/stylesheets/pageflow/editor/inputs.scss +1 -0
  45. data/app/assets/stylesheets/pageflow/editor/list.scss +89 -37
  46. data/app/assets/stylesheets/pageflow/editor/list_search_field.scss +52 -0
  47. data/app/assets/stylesheets/pageflow/editor/manage_files.scss +9 -0
  48. data/app/assets/stylesheets/pageflow/editor/menu.scss +14 -0
  49. data/app/assets/stylesheets/pageflow/editor/move_to_folder_dialog.scss +83 -0
  50. data/app/assets/stylesheets/pageflow/editor/outline.scss +0 -13
  51. data/app/assets/stylesheets/pageflow/editor/sortable.scss +12 -0
  52. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +4 -4
  53. data/app/assets/stylesheets/pageflow/mixins/pageflow.scss +9 -5
  54. data/app/assets/stylesheets/pageflow/ui/color_picker.scss +230 -0
  55. data/app/assets/stylesheets/pageflow/ui/forms.scss +38 -4
  56. data/app/assets/stylesheets/pageflow/ui/functions.scss +12 -2
  57. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +9 -8
  58. data/app/assets/stylesheets/pageflow/ui/input/file_name_input.scss +37 -0
  59. data/app/assets/stylesheets/pageflow/ui/input/text_area_input.scss +15 -0
  60. data/app/assets/stylesheets/pageflow/ui/overrides.scss +8 -0
  61. data/app/assets/stylesheets/pageflow/ui/properties.scss +34 -0
  62. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -3
  63. data/app/assets/stylesheets/pageflow/ui.scss +4 -1
  64. data/app/controllers/concerns/pageflow/controller_delegation.rb +1 -1
  65. data/app/controllers/concerns/pageflow/edit_locking.rb +17 -10
  66. data/app/controllers/concerns/pageflow/entry_password_protection.rb +1 -0
  67. data/app/controllers/concerns/pageflow/public_https_mode.rb +2 -1
  68. data/app/controllers/concerns/pageflow/quota_verification.rb +5 -4
  69. data/app/controllers/pageflow/admin/initial_passwords_controller.rb +1 -0
  70. data/app/controllers/pageflow/application_controller.rb +19 -19
  71. data/app/controllers/pageflow/chapters_controller.rb +3 -2
  72. data/app/controllers/pageflow/edit_locks_controller.rb +3 -2
  73. data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +1 -0
  74. data/app/controllers/pageflow/editor/entries_controller.rb +3 -1
  75. data/app/controllers/pageflow/editor/entry_publications_controller.rb +1 -0
  76. data/app/controllers/pageflow/editor/file_folders_controller.rb +80 -0
  77. data/app/controllers/pageflow/editor/file_import_controller.rb +4 -3
  78. data/app/controllers/pageflow/editor/files_controller.rb +20 -10
  79. data/app/controllers/pageflow/editor/oembeds_controller.rb +21 -0
  80. data/app/controllers/pageflow/editor/widgets_controller.rb +1 -0
  81. data/app/controllers/pageflow/entries_controller.rb +85 -21
  82. data/app/controllers/pageflow/feeds_controller.rb +1 -1
  83. data/app/controllers/pageflow/files_controller.rb +1 -0
  84. data/app/controllers/pageflow/pages_controller.rb +4 -2
  85. data/app/controllers/pageflow/review/comment_thread_reads_controller.rb +30 -0
  86. data/app/controllers/pageflow/review/comment_threads_controller.rb +60 -0
  87. data/app/controllers/pageflow/review/comments_controller.rb +53 -0
  88. data/app/controllers/pageflow/revisions_controller.rb +5 -1
  89. data/app/controllers/pageflow/sitemaps_controller.rb +1 -1
  90. data/app/controllers/pageflow/storylines_controller.rb +1 -0
  91. data/app/helpers/pageflow/admin/cutoff_modes_helper.rb +12 -0
  92. data/app/helpers/pageflow/admin/entries_helper.rb +41 -1
  93. data/app/helpers/pageflow/admin/entry_translations_helper.rb +18 -0
  94. data/app/helpers/pageflow/admin/features_helper.rb +1 -1
  95. data/app/helpers/pageflow/admin/form_helper.rb +3 -3
  96. data/app/helpers/pageflow/admin/locales_helper.rb +10 -2
  97. data/app/helpers/pageflow/admin/memberships_helper.rb +32 -32
  98. data/app/helpers/pageflow/admin/revisions_helper.rb +1 -1
  99. data/app/helpers/pageflow/admin/sites_helper.rb +22 -0
  100. data/app/helpers/pageflow/admin/users_helper.rb +7 -5
  101. data/app/helpers/pageflow/admin/widgets_helper.rb +5 -5
  102. data/app/helpers/pageflow/asset_urls_helper.rb +1 -1
  103. data/app/helpers/pageflow/audio_files_helper.rb +5 -2
  104. data/app/helpers/pageflow/background_image_helper.rb +7 -6
  105. data/app/helpers/pageflow/common_entry_seed_helper.rb +7 -7
  106. data/app/helpers/pageflow/editor/config_helper.rb +3 -1
  107. data/app/helpers/pageflow/editor/files_helper.rb +1 -1
  108. data/app/helpers/pageflow/embed_code_helper.rb +3 -3
  109. data/app/helpers/pageflow/entries_helper.rb +52 -46
  110. data/app/helpers/pageflow/entry_json_seed_helper.rb +7 -6
  111. data/app/helpers/pageflow/feeds_helper.rb +2 -2
  112. data/app/helpers/pageflow/file_background_images_helper.rb +2 -2
  113. data/app/helpers/pageflow/file_thumbnails_helper.rb +4 -3
  114. data/app/helpers/pageflow/files_helper.rb +5 -4
  115. data/app/helpers/pageflow/folders_helper.rb +8 -5
  116. data/app/helpers/pageflow/help_entries_helper.rb +2 -2
  117. data/app/helpers/pageflow/hreflang_links_helper.rb +37 -0
  118. data/app/helpers/pageflow/info_box_helper.rb +7 -11
  119. data/app/helpers/pageflow/media_query_helper.rb +3 -3
  120. data/app/helpers/pageflow/navigation_bar_helper.rb +1 -1
  121. data/app/helpers/pageflow/overview_helper.rb +1 -1
  122. data/app/helpers/pageflow/page_types_helper.rb +5 -5
  123. data/app/helpers/pageflow/pages_helper.rb +29 -15
  124. data/app/helpers/pageflow/public_i18n_helper.rb +10 -9
  125. data/app/helpers/pageflow/quota_helper.rb +4 -4
  126. data/app/helpers/pageflow/render_json_helper.rb +6 -3
  127. data/app/helpers/pageflow/revision_file_helper.rb +2 -1
  128. data/app/helpers/pageflow/sites_helper.rb +3 -3
  129. data/app/helpers/pageflow/social_share_helper.rb +24 -10
  130. data/app/helpers/pageflow/social_share_links_helper.rb +12 -9
  131. data/app/helpers/pageflow/structured_data_helper.rb +5 -2
  132. data/app/helpers/pageflow/stub_page_configuration.rb +7 -3
  133. data/app/helpers/pageflow/text_direction_helper.rb +1 -1
  134. data/app/helpers/pageflow/themes_helper.rb +2 -4
  135. data/app/helpers/pageflow/video_files_helper.rb +29 -13
  136. data/app/helpers/pageflow/widgets_helper.rb +8 -6
  137. data/app/inputs/pageflow_permalink_input.rb +8 -3
  138. data/app/jobs/pageflow/application_job.rb +1 -0
  139. data/app/jobs/pageflow/entry_export_import/upload_and_publish_file_job.rb +1 -1
  140. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -0
  141. data/app/jobs/pageflow/poll_zencoder_job.rb +3 -2
  142. data/app/jobs/pageflow/process_image_or_text_track_job.rb +1 -0
  143. data/app/jobs/pageflow/prune_auto_snapshots_job.rb +1 -0
  144. data/app/jobs/pageflow/request_meta_data_from_zencoder_job.rb +1 -0
  145. data/app/jobs/pageflow/submit_file_to_zencoder_job.rb +1 -0
  146. data/app/mailers/pageflow/user_mailer.rb +1 -0
  147. data/app/models/concerns/pageflow/auto_generated_perma_id.rb +20 -1
  148. data/app/models/concerns/pageflow/entry_publication_states.rb +7 -3
  149. data/app/models/concerns/pageflow/feature_target.rb +8 -4
  150. data/app/models/concerns/pageflow/output_source.rb +3 -3
  151. data/app/models/concerns/pageflow/permalinkable.rb +2 -1
  152. data/app/models/concerns/pageflow/reusable_file.rb +24 -24
  153. data/app/models/concerns/pageflow/serialization_blacklist.rb +3 -5
  154. data/app/models/concerns/pageflow/suspendable.rb +5 -3
  155. data/app/models/concerns/pageflow/theme_referencer.rb +1 -1
  156. data/app/models/concerns/pageflow/translatable.rb +62 -0
  157. data/app/models/concerns/pageflow/translated_attributes.rb +101 -0
  158. data/app/models/concerns/pageflow/uploadable_file.rb +6 -6
  159. data/app/models/pageflow/account.rb +6 -5
  160. data/app/models/pageflow/account_member_query.rb +1 -1
  161. data/app/models/pageflow/account_role_query.rb +1 -1
  162. data/app/models/pageflow/application_query.rb +1 -1
  163. data/app/models/pageflow/application_record.rb +1 -1
  164. data/app/models/pageflow/audio_file.rb +4 -4
  165. data/app/models/pageflow/audio_file_url_templates.rb +1 -1
  166. data/app/models/pageflow/authentication_token.rb +2 -2
  167. data/app/models/pageflow/chapter.rb +6 -1
  168. data/app/models/pageflow/chapter_scaffold.rb +2 -4
  169. data/app/models/pageflow/cname_site_request_scope.rb +1 -1
  170. data/app/models/pageflow/comment.rb +30 -0
  171. data/app/models/pageflow/comment_thread.rb +65 -0
  172. data/app/models/pageflow/comment_thread_read.rb +22 -0
  173. data/app/models/pageflow/customized_theme.rb +9 -8
  174. data/app/models/pageflow/draft_entry.rb +49 -9
  175. data/app/models/pageflow/edit_lock.rb +19 -21
  176. data/app/models/pageflow/encoding_confirmation.rb +2 -2
  177. data/app/models/pageflow/entries_feed.rb +2 -2
  178. data/app/models/pageflow/entry.rb +46 -30
  179. data/app/models/pageflow/entry_at_revision.rb +14 -2
  180. data/app/models/pageflow/entry_comment_summary.rb +114 -0
  181. data/app/models/pageflow/entry_duplicate.rb +8 -5
  182. data/app/models/pageflow/entry_publication.rb +2 -2
  183. data/app/models/pageflow/entry_role_query.rb +4 -4
  184. data/app/models/pageflow/entry_template.rb +4 -4
  185. data/app/models/pageflow/entry_title_or_account_name_query.rb +2 -2
  186. data/app/models/pageflow/entry_translation_group.rb +42 -0
  187. data/app/models/pageflow/file_folder.rb +74 -0
  188. data/app/models/pageflow/file_reuse.rb +5 -4
  189. data/app/models/pageflow/file_usage.rb +18 -3
  190. data/app/models/pageflow/folder.rb +2 -2
  191. data/app/models/pageflow/home_button.rb +7 -7
  192. data/app/models/pageflow/image_file.rb +44 -25
  193. data/app/models/pageflow/image_file_url_templates.rb +4 -4
  194. data/app/models/pageflow/invitation_form.rb +2 -1
  195. data/app/models/pageflow/legal_info.rb +38 -0
  196. data/app/models/pageflow/managed_user_query.rb +1 -1
  197. data/app/models/pageflow/membership.rb +5 -5
  198. data/app/models/pageflow/nested_revision_component_copy.rb +263 -0
  199. data/app/models/pageflow/null_user.rb +1 -1
  200. data/app/models/pageflow/overview_button.rb +1 -1
  201. data/app/models/pageflow/page.rb +7 -3
  202. data/app/models/pageflow/permalink.rb +24 -2
  203. data/app/models/pageflow/permalink_directory.rb +7 -0
  204. data/app/models/pageflow/permalink_redirect.rb +7 -0
  205. data/app/models/pageflow/positioned_file.rb +5 -5
  206. data/app/models/pageflow/potential_entry_translations.rb +55 -0
  207. data/app/models/pageflow/potential_memberships.rb +5 -4
  208. data/app/models/pageflow/published_entry.rb +62 -11
  209. data/app/models/pageflow/revision.rb +29 -16
  210. data/app/models/pageflow/roles.rb +14 -18
  211. data/app/models/pageflow/site.rb +46 -3
  212. data/app/models/pageflow/site_root_entry_form.rb +27 -0
  213. data/app/models/pageflow/sitemaps.rb +10 -1
  214. data/app/models/pageflow/storyline.rb +5 -2
  215. data/app/models/pageflow/storyline_scaffold.rb +1 -1
  216. data/app/models/pageflow/text_track_file.rb +1 -1
  217. data/app/models/pageflow/text_track_file_url_templates.rb +1 -1
  218. data/app/models/pageflow/theme_customization_file.rb +3 -2
  219. data/app/models/pageflow/thumbnail_file_resolver.rb +1 -1
  220. data/app/models/pageflow/url_template.rb +1 -1
  221. data/app/models/pageflow/used_file.rb +13 -3
  222. data/app/models/pageflow/user_name_query.rb +2 -2
  223. data/app/models/pageflow/video_file.rb +22 -15
  224. data/app/models/pageflow/video_file_url_templates.rb +6 -4
  225. data/app/models/pageflow/widget.rb +5 -4
  226. data/app/models/pageflow/with_file_usage_extension.rb +1 -1
  227. data/app/models/pageflow/zencoder_attachment.rb +8 -8
  228. data/app/policies/pageflow/account_policy.rb +3 -1
  229. data/app/policies/pageflow/admin/admin_only_tab_policy.rb +1 -0
  230. data/app/policies/pageflow/admin/entry_tab_policy.rb +1 -0
  231. data/app/policies/pageflow/application_policy.rb +2 -0
  232. data/app/policies/pageflow/entry_policy.rb +7 -1
  233. data/app/policies/pageflow/entry_template_policy.rb +2 -1
  234. data/app/policies/pageflow/file_policy.rb +4 -7
  235. data/app/policies/pageflow/folder_policy.rb +18 -8
  236. data/app/policies/pageflow/membership_policy.rb +6 -4
  237. data/app/policies/pageflow/site_policy.rb +10 -3
  238. data/app/policies/pageflow/user_policy.rb +6 -4
  239. data/app/state_machines/pageflow/image_and_text_track_processing_state_machine.rb +3 -2
  240. data/app/state_machines/pageflow/media_encoding_state_machine.rb +5 -4
  241. data/app/views/admin/accounts/_entry_template_details.html.arb +2 -2
  242. data/app/views/admin/entries/_attributes_table.html.arb +6 -5
  243. data/app/views/admin/entries/_form.html.erb +2 -1
  244. data/app/views/admin/entries/_permalink_inputs.html.erb +9 -2
  245. data/app/views/admin/entry_templates/_form.html.erb +1 -3
  246. data/app/views/admin/site_root_entry/choose.html.erb +19 -0
  247. data/app/views/admin/sites/_fields.html.erb +14 -1
  248. data/app/views/admin/translations/_form.html.erb +31 -0
  249. data/app/views/admin/users/_attributes_table.html.arb +13 -0
  250. data/app/views/components/pageflow/admin/add_membership_button.rb +13 -12
  251. data/app/views/components/pageflow/admin/custom_scopes_renderer.rb +1 -0
  252. data/app/views/components/pageflow/admin/embed_code_field.rb +1 -0
  253. data/app/views/components/pageflow/admin/embedded_index_table.rb +9 -10
  254. data/app/views/components/pageflow/admin/entries_tab.rb +1 -0
  255. data/app/views/components/pageflow/admin/entry_publication_state_indicator.rb +6 -5
  256. data/app/views/components/pageflow/admin/entry_templates_tab.rb +2 -1
  257. data/app/views/components/pageflow/admin/entry_translations_tab.rb +102 -0
  258. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +1 -0
  259. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +9 -8
  260. data/app/views/components/pageflow/admin/features_tab.rb +1 -0
  261. data/app/views/components/pageflow/admin/grouped_folder_list.rb +1 -0
  262. data/app/views/components/pageflow/admin/icon_link_to.rb +1 -0
  263. data/app/views/components/pageflow/admin/members_tab.rb +4 -3
  264. data/app/views/components/pageflow/admin/membership_role_with_tooltip.rb +3 -2
  265. data/app/views/components/pageflow/admin/revisions_tab.rb +14 -10
  266. data/app/views/components/pageflow/admin/sites_tab.rb +1 -0
  267. data/app/views/components/pageflow/admin/tabs_view.rb +1 -0
  268. data/app/views/components/pageflow/admin/timestamp.rb +6 -5
  269. data/app/views/components/pageflow/admin/user_account_badge_list.rb +2 -3
  270. data/app/views/components/pageflow/admin/user_accounts_tab.rb +1 -0
  271. data/app/views/components/pageflow/admin/user_entries_tab.rb +1 -0
  272. data/app/views/components/pageflow/admin/users_tab.rb +1 -0
  273. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +0 -1
  274. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +5 -3
  275. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
  276. data/app/views/pageflow/editor/entries/index.json.jbuilder +1 -1
  277. data/app/views/pageflow/editor/entries/seed.json.erb +1 -0
  278. data/app/views/pageflow/editor/entries/show.json.jbuilder +1 -1
  279. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +2 -2
  280. data/app/views/pageflow/editor/file_folders/_file_folder.json.jbuilder +5 -0
  281. data/app/views/pageflow/editor/file_folders/create.json.jbuilder +1 -0
  282. data/app/views/pageflow/editor/file_folders/index.json.jbuilder +3 -0
  283. data/app/views/pageflow/editor/files/_file.json.jbuilder +7 -14
  284. data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
  285. data/app/views/pageflow/editor/files/index.json.jbuilder +1 -1
  286. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +3 -0
  287. data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
  288. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +4 -3
  289. data/app/views/pageflow/entries/share_menu/_bluesky_link.html.erb +8 -0
  290. data/app/views/pageflow/entries/share_menu/_threads_link.html.erb +8 -0
  291. data/app/views/pageflow/files/_file.json.jbuilder +5 -3
  292. data/app/views/pageflow/image_files/_image_file.json.jbuilder +0 -1
  293. data/app/views/pageflow/review/comment_threads/_comment_thread.json.jbuilder +20 -0
  294. data/app/views/pageflow/review/comment_threads/create.json.jbuilder +2 -0
  295. data/app/views/pageflow/review/comment_threads/index.json.jbuilder +13 -0
  296. data/app/views/pageflow/review/comments/_comment.json.jbuilder +13 -0
  297. data/app/views/pageflow/review/comments/create.json.jbuilder +1 -0
  298. data/app/views/pageflow/sitemaps/index.xml.builder +9 -1
  299. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
  300. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
  301. data/app/views/pageflow/structured_data/_entry.json.jbuilder +2 -3
  302. data/app/views/pageflow/video_files/_video_file.json.jbuilder +0 -1
  303. data/config/initializers/active_admin_patches.rb +3 -6
  304. data/config/initializers/admin_resource_tabs.rb +3 -0
  305. data/config/initializers/paperclip.rb +1 -0
  306. data/config/initializers/symmetric_encryption.rb +1 -1
  307. data/config/initializers/zencoder.rb +24 -13
  308. data/config/locales/de.yml +256 -12
  309. data/config/locales/en.yml +253 -15
  310. data/config/routes.rb +29 -13
  311. data/config/spring.rb +2 -1
  312. data/db/migrate/20140418225525_setup_schema.rb +2 -2
  313. data/db/migrate/20190306161431_copy_file_attributes_of_failed_uploads.rb +2 -2
  314. data/db/migrate/20190820152900_drop_accounts_themes.rb +2 -1
  315. data/db/migrate/20191202145757_create_pageflow_scrolled_sections.rb +11 -11
  316. data/db/migrate/20191202150657_create_pageflow_scrolled_chapters.rb +1 -1
  317. data/db/migrate/20191202154723_create_pageflow_scrolled_content_elements.rb +9 -9
  318. data/db/migrate/20191219143450_add_position_to_content_elements.rb +2 -1
  319. data/db/migrate/20200117133200_change_revision_appearance_option_default_and_null.rb +2 -1
  320. data/db/migrate/20200122115400_create_pageflow_entry_templates.rb +25 -25
  321. data/db/migrate/20200206134400_convert_legacy_scrolled_content_element_types.rb +3 -3
  322. data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +2 -2
  323. data/db/migrate/20230120092923_create_other_files.rb +2 -1
  324. data/db/migrate/20230419083307_create_pageflow_entry_translation_group.rb +9 -0
  325. data/db/migrate/20240612110434_add_cutoff_mode_name_to_sites.rb +5 -0
  326. data/db/migrate/20240918084059_create_pageflow_permalink_redirects.rb +14 -0
  327. data/db/migrate/20250508172234_ensure_scrolled_entries_have_main_storyline.rb +14 -0
  328. data/db/migrate/20250617090048_add_custom404_entry_to_sites.rb +5 -0
  329. data/db/migrate/20250617100000_add_perma_id_counter_to_entries.rb +28 -0
  330. data/db/migrate/20250722174123_add_perma_id_to_chapters.rb +10 -0
  331. data/db/migrate/20250725080603_add_perma_id_indexes_to_revision_components.rb +13 -0
  332. data/db/migrate/20250726000000_add_display_name_to_file_usages.rb +5 -0
  333. data/db/migrate/20251015000000_add_structured_data_type_name_to_revisions.rb +5 -0
  334. data/db/migrate/20251029142849_convert_legacy_social_embeds_to_unified_social_embed.rb +38 -0
  335. data/db/migrate/20251119083347_fix_main_storyline_positions.rb +16 -0
  336. data/db/migrate/20251119083348_ensure_scrolled_entries_have_excursion_storyline.rb +15 -0
  337. data/db/migrate/20260303000000_add_layout_version_to_revisions.rb +6 -0
  338. data/db/migrate/20260323000000_create_comment_threads_and_comments.rb +30 -0
  339. data/db/migrate/20260414000000_add_subject_range_to_comment_threads.rb +5 -0
  340. data/db/migrate/20260415000000_add_section_perma_id_to_comment_threads.rb +5 -0
  341. data/db/migrate/20260727000000_add_quote_to_comments.rb +5 -0
  342. data/db/migrate/20260728000000_create_file_folders.rb +17 -0
  343. data/db/migrate/20260805000000_add_attribute_translations_to_sites.rb +5 -0
  344. data/db/migrate/20260806000000_add_edited_at_to_comments.rb +5 -0
  345. data/db/migrate/20260810000000_create_pageflow_scrolled_lottie_files.rb +24 -0
  346. data/db/migrate/20260817000000_create_comment_thread_reads.rb +16 -0
  347. data/db/migrate/20260819000000_add_unread_comments_since_at_to_users.rb +18 -0
  348. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +12599 -5398
  349. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +1275 -4560
  350. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +20204 -22
  351. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +18657 -19
  352. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  353. data/entry_types/paged/app/helpers/pageflow_paged/page_background_asset_helper.rb +1 -1
  354. data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +7 -7
  355. data/entry_types/paged/app/views/pageflow_paged/editor/entries/_seed.json.jbuilder +1 -0
  356. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  357. data/entry_types/paged/lib/pageflow_paged/plugin.rb +4 -0
  358. data/entry_types/paged/lib/pageflow_paged/react/page_type.rb +1 -1
  359. data/entry_types/paged/lib/pageflow_paged/react/widget_type.rb +3 -3
  360. data/entry_types/paged/lib/pageflow_paged.rb +1 -1
  361. data/entry_types/scrolled/app/assets/stylesheets/pageflow_scrolled/ui.scss +2 -0
  362. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +5 -3
  363. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +35 -5
  364. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +4 -5
  365. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +23 -2
  366. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +3 -3
  367. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +8 -5
  368. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +7 -3
  369. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +72 -10
  370. data/entry_types/scrolled/app/helpers/pageflow_scrolled/i18n_helper.rb +28 -13
  371. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +41 -12
  372. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +23 -25
  373. data/entry_types/scrolled/app/helpers/pageflow_scrolled/sprockets_helper.rb +16 -0
  374. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +189 -3
  375. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +15 -14
  376. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +61 -7
  377. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file.rb +6 -0
  378. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file_url_templates.rb +16 -0
  379. data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +12 -1
  380. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +20 -1
  381. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -0
  382. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +2 -2
  383. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +15 -12
  384. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +45 -17
  385. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry_translations.json.jbuilder +14 -0
  386. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +34 -5
  387. data/entry_types/scrolled/app/views/pageflow_scrolled/favicons/_entry.html.erb +1 -1
  388. data/entry_types/scrolled/app/views/pageflow_scrolled/storylines/_storyline.json.jbuilder +7 -0
  389. data/entry_types/scrolled/config/configuration_schemas/pageflow-scrolled.json +414 -0
  390. data/entry_types/scrolled/config/locales/de.yml +1094 -78
  391. data/entry_types/scrolled/config/locales/en.yml +1083 -78
  392. data/entry_types/scrolled/config/routes.rb +18 -8
  393. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +11 -11
  394. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantDesktop.svg +56 -0
  395. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDarkVariantMobile.svg +22 -0
  396. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +26 -11
  397. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +27 -8
  398. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +2 -2
  399. data/entry_types/scrolled/lib/pageflow_scrolled/additional_theme_assets.rb +27 -0
  400. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +67 -10
  401. data/entry_types/scrolled/lib/pageflow_scrolled/configuration_schemas.rb +91 -0
  402. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +1 -1
  403. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +2 -1
  404. data/entry_types/scrolled/lib/pageflow_scrolled/entry_file_reference_locations.rb +71 -0
  405. data/entry_types/scrolled/lib/pageflow_scrolled/entry_structured_data_types/faq_page.rb +58 -0
  406. data/entry_types/scrolled/lib/pageflow_scrolled/file_reference_locations.rb +69 -0
  407. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +222 -19
  408. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +2 -4
  409. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +76 -54
  410. data/entry_types/scrolled/lib/pageflow_scrolled/theme_options_default_scale.rb +35 -0
  411. data/entry_types/scrolled/lib/pageflow_scrolled.rb +14 -1
  412. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +24 -5
  413. data/entry_types/scrolled/package/config/configurationSchemas.js +70 -0
  414. data/entry_types/scrolled/package/config/rollup/configurationSchemas.js +19 -0
  415. data/entry_types/scrolled/package/config/webpack.js +94 -0
  416. data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -0
  417. data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1795 -0
  418. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.css +1 -0
  419. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.js +219 -0
  420. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.css +1 -0
  421. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.js +244 -0
  422. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.css +1 -0
  423. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.js +823 -0
  424. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.css +1 -0
  425. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +109 -0
  426. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.css +1 -0
  427. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.js +277 -0
  428. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.css +1 -0
  429. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.js +244 -0
  430. data/entry_types/scrolled/package/contentElements-editor.js +3155 -583
  431. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  432. data/entry_types/scrolled/package/contentElements-frontend.js +3375 -1585
  433. data/entry_types/scrolled/package/editor.css +1 -0
  434. data/entry_types/scrolled/package/editor.js +8452 -2867
  435. data/entry_types/scrolled/package/entryState.js +1600 -0
  436. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-20c600de.js +1979 -0
  437. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-58189220.js +2538 -0
  438. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-4ec6b2de.js → PhonePlatformContext-035a99fa.js} +9 -15
  439. data/entry_types/scrolled/package/frontend/PhonePlatformContext-9da43797.js +33 -0
  440. data/entry_types/scrolled/package/frontend/Placeholder.module-bf0966b4.js +5267 -0
  441. data/entry_types/scrolled/package/frontend/Placeholder.module-d22a9335.js +4180 -0
  442. data/entry_types/scrolled/package/frontend/ThemeIcon-ab834849.js +754 -0
  443. data/entry_types/scrolled/package/frontend/ThemeIcon-f6cb3a8f.js +773 -0
  444. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-30fd1124.js +39 -0
  445. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-61c25224.js +72 -0
  446. data/entry_types/scrolled/package/frontend/Viewer-1074fd59.js +147 -0
  447. data/entry_types/scrolled/package/frontend/Viewer-1482ca34.js +480 -0
  448. data/entry_types/scrolled/package/frontend/Viewer-70504231.js +210 -0
  449. data/entry_types/scrolled/package/frontend/{Viewer-1bb5597c.js → Viewer-cc8d4072.js} +100 -135
  450. data/entry_types/scrolled/package/frontend/Wavesurfer-656e3c36.js +302 -0
  451. data/entry_types/scrolled/package/frontend/Wavesurfer-b753b838.js +385 -0
  452. data/entry_types/scrolled/package/frontend/commenting.css +1 -0
  453. data/entry_types/scrolled/package/frontend/extensions-167ae143.js +1455 -0
  454. data/entry_types/scrolled/package/frontend/extensions-2318f92b.js +5918 -0
  455. data/entry_types/scrolled/package/frontend/extensions-a461fd13.js +4890 -0
  456. data/entry_types/scrolled/package/frontend/extensions-c98269fd.js +1982 -0
  457. data/entry_types/scrolled/package/frontend/i18n-493cd2a6.js +93 -0
  458. data/entry_types/scrolled/package/frontend/i18n-e06cac14.js +100 -0
  459. data/entry_types/scrolled/package/frontend/{index-11f32f10.js → index-2e5546f7.js} +39 -54
  460. data/entry_types/scrolled/package/frontend/index-de2b418d.js +130 -0
  461. data/entry_types/scrolled/package/frontend/index.css +1 -1
  462. data/entry_types/scrolled/package/frontend/index.js +1976 -1367
  463. data/entry_types/scrolled/package/frontend/inlineEditing.css +1 -0
  464. data/entry_types/scrolled/package/frontend/useContentElementEditorState-a084912e.js +25 -0
  465. data/entry_types/scrolled/package/frontend/useDelayedBoolean-a387d85b.js +24 -0
  466. data/entry_types/scrolled/package/frontend/usePhonePlatform-4ecb96d4.js +8 -0
  467. data/entry_types/scrolled/package/frontend/usePhonePlatform-ce9ff08d.js +8 -0
  468. data/entry_types/scrolled/package/frontend-server.js +20 -210
  469. data/entry_types/scrolled/package/package.json +22 -12
  470. data/entry_types/scrolled/package/review.css +1 -0
  471. data/entry_types/scrolled/package/review.js +3306 -0
  472. data/entry_types/scrolled/package/testHelpers.js +952 -239
  473. data/entry_types/scrolled/package/values/widgets.module.css +18 -0
  474. data/entry_types/scrolled/package/widgets/consentBar.css +1 -1
  475. data/entry_types/scrolled/package/widgets/consentBar.js +275 -315
  476. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  477. data/entry_types/scrolled/package/widgets/defaultNavigation.js +961 -432
  478. data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -0
  479. data/entry_types/scrolled/package/widgets/excursionSheet.js +225 -0
  480. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
  481. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +62 -32
  482. data/entry_types/scrolled/package/widgets/iconScrollIndicator.css +1 -0
  483. data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +67 -0
  484. data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -0
  485. data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +100 -0
  486. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
  487. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +48 -26
  488. data/entry_types/scrolled/package/widgets-server.js +2 -0
  489. data/entry_types/scrolled/spec/factories/chapters.rb +14 -1
  490. data/entry_types/scrolled/spec/factories/content_elements.rb +1 -1
  491. data/entry_types/scrolled/spec/factories/lottie_files.rb +29 -0
  492. data/entry_types/scrolled/spec/fixtures/animation.lottie +0 -0
  493. data/entry_types/scrolled/spec/fixtures/font.woff +0 -0
  494. data/entry_types/scrolled/spec/fixtures/font.woff2 +0 -0
  495. data/lib/generators/pageflow/active_admin_initializer/active_admin_initializer_generator.rb +5 -3
  496. data/lib/generators/pageflow/assets/assets_generator.rb +7 -5
  497. data/lib/generators/pageflow/cancan/cancan_generator.rb +2 -1
  498. data/lib/generators/pageflow/cancan/templates/ability.rb +1 -1
  499. data/lib/generators/pageflow/error_pages/error_pages_generator.rb +2 -1
  500. data/lib/generators/pageflow/initializer/initializer_generator.rb +3 -2
  501. data/lib/generators/pageflow/install/install_generator.rb +2 -2
  502. data/lib/generators/pageflow/procfile/procfile_generator.rb +2 -1
  503. data/lib/generators/pageflow/resque/resque_generator.rb +4 -4
  504. data/lib/generators/pageflow/resque/templates/resque.rake +1 -1
  505. data/lib/generators/pageflow/routes/routes_generator.rb +4 -2
  506. data/lib/generators/pageflow/seeds/seeds_generator.rb +3 -2
  507. data/lib/generators/pageflow/seeds/templates/seeds.rb +6 -6
  508. data/lib/generators/pageflow/theme/theme_generator.rb +2 -1
  509. data/lib/generators/pageflow/user/user_generator.rb +2 -1
  510. data/lib/pageflow/ability_mixin.rb +25 -15
  511. data/lib/pageflow/active_admin_patches/views/attributes_table.rb +1 -0
  512. data/lib/pageflow/active_admin_patches/views/pages/base.rb +3 -2
  513. data/lib/pageflow/active_admin_patches/views/table_for.rb +1 -0
  514. data/lib/pageflow/additional_headers.rb +27 -0
  515. data/lib/pageflow/admin/attributes_table_rows.rb +3 -3
  516. data/lib/pageflow/admin/tabs.rb +1 -1
  517. data/lib/pageflow/built_in_file_type.rb +1 -1
  518. data/lib/pageflow/built_in_page_types_plugin.rb +1 -1
  519. data/lib/pageflow/built_in_widget_type.rb +2 -2
  520. data/lib/pageflow/built_in_widget_types_plugin.rb +2 -1
  521. data/lib/pageflow/configuration.rb +183 -18
  522. data/lib/pageflow/cutoff_modes.rb +39 -0
  523. data/lib/pageflow/deprecation.rb +19 -0
  524. data/lib/pageflow/editor_controller.rb +6 -10
  525. data/lib/pageflow/engine.rb +5 -6
  526. data/lib/pageflow/entries_controller_env_helper.rb +32 -2
  527. data/lib/pageflow/entry_export_import/attachment_files.rb +1 -1
  528. data/lib/pageflow/entry_export_import/entry_serialization.rb +9 -8
  529. data/lib/pageflow/entry_export_import/file_mappings.rb +1 -0
  530. data/lib/pageflow/entry_export_import/page_type_versions.rb +2 -2
  531. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +11 -1
  532. data/lib/pageflow/entry_export_import/revision_serialization.rb +3 -0
  533. data/lib/pageflow/entry_export_import.rb +3 -3
  534. data/lib/pageflow/entry_structured_data_types.rb +43 -0
  535. data/lib/pageflow/entry_type_configuration.rb +1 -0
  536. data/lib/pageflow/entry_types.rb +2 -2
  537. data/lib/pageflow/feature.rb +1 -1
  538. data/lib/pageflow/features.rb +4 -6
  539. data/lib/pageflow/file_importers.rb +4 -4
  540. data/lib/pageflow/file_type.rb +5 -5
  541. data/lib/pageflow/file_types.rb +4 -4
  542. data/lib/pageflow/global_config_api.rb +5 -6
  543. data/lib/pageflow/help_entries.rb +7 -7
  544. data/lib/pageflow/help_entry.rb +1 -1
  545. data/lib/pageflow/hooks.rb +1 -1
  546. data/lib/pageflow/nested_revision_component.rb +9 -27
  547. data/lib/pageflow/news_item_api.rb +1 -1
  548. data/lib/pageflow/oembed_providers.rb +42 -0
  549. data/lib/pageflow/page_type.rb +2 -3
  550. data/lib/pageflow/page_types.rb +3 -3
  551. data/lib/pageflow/paperclip_interpolations/support.rb +1 -1
  552. data/lib/pageflow/paperclip_processors/vtt.rb +1 -0
  553. data/lib/pageflow/paperclip_processors/webp.rb +2 -2
  554. data/lib/pageflow/partial_editor_fragment_renderer.rb +2 -2
  555. data/lib/pageflow/plugin.rb +1 -2
  556. data/lib/pageflow/primary_domain_entry_redirect.rb +6 -0
  557. data/lib/pageflow/quota.rb +9 -5
  558. data/lib/pageflow/quotas.rb +1 -1
  559. data/lib/pageflow/rails_version.rb +14 -2
  560. data/lib/pageflow/react.rb +1 -1
  561. data/lib/pageflow/revision_component.rb +8 -40
  562. data/lib/pageflow/revision_components.rb +16 -6
  563. data/lib/pageflow/seeds.rb +12 -16
  564. data/lib/pageflow/theme.rb +1 -1
  565. data/lib/pageflow/theme_customizations.rb +10 -10
  566. data/lib/pageflow/themes.rb +44 -3
  567. data/lib/pageflow/user_mixin.rb +18 -6
  568. data/lib/pageflow/version.rb +1 -1
  569. data/lib/pageflow/widget_type.rb +4 -4
  570. data/lib/pageflow/widget_types.rb +9 -9
  571. data/lib/pageflow/zencoder_api.rb +32 -42
  572. data/lib/pageflow/zencoder_audio_output_definition.rb +14 -13
  573. data/lib/pageflow/zencoder_meta_data_output_definition.rb +3 -2
  574. data/lib/pageflow/zencoder_output_definition.rb +16 -14
  575. data/lib/pageflow/zencoder_video_output_definition.rb +140 -88
  576. data/lib/pageflow.rb +8 -2
  577. data/lib/tasks/pageflow_tasks.rake +1 -1
  578. data/package/config/eslint-rules/documented-in-toc.js +125 -0
  579. data/package/config/jest/index.js +0 -1
  580. data/package/config/webpack.js +0 -1
  581. data/package/config/webpack5.js +0 -1
  582. data/package/editor.js +4880 -2313
  583. data/package/frontend.js +710 -1223
  584. data/package/package.json +3 -1
  585. data/package/review.js +384 -0
  586. data/package/testHelpers.js +257 -243
  587. data/package/ui.js +1487 -813
  588. data/package/vendor/stubs/wysihtml5.js +2 -0
  589. data/spec/factories/accounts.rb +37 -22
  590. data/spec/factories/audio_files.rb +2 -2
  591. data/spec/factories/authentication_tokens.rb +4 -4
  592. data/spec/factories/chapters.rb +4 -4
  593. data/spec/factories/comment_thread_reads.rb +10 -0
  594. data/spec/factories/comment_threads.rb +10 -0
  595. data/spec/factories/comments.rb +9 -0
  596. data/spec/factories/draft_entries.rb +14 -6
  597. data/spec/factories/edit_locks.rb +1 -1
  598. data/spec/factories/entries.rb +28 -19
  599. data/spec/factories/entry_translation_groups.rb +6 -0
  600. data/spec/factories/file_folders.rb +8 -0
  601. data/spec/factories/file_usages.rb +2 -1
  602. data/spec/factories/folders.rb +1 -1
  603. data/spec/factories/image_files.rb +2 -2
  604. data/spec/factories/pages.rb +3 -3
  605. data/spec/factories/published_entries.rb +28 -8
  606. data/spec/factories/revisions.rb +1 -1
  607. data/spec/factories/sites.rb +6 -0
  608. data/spec/factories/test_multi_attachment_files.rb +1 -1
  609. data/spec/factories/text_track_files.rb +1 -1
  610. data/spec/factories/uploadable_files.rb +1 -1
  611. data/spec/factories/users.rb +6 -6
  612. data/spec/factories/video_files.rb +2 -2
  613. data/spec/factories/widgets.rb +1 -1
  614. data/spec/fixtures/7x15_rotated.jpg +0 -0
  615. data/vendor/assets/javascripts/wysihtml-toolbar.js +19288 -0
  616. metadata +266 -92
  617. data/app/assets/stylesheets/pageflow/editor/select_button.scss +0 -51
  618. data/config/initializers/revision_components.rb +0 -5
  619. data/config/locales/twitter_to_x.de.yml +0 -6
  620. data/config/locales/twitter_to_x.en.yml +0 -6
  621. data/entry_types/scrolled/app/helpers/pageflow_scrolled/generated_media_queries_helper.rb +0 -55
  622. data/entry_types/scrolled/config/locales/twitter_to_x.de.yml +0 -12
  623. data/entry_types/scrolled/config/locales/twitter_to_x.en.yml +0 -12
  624. data/entry_types/scrolled/config/locales/vr_image_projection.de.yml +0 -24
  625. data/entry_types/scrolled/config/locales/vr_image_projection.en.yml +0 -24
  626. data/entry_types/scrolled/package/frontend/EditableInlineText.module-ebd22921.js +0 -5497
  627. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-b79159cc.js +0 -107
  628. data/entry_types/scrolled/package/frontend/Viewer-1ecf3375.js +0 -154
  629. data/entry_types/scrolled/package/frontend/Wavesurfer-7d9cf1b7.js +0 -333
  630. data/entry_types/scrolled/package/frontend/arrowRight-62998af9.js +0 -77
  631. data/entry_types/scrolled/package/frontend/components-024a9893.js +0 -2853
  632. data/entry_types/scrolled/package/frontend/createSuper-d0f30da3.js +0 -115
  633. data/entry_types/scrolled/package/frontend/i18n-ce13a8bf.js +0 -1129
  634. data/entry_types/scrolled/package/frontend/useContentElementEditorState-4f4c3cf6.js +0 -52
  635. data/lib/generators/pageflow/resque/templates/resque_enqueue_after_commit_patch.rb +0 -25
  636. data/package/vendor/jquery.minicolors.js +0 -1108
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Revision < ApplicationRecord
2
+ class Revision < ApplicationRecord # rubocop:todo Style/Documentation
3
3
  include SerializedConfiguration
4
4
 
5
5
  PAGE_ORDER = [
@@ -27,14 +27,17 @@ module Pageflow
27
27
  has_many :chapters, -> { order(CHAPTER_ORDER) }, through: :storylines
28
28
  has_many :pages, -> { reorder(PAGE_ORDER) }, through: :storylines
29
29
 
30
+ has_many :comment_threads, dependent: :destroy
31
+
30
32
  has_many :file_usages, dependent: :destroy
33
+ has_many :file_folders, dependent: :destroy
31
34
 
32
35
  has_many :image_files, -> { extending WithFileUsageExtension },
33
- :through => :file_usages, :source => :file, :source_type => 'Pageflow::ImageFile'
36
+ through: :file_usages, source: :file, source_type: 'Pageflow::ImageFile'
34
37
  has_many :video_files, -> { extending WithFileUsageExtension },
35
- :through => :file_usages, :source => :file, :source_type => 'Pageflow::VideoFile'
38
+ through: :file_usages, source: :file, source_type: 'Pageflow::VideoFile'
36
39
  has_many :audio_files, -> { extending WithFileUsageExtension },
37
- :through => :file_usages, :source => :file, :source_type => 'Pageflow::AudioFile'
40
+ through: :file_usages, source: :file, source_type: 'Pageflow::AudioFile'
38
41
 
39
42
  scope(:published,
40
43
  lambda do
@@ -71,7 +74,11 @@ module Pageflow
71
74
  scope :frozen, -> { where('frozen_at IS NOT NULL') }
72
75
 
73
76
  scope :publications, -> { where('published_at IS NOT NULL') }
74
- scope :publications_and_user_snapshots, -> { where('published_at IS NOT NULL OR snapshot_type = "user"') }
77
+ scope :publications_and_user_snapshots, lambda {
78
+ where(
79
+ 'published_at IS NOT NULL OR snapshot_type = "user"'
80
+ )
81
+ }
75
82
  scope :user_snapshots, -> { where(snapshot_type: 'user') }
76
83
  scope :auto_snapshots, -> { where(snapshot_type: 'auto') }
77
84
 
@@ -100,6 +107,7 @@ module Pageflow
100
107
  def find_file_by_perma_id(model, perma_id)
101
108
  file = files(model).find_by(pageflow_file_usages: {file_perma_id: perma_id})
102
109
  return unless file
110
+
103
111
  UsedFile.new(file)
104
112
  end
105
113
 
@@ -140,7 +148,7 @@ module Pageflow
140
148
  end
141
149
 
142
150
  def published?
143
- (published_at.present? && Time.now >= published_at) &&
151
+ published_at.present? && Time.now >= published_at &&
144
152
  (published_until.blank? || Time.now < published_until)
145
153
  end
146
154
 
@@ -163,7 +171,7 @@ module Pageflow
163
171
  # Public interface for copying a revision
164
172
  #
165
173
  # @since 15.1
166
- def copy(&block)
174
+ def copy
167
175
  revision = dup
168
176
 
169
177
  yield(revision) if block_given?
@@ -172,15 +180,16 @@ module Pageflow
172
180
  widget.copy_to(revision)
173
181
  end
174
182
 
175
- file_usages.each do |file_usage|
176
- file_usage.copy_to(revision)
177
- end
183
+ revision.save!
178
184
 
179
- find_revision_components.each do |revision_component|
180
- revision_component.copy_to(revision)
181
- end
185
+ NestedRevisionComponentCopy.new(
186
+ from: self,
187
+ to: revision
188
+ ).perform_for(
189
+ revision_components: Pageflow.config.revision_components.to_a +
190
+ [FileFolder, FileUsage]
191
+ )
182
192
 
183
- revision.save!
184
193
  revision
185
194
  end
186
195
 
@@ -190,8 +199,12 @@ module Pageflow
190
199
  end
191
200
  end
192
201
 
202
+ def entry_for_auto_generated_perma_id
203
+ entry
204
+ end
205
+
193
206
  def self.depublish_all
194
- published.update_all(:published_until => Time.now)
207
+ published.update_all(published_until: Time.now)
195
208
  end
196
209
 
197
210
  def configuration
@@ -203,7 +216,7 @@ module Pageflow
203
216
  'manual_start' => manual_start,
204
217
  'overview_button_enabled' => overview_button_enabled
205
218
  }.delete_if { |_k, v| v.nil? }
206
- .merge(read_attribute(:configuration) || {})
219
+ .merge(read_attribute(:configuration) || {})
207
220
  end
208
221
 
209
222
  def self.ransackable_attributes(_auth_object = nil)
@@ -1,33 +1,29 @@
1
1
  module Pageflow
2
- module Roles
2
+ module Roles # rubocop:todo Style/Documentation
3
3
  module_function
4
4
 
5
5
  def at_least(role_uncasted)
6
6
  role = role_uncasted.to_sym
7
- if role == :member
8
- %w(member previewer editor publisher manager)
9
- elsif role == :previewer
10
- %w(previewer editor publisher manager)
11
- elsif role == :editor
12
- %w(editor publisher manager)
13
- elsif role == :publisher
14
- %w(publisher manager)
15
- elsif role == :manager
16
- %w(manager)
17
- end
7
+ {
8
+ member: %w[member previewer editor publisher manager],
9
+ previewer: %w[previewer editor publisher manager],
10
+ editor: %w[editor publisher manager],
11
+ publisher: %w[publisher manager],
12
+ manager: %w[manager]
13
+ }[role]
18
14
  end
19
15
 
20
16
  def high(user, entry)
21
17
  roles = [:none, :member, :previewer, :editor, :publisher, :manager]
22
18
 
23
- account_membership = Membership.where(user: user, entity: entry.account).first
19
+ account_membership = Membership.where(user:, entity: entry.account).first
24
20
  account_role = account_membership ? account_membership.role : :none
25
21
 
26
- if user.entries.include?(entry)
27
- entry_role = Membership.where(user: user, entity: entry).first.role
28
- else
29
- entry_role = :none
30
- end
22
+ entry_role = if user.entries.include?(entry)
23
+ Membership.where(user:, entity: entry).first.role
24
+ else
25
+ :none
26
+ end
31
27
 
32
28
  if roles.find_index(account_role.to_sym) > roles.find_index(entry_role.to_sym)
33
29
  account_role.to_sym
@@ -1,18 +1,31 @@
1
1
  module Pageflow
2
- class Site < ApplicationRecord
2
+ class Site < ApplicationRecord # rubocop:todo Style/Documentation
3
+ include TranslatedAttributes
4
+
3
5
  belongs_to :account
6
+ belongs_to :custom_404_entry, class_name: 'Entry', optional: true
4
7
 
5
8
  has_many :entry_templates, dependent: :destroy
6
9
  has_many :entries
7
10
  has_many :permalink_directories, -> { order('path ASC') }
8
11
 
12
+ translated_attributes :imprint_link_label, :imprint_link_url,
13
+ :copyright_link_label, :copyright_link_url,
14
+ :privacy_link_url
15
+
9
16
  scope :with_home_url, -> { where.not(home_url: '') }
10
17
  scope :for_request, ->(request) { Pageflow.config.site_request_scope.call(all, request) }
11
18
 
12
- validates :account, :presence => true
19
+ validates :account, presence: true
20
+ validates_inclusion_of :cutoff_mode_name, in: :available_cutoff_mode_names, allow_blank: true
21
+ validate :custom_404_entry_belongs_to_same_site
13
22
 
14
23
  delegate :enabled_feature_names, to: :account
15
24
 
25
+ def legal_info(locale:)
26
+ LegalInfo.new(self, locale)
27
+ end
28
+
16
29
  def display_name
17
30
  name.presence || I18n.t('pageflow.admin.sites.default_name')
18
31
  end
@@ -22,13 +35,31 @@ module Pageflow
22
35
  end
23
36
 
24
37
  def host
25
- Pageflow.config.site_url_options(self)&.dig(:host)
38
+ Pageflow.config.site_url_options_for(self)&.dig(:host)
39
+ end
40
+
41
+ def display_title
42
+ title.presence || cname_domain.presence
26
43
  end
27
44
 
28
45
  def cname_domain
29
46
  cname.split('.').pop(2).join('.')
30
47
  end
31
48
 
49
+ def build_root_permalink_directory
50
+ permalink_directories.build(path: '')
51
+ end
52
+
53
+ def root_entry
54
+ return unless root_permalink_directory
55
+
56
+ root_permalink_directory.permalinks.find_by_slug('')&.entry
57
+ end
58
+
59
+ def root_permalink_directory
60
+ permalink_directories.find_by_path('')
61
+ end
62
+
32
63
  def first_paged_entry_template
33
64
  entry_templates.find_or_initialize_by(entry_type_name: 'paged')
34
65
  end
@@ -63,5 +94,17 @@ module Pageflow
63
94
  def self.ransackable_associations(_auth_object = nil)
64
95
  %w[account]
65
96
  end
97
+
98
+ private
99
+
100
+ def available_cutoff_mode_names
101
+ Pageflow.config_for(account).cutoff_modes.names
102
+ end
103
+
104
+ def custom_404_entry_belongs_to_same_site
105
+ return unless custom_404_entry.present?
106
+
107
+ errors.add(:custom_404_entry, :must_belong_to_same_site) if custom_404_entry.site_id != id
108
+ end
66
109
  end
67
110
  end
@@ -0,0 +1,27 @@
1
+ module Pageflow
2
+ # @api private
3
+ class SiteRootEntryForm
4
+ include ActiveModel::Model
5
+
6
+ attr_accessor :entry_id
7
+
8
+ validates :entry, presence: true
9
+
10
+ def initialize(attributes, site)
11
+ super(attributes)
12
+ @site = site
13
+ end
14
+
15
+ def save
16
+ return false unless valid?
17
+
18
+ entry.permalink.update(allow_root_path: true,
19
+ directory: @site.permalink_directories.find_by_path(''),
20
+ slug: '')
21
+ end
22
+
23
+ def entry
24
+ @entry ||= @site.entries.find_by_id(entry_id)
25
+ end
26
+ end
27
+ end
@@ -5,9 +5,18 @@ module Pageflow
5
5
  PublishedEntry.wrap_all(
6
6
  site
7
7
  .entries
8
+ .preload(:account,
9
+ permalink: :directory,
10
+ translation_group: {
11
+ publicly_visible_entries: [
12
+ :account,
13
+ :published_revision,
14
+ {permalink: :directory}
15
+ ]
16
+ })
8
17
  .published_without_password_protection
9
18
  .published_without_noindex
10
- .order('first_published_at DESC')
19
+ .order(first_published_at: :desc)
11
20
  )
12
21
  end
13
22
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Storyline < ApplicationRecord
2
+ class Storyline < ApplicationRecord # rubocop:todo Style/Documentation
3
3
  include SerializedConfiguration
4
4
  include RevisionComponent
5
5
 
@@ -11,7 +11,10 @@ module Pageflow
11
11
  has_many :pages, through: :chapters
12
12
 
13
13
  nested_revision_components :chapters
14
-
15
14
  delegate :entry, to: :revision
15
+
16
+ def self.create_defaults(draft)
17
+ create!(revision: draft, configuration: {main: true})
18
+ end
16
19
  end
17
20
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class StorylineScaffold
2
+ class StorylineScaffold # rubocop:todo Style/Documentation
3
3
  def initialize(storyline, options)
4
4
  @storyline = storyline
5
5
  @options = options
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class TextTrackFile < ApplicationRecord
2
+ class TextTrackFile < ApplicationRecord # rubocop:todo Style/Documentation
3
3
  include UploadableFile
4
4
  include ImageAndTextTrackProcessingStateMachine
5
5
 
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class TextTrackFileUrlTemplates
2
+ class TextTrackFileUrlTemplates # rubocop:todo Style/Documentation
3
3
  def call
4
4
  {
5
5
  vtt: UrlTemplate.from_attachment(example_file.attachment, :vtt)
@@ -20,6 +20,7 @@ module Pageflow
20
20
  class AttachmentContentTypeValidator < Paperclip::Validators::AttachmentContentTypeValidator
21
21
  def validate_whitelist(record, attribute, value)
22
22
  return if value =~ record.options_from_entry_type[:content_type]
23
+
23
24
  record.errors.add(attribute, :invalid)
24
25
  end
25
26
 
@@ -39,9 +40,9 @@ module Pageflow
39
40
  # A hash of urls based on the styles that were defined when
40
41
  # registering the entry type.
41
42
  def urls
42
- styles_from_options.map { |style, _|
43
+ styles_from_options.to_h do |style, _|
43
44
  [style, attachment.url(style)]
44
- }.to_h
45
+ end
45
46
  end
46
47
 
47
48
  # @api private
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class ThumbnailFileResolver < Struct.new(:entry, :candidates, :configuration)
2
+ ThumbnailFileResolver = Struct.new(:entry, :candidates, :configuration) do
3
3
  def find_thumbnail
4
4
  candidates.detect do |candidate|
5
5
  condition = candidate[:unless] || candidate[:if]
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- module UrlTemplate
2
+ module UrlTemplate # rubocop:todo Style/Documentation
3
3
  extend self
4
4
 
5
5
  def from_attachment(attachment, *style)
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class UsedFile < SimpleDelegator
2
+ class UsedFile < SimpleDelegator # rubocop:todo Style/Documentation
3
3
  def initialize(file, usage = nil)
4
4
  super(file)
5
5
  @file = file
@@ -10,9 +10,11 @@ module Pageflow
10
10
  @usage.configuration
11
11
  end
12
12
 
13
+ USAGE_ATTRIBUTES = [:configuration, :display_name, :folder_perma_id].freeze
14
+
13
15
  def update!(attributes)
14
- super(attributes.except(:configuration))
15
- @usage.update!(attributes.slice(:configuration))
16
+ super(attributes.except(*USAGE_ATTRIBUTES))
17
+ @usage.update!(attributes.slice(*USAGE_ATTRIBUTES))
16
18
  end
17
19
 
18
20
  def usage_id
@@ -23,6 +25,14 @@ module Pageflow
23
25
  @usage.perma_id
24
26
  end
25
27
 
28
+ def display_name
29
+ @usage.display_name
30
+ end
31
+
32
+ def folder_perma_id
33
+ @usage.folder_perma_id
34
+ end
35
+
26
36
  def cache_key
27
37
  [@file.cache_key, @usage.cache_key].join('-')
28
38
  end
@@ -1,7 +1,7 @@
1
1
  module Pageflow
2
2
  # @api private
3
3
  class UserNameQuery < ApplicationQuery
4
- class Scope < Scope
4
+ class Scope < Scope # rubocop:todo Style/Documentation
5
5
  def initialize(term, scope)
6
6
  @term = term
7
7
  @scope = scope
@@ -16,7 +16,7 @@ module Pageflow
16
16
  attr_reader :term, :scope
17
17
 
18
18
  def word_conditions(term)
19
- term.split(' ').map { |word|
19
+ term.split.map { |word|
20
20
  word_condition(word)
21
21
  }.join(' AND ')
22
22
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class VideoFile < ApplicationRecord
2
+ class VideoFile < ApplicationRecord # rubocop:todo Style/Documentation
3
3
  include UploadableFile
4
4
  include MediaEncodingStateMachine
5
5
  include OutputSource
@@ -9,8 +9,8 @@ module Pageflow
9
9
  has_attached_file(:poster, Pageflow.config.paperclip_s3_default_options
10
10
  .merge(default_url: ':pageflow_placeholder',
11
11
  styles: Pageflow.config.thumbnail_styles
12
- .merge(medium: ['1920x1920>', :JPG],
13
- large: ['1024x1024>', :JPG],
12
+ .merge(medium: ['1024x1024>', :JPG],
13
+ large: ['1920x1920>', :JPG],
14
14
  ultra: ['3840x3840>', :JPG],
15
15
  print: ['300x300>', :JPG]),
16
16
  convert_options: {
@@ -21,22 +21,21 @@ module Pageflow
21
21
  }))
22
22
 
23
23
  has_attached_file(:thumbnail, Pageflow.config.paperclip_s3_default_options
24
- .merge(:default_url => ':pageflow_placeholder',
25
- :default_style => :thumbnail,
26
- :styles => Pageflow.config.thumbnail_styles
27
- .merge(:medium => ['1920x1920>', :JPG],
28
- :large => ['1024x1024>', :JPG]),
29
- :convert_options => {
30
- :medium => "-quality 60 -interlace Plane",
31
- :large => "-quality 60 -interlace Plane"
24
+ .merge(default_url: ':pageflow_placeholder',
25
+ default_style: :thumbnail,
26
+ styles: Pageflow.config.thumbnail_styles
27
+ .merge(medium: ['1024x1024>', :JPG],
28
+ large: ['1920x1920>', :JPG]),
29
+ convert_options: {
30
+ medium: '-quality 60 -interlace Plane',
31
+ large: '-quality 60 -interlace Plane'
32
32
  }))
33
33
 
34
-
35
34
  do_not_validate_attachment_file_type(:poster)
36
35
  do_not_validate_attachment_file_type(:thumbnail)
37
36
 
38
- def thumbnail_url(*args)
39
- poster.url(*args)
37
+ def thumbnail_url(*)
38
+ poster.url(*)
40
39
  end
41
40
 
42
41
  def attachment_s3_url
@@ -111,6 +110,10 @@ module Pageflow
111
110
  ZencoderAttachment.new(self, 'dash/manifest.mpd')
112
111
  end
113
112
 
113
+ def dash_playlist_high_and_up
114
+ ZencoderAttachment.new(self, 'dash/manifest-high-and-up.mpd')
115
+ end
116
+
114
117
  def hls_playlist
115
118
  if Pageflow.config.zencoder_options[:hls_smil_suffix].present?
116
119
  ZencoderAttachment.new(self,
@@ -125,6 +128,10 @@ module Pageflow
125
128
  end
126
129
  end
127
130
 
131
+ def hls_playlist_high_and_up
132
+ ZencoderAttachment.new(self, 'hls-playlist-high-and-up.m3u8', host: :hls)
133
+ end
134
+
128
135
  def smil
129
136
  ZencoderAttachment.new(self, 'hls-playlist.smil')
130
137
  end
@@ -143,7 +150,7 @@ module Pageflow
143
150
 
144
151
  def externally_generated_outputs
145
152
  if Pageflow.config.zencoder_options[:hls_smil_suffix].present?
146
- %w(hls-playlist)
153
+ %w[hls-playlist]
147
154
  else
148
155
  []
149
156
  end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class VideoFileUrlTemplates
2
+ class VideoFileUrlTemplates # rubocop:todo Style/Documentation
3
3
  def call
4
4
  {
5
5
  original: url_template(:attachment, :original),
@@ -7,10 +7,12 @@ module Pageflow
7
7
  high: url_template(:mp4_high),
8
8
  medium: url_template(:mp4_medium),
9
9
  fullhd: url_template(:mp4_fullhd),
10
- :'4k' => url_template(:mp4_4k),
10
+ '4k': url_template(:mp4_4k),
11
11
 
12
- :'hls-playlist' => url_template(:hls_playlist),
13
- :'dash-playlist' => url_template(:dash_playlist),
12
+ 'hls-playlist': url_template(:hls_playlist),
13
+ 'hls-playlist-high-and-up': url_template(:hls_playlist_high_and_up),
14
+ 'dash-playlist': url_template(:dash_playlist),
15
+ 'dash-playlist-high-and-up': url_template(:dash_playlist_high_and_up),
14
16
 
15
17
  poster_medium: url_template(:poster, :medium),
16
18
  poster_large: url_template(:poster, :large),
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- class Widget < ApplicationRecord
2
+ class Widget < ApplicationRecord # rubocop:todo Style/Documentation
3
3
  include SerializedConfiguration
4
4
 
5
5
  belongs_to :subject, polymorphic: true, touch: true
@@ -85,7 +85,7 @@ module Pageflow
85
85
 
86
86
  def defaults_by_role
87
87
  config.widget_types.defaults_by_role.each_with_object({}) do |(role, widget_type), result|
88
- result[role] = Widget.new(role: role, type_name: widget_type.name,
88
+ result[role] = Widget.new(role:, type_name: widget_type.name,
89
89
  subject: nil,
90
90
  configuration:
91
91
  config.widget_types.default_configuration(role))
@@ -94,8 +94,9 @@ module Pageflow
94
94
 
95
95
  def placeholders_by_role
96
96
  return {} unless options[:include_placeholders]
97
- config.widget_types.roles.each_with_object({}) do |role, result|
98
- result[role] = Widget.new(role: role, type_name: nil, subject: nil)
97
+
98
+ config.widget_types.roles.to_h do |role|
99
+ [role, Widget.new(role:, type_name: nil, subject: nil)]
99
100
  end
100
101
  end
101
102
 
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
- module WithFileUsageExtension
2
+ module WithFileUsageExtension # rubocop:todo Style/Documentation
3
3
  def with_usage_id
4
4
  select("#{table_name}.*, pageflow_file_usages.id AS usage_id")
5
5
  end
@@ -1,7 +1,7 @@
1
1
  require 'uri'
2
2
 
3
3
  module Pageflow
4
- class ZencoderAttachment
4
+ class ZencoderAttachment # rubocop:todo Style/Documentation
5
5
  cattr_accessor :default_options
6
6
  self.default_options = {
7
7
  path: '/:zencoder_asset_version/:pageflow_s3_root/:class/:id_partition/:zencoder_filename',
@@ -45,20 +45,20 @@ module Pageflow
45
45
  url_options)
46
46
  end
47
47
 
48
- def url_relative_to(attachment)
49
- dir_path = File.dirname(URI.parse(attachment.url).path)
48
+ def relative_path_to(other_path)
49
+ dir_path = File.dirname(path)
50
50
 
51
- unless URI.parse(url).path.start_with?(dir_path)
52
- raise("Could not generate relative url for #{url} based on #{attachment.url}.")
51
+ unless URI.parse(other_path).path.start_with?(dir_path)
52
+ raise("Could not generate relative path for #{other_path} based on #{url}.")
53
53
  end
54
54
 
55
- url.split("#{dir_path}/", 2).last
55
+ other_path.split("#{dir_path}/", 2).last
56
56
  end
57
57
 
58
58
  private
59
59
 
60
60
  def ensure_default_protocol(url, url_options)
61
- url =~ %r'^//' ? [url_options[:default_protocol], url].compact.join(':') : url
61
+ url =~ %r{^//} ? [url_options[:default_protocol], url].compact.join(':') : url
62
62
  end
63
63
 
64
64
  def url_pattern(url_options)
@@ -66,7 +66,7 @@ module Pageflow
66
66
  end
67
67
 
68
68
  def base_url(url_options)
69
- case (url_options[:host] || options[:host])
69
+ case url_options[:host] || options[:host]
70
70
  when :hls
71
71
  options[:hls_url]
72
72
  when :hls_origin
@@ -1,5 +1,7 @@
1
1
  module Pageflow
2
+ # @api private
2
3
  class AccountPolicy < ApplicationPolicy
4
+ # @api private
3
5
  class Scope < Scope
4
6
  attr_reader :user, :scope, :query
5
7
 
@@ -111,7 +113,7 @@ module Pageflow
111
113
  end
112
114
 
113
115
  def see_badge_belonging_to?
114
- (@account.entries & user.entries).any? ||
116
+ @account.entries.intersect?(user.entries) ||
115
117
  query.has_at_least_role?(:previewer) ||
116
118
  user.admin?
117
119
  end
@@ -1,5 +1,6 @@
1
1
  module Pageflow
2
2
  module Admin
3
+ # @api private
3
4
  class AdminOnlyTabPolicy
4
5
  attr_reader :user, :tab
5
6
 
@@ -1,5 +1,6 @@
1
1
  module Pageflow
2
2
  module Admin
3
+ # @api private
3
4
  class EntryTabPolicy
4
5
  attr_reader :user, :tab, :query
5
6
 
@@ -1,5 +1,7 @@
1
1
  module Pageflow
2
+ # @api private
2
3
  class ApplicationPolicy
4
+ # @api private
3
5
  class Scope
4
6
  protected
5
7