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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Admin
3
5
  class FormBuilder < PagesCore::FormBuilder
@@ -19,6 +21,12 @@ module PagesCore
19
21
  )
20
22
  end
21
23
 
24
+ def labelled_rich_text_area(attribute, label_text = nil, options = {})
25
+ labelled_field(attribute, label_text, options) do |opts|
26
+ rich_text_area(attribute, opts)
27
+ end
28
+ end
29
+
22
30
  def labelled_image_uploader(attribute, label_text = nil, options = {})
23
31
  labelled_field(attribute, label_text, options) do |opts|
24
32
  image_uploader(attribute, opts)
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module ImageUploadsHelper
6
+ # Generates tags for an editable dynamic image.
7
+ def editable_dynamic_image_tag(image, width: 250,
8
+ caption: false, locale: nil)
9
+ react_component("EditableImage",
10
+ editable_image_options(
11
+ image,
12
+ width: width,
13
+ caption: caption,
14
+ locale: locale
15
+ ).merge(width: width))
16
+ end
17
+
18
+ def image_uploader_tag(name, image, options = {})
19
+ opts = { caption: false, locale: nil }.merge(options)
20
+ react_component("ImageUploader",
21
+ editable_image_options(
22
+ image,
23
+ caption: opts[:caption],
24
+ locale: opts[:locale]
25
+ ).merge(attr: name, alternative: opts[:alternative]))
26
+ end
27
+
28
+ private
29
+
30
+ def editable_image_src_options(image, width)
31
+ return {} unless image
32
+
33
+ { src: dynamic_image_path(image, size: "#{width * 2}x"),
34
+ image: ::Admin::ImageSerializer.new(image) }
35
+ end
36
+
37
+ def editable_image_options(image, width: 250, caption: false, locale: nil)
38
+ editable_image_src_options(image, width).merge(
39
+ width: width,
40
+ caption: caption,
41
+ locale: locale || I18n.default_locale,
42
+ locales: PagesCore.config.locales,
43
+ csrf_token: form_authenticity_token
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Admin
3
5
  module LabelledFieldHelper
@@ -17,7 +19,7 @@ module PagesCore
17
19
  # <% end %>
18
20
  #
19
21
  def labelled_field(field, label, options = {})
20
- content_tag(:div, class: labelled_field_class(options)) do
22
+ tag.div(class: labelled_field_class(options)) do
21
23
  safe_join(
22
24
  [labelled_field_label(label, options),
23
25
  labelled_field_description(options[:description]),
@@ -30,9 +32,8 @@ module PagesCore
30
32
  def image_upload_field(form, label, method = :image, options = {})
31
33
  output = ""
32
34
  if form.object.send(method)
33
- output += content_tag(:p,
34
- dynamic_image_tag(form.object.send(method),
35
- size: "120x100"))
35
+ output += tag.p(dynamic_image_tag(form.object.send(method),
36
+ size: "120x100"))
36
37
  end
37
38
  output + labelled_field(
38
39
  form.file_field(method),
@@ -43,7 +44,7 @@ module PagesCore
43
44
  private
44
45
 
45
46
  def labelled_field_class(options = {})
46
- if options[:errors] && options[:errors].any?
47
+ if options[:errors]&.any?
47
48
  "field field-with-errors"
48
49
  else
49
50
  "field"
@@ -51,19 +52,21 @@ module PagesCore
51
52
  end
52
53
 
53
54
  def labelled_field_label(label, options = {})
54
- content_tag(:label) do
55
+ tag.label do
55
56
  label + labelled_field_errors(options[:errors])
56
57
  end
57
58
  end
58
59
 
59
60
  def labelled_field_description(str)
60
61
  return "" unless str
61
- content_tag(:p, str, class: "description")
62
+
63
+ tag.p(str, class: "description")
62
64
  end
63
65
 
64
66
  def labelled_field_errors(errors)
65
- return "" unless errors && errors.any?
66
- content_tag(:span, class: "error") { Array(errors).last }
67
+ return "" unless errors&.any?
68
+
69
+ tag.span(class: "error") { Array(errors).last }
67
70
  end
68
71
  end
69
72
  end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module PageBlocksHelper
6
+ def page_block_field(form, block_name, block_options)
7
+ labelled_field(
8
+ if block_options[:type] == :select
9
+ page_block_select(form, block_name, block_options)
10
+ else
11
+ page_block_text_field(form, block_name, block_options)
12
+ end,
13
+ block_options[:title],
14
+ errors: form.object.errors[block_name],
15
+ description: block_options[:description]
16
+ )
17
+ end
18
+
19
+ def page_block_select(form, block_name, block_options)
20
+ opts = localize_page_select_options(form, block_options)
21
+ opts = opts.call if opts.is_a?(Proc)
22
+ opts = opts.map { |v| [v, v] } unless nested_array?(opts)
23
+ opts = ([["", nil]] + opts).uniq
24
+
25
+ value = form.object.send(block_name)
26
+ opts << [value, value] unless opts.map(&:last).include?(value)
27
+
28
+ form.send(:select, block_name, opts)
29
+ end
30
+
31
+ def page_block_text_field(form, block_name, block_options)
32
+ form.send(
33
+ block_options[:size] == :field ? :text_field : :rich_text_area,
34
+ block_name,
35
+ page_block_field_options(block_options)
36
+ )
37
+ end
38
+
39
+ private
40
+
41
+ def localize_page_select_options(form, block_options)
42
+ if block_options[:options].is_a?(Hash)
43
+ block_options[:options][form.object.locale.to_sym]
44
+ else
45
+ block_options[:options]
46
+ end
47
+ end
48
+
49
+ def page_block_classes(class_name, block_options = {})
50
+ [class_name, block_options[:class]].join(" ").strip
51
+ end
52
+
53
+ def page_block_field_options(block_options = {})
54
+ opts = { placeholder: block_options[:placeholder] }
55
+ if block_options[:size] == :field
56
+ opts.merge(class: page_block_classes("rich", block_options))
57
+ else
58
+ opts.merge(
59
+ class: page_block_classes("rich", block_options),
60
+ rows: (block_options[:size] == :large ? 15 : 5)
61
+ )
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Admin
5
+ module PageJsonHelper
6
+ def page_json(page)
7
+ { id: page.id, param: page.to_param,
8
+ name: page.name,
9
+ parent_page_id: page.parent_page_id,
10
+ locale: page.locale, status: page.status,
11
+ news_page: page.news_page,
12
+ published_at: page.published_at,
13
+ pinned: page.pinned?, starts_at: page.starts_at,
14
+ permissions: page_permissions(page) }
15
+ end
16
+
17
+ def page_permissions(page)
18
+ [(:edit if policy(page).edit?),
19
+ (:create if policy(page).edit?)].compact
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module Admin
3
5
  module TagEditorHelper
@@ -7,7 +9,7 @@ module PagesCore
7
9
  tags = options[:tags] || Tag.tags_and_suggestions_for(item, limit: 20)
8
10
  tagged = options[:tagged] || item.tags
9
11
  options[:placeholder] ||= "Add tag..."
10
- content_tag(:div, class: "tag-editor clearfix") do
12
+ tag.div(class: "tag-editor clearfix") do
11
13
  form_helper.hidden_field(field_name, class: "serialized_tags") +
12
14
  tag_check_boxes(tags, tagged) +
13
15
  add_tag_button(options)
@@ -16,29 +18,29 @@ module PagesCore
16
18
 
17
19
  private
18
20
 
19
- def tag_check_box(tag, tagged)
20
- content_tag(:span, class: :tag) do
21
+ def tag_check_box(tag_instance, tagged)
22
+ tag.span(class: :tag) do
21
23
  check_box_tag(
22
- "tag-#{tag.id}",
24
+ "tag-#{tag_instance.id}",
23
25
  1,
24
- tagged.include?(tag)
25
- ) + content_tag(:span, tag.name, class: :name)
26
+ tagged.include?(tag_instance)
27
+ ) + tag.span(tag_instance.name, class: :name)
26
28
  end
27
29
  end
28
30
 
29
31
  def tag_check_boxes(tags, tagged)
30
- content_tag(:div, class: :tags) do
32
+ tag.div(class: :tags) do
31
33
  safe_join(tags.map { |t| tag_check_box(t, tagged) }, "")
32
34
  end
33
35
  end
34
36
 
35
37
  def add_tag_button(options = {})
36
- content_tag(:div, class: "add-tag-form") do
38
+ tag.div(class: "add-tag-form") do
37
39
  text_field_tag(
38
40
  "add_tag",
39
41
  options[:placeholder],
40
42
  class: "add-tag"
41
- ) + content_tag(:button, "Add", class: "add-tag-button")
43
+ ) + tag.button("Add", class: "add-tag-button")
42
44
  end
43
45
  end
44
46
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Methods added to this helper will be available to all templates
2
4
  # in the application.
3
5
  module PagesCore
@@ -14,6 +16,7 @@ module PagesCore
14
16
  page.localize(link_locale) do |p|
15
17
  title = options[:title] || p.name.to_s
16
18
  return title unless conditional_options?(options)
19
+
17
20
  link_to(title, page_link_path(link_locale, p), class: options[:class])
18
21
  end
19
22
  end
@@ -1,36 +1,40 @@
1
- module PagesCore::AttachmentsHelper
2
- def attachment_path(*args)
3
- super(*attachment_params(args))
4
- end
1
+ # frozen_string_literal: true
5
2
 
6
- def download_attachment_path(*args)
7
- super(*attachment_params(args))
8
- end
3
+ module PagesCore
4
+ module AttachmentsHelper
5
+ def attachment_path(*args)
6
+ super(*attachment_params(args))
7
+ end
9
8
 
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
9
+ def download_attachment_path(*args)
10
+ super(*attachment_params(args))
11
+ end
16
12
 
17
- super(*args)
18
- end
13
+ def page_file_path(*args)
14
+ ActiveSupport::Deprecation.warn(
15
+ "#page_file_path is deprecated, use #attachment_path"
16
+ )
17
+ page_file = args.detect { |a| a.is_a?(PageFile) }
18
+ return attachment_path(page_file.attachment) if page_file
19
19
 
20
- private
20
+ super(*args)
21
+ end
22
+
23
+ private
21
24
 
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)
25
+ def attachment_params(args)
26
+ attachment = args.detect { |a| a.is_a?(Attachment) }
27
+ args = [attachment.digest] + args if args.first == attachment
28
+ if args.last.is_a?(Hash)
29
+ args.last[:format] = attachment.filename_extension
30
+ else
31
+ args.push(format: attachment.filename_extension)
32
+ end
33
+ args
29
34
  end
30
- args
31
- end
32
35
 
33
- def attachment_digest(attachment)
34
- Attachment.verifier.generate(attachment.id.to_s)
36
+ def attachment_digest(attachment)
37
+ Attachment.verifier.generate(attachment.id.to_s)
38
+ end
35
39
  end
36
40
  end
@@ -1,18 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  class FormBuilder < ActionView::Helpers::FormBuilder
3
5
  include ActionView::Helpers::TagHelper
4
6
 
5
- def field_with_label(attr, str, label = nil)
6
- classes = ["field"]
7
+ def field_with_label(attr, str, label = nil, class_name = nil)
8
+ classes = ["field", class_name]
7
9
  classes << "field-with-errors" if object.errors[attr].any?
8
- content_tag(:div, label_for(attr, label) + str, class: classes.join(" "))
10
+ tag.div(label_for(attr, label) + str, class: classes.compact.join(" "))
9
11
  end
10
12
 
11
13
  def image_file_preview(attribute)
12
14
  return "" unless object.send(attribute) &&
13
15
  !object.send(attribute).new_record?
14
- content_tag(
15
- :p, @template.dynamic_image_tag(object.send(attribute), size: "120x100")
16
+
17
+ tag.p(
18
+ @template.dynamic_image_tag(object.send(attribute), size: "120x100")
16
19
  )
17
20
  end
18
21
 
@@ -22,14 +25,15 @@ module PagesCore
22
25
 
23
26
  def label_and_errors(attribute, label_text)
24
27
  return label_text unless object.errors[attribute].any?
25
- error = content_tag(:span, object.errors[attribute].first, class: "error")
28
+
29
+ error = tag.span(object.errors[attribute].first, class: "error")
26
30
  safe_join([label_text, error], " ")
27
31
  end
28
32
 
29
33
  def label_for(attribute, label_text = nil)
30
34
  label_text ||= object.class.human_attribute_name(attribute)
31
- content_tag("label", label_and_errors(attribute, label_text),
32
- for: [object.class.to_s.underscore, attribute].join("_"))
35
+ tag.label(label_and_errors(attribute, label_text),
36
+ for: [object.class.to_s.underscore, attribute].join("_"))
33
37
  end
34
38
 
35
39
  def labelled_check_box(
@@ -78,7 +82,7 @@ module PagesCore
78
82
  end
79
83
 
80
84
  def labelled_password_field(attribute, label_text = nil, options = {})
81
- labelled_field(attribute, label_text, options) do |opts|
85
+ labelled_field(attribute, label_text, options, "text-field") do |opts|
82
86
  password_field(attribute, opts)
83
87
  end
84
88
  end
@@ -90,13 +94,13 @@ module PagesCore
90
94
  end
91
95
 
92
96
  def labelled_text_area(attribute, label_text = nil, options = {})
93
- labelled_field(attribute, label_text, options) do |opts|
97
+ labelled_field(attribute, label_text, options, "text-area") do |opts|
94
98
  text_area(attribute, opts)
95
99
  end
96
100
  end
97
101
 
98
102
  def labelled_text_field(attribute, label_text = nil, options = {})
99
- labelled_field(attribute, label_text, options) do |opts|
103
+ labelled_field(attribute, label_text, options, "text-field") do |opts|
100
104
  text_field(attribute, opts)
101
105
  end
102
106
  end
@@ -109,12 +113,12 @@ module PagesCore
109
113
 
110
114
  protected
111
115
 
112
- def labelled_field(attribute, label_text = nil, options = {})
116
+ def labelled_field(attr, label_text = nil, options = {}, class_name = nil)
113
117
  if label_text.is_a?(Hash) && options == {}
114
118
  options = label_text
115
119
  label_text = nil
116
120
  end
117
- field_with_label(attribute, yield(options), label_text)
121
+ field_with_label(attr, yield(options), label_text, class_name)
118
122
  end
119
123
  end
120
124
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module PagesCore
2
4
  module FrontendHelper
3
5
  def root_pages
@@ -8,8 +10,6 @@ module PagesCore
8
10
  @root_page ||= root_pages.first
9
11
  end
10
12
 
11
- attr_reader :search_query
12
-
13
- attr_reader :search_category_id
13
+ attr_reader :search_query, :search_category_id
14
14
  end
15
15
  end