pages_core 3.6.2 → 3.7.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 (232) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/Rakefile +3 -1
  4. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +1 -1
  5. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +5 -5
  6. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +10 -5
  7. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +10 -5
  8. data/app/assets/javascripts/pages/admin/components/page_tree.jsx +9 -9
  9. data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +11 -11
  10. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +5 -4
  11. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +54 -21
  12. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -3
  13. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +1 -1
  14. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +3 -3
  15. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +1 -1
  16. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +28 -28
  17. data/app/assets/javascripts/pages/admin/lib/tree.jsx +9 -9
  18. data/app/assets/javascripts/pages/login_form.jsx +8 -8
  19. data/app/assets/stylesheets/pages/admin/components/forms.scss +20 -0
  20. data/app/assets/stylesheets/pages/errors.css +2 -0
  21. data/app/controller_dummies/admin/admin_controller.rb +2 -0
  22. data/app/controller_dummies/application_controller.rb +2 -0
  23. data/app/controller_dummies/attachments_controller.rb +2 -0
  24. data/app/controller_dummies/frontend_controller.rb +2 -0
  25. data/app/controller_dummies/images_controller.rb +2 -0
  26. data/app/controller_dummies/page_files_controller.rb +2 -0
  27. data/app/controller_dummies/pages_controller.rb +2 -0
  28. data/app/controller_dummies/sitemaps_controller.rb +2 -0
  29. data/app/controllers/admin/attachments_controller.rb +4 -2
  30. data/app/controllers/admin/categories_controller.rb +2 -0
  31. data/app/controllers/admin/images_controller.rb +10 -5
  32. data/app/controllers/admin/invites_controller.rb +4 -1
  33. data/app/controllers/admin/pages_controller.rb +7 -19
  34. data/app/controllers/admin/password_resets_controller.rb +9 -5
  35. data/app/controllers/admin/users_controller.rb +10 -4
  36. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +13 -11
  37. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  38. data/app/controllers/concerns/pages_core/authentication.rb +4 -1
  39. data/app/controllers/concerns/pages_core/error_renderer.rb +3 -0
  40. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  41. data/app/controllers/concerns/pages_core/policies_helper.rb +4 -1
  42. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +3 -0
  43. data/app/controllers/concerns/pages_core/process_titler.rb +2 -0
  44. data/app/controllers/concerns/pages_core/rss_controller.rb +2 -0
  45. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  46. data/app/controllers/errors_controller.rb +5 -53
  47. data/app/controllers/pages_core/admin_controller.rb +7 -67
  48. data/app/controllers/pages_core/attachments_controller.rb +10 -6
  49. data/app/controllers/pages_core/base_controller.rb +11 -17
  50. data/app/controllers/pages_core/frontend/page_files_controller.rb +6 -2
  51. data/app/controllers/pages_core/frontend/pages_controller.rb +9 -15
  52. data/app/controllers/pages_core/frontend_controller.rb +3 -0
  53. data/app/controllers/pages_core/images_controller.rb +3 -1
  54. data/app/controllers/pages_core/sitemaps_controller.rb +11 -5
  55. data/app/controllers/sessions_controller.rb +2 -0
  56. data/app/formatters/pages_core/html_formatter.rb +13 -63
  57. data/app/formatters/pages_core/image_embedder.rb +79 -0
  58. data/app/formatters/pages_core/link_renderer.rb +2 -0
  59. data/app/helpers/admin/admin_helper.rb +2 -0
  60. data/app/helpers/admin/menu_helper.rb +6 -4
  61. data/app/helpers/admin/pages_helper.rb +4 -57
  62. data/app/helpers/application_helper.rb +2 -0
  63. data/app/helpers/frontend_helper.rb +2 -0
  64. data/app/helpers/pages_core/admin/admin_helper.rb +22 -106
  65. data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
  66. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  67. data/app/helpers/pages_core/admin/form_builder.rb +8 -0
  68. data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
  69. data/app/helpers/pages_core/admin/labelled_field_helper.rb +12 -9
  70. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  71. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  72. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
  73. data/app/helpers/pages_core/application_helper.rb +3 -0
  74. data/app/helpers/pages_core/attachments_helper.rb +31 -27
  75. data/app/helpers/pages_core/form_builder.rb +17 -13
  76. data/app/helpers/pages_core/frontend_helper.rb +3 -3
  77. data/app/helpers/pages_core/head_tags_helper.rb +7 -2
  78. data/app/helpers/pages_core/images_helper.rb +3 -0
  79. data/app/helpers/pages_core/meta_tags_helper.rb +3 -1
  80. data/app/helpers/pages_core/open_graph_tags_helper.rb +7 -5
  81. data/app/helpers/pages_core/page_path_helper.rb +24 -3
  82. data/app/jobs/pages_core/autopublish_job.rb +3 -1
  83. data/app/jobs/pages_core/sweep_cache_job.rb +4 -2
  84. data/app/mailers/admin_mailer.rb +4 -14
  85. data/app/models/attachment.rb +10 -8
  86. data/app/models/autopublisher.rb +3 -0
  87. data/app/models/category.rb +3 -1
  88. data/app/models/concerns/pages_core/has_roles.rb +2 -0
  89. data/app/models/concerns/pages_core/humanizable_param.rb +9 -6
  90. data/app/models/concerns/pages_core/page_model/attachments.rb +2 -0
  91. data/app/models/concerns/pages_core/page_model/autopublishable.rb +2 -0
  92. data/app/models/concerns/pages_core/page_model/dated_page.rb +11 -11
  93. data/app/models/concerns/pages_core/page_model/images.rb +5 -1
  94. data/app/models/concerns/pages_core/page_model/localizable.rb +2 -0
  95. data/app/models/concerns/pages_core/page_model/pathable.rb +26 -25
  96. data/app/models/concerns/pages_core/page_model/redirectable.rb +3 -1
  97. data/app/models/concerns/pages_core/page_model/sortable.rb +6 -5
  98. data/app/models/concerns/pages_core/page_model/status.rb +2 -0
  99. data/app/models/concerns/pages_core/page_model/templateable.rb +7 -2
  100. data/app/models/concerns/pages_core/page_model/tree.rb +27 -20
  101. data/app/models/concerns/pages_core/sweepable.rb +4 -2
  102. data/app/models/concerns/pages_core/taggable.rb +8 -2
  103. data/app/models/image.rb +14 -1
  104. data/app/models/invite.rb +3 -1
  105. data/app/models/invite_role.rb +5 -3
  106. data/app/models/page.rb +4 -3
  107. data/app/models/page_builder.rb +2 -0
  108. data/app/models/page_category.rb +3 -1
  109. data/app/models/page_exporter.rb +22 -9
  110. data/app/models/page_file.rb +3 -1
  111. data/app/models/page_image.rb +3 -1
  112. data/app/models/page_path.rb +13 -5
  113. data/app/models/password_reset_token.rb +3 -1
  114. data/app/models/role.rb +8 -5
  115. data/app/models/tag.rb +8 -6
  116. data/app/models/tagging.rb +4 -2
  117. data/app/models/user.rb +7 -4
  118. data/app/policies/invite_policy.rb +2 -0
  119. data/app/policies/page_file_policy.rb +2 -0
  120. data/app/policies/page_image_policy.rb +2 -0
  121. data/app/policies/page_policy.rb +2 -0
  122. data/app/policies/policy.rb +2 -0
  123. data/app/policies/user_policy.rb +2 -0
  124. data/app/serializers/admin/attachment_serializer.rb +4 -2
  125. data/app/serializers/admin/image_serializer.rb +4 -2
  126. data/app/serializers/admin/page_file_serializer.rb +2 -0
  127. data/app/serializers/admin/page_image_serializer.rb +2 -0
  128. data/app/serializers/page_export_serializer.rb +2 -0
  129. data/app/serializers/page_file_export_serializer.rb +2 -0
  130. data/app/serializers/page_image_export_serializer.rb +2 -0
  131. data/app/serializers/page_image_serializer.rb +2 -0
  132. data/app/serializers/page_serializer.rb +2 -0
  133. data/app/services/pages_core/create_user_service.rb +5 -2
  134. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  135. data/app/services/pages_core/invite_service.rb +2 -0
  136. data/app/views/admin/images/show.json.jbuilder +2 -0
  137. data/app/views/admin/pages/news.html.erb +1 -1
  138. data/app/views/errors/500.html.erb +2 -20
  139. data/app/views/errors/_generic_help.html.erb +1 -1
  140. data/app/views/feeds/pages.rss.builder +2 -0
  141. data/app/views/sitemaps/show.xml.builder +2 -0
  142. data/config/routes.rb +5 -5
  143. data/db/migrate/20111219033112_create_pages_tables.rb +192 -271
  144. data/lib/pages_core.rb +10 -0
  145. data/lib/pages_core/admin_menu_item.rb +3 -0
  146. data/lib/pages_core/archive_finder.rb +12 -16
  147. data/lib/pages_core/attachment_embedder.rb +4 -6
  148. data/lib/pages_core/cache_sweeper.rb +10 -108
  149. data/lib/pages_core/configuration.rb +2 -0
  150. data/lib/pages_core/configuration/base.rb +5 -0
  151. data/lib/pages_core/configuration/pages.rb +4 -2
  152. data/lib/pages_core/digest_verifier.rb +5 -5
  153. data/lib/pages_core/engine.rb +52 -0
  154. data/lib/pages_core/extensions.rb +2 -0
  155. data/lib/pages_core/extensions/string_extensions.rb +3 -1
  156. data/lib/pages_core/page_path_constraint.rb +2 -0
  157. data/lib/pages_core/pages_plugin.rb +3 -1
  158. data/lib/pages_core/plugin.rb +4 -52
  159. data/lib/pages_core/pub_sub.rb +2 -0
  160. data/lib/pages_core/static_cache.rb +26 -0
  161. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  162. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  163. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  164. data/lib/pages_core/templates.rb +5 -3
  165. data/lib/pages_core/templates/block_configuration.rb +3 -0
  166. data/lib/pages_core/templates/configuration.rb +5 -1
  167. data/lib/pages_core/templates/configuration_handler.rb +4 -2
  168. data/lib/pages_core/templates/configuration_proxy.rb +2 -0
  169. data/lib/pages_core/templates/controller_actions.rb +2 -0
  170. data/lib/pages_core/templates/template_configuration.rb +18 -13
  171. data/lib/pages_core/version.rb +3 -1
  172. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -0
  173. data/lib/rails/generators/pages_core/install/install_generator.rb +3 -7
  174. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  175. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -0
  176. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +2 -0
  177. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  178. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +17 -0
  179. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +2 -0
  180. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +2 -0
  181. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  182. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -0
  183. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +2 -0
  184. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +2 -6
  185. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +18 -14
  186. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  187. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  188. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  189. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  190. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -36
  191. data/lib/tasks/pages.rake +3 -2
  192. data/lib/tasks/pages/cache.rake +8 -5
  193. data/lib/tasks/pages/export.rake +3 -1
  194. data/lib/tasks/pages/page_paths.rake +2 -0
  195. data/template.rb +2 -0
  196. metadata +127 -77
  197. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -26
  198. data/app/views/admin_mailer/error_report.html.erb +0 -70
  199. data/app/views/errors/500_critical.html.erb +0 -7
  200. data/app/views/errors/report.html.erb +0 -4
  201. data/config/removed_migrations.yml +0 -60
  202. data/db/migrate/20120627033112_rename_textbits.rb +0 -17
  203. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -81
  204. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -9
  205. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -9
  206. data/db/migrate/20130303160632_remove_imagesets.rb +0 -22
  207. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -14
  208. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -10
  209. data/db/migrate/20140203183900_create_roles.rb +0 -66
  210. data/db/migrate/20140414150500_change_locale_names.rb +0 -11
  211. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  212. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -81
  213. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  214. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  215. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  216. data/db/migrate/20141007173000_create_invites.rb +0 -16
  217. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  218. data/db/migrate/20150401131300_localize_images.rb +0 -38
  219. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  220. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  221. data/db/migrate/20151002174800_create_page_paths.rb +0 -10
  222. data/db/migrate/20151021103400_drop_binaries_table.rb +0 -7
  223. data/db/migrate/20151204151000_remove_page_content_order.rb +0 -5
  224. data/db/migrate/20160330220900_rename_pages_categories.rb +0 -6
  225. data/db/migrate/20160405202700_change_localization_limit.rb +0 -9
  226. data/db/migrate/20170716040500_remove_page_comments.rb +0 -23
  227. data/db/migrate/20170716213400_remove_sessions.rb +0 -15
  228. data/db/migrate/20180207134000_add_dates_to_pages.rb +0 -11
  229. data/db/migrate/20190211154800_create_attachments.rb +0 -73
  230. data/db/migrate/20190318115000_fix_page_file_ids.rb +0 -34
  231. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -6
  232. data/lib/tasks/pages/update.rake +0 -17
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class ImageEmbedder
5
+ include ActionView::Helpers::AssetTagHelper
6
+ include PagesCore::ImagesHelper
7
+ include Rails.application.routes.url_helpers
8
+
9
+ def initialize(string)
10
+ @string = string
11
+ end
12
+
13
+ def embed
14
+ parse_images(@string)
15
+ end
16
+
17
+ private
18
+
19
+ def image_expression
20
+ /\[image:(\d+)([^\]]*)?\]/
21
+ end
22
+
23
+ def embed_image(id, size:, class_name:, link:)
24
+ image = Image.find(id).localize(I18n.locale)
25
+ class_name = ["image", image_class_name(image), class_name].compact
26
+ image_tag = dynamic_image_tag(image,
27
+ size: size, crop: false, upscale: false)
28
+ tag.figure((link ? link_to(image_tag, link) : image_tag) +
29
+ image_caption(image), class: class_name)
30
+ rescue ActiveRecord::RecordNotFound
31
+ nil
32
+ end
33
+
34
+ def embed_image_size(str)
35
+ if str =~ /size="(\d*x\d*)"/
36
+ Regexp.last_match(1)
37
+ else
38
+ "2000x2000"
39
+ end
40
+ end
41
+
42
+ def image_caption(image)
43
+ return unless image.caption?
44
+
45
+ tag.figcaption(image.caption)
46
+ end
47
+
48
+ def image_class_name(image)
49
+ if image.size.x == image.size.y
50
+ "square"
51
+ elsif image.size.x > image.size.y
52
+ "landscape"
53
+ else
54
+ "portrait"
55
+ end
56
+ end
57
+
58
+ def link_to(content, href)
59
+ tag.a(content, href: href)
60
+ end
61
+
62
+ def parse_image(str)
63
+ id = str.match(image_expression)[1]
64
+ options = str.match(image_expression)[2]
65
+ class_name = (Regexp.last_match(1) if options =~ /class="([\s\-\w]+)"/)
66
+ link = (Regexp.last_match(1) if options =~ /link="([^"]+)"/)
67
+ embed_image(id,
68
+ size: embed_image_size(options),
69
+ class_name: class_name,
70
+ link: link)
71
+ end
72
+
73
+ def parse_images(string)
74
+ string.gsub(image_expression).each do |str|
75
+ parse_image(str)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class LinkRenderer < WillPaginate::ActionView::LinkRenderer
3
5
  def previous_page
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  module AdminHelper
3
5
  include PagesCore::Admin::AdminHelper
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  module MenuHelper
3
5
  def header_tabs(group)
4
- content_tag :ul, class: group.to_s do
6
+ tag.ul(class: group.to_s) do
5
7
  safe_join(menu_items_for(group).map do |item|
6
- content_tag :li do
8
+ tag.li do
7
9
  path = instance_eval(&item.path)
8
10
  link_to(item.label,
9
11
  path,
@@ -20,9 +22,9 @@ module Admin
20
22
  .select { |_, routing| routing[:controller] == params[:controller] }
21
23
  end
22
24
 
23
- def find_menu_candidate
25
+ def find_menu_candidate(&block)
24
26
  menu_item_candidates
25
- .select { |item, routing| yield(item, routing) }
27
+ .select { |item, routing| block.call(item, routing) }
26
28
  .try(&:first)
27
29
  .try(&:first)
28
30
  end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  module PagesHelper
5
+ include PagesCore::Admin::PageBlocksHelper
6
+
3
7
  def available_templates_for_select
4
8
  PagesCore::Templates.names.collect do |template|
5
9
  if template == "index"
@@ -26,39 +30,6 @@ module Admin
26
30
  ([page.author] + User.activated).uniq
27
31
  end
28
32
 
29
- def page_block_field(form, block_name, block_options)
30
- labelled_field(
31
- if block_options[:type] == :select
32
- page_block_select(form, block_name, block_options)
33
- else
34
- page_block_text_field(form, block_name, block_options)
35
- end,
36
- block_options[:title],
37
- errors: form.object.errors[block_name],
38
- description: block_options[:description]
39
- )
40
- end
41
-
42
- def page_block_select(form, block_name, block_options)
43
- opts = localize_page_select_options(form, block_options)
44
- opts = opts.call if opts.is_a?(Proc)
45
- opts = opts.map { |v| [v, v] } unless nested_array?(opts)
46
- opts = ([["", nil]] + opts).uniq
47
-
48
- value = form.object.send(block_name)
49
- opts << [value, value] unless opts.map(&:last).include?(value)
50
-
51
- form.send(:select, block_name, opts)
52
- end
53
-
54
- def page_block_text_field(form, block_name, block_options)
55
- form.send(
56
- block_options[:size] == :field ? :text_field : :rich_text_area,
57
- block_name,
58
- page_block_field_options(block_options)
59
- )
60
- end
61
-
62
33
  def page_name(page, options = {})
63
34
  page_names = if options[:include_parents]
64
35
  page.self_and_ancestors.reverse
@@ -83,34 +54,10 @@ module Admin
83
54
 
84
55
  private
85
56
 
86
- def localize_page_select_options(form, block_options)
87
- if block_options[:options].is_a?(Hash)
88
- block_options[:options][form.object.locale.to_sym]
89
- else
90
- block_options[:options]
91
- end
92
- end
93
-
94
57
  def nested_array?(array)
95
58
  array.present? && array.first.is_a?(Array)
96
59
  end
97
60
 
98
- def page_block_classes(class_name, block_options = {})
99
- [class_name, block_options[:class]].join(" ").strip
100
- end
101
-
102
- def page_block_field_options(block_options = {})
103
- opts = { placeholder: block_options[:placeholder] }
104
- if block_options[:size] == :field
105
- opts.merge(class: page_block_classes("rich", block_options))
106
- else
107
- opts.merge(
108
- class: page_block_classes("rich", block_options),
109
- rows: (block_options[:size] == :large ? 15 : 5)
110
- )
111
- end
112
- end
113
-
114
61
  def page_name_with_fallback(page)
115
62
  if page.name?
116
63
  page.name.to_s
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApplicationHelper #:nodoc:
2
4
  include PagesCore::ApplicationHelper
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FrontendHelper #:nodoc:
2
4
  include PagesCore::FrontendHelper
3
5
  end
@@ -1,13 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Admin
3
5
  module AdminHelper
6
+ include PagesCore::Admin::ContentTabsHelper
7
+ include PagesCore::Admin::DateRangeHelper
8
+ include PagesCore::Admin::ImageUploadsHelper
9
+ include PagesCore::Admin::PageJsonHelper
4
10
  include PagesCore::Admin::LabelledFieldHelper
5
11
  include PagesCore::Admin::TagEditorHelper
6
12
 
7
- attr_writer :page_title
8
- attr_writer :page_description
9
- attr_writer :page_description_class
10
- attr_writer :page_description_links
13
+ attr_writer :page_title, :page_description, :page_description_class,
14
+ :page_description_links
11
15
 
12
16
  def add_body_class(class_name)
13
17
  @body_classes ||= []
@@ -16,72 +20,10 @@ module PagesCore
16
20
 
17
21
  def body_classes
18
22
  classes = @body_classes || []
19
- classes << controller.class.to_s.underscore
20
- classes << "#{controller.action_name}_action" if controller.action_name
21
23
  classes << "with_notice" if flash[:notice]
22
24
  classes
23
25
  end
24
26
 
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), "&ndash;".html_safe)
49
- end
50
-
51
- # Generates tags for an editable dynamic image.
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]))
70
- end
71
-
72
- def content_tab(name, options = {}, &block)
73
- @content_tabs ||= []
74
- return unless block_given?
75
- tab = {
76
- name: name.to_s.humanize,
77
- key: options[:key] || name.to_s.underscore.gsub(/[\s]+/, "_"),
78
- options: options,
79
- content: capture(&block)
80
- }
81
- @content_tabs << tab
82
- content_tab_tag(tab[:key], tab[:content])
83
- end
84
-
85
27
  def rich_text_area_tag(name, content = nil, options = {})
86
28
  react_component("RichTextArea",
87
29
  options.merge(id: sanitize_to_id(name),
@@ -90,7 +32,7 @@ module PagesCore
90
32
  end
91
33
 
92
34
  def link_separator
93
- safe_join [" ", content_tag(:span, "|", class: "separator"), " "]
35
+ safe_join [" ", tag.span("|", class: "separator"), " "]
94
36
  end
95
37
 
96
38
  def deprecate_page_description_args(string = nil, class_name = nil)
@@ -100,6 +42,7 @@ module PagesCore
100
42
  "use page_description_class=")
101
43
  end
102
44
  return unless string
45
+
103
46
  ActiveSupport::Deprecation.warn("Setting description with " \
104
47
  "page_description is deprecated, " \
105
48
  "use page_description=")
@@ -116,49 +59,22 @@ module PagesCore
116
59
  end
117
60
 
118
61
  def page_description_links(links = nil)
119
- if links
120
- ActiveSupport::Deprecation.warn(
121
- "Setting page description_links with page_description_links " \
122
- "is deprecated, use page_description_links="
123
- )
124
- @page_description_links = links
125
- else
126
- @page_description_links
127
- end
128
- end
62
+ return @page_description_links unless links
129
63
 
130
- def page_title(title = nil)
131
- if title
132
- ActiveSupport::Deprecation.warn(
133
- "Setting page title with page_title is deprecated, use page_title="
134
- )
135
- @page_title = title
136
- else
137
- @page_title
138
- end
64
+ ActiveSupport::Deprecation.warn(
65
+ "Setting page description_links with page_description_links " \
66
+ "is deprecated, use page_description_links="
67
+ )
68
+ @page_description_links = links
139
69
  end
140
70
 
141
- private
142
-
143
- def content_tab_tag(key, content)
144
- content_tag(:div,
145
- content,
146
- class: "content_tab",
147
- id: "content-tab-#{key}")
148
- end
71
+ def page_title(title = nil)
72
+ return @page_title unless title
149
73
 
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)
74
+ ActiveSupport::Deprecation.warn(
75
+ "Setting page title with page_title is deprecated, use page_title="
76
+ )
77
+ @page_title = title
162
78
  end
163
79
  end
164
80
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module ContentTabsHelper
6
+ def content_tab(name, options = {}, &block)
7
+ @content_tabs ||= []
8
+ return unless block_given?
9
+
10
+ tab = {
11
+ name: name.to_s.humanize,
12
+ key: options[:key] || name.to_s.underscore.gsub(/\s+/, "_"),
13
+ options: options,
14
+ content: capture(&block)
15
+ }
16
+ @content_tabs << tab
17
+ content_tab_tag(tab[:key], tab[:content])
18
+ end
19
+
20
+ private
21
+
22
+ def content_tab_tag(key, content)
23
+ tag.div(content, class: "content_tab",
24
+ id: "content-tab-#{key}")
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module DateRangeHelper
6
+ def page_date_range(page)
7
+ if page.all_day?
8
+ date_range(page.starts_at.to_date, page.ends_at.to_date)
9
+ else
10
+ date_range(page.starts_at, page.ends_at)
11
+ end
12
+ end
13
+
14
+ def date_range(starts_at, ends_at)
15
+ dates = different_year_date_range(starts_at, ends_at) ||
16
+ different_month_date_range(starts_at, ends_at) ||
17
+ different_day_date_range(starts_at, ends_at) ||
18
+ same_day_date_range(starts_at, ends_at)
19
+ safe_join(dates.map(&:strip), "&ndash;".html_safe)
20
+ end
21
+
22
+ private
23
+
24
+ def different_year_date_range(starts_at, ends_at)
25
+ return if starts_at.year == ends_at.year
26
+
27
+ [l(starts_at, format: :pages_full), l(ends_at, format: :pages_full)]
28
+ end
29
+
30
+ def different_month_date_range(starts_at, ends_at)
31
+ return if starts_at.month == ends_at.month
32
+
33
+ [l(starts_at, format: :pages_date), l(ends_at, format: :pages_full)]
34
+ end
35
+
36
+ def different_day_date_range(starts_at, ends_at)
37
+ return if starts_at.day == ends_at.day
38
+
39
+ if starts_at.is_a?(Date) && ends_at.is_a?(Date)
40
+ [l(starts_at, format: :pages_day), l(ends_at, format: :pages_full)]
41
+ else
42
+ [l(starts_at, format: :pages_date), l(ends_at, format: :pages_full)]
43
+ end
44
+ end
45
+
46
+ def same_day_date_range(starts_at, ends_at)
47
+ if starts_at.is_a?(Date) && ends_at.is_a?(Date)
48
+ [l(starts_at, format: :pages_full)]
49
+ else
50
+ [l(starts_at, format: :pages_full), l(ends_at, format: :pages_time)]
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end