pages_core 3.4.3 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.
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