pageflow 17.1.0 → 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 (302) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +319 -345
  3. data/README.md +3 -4
  4. data/admins/pageflow/accounts.rb +6 -6
  5. data/admins/pageflow/entry.rb +10 -8
  6. data/admins/pageflow/membership.rb +11 -11
  7. data/admins/pageflow/translations.rb +5 -5
  8. data/app/assets/images/pageflow/admin/icons/comment.svg +1 -0
  9. data/app/assets/javascripts/pageflow/dist/ui.js +1350 -630
  10. data/app/assets/javascripts/pageflow/editor/vendor.js +0 -1
  11. data/app/assets/javascripts/pageflow/ui.js +0 -1
  12. data/app/assets/stylesheets/pageflow/admin/entry_comments_indicator.scss +45 -0
  13. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +8 -1
  14. data/app/assets/stylesheets/pageflow/admin.scss +1 -0
  15. data/app/assets/stylesheets/pageflow/animations/spin.scss +9 -0
  16. data/app/assets/stylesheets/pageflow/animations.scss +1 -0
  17. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +21 -5
  18. data/app/assets/stylesheets/pageflow/editor/base.scss +9 -1
  19. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +13 -1
  20. data/app/assets/stylesheets/pageflow/editor/edit_configuration_view.scss +5 -0
  21. data/app/assets/stylesheets/pageflow/editor/file_folders.scss +127 -0
  22. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +0 -1
  23. data/app/assets/stylesheets/pageflow/editor/file_meta_data_overlay.scss +45 -0
  24. data/app/assets/stylesheets/pageflow/editor/file_preview.scss +138 -0
  25. data/app/assets/stylesheets/pageflow/editor/file_references.scss +68 -0
  26. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +1 -1
  27. data/app/assets/stylesheets/pageflow/editor/file_stage_icons.scss +17 -0
  28. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +25 -32
  29. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +31 -48
  30. data/app/assets/stylesheets/pageflow/editor/file_type_pills.scss +73 -0
  31. data/app/assets/stylesheets/pageflow/editor/files.scss +230 -50
  32. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +142 -14
  33. data/app/assets/stylesheets/pageflow/editor/folder_breadcrumb.scss +40 -0
  34. data/app/assets/stylesheets/pageflow/editor/info_box.scss +12 -0
  35. data/app/assets/stylesheets/pageflow/editor/inputs/edit_defaults_button.scss +15 -0
  36. data/app/assets/stylesheets/pageflow/editor/inputs.scss +1 -0
  37. data/app/assets/stylesheets/pageflow/editor/list.scss +88 -38
  38. data/app/assets/stylesheets/pageflow/editor/manage_files.scss +9 -0
  39. data/app/assets/stylesheets/pageflow/editor/menu.scss +14 -0
  40. data/app/assets/stylesheets/pageflow/editor/move_to_folder_dialog.scss +83 -0
  41. data/app/assets/stylesheets/pageflow/mixins/pageflow.scss +9 -5
  42. data/app/assets/stylesheets/pageflow/ui/color_picker.scss +230 -0
  43. data/app/assets/stylesheets/pageflow/ui/forms.scss +34 -4
  44. data/app/assets/stylesheets/pageflow/ui/functions.scss +12 -2
  45. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +9 -16
  46. data/app/assets/stylesheets/pageflow/ui/input/text_area_input.scss +15 -0
  47. data/app/assets/stylesheets/pageflow/ui/overrides.scss +8 -0
  48. data/app/assets/stylesheets/pageflow/ui/properties.scss +29 -0
  49. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -3
  50. data/app/assets/stylesheets/pageflow/ui.scss +4 -2
  51. data/app/controllers/pageflow/editor/entries_controller.rb +1 -0
  52. data/app/controllers/pageflow/editor/file_folders_controller.rb +80 -0
  53. data/app/controllers/pageflow/editor/file_import_controller.rb +1 -0
  54. data/app/controllers/pageflow/editor/files_controller.rb +15 -6
  55. data/app/controllers/pageflow/editor/oembeds_controller.rb +21 -0
  56. data/app/controllers/pageflow/entries_controller.rb +17 -13
  57. data/app/controllers/pageflow/review/comment_thread_reads_controller.rb +30 -0
  58. data/app/controllers/pageflow/review/comment_threads_controller.rb +60 -0
  59. data/app/controllers/pageflow/review/comments_controller.rb +53 -0
  60. data/app/controllers/pageflow/revisions_controller.rb +4 -1
  61. data/app/helpers/pageflow/admin/entries_helper.rb +40 -0
  62. data/app/helpers/pageflow/admin/widgets_helper.rb +2 -2
  63. data/app/helpers/pageflow/common_entry_seed_helper.rb +5 -3
  64. data/app/helpers/pageflow/editor/config_helper.rb +3 -1
  65. data/app/helpers/pageflow/entries_helper.rb +24 -42
  66. data/app/helpers/pageflow/entry_json_seed_helper.rb +4 -4
  67. data/app/helpers/pageflow/public_i18n_helper.rb +9 -8
  68. data/app/helpers/pageflow/structured_data_helper.rb +4 -1
  69. data/app/helpers/pageflow/themes_helper.rb +1 -3
  70. data/app/helpers/pageflow/widgets_helper.rb +2 -1
  71. data/app/inputs/pageflow_permalink_input.rb +6 -2
  72. data/app/models/concerns/pageflow/auto_generated_perma_id.rb +11 -4
  73. data/app/models/concerns/pageflow/reusable_file.rb +1 -1
  74. data/app/models/concerns/pageflow/serialization_blacklist.rb +2 -4
  75. data/app/models/concerns/pageflow/translated_attributes.rb +101 -0
  76. data/app/models/concerns/pageflow/uploadable_file.rb +1 -1
  77. data/app/models/pageflow/comment.rb +30 -0
  78. data/app/models/pageflow/comment_thread.rb +65 -0
  79. data/app/models/pageflow/comment_thread_read.rb +22 -0
  80. data/app/models/pageflow/customized_theme.rb +3 -2
  81. data/app/models/pageflow/draft_entry.rb +20 -8
  82. data/app/models/pageflow/entry.rb +2 -0
  83. data/app/models/pageflow/entry_at_revision.rb +9 -1
  84. data/app/models/pageflow/entry_comment_summary.rb +114 -0
  85. data/app/models/pageflow/file_folder.rb +74 -0
  86. data/app/models/pageflow/file_reuse.rb +3 -2
  87. data/app/models/pageflow/file_usage.rb +8 -0
  88. data/app/models/pageflow/image_file.rb +24 -20
  89. data/app/models/pageflow/image_file_url_templates.rb +3 -3
  90. data/app/models/pageflow/legal_info.rb +38 -0
  91. data/app/models/pageflow/nested_revision_component_copy.rb +1 -1
  92. data/app/models/pageflow/permalink.rb +1 -0
  93. data/app/models/pageflow/revision.rb +6 -2
  94. data/app/models/pageflow/site.rb +10 -0
  95. data/app/models/pageflow/used_file.rb +8 -2
  96. data/app/models/pageflow/widget.rb +2 -2
  97. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +0 -1
  98. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +4 -2
  99. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
  100. data/app/views/pageflow/editor/entries/seed.json.erb +1 -0
  101. data/app/views/pageflow/editor/file_folders/_file_folder.json.jbuilder +5 -0
  102. data/app/views/pageflow/editor/file_folders/create.json.jbuilder +1 -0
  103. data/app/views/pageflow/editor/file_folders/index.json.jbuilder +3 -0
  104. data/app/views/pageflow/editor/files/_file.json.jbuilder +2 -1
  105. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +3 -0
  106. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +3 -0
  107. data/app/views/pageflow/files/_file.json.jbuilder +2 -0
  108. data/app/views/pageflow/image_files/_image_file.json.jbuilder +0 -1
  109. data/app/views/pageflow/review/comment_threads/_comment_thread.json.jbuilder +20 -0
  110. data/app/views/pageflow/review/comment_threads/create.json.jbuilder +2 -0
  111. data/app/views/pageflow/review/comment_threads/index.json.jbuilder +13 -0
  112. data/app/views/pageflow/review/comments/_comment.json.jbuilder +13 -0
  113. data/app/views/pageflow/review/comments/create.json.jbuilder +1 -0
  114. data/app/views/pageflow/structured_data/_entry.json.jbuilder +2 -3
  115. data/app/views/pageflow/video_files/_video_file.json.jbuilder +0 -1
  116. data/config/locales/de.yml +152 -14
  117. data/config/locales/en.yml +150 -14
  118. data/config/routes.rb +14 -0
  119. data/db/migrate/20140418225525_setup_schema.rb +2 -2
  120. data/db/migrate/20251015000000_add_structured_data_type_name_to_revisions.rb +5 -0
  121. data/db/migrate/20251029142849_convert_legacy_social_embeds_to_unified_social_embed.rb +38 -0
  122. data/db/migrate/20251119083347_fix_main_storyline_positions.rb +16 -0
  123. data/db/migrate/20251119083348_ensure_scrolled_entries_have_excursion_storyline.rb +15 -0
  124. data/db/migrate/20260303000000_add_layout_version_to_revisions.rb +6 -0
  125. data/db/migrate/20260323000000_create_comment_threads_and_comments.rb +30 -0
  126. data/db/migrate/20260414000000_add_subject_range_to_comment_threads.rb +5 -0
  127. data/db/migrate/20260415000000_add_section_perma_id_to_comment_threads.rb +5 -0
  128. data/db/migrate/20260727000000_add_quote_to_comments.rb +5 -0
  129. data/db/migrate/20260728000000_create_file_folders.rb +17 -0
  130. data/db/migrate/20260805000000_add_attribute_translations_to_sites.rb +5 -0
  131. data/db/migrate/20260806000000_add_edited_at_to_comments.rb +5 -0
  132. data/db/migrate/20260810000000_create_pageflow_scrolled_lottie_files.rb +24 -0
  133. data/db/migrate/20260817000000_create_comment_thread_reads.rb +16 -0
  134. data/db/migrate/20260819000000_add_unread_comments_since_at_to_users.rb +18 -0
  135. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +8665 -3890
  136. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +979 -3571
  137. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +20199 -28120
  138. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +18652 -26584
  139. data/entry_types/scrolled/app/assets/stylesheets/pageflow_scrolled/ui.scss +2 -0
  140. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +33 -3
  141. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +2 -3
  142. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +21 -1
  143. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +3 -3
  144. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +7 -5
  145. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +5 -2
  146. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +13 -5
  147. data/entry_types/scrolled/app/helpers/pageflow_scrolled/i18n_helper.rb +28 -13
  148. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +26 -11
  149. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +2 -2
  150. data/entry_types/scrolled/app/helpers/pageflow_scrolled/sprockets_helper.rb +16 -0
  151. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +174 -3
  152. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +49 -7
  153. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file.rb +6 -0
  154. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file_url_templates.rb +16 -0
  155. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +1 -0
  156. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +13 -12
  157. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +30 -10
  158. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +9 -0
  159. data/entry_types/scrolled/app/views/pageflow_scrolled/favicons/_entry.html.erb +1 -1
  160. data/entry_types/scrolled/config/configuration_schemas/pageflow-scrolled.json +414 -0
  161. data/entry_types/scrolled/config/locales/de.yml +512 -65
  162. data/entry_types/scrolled/config/locales/en.yml +518 -52
  163. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +2 -2
  164. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +51 -6
  165. data/entry_types/scrolled/lib/pageflow_scrolled/configuration_schemas.rb +91 -0
  166. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +2 -1
  167. data/entry_types/scrolled/lib/pageflow_scrolled/entry_file_reference_locations.rb +71 -0
  168. data/entry_types/scrolled/lib/pageflow_scrolled/entry_structured_data_types/faq_page.rb +58 -0
  169. data/entry_types/scrolled/lib/pageflow_scrolled/file_reference_locations.rb +69 -0
  170. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +205 -22
  171. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +2 -4
  172. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +56 -36
  173. data/entry_types/scrolled/lib/pageflow_scrolled/theme_options_default_scale.rb +35 -0
  174. data/entry_types/scrolled/lib/pageflow_scrolled.rb +13 -0
  175. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +19 -1
  176. data/entry_types/scrolled/package/config/configurationSchemas.js +70 -0
  177. data/entry_types/scrolled/package/config/rollup/configurationSchemas.js +19 -0
  178. data/entry_types/scrolled/package/config/webpack.js +72 -0
  179. data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -1
  180. data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1181 -915
  181. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.css +1 -0
  182. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.js +219 -0
  183. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.css +1 -0
  184. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.js +244 -0
  185. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.css +1 -0
  186. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.js +823 -0
  187. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +71 -21
  188. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.css +1 -0
  189. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.js +277 -0
  190. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.css +1 -0
  191. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.js +244 -0
  192. data/entry_types/scrolled/package/contentElements-editor.js +1915 -1097
  193. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  194. data/entry_types/scrolled/package/contentElements-frontend.js +3093 -1679
  195. data/entry_types/scrolled/package/editor.css +1 -0
  196. data/entry_types/scrolled/package/editor.js +8667 -4077
  197. data/entry_types/scrolled/package/entryState.js +1600 -0
  198. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-20c600de.js +1979 -0
  199. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-58189220.js +2538 -0
  200. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-9f76033e.js → PhonePlatformContext-035a99fa.js} +7 -12
  201. data/entry_types/scrolled/package/frontend/PhonePlatformContext-9da43797.js +33 -0
  202. data/entry_types/scrolled/package/frontend/Placeholder.module-bf0966b4.js +5267 -0
  203. data/entry_types/scrolled/package/frontend/Placeholder.module-d22a9335.js +4180 -0
  204. data/entry_types/scrolled/package/frontend/ThemeIcon-ab834849.js +754 -0
  205. data/entry_types/scrolled/package/frontend/ThemeIcon-f6cb3a8f.js +773 -0
  206. data/entry_types/scrolled/package/frontend/{ToggleFullscreenCornerButton-788e9cdb.js → ToggleFullscreenCornerButton-30fd1124.js} +6 -6
  207. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-61c25224.js +72 -0
  208. data/entry_types/scrolled/package/frontend/Viewer-1074fd59.js +147 -0
  209. data/entry_types/scrolled/package/frontend/Viewer-1482ca34.js +480 -0
  210. data/entry_types/scrolled/package/frontend/Viewer-70504231.js +210 -0
  211. data/entry_types/scrolled/package/frontend/{Viewer-0345ce57.js → Viewer-cc8d4072.js} +84 -92
  212. data/entry_types/scrolled/package/frontend/Wavesurfer-656e3c36.js +302 -0
  213. data/entry_types/scrolled/package/frontend/Wavesurfer-b753b838.js +385 -0
  214. data/entry_types/scrolled/package/frontend/commenting.css +1 -0
  215. data/entry_types/scrolled/package/frontend/extensions-167ae143.js +1455 -0
  216. data/entry_types/scrolled/package/frontend/extensions-2318f92b.js +5918 -0
  217. data/entry_types/scrolled/package/frontend/extensions-a461fd13.js +4890 -0
  218. data/entry_types/scrolled/package/frontend/extensions-c98269fd.js +1982 -0
  219. data/entry_types/scrolled/package/frontend/i18n-493cd2a6.js +93 -0
  220. data/entry_types/scrolled/package/frontend/i18n-e06cac14.js +100 -0
  221. data/entry_types/scrolled/package/frontend/{index-eb670c2f.js → index-2e5546f7.js} +36 -44
  222. data/entry_types/scrolled/package/frontend/index-de2b418d.js +130 -0
  223. data/entry_types/scrolled/package/frontend/index.css +1 -1
  224. data/entry_types/scrolled/package/frontend/index.js +1870 -875
  225. data/entry_types/scrolled/package/frontend/inlineEditing.css +1 -0
  226. data/entry_types/scrolled/package/frontend/useContentElementEditorState-a084912e.js +25 -0
  227. data/entry_types/scrolled/package/frontend/useDelayedBoolean-a387d85b.js +24 -0
  228. data/entry_types/scrolled/package/frontend/{usePhonePlatform-c2ba875d.js → usePhonePlatform-4ecb96d4.js} +1 -1
  229. data/entry_types/scrolled/package/frontend/usePhonePlatform-ce9ff08d.js +8 -0
  230. data/entry_types/scrolled/package/frontend-server.js +20 -209
  231. data/entry_types/scrolled/package/package.json +5 -3
  232. data/entry_types/scrolled/package/review.css +1 -0
  233. data/entry_types/scrolled/package/review.js +3306 -0
  234. data/entry_types/scrolled/package/testHelpers.js +836 -359
  235. data/entry_types/scrolled/package/widgets/consentBar.css +1 -1
  236. data/entry_types/scrolled/package/widgets/consentBar.js +269 -290
  237. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  238. data/entry_types/scrolled/package/widgets/defaultNavigation.js +911 -352
  239. data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -1
  240. data/entry_types/scrolled/package/widgets/excursionSheet.js +87 -124
  241. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
  242. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +62 -29
  243. data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +32 -13
  244. data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -1
  245. data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +56 -100
  246. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
  247. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +33 -28
  248. data/entry_types/scrolled/package/widgets-server.js +1 -0
  249. data/entry_types/scrolled/spec/factories/lottie_files.rb +29 -0
  250. data/entry_types/scrolled/spec/fixtures/animation.lottie +0 -0
  251. data/entry_types/scrolled/spec/fixtures/font.woff +0 -0
  252. data/entry_types/scrolled/spec/fixtures/font.woff2 +0 -0
  253. data/lib/generators/pageflow/resque/resque_generator.rb +0 -2
  254. data/lib/pageflow/configuration.rb +49 -7
  255. data/lib/pageflow/deprecation.rb +19 -0
  256. data/lib/pageflow/engine.rb +1 -1
  257. data/lib/pageflow/entries_controller_env_helper.rb +32 -2
  258. data/lib/pageflow/entry_export_import/entry_serialization.rb +4 -4
  259. data/lib/pageflow/entry_export_import/page_type_versions.rb +2 -2
  260. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +10 -0
  261. data/lib/pageflow/entry_export_import/revision_serialization.rb +3 -0
  262. data/lib/pageflow/entry_structured_data_types.rb +43 -0
  263. data/lib/pageflow/entry_type_configuration.rb +1 -0
  264. data/lib/pageflow/file_type.rb +2 -2
  265. data/lib/pageflow/file_types.rb +1 -1
  266. data/lib/pageflow/oembed_providers.rb +42 -0
  267. data/lib/pageflow/primary_domain_entry_redirect.rb +6 -0
  268. data/lib/pageflow/rails_version.rb +13 -2
  269. data/lib/pageflow/themes.rb +41 -0
  270. data/lib/pageflow/user_mixin.rb +12 -0
  271. data/lib/pageflow/version.rb +1 -1
  272. data/lib/pageflow.rb +1 -0
  273. data/package/config/eslint-rules/documented-in-toc.js +125 -0
  274. data/package/config/jest/index.js +0 -1
  275. data/package/config/webpack.js +0 -1
  276. data/package/config/webpack5.js +0 -1
  277. data/package/editor.js +4378 -1897
  278. data/package/frontend.js +647 -886
  279. data/package/package.json +2 -1
  280. data/package/review.js +384 -0
  281. data/package/testHelpers.js +248 -188
  282. data/package/ui.js +1346 -630
  283. data/package/vendor/stubs/wysihtml5.js +2 -0
  284. data/spec/factories/comment_thread_reads.rb +10 -0
  285. data/spec/factories/comment_threads.rb +10 -0
  286. data/spec/factories/comments.rb +9 -0
  287. data/spec/factories/file_folders.rb +8 -0
  288. data/spec/factories/published_entries.rb +2 -0
  289. metadata +188 -67
  290. data/app/assets/stylesheets/pageflow/editor/select_button.scss +0 -51
  291. data/entry_types/scrolled/app/helpers/pageflow_scrolled/generated_media_queries_helper.rb +0 -55
  292. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-51914be7.js +0 -5439
  293. data/entry_types/scrolled/package/frontend/ThemeIcon-81f2f066.js +0 -1932
  294. data/entry_types/scrolled/package/frontend/Viewer-cdc549cc.js +0 -147
  295. data/entry_types/scrolled/package/frontend/Wavesurfer-1cdc3925.js +0 -313
  296. data/entry_types/scrolled/package/frontend/components-96660ffd.js +0 -3803
  297. data/entry_types/scrolled/package/frontend/inherits-539844a6.js +0 -99
  298. data/entry_types/scrolled/package/frontend/useContentElementEditorState-77fe6c79.js +0 -51
  299. data/entry_types/scrolled/package/widgets/excursionDialog.css +0 -1
  300. data/entry_types/scrolled/package/widgets/excursionDialog.js +0 -109
  301. data/lib/generators/pageflow/resque/templates/resque_enqueue_after_commit_patch.rb +0 -25
  302. data/package/vendor/jquery.minicolors.js +0 -1108
@@ -3,7 +3,6 @@
3
3
  //= require i18n/translations
4
4
 
5
5
  //= require wysihtml-toolbar
6
- //= require jquery.minicolors
7
6
 
8
7
  //= require cocktail
9
8
  //= require backbone.marionette
@@ -1,5 +1,4 @@
1
1
  //= require wysihtml-toolbar
2
- //= require jquery.minicolors
3
2
 
4
3
  //= require i18n
5
4
  //= require i18n/translations
@@ -0,0 +1,45 @@
1
+ $pageflow-entry-comments-indicator-color: #8a5a00 !default;
2
+
3
+ $pageflow-entry-comments-indicator-background-color: #fdf1dc !default;
4
+
5
+ $pageflow-entry-comments-indicator-dot-color: #ff7400 !default;
6
+
7
+ $pageflow-entry-comments-indicator-icon-directory: "pageflow/admin/icons" !default;
8
+
9
+ .entry_comments_indicator {
10
+ $dir: $pageflow-entry-comments-indicator-icon-directory;
11
+
12
+ position: relative;
13
+ display: inline-block;
14
+ margin-left: 8px;
15
+ padding: 1px 6px 1px 22px;
16
+ vertical-align: middle;
17
+ border-radius: 10px;
18
+ background: $pageflow-entry-comments-indicator-background-color
19
+ image-url("#{$dir}/comment.svg") no-repeat 5px center / 13px 13px;
20
+ color: $pageflow-entry-comments-indicator-color;
21
+ font-size: 0.7rem;
22
+ line-height: 1.6;
23
+
24
+ // The tooltip claims both pseudo elements of the indicator, so the
25
+ // dot has to be an element of its own.
26
+ //
27
+ // Straddles the corner like the unread dot inside the editor, so both
28
+ // read as the same signal.
29
+ .unread_dot {
30
+ position: absolute;
31
+ top: -2px;
32
+ right: -2px;
33
+ width: 6px;
34
+ height: 6px;
35
+ border-radius: 50%;
36
+ background-color: $pageflow-entry-comments-indicator-dot-color;
37
+ }
38
+
39
+ // The bubble is placed by its static position, which on an inline
40
+ // element sits at the far end of the content and thus away from the
41
+ // arrow anchored to the left.
42
+ &::after {
43
+ left: 0;
44
+ }
45
+ }
@@ -18,6 +18,7 @@ $pageflow-permalink-input-directory-background-position: null !default;
18
18
  .pageflow_permalink.input {
19
19
  .permalink {
20
20
  display: inline-flex;
21
+ flex-wrap: wrap;
21
22
  border: 1px solid $pageflow-permalink-input-border-color;
22
23
  border-radius: $pageflow-permalink-input-border-radius;
23
24
  background-color: $pageflow-permalink-input-background-color;
@@ -38,6 +39,12 @@ $pageflow-permalink-input-directory-background-position: null !default;
38
39
  background-color: $pageflow-permalink-input-base-url-background-color;
39
40
  color: $pageflow-permalink-input-base-url-color;
40
41
  flex: 1;
42
+ white-space: nowrap;
43
+ }
44
+
45
+ .permalink_inputs {
46
+ display: inline-flex;
47
+ flex: 10;
41
48
  }
42
49
 
43
50
  select,
@@ -61,7 +68,7 @@ $pageflow-permalink-input-directory-background-position: null !default;
61
68
 
62
69
  input {
63
70
  padding-left: 0;
64
- flex: 2;
71
+ flex: 1;
65
72
  }
66
73
 
67
74
  &.no_directories {
@@ -25,6 +25,7 @@ $pageflow-hint-color: #666 !default;
25
25
  @import "pageflow/admin/embed_code";
26
26
  @import "pageflow/admin/embedded_index_table";
27
27
  @import "pageflow/admin/entries";
28
+ @import "pageflow/admin/entry_comments_indicator";
28
29
  @import "pageflow/admin/features";
29
30
  @import "pageflow/admin/filters";
30
31
  @import "pageflow/admin/forms";
@@ -0,0 +1,9 @@
1
+ @include keyframes(spin) {
2
+ from {
3
+ @include transform(rotate(0deg));
4
+ }
5
+
6
+ to {
7
+ @include transform(rotate(360deg));
8
+ }
9
+ }
@@ -4,3 +4,4 @@
4
4
  @import "animations/navigation_bar";
5
5
  @import "animations/scroll";
6
6
  @import "animations/loading";
7
+ @import "animations/spin";
@@ -43,7 +43,6 @@
43
43
 
44
44
  .image {
45
45
  outline: solid 1px var(--ui-on-surface-color-light);
46
- background-size: cover;
47
46
  }
48
47
 
49
48
  .label {
@@ -58,15 +57,32 @@
58
57
  position: relative;
59
58
  height: 100%;
60
59
 
61
- img {
60
+ // Shrinks to the size of whatever renders the file, so the sliders
61
+ // line up with its edges.
62
+ .file {
63
+ --positioning-max-width: 600px;
64
+ --positioning-max-height: 300px;
65
+
66
+ display: inline-block;
62
67
  outline: solid 1px var(--ui-on-surface-color-light);
63
- display: block;
64
- max-height: 300px;
65
- max-width: 600px;
68
+ line-height: 0;
66
69
  cursor: crosshair;
67
70
  }
68
71
  }
69
72
 
73
+ &-image-contain {
74
+ display: block;
75
+ max-width: var(--positioning-max-width, 100%);
76
+ max-height: var(--positioning-max-height, none);
77
+ }
78
+
79
+ &-image-cover {
80
+ display: block;
81
+ width: 100%;
82
+ height: 100%;
83
+ object-fit: cover;
84
+ }
85
+
70
86
  .slider {
71
87
  position: absolute;
72
88
  border: none;
@@ -59,6 +59,7 @@
59
59
  @import "./composables";
60
60
  @import "./list";
61
61
  @import "./drop_down_button";
62
+ @import "./edit_configuration_view";
62
63
 
63
64
  @import "./outline";
64
65
  @import "./sortable";
@@ -71,18 +72,25 @@
71
72
  @import "./confirm_encoding";
72
73
  @import "./files_gallery";
73
74
  @import "./filtered_files";
75
+ @import "./file_type_pills";
76
+ @import "./folder_breadcrumb";
77
+ @import "./file_folders";
74
78
  @import "./list_search_field";
75
79
  @import "./file_meta_data";
80
+ @import "./file_meta_data_overlay";
81
+ @import "./file_references";
82
+ @import "./file_preview";
83
+ @import "./file_stage_icons";
76
84
  @import "./file_stages";
77
85
  @import "./file_thumbnails";
78
86
  @import "./file_settings_dialog";
87
+ @import "./move_to_folder_dialog";
79
88
  @import "./info_box";
80
89
  @import "./text_tracks";
81
90
  @import "./static_thumbnails";
82
91
  @import "./notifications";
83
92
  @import "./publish_entry";
84
93
  @import "./other_entry_item";
85
- @import "./select_button";
86
94
  @import "./quotas";
87
95
  @import "./back_button_decorator";
88
96
  @import "./widgets";
@@ -12,9 +12,16 @@
12
12
 
13
13
  > button.ellipsis_icon {
14
14
  @include fa-ellipsis-v-icon;
15
+ }
16
+
17
+ > button.ellipsis_icon.has_icon_only {
15
18
  width: var(--drop-down-button-width, 31px);
16
19
  }
17
20
 
21
+ > button.ellipsis_icon.has_icon_and_text::before {
22
+ margin-right: 9px;
23
+ }
24
+
18
25
  > button.borderless {
19
26
  --ui-button-border-color: transparent;
20
27
  --ui-button-hover-border-color: transparent;
@@ -102,6 +109,11 @@
102
109
  padding-top: 1px;
103
110
  }
104
111
 
112
+ &.is_destructive a:hover {
113
+ background-color: var(--ui-error-color);
114
+ color: var(--ui-on-error-color);
115
+ }
116
+
105
117
  &.has_radio,
106
118
  &.has_check_box {
107
119
  a {
@@ -148,7 +160,7 @@
148
160
  }
149
161
  }
150
162
 
151
- ul {
163
+ &:not(:last-child) ul {
152
164
  border-bottom: solid 1px var(--ui-on-surface-color-lighter);
153
165
  padding-bottom: 1px;
154
166
  margin-bottom: 1px;
@@ -0,0 +1,5 @@
1
+ .edit_configuration_view {
2
+ .actions_drop_down_button {
3
+ float: right;
4
+ }
5
+ }
@@ -0,0 +1,127 @@
1
+ .file_folders {
2
+ &-pictogram {
3
+ @include background-icon-center(var(--ui-primary-color-light), 28px);
4
+ @include folder-icon;
5
+
6
+ flex-shrink: 0;
7
+ width: space(14);
8
+ height: space(14);
9
+ margin: space(1) 0 space(1) space(1);
10
+ border-radius: rounded(sm);
11
+ background-color: var(--ui-on-surface-color-lightest);
12
+ }
13
+
14
+ // Unlike the two lines of a file row, name and file count are stacked
15
+ // right next to each other, so that the row keeps its height.
16
+ &-info {
17
+ display: flex;
18
+ flex: 1;
19
+ align-items: flex-start;
20
+ justify-content: space-between;
21
+ min-width: 0;
22
+ }
23
+
24
+ &-button {
25
+ flex: 1;
26
+ align-self: center;
27
+ min-width: 0;
28
+ padding: 0;
29
+ border: none;
30
+ background-color: transparent;
31
+ color: inherit;
32
+ cursor: pointer;
33
+ text-align: left;
34
+
35
+ // Navigating into the folder is the only action of the row, so the
36
+ // whole row becomes the target of the button.
37
+ &:after {
38
+ content: "";
39
+ position: absolute;
40
+ top: 0;
41
+ right: 0;
42
+ bottom: 0;
43
+ left: 0;
44
+ }
45
+ }
46
+
47
+ // Takes the place of the button while items are being checked, so that
48
+ // clicking the row checks the folder just like it checks a file.
49
+ // Undoes the weight, spacing and positioning which labels of form
50
+ // fields have. Staying static keeps the row the containing block of the
51
+ // stretched hit area below.
52
+ &-label {
53
+ display: block;
54
+ position: static;
55
+ flex: 1;
56
+ align-self: center;
57
+ min-width: 0;
58
+ margin-bottom: 0;
59
+ font-weight: normal;
60
+ cursor: pointer;
61
+
62
+ &:after {
63
+ content: "";
64
+ position: absolute;
65
+ top: 0;
66
+ right: 0;
67
+ bottom: 0;
68
+ left: 0;
69
+ }
70
+
71
+ .file_folders-title {
72
+ gap: space(2);
73
+ }
74
+ }
75
+
76
+ // Stays above the stretched hit area of the label, so that clicking the
77
+ // box itself still toggles it.
78
+ &-check_box {
79
+ position: relative;
80
+ z-index: 1;
81
+ flex-shrink: 0;
82
+ cursor: pointer;
83
+ }
84
+
85
+ &-title {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: space(1);
89
+ margin-bottom: space(1);
90
+ }
91
+
92
+ &-name {
93
+ @include label;
94
+ }
95
+
96
+ &-chevron {
97
+ @include right-open-icon;
98
+
99
+ flex-shrink: 0;
100
+ color: var(--ui-primary-color-light);
101
+ }
102
+
103
+ &-file_count {
104
+ display: block;
105
+ color: var(--ui-on-surface-color-light);
106
+ }
107
+
108
+ // Lines up with the buttons of file rows. The button stretches over
109
+ // the whole row, so the menu has to stay above it.
110
+ &-actions {
111
+ --drop-down-button-width: 32px;
112
+
113
+ position: relative;
114
+ z-index: 1;
115
+ display: flex;
116
+ padding: space(0.5) space(0.5) 0 0;
117
+ }
118
+
119
+ // Takes the place of the name, so that the row keeps its height while
120
+ // the name is being entered.
121
+ &-input {
122
+ box-sizing: border-box;
123
+ flex: 1;
124
+ align-self: center;
125
+ margin-right: space(2);
126
+ }
127
+ }
@@ -1,5 +1,4 @@
1
1
  .file_meta_data {
2
- margin-left: -65px;
3
2
  white-space: normal;
4
3
 
5
4
  table {
@@ -0,0 +1,45 @@
1
+ .file_meta_data_overlay {
2
+ display: none;
3
+ position: absolute;
4
+ z-index: 6;
5
+ width: space(64);
6
+ border: solid 1px var(--ui-on-surface-color-lighter);
7
+ border-radius: rounded(md);
8
+ background-color: var(--ui-surface-color);
9
+ box-shadow: var(--ui-box-shadow);
10
+
11
+ &.is_open {
12
+ display: block;
13
+ }
14
+
15
+ // Never taller than the space floating-ui found next to the row.
16
+ // Painted after the arrow, whose inner half would otherwise cover the
17
+ // scroll bar.
18
+ &-content {
19
+ position: relative;
20
+ max-height: var(--available-height, 100vh);
21
+ overflow-y: auto;
22
+ padding: space(2);
23
+ }
24
+
25
+ &-preview {
26
+ display: block;
27
+ margin-bottom: space(2);
28
+ border-radius: rounded();
29
+ overflow: hidden;
30
+ background-color: var(--ui-on-surface-color-lightest);
31
+ }
32
+
33
+ // Rotating a square leaves the two edges facing the thumbnail
34
+ // visible, so the arrow continues the border of the overlay.
35
+ &-arrow {
36
+ @include transform(rotate(45deg));
37
+
38
+ position: absolute;
39
+ width: space(2);
40
+ height: space(2);
41
+ border-top: solid 1px var(--ui-on-surface-color-lighter);
42
+ border-right: solid 1px var(--ui-on-surface-color-lighter);
43
+ background-color: var(--ui-surface-color);
44
+ }
45
+ }
@@ -0,0 +1,138 @@
1
+ .file_preview {
2
+ display: block;
3
+ position: relative;
4
+
5
+ .is_hidden {
6
+ display: none;
7
+ }
8
+
9
+ // Scaled down to whatever height the overlay has left rather than
10
+ // being cropped.
11
+ img,
12
+ video {
13
+ display: block;
14
+ width: 100%;
15
+ max-width: var(--preview-width, 100%);
16
+ height: auto;
17
+ max-height: var(--preview-max-height, none);
18
+ margin: 0 auto;
19
+ object-fit: contain;
20
+ }
21
+
22
+ video {
23
+ cursor: pointer;
24
+ }
25
+
26
+ &-audio {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: space(2);
30
+ padding: space(2);
31
+ color: var(--ui-primary-color);
32
+ }
33
+
34
+ &-play_toggle {
35
+ display: flex;
36
+ align-items: center;
37
+ padding: 0;
38
+ border: none;
39
+ background-color: transparent;
40
+ color: inherit;
41
+ cursor: pointer;
42
+ }
43
+
44
+ &-play,
45
+ &-pause {
46
+ display: block;
47
+ width: space(6);
48
+ height: space(6);
49
+ }
50
+
51
+ // Styling the parts of a range input consistently across browsers is
52
+ // more trouble than it is worth. The bar below paints track and
53
+ // progress instead, while the input above only handles interaction.
54
+ &-progress {
55
+ position: relative;
56
+ flex: 1;
57
+ height: space(2);
58
+ border-radius: rounded(full);
59
+ background-color: var(--ui-on-surface-color-lightest);
60
+
61
+ &:focus-within {
62
+ box-shadow: 0 0 0 2px var(--ui-button-focus-ring-color);
63
+ }
64
+
65
+ // Taller than the bar to be easier to hit.
66
+ input {
67
+ position: absolute;
68
+ top: space(-1.5);
69
+ left: 0;
70
+ width: 100%;
71
+ height: space(5);
72
+ border-radius: inherit;
73
+ background-color: transparent;
74
+ cursor: pointer;
75
+ appearance: none;
76
+ -webkit-appearance: none;
77
+
78
+ // The bar itself indicates focus, tightly around its own height.
79
+ &:focus {
80
+ outline: none;
81
+ }
82
+ }
83
+
84
+ // A thumb of its own would only offset how clicks map to positions.
85
+ input::-webkit-slider-thumb {
86
+ width: 0;
87
+ -webkit-appearance: none;
88
+ }
89
+
90
+ input::-moz-range-thumb {
91
+ width: 0;
92
+ border: 0;
93
+ }
94
+
95
+ input::-moz-range-track,
96
+ input::-moz-range-progress {
97
+ background-color: transparent;
98
+ }
99
+
100
+ div {
101
+ width: var(--progress, 0%);
102
+ height: 100%;
103
+ border-radius: inherit;
104
+ background-color: currentColor;
105
+ }
106
+ }
107
+
108
+ &-controls {
109
+ position: absolute;
110
+ right: space(2);
111
+ bottom: space(2);
112
+ left: space(2);
113
+ display: flex;
114
+ align-items: center;
115
+ gap: space(2);
116
+ color: var(--ui-on-primary-color);
117
+
118
+ // Legible on top of both bright and dark videos.
119
+ .file_preview-progress {
120
+ background-color: var(--ui-backdrop-color);
121
+ }
122
+ }
123
+
124
+ &-mute_toggle {
125
+ padding: space(1.5);
126
+ border: none;
127
+ border-radius: rounded(full);
128
+ background-color: var(--ui-backdrop-color);
129
+ color: var(--ui-on-primary-color);
130
+ cursor: pointer;
131
+
132
+ svg {
133
+ display: block;
134
+ width: space(4);
135
+ height: space(4);
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,68 @@
1
+ .file_references {
2
+ &-separator {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: space(2);
6
+ padding: space(4) 0 space(2);
7
+
8
+ &::before,
9
+ &::after {
10
+ content: "";
11
+ flex: 1;
12
+ border-bottom: solid 1px var(--ui-on-surface-color-lightest);
13
+ }
14
+ }
15
+
16
+ &-header {
17
+ margin: 0;
18
+ font-size: 0.75rem;
19
+ font-weight: 500;
20
+ }
21
+
22
+ &-item {
23
+ display: flex;
24
+ align-items: center;
25
+ gap: space(2);
26
+ width: 100%;
27
+ margin-bottom: space(1);
28
+ padding: space(1);
29
+ border: solid 1px var(--ui-on-surface-color-lightest);
30
+ border-radius: rounded();
31
+ background: transparent;
32
+ text-align: left;
33
+ cursor: pointer;
34
+
35
+ &:hover {
36
+ border-color: var(--ui-primary-color-light);
37
+ }
38
+ }
39
+
40
+ &-pictogram {
41
+ flex: none;
42
+ width: 16px;
43
+ height: 16px;
44
+ background-color: var(--ui-primary-color-light);
45
+ mask-size: contain;
46
+ mask-repeat: no-repeat;
47
+ mask-position: center;
48
+ }
49
+
50
+ &-lines {
51
+ display: flex;
52
+ flex-direction: column;
53
+ overflow: hidden;
54
+ }
55
+
56
+ &-label,
57
+ &-detail {
58
+ overflow: hidden;
59
+ font-size: 0.75rem;
60
+ text-overflow: ellipsis;
61
+ white-space: nowrap;
62
+ }
63
+
64
+ &-label {
65
+ font-weight: 500;
66
+ color: var(--ui-on-surface-color-light);
67
+ }
68
+ }
@@ -3,7 +3,7 @@
3
3
  min-width: 500px;
4
4
  min-height: 400px;
5
5
  max-width: 800px;
6
- max-height: 600px;
6
+ max-height: 790px;
7
7
  }
8
8
 
9
9
  .edit_file {
@@ -0,0 +1,17 @@
1
+ .file_stage_icon {
2
+ display: block;
3
+ width: 100%;
4
+ height: 100%;
5
+
6
+ &-spinner {
7
+ @include animation(spin 1s linear infinite);
8
+ }
9
+
10
+ &-spinner,
11
+ &-alert,
12
+ &-bell {
13
+ display: block;
14
+ width: 100%;
15
+ height: 100%;
16
+ }
17
+ }