pages_core 3.6.2 → 3.8.2

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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/Rakefile +3 -1
  4. data/app/assets/builds/pages_core/admin-dist.js +55 -0
  5. data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
  6. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
  7. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
  8. data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
  9. data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
  10. data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
  11. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
  12. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
  13. data/app/assets/stylesheets/pages/admin.scss +0 -1
  14. data/app/assets/stylesheets/pages/errors.css +2 -0
  15. data/app/controller_dummies/admin/admin_controller.rb +3 -1
  16. data/app/controller_dummies/application_controller.rb +3 -1
  17. data/app/controller_dummies/attachments_controller.rb +3 -1
  18. data/app/controller_dummies/frontend_controller.rb +3 -1
  19. data/app/controller_dummies/images_controller.rb +3 -1
  20. data/app/controller_dummies/page_files_controller.rb +3 -1
  21. data/app/controller_dummies/pages_controller.rb +3 -1
  22. data/app/controller_dummies/sitemaps_controller.rb +3 -1
  23. data/app/controllers/admin/attachments_controller.rb +5 -3
  24. data/app/controllers/admin/categories_controller.rb +2 -0
  25. data/app/controllers/admin/images_controller.rb +16 -8
  26. data/app/controllers/admin/invites_controller.rb +4 -1
  27. data/app/controllers/admin/pages_controller.rb +7 -19
  28. data/app/controllers/admin/password_resets_controller.rb +9 -5
  29. data/app/controllers/admin/users_controller.rb +10 -4
  30. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
  31. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  32. data/app/controllers/concerns/pages_core/authentication.rb +13 -5
  33. data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
  34. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  35. data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
  36. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +8 -0
  37. data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
  38. data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
  39. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  40. data/app/controllers/errors_controller.rb +5 -53
  41. data/app/controllers/pages_core/admin_controller.rb +7 -67
  42. data/app/controllers/pages_core/attachments_controller.rb +10 -6
  43. data/app/controllers/pages_core/base_controller.rb +11 -17
  44. data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
  45. data/app/controllers/pages_core/frontend/pages_controller.rb +14 -17
  46. data/app/controllers/pages_core/frontend_controller.rb +3 -0
  47. data/app/controllers/pages_core/images_controller.rb +3 -1
  48. data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
  49. data/app/controllers/sessions_controller.rb +3 -1
  50. data/app/formatters/pages_core/html_formatter.rb +13 -63
  51. data/app/formatters/pages_core/image_embedder.rb +79 -0
  52. data/app/formatters/pages_core/link_renderer.rb +4 -2
  53. data/app/helpers/admin/admin_helper.rb +2 -0
  54. data/app/helpers/admin/menu_helper.rb +6 -4
  55. data/app/helpers/admin/pages_helper.rb +4 -57
  56. data/app/helpers/application_helper.rb +3 -1
  57. data/app/helpers/frontend_helper.rb +3 -1
  58. data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
  59. data/app/helpers/pages_core/admin/content_tabs_helper.rb +31 -0
  60. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  61. data/app/helpers/pages_core/admin/form_builder.rb +8 -0
  62. data/app/helpers/pages_core/admin/image_uploads_helper.rb +47 -0
  63. data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
  64. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  65. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  66. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -39
  67. data/app/helpers/pages_core/application_helper.rb +3 -0
  68. data/app/helpers/pages_core/attachments_helper.rb +31 -27
  69. data/app/helpers/pages_core/form_builder.rb +17 -13
  70. data/app/helpers/pages_core/frontend_helper.rb +3 -3
  71. data/app/helpers/pages_core/head_tags_helper.rb +18 -22
  72. data/app/helpers/pages_core/images_helper.rb +3 -0
  73. data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
  74. data/app/helpers/pages_core/open_graph_tags_helper.rb +8 -6
  75. data/app/helpers/pages_core/page_path_helper.rb +24 -3
  76. data/app/javascript/admin-dist.js +2 -0
  77. data/app/javascript/components/Attachments/Attachment.jsx +121 -0
  78. data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
  79. data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
  80. data/app/javascript/components/Attachments.jsx +165 -0
  81. data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
  82. data/app/javascript/components/EditableImage.jsx +61 -0
  83. data/app/javascript/components/FileUploadButton.jsx +47 -0
  84. data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
  85. data/app/javascript/components/ImageCropper/Image.jsx +65 -0
  86. data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
  87. data/app/javascript/components/ImageCropper/useCrop.js +199 -0
  88. data/app/javascript/components/ImageCropper.jsx +90 -0
  89. data/app/javascript/components/ImageEditor/Form.jsx +98 -0
  90. data/app/javascript/components/ImageEditor.jsx +62 -0
  91. data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
  92. data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
  93. data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
  94. data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
  95. data/app/javascript/components/ImageGrid.jsx +257 -0
  96. data/app/javascript/components/ImageUploader.jsx +171 -0
  97. data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
  98. data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
  99. data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
  100. data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
  101. data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
  102. data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +44 -38
  103. data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +46 -31
  104. data/app/javascript/components/RichTextArea.jsx +213 -0
  105. data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
  106. data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
  107. data/app/javascript/components/TagEditor/Tag.jsx +32 -0
  108. data/app/javascript/components/TagEditor.jsx +61 -0
  109. data/app/javascript/components/Toast.jsx +72 -0
  110. data/app/javascript/components/drag/draggedOrder.js +51 -0
  111. data/app/javascript/components/drag/useDragCollection.js +84 -0
  112. data/app/javascript/components/drag/useDragUploader.js +112 -0
  113. data/app/javascript/components/drag/useDraggable.js +17 -0
  114. data/app/javascript/components/drag.js +6 -0
  115. data/app/javascript/components.js +15 -0
  116. data/app/javascript/controllers/EditPageController.js +20 -0
  117. data/app/javascript/controllers/LoginController.js +29 -0
  118. data/app/javascript/controllers/MainController.js +65 -0
  119. data/app/javascript/controllers/PageOptionsController.js +62 -0
  120. data/app/javascript/features/RichText.jsx +34 -0
  121. data/app/javascript/hooks.js +2 -0
  122. data/app/javascript/index.js +38 -0
  123. data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +64 -63
  124. data/app/javascript/lib/copyToClipboard.js +13 -0
  125. data/app/javascript/lib/readyHandler.js +22 -0
  126. data/app/javascript/lib/request.js +36 -0
  127. data/app/javascript/stores/ModalStore.jsx +12 -0
  128. data/app/javascript/stores/ToastStore.jsx +14 -0
  129. data/app/javascript/stores.js +2 -0
  130. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  131. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  132. data/app/mailers/admin_mailer.rb +4 -14
  133. data/app/models/attachment.rb +10 -8
  134. data/app/models/autopublisher.rb +3 -0
  135. data/app/models/category.rb +3 -1
  136. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  137. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  138. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  139. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  140. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  141. data/app/models/concerns/pages_core/page_model/images.rb +8 -2
  142. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  143. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  144. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  145. data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
  146. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  147. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  148. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  149. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  150. data/app/models/concerns/pages_core/searchable_document.rb +71 -0
  151. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  152. data/app/models/concerns/pages_core/taggable.rb +33 -12
  153. data/app/models/image.rb +14 -1
  154. data/app/models/invite.rb +3 -1
  155. data/app/models/invite_role.rb +5 -3
  156. data/app/models/page.rb +6 -3
  157. data/app/models/page_builder.rb +2 -0
  158. data/app/models/page_category.rb +3 -1
  159. data/app/models/page_exporter.rb +23 -10
  160. data/app/models/page_file.rb +3 -1
  161. data/app/models/page_image.rb +3 -3
  162. data/app/models/page_path.rb +13 -5
  163. data/app/models/password_reset_token.rb +3 -1
  164. data/app/models/role.rb +9 -6
  165. data/app/models/search_document.rb +72 -0
  166. data/app/models/tag.rb +9 -6
  167. data/app/models/tagging.rb +4 -2
  168. data/app/models/user.rb +8 -5
  169. data/app/policies/invite_policy.rb +2 -0
  170. data/app/policies/page_file_policy.rb +2 -0
  171. data/app/policies/page_image_policy.rb +2 -0
  172. data/app/policies/page_policy.rb +2 -0
  173. data/app/policies/policy.rb +2 -0
  174. data/app/policies/user_policy.rb +2 -0
  175. data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +10 -7
  176. data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +13 -11
  177. data/app/resources/admin/page_file_resource.rb +10 -0
  178. data/app/resources/admin/page_image_resource.rb +10 -0
  179. data/app/resources/export/attachment_resource.rb +10 -0
  180. data/app/resources/export/page_image_resource.rb +45 -0
  181. data/app/resources/export/page_resource.rb +42 -0
  182. data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +10 -16
  183. data/app/resources/page_resource.rb +33 -0
  184. data/app/services/pages_core/create_user_service.rb +5 -2
  185. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  186. data/app/services/pages_core/invite_service.rb +4 -2
  187. data/app/views/admin/images/show.json.jbuilder +2 -0
  188. data/app/views/admin/pages/_edit_content.html.erb +1 -1
  189. data/app/views/admin/pages/_edit_files.html.erb +1 -5
  190. data/app/views/admin/pages/_edit_images.html.erb +1 -5
  191. data/app/views/admin/pages/_edit_options.html.erb +74 -55
  192. data/app/views/admin/pages/_form.html.erb +19 -0
  193. data/app/views/admin/pages/edit.html.erb +35 -61
  194. data/app/views/admin/pages/index.html.erb +0 -1
  195. data/app/views/admin/pages/new.html.erb +32 -32
  196. data/app/views/admin/pages/news.html.erb +1 -1
  197. data/app/views/admin/users/_access_control.html.erb +5 -1
  198. data/app/views/admin/users/login.html.erb +12 -4
  199. data/app/views/errors/500.html.erb +2 -20
  200. data/app/views/errors/_generic_help.html.erb +1 -1
  201. data/app/views/feeds/pages.rss.builder +3 -2
  202. data/app/views/layouts/admin/_header.html.erb +1 -1
  203. data/app/views/layouts/admin/_page_header.html.erb +33 -0
  204. data/app/views/layouts/admin.html.erb +23 -42
  205. data/app/views/pages_core/_google_analytics.html.erb +8 -0
  206. data/app/views/sitemaps/show.xml.builder +2 -0
  207. data/config/routes.rb +5 -5
  208. data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
  209. data/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
  210. data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
  211. data/db/migrate/20210210235200_create_search_documents.rb +74 -0
  212. data/lib/pages_core/admin_menu_item.rb +3 -0
  213. data/lib/pages_core/archive_finder.rb +12 -16
  214. data/lib/pages_core/attachment_embedder.rb +4 -6
  215. data/lib/pages_core/cache_sweeper.rb +10 -108
  216. data/lib/pages_core/configuration/base.rb +5 -0
  217. data/lib/pages_core/configuration/pages.rb +4 -2
  218. data/lib/pages_core/configuration.rb +2 -0
  219. data/lib/pages_core/digest_verifier.rb +5 -5
  220. data/lib/pages_core/engine.rb +53 -5
  221. data/lib/pages_core/extensions/string_extensions.rb +3 -1
  222. data/lib/pages_core/extensions.rb +2 -0
  223. data/lib/pages_core/page_path_constraint.rb +2 -0
  224. data/lib/pages_core/pages_plugin.rb +3 -1
  225. data/lib/pages_core/plugin.rb +4 -52
  226. data/lib/pages_core/pub_sub.rb +2 -0
  227. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  228. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  229. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  230. data/lib/pages_core/static_cache.rb +26 -0
  231. data/lib/pages_core/templates/block_configuration.rb +4 -1
  232. data/lib/pages_core/templates/configuration.rb +5 -1
  233. data/lib/pages_core/templates/configuration_handler.rb +5 -3
  234. data/lib/pages_core/templates/configuration_proxy.rb +2 -0
  235. data/lib/pages_core/templates/controller_actions.rb +2 -0
  236. data/lib/pages_core/templates/template_configuration.rb +18 -13
  237. data/lib/pages_core/templates.rb +5 -3
  238. data/lib/pages_core/version.rb +3 -1
  239. data/lib/pages_core.rb +13 -5
  240. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -7
  241. data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
  242. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  243. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
  244. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
  245. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  246. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
  247. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
  248. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
  249. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  250. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +4 -2
  251. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
  253. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
  254. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  255. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  256. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  257. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  258. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
  259. data/lib/tasks/pages/cache.rake +8 -5
  260. data/lib/tasks/pages/export.rake +3 -1
  261. data/lib/tasks/pages/page_paths.rake +2 -0
  262. data/lib/tasks/pages.rake +3 -2
  263. data/template.rb +2 -0
  264. metadata +194 -157
  265. data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
  266. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
  267. data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
  268. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
  269. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
  270. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +0 -44
  271. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
  272. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
  273. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -301
  274. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -171
  275. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
  276. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -63
  277. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -58
  278. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -37
  279. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
  280. data/app/assets/javascripts/pages/admin/components.jsx +0 -2
  281. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
  282. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
  283. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
  284. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
  285. data/app/assets/javascripts/pages/admin.jsx +0 -17
  286. data/app/assets/javascripts/pages/login_form.jsx +0 -21
  287. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  288. data/app/serializers/admin/page_file_serializer.rb +0 -6
  289. data/app/serializers/admin/page_image_serializer.rb +0 -6
  290. data/app/serializers/page_export_serializer.rb +0 -30
  291. data/app/serializers/page_file_export_serializer.rb +0 -4
  292. data/app/serializers/page_image_export_serializer.rb +0 -40
  293. data/app/serializers/page_serializer.rb +0 -21
  294. data/app/views/admin_mailer/error_report.html.erb +0 -70
  295. data/app/views/errors/500_critical.html.erb +0 -7
  296. data/app/views/errors/report.html.erb +0 -4
  297. data/app/views/layouts/admin/_analytics.html.erb +0 -16
  298. data/config/removed_migrations.yml +0 -60
  299. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  300. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  301. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  302. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  303. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  304. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  305. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  306. data/db/migrate/20140203183900_create_roles.rb +0 -66
  307. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  308. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  309. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  310. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  311. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  312. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  313. data/db/migrate/20141007173000_create_invites.rb +0 -16
  314. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  315. data/db/migrate/20150401131300_localize_images.rb +0 -38
  316. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  317. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  318. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  319. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  320. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  321. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  322. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  323. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  324. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  325. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  326. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  327. data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
  328. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
  329. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  330. data/lib/tasks/pages/update.rake +0 -17
  331. data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
  332. data/vendor/assets/javascripts/reflux.min.js +0 -1
@@ -62,6 +62,26 @@ form {
62
62
  }
63
63
  }
64
64
 
65
+ .row {
66
+ display: flex;
67
+ flex-wrap: wrap;
68
+ margin-right: -16px;
69
+
70
+ .field {
71
+ margin-right: 16px;
72
+ &.text-field {
73
+ flex-grow: 1;
74
+ min-width: 300px;
75
+ }
76
+ }
77
+
78
+ input[type=text],
79
+ input[type=password] {
80
+ width: 100%;
81
+ max-width: none;
82
+ }
83
+ }
84
+
65
85
  .date-range-select {
66
86
  .date {
67
87
  line-height: 34px;
@@ -14,6 +14,7 @@
14
14
  font-size: 14px;
15
15
  color: $c-warn-light;
16
16
  text-shadow: 0px 0px 5px rgba(0, 0, 0, 1.0);
17
+ z-index: 100;
17
18
  }
18
19
 
19
20
  img {
@@ -135,10 +135,7 @@ $grid-image-padding: 7px;
135
135
  }
136
136
 
137
137
  .grid {
138
- width: 66.67%;
139
- @include breakpoint-mobile {
140
- width: 100%;
141
- }
138
+ width: 100%;
142
139
  .images {
143
140
  position: relative;
144
141
  display: flex;
@@ -148,7 +145,7 @@ $grid-image-padding: 7px;
148
145
  display: flex;
149
146
  flex-direction: column;
150
147
  justify-content: flex-end;
151
- width: 25%;
148
+ width: 16.66%;
152
149
  @include breakpoint-max(1150px) {
153
150
  width: 50%;
154
151
  }
@@ -159,6 +156,19 @@ $grid-image-padding: 7px;
159
156
  }
160
157
  }
161
158
 
159
+ .editable-image {
160
+ padding-bottom: 75%;
161
+ img {
162
+ position: absolute;
163
+ top: 0px;
164
+ left: 0px;
165
+ width: 100%;
166
+ height: 100%;
167
+ object-fit: contain;
168
+ object-position: 50% 50%;
169
+ }
170
+ }
171
+
162
172
  .drop-target {
163
173
  margin: 10px $grid-image-padding;
164
174
  padding-top: 10px;
@@ -168,6 +178,24 @@ $grid-image-padding: 7px;
168
178
  }
169
179
  }
170
180
 
181
+ &.with-primary-image {
182
+ .grid {
183
+ width: 66.67%;
184
+ @include breakpoint-mobile {
185
+ width: 100%;
186
+ }
187
+ }
188
+ .images .grid-image {
189
+ width: 25%;
190
+ @include breakpoint-max(1150px) {
191
+ width: 50%;
192
+ }
193
+ @include breakpoint-mobile {
194
+ width: 50%;
195
+ }
196
+ }
197
+ }
198
+
171
199
  .drag-image {
172
200
  position: absolute;
173
201
  width: 150px;
@@ -17,7 +17,8 @@ html, body {
17
17
  display: flex;
18
18
  flex-flow: column nowrap;
19
19
  height: 100vh;
20
- > * {
20
+ > *,
21
+ .main-wrapper {
21
22
  flex-shrink: 0;
22
23
  }
23
24
  }
@@ -24,3 +24,9 @@ main .login-form {
24
24
  }
25
25
  }
26
26
  }
27
+
28
+ .login-tab {
29
+ &.hidden {
30
+ display: none;
31
+ }
32
+ }
@@ -0,0 +1,5 @@
1
+ .content-tab {
2
+ &.hidden {
3
+ display: none;
4
+ }
5
+ }
@@ -12,13 +12,24 @@
12
12
  display: block;
13
13
  float: left;
14
14
  margin: 0 5px 5px 0;
15
- padding: 0px 10px;
15
+ padding: 0px;
16
16
  background: $c-background-disabled;
17
17
  border-radius: 5px;
18
18
  line-height: 26px;
19
19
  line-height: 36px;
20
20
  min-width: 40px;
21
21
  transition: all 200ms ease-out;
22
+ -webkit-user-select: none;
23
+ -khtml-user-select: none;
24
+ -moz-user-select: none;
25
+ -ms-user-select: none;
26
+ user-select: none;
27
+
28
+ label {
29
+ margin: 0px;
30
+ padding: 0px 10px;
31
+ color: inherit;
32
+ }
22
33
 
23
34
  input {
24
35
  margin: 2px 3px 0 0;
@@ -30,10 +41,6 @@
30
41
  }
31
42
 
32
43
  &.enabled {
33
- //background: #396e97;
34
- //border-color: #274b67;
35
- //text-shadow: #274b67 1px 1px 1px;
36
-
37
44
  color: #fff;
38
45
  background: $c-link;
39
46
  background: $c-blue-dark;
@@ -49,8 +56,7 @@
49
56
  input.add-tag {
50
57
  margin-top: 0px;
51
58
  border-radius: 5px;
52
- //margin: 0 4px 0 0;
53
- //padding: 4px 3px 3px 3px;
59
+ margin: 0 4px 0 0;
54
60
 
55
61
  &.example {
56
62
  color: $c-text-light;
@@ -126,24 +126,32 @@
126
126
  }
127
127
 
128
128
  .edit-page {
129
- padding-top: 1px;
130
129
  width: auto;
131
130
 
131
+ main div.content {
132
+ padding-top: 16px;
133
+ }
134
+
132
135
  .hidden-options {
133
136
  display: none;
134
137
  }
135
138
 
139
+ .autopublish-notice,
140
+ .published-date,
136
141
  .advanced-options {
137
- visibility: none;
142
+ display: none;
143
+ &.show {
144
+ display: block;
145
+ }
138
146
  }
139
147
 
140
- main & input[type=text],
141
- main & textarea {
148
+ main input[type=text],
149
+ main textarea {
142
150
  width: 100%;
143
151
  max-width: 100%;
144
152
  }
145
153
 
146
- main & input.page_title {
154
+ main input.page_title {
147
155
  font-weight: bold;
148
156
  font-size: 1.4em;
149
157
  color: $c-text;
@@ -1,4 +1,3 @@
1
- @import 'jquery-ui';
2
1
  @import 'ReactCrop';
3
2
  @import 'font-awesome';
4
3
  @import 'admin/vars';
@@ -1,5 +1,7 @@
1
1
  body {
2
2
  background: #fff;
3
+ background: linear-gradient(180deg, rgba(236,236,236,1) 0%, rgba(255,255,255,1) 50%);
4
+ background-repeat: no-repeat;
3
5
  margin: 0;
4
6
  padding: 0;
5
7
  border: 0;
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
- class AdminController < PagesCore::AdminController #:nodoc:
4
+ class AdminController < PagesCore::AdminController # :nodoc:
3
5
  end
4
6
  end
@@ -1,4 +1,6 @@
1
- class ApplicationController < PagesCore::BaseController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationController < PagesCore::BaseController # :nodoc:
2
4
  helper :all
3
5
  protect_from_forgery with: :exception
4
6
  end
@@ -1,2 +1,4 @@
1
- class AttachmentsController < PagesCore::AttachmentsController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class AttachmentsController < PagesCore::AttachmentsController # :nodoc:
2
4
  end
@@ -1,2 +1,4 @@
1
- class FrontendController < PagesCore::FrontendController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class FrontendController < PagesCore::FrontendController # :nodoc:
2
4
  end
@@ -1,2 +1,4 @@
1
- class ImagesController < PagesCore::ImagesController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class ImagesController < PagesCore::ImagesController # :nodoc:
2
4
  end
@@ -1,2 +1,4 @@
1
- class PageFilesController < PagesCore::Frontend::PageFilesController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class PageFilesController < PagesCore::Frontend::PageFilesController # :nodoc:
2
4
  end
@@ -1,2 +1,4 @@
1
- class PagesController < PagesCore::Frontend::PagesController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class PagesController < PagesCore::Frontend::PagesController # :nodoc:
2
4
  end
@@ -1,2 +1,4 @@
1
- class SitemapsController < PagesCore::SitemapsController #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ class SitemapsController < PagesCore::SitemapsController # :nodoc:
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class AttachmentsController < Admin::AdminController
3
5
  before_action :find_attachment, only: %i[update]
@@ -27,8 +29,8 @@ module Admin
27
29
  def attachment_params
28
30
  params.require(:attachment).permit(
29
31
  :file,
30
- localized_attributes.each_with_object({}) do |a, h|
31
- h[a] = I18n.available_locales
32
+ localized_attributes.index_with do |_a|
33
+ I18n.available_locales
32
34
  end
33
35
  )
34
36
  end
@@ -42,7 +44,7 @@ module Admin
42
44
  end
43
45
 
44
46
  def render_attachment(attachment)
45
- render json: attachment, serializer: Admin::AttachmentSerializer
47
+ render json: Admin::AttachmentResource.new(attachment)
46
48
  end
47
49
  end
48
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class CategoriesController < Admin::AdminController
3
5
  before_action :find_category, only: %i[show edit update destroy]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class ImagesController < Admin::AdminController
3
5
  before_action :find_image, only: %i[show edit update destroy]
@@ -12,12 +14,9 @@ module Admin
12
14
 
13
15
  def create
14
16
  @image = Image.create(image_params)
15
- if @image.valid?
16
- respond_to do |format|
17
- format.json do
18
- render json: @image, serializer: Admin::ImageSerializer
19
- end
20
- end
17
+
18
+ respond_to do |format|
19
+ format.json { render_image_json(@image) }
21
20
  end
22
21
  end
23
22
 
@@ -41,8 +40,8 @@ module Admin
41
40
  :name, :description, :file,
42
41
  :crop_start_x, :crop_start_y, :crop_height, :crop_width, :locale,
43
42
  :crop_gravity_x, :crop_gravity_y,
44
- localized_attributes.each_with_object({}) do |a, h|
45
- h[a] = I18n.available_locales
43
+ localized_attributes.index_with do |_a|
44
+ I18n.available_locales
46
45
  end
47
46
  )
48
47
  end
@@ -50,5 +49,14 @@ module Admin
50
49
  def find_image
51
50
  @image = Image.find(params[:id])
52
51
  end
52
+
53
+ def render_image_json(image)
54
+ if image.valid?
55
+ render json: Admin::ImageResource.new(image)
56
+ else
57
+ render json: { status: "error",
58
+ error: image.errors.first.full_message }
59
+ end
60
+ end
53
61
  end
54
62
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class InvitesController < Admin::AdminController
3
5
  before_action :require_authentication, except: %i[accept show]
@@ -45,7 +47,7 @@ module Admin
45
47
 
46
48
  def destroy
47
49
  flash[:notice] = "The invite to #{@invite.email} has been deleted"
48
- @invite.destroy
50
+ PagesCore::DestroyInviteService.call(invite: @invite)
49
51
  redirect_to admin_invites_url
50
52
  end
51
53
 
@@ -58,6 +60,7 @@ module Admin
58
60
  def find_and_validate_invite
59
61
  @invite = Invite.find_by(id: params[:id])
60
62
  return if @invite && secure_compare(@invite.token, params[:token])
63
+
61
64
  flash[:notice] = "This invite is no longer valid."
62
65
  redirect_to(login_admin_users_url) && return
63
66
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class PagesController < Admin::AdminController
5
+ include PagesCore::Admin::PageJsonHelper
3
6
  include PagesCore::Admin::NewsPageController
4
7
 
5
8
  before_action :find_categories
6
- before_action :find_page, only: %i[show edit update destroy
7
- move]
9
+ before_action :find_page, only: %i[show edit update destroy move]
8
10
 
9
11
  require_authorization
10
12
 
@@ -99,23 +101,9 @@ module Admin
99
101
  )
100
102
  end
101
103
 
102
- def page_json(page)
103
- { id: page.id,
104
- param: page.to_param,
105
- parent_page_id: page.parent_page_id,
106
- locale: page.locale,
107
- status: page.status,
108
- news_page: page.news_page,
109
- name: page.name,
110
- published_at: page.published_at,
111
- pinned: page.pinned?,
112
- starts_at: page.starts_at,
113
- permissions: [(:edit if policy(page).edit?),
114
- (:create if policy(page).edit?)].compact }
115
- end
116
-
117
104
  def param_categories
118
105
  return [] unless params[:category]
106
+
119
107
  params.permit(category: {})[:category]
120
108
  .to_hash
121
109
  .map { |id, _| Category.find(id) }
@@ -129,9 +117,9 @@ module Admin
129
117
  @categories = Category.order("name")
130
118
  end
131
119
 
132
- def respond_with_page(page)
120
+ def respond_with_page(page, &block)
133
121
  respond_to do |format|
134
- format.html { yield }
122
+ format.html { block.call }
135
123
  format.json { render json: page_json(page) }
136
124
  end
137
125
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class PasswordResetsController < Admin::AdminController
3
5
  before_action :find_password_reset_token, only: %i[show update]
@@ -42,11 +44,12 @@ module Admin
42
44
  admin_password_reset_with_token_url(
43
45
  password_reset, password_reset.token
44
46
  )
45
- ).deliver_now
47
+ ).deliver_later
46
48
  end
47
49
 
48
50
  def find_user_by_email(email)
49
51
  return unless email
52
+
50
53
  User.login_name(params[:username])
51
54
  end
52
55
 
@@ -60,10 +63,10 @@ module Admin
60
63
 
61
64
  def find_password_reset_token
62
65
  @password_reset_token = begin
63
- PasswordResetToken.find(params[:id])
64
- rescue ActiveRecord::RecordNotFound
65
- nil
66
- end
66
+ PasswordResetToken.find(params[:id])
67
+ rescue ActiveRecord::RecordNotFound
68
+ nil
69
+ end
67
70
 
68
71
  return if valid_token?(@password_reset_token)
69
72
 
@@ -73,6 +76,7 @@ module Admin
73
76
 
74
77
  def check_for_expired_token
75
78
  return unless @password_reset_token.expired?
79
+
76
80
  @password_reset_token.destroy
77
81
  flash[:notice] = "Your password reset link has expired"
78
82
  redirect_to(login_admin_users_url)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class UsersController < Admin::AdminController
3
5
  before_action :require_authentication, except: %i[new create login]
@@ -19,6 +21,7 @@ module Admin
19
21
 
20
22
  def login
21
23
  return unless logged_in?
24
+
22
25
  redirect_to admin_default_url
23
26
  end
24
27
 
@@ -72,10 +75,11 @@ module Admin
72
75
  end
73
76
 
74
77
  def user_params
75
- permitted_params = %i[
76
- name email image image_id
77
- ]
78
- permitted_params += [:activated, role_names: []] if policy(User).manage?
78
+ permitted_params = %i[name email image image_id]
79
+ if policy(User).manage?
80
+ permitted_params += [:activated,
81
+ { role_names: [] }]
82
+ end
79
83
  if User.none? || (@user && policy(@user).change_password?)
80
84
  permitted_params += %i[password confirm_password]
81
85
  end
@@ -84,11 +88,13 @@ module Admin
84
88
 
85
89
  def user_params_with_roles
86
90
  return user_params unless policy(User).manage?
91
+
87
92
  { role_names: [] }.merge(user_params)
88
93
  end
89
94
 
90
95
  def require_no_users
91
96
  return unless User.any?
97
+
92
98
  flash[:error] = "Account holder already exists"
93
99
  redirect_to(admin_users_url)
94
100
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Admin
3
5
  module NewsPageController
@@ -6,26 +8,19 @@ module PagesCore
6
8
  included do
7
9
  before_action :require_news_pages, only: [:news]
8
10
  before_action :find_news_pages, only: %i[news new_news]
11
+ before_action :find_year_and_month, only: %i[news]
9
12
  end
10
13
 
11
14
  def news
12
15
  @archive_finder = archive_finder(@news_pages, @locale)
13
-
14
- unless params[:year]
16
+ unless @year
15
17
  redirect_to(news_admin_pages_path(@locale,
16
18
  (@archive_finder.latest_year ||
17
19
  Time.zone.now.year)))
18
20
  return
19
21
  end
20
-
21
- @year = params[:year]&.to_i
22
- @month = params[:month]&.to_i
23
-
24
- @pages = (if @month
25
- @archive_finder.by_year_and_month(@year, @month)
26
- else
27
- @archive_finder.by_year(@year)
28
- end).paginate(per_page: 50, page: params[:page])
22
+ @pages = @archive_finder.by_year_and_maybe_month(@year, @month)
23
+ .paginate(per_page: 50, page: params[:page])
29
24
  end
30
25
 
31
26
  def new_news
@@ -48,12 +43,19 @@ module PagesCore
48
43
  .in_locale(@locale)
49
44
  .reorder("parent_page_id ASC, position ASC")
50
45
  return if @news_pages.any?
46
+
51
47
  redirect_to(admin_pages_url(@locale))
52
48
  end
53
49
 
50
+ def find_year_and_month
51
+ @year = params[:year]&.to_i
52
+ @month = params[:month]&.to_i
53
+ end
54
+
54
55
  # Redirect away if no news pages has been configured
55
56
  def require_news_pages
56
57
  return if Page.news_pages.any?
58
+
57
59
  redirect_to(admin_pages_url(@locale))
58
60
  end
59
61
 
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module PersistentParams
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ before_action :restore_persistent_params
10
+ after_action :save_persistent_params
11
+ end
12
+
13
+ protected
14
+
15
+ # Loads persistent params from user model and merges with session.
16
+ def restore_persistent_params
17
+ return unless current_user&.persistent_data?
18
+
19
+ session[:persistent_params] ||= {}
20
+ session[:persistent_params] = current_user.persistent_data.merge(
21
+ session[:persistent_params]
22
+ )
23
+ end
24
+
25
+ # Saves persistent params from session to User model if applicable.
26
+ def save_persistent_params
27
+ return unless current_user && session[:persistent_params]
28
+
29
+ current_user.persistent_data = session[:persistent_params]
30
+ current_user.save
31
+ end
32
+
33
+ def persistent_params(namespace)
34
+ session[:persistent_params] ||= {}
35
+ session[:persistent_params][namespace] ||= {}
36
+ session[:persistent_params][namespace]
37
+ end
38
+
39
+ def coerce_persistent_param(value)
40
+ case value
41
+ when "true"
42
+ true
43
+ when "false"
44
+ false
45
+ else
46
+ value
47
+ end
48
+ end
49
+
50
+ def get_persistent_param(namespace, key, default)
51
+ if params.key?(key)
52
+ params[key]
53
+ elsif persistent_params(namespace).key?(key)
54
+ persistent_params(namespace)[key]
55
+ else
56
+ default
57
+ end
58
+ end
59
+
60
+ # Get a persistent param
61
+ def persistent_param(key, default = nil, options = {})
62
+ key = key.to_s
63
+ namespace = options[:namespace] || self.class.to_s
64
+
65
+ value = coerce_persistent_param(
66
+ get_persistent_param(namespace, key, default)
67
+ )
68
+
69
+ persistent_params(namespace)[key] = value unless value.nil?
70
+
71
+ value
72
+ end
73
+ end
74
+ end
75
+ end