pages_core 3.5.1 → 3.6.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 (312) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +7 -13
  3. data/app/assets/javascripts/pages/{admin.es6.jsx → admin.jsx} +2 -4
  4. data/app/assets/javascripts/pages/admin/components.jsx +2 -0
  5. data/app/assets/javascripts/pages/admin/components/attachment.jsx +130 -0
  6. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +131 -0
  7. data/app/assets/javascripts/pages/admin/components/attachments.jsx +211 -0
  8. data/app/assets/javascripts/pages/admin/components/date_range_select.jsx +174 -0
  9. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +174 -0
  10. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +57 -0
  11. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +44 -0
  12. data/app/assets/javascripts/pages/admin/components/focal_point.jsx +82 -0
  13. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +124 -0
  14. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +496 -0
  15. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +301 -0
  16. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +171 -0
  17. data/app/assets/javascripts/pages/admin/components/modal.jsx +48 -0
  18. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +20 -0
  19. data/app/assets/javascripts/pages/admin/components/page_dates.jsx +58 -0
  20. data/app/assets/javascripts/pages/admin/components/page_files.jsx +14 -0
  21. data/app/assets/javascripts/pages/admin/components/page_images.jsx +16 -0
  22. data/app/assets/javascripts/pages/admin/components/{page_tree.es6.jsx → page_tree.jsx} +7 -37
  23. data/app/assets/javascripts/pages/admin/components/{page_tree_node.es6.jsx → page_tree_node.jsx} +32 -10
  24. data/app/assets/javascripts/pages/admin/components/page_tree_store.jsx +203 -0
  25. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +63 -0
  26. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +58 -0
  27. data/app/assets/javascripts/pages/admin/components/toast.jsx +37 -0
  28. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +52 -0
  29. data/app/assets/javascripts/pages/admin/features/{content_tabs.es6.jsx → content_tabs.jsx} +11 -2
  30. data/app/assets/javascripts/pages/admin/features/{edit_page.es6.jsx → edit_page.jsx} +7 -51
  31. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +14 -0
  32. data/app/assets/javascripts/pages/admin/features/{tag_editor.es6.jsx → tag_editor.jsx} +0 -0
  33. data/app/assets/javascripts/pages/admin/lib/{tree.es6.jsx → tree.jsx} +0 -0
  34. data/app/assets/javascripts/pages/{login_form.es6.jsx → login_form.jsx} +0 -0
  35. data/app/assets/stylesheets/pages/admin.scss +9 -13
  36. data/app/assets/stylesheets/pages/admin/components/archive.scss +6 -0
  37. data/app/assets/stylesheets/pages/admin/components/attachments.scss +130 -0
  38. data/app/assets/stylesheets/pages/admin/components/buttons.scss +18 -0
  39. data/app/assets/stylesheets/pages/admin/components/forms.scss +99 -21
  40. data/app/assets/stylesheets/pages/admin/components/header.scss +16 -28
  41. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +195 -0
  42. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +181 -0
  43. data/app/assets/stylesheets/pages/admin/components/image_uploader.scss +53 -0
  44. data/app/assets/stylesheets/pages/admin/components/links.scss +1 -1
  45. data/app/assets/stylesheets/pages/admin/components/list_table.scss +8 -5
  46. data/app/assets/stylesheets/pages/admin/components/login.scss +2 -8
  47. data/app/assets/stylesheets/pages/admin/components/modal.scss +91 -0
  48. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +12 -6
  49. data/app/assets/stylesheets/pages/admin/components/pagination.scss +34 -16
  50. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +9 -6
  51. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +20 -15
  52. data/app/assets/stylesheets/pages/admin/components/textarea.scss +1 -71
  53. data/app/assets/stylesheets/pages/admin/components/toast.scss +51 -0
  54. data/app/assets/stylesheets/pages/admin/components/toolbar.scss +108 -0
  55. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +9 -21
  56. data/app/assets/stylesheets/pages/admin/controllers/users.scss +2 -2
  57. data/app/assets/stylesheets/pages/admin/vars.scss +26 -4
  58. data/app/controller_dummies/admin/admin_controller.rb +0 -2
  59. data/app/controller_dummies/application_controller.rb +2 -4
  60. data/app/controller_dummies/attachments_controller.rb +2 -0
  61. data/app/controller_dummies/frontend_controller.rb +0 -2
  62. data/app/controller_dummies/images_controller.rb +0 -2
  63. data/app/controller_dummies/page_files_controller.rb +0 -2
  64. data/app/controller_dummies/pages_controller.rb +0 -2
  65. data/app/controller_dummies/sitemaps_controller.rb +0 -2
  66. data/app/controllers/admin/attachments_controller.rb +48 -0
  67. data/app/controllers/admin/categories_controller.rb +2 -5
  68. data/app/controllers/admin/images_controller.rb +25 -19
  69. data/app/controllers/admin/invites_controller.rb +16 -26
  70. data/app/controllers/admin/pages_controller.rb +50 -32
  71. data/app/controllers/admin/password_resets_controller.rb +11 -18
  72. data/app/controllers/admin/users_controller.rb +16 -22
  73. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +21 -14
  74. data/app/controllers/concerns/pages_core/authentication.rb +0 -2
  75. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -2
  76. data/app/controllers/concerns/pages_core/error_renderer.rb +33 -0
  77. data/app/controllers/concerns/pages_core/policies_helper.rb +9 -13
  78. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -5
  79. data/app/controllers/concerns/pages_core/process_titler.rb +1 -3
  80. data/app/controllers/concerns/pages_core/rss_controller.rb +0 -2
  81. data/app/controllers/errors_controller.rb +52 -26
  82. data/app/controllers/pages_core/admin_controller.rb +22 -13
  83. data/app/controllers/pages_core/attachments_controller.rb +36 -0
  84. data/app/controllers/pages_core/{application_controller.rb → base_controller.rb} +16 -5
  85. data/app/controllers/pages_core/frontend/page_files_controller.rb +5 -24
  86. data/app/controllers/pages_core/frontend/pages_controller.rb +4 -8
  87. data/app/controllers/pages_core/frontend_controller.rb +0 -2
  88. data/app/controllers/pages_core/images_controller.rb +0 -2
  89. data/app/controllers/pages_core/sitemaps_controller.rb +3 -5
  90. data/app/controllers/sessions_controller.rb +3 -15
  91. data/app/formatters/pages_core/html_formatter.rb +60 -16
  92. data/app/formatters/pages_core/link_renderer.rb +15 -0
  93. data/app/helpers/admin/admin_helper.rb +0 -2
  94. data/app/helpers/admin/menu_helper.rb +2 -4
  95. data/app/helpers/admin/pages_helper.rb +47 -9
  96. data/app/helpers/application_helper.rb +0 -2
  97. data/app/helpers/frontend_helper.rb +0 -2
  98. data/app/helpers/pages_core/admin/admin_helper.rb +75 -20
  99. data/app/helpers/pages_core/admin/form_builder.rb +36 -0
  100. data/app/helpers/pages_core/admin/labelled_field_helper.rb +6 -8
  101. data/app/helpers/pages_core/admin/tag_editor_helper.rb +0 -2
  102. data/app/helpers/pages_core/application_helper.rb +1 -2
  103. data/app/helpers/pages_core/attachments_helper.rb +36 -0
  104. data/app/helpers/pages_core/form_builder.rb +7 -11
  105. data/app/helpers/pages_core/frontend_helper.rb +0 -6
  106. data/app/helpers/pages_core/head_tags_helper.rb +8 -4
  107. data/app/helpers/pages_core/images_helper.rb +0 -2
  108. data/app/helpers/pages_core/meta_tags_helper.rb +3 -5
  109. data/app/helpers/pages_core/open_graph_tags_helper.rb +1 -3
  110. data/app/helpers/pages_core/page_path_helper.rb +14 -9
  111. data/app/jobs/pages_core/autopublish_job.rb +0 -2
  112. data/app/jobs/pages_core/sweep_cache_job.rb +0 -2
  113. data/app/mailers/admin_mailer.rb +3 -16
  114. data/app/models/attachment.rb +76 -0
  115. data/app/models/autopublisher.rb +3 -3
  116. data/app/models/category.rb +0 -3
  117. data/app/models/concerns/pages_core/has_roles.rb +1 -2
  118. data/app/models/concerns/pages_core/humanizable_param.rb +4 -4
  119. data/app/models/concerns/pages_core/page_model/attachments.rb +39 -0
  120. data/app/models/concerns/pages_core/page_model/autopublishable.rb +0 -2
  121. data/app/models/concerns/pages_core/page_model/dated_page.rb +59 -0
  122. data/app/models/concerns/pages_core/page_model/images.rb +12 -15
  123. data/app/models/concerns/pages_core/page_model/localizable.rb +10 -3
  124. data/app/models/concerns/pages_core/page_model/pathable.rb +8 -10
  125. data/app/models/concerns/pages_core/page_model/redirectable.rb +0 -2
  126. data/app/models/concerns/pages_core/page_model/sortable.rb +1 -3
  127. data/app/models/concerns/pages_core/page_model/status.rb +1 -3
  128. data/app/models/concerns/pages_core/page_model/templateable.rb +2 -4
  129. data/app/models/concerns/pages_core/page_model/tree.rb +24 -5
  130. data/app/models/concerns/pages_core/sweepable.rb +0 -2
  131. data/app/models/concerns/pages_core/taggable.rb +4 -3
  132. data/app/models/image.rb +1 -0
  133. data/app/models/invite.rb +0 -10
  134. data/app/models/page.rb +17 -21
  135. data/app/models/page_builder.rb +0 -2
  136. data/app/models/page_category.rb +0 -2
  137. data/app/models/page_exporter.rb +87 -0
  138. data/app/models/page_file.rb +24 -48
  139. data/app/models/page_image.rb +3 -37
  140. data/app/models/page_path.rb +0 -2
  141. data/app/models/password_reset_token.rb +0 -4
  142. data/app/models/role.rb +15 -2
  143. data/app/models/tag.rb +15 -6
  144. data/app/models/tagging.rb +1 -3
  145. data/app/models/user.rb +29 -25
  146. data/app/policies/page_file_policy.rb +13 -17
  147. data/app/policies/page_image_policy.rb +13 -17
  148. data/app/policies/page_policy.rb +26 -26
  149. data/app/policies/policy.rb +2 -8
  150. data/app/policies/user_policy.rb +32 -32
  151. data/app/serializers/admin/attachment_serializer.rb +29 -0
  152. data/app/serializers/admin/image_serializer.rb +53 -6
  153. data/app/serializers/admin/page_file_serializer.rb +6 -0
  154. data/app/serializers/admin/page_image_serializer.rb +1 -1
  155. data/app/serializers/page_export_serializer.rb +30 -0
  156. data/app/serializers/page_file_export_serializer.rb +4 -0
  157. data/app/serializers/page_image_export_serializer.rb +40 -0
  158. data/app/serializers/page_image_serializer.rb +2 -0
  159. data/app/services/pages_core/create_user_service.rb +36 -0
  160. data/app/services/pages_core/invite_service.rb +41 -0
  161. data/app/views/admin/images/show.json.jbuilder +6 -0
  162. data/app/views/admin/pages/_edit_content.html.erb +7 -0
  163. data/app/views/admin/pages/_edit_files.html.erb +8 -0
  164. data/app/views/admin/pages/_edit_images.html.erb +8 -95
  165. data/app/views/admin/pages/_edit_options.html.erb +7 -15
  166. data/app/views/admin/pages/_list_item.html.erb +50 -0
  167. data/app/views/admin/pages/deleted.html.erb +42 -0
  168. data/app/views/admin/pages/edit.html.erb +9 -94
  169. data/app/views/admin/pages/index.html.erb +9 -12
  170. data/app/views/admin/pages/new.html.erb +2 -1
  171. data/app/views/admin/pages/news.html.erb +59 -45
  172. data/app/views/admin/password_resets/show.html.erb +6 -9
  173. data/app/views/admin/users/_access_control.html.erb +4 -1
  174. data/app/views/admin/users/_list.html.erb +12 -7
  175. data/app/views/admin/users/edit.html.erb +5 -11
  176. data/app/views/admin/users/login.html.erb +58 -15
  177. data/app/views/admin/users/show.html.erb +1 -1
  178. data/app/views/admin_mailer/invite.text.erb +1 -1
  179. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  180. data/app/views/errors/401.html.erb +6 -0
  181. data/app/views/errors/403.html.erb +1 -1
  182. data/app/views/errors/500.html.erb +11 -6
  183. data/app/views/errors/500_critical.html.erb +1 -1
  184. data/app/views/feeds/pages.rss.builder +1 -3
  185. data/app/views/layouts/admin.html.erb +83 -83
  186. data/app/views/layouts/admin/_analytics.html.erb +1 -3
  187. data/app/views/layouts/admin/_header.html.erb +2 -2
  188. data/app/views/layouts/errors.html.erb +3 -7
  189. data/config/locales/en.yml +12 -0
  190. data/config/routes.rb +38 -55
  191. data/db/migrate/20111219033112_create_pages_tables.rb +6 -8
  192. data/db/migrate/20120627033112_rename_textbits.rb +1 -3
  193. data/db/migrate/20121010055412_drop_removed_tables.rb +1 -3
  194. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +1 -3
  195. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +1 -3
  196. data/db/migrate/20130303160632_remove_imagesets.rb +1 -3
  197. data/db/migrate/20130303161732_remove_sms_subscribers.rb +1 -3
  198. data/db/migrate/20130823133208_update_page_redirect_to.rb +1 -3
  199. data/db/migrate/20140203183900_create_roles.rb +1 -1
  200. data/db/migrate/20140414150500_change_locale_names.rb +1 -3
  201. data/db/migrate/20140604142100_remove_openid_url.rb +1 -1
  202. data/db/migrate/20140920231700_convert_images_to_dis.rb +1 -1
  203. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +1 -1
  204. data/db/migrate/20141004003100_create_password_reset_tokens.rb +1 -1
  205. data/db/migrate/20141006181300_remove_user_cruft.rb +1 -1
  206. data/db/migrate/20141007173000_create_invites.rb +1 -1
  207. data/db/migrate/20150204130800_update_delayed_job_table.rb +1 -1
  208. data/db/migrate/20150401131300_localize_images.rb +1 -1
  209. data/db/migrate/20150520174300_add_meta_image_to_page.rb +1 -1
  210. data/db/migrate/20150904164200_add_pinned_to_tags.rb +1 -1
  211. data/db/migrate/20151002174800_create_page_paths.rb +2 -2
  212. data/db/migrate/20151021103400_drop_binaries_table.rb +1 -1
  213. data/db/migrate/20151204151000_remove_page_content_order.rb +1 -1
  214. data/db/migrate/20160330220900_rename_pages_categories.rb +1 -1
  215. data/db/migrate/20160405202700_change_localization_limit.rb +1 -1
  216. data/db/migrate/20170716040500_remove_page_comments.rb +23 -0
  217. data/db/migrate/20170716213400_remove_sessions.rb +15 -0
  218. data/db/migrate/20180207134000_add_dates_to_pages.rb +11 -0
  219. data/db/migrate/20190211154800_create_attachments.rb +73 -0
  220. data/lib/pages_core.rb +6 -9
  221. data/lib/pages_core/admin_menu_item.rb +0 -2
  222. data/lib/pages_core/archive_finder.rb +21 -15
  223. data/lib/pages_core/attachment_embedder.rb +38 -0
  224. data/lib/pages_core/cache_sweeper.rb +14 -23
  225. data/lib/pages_core/configuration.rb +0 -2
  226. data/lib/pages_core/configuration/base.rb +0 -2
  227. data/lib/pages_core/configuration/pages.rb +2 -8
  228. data/lib/pages_core/digest_verifier.rb +70 -0
  229. data/lib/pages_core/engine.rb +6 -13
  230. data/lib/pages_core/extensions.rb +0 -3
  231. data/lib/pages_core/extensions/string_extensions.rb +0 -2
  232. data/lib/pages_core/page_path_constraint.rb +0 -2
  233. data/lib/pages_core/pages_plugin.rb +0 -2
  234. data/lib/pages_core/plugin.rb +0 -2
  235. data/lib/pages_core/pub_sub.rb +36 -0
  236. data/lib/pages_core/templates.rb +0 -2
  237. data/lib/pages_core/templates/block_configuration.rb +1 -3
  238. data/lib/pages_core/templates/configuration.rb +88 -10
  239. data/lib/pages_core/templates/configuration_handler.rb +6 -4
  240. data/lib/pages_core/templates/configuration_proxy.rb +4 -2
  241. data/lib/pages_core/templates/controller_actions.rb +0 -2
  242. data/lib/pages_core/templates/template_configuration.rb +41 -37
  243. data/lib/pages_core/version.rb +1 -3
  244. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +10 -17
  245. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +1 -2
  246. data/lib/rails/generators/pages_core/frontend/templates/{application.css.scss.erb → application.scss.erb} +0 -0
  247. data/lib/rails/generators/pages_core/frontend/templates/{base.css.scss.erb → base.scss.erb} +0 -0
  248. data/lib/rails/generators/pages_core/frontend/templates/{breakpoints.css.scss.erb → breakpoints.scss.erb} +0 -0
  249. data/lib/rails/generators/pages_core/frontend/templates/clearfix.scss.erb +7 -0
  250. data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +0 -3
  251. data/lib/rails/generators/pages_core/install/install_generator.rb +4 -15
  252. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +1 -3
  253. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +0 -2
  254. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -5
  255. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +0 -2
  256. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +0 -2
  257. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +0 -2
  258. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +7 -15
  259. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +0 -2
  260. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -19
  261. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +2 -4
  262. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +1 -1
  263. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +4 -13
  264. data/lib/tasks/pages.rake +0 -62
  265. data/lib/tasks/pages/cache.rake +6 -2
  266. data/lib/tasks/pages/export.rake +9 -0
  267. data/lib/tasks/pages/page_paths.rake +0 -2
  268. data/lib/tasks/pages/update.rake +0 -2
  269. data/template.rb +3 -3
  270. data/vendor/assets/javascripts/ReactCrop.min.js +1 -0
  271. data/vendor/assets/javascripts/reflux.min.js +1 -1
  272. data/vendor/assets/stylesheets/ReactCrop.css +167 -0
  273. metadata +200 -175
  274. data/app/assets/javascripts/pages/admin/components.es6.jsx +0 -1
  275. data/app/assets/javascripts/pages/admin/components/page_tree_actions.es6.jsx +0 -8
  276. data/app/assets/javascripts/pages/admin/components/page_tree_store.es6.jsx +0 -161
  277. data/app/assets/javascripts/pages/admin/features/editable_image.es6.jsx +0 -145
  278. data/app/assets/javascripts/pages/admin/features/modal.es6.jsx +0 -90
  279. data/app/assets/javascripts/pages/admin/features/page_images.es6.jsx +0 -338
  280. data/app/assets/javascripts/pages/admin/features/rich_text.es6.jsx +0 -124
  281. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.es6.jsx +0 -21
  282. data/app/assets/javascripts/pages/admin/lib/center_on_screen.es6.jsx +0 -22
  283. data/app/assets/stylesheets/pages/admin/components/editable_image.scss +0 -18
  284. data/app/assets/stylesheets/pages/admin/components/images.scss +0 -155
  285. data/app/assets/stylesheets/pages/admin/print.scss +0 -17
  286. data/app/controllers/admin/page_comments_controller.rb +0 -61
  287. data/app/controllers/admin/page_files_controller.rb +0 -79
  288. data/app/controllers/admin/page_images_controller.rb +0 -111
  289. data/app/controllers/concerns/pages_core/add_comments_controller.rb +0 -67
  290. data/app/controllers/concerns/pages_core/exception_handler.rb +0 -137
  291. data/app/controllers/concerns/pages_core/search_pages_controller.rb +0 -40
  292. data/app/helpers/pages_core/login_helper.rb +0 -14
  293. data/app/indices/page_file_index.rb +0 -9
  294. data/app/indices/page_index.rb +0 -29
  295. data/app/indices/user_index.rb +0 -11
  296. data/app/models/concerns/pages_core/page_model/commentable.rb +0 -29
  297. data/app/models/concerns/pages_core/page_model/searchable.rb +0 -41
  298. data/app/models/page_comment.rb +0 -18
  299. data/app/serializers/page_tree_serializer.rb +0 -15
  300. data/app/views/admin/pages/_edit_comments.html.erb +0 -37
  301. data/app/views/admin/pages/_pagelisting.html.erb +0 -63
  302. data/app/views/admin/users/_login_form.html.erb +0 -47
  303. data/app/views/admin_mailer/comment_notification.text.erb +0 -7
  304. data/lib/pages_core/extensions/hash_extensions.rb +0 -23
  305. data/lib/pages_core/file_embedder.rb +0 -40
  306. data/lib/pages_core/paginates.rb +0 -102
  307. data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +0 -8
  308. data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +0 -12
  309. data/lib/tasks/db.rake +0 -96
  310. data/lib/tasks/pages/assets.rake +0 -65
  311. data/vendor/assets/javascripts/jquery.dimscreen.js +0 -77
  312. data/vendor/assets/javascripts/jquery.fieldselection.js +0 -59
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module ApplicationHelper #:nodoc:
4
2
  include PagesCore::ApplicationHelper
5
3
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module FrontendHelper #:nodoc:
4
2
  include PagesCore::FrontendHelper
5
3
  end
@@ -1,15 +1,13 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module Admin
5
3
  module AdminHelper
6
4
  include PagesCore::Admin::LabelledFieldHelper
7
5
  include PagesCore::Admin::TagEditorHelper
8
6
 
9
- attr_accessor :page_title
10
- attr_accessor :page_description
11
- attr_accessor :page_description_class
12
- attr_accessor :page_description_links
7
+ attr_writer :page_title
8
+ attr_writer :page_description
9
+ attr_writer :page_description_class
10
+ attr_writer :page_description_links
13
11
 
14
12
  def add_body_class(class_name)
15
13
  @body_classes ||= []
@@ -24,14 +22,51 @@ module PagesCore
24
22
  classes
25
23
  end
26
24
 
25
+ def page_date_range(page)
26
+ if page.all_day?
27
+ date_range(page.starts_at.to_date, page.ends_at.to_date)
28
+ else
29
+ date_range(page.starts_at, page.ends_at)
30
+ end
31
+ end
32
+
33
+ def date_range(starts_at, ends_at)
34
+ show_time = !(starts_at.is_a?(Date) && ends_at.is_a?(Date))
35
+ dates = if starts_at.year != ends_at.year
36
+ [l(starts_at, format: :pages_full), l(ends_at, format: :pages_full)]
37
+ elsif starts_at.month != ends_at.month
38
+ [l(starts_at, format: :pages_date), l(ends_at, format: :pages_full)]
39
+ elsif starts_at.day != ends_at.day && !show_time
40
+ [l(starts_at, format: :pages_day), l(ends_at, format: :pages_full)]
41
+ elsif starts_at.day != ends_at.day
42
+ [l(starts_at, format: :pages_date), l(ends_at, format: :pages_full)]
43
+ elsif !show_time
44
+ [l(starts_at, format: :pages_full)]
45
+ else
46
+ [l(starts_at, format: :pages_full), l(ends_at, format: :pages_time)]
47
+ end
48
+ safe_join(dates.map(&:strip), "–".html_safe)
49
+ end
50
+
27
51
  # Generates tags for an editable dynamic image.
28
- def editable_dynamic_image_tag(image, options = {})
29
- preview_url = uncropped_dynamic_image_url(image, size: "800x")
30
- link_to(
31
- dynamic_image_tag(image, options), admin_image_path(image),
32
- class: "editableImage",
33
- data: { "preview-url" => preview_url }
34
- )
52
+ def editable_dynamic_image_tag(image, width: 250, caption: false, locale: nil)
53
+ react_component("EditableImage",
54
+ editable_image_options(
55
+ image,
56
+ width: width,
57
+ caption: caption,
58
+ locale: locale
59
+ ).merge(width: width))
60
+ end
61
+
62
+ def image_uploader_tag(name, image, options = {})
63
+ opts = { caption: false, locale: nil }.merge(options)
64
+ react_component("ImageUploader",
65
+ editable_image_options(
66
+ image,
67
+ caption: opts[:caption],
68
+ locale: opts[:locale]
69
+ ).merge(attr: name, alternative: opts[:alternative]))
35
70
  end
36
71
 
37
72
  def content_tab(name, options = {}, &block)
@@ -39,7 +74,7 @@ module PagesCore
39
74
  return unless block_given?
40
75
  tab = {
41
76
  name: name.to_s.humanize,
42
- key: name.to_s.underscore.gsub(/[\s]+/, "_"),
77
+ key: options[:key] || name.to_s.underscore.gsub(/[\s]+/, "_"),
43
78
  options: options,
44
79
  content: capture(&block)
45
80
  }
@@ -47,8 +82,15 @@ module PagesCore
47
82
  content_tab_tag(tab[:key], tab[:content])
48
83
  end
49
84
 
85
+ def rich_text_area_tag(name, content = nil, options = {})
86
+ react_component("RichTextArea",
87
+ options.merge(id: sanitize_to_id(name),
88
+ name: name,
89
+ value: content))
90
+ end
91
+
50
92
  def link_separator
51
- ' <span class="separator">|</span> '.html_safe
93
+ safe_join [" ", content_tag(:span, "|", class: "separator"), " "]
52
94
  end
53
95
 
54
96
  def deprecate_page_description_args(string = nil, class_name = nil)
@@ -57,11 +99,10 @@ module PagesCore
57
99
  "page_description is deprecated, " \
58
100
  "use page_description_class=")
59
101
  end
60
- if string
61
- ActiveSupport::Deprecation.warn("Setting description with " \
62
- "page_description is deprecated, " \
63
- "use page_description=")
64
- end
102
+ return unless string
103
+ ActiveSupport::Deprecation.warn("Setting description with " \
104
+ "page_description is deprecated, " \
105
+ "use page_description=")
65
106
  end
66
107
 
67
108
  def page_description(string = nil, class_name = nil)
@@ -105,6 +146,20 @@ module PagesCore
105
146
  class: "content_tab",
106
147
  id: "content-tab-#{key}")
107
148
  end
149
+
150
+ def editable_image_options(image, width: 250, caption: false, locale: nil)
151
+ image_opts = if image
152
+ { src: dynamic_image_path(image, size: "#{width * 2}x"),
153
+ image: ::Admin::ImageSerializer.new(image) }
154
+ else
155
+ {}
156
+ end
157
+ image_opts.merge(width: width,
158
+ caption: caption,
159
+ locale: locale || I18n.default_locale,
160
+ locales: PagesCore.config.locales,
161
+ csrf_token: form_authenticity_token)
162
+ end
108
163
  end
109
164
  end
110
165
  end
@@ -0,0 +1,36 @@
1
+ module PagesCore
2
+ module Admin
3
+ class FormBuilder < PagesCore::FormBuilder
4
+ include DynamicImage::Helper
5
+
6
+ def rich_text_area(attr, options = {})
7
+ @template.rich_text_area_tag(
8
+ "#{object_name}[#{attr}]",
9
+ object.send(attr),
10
+ options
11
+ )
12
+ end
13
+
14
+ def image_uploader(attr, options = {})
15
+ @template.image_uploader_tag(
16
+ "#{object_name}[#{foreign_key(attr)}]",
17
+ object.send(attr),
18
+ options
19
+ )
20
+ end
21
+
22
+ def labelled_image_uploader(attribute, label_text = nil, options = {})
23
+ labelled_field(attribute, label_text, options) do |opts|
24
+ image_uploader(attribute, opts)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def foreign_key(attr)
31
+ object.class.reflections[attr.to_s].options[:foreign_key] ||
32
+ "#{attr}_id".to_sym
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module Admin
5
3
  module LabelledFieldHelper
@@ -20,12 +18,12 @@ module PagesCore
20
18
  #
21
19
  def labelled_field(field, label, options = {})
22
20
  content_tag(:div, class: labelled_field_class(options)) do
23
- (
24
- labelled_field_label(label, options) +
25
- labelled_field_description(options[:description]) +
26
- field +
27
- (options[:check_box_description] || "")
28
- ).html_safe
21
+ safe_join(
22
+ [labelled_field_label(label, options),
23
+ labelled_field_description(options[:description]),
24
+ field,
25
+ (options[:check_box_description] || "")]
26
+ )
29
27
  end
30
28
  end
31
29
 
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module Admin
5
3
  module TagEditorHelper
@@ -1,9 +1,8 @@
1
- # encoding: utf-8
2
-
3
1
  # Methods added to this helper will be available to all templates
4
2
  # in the application.
5
3
  module PagesCore
6
4
  module ApplicationHelper
5
+ include PagesCore::AttachmentsHelper
7
6
  include PagesCore::HeadTagsHelper
8
7
  include PagesCore::ImagesHelper
9
8
  include PagesCore::MetaTagsHelper
@@ -0,0 +1,36 @@
1
+ module PagesCore::AttachmentsHelper
2
+ def attachment_path(*args)
3
+ super(*attachment_params(args))
4
+ end
5
+
6
+ def download_attachment_path(*args)
7
+ super(*attachment_params(args))
8
+ end
9
+
10
+ def page_file_path(*args)
11
+ ActiveSupport::Deprecation.warn(
12
+ "#page_file_path is deprecated, use #attachment_path"
13
+ )
14
+ page_file = args.detect { |a| a.is_a?(PageFile) }
15
+ return attachment_path(page_file.attachment) if page_file
16
+
17
+ super(*args)
18
+ end
19
+
20
+ private
21
+
22
+ def attachment_params(args)
23
+ attachment = args.detect { |a| a.is_a?(Attachment) }
24
+ args = [attachment.digest] + args if args.first == attachment
25
+ if args.last.is_a?(Hash)
26
+ args.last[:format] = attachment.filename_extension
27
+ else
28
+ args.push(format: attachment.filename_extension)
29
+ end
30
+ args
31
+ end
32
+
33
+ def attachment_digest(attachment)
34
+ Attachment.verifier.generate(attachment.id.to_s)
35
+ end
36
+ end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  class FormBuilder < ActionView::Helpers::FormBuilder
5
3
  include ActionView::Helpers::TagHelper
@@ -11,7 +9,8 @@ module PagesCore
11
9
  end
12
10
 
13
11
  def image_file_preview(attribute)
14
- return "" unless object.send(attribute)
12
+ return "" unless object.send(attribute) &&
13
+ !object.send(attribute).new_record?
15
14
  content_tag(
16
15
  :p, @template.dynamic_image_tag(object.send(attribute), size: "120x100")
17
16
  )
@@ -23,10 +22,8 @@ module PagesCore
23
22
 
24
23
  def label_and_errors(attribute, label_text)
25
24
  return label_text unless object.errors[attribute].any?
26
- safe_join(
27
- [label_text,
28
- content_tag(:span, object.errors[attribute].first, class: "error")],
29
- " ")
25
+ error = content_tag(:span, object.errors[attribute].first, class: "error")
26
+ safe_join([label_text, error], " ")
30
27
  end
31
28
 
32
29
  def label_for(attribute, label_text = nil)
@@ -36,11 +33,10 @@ module PagesCore
36
33
  end
37
34
 
38
35
  def labelled_check_box(
39
- attribute, label_text = nil, options = {},
40
- checked_value = "1", unchecked_value = "0"
36
+ attr, label = nil, options = {}, checked = "1", unchecked = "0"
41
37
  )
42
- labelled_field(attribute, label_text, options) do |opts|
43
- check_box(attribute, opts, checked_value, unchecked_value)
38
+ labelled_field(attr, label, options) do |opts|
39
+ check_box(attr, opts, checked, unchecked)
44
40
  end
45
41
  end
46
42
 
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module FrontendHelper
5
3
  def root_pages
@@ -13,9 +11,5 @@ module PagesCore
13
11
  attr_reader :search_query
14
12
 
15
13
  attr_reader :search_category_id
16
-
17
- def comment_honeypot_field
18
- text_field_tag "email", "", class: "comment_email"
19
- end
20
14
  end
21
15
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module HeadTagsHelper
5
3
  # Sets a document title.
@@ -71,8 +69,14 @@ module PagesCore
71
69
  # The block output must be captured first
72
70
  block_output = block_given? ? capture(&block) : nil
73
71
 
74
- "<!doctype html>\n<html lang=\"#{I18n.locale}\">".html_safe +
75
- content_tag(:head) { safe_join(head_tag_contents(block_output), "\n") }
72
+ safe_join(
73
+ [
74
+ "<!doctype html>\n<html lang=\"#{I18n.locale}\">".html_safe,
75
+ content_tag(:head) do
76
+ safe_join(head_tag_contents(block_output), "\n")
77
+ end
78
+ ]
79
+ )
76
80
  end
77
81
 
78
82
  # Generates a link to an RSS feed.
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module ImagesHelper
5
3
  include DynamicImage::Helper
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module MetaTagsHelper
5
3
  # Sets a default image to use for meta tags. Supports
@@ -38,7 +36,7 @@ module PagesCore
38
36
 
39
37
  # Returns true if meta description has been set.
40
38
  def meta_description?
41
- !meta_description.blank?
39
+ meta_description.present?
42
40
  end
43
41
 
44
42
  # Sets an image to use for meta tags. Supports
@@ -62,7 +60,7 @@ module PagesCore
62
60
 
63
61
  # Returns true if meta image has been set.
64
62
  def meta_image?
65
- !meta_image.blank? || default_meta_image?
63
+ meta_image.present? || default_meta_image?
66
64
  end
67
65
 
68
66
  # Sets keywords for meta tags.
@@ -81,7 +79,7 @@ module PagesCore
81
79
 
82
80
  # Returns true if meta keywords have been set.
83
81
  def meta_keywords?
84
- !meta_keywords.blank?
82
+ meta_keywords.present?
85
83
  end
86
84
 
87
85
  private
@@ -1,9 +1,7 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module OpenGraphTagsHelper
5
3
  def open_graph_properties
6
- @_open_graph_properties ||= {}
4
+ @open_graph_properties ||= {}
7
5
  end
8
6
 
9
7
  # Outputs Open Graph tags for Facebook.
@@ -1,16 +1,12 @@
1
- # encoding: utf-8
2
-
3
1
  module PagesCore
4
2
  module PagePathHelper
5
3
  def page_path(locale, page, options = {})
6
4
  page.localize(locale) do |p|
7
- if p.full_path? && PagesCore.config.localizations?
8
- "/#{locale}/" + URI.escape(p.full_path)
9
- elsif p.full_path?
10
- "/" + URI.escape(p.full_path)
11
- else
12
- super(locale, p, options)
13
- end
5
+ return super(locale, p, options) unless p.full_path?
6
+
7
+ (PagesCore.config.localizations? ? "/#{locale}/" : "/") +
8
+ escape_page_path(p.full_path) +
9
+ paginated_section(options)
14
10
  end
15
11
  end
16
12
 
@@ -29,6 +25,10 @@ module PagesCore
29
25
 
30
26
  private
31
27
 
28
+ def escape_page_path(path)
29
+ path.split("/").map { |s| CGI.escape(s) }.join("/")
30
+ end
31
+
32
32
  def page_url_locale_and_page(page_or_locale, page, opts)
33
33
  return [page_or_locale, page] if page
34
34
  ActiveSupport::Deprecation.warn(
@@ -36,5 +36,10 @@ module PagesCore
36
36
  )
37
37
  [(opts[:locale] || @locale), page_or_locale]
38
38
  end
39
+
40
+ def paginated_section(opts)
41
+ return "" unless opts[:page]
42
+ "/page/#{opts[:page]}"
43
+ end
39
44
  end
40
45
  end