pages_core 3.4.3 → 3.5.1

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +81 -15
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/pages/admin.es6.jsx +19 -0
  5. data/app/assets/javascripts/pages/admin/components.es6.jsx +1 -0
  6. data/app/assets/javascripts/pages/admin/components/page_tree.es6.jsx +330 -0
  7. data/app/assets/javascripts/pages/admin/components/page_tree_actions.es6.jsx +8 -0
  8. data/app/assets/javascripts/pages/admin/components/page_tree_node.es6.jsx +374 -0
  9. data/app/assets/javascripts/pages/admin/components/page_tree_store.es6.jsx +161 -0
  10. data/app/assets/javascripts/pages/admin/features/content_tabs.es6.jsx +63 -0
  11. data/app/assets/javascripts/pages/admin/features/edit_page.es6.jsx +141 -0
  12. data/app/assets/javascripts/pages/admin/features/editable_image.es6.jsx +145 -0
  13. data/app/assets/javascripts/pages/admin/features/modal.es6.jsx +90 -0
  14. data/app/assets/javascripts/pages/admin/features/page_images.es6.jsx +338 -0
  15. data/app/assets/javascripts/pages/admin/features/rich_text.es6.jsx +124 -0
  16. data/app/assets/javascripts/pages/admin/features/tag_editor.es6.jsx +160 -0
  17. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.es6.jsx +21 -0
  18. data/app/assets/javascripts/pages/admin/lib/center_on_screen.es6.jsx +22 -0
  19. data/app/assets/javascripts/pages/admin/lib/tree.es6.jsx +294 -0
  20. data/app/assets/javascripts/pages/login_form.es6.jsx +21 -0
  21. data/app/assets/stylesheets/pages/admin.scss +148 -0
  22. data/app/assets/stylesheets/pages/admin/components/buttons.scss +5 -0
  23. data/app/assets/stylesheets/pages/admin/{editable_image.css.erb → components/editable_image.scss} +7 -8
  24. data/app/assets/stylesheets/pages/admin/components/forms.scss +71 -0
  25. data/app/assets/stylesheets/pages/admin/components/header.scss +169 -0
  26. data/app/assets/stylesheets/pages/admin/{images.css.scss.erb → components/images.scss} +6 -11
  27. data/app/assets/stylesheets/pages/admin/components/layout.scss +44 -0
  28. data/app/assets/stylesheets/pages/admin/components/links.scss +43 -0
  29. data/app/assets/stylesheets/pages/admin/components/list_table.scss +58 -0
  30. data/app/assets/stylesheets/pages/admin/{login.css.scss.erb → components/login.scss} +1 -1
  31. data/app/assets/stylesheets/pages/admin/{modal.css.erb → components/modal.scss} +3 -2
  32. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +173 -0
  33. data/app/assets/stylesheets/pages/admin/{pagination.css.scss → components/pagination.scss} +13 -4
  34. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +25 -0
  35. data/app/assets/stylesheets/pages/admin/{tag_editor.css.scss.erb → components/tag_editor.scss} +6 -0
  36. data/app/assets/stylesheets/pages/admin/components/textarea.scss +76 -0
  37. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +196 -0
  38. data/app/assets/stylesheets/pages/admin/controllers/{users.css.erb → users.scss} +0 -0
  39. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +21 -0
  40. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +7 -0
  41. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +7 -0
  42. data/app/assets/stylesheets/pages/admin/{print.css.erb → print.scss} +0 -0
  43. data/app/assets/stylesheets/pages/admin/vars.scss +8 -0
  44. data/app/controllers/admin/invites_controller.rb +10 -6
  45. data/app/controllers/admin/page_files_controller.rb +6 -8
  46. data/app/controllers/admin/page_images_controller.rb +14 -19
  47. data/app/controllers/admin/pages_controller.rb +44 -97
  48. data/app/controllers/admin/password_resets_controller.rb +7 -2
  49. data/app/controllers/concerns/pages_core/add_comments_controller.rb +67 -0
  50. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +58 -0
  51. data/app/controllers/concerns/pages_core/authentication.rb +1 -1
  52. data/app/controllers/concerns/pages_core/exception_handler.rb +44 -21
  53. data/app/controllers/concerns/pages_core/policies_helper.rb +10 -6
  54. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +43 -0
  55. data/app/controllers/concerns/pages_core/process_titler.rb +2 -2
  56. data/app/controllers/concerns/pages_core/rss_controller.rb +25 -0
  57. data/app/controllers/concerns/pages_core/search_pages_controller.rb +40 -0
  58. data/app/controllers/errors_controller.rb +14 -2
  59. data/app/controllers/pages_core/admin_controller.rb +7 -5
  60. data/app/controllers/pages_core/frontend/page_files_controller.rb +5 -7
  61. data/app/controllers/pages_core/frontend/pages_controller.rb +41 -219
  62. data/app/controllers/pages_core/frontend_controller.rb +8 -2
  63. data/app/controllers/pages_core/sitemaps_controller.rb +5 -4
  64. data/app/formatters/pages_core/html_formatter.rb +33 -23
  65. data/app/helpers/admin/menu_helper.rb +12 -9
  66. data/app/helpers/admin/pages_helper.rb +40 -28
  67. data/app/helpers/pages_core/admin/admin_helper.rb +58 -56
  68. data/app/helpers/pages_core/admin/labelled_field_helper.rb +6 -7
  69. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
  70. data/app/helpers/pages_core/application_helper.rb +13 -26
  71. data/app/helpers/pages_core/form_builder.rb +71 -134
  72. data/app/helpers/pages_core/head_tags_helper.rb +26 -168
  73. data/app/helpers/pages_core/images_helper.rb +3 -3
  74. data/app/helpers/pages_core/meta_tags_helper.rb +96 -0
  75. data/app/helpers/pages_core/open_graph_tags_helper.rb +51 -0
  76. data/app/helpers/pages_core/page_path_helper.rb +40 -0
  77. data/app/mailers/admin_mailer.rb +14 -14
  78. data/app/models/autopublisher.rb +2 -2
  79. data/app/models/category.rb +8 -8
  80. data/app/models/concerns/pages_core/has_roles.rb +2 -2
  81. data/app/models/concerns/pages_core/humanizable_param.rb +5 -5
  82. data/app/models/concerns/pages_core/page_model/autopublishable.rb +25 -0
  83. data/app/models/concerns/pages_core/page_model/commentable.rb +29 -0
  84. data/app/models/concerns/pages_core/page_model/images.rb +50 -0
  85. data/app/models/concerns/pages_core/page_model/localizable.rb +29 -0
  86. data/app/models/concerns/pages_core/page_model/pathable.rb +115 -0
  87. data/app/models/concerns/pages_core/page_model/redirectable.rb +36 -0
  88. data/app/models/concerns/pages_core/page_model/searchable.rb +41 -0
  89. data/app/models/concerns/pages_core/page_model/sortable.rb +54 -0
  90. data/app/models/concerns/pages_core/page_model/status.rb +50 -0
  91. data/app/models/concerns/pages_core/page_model/templateable.rb +82 -0
  92. data/app/models/concerns/pages_core/page_model/tree.rb +108 -0
  93. data/app/models/page.rb +30 -212
  94. data/app/models/page_builder.rb +4 -6
  95. data/app/models/page_category.rb +7 -0
  96. data/app/models/page_comment.rb +1 -1
  97. data/app/models/page_file.rb +4 -6
  98. data/app/models/page_image.rb +6 -7
  99. data/app/models/page_path.rb +46 -0
  100. data/app/models/password_reset_token.rb +5 -5
  101. data/app/models/role.rb +1 -1
  102. data/app/models/tag.rb +14 -16
  103. data/app/models/tagging.rb +2 -1
  104. data/app/models/user.rb +6 -7
  105. data/app/policies/page_policy.rb +8 -4
  106. data/app/policies/user_policy.rb +1 -1
  107. data/app/serializers/page_tree_serializer.rb +15 -0
  108. data/app/views/admin/invites/new.html.erb +2 -1
  109. data/app/views/admin/invites/show.html.erb +3 -4
  110. data/app/views/admin/pages/_edit_comments.html.erb +22 -6
  111. data/app/views/admin/pages/_edit_content.html.erb +4 -2
  112. data/app/views/admin/pages/_edit_images.html.erb +86 -75
  113. data/app/views/admin/pages/_edit_metadata.html.erb +22 -0
  114. data/app/views/admin/pages/_edit_options.html.erb +23 -15
  115. data/app/views/admin/pages/_pagelisting.html.erb +6 -6
  116. data/app/views/admin/pages/edit.html.erb +11 -6
  117. data/app/views/admin/pages/index.html.erb +12 -53
  118. data/app/views/admin/pages/new.html.erb +3 -3
  119. data/app/views/admin/pages/news.html.erb +1 -1
  120. data/app/views/admin_mailer/invite.text.erb +1 -1
  121. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  122. data/app/views/errors/422.html.erb +7 -0
  123. data/app/views/errors/500_critical.html.erb +1 -1
  124. data/app/views/layouts/admin.html.erb +36 -32
  125. data/app/views/layouts/admin/_header.html.erb +2 -2
  126. data/config/locales/en.yml +38 -1
  127. data/config/routes.rb +40 -23
  128. data/db/migrate/20111219033112_create_pages_tables.rb +25 -29
  129. data/db/migrate/20121010055412_drop_removed_tables.rb +3 -3
  130. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -13
  131. data/db/migrate/20140203183900_create_roles.rb +5 -2
  132. data/db/migrate/20140920231700_convert_images_to_dis.rb +4 -2
  133. data/db/migrate/20150401131300_localize_images.rb +7 -8
  134. data/db/migrate/20151002174800_create_page_paths.rb +10 -0
  135. data/db/migrate/20151021103400_drop_binaries_table.rb +7 -0
  136. data/db/migrate/20151204151000_remove_page_content_order.rb +5 -0
  137. data/db/migrate/20160330220900_rename_pages_categories.rb +6 -0
  138. data/db/migrate/20160405202700_change_localization_limit.rb +9 -0
  139. data/lib/pages_core.rb +22 -27
  140. data/lib/pages_core/admin_menu_item.rb +16 -3
  141. data/lib/pages_core/archive_finder.rb +40 -13
  142. data/lib/pages_core/cache_sweeper.rb +72 -45
  143. data/lib/pages_core/configuration.rb +2 -2
  144. data/lib/pages_core/configuration/base.rb +4 -8
  145. data/lib/pages_core/configuration/pages.rb +6 -3
  146. data/lib/pages_core/engine.rb +23 -1
  147. data/lib/pages_core/extensions.rb +2 -2
  148. data/lib/pages_core/file_embedder.rb +40 -0
  149. data/lib/pages_core/page_path_constraint.rb +23 -0
  150. data/lib/pages_core/pages_plugin.rb +11 -0
  151. data/lib/pages_core/paginates.rb +3 -3
  152. data/lib/pages_core/plugin.rb +14 -8
  153. data/lib/pages_core/templates.rb +6 -6
  154. data/lib/pages_core/templates/block_configuration.rb +1 -1
  155. data/lib/pages_core/templates/configuration.rb +23 -24
  156. data/lib/pages_core/templates/configuration_handler.rb +1 -1
  157. data/lib/pages_core/templates/configuration_proxy.rb +7 -11
  158. data/lib/pages_core/templates/template_configuration.rb +55 -61
  159. data/lib/pages_core/version.rb +1 -1
  160. data/lib/rails/generators/pages_core/install/install_generator.rb +22 -48
  161. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +1 -1
  162. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +6 -3
  163. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +4 -1
  164. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +1 -1
  165. data/lib/tasks/pages.rake +4 -4
  166. data/lib/tasks/pages/page_paths.rake +12 -0
  167. data/template.rb +2 -2
  168. data/vendor/assets/javascripts/reflux.min.js +1 -0
  169. metadata +173 -85
  170. data/app/assets/images/pages/admin/description-bg.gif +0 -0
  171. data/app/assets/images/pages/admin/drag-handle.gif +0 -0
  172. data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
  173. data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
  174. data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
  175. data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
  176. data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
  177. data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
  178. data/app/assets/javascripts/pages/admin.js.coffee +0 -54
  179. data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +0 -4
  180. data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +0 -139
  181. data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +0 -9
  182. data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +0 -47
  183. data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +0 -122
  184. data/app/assets/javascripts/pages/admin/features/modal.js.coffee +0 -66
  185. data/app/assets/javascripts/pages/admin/features/page_images.js +0 -329
  186. data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +0 -40
  187. data/app/assets/javascripts/pages/admin/features/tag_editor.js +0 -159
  188. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +0 -17
  189. data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +0 -21
  190. data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +0 -57
  191. data/app/assets/javascripts/pages/login_form.js.coffee +0 -17
  192. data/app/assets/stylesheets/pages/admin.css.erb +0 -404
  193. data/app/assets/stylesheets/pages/admin/buttons.css.erb +0 -5
  194. data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +0 -94
  195. data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +0 -58
  196. data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +0 -178
  197. data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +0 -73
  198. data/app/assets/stylesheets/pages/admin/header.css.erb +0 -129
  199. data/app/assets/stylesheets/pages/admin/links.css.erb +0 -34
  200. data/app/assets/stylesheets/pages/admin/list_table.css.erb +0 -56
  201. data/app/assets/stylesheets/pages/admin/sidebar.css.erb +0 -39
  202. data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +0 -18
  203. data/app/assets/stylesheets/pages/admin/textarea.css.erb +0 -55
  204. data/app/models/concerns/pages_core/page_tree.rb +0 -85
  205. data/app/models/concerns/pages_core/searchable_page.rb +0 -33
  206. data/app/models/concerns/pages_core/templateable.rb +0 -85
  207. data/app/models/localization.rb +0 -27
  208. data/db/migrate/20140515130100_remove_sphinx_deltas.rb +0 -15
  209. data/lib/pages_core/localizable.rb +0 -49
  210. data/lib/pages_core/localizable/active_record_extension.rb +0 -41
  211. data/lib/pages_core/localizable/class_methods.rb +0 -51
  212. data/lib/pages_core/localizable/configuration.rb +0 -50
  213. data/lib/pages_core/localizable/instance_methods.rb +0 -130
  214. data/lib/pages_core/localizable/localizer.rb +0 -72
  215. data/lib/pages_core/localizable/scope_extension.rb +0 -22
@@ -19,16 +19,22 @@ module PagesCore
19
19
 
20
20
  private
21
21
 
22
- def set_i18n_locale
23
- legacy_locales = {
22
+ def legacy_locales
23
+ {
24
24
  "nor" => "nb",
25
25
  "eng" => "en"
26
26
  }
27
+ end
28
+
29
+ def set_i18n_locale
27
30
  locale_param = params[:locale] || I18n.default_locale
28
31
  if legacy_locales[locale_param]
29
32
  locale_param = legacy_locales[locale_param]
30
33
  end
31
34
  I18n.locale = locale_param
35
+ rescue I18n::InvalidLocale
36
+ raise if Rails.application.config.consider_all_requests_local
37
+ render_error 404
32
38
  end
33
39
  end
34
40
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module PagesCore
4
4
  class SitemapsController < ApplicationController
5
+ include PagesCore::PagePathHelper
5
6
  caches_page :show
6
7
 
7
8
  def show
@@ -11,7 +12,7 @@ module PagesCore
11
12
  private
12
13
 
13
14
  def format_time(timestamp)
14
- if timestamp.kind_of?(Date)
15
+ if timestamp.is_a?(Date)
15
16
  timestamp.strftime("%Y-%m-%d")
16
17
  else
17
18
  timestamp.strftime("%Y-%m-%dT%H:%M:%S#{timestamp.formatted_offset}")
@@ -38,14 +39,14 @@ module PagesCore
38
39
  end
39
40
 
40
41
  def localized?(record)
41
- record.is_a?(PagesCore::Localizable::InstanceMethods)
42
+ record.is_a?(LocalizableModel::InstanceMethods)
42
43
  end
43
44
 
44
45
  def pages
45
46
  ([Page.root.localize(I18n.default_locale)] +
46
47
  locales.flat_map do |locale|
47
- Page.published.localized(locale)
48
- end).uniq
48
+ Page.published.localized(locale)
49
+ end).uniq
49
50
  end
50
51
 
51
52
  def page_record_url(record)
@@ -18,7 +18,7 @@ module PagesCore
18
18
  end
19
19
 
20
20
  def to_html
21
- string = parse_images(@string)
21
+ string = parse_images(parse_files(@string))
22
22
  if @options[:shorten] && string.length > @options[:shorten]
23
23
  string = string[0..@options[:shorten]] + "..."
24
24
  end
@@ -28,6 +28,10 @@ module PagesCore
28
28
 
29
29
  private
30
30
 
31
+ def file_expression
32
+ /\[file:([\d,]+)\]/
33
+ end
34
+
31
35
  def image_expression
32
36
  /\[image:(\d+)([\s="\-\w]*)?\]/
33
37
  end
@@ -35,36 +39,42 @@ module PagesCore
35
39
  def embed_image(id, size:, class_name:)
36
40
  image = Image.find(id).localize(I18n.locale)
37
41
  class_name = ["image", image_class_name(image), class_name].compact
38
- content_tag(
39
- :figure,
40
- dynamic_image_tag(
41
- image,
42
- size: size,
43
- crop: false,
44
- upscale: false
45
- ) + image_caption(image),
46
- class: class_name
47
- )
42
+ content_tag(:figure,
43
+ dynamic_image_tag(image,
44
+ size: size,
45
+ crop: false,
46
+ upscale: false) + image_caption(image),
47
+ class: class_name)
48
48
  rescue ActiveRecord::RecordNotFound
49
49
  nil
50
50
  end
51
51
 
52
+ def embed_image_size(str)
53
+ if str =~ /size="(\d*x\d*)"/
54
+ Regexp.last_match(1)
55
+ else
56
+ "2000x2000"
57
+ end
58
+ end
59
+
60
+ def find_files(str)
61
+ str.match(file_expression)[1]
62
+ .split(",")
63
+ .map { |id| PageFile.find(id).localize(I18n.locale) }
64
+ end
65
+
66
+ def parse_files(string)
67
+ string.gsub(file_expression).each do |str|
68
+ PagesCore.config.file_embedder.new(find_files(str)).to_html
69
+ end
70
+ end
71
+
52
72
  def parse_images(string)
53
73
  string.gsub(image_expression).each do |str|
54
74
  id = str.match(image_expression)[1]
55
75
  options = str.match(image_expression)[2]
56
-
57
- size = if options.match(/size="(\d*x\d*)"/)
58
- Regexp.last_match(1)
59
- else
60
- "2000x2000"
61
- end
62
-
63
- class_name = if options.match(/class="([\s\-\w]+)"/)
64
- Regexp.last_match(1)
65
- end
66
-
67
- embed_image(id, size: size, class_name: class_name)
76
+ class_name = (Regexp.last_match(1) if options =~ /class="([\s\-\w]+)"/)
77
+ embed_image(id, size: embed_image_size(options), class_name: class_name)
68
78
  end
69
79
  end
70
80
 
@@ -7,11 +7,9 @@ module Admin
7
7
  menu_items_for(group).map do |item|
8
8
  content_tag :li do
9
9
  path = instance_eval(&item.path)
10
- link_to(
11
- item.label,
12
- path,
13
- class: (current_menu_item?(item) ? "current" : "")
14
- )
10
+ link_to(item.label,
11
+ path,
12
+ class: (current_menu_item?(item) ? "current" : ""))
15
13
  end
16
14
  end.join.html_safe
17
15
  end
@@ -20,10 +18,8 @@ module Admin
20
18
  protected
21
19
 
22
20
  def menu_item_candidates
23
- routes = Rails.application.routes
24
- menu_items
25
- .map { |item| [item, routes.recognize_path(instance_eval(&item.path))] }
26
- .select { |_item, routing| routing[:controller] == params[:controller] }
21
+ routed_menu_items
22
+ .select { |_, routing| routing[:controller] == params[:controller] }
27
23
  end
28
24
 
29
25
  def find_menu_candidate
@@ -61,5 +57,12 @@ module Admin
61
57
  item.options[:if] && !instance_eval(&item.options[:if])
62
58
  end
63
59
  end
60
+
61
+ def routed_menu_items
62
+ routes = Rails.application.routes
63
+ menu_items
64
+ .select { |item| item.path.is_a?(Proc) }
65
+ .map { |item| [item, routes.recognize_path(instance_eval(&item.path))] }
66
+ end
64
67
  end
65
68
  end
@@ -2,31 +2,6 @@
2
2
 
3
3
  module Admin
4
4
  module PagesHelper
5
- def page_block_field(form, block_name, block_options)
6
- if block_options[:size] == :field
7
- labelled_field(
8
- form.text_field(
9
- block_name,
10
- class: ['text', block_options[:class]].join(" "),
11
- placeholder: block_options[:placeholder]
12
- ),
13
- block_options[:title],
14
- errors: form.object.errors[block_name],
15
- description: block_options[:description]
16
- )
17
- else
18
- labelled_field form.text_area(
19
- block_name,
20
- rows: (block_options[:size] == :large ? 15 : 5),
21
- class: ['rich', block_options[:class]].join(" "),
22
- placeholder: block_options[:placeholder]
23
- ),
24
- block_options[:title],
25
- errors: form.object.errors[block_name],
26
- description: block_options[:description]
27
- end
28
- end
29
-
30
5
  def available_templates_for_select
31
6
  PagesCore::Templates.names.collect do |template|
32
7
  if template == "index"
@@ -37,6 +12,27 @@ module Admin
37
12
  end
38
13
  end
39
14
 
15
+ def file_embed_code(file)
16
+ "[file:#{file.id}]"
17
+ end
18
+
19
+ def page_authors(page)
20
+ ([page.author] + User.activated).uniq
21
+ end
22
+
23
+ def page_block_field(form, block_name, block_options)
24
+ labelled_field(
25
+ form.send(
26
+ block_options[:size] == :field ? :text_field : :text_area,
27
+ block_name,
28
+ page_block_field_options(block_options)
29
+ ),
30
+ block_options[:title],
31
+ errors: form.object.errors[block_name],
32
+ description: block_options[:description]
33
+ )
34
+ end
35
+
40
36
  def page_name(page, options = {})
41
37
  page_names = if options[:include_parents]
42
38
  [page.ancestors, page].flatten
@@ -50,10 +46,10 @@ module Admin
50
46
  end
51
47
 
52
48
  def publish_time(time)
53
- if time.year != Time.now.year
49
+ if time.year != Time.zone.now.year
54
50
  time.strftime("on %b %d %Y at %H:%M")
55
- elsif time.to_date != Time.now.to_date
56
- time.strftime("on %b %Y at %H:%M")
51
+ elsif time.to_date != Time.zone.now.to_date
52
+ time.strftime("on %b %d at %H:%M")
57
53
  else
58
54
  time.strftime("at %H:%M")
59
55
  end
@@ -61,6 +57,22 @@ module Admin
61
57
 
62
58
  private
63
59
 
60
+ def page_block_classes(class_name, block_options = {})
61
+ [class_name, block_options[:class]].join(" ").strip
62
+ end
63
+
64
+ def page_block_field_options(block_options = {})
65
+ opts = { placeholder: block_options[:placeholder] }
66
+ if block_options[:size] == :field
67
+ opts.merge(class: page_block_classes("rich", block_options))
68
+ else
69
+ opts.merge(
70
+ class: page_block_classes("rich", block_options),
71
+ rows: (block_options[:size] == :large ? 15 : 5)
72
+ )
73
+ end
74
+ end
75
+
64
76
  def page_name_with_fallback(page)
65
77
  if page.name?
66
78
  page.name.to_s
@@ -6,6 +6,24 @@ module PagesCore
6
6
  include PagesCore::Admin::LabelledFieldHelper
7
7
  include PagesCore::Admin::TagEditorHelper
8
8
 
9
+ attr_accessor :page_title
10
+ attr_accessor :page_description
11
+ attr_accessor :page_description_class
12
+ attr_accessor :page_description_links
13
+
14
+ def add_body_class(class_name)
15
+ @body_classes ||= []
16
+ @body_classes << class_name
17
+ end
18
+
19
+ def body_classes
20
+ classes = @body_classes || []
21
+ classes << controller.class.to_s.underscore
22
+ classes << "#{controller.action_name}_action" if controller.action_name
23
+ classes << "with_notice" if flash[:notice]
24
+ classes
25
+ end
26
+
9
27
  # Generates tags for an editable dynamic image.
10
28
  def editable_dynamic_image_tag(image, options = {})
11
29
  preview_url = uncropped_dynamic_image_url(image, size: "800x")
@@ -16,49 +34,40 @@ module PagesCore
16
34
  )
17
35
  end
18
36
 
19
- def body_classes
20
- classes = @body_classes || []
21
- classes << controller.class.underscore
22
- classes << "#{controller.action_name}_action"
23
- classes << "with_sidebar" if content_for?(:sidebar)
24
- classes << "with_notice" if flash[:notice]
25
- classes.reverse.join(" ")
37
+ def content_tab(name, options = {}, &block)
38
+ @content_tabs ||= []
39
+ return unless block_given?
40
+ tab = {
41
+ name: name.to_s.humanize,
42
+ key: name.to_s.underscore.gsub(/[\s]+/, "_"),
43
+ options: options,
44
+ content: capture(&block)
45
+ }
46
+ @content_tabs << tab
47
+ content_tab_tag(tab[:key], tab[:content])
26
48
  end
27
49
 
28
- def add_body_class(class_name)
29
- @body_classes ||= []
30
- @body_classes << class_name
50
+ def link_separator
51
+ ' <span class="separator">|</span> '.html_safe
31
52
  end
32
53
 
33
- attr_accessor :page_title
34
- attr_accessor :page_description
35
- attr_accessor :page_description_class
36
- attr_accessor :page_description_links
37
-
38
- def page_title(title = nil)
39
- if title
40
- ActiveSupport::Deprecation.warn(
41
- "Setting page title with page_title is deprecated, use page_title="
42
- )
43
- @page_title = title
44
- else
45
- @page_title
54
+ def deprecate_page_description_args(string = nil, class_name = nil)
55
+ if class_name
56
+ ActiveSupport::Deprecation.warn("Setting class through " \
57
+ "page_description is deprecated, " \
58
+ "use page_description_class=")
59
+ end
60
+ if string
61
+ ActiveSupport::Deprecation.warn("Setting description with " \
62
+ "page_description is deprecated, " \
63
+ "use page_description=")
46
64
  end
47
65
  end
48
66
 
49
67
  def page_description(string = nil, class_name = nil)
50
- if class_name
51
- ActiveSupport::Deprecation.warn(
52
- "Setting page description class through page_description " \
53
- "is deprecated, use page_description_class="
54
- )
55
- @page_description_class = class_name
56
- end
68
+ deprecate_page_description_args(string, class_name)
69
+ @page_description_class = class_name if class_name
57
70
  if string
58
- ActiveSupport::Deprecation.warn(
59
- "Setting description with page_description is deprecated, " \
60
- "use page_description="
61
- )
62
71
  @page_description = string
63
72
  else
64
73
  @page_description
@@ -77,31 +86,24 @@ module PagesCore
77
86
  end
78
87
  end
79
88
 
80
- def sidebar(string = "", &block)
81
- @sidebar = string
82
- return unless block_given?
83
- @sidebar += capture(&block)
89
+ def page_title(title = nil)
90
+ if title
91
+ ActiveSupport::Deprecation.warn(
92
+ "Setting page title with page_title is deprecated, use page_title="
93
+ )
94
+ @page_title = title
95
+ else
96
+ @page_title
97
+ end
84
98
  end
85
99
 
86
- def content_tab(name, options = {}, &block)
87
- @content_tabs ||= []
88
- return unless block_given?
89
- tab = {
90
- name: name.to_s.humanize,
91
- key: name.to_s.underscore.gsub(/[\s]+/, "_"),
92
- options: options,
93
- content: capture(&block)
94
- }
95
- @content_tabs << tab
96
- tab_output = "<div class=\"content_tab\" " \
97
- "id=\"content-tab-#{tab[:key]}\">"
98
- tab_output += tab[:content]
99
- tab_output += "</div>"
100
- tab_output.html_safe
101
- end
100
+ private
102
101
 
103
- def link_separator
104
- ' <span class="separator">|</span> '.html_safe
102
+ def content_tab_tag(key, content)
103
+ content_tag(:div,
104
+ content,
105
+ class: "content_tab",
106
+ id: "content-tab-#{key}")
105
107
  end
106
108
  end
107
109
  end
@@ -25,29 +25,28 @@ module PagesCore
25
25
  labelled_field_description(options[:description]) +
26
26
  field +
27
27
  (options[:check_box_description] || "")
28
- ).html_safe
28
+ ).html_safe
29
29
  end
30
30
  end
31
31
 
32
32
  def image_upload_field(form, label, method = :image, options = {})
33
33
  output = ""
34
34
  if form.object.send(method)
35
- output += "<p>" +
36
- dynamic_image_tag(form.object.send(method), size: "120x100") +
37
- "</p>"
35
+ output += content_tag(:p,
36
+ dynamic_image_tag(form.object.send(method),
37
+ size: "120x100"))
38
38
  end
39
- output += labelled_field(
39
+ output + labelled_field(
40
40
  form.file_field(method),
41
41
  label, { errors: form.object.errors[method] }.merge(options)
42
42
  )
43
- output.html_safe
44
43
  end
45
44
 
46
45
  private
47
46
 
48
47
  def labelled_field_class(options = {})
49
48
  if options[:errors] && options[:errors].any?
50
- "field field_with_errors"
49
+ "field field-with-errors"
51
50
  else
52
51
  "field"
53
52
  end