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
@@ -1,36 +1,37 @@
1
1
  .file_stage_items {
2
- border-top: solid 1px var(--ui-on-surface-color-lighter);
3
2
  border-bottom: solid 1px var(--ui-on-surface-color-lighter);
4
- padding-bottom: 5px;
5
- margin-bottom: 5px;
3
+ padding-bottom: space(2);
4
+ margin-bottom: space(2);
6
5
  }
7
6
 
8
7
  .file_stage_item {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: space(2);
11
+ padding-left: space(2);
12
+ position: relative;
9
13
  white-space: normal;
14
+ color: var(--ui-primary-color);
10
15
 
11
- &.indented {
12
- @include background-icon-center($left: 20px, $color: var(--ui-on-surface-color-lighter));
13
- padding: 10px 0 5px 60px;
14
- margin-left: -60px;
16
+ &.failed {
17
+ color: var(--ui-error-color);
15
18
  }
16
19
 
20
+ // Leaves room for the thumbnail the surrounding input view reserves
21
+ // space for.
17
22
  &.stand_alone {
18
- @include background-icon-center($left: 31px, $color: var(--ui-on-surface-color-lighter));
19
23
  padding-left: 70px;
20
24
  }
21
25
 
22
- &.action_required,
23
- &.active {
24
- @include background-icon-color(var(--ui-primary-color));
25
- @include background-icon-animation(blink);
26
- }
27
-
28
- &.finished {
29
- @include background-icon-color(var(--ui-primary-color));
30
- }
26
+ &-icon {
27
+ flex-shrink: 0;
28
+ width: space(4);
29
+ height: space(4);
31
30
 
32
- &.failed {
33
- @include background-icon-color(var(--ui-error-color));
31
+ .stand_alone & {
32
+ position: absolute;
33
+ left: 23px;
34
+ }
34
35
  }
35
36
 
36
37
  .percent {
@@ -38,20 +39,12 @@
38
39
  font-size: 12px;
39
40
  }
40
41
 
41
- .error_message {
42
- margin-top: 5px;
42
+ .description {
43
+ color: var(--ui-on-surface-color);
43
44
  }
44
45
 
45
- &.uploading {
46
- @include up-bold-icon;
47
- }
48
-
49
- &.fetching_meta_data {
50
- @include clipboard-icon;
51
- }
52
-
53
- &.processing,
54
- &.encoding {
55
- @include cog-icon;
46
+ .error_message {
47
+ margin-top: space(1);
48
+ color: var(--ui-on-surface-color);
56
49
  }
57
50
  }
@@ -1,15 +1,43 @@
1
1
  .file_thumbnail {
2
+ position: relative;
2
3
  background-size: cover;
3
4
 
5
+ // Fills the box just like the background image would, so file types
6
+ // can render a thumbnail of their own.
7
+ &-custom {
8
+ position: absolute;
9
+ inset: 0;
10
+ }
11
+
12
+ // Covers thumbnail image and pictogram while the file is being
13
+ // processed.
14
+ &-stage_icon {
15
+ position: absolute;
16
+ inset: 0;
17
+
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+
22
+ background-color: var(--ui-on-surface-color-light-solid);
23
+ color: var(--ui-on-primary-color);
24
+
25
+ &:empty {
26
+ display: none;
27
+ }
28
+ }
29
+
30
+ .file_stage_icon {
31
+ width: 40%;
32
+ height: 40%;
33
+ }
34
+
4
35
  .pictogram {
5
36
  width: 100%;
6
37
  height: 100%;
7
- }
8
38
 
9
- .pictogram {
10
39
  background-color: var(--ui-on-surface-color-light-solid);
11
40
  @include background-icon-center($color: var(--ui-on-primary-color), $font-size: 30px);
12
- @include background-icon-animation(blink);
13
41
 
14
42
  &.audio {
15
43
  @include note-icon;
@@ -19,38 +47,14 @@
19
47
  @include fa-cloud-download-icon;
20
48
  }
21
49
 
22
- &.uploading {
23
- @include up-bold-icon;
24
- }
25
-
26
- &.fetching_meta_data {
27
- @include clipboard-icon;
28
- }
29
-
30
- &.processing,
31
- &.encoding {
32
- @include cog-icon;
33
- }
34
-
35
50
  &.empty {
36
51
  @include picture-icon;
37
- @include background-icon-animation(none);
38
- }
39
-
40
- &.action_required {
41
- @include bell-icon;
42
52
  }
43
53
  }
44
54
 
45
- div.pictogram.failed {
46
- @include attention-icon;
47
- @include background-icon-animation(none);
48
- }
49
-
50
55
  &.ready {
51
56
  .pictogram {
52
57
  display: none;
53
- @include background-icon-animation(none);
54
58
  }
55
59
  }
56
60
 
@@ -60,24 +64,3 @@
60
64
  }
61
65
  }
62
66
  }
63
-
64
- .expandable {
65
- .file_thumbnail {
66
- @include background-icon-left($color: var(--ui-on-primary-color), $left: 70%, $top: 85%);
67
- @include down-open-icon;
68
-
69
- &:before {
70
- z-index: 1;
71
- opacity: 0.4;
72
- text-shadow: var(--ui-on-surface-color) 1px 0 4px;
73
- }
74
-
75
- &:hover:before {
76
- opacity: 1;
77
- }
78
- }
79
-
80
- .expanded .file_thumbnail {
81
- @include up-open-icon;
82
- }
83
- }
@@ -0,0 +1,73 @@
1
+ .file_type_pills {
2
+ &-group {
3
+ display: flex;
4
+ flex-wrap: wrap;
5
+ gap: space(1);
6
+ padding: space(2) 0;
7
+ }
8
+
9
+ &-pill {
10
+ cursor: pointer;
11
+
12
+ // Clicking the pill of the only file type present would have nothing
13
+ // to filter down to.
14
+ &.only_type {
15
+ cursor: default;
16
+ }
17
+
18
+ color: var(--ui-on-surface-color-light);
19
+ padding: space(1) space(2);
20
+ border: solid 1px var(--ui-on-surface-color-lighter);
21
+ border-radius: rounded(full);
22
+ background-color: transparent;
23
+ line-height: inherit;
24
+
25
+ &.active {
26
+ color: var(--ui-on-primary-color);
27
+ border-color: var(--ui-primary-color);
28
+ background-color: var(--ui-primary-color);
29
+
30
+ &.spinner:before {
31
+ color: var(--ui-on-primary-color);
32
+ }
33
+ }
34
+
35
+ &.spinner {
36
+ padding-left: 27px;
37
+ @include background-icon-left($color: var(--ui-primary-color));
38
+ @include background-icon-animation(blink);
39
+ @include up-bold-icon;
40
+ }
41
+ }
42
+
43
+ &-add,
44
+ &-remove {
45
+ display: none;
46
+ margin-left: space(1);
47
+ font-size: 0.75em;
48
+ }
49
+
50
+ &-remove {
51
+ @include cancel-icon;
52
+ }
53
+
54
+ &-add {
55
+ @include plus-circled-icon;
56
+ }
57
+
58
+ // Clicking the only active pill clears the selection even without the
59
+ // modifier key, so its indicator does not wait for the pointer.
60
+ &-pill.only_active .file_type_pills-remove {
61
+ display: inline;
62
+ }
63
+
64
+ // Indicators would otherwise flash whenever the modifier key takes part in
65
+ // an unrelated shortcut, like selecting all text in the search field.
66
+ &-group:hover,
67
+ &-group:focus-within {
68
+ .file_type_pills-pill.removable .file_type_pills-remove,
69
+ .file_type_pills-pill.addable .file_type_pills-add {
70
+ display: inline;
71
+ }
72
+ }
73
+ }
@@ -1,85 +1,256 @@
1
1
  ul.files {
2
- margin-top: space(2);
3
-
4
2
  > li {
5
- background-color: var(--ui-primary-color-lightest);
6
- border-radius: rounded();
7
- margin-bottom: 2px;
3
+ display: flex;
4
+ column-gap: space(2);
5
+ background-color: var(--ui-surface-color);
6
+ border-bottom: solid 1px var(--ui-on-surface-color-lightest);
8
7
  position: relative;
9
- padding: 37px 10px 0 70px;
10
- white-space: nowrap;
11
- min-height: 23px;
12
8
  scroll-margin-top: 100px;
9
+
10
+ &:last-child {
11
+ border-bottom: none;
12
+ }
13
+
14
+ &.is_selected {
15
+ background-color: var(--ui-selection-color-lighter);
16
+ }
17
+
18
+ // Selecting is the only action offered in selection mode, so the
19
+ // whole row becomes the target of the select button.
20
+ &.selectable {
21
+ &:focus-within .select,
22
+ &.keyboard_highlight .select {
23
+ opacity: 1;
24
+ }
25
+
26
+ .select:after {
27
+ content: "";
28
+ position: absolute;
29
+ top: 0;
30
+ right: 0;
31
+ bottom: 0;
32
+ left: 0;
33
+ }
34
+
35
+ // The thumbnail keeps opening the meta data overlay, so it needs
36
+ // to stay above the stretched select button.
37
+ .file_thumbnail_button {
38
+ position: relative;
39
+ z-index: 1;
40
+ }
41
+ }
13
42
  }
14
43
 
15
- > li:not(.expanded) .details {
16
- display: none;
44
+ // Arrow keys scroll the highlighted row under a resting pointer, so
45
+ // hovering would point out a second row while the keyboard is driving
46
+ // the list.
47
+ &:not(:has(.keyboard_highlight)) > li.selectable {
48
+ &:hover {
49
+ background-color: var(--ui-selection-color-light);
50
+ }
51
+
52
+ &:hover .select {
53
+ opacity: 1;
54
+ }
17
55
  }
18
56
 
19
57
  li.blank_slate {
20
58
  text-align: center;
21
- padding: 10px 5px 20px 5px;
59
+ padding: space(8) space(4);
22
60
  color: var(--ui-on-surface-color-light);
23
61
  }
24
62
 
63
+ // Only displayed while searching across folders, where the row is the
64
+ // only clue as to where the item was found. The auto margin leaves the
65
+ // name of a file at the bottom of the row, where rows without a folder
66
+ // have it as well.
67
+ .files-parent_folder {
68
+ @include folder-icon;
69
+
70
+ display: flex;
71
+ align-items: center;
72
+ min-width: 0;
73
+ margin-top: auto;
74
+ margin-bottom: space(1);
75
+ color: var(--ui-on-surface-color-light);
76
+
77
+ &.is_hidden {
78
+ display: none;
79
+ }
80
+
81
+ // Same width as the check box below.
82
+ &:before {
83
+ flex-shrink: 0;
84
+ width: 13px;
85
+ margin-right: space(1);
86
+ color: var(--ui-primary-color-light);
87
+ text-align: center;
88
+ }
89
+ }
90
+
91
+ .files-parent_folder_name {
92
+ @include label;
93
+ }
94
+
25
95
  .file_thumbnail_button {
26
- position: absolute;
27
- top: 0;
28
- left: 0;
29
- height: 60px;
30
- width: 60px;
96
+ display: block;
97
+ flex-shrink: 0;
98
+ padding: space(1) 0 space(1) space(1);
31
99
  border: none;
32
100
  background: transparent;
33
- padding: 0;
34
101
  cursor: pointer;
35
- display: block;
36
102
  }
37
103
 
38
104
  .file_thumbnail {
39
- height: 100%;
40
- width: 100%;
41
- vertical-align: middle;
42
105
  display: block;
106
+ width: space(14);
107
+ height: space(14);
108
+ border-radius: rounded(sm);
109
+ overflow: hidden;
110
+ }
111
+
112
+ .file_item-info {
113
+ display: flex;
114
+ flex: 1;
115
+ flex-direction: column;
116
+ justify-content: space-between;
117
+ min-width: 0;
118
+ padding: 0 0 space(2) 0;
119
+ }
120
+
121
+ // The file name labels the check box, so clicking it checks the file
122
+ // while files are being checked. Undoes the weight, spacing and
123
+ // positioning which labels of form fields have. Staying static keeps
124
+ // the row the containing block of the stretched hit area below.
125
+ .file_item-name_row {
126
+ display: flex;
127
+ position: static;
128
+ align-items: center;
129
+ gap: space(2);
130
+ min-width: 0;
131
+ margin-bottom: 0;
132
+ font-weight: normal;
133
+ }
134
+
135
+ &.is_selecting {
136
+ .file_item-name_row {
137
+ cursor: pointer;
138
+
139
+ // The line the file name sits on is a small target, so the label
140
+ // stretches over the whole row.
141
+ &:after {
142
+ content: "";
143
+ position: absolute;
144
+ top: 0;
145
+ right: 0;
146
+ bottom: 0;
147
+ left: 0;
148
+ }
149
+ }
150
+
151
+ .file_item-check_box {
152
+ display: inline-block;
153
+ }
154
+
155
+ .file_item-check_box,
156
+ .file_thumbnail_button,
157
+ .actions {
158
+ position: relative;
159
+ z-index: 1;
160
+ }
161
+
162
+ .file_item-reference_count {
163
+ display: flex;
164
+ }
165
+ }
166
+
167
+ // Only shown while files are being checked, which is when the number
168
+ // of places a file would disappear from decides whether to check it.
169
+ // Sits beside the thumbnail but stays inside its button, so pointing
170
+ // at the count still opens the details of the file it belongs to.
171
+ .file_item-reference_count {
172
+ display: none;
173
+ position: absolute;
174
+ // Shares the line of the action buttons on the other side of the
175
+ // row, which are 30px tall below space(0.5) of padding.
176
+ top: 7px;
177
+ left: 100%;
178
+ align-items: center;
179
+ height: space(5);
180
+ margin-left: space(2);
181
+ padding: 0 space(1.5);
182
+ border-radius: rounded();
183
+ background-color: var(--ui-on-surface-color-lightest);
184
+ color: var(--ui-on-surface-color-light);
185
+ font-size: 0.6875rem;
186
+ line-height: 1;
187
+ white-space: nowrap;
188
+
189
+ // Checking the file is all that is left to do with one nothing
190
+ // references, so its badge lets the click through to the row.
191
+ &.is_unreferenced {
192
+ background-color: var(--ui-warning-color-lightest);
193
+ color: var(--ui-warning-color);
194
+ pointer-events: none;
195
+ }
196
+ }
197
+
198
+ // Only shown while files are being checked, which indents the names of
199
+ // the whole list at once instead of nudging single rows while the
200
+ // pointer passes them.
201
+ .file_item-check_box {
202
+ display: none;
203
+ flex-shrink: 0;
204
+ cursor: pointer;
43
205
  }
44
206
 
45
207
  .file_name {
46
- margin-bottom: 10px;
47
208
  display: block;
48
209
 
49
210
  @include label;
50
211
  }
51
212
 
52
213
  .actions {
53
- position: absolute;
54
- right: 10px;
55
- top: 3px;
56
- text-align: right;
214
+ --drop-down-button-width: 32px;
57
215
 
58
- button {
59
- float: left;
60
- margin-left: 5px;
61
- min-width: space(8);
62
- }
216
+ display: flex;
217
+ align-self: flex-end;
218
+ align-items: center;
219
+ padding: space(0.5) space(0.5) 0 0;
63
220
  }
64
221
 
65
222
  button.settings,
66
- button.cancel,
67
223
  button.confirm,
68
- button.retry {
69
- @include icon-only-button();
70
- }
224
+ button.retry,
225
+ .drop_down_button > button {
226
+ width: var(--drop-down-button-width);
227
+ padding: 7px 0;
228
+ text-align: center;
229
+ border: none;
230
+ border-radius: rounded();
231
+ background-color: transparent;
232
+ color: var(--ui-primary-color-light);
233
+ line-height: 16px;
234
+ cursor: pointer;
71
235
 
72
- button.settings {
73
- @include cog-icon;
74
- }
236
+ &:before {
237
+ font-size: 16px;
238
+ vertical-align: top;
239
+ }
75
240
 
76
- button.remove {
77
- @include icon-only-button("destructive");
78
- @include trash-icon;
241
+ &.hover,
242
+ &:hover {
243
+ background-color: var(--ui-on-surface-color-lightest);
244
+ color: var(--ui-primary-color);
245
+ }
246
+
247
+ &:focus {
248
+ box-shadow: 0 0 0 2px var(--ui-button-focus-ring-color);
249
+ }
79
250
  }
80
251
 
81
- button.cancel {
82
- @include cancel-icon;
252
+ button.settings {
253
+ @include cog-icon;
83
254
  }
84
255
 
85
256
  button.confirm {
@@ -91,14 +262,23 @@ ul.files {
91
262
  }
92
263
 
93
264
  button.select {
94
- @include simple-button("primary");
265
+ @include check-icon;
266
+ @include transition(opacity 100ms);
95
267
 
96
- padding-left: 5px;
97
- padding-right: 5px;
98
- vertical-align: middle;
268
+ padding: space(2);
269
+ line-height: 16px;
270
+ border: none;
271
+ background-color: transparent;
272
+ color: var(--ui-primary-color);
273
+ font-weight: 500;
274
+ cursor: pointer;
275
+ opacity: 0;
99
276
 
100
- position: absolute;
101
- top: 3px;
102
- left: 70px;
277
+ // Entypo sits on a different baseline than the label, which would
278
+ // otherwise make the line box taller than the other buttons.
279
+ &:before {
280
+ margin-right: space(1);
281
+ vertical-align: top;
282
+ }
103
283
  }
104
284
  }