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
@@ -18,17 +18,19 @@ module PagesCore
18
18
 
19
19
  private
20
20
 
21
+ def tag_check_box(tag, tagged)
22
+ content_tag(:span, class: :tag) do
23
+ check_box_tag(
24
+ "tag-#{tag.id}",
25
+ 1,
26
+ tagged.include?(tag)
27
+ ) + content_tag(:span, tag.name, class: :name)
28
+ end
29
+ end
30
+
21
31
  def tag_check_boxes(tags, tagged)
22
32
  content_tag(:div, class: :tags) do
23
- tags.map do |tag|
24
- content_tag(:span, class: :tag) do
25
- check_box_tag(
26
- "tag-#{tag.id}",
27
- 1,
28
- tagged.include?(tag)
29
- ) + content_tag(:span, tag.name, class: :name)
30
- end
31
- end.join.html_safe
33
+ safe_join(tags.map { |t| tag_check_box(t, tagged) }, "")
32
34
  end
33
35
  end
34
36
 
@@ -6,37 +6,16 @@ module PagesCore
6
6
  module ApplicationHelper
7
7
  include PagesCore::HeadTagsHelper
8
8
  include PagesCore::ImagesHelper
9
+ include PagesCore::MetaTagsHelper
10
+ include PagesCore::OpenGraphTagsHelper
11
+ include PagesCore::PagePathHelper
9
12
 
10
13
  def page_link(page, options = {})
11
14
  link_locale = options[:locale] || locale
12
15
  page.localize(link_locale) do |p|
13
16
  title = options[:title] || p.name.to_s
14
17
  return title unless conditional_options?(options)
15
- url = if p.redirects?
16
- p.redirect_path(locale: link_locale)
17
- else
18
- page_path(link_locale, p)
19
- end
20
- link_to(title, url, class: options[:class])
21
- end
22
- end
23
-
24
- def page_url(page_or_locale, page = nil, options = {})
25
- if page
26
- locale = page_or_locale
27
- else
28
- ActiveSupport::Deprecation.warn(
29
- "Calling page_url without locale is deprecated"
30
- )
31
- locale = options[:locale] || @locale
32
- page = page_or_locale
33
- end
34
- page.localize(locale) do |p|
35
- if p.redirects?
36
- p.redirect_path(locale: locale)
37
- else
38
- super locale, p, options
39
- end
18
+ link_to(title, page_link_path(link_locale, p), class: options[:class])
40
19
  end
41
20
  end
42
21
 
@@ -47,7 +26,7 @@ module PagesCore
47
26
  output = capture(page.localize(locale), &block)
48
27
  concat(output)
49
28
  end
50
- (page) ? page.localize(locale) : nil
29
+ page ? page.localize(locale) : nil
51
30
  end
52
31
 
53
32
  private
@@ -61,5 +40,13 @@ module PagesCore
61
40
  true
62
41
  end
63
42
  end
43
+
44
+ def page_link_path(locale, page)
45
+ if page.redirects?
46
+ page.redirect_path(locale: locale)
47
+ else
48
+ page_path(locale, page)
49
+ end
50
+ end
64
51
  end
65
52
  end
@@ -4,184 +4,121 @@ module PagesCore
4
4
  class FormBuilder < ActionView::Helpers::FormBuilder
5
5
  include ActionView::Helpers::TagHelper
6
6
 
7
- # Are there any errors on this attribute?
8
- def errors_on?(attribute)
9
- errors_on(attribute).length > 0
10
- end
11
-
12
- # Returns all errors for the attribute
13
- def errors_on(attribute)
14
- errors = object.errors[attribute] || []
15
- errors = [errors] unless errors.is_a?(Array)
16
- errors
7
+ def field_with_label(attr, str, label = nil)
8
+ classes = ["field"]
9
+ classes << "field-with-errors" if object.errors[attr].any?
10
+ content_tag(:div, label_for(attr, label) + str, class: classes.join(" "))
17
11
  end
18
12
 
19
- # Returns the first error on attribute
20
- def first_error_on(attribute)
21
- errors_on(attribute).first
13
+ def image_file_preview(attribute)
14
+ return "" unless object.send(attribute)
15
+ content_tag(
16
+ :p, @template.dynamic_image_tag(object.send(attribute), size: "120x100")
17
+ )
22
18
  end
23
19
 
24
20
  def image_file_field(attribute, options = {})
25
- if object.send(attribute)
26
- content_tag(
27
- "p",
28
- @template.dynamic_image_tag(object.send(attribute), size: "120x100")
29
- ) + file_field(attribute, options)
30
- else
31
- file_field(attribute, options)
32
- end
21
+ safe_join [image_file_preview(attribute), file_field(attribute, options)]
33
22
  end
34
23
 
35
- def field_with_label(attribute, content, label_text = nil)
36
- classes = ["field"]
37
- classes << "field_with_errors" if errors_on?(attribute)
38
- content_tag(
39
- "div",
40
- label_for(attribute, label_text) + content,
41
- class: classes.join(" ")
42
- )
24
+ def label_and_errors(attribute, label_text)
25
+ 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
+ " ")
43
30
  end
44
31
 
45
32
  def label_for(attribute, label_text = nil)
46
33
  label_text ||= object.class.human_attribute_name(attribute)
47
- if errors_on?(attribute)
48
- label_text += " <span class=\"error\">" +
49
- first_error_on(attribute) +
50
- "</span>"
51
- end
52
- content_tag(
53
- "label",
54
- label_text.html_safe,
55
- for: [object.class.to_s.underscore, attribute].join("_")
56
- )
57
- end
58
-
59
- def labelled_text_field(attribute, label_text = nil, options = {})
60
- label_text, options = parse_label_text_and_options(label_text, options)
61
- field_with_label(
62
- attribute,
63
- text_field(attribute, options),
64
- label_text
65
- )
34
+ content_tag("label", label_and_errors(attribute, label_text),
35
+ for: [object.class.to_s.underscore, attribute].join("_"))
66
36
  end
67
37
 
68
- def labelled_text_area(attribute, label_text = nil, options = {})
69
- label_text, options = parse_label_text_and_options(label_text, options)
70
- field_with_label(
71
- attribute,
72
- text_area(attribute, options),
73
- label_text
74
- )
38
+ def labelled_check_box(
39
+ attribute, label_text = nil, options = {},
40
+ checked_value = "1", unchecked_value = "0"
41
+ )
42
+ labelled_field(attribute, label_text, options) do |opts|
43
+ check_box(attribute, opts, checked_value, unchecked_value)
44
+ end
75
45
  end
76
46
 
77
47
  def labelled_country_select(
78
- attribute,
79
- label_text = nil,
80
- priority_or_options = {},
81
- options = {},
82
- html_options = {}
48
+ attr, label = nil, priority = {}, opts = {}, html_opts = {}
83
49
  )
84
- if priority_or_options.is_a?(Hash)
85
- label_text, priority_or_options = parse_label_text_and_options(
86
- label_text,
87
- priority_or_options
88
- )
89
- else
90
- label_text, options = parse_label_text_and_options(
91
- label_text,
92
- options
93
- )
50
+ if priority.is_a?(Hash)
51
+ return labelled_field(attr, label, priority) do |options|
52
+ country_select(attr, options, opts, html_opts)
53
+ end
54
+ end
55
+ labelled_field(attr, label, opts) do |options|
56
+ country_select(attr, priority, options, html_opts)
94
57
  end
95
- field_with_label(
96
- attribute,
97
- country_select(attribute, priority_or_options, options, html_options),
98
- label_text
99
- )
100
58
  end
101
59
 
102
60
  def labelled_date_select(attribute, label_text = nil, options = {})
103
- label_text, options = parse_label_text_and_options(label_text, options)
104
- field_with_label(
105
- attribute,
106
- date_select(attribute, options),
107
- label_text
108
- )
61
+ labelled_field(attribute, label_text, options) do |opts|
62
+ date_select(attribute, opts)
63
+ end
109
64
  end
110
65
 
111
66
  def labelled_datetime_select(attribute, label_text = nil, options = {})
112
- label_text, options = parse_label_text_and_options(label_text, options)
113
- field_with_label(
114
- attribute,
115
- datetime_select(attribute, options),
116
- label_text
117
- )
67
+ labelled_field(attribute, label_text, options) do |opts|
68
+ datetime_select(attribute, opts)
69
+ end
118
70
  end
119
71
 
120
- def labelled_time_select(attribute, label_text = nil, options = {})
121
- label_text, options = parse_label_text_and_options(label_text, options)
122
- field_with_label(
123
- attribute,
124
- time_select(attribute, options),
125
- label_text
126
- )
72
+ def labelled_file_field(attribute, label_text = nil, options = {})
73
+ labelled_field(attribute, label_text, options) do |opts|
74
+ file_field(attribute, opts)
75
+ end
127
76
  end
128
77
 
129
- def labelled_select(attribute, choices, label_text = nil, options = {})
130
- label_text, options = parse_label_text_and_options(label_text, options)
131
- field_with_label(
132
- attribute,
133
- select(attribute, choices, options),
134
- label_text
135
- )
78
+ def labelled_image_file_field(attribute, label_text = nil, options = {})
79
+ labelled_field(attribute, label_text, options) do |opts|
80
+ image_file_field(attribute, opts)
81
+ end
136
82
  end
137
83
 
138
- def labelled_check_box(
139
- attribute, label_text = nil, options = {},
140
- checked_value = "1", unchecked_value = "0"
141
- )
142
- label_text, options = parse_label_text_and_options(label_text, options)
143
- field_with_label(
144
- attribute,
145
- check_box(attribute, options, checked_value, unchecked_value),
146
- label_text
147
- )
84
+ def labelled_password_field(attribute, label_text = nil, options = {})
85
+ labelled_field(attribute, label_text, options) do |opts|
86
+ password_field(attribute, opts)
87
+ end
148
88
  end
149
89
 
150
- def labelled_file_field(attribute, label_text = nil, options = {})
151
- label_text, options = parse_label_text_and_options(label_text, options)
152
- field_with_label(
153
- attribute,
154
- file_field(attribute, options),
155
- label_text
156
- )
90
+ def labelled_select(attribute, choices, label_text = nil, options = {})
91
+ labelled_field(attribute, label_text, options) do |opts|
92
+ select(attribute, choices, opts)
93
+ end
157
94
  end
158
95
 
159
- def labelled_image_file_field(attribute, label_text = nil, options = {})
160
- label_text, options = parse_label_text_and_options(label_text, options)
161
- field_with_label(
162
- attribute,
163
- image_file_field(attribute, options),
164
- label_text
165
- )
96
+ def labelled_text_area(attribute, label_text = nil, options = {})
97
+ labelled_field(attribute, label_text, options) do |opts|
98
+ text_area(attribute, opts)
99
+ end
166
100
  end
167
101
 
168
- def labelled_password_field(attribute, label_text = nil, options = {})
169
- label_text, options = parse_label_text_and_options(label_text, options)
170
- field_with_label(
171
- attribute,
172
- password_field(attribute, options),
173
- label_text
174
- )
102
+ def labelled_text_field(attribute, label_text = nil, options = {})
103
+ labelled_field(attribute, label_text, options) do |opts|
104
+ text_field(attribute, opts)
105
+ end
106
+ end
107
+
108
+ def labelled_time_select(attribute, label_text = nil, options = {})
109
+ labelled_field(attribute, label_text, options) do |opts|
110
+ time_select(attribute, opts)
111
+ end
175
112
  end
176
113
 
177
114
  protected
178
115
 
179
- def parse_label_text_and_options(label_text = nil, options = {})
116
+ def labelled_field(attribute, label_text = nil, options = {})
180
117
  if label_text.is_a?(Hash) && options == {}
181
118
  options = label_text
182
119
  label_text = nil
183
120
  end
184
- [label_text, options]
121
+ field_with_label(attribute, yield(options), label_text)
185
122
  end
186
123
  end
187
124
  end
@@ -2,25 +2,6 @@
2
2
 
3
3
  module PagesCore
4
4
  module HeadTagsHelper
5
- # Sets a default image to use for meta tags. Supports
6
- # both paths and Image objects.
7
- #
8
- # default_meta_image image_path("facebook-share.png")
9
- # default_meta_image root_page.image
10
- #
11
- def default_meta_image(*args)
12
- if args.any?
13
- @default_meta_image = args.first
14
- else
15
- @default_meta_image
16
- end
17
- end
18
-
19
- # Returns true if default meta image has been set.
20
- def default_meta_image?
21
- default_meta_image ? true : false
22
- end
23
-
24
5
  # Sets a document title.
25
6
  #
26
7
  # document_title "Dashboard"
@@ -35,7 +16,7 @@ module PagesCore
35
16
  )
36
17
  end
37
18
  end
38
- alias_method :page_title, :document_title
19
+ alias page_title document_title
39
20
 
40
21
  # Returns true if document title has been set.
41
22
  def document_title?
@@ -52,18 +33,11 @@ module PagesCore
52
33
  feeds = Page.enabled_feeds(@locale, options)
53
34
  return unless feeds.any?
54
35
  feed_tags = [
55
- rss_link_tag(
56
- PagesCore.config(:site_name),
57
- pages_url(@locale, format: :rss)
58
- )
59
- ]
60
- if feeds.count < 1
61
- feed_tags += feeds.map do |page|
62
- rss_link_tag(
63
- "#{PagesCore.config(:site_name)}: #{page.name}",
64
- page_url(@locale, page, format: :rss)
65
- )
66
- end
36
+ rss_link_tag(PagesCore.config(:site_name),
37
+ pages_url(@locale, format: :rss))
38
+ ] + feeds.map do |page|
39
+ rss_link_tag("#{PagesCore.config(:site_name)}: #{page.name}",
40
+ page_url(@locale, page, format: :rss))
67
41
  end
68
42
  safe_join(feed_tags, "\n")
69
43
  end
@@ -74,17 +48,12 @@ module PagesCore
74
48
  #
75
49
  def google_analytics_tags(account_id)
76
50
  javascript_tag(
77
- "var _gaq = _gaq || [];\n" \
78
- "_gaq.push(['_setAccount', '#{account_id}']);\n" \
79
- "_gaq.push(['_trackPageview']);\n" \
80
- "(function() {\n" \
81
- "var ga = document.createElement('script'); " \
82
- "ga.type = 'text/javascript'; ga.async = true;\n" \
83
- "ga.src = ('https:' == document.location.protocol ? 'https://ssl' " \
84
- ": 'http://www') + '.google-analytics.com/ga.js';\n" \
85
- "var s = document.getElementsByTagName('script')[0]; " \
86
- "s.parentNode.insertBefore(ga, s);\n" \
87
- "})();"
51
+ "(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||" \
52
+ "function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new " \
53
+ "Date();a=s.createElement(o),\nm=s.getElementsByTagName(o)[0];" \
54
+ "a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n})(window," \
55
+ "document,'script','//www.google-analytics.com/analytics.js','ga');" \
56
+ "\n\nga('create', '#{account_id}', 'auto');\nga('send', 'pageview');"
88
57
  )
89
58
  end
90
59
 
@@ -106,89 +75,6 @@ module PagesCore
106
75
  content_tag(:head) { safe_join(head_tag_contents(block_output), "\n") }
107
76
  end
108
77
 
109
- # Sets a description for meta tags.
110
- #
111
- # meta_description "This is an awesome site"
112
- #
113
- def meta_description(*args)
114
- if args.any?
115
- @meta_description = args.first
116
- else
117
- description = @meta_description
118
- description ||= @page.meta_description if @page.try(&:meta_description?)
119
- description ||= @page.excerpt if @page && !@page.excerpt.empty?
120
- strip_tags(description)
121
- end
122
- end
123
-
124
- # Returns true if meta description has been set.
125
- def meta_description?
126
- !meta_description.blank?
127
- end
128
-
129
- # Sets an image to use for meta tags. Supports
130
- # both paths and Image objects.
131
- #
132
- # meta_image image_path("facebook-share.png")
133
- # meta_image @page.image
134
- #
135
- def meta_image(*args)
136
- if args.any?
137
- @meta_image = args.first
138
- else
139
- image = @meta_image
140
- image ||= @page.try(&:meta_image)
141
- image ||= @page.try(&:image)
142
- image ||= default_meta_image
143
- if image.is_a?(Image)
144
- dynamic_image_url(image, size: "1200x", only_path: false)
145
- else
146
- image
147
- end
148
- end
149
- end
150
-
151
- # Returns true if meta image has been set.
152
- def meta_image?
153
- !meta_image.blank? || default_meta_image?
154
- end
155
-
156
- # Sets keywords for meta tags.
157
- #
158
- # meta_keywords "cialis viagra"
159
- #
160
- def meta_keywords(*args)
161
- if args.any?
162
- @meta_keywords = Array(args.first).join(" ")
163
- else
164
- keywords = @meta_keywords
165
- keywords ||= @page.tag_list if @page && @page.tags.any?
166
- strip_tags(keywords)
167
- end
168
- end
169
-
170
- # Returns true if meta keywords have been set.
171
- def meta_keywords?
172
- !meta_keywords.blank?
173
- end
174
-
175
- def open_graph_properties
176
- @_open_graph_properties ||= {}
177
- end
178
-
179
- # Outputs Open Graph tags for Facebook.
180
- def open_graph_tags
181
- properties = default_open_graph_properties.merge(open_graph_properties)
182
- safe_join(
183
- properties
184
- .delete_if { |_, content| content.nil? }
185
- .map do |name, content|
186
- tag(:meta, property: "og:#{name}", content: content)
187
- end,
188
- "\n"
189
- )
190
- end
191
-
192
78
  # Generates a link to an RSS feed.
193
79
  #
194
80
  # rss_link_tag "My feed", "feed.rss"
@@ -209,62 +95,34 @@ module PagesCore
209
95
  #
210
96
  def typekit_tags(kit_id)
211
97
  safe_join([
212
- javascript_include_tag("http://use.typekit.com/#{kit_id}.js"),
213
- javascript_tag("try{Typekit.load();}catch(e){}")
214
- ], "\n")
98
+ javascript_include_tag("http://use.typekit.com/#{kit_id}.js"),
99
+ javascript_tag("try{Typekit.load();}catch(e){}")
100
+ ], "\n")
215
101
  end
216
102
 
217
103
  private
218
104
 
219
- def default_open_graph_title
220
- if @page.try(:open_graph_title?)
221
- @page.open_graph_title
222
- else
223
- document_title
224
- end
225
- end
226
-
227
- def default_open_graph_description
228
- if @page.try(:open_graph_description?)
229
- @page.open_graph_description
230
- elsif meta_description?
231
- meta_description
232
- end
233
- end
234
-
235
- def default_open_graph_properties
236
- {
237
- type: "website",
238
- site_name: PagesCore.config(:site_name),
239
- title: default_open_graph_title,
240
- image: (meta_image if meta_image?),
241
- description: default_open_graph_description,
242
- url: request.url
243
- }
244
- end
245
-
246
- def meta_description_tag
247
- return unless meta_description?
248
- tag(:meta, name: "description", content: meta_description)
249
- end
250
-
251
- def meta_keywords_tag
252
- return unless meta_keywords?
253
- tag(:meta, name: "keywords", content: meta_keywords)
254
- end
255
-
256
105
  def head_tag_contents(block_output)
257
106
  [
258
107
  tag(:meta, charset: "utf-8"),
259
108
  tag(:meta, "http-equiv" => "X-UA-Compatible", "content" => "IE=edge"),
260
109
  content_tag(:title, document_title),
261
- meta_description_tag,
262
- meta_keywords_tag,
110
+ meta_description_tag, meta_keywords_tag,
263
111
  (tag(:link, rel: "image_src", href: meta_image) if meta_image?),
264
112
  open_graph_tags,
265
113
  csrf_meta_tags,
266
114
  block_output
267
115
  ]
268
116
  end
117
+
118
+ def meta_description_tag
119
+ return unless meta_description?
120
+ tag(:meta, name: "description", content: meta_description)
121
+ end
122
+
123
+ def meta_keywords_tag
124
+ return unless meta_keywords?
125
+ tag(:meta, name: "keywords", content: meta_keywords)
126
+ end
269
127
  end
270
128
  end