pages_core 3.6.0 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) 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 +9 -26
  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 -18
  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/{assets/javascripts/pages/admin/components/file_upload_button.jsx → javascript/components/FileUploadButton.jsx} +11 -1
  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/javascript/components/ModalStore.jsx +12 -0
  99. data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
  100. data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
  101. data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
  102. data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
  103. data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +44 -38
  104. data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +46 -31
  105. data/app/javascript/components/RichTextArea.jsx +213 -0
  106. data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
  107. data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
  108. data/app/javascript/components/TagEditor/Tag.jsx +32 -0
  109. data/app/javascript/components/TagEditor.jsx +61 -0
  110. data/app/javascript/components/Toast.jsx +72 -0
  111. data/app/javascript/components/ToastStore.jsx +14 -0
  112. data/app/javascript/components/drag/draggedOrder.js +51 -0
  113. data/app/javascript/components/drag/useDragCollection.js +84 -0
  114. data/app/javascript/components/drag/useDragUploader.js +112 -0
  115. data/app/javascript/components/drag/useDraggable.js +17 -0
  116. data/app/javascript/components/drag.js +6 -0
  117. data/app/javascript/components.js +14 -0
  118. data/app/javascript/controllers/EditPageController.js +20 -0
  119. data/app/javascript/controllers/LoginController.js +29 -0
  120. data/app/javascript/controllers/MainController.js +65 -0
  121. data/app/javascript/controllers/PageOptionsController.js +62 -0
  122. data/app/javascript/features/RichText.jsx +34 -0
  123. data/app/javascript/hooks.js +2 -0
  124. data/app/javascript/index.js +33 -0
  125. data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +64 -63
  126. data/app/javascript/lib/copyToClipboard.js +13 -0
  127. data/app/javascript/lib/readyHandler.js +22 -0
  128. data/app/javascript/lib/request.js +36 -0
  129. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  130. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  131. data/app/mailers/admin_mailer.rb +4 -14
  132. data/app/models/attachment.rb +10 -8
  133. data/app/models/autopublisher.rb +3 -0
  134. data/app/models/category.rb +3 -1
  135. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  136. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  137. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  138. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  139. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  140. data/app/models/concerns/pages_core/page_model/images.rb +8 -2
  141. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  142. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  143. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  144. data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
  145. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  146. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  147. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  148. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  149. data/app/models/concerns/pages_core/searchable_document.rb +71 -0
  150. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  151. data/app/models/concerns/pages_core/taggable.rb +33 -12
  152. data/app/models/image.rb +14 -1
  153. data/app/models/invite.rb +3 -1
  154. data/app/models/invite_role.rb +5 -3
  155. data/app/models/page.rb +6 -3
  156. data/app/models/page_builder.rb +2 -0
  157. data/app/models/page_category.rb +3 -1
  158. data/app/models/page_exporter.rb +23 -10
  159. data/app/models/page_file.rb +3 -1
  160. data/app/models/page_image.rb +3 -3
  161. data/app/models/page_path.rb +13 -5
  162. data/app/models/password_reset_token.rb +3 -1
  163. data/app/models/role.rb +9 -6
  164. data/app/models/search_document.rb +72 -0
  165. data/app/models/tag.rb +9 -6
  166. data/app/models/tagging.rb +4 -2
  167. data/app/models/user.rb +8 -5
  168. data/app/policies/invite_policy.rb +2 -0
  169. data/app/policies/page_file_policy.rb +2 -0
  170. data/app/policies/page_image_policy.rb +2 -0
  171. data/app/policies/page_policy.rb +2 -0
  172. data/app/policies/policy.rb +2 -0
  173. data/app/policies/user_policy.rb +2 -0
  174. data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +10 -7
  175. data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +13 -11
  176. data/app/resources/admin/page_file_resource.rb +10 -0
  177. data/app/resources/admin/page_image_resource.rb +10 -0
  178. data/app/resources/export/attachment_resource.rb +10 -0
  179. data/app/resources/export/page_image_resource.rb +45 -0
  180. data/app/resources/export/page_resource.rb +42 -0
  181. data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +10 -16
  182. data/app/resources/page_resource.rb +33 -0
  183. data/app/services/pages_core/create_user_service.rb +5 -2
  184. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  185. data/app/services/pages_core/invite_service.rb +4 -2
  186. data/app/views/admin/images/show.json.jbuilder +2 -0
  187. data/app/views/admin/pages/_edit_content.html.erb +1 -1
  188. data/app/views/admin/pages/_edit_files.html.erb +1 -5
  189. data/app/views/admin/pages/_edit_images.html.erb +1 -5
  190. data/app/views/admin/pages/_edit_metadata.html.erb +1 -12
  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 -6
  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 +20 -14
  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 +193 -156
  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/grid_image.jsx +0 -124
  271. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
  272. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -301
  273. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -171
  274. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
  275. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -63
  276. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -58
  277. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -37
  278. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
  279. data/app/assets/javascripts/pages/admin/components.jsx +0 -2
  280. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
  281. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
  282. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
  283. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
  284. data/app/assets/javascripts/pages/admin.jsx +0 -17
  285. data/app/assets/javascripts/pages/login_form.jsx +0 -21
  286. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  287. data/app/serializers/admin/page_file_serializer.rb +0 -6
  288. data/app/serializers/admin/page_image_serializer.rb +0 -6
  289. data/app/serializers/page_export_serializer.rb +0 -30
  290. data/app/serializers/page_file_export_serializer.rb +0 -4
  291. data/app/serializers/page_image_export_serializer.rb +0 -40
  292. data/app/serializers/page_serializer.rb +0 -21
  293. data/app/views/admin_mailer/error_report.html.erb +0 -70
  294. data/app/views/errors/500_critical.html.erb +0 -7
  295. data/app/views/errors/report.html.erb +0 -4
  296. data/app/views/layouts/admin/_analytics.html.erb +0 -16
  297. data/config/removed_migrations.yml +0 -60
  298. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  299. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  300. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  301. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  302. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  303. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  304. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  305. data/db/migrate/20140203183900_create_roles.rb +0 -66
  306. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  307. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  308. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  309. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  310. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  311. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  312. data/db/migrate/20141007173000_create_invites.rb +0 -16
  313. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  314. data/db/migrate/20150401131300_localize_images.rb +0 -38
  315. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  316. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  317. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  318. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  319. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  320. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  321. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  322. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  323. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  324. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  325. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  326. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
  327. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  328. data/lib/tasks/pages/update.rake +0 -17
  329. data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
  330. data/vendor/assets/javascripts/reflux.min.js +0 -1
data/app/models/tag.rb CHANGED
@@ -1,7 +1,10 @@
1
- class Tag < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Tag < ApplicationRecord
2
4
  include PagesCore::HumanizableParam
3
5
  has_many :taggings, dependent: :destroy
4
6
 
7
+ scope :by_name, -> { order("name ASC") }
5
8
  scope :pinned, -> { where(pinned: true) }
6
9
  scope :sorted, -> { order("pinned DESC, name ASC") }
7
10
 
@@ -11,6 +14,7 @@ class Tag < ActiveRecord::Base
11
14
  tags = (taggable.tags.sorted + pinned.sorted).uniq
12
15
 
13
16
  return tags unless tags.count < limit
17
+
14
18
  tags + suggestions(taggable, tags, limit)[0...(limit - tags.length)]
15
19
  end
16
20
 
@@ -26,14 +30,13 @@ class Tag < ActiveRecord::Base
26
30
 
27
31
  def suggestions(taggable, tags, limit)
28
32
  suggestions = taggable_suggestions(taggable, limit).to_a
29
- if suggestions.length < limit
30
- suggestions += all_suggestions(limit)
31
- end
32
- suggestions.reject { |t| tags.include?(t) }.uniq[0...(limit)]
33
+ suggestions += all_suggestions(limit) if suggestions.length < limit
34
+ suggestions.reject { |t| tags.include?(t) }.uniq[0...limit]
33
35
  end
34
36
 
35
37
  def taggable_suggestions(taggable, limit)
36
- all_suggestions(limit).where("taggings.taggable_type = ?", taggable.class)
38
+ all_suggestions(limit)
39
+ .where(taggings: { taggable_type: taggable.class.to_s })
37
40
  end
38
41
 
39
42
  def all_suggestions(limit)
@@ -1,6 +1,8 @@
1
- class Tagging < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Tagging < ApplicationRecord
2
4
  belongs_to :tag
3
- belongs_to :taggable, polymorphic: true
5
+ belongs_to :taggable, polymorphic: true, touch: true
4
6
 
5
7
  validates :taggable_id, presence: true
6
8
  validates :taggable_type, presence: true
data/app/models/user.rb CHANGED
@@ -1,4 +1,6 @@
1
- class User < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class User < ApplicationRecord
2
4
  include PagesCore::HasRoles
3
5
 
4
6
  attr_accessor :password, :confirm_password
@@ -21,9 +23,7 @@ class User < ActiveRecord::Base
21
23
 
22
24
  serialize :persistent_data
23
25
 
24
- validates :username,
25
- presence: true,
26
- uniqueness: { case_sensitive: false }
26
+ validates :username, presence: true, uniqueness: { case_sensitive: false }
27
27
 
28
28
  validates :name, presence: true
29
29
 
@@ -63,6 +63,7 @@ class User < ActiveRecord::Base
63
63
 
64
64
  def authenticate!(password)
65
65
  return false unless can_login? && valid_password?(password)
66
+
66
67
  rehash_password!(password) if password_needs_rehash?
67
68
  true
68
69
  end
@@ -73,6 +74,7 @@ class User < ActiveRecord::Base
73
74
 
74
75
  def mark_active!
75
76
  return if last_login_at && last_login_at > 10.minutes.ago
77
+
76
78
  update(last_login_at: Time.now.utc)
77
79
  end
78
80
 
@@ -81,7 +83,7 @@ class User < ActiveRecord::Base
81
83
  end
82
84
 
83
85
  def online?
84
- last_login_at && last_login_at > 15.minutes.ago ? true : false
86
+ last_login_at && last_login_at > 15.minutes.ago
85
87
  end
86
88
 
87
89
  def realname
@@ -92,6 +94,7 @@ class User < ActiveRecord::Base
92
94
 
93
95
  def confirm_password_must_match
94
96
  return if password.blank? || password == confirm_password
97
+
95
98
  errors.add(:confirm_password, "does not match")
96
99
  end
97
100
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class InvitePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageFilePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PageImagePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PagePolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Policy
2
4
  module DefaultPolicy
3
5
  def index
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UserPolicy < Policy
2
4
  def index?
3
5
  true
@@ -1,28 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
- class AttachmentSerializer < ActiveModel::Serializer
4
+ class AttachmentResource
5
+ include Alba::Resource
3
6
  include Rails.application.routes.url_helpers
4
7
  include PagesCore::AttachmentsHelper
5
8
 
6
9
  attributes :id, :filename, :content_type, :content_hash, :content_length,
7
- :name, :description, :created_at, :updated_at, :url
10
+ :created_at, :updated_at
8
11
 
9
- def name
12
+ attribute :name do
10
13
  localized_attribute(:name)
11
14
  end
12
15
 
13
- def description
16
+ attribute :description do
14
17
  localized_attribute(:description)
15
18
  end
16
19
 
17
- def url
20
+ attribute :url do
18
21
  attachment_path(object)
19
22
  end
20
23
 
21
24
  private
22
25
 
23
26
  def localized_attribute(attr)
24
- object.locales.each_with_object({}) do |locale, hash|
25
- hash[locale] = object.localize(locale).send(attr)
27
+ object.locales.index_with do |locale|
28
+ object.localize(locale).send(attr)
26
29
  end
27
30
  end
28
31
  end
@@ -1,27 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
- class ImageSerializer < ActiveModel::Serializer
4
+ class ImageResource
5
+ include Alba::Resource
3
6
  include Rails.application.routes.url_helpers
4
7
  include DynamicImage::Helper
5
8
 
6
9
  attributes :id, :filename, :content_type, :content_hash, :content_length,
7
10
  :colorspace, :real_width, :real_height, :crop_width,
8
11
  :crop_height, :crop_start_x, :crop_start_y, :crop_gravity_x,
9
- :crop_gravity_y, :alternative, :caption, :created_at, :updated_at
10
- attributes :cropped_url, :uncropped_url, :original_url, :thumbnail_url
12
+ :crop_gravity_y, :created_at, :updated_at
11
13
 
12
- def alternative
14
+ attribute :alternative do
13
15
  localized_attribute(:alternative)
14
16
  end
15
17
 
16
- def caption
18
+ attribute :caption do
17
19
  localized_attribute(:caption)
18
20
  end
19
21
 
20
- def original_url
22
+ attribute :original_url do
21
23
  original_dynamic_image_path(object)
22
24
  end
23
25
 
24
- def thumbnail_url
26
+ attribute :thumbnail_url do
25
27
  dynamic_image_path(
26
28
  object,
27
29
  size: "500x",
@@ -29,7 +31,7 @@ module Admin
29
31
  )
30
32
  end
31
33
 
32
- def cropped_url
34
+ attribute :cropped_url do
33
35
  dynamic_image_path(
34
36
  object,
35
37
  size: "1200x1200",
@@ -38,7 +40,7 @@ module Admin
38
40
  )
39
41
  end
40
42
 
41
- def uncropped_url
43
+ attribute :uncropped_url do
42
44
  uncropped_dynamic_image_path(
43
45
  object,
44
46
  size: "2000x2000",
@@ -49,8 +51,8 @@ module Admin
49
51
  private
50
52
 
51
53
  def localized_attribute(attr)
52
- object.locales.each_with_object({}) do |locale, hash|
53
- hash[locale] = object.localize(locale).send(attr)
54
+ object.locales.index_with do |locale|
55
+ object.localize(locale).send(attr)
54
56
  end
55
57
  end
56
58
  end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Admin
4
+ class PageFileResource
5
+ include Alba::Resource
6
+
7
+ attributes :id, :page_id, :attachment_id, :position
8
+ one :attachment, resource: Admin::AttachmentResource
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Admin
4
+ class PageImageResource
5
+ include Alba::Resource
6
+
7
+ attributes :id, :page_id, :image_id, :position, :primary
8
+ one :image, resource: Admin::ImageResource
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Export
4
+ class AttachmentResource
5
+ include Alba::Resource
6
+
7
+ attributes :id, :filename, :content_type, :content_length, :content_hash,
8
+ :created_at, :updated_at
9
+ end
10
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Export
4
+ class PageImageResource
5
+ include Alba::Resource
6
+
7
+ attributes :primary
8
+
9
+ attribute :id do
10
+ object.image.id
11
+ end
12
+
13
+ attribute :name do
14
+ object.image.name
15
+ end
16
+
17
+ attribute :alternative do
18
+ object.image.alternative
19
+ end
20
+
21
+ attribute :caption do
22
+ object.image.caption
23
+ end
24
+
25
+ attribute :content_hash do
26
+ object.image.content_hash
27
+ end
28
+
29
+ attribute :content_type do
30
+ object.image.content_type
31
+ end
32
+
33
+ attribute :filename do
34
+ object.image.filename
35
+ end
36
+
37
+ attribute :size do
38
+ object.image.crop_size
39
+ end
40
+
41
+ attribute :created_at do
42
+ object.image.created_at
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Export
4
+ class PageResource
5
+ include Alba::Resource
6
+
7
+ attributes :id, :locale
8
+ attributes(*PagesCore::Templates::TemplateConfiguration.all_blocks)
9
+ attributes :created_at, :published_at, :pinned, :template, :redirect_to,
10
+ :starts_at, :ends_at, :all_day
11
+
12
+ has_many :attachments, resource: Export::AttachmentResource
13
+
14
+ attribute :author_name do
15
+ object&.author&.name
16
+ end
17
+
18
+ attribute :path do
19
+ object.full_path || object.to_param
20
+ end
21
+
22
+ attribute :image do
23
+ image_resource(object.page_images.where(primary: true).try(:first))
24
+ end
25
+
26
+ attribute :images do
27
+ object.page_images.map { |image| image_resource(image) }
28
+ end
29
+
30
+ attribute :status do
31
+ object.status_label
32
+ end
33
+
34
+ private
35
+
36
+ def image_resource(image)
37
+ return nil unless image
38
+
39
+ Export::PageImageResource.new(image)
40
+ end
41
+ end
42
+ end
@@ -1,35 +1,29 @@
1
- class PageImageSerializer < ActiveModel::Serializer
1
+ # frozen_string_literal: true
2
+
3
+ class PageImageResource
4
+ include Alba::Resource
2
5
  include Rails.application.routes.url_helpers
3
6
  include DynamicImage::Helper
4
7
 
5
- attributes :id, :image_id, :primary, :filename
6
- attributes :alternative, :caption, :created_at, :url
7
-
8
- def name
9
- object.image.name
10
- end
8
+ attributes :id, :image_id, :primary
11
9
 
12
- def alternative
10
+ attribute :alternative do
13
11
  object.image.alternative
14
12
  end
15
13
 
16
- def caption
14
+ attribute :caption do
17
15
  object.image.caption
18
16
  end
19
17
 
20
- def filename
18
+ attribute :filename do
21
19
  object.image.filename
22
20
  end
23
21
 
24
- def size
25
- object.image.crop_size
26
- end
27
-
28
- def created_at
22
+ attribute :created_at do
29
23
  object.image.created_at
30
24
  end
31
25
 
32
- def url
26
+ attribute :url do
33
27
  dynamic_image_path(
34
28
  object.image,
35
29
  size: "2000x2000",
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PageResource
4
+ include Alba::Resource
5
+
6
+ attributes :id, :parent_page_id, :locale
7
+ attributes(*PagesCore::Templates::TemplateConfiguration.all_blocks)
8
+ attributes :published_at, :pinned
9
+
10
+ attribute :param do
11
+ object.to_param
12
+ end
13
+
14
+ attribute :image do
15
+ image_resource(object.page_images.where(primary: true).try(:first))
16
+ end
17
+
18
+ attribute :images do
19
+ object.page_images.map { |image| image_resource(image) }
20
+ end
21
+
22
+ attribute :pages do
23
+ object.pages.map { |p| PageResource.new(p) }
24
+ end
25
+
26
+ private
27
+
28
+ def image_resource(image)
29
+ return nil unless image
30
+
31
+ PageImageResource.new(image)
32
+ end
33
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class CreateUserService
3
5
  attr_reader :attributes, :invite
@@ -8,8 +10,8 @@ module PagesCore
8
10
  end
9
11
 
10
12
  class << self
11
- def call(*attrs)
12
- new(*attrs).call
13
+ def call(attrs, invite: nil)
14
+ new(attrs, invite: invite).call
13
15
  end
14
16
  end
15
17
 
@@ -28,6 +30,7 @@ module PagesCore
28
30
 
29
31
  def invite_attributes
30
32
  return {} unless invite
33
+
31
34
  { role_names: invite.role_names,
32
35
  creator: invite.user,
33
36
  activated: true }
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class DestroyInviteService
5
+ attr_reader :invite
6
+
7
+ def initialize(invite:)
8
+ @invite = invite
9
+ end
10
+
11
+ class << self
12
+ def call(invite:)
13
+ new(invite: invite).call
14
+ end
15
+ end
16
+
17
+ def call
18
+ Invite.transaction do
19
+ invite.destroy
20
+ PagesCore::PubSub.publish(:destroy_invite, invite: invite)
21
+ invite
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class InviteService
3
5
  include Rails.application.routes.url_helpers
@@ -12,8 +14,8 @@ module PagesCore
12
14
  end
13
15
 
14
16
  class << self
15
- def call(*attrs)
16
- new(*attrs).call
17
+ def call(attrs, user:, host:, protocol: "http")
18
+ new(attrs, user: user, host: host, protocol: protocol).call
17
19
  end
18
20
  end
19
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  json.extract!(
2
4
  @image, :id, :filename, :content_type, :content_hash,
3
5
  :content_length, :colorspace, :real_width, :real_height, :crop_width,
@@ -9,7 +9,7 @@
9
9
  all_day: @page.all_day }) %>
10
10
  <% end %>
11
11
 
12
- <% if !@page.new_record? && @page.template_config.value(:tags) %>
12
+ <% if @page.template_config.value(:tags) %>
13
13
  <div class="field">
14
14
  <label>
15
15
  Tags
@@ -1,8 +1,4 @@
1
1
  <%= react_component("PageFiles",
2
2
  locale: @locale,
3
3
  locales: PagesCore.config.locales,
4
- csrf_token: form_authenticity_token,
5
- records: ActiveModel::Serializer::CollectionSerializer.new(
6
- @page.files,
7
- serializer: Admin::PageFileSerializer
8
- )) %>
4
+ records: @page.files.map { |pf| Admin::PageFileResource.new(pf).to_hash }) %>
@@ -1,8 +1,4 @@
1
1
  <%= react_component("PageImages",
2
2
  locale: @locale,
3
3
  locales: PagesCore.config.locales,
4
- csrf_token: form_authenticity_token,
5
- records: ActiveModel::Serializer::CollectionSerializer.new(
6
- @page.page_images,
7
- serializer: Admin::PageImageSerializer
8
- )) %>
4
+ records: @page.page_images.map { |pi| Admin::PageImageResource.new(pi).to_hash }) %>
@@ -27,18 +27,7 @@
27
27
  Will fall back to the primary image if absent.
28
28
  Recommended size is at least 1200x630.
29
29
  </p>
30
- <% if @page.meta_image %>
31
- <p>
32
- <%= dynamic_image_tag @page.meta_image, size: "250x" %>
33
- <br>
34
- <%= link_to("Delete image",
35
- delete_meta_image_admin_page_path(@locale, @page),
36
- method: "delete",
37
- class: "delete",
38
- data: { confirm: "Are you sure?" }) %>
39
- </p>
40
- <% end %>
41
- <%= f.file_field :meta_image %>
30
+ <%= f.image_uploader :meta_image %>
42
31
  </div>
43
32
 
44
33
  <% @page.template_config.metadata_blocks do |block_name, block_options| %>