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
@@ -5,8 +5,8 @@ class PasswordResetToken < ActiveRecord::Base
5
5
 
6
6
  validates :user_id, presence: true
7
7
 
8
- scope :active, -> { where("expires_at >= ?", Time.now) }
9
- scope :expired, -> { where("expires_at < ?", Time.now) }
8
+ scope :active, -> { where("expires_at >= ?", Time.now.utc) }
9
+ scope :expired, -> { where("expires_at < ?", Time.now.utc) }
10
10
 
11
11
  class << self
12
12
  def default_expiration
@@ -18,18 +18,18 @@ class PasswordResetToken < ActiveRecord::Base
18
18
  end
19
19
 
20
20
  def find_by_token(token)
21
- active.where(token: token).first
21
+ active.find_by(token: token)
22
22
  end
23
23
  end
24
24
 
25
25
  def expired?
26
- expires_at < Time.now
26
+ expires_at < Time.now.utc
27
27
  end
28
28
 
29
29
  private
30
30
 
31
31
  def ensure_expiration
32
- self.expires_at ||= Time.now + self.class.default_expiration
32
+ self.expires_at ||= Time.now.utc + self.class.default_expiration
33
33
  end
34
34
 
35
35
  def ensure_token
data/app/models/role.rb CHANGED
@@ -8,7 +8,7 @@ class Role < ActiveRecord::Base
8
8
  class << self
9
9
  def define(name, description, default = false)
10
10
  if roles.map(&:name).include?(name.to_s)
11
- fail ArgumentError, "Tried to define role :#{role}, " \
11
+ raise ArgumentError, "Tried to define role :#{role}, " \
12
12
  "but a role by that name already exists"
13
13
  else
14
14
  roles << OpenStruct.new(
data/app/models/tag.rb CHANGED
@@ -9,32 +9,30 @@ class Tag < ActiveRecord::Base
9
9
 
10
10
  class << self
11
11
  def tags_and_suggestions_for(taggable, options = {})
12
- options = default_options.merge(options)
12
+ limit = options[:limit] || 100
13
13
  tags = (taggable.tags.sorted + pinned.sorted).uniq
14
- if tags.count < options[:limit]
15
- suggested = suggestions(tags, options)
16
- tags = tags.to_a + suggested[0...(options[:limit] - tags.length)]
17
- end
18
- tags
14
+
15
+ return tags unless tags.count < limit
16
+ tags + suggestions(tags, limit)[0...(limit - tags.length)]
19
17
  end
20
18
 
21
19
  def parse(*tags)
22
20
  Array(tags).flatten
23
- .map { |tag| tag.is_a?(Tag) ? tag.name : tag }
24
- .map { |tag| tag.split(",") }
25
- .flatten
26
- .map(&:strip)
21
+ .map { |tag| tag.is_a?(Tag) ? tag.name : tag }
22
+ .map { |tag| tag.split(",") }
23
+ .flatten
24
+ .map(&:strip)
27
25
  end
28
26
 
29
27
  private
30
28
 
31
- def suggestions(tags, options = {})
29
+ def suggestions(tags, limit)
32
30
  Tag.joins(:taggings)
33
- .select("`tags`.*, COUNT(`tags`.id) AS counter")
34
- .group("`tags`.id")
35
- .order("counter DESC")
36
- .limit(options[:limit])
37
- .reject { |t| tags.include?(t) }
31
+ .select("tags.*, COUNT(tags.id) AS counter")
32
+ .group("tags.id")
33
+ .order("counter DESC")
34
+ .limit(limit)
35
+ .reject { |t| tags.include?(t) }
38
36
  end
39
37
 
40
38
  def default_options
@@ -4,7 +4,8 @@ class Tagging < ActiveRecord::Base
4
4
  belongs_to :tag
5
5
  belongs_to :taggable, polymorphic: true
6
6
 
7
- validates_presence_of :taggable_id, :taggable_type
7
+ validates :taggable_id, presence: true
8
+ validates :taggable_type, presence: true
8
9
  validates :tag_id,
9
10
  presence: true,
10
11
  uniqueness: { scope: [:taggable_type, :taggable_id] }
data/app/models/user.rb CHANGED
@@ -50,8 +50,8 @@ class User < ActiveRecord::Base
50
50
 
51
51
  # Finds a user by either username or email address.
52
52
  def find_by_username_or_email(string)
53
- where(username: string.to_s).first ||
54
- where(email: string.to_s).first
53
+ find_by(username: string.to_s) ||
54
+ find_by(email: string.to_s)
55
55
  end
56
56
  end
57
57
 
@@ -65,12 +65,12 @@ class User < ActiveRecord::Base
65
65
  end
66
66
 
67
67
  def can_login?
68
- self.activated?
68
+ activated?
69
69
  end
70
70
 
71
71
  def mark_active!
72
72
  return if last_login_at && last_login_at > 10.minutes.ago
73
- update_columns(last_login_at: Time.now)
73
+ update_columns(last_login_at: Time.now.utc)
74
74
  end
75
75
 
76
76
  def name_and_email
@@ -122,10 +122,9 @@ class User < ActiveRecord::Base
122
122
 
123
123
  def valid_password?(password)
124
124
  if hashed_password.length <= 40
125
- return true if hashed_password == Digest::SHA1.hexdigest(password)
125
+ hashed_password == Digest::SHA1.hexdigest(password)
126
126
  else
127
- return true if BCrypt::Password.new(hashed_password) == password
127
+ BCrypt::Password.new(hashed_password) == password
128
128
  end
129
- false
130
129
  end
131
130
  end
@@ -15,10 +15,6 @@ class PagePolicy < Policy
15
15
  def new_news?
16
16
  create?
17
17
  end
18
-
19
- def reorder_pages?
20
- create?
21
- end
22
18
  end
23
19
 
24
20
  module Member
@@ -29,5 +25,13 @@ class PagePolicy < Policy
29
25
  def edit?
30
26
  user.role?(:pages)
31
27
  end
28
+
29
+ def move?
30
+ edit?
31
+ end
32
+
33
+ def delete_meta_image?
34
+ edit?
35
+ end
32
36
  end
33
37
  end
@@ -9,7 +9,7 @@ class UserPolicy < Policy
9
9
  end
10
10
 
11
11
  def new?
12
- (!User.any?) || user.role?(:users)
12
+ !User.any? || user.role?(:users)
13
13
  end
14
14
 
15
15
  def create?
@@ -0,0 +1,15 @@
1
+ class PageTreeSerializer < ActiveModel::Serializer
2
+ attributes :id, :param, :parent_page_id, :locale, :status, :news_page
3
+ attributes :name
4
+ attributes :published_at, :pinned
5
+
6
+ has_many :children, serializer: PageTreeSerializer
7
+
8
+ def children
9
+ object.subpages.visible.in_locale(object.locale)
10
+ end
11
+
12
+ def param
13
+ object.to_param
14
+ end
15
+ end
@@ -9,7 +9,8 @@
9
9
 
10
10
  <%= form_for [:admin, @invite], builder: PagesCore::FormBuilder do |f| %>
11
11
  <%= f.labelled_text_field :email %>
12
- <%= render partial: "admin/users/access_control", locals: { user: @user, f: f } %>
12
+ <%= render(partial: "admin/users/access_control",
13
+ locals: { user: @user, f: f }) %>
13
14
  <button type="submit">
14
15
  Send invite
15
16
  </button>
@@ -9,17 +9,16 @@
9
9
  </p>
10
10
  </div>
11
11
 
12
- <%= form_for @user, url: accept_admin_invite_path(@invite, token: @invite.token), builder: PagesCore::FormBuilder do |f| %>
13
-
12
+ <%= form_for(@user,
13
+ url: accept_admin_invite_path(@invite, token: @invite.token),
14
+ builder: PagesCore::FormBuilder) do |f| %>
14
15
  <%= f.labelled_text_field :name %>
15
16
  <%= f.labelled_text_field :email %>
16
17
  <%= f.labelled_password_field :password %>
17
18
  <%= f.labelled_password_field :confirm_password %>
18
-
19
19
  <p>
20
20
  <button type="submit">
21
21
  Sign up
22
22
  </button>
23
23
  </p>
24
-
25
24
  <% end %>
@@ -3,19 +3,35 @@
3
3
  <tr>
4
4
  <td>
5
5
  <p>
6
- <strong><%= c.name %></strong><br />
7
- <% if c.email? %><%= mail_to c.email, c.email %><br /><% end %>
8
- <% if c.url? %><%= link_to c.url, c.url %><br /><% end %>
6
+ <strong>
7
+ <%= c.name %>
8
+ </strong>
9
+ <br />
10
+ <% if c.email? %>
11
+ <%= mail_to c.email, c.email %>
12
+ <br />
13
+ <% end %>
14
+ <% if c.url? %>
15
+ <%= link_to c.url, c.url %>
16
+ <br />
17
+ <% end %>
9
18
  </p>
10
19
  <p>
11
- <%= time_ago_in_words c.created_at %> ago<br />
20
+ <%= time_ago_in_words c.created_at %>
21
+ ago<br />
12
22
  from <%= c.remote_ip %>
13
23
  </p>
14
24
  <p>
15
- <%= link_to "Delete comment", admin_page_comment_url(@locale, @page, c), class: :delete, data: {confirm: "Are you sure?"}, method: :delete %>
25
+ <%= link_to("Delete comment",
26
+ admin_page_comment_url(@locale, @page, c),
27
+ class: :delete,
28
+ data: { confirm: "Are you sure?" },
29
+ method: :delete) %>
16
30
  </p>
17
31
  </td>
18
- <td><%= c.body %></td>
32
+ <td>
33
+ <%= c.body %>
34
+ </td>
19
35
  </tr>
20
36
  <% end %>
21
37
  </table>
@@ -4,7 +4,9 @@
4
4
 
5
5
  <% if !@page.new_record? && @page.template_config.value(:tags) %>
6
6
  <div class="field">
7
- <label>Tags</label>
8
- <%= tag_editor_for f, @page %>
7
+ <label>
8
+ Tags
9
+ </label>
10
+ <%= tag_editor_for(f, @page) %>
9
11
  </div>
10
12
  <% end %>
@@ -1,84 +1,95 @@
1
- <div class="page_images">
2
-
3
- <div class="editor">
4
- <div class="controls">
5
- <div class="nav">
6
- <%= link_to "Close", '#', class: :close %>
7
- </div>
8
- <h4>Image Editor</h4>
9
- <%= fields_for PageImage.new do |pi| %>
10
- <%= pi.fields_for :image_attributes, Image.new do |i| %>
11
- <%= i.hidden_field :id, class: 'image_id' %>
12
- <fieldset>
13
- <label>
14
- Alternative text
15
- </label>
16
- <%= i.text_field(:alternative,
17
- class: 'alternative',
18
- placeholder: 'Alternative text') %>
19
- </fieldset>
20
- <fieldset class="caption-fieldset">
21
- <label>
22
- Caption
23
- </label>
24
- <%= i.text_field(:caption,
25
- class: 'caption',
26
- placeholder: 'Write your caption/byline') %>
27
- </fieldset>
28
- <%= text_field_tag 'embed', '', class: 'embed' %>
29
- <%= pi.check_box :primary %><label>Primary</label>
30
- <%= i.hidden_field :crop_start_x, class: 'crop_start_x' %>
31
- <%= i.hidden_field :crop_start_y, class: 'crop_start_y' %>
32
- <%= i.hidden_field :crop_width, class: 'crop_width' %>
33
- <%= i.hidden_field :crop_height, class: 'crop_height' %>
34
- <% end %>
35
-
36
- <button class="save">
37
- Save
38
- </button>
39
-
40
- <%= link_to "Delete image", '#', class: :delete %>
41
- <% end %>
42
- </div>
43
- <div class="edit-image-container">
44
- <%= link_to "", '#', class: :previous %>
45
- <%= link_to "", '#', class: :next %>
46
- <div class="edit-image">
47
- </div>
1
+ <div class="page_images">
2
+ <div class="editor">
3
+ <div class="controls">
4
+ <div class="nav">
5
+ <%= link_to("Close", '#', class: :close) %>
48
6
  </div>
49
- </div>
7
+ <h4>Image Editor</h4>
8
+ <%= fields_for PageImage.new do |pi| %>
9
+ <%= pi.fields_for(:image_attributes, Image.new) do |i| %>
10
+ <%= i.hidden_field :id, class: 'image_id' %>
11
+ <fieldset>
12
+ <label>
13
+ Alternative text
14
+ </label>
15
+ <%= i.text_field(:alternative,
16
+ class: 'alternative',
17
+ placeholder: 'Alternative text') %>
18
+ </fieldset>
19
+ <fieldset class="caption-fieldset">
20
+ <label>
21
+ Caption
22
+ </label>
23
+ <%= i.text_field(:caption,
24
+ class: 'caption',
25
+ placeholder: 'Write your caption/byline') %>
26
+ </fieldset>
27
+ <%= text_field_tag 'embed', '', class: 'embed' %>
28
+ <%= pi.check_box :primary %><label>Primary</label>
29
+ <%= i.hidden_field :crop_start_x, class: 'crop_start_x' %>
30
+ <%= i.hidden_field :crop_start_y, class: 'crop_start_y' %>
31
+ <%= i.hidden_field :crop_width, class: 'crop_width' %>
32
+ <%= i.hidden_field :crop_height, class: 'crop_height' %>
33
+ <% end %>
50
34
 
51
- <div class="uploadButton">
52
- <p>
53
- <button type="button" class="upload-images-button">
54
- Upload images
35
+ <button class="save">
36
+ Save
55
37
  </button>
56
- </p>
57
- </div>
58
-
59
- <div class="no_images">
60
- <p>No images have been uploaded.</p>
61
- </div>
62
38
 
63
- <div class="primary_container">
64
- <% if @page.image? && (page_image = @page.page_images.select{|pi| pi.primary?}.first) %>
65
- <a class="image primary"
66
- data-page-image-id="<%= page_image.id %>"
67
- data-uncropped-url="<%= uncropped_dynamic_image_path(page_image.image, size: '2000x2000') %>"
68
- href="<%= dynamic_image_url page_image.image, size: '2000x2000' %>">
69
- <%= dynamic_image_tag(page_image.image, size: '380x380', crop: true, upscale: true) %>
70
- </a>
39
+ <%= link_to "Delete image", '#', class: :delete %>
71
40
  <% end %>
72
41
  </div>
73
- <div class="images clearfix">
74
- <% @page.page_images.reject{|pi| pi.primary?}.each do |i| %>
75
- <a class="image"
76
- data-page-image-id="<%= i.id %>"
77
- data-uncropped-url="<%= uncropped_dynamic_image_path(i.image, size: '2000x2000') %>"
78
- href="<%= dynamic_image_url i.image, size: '2000x2000' %>">
79
- <%= dynamic_image_tag(i.image, size: '240x240', crop: true, upscale: true) %>
80
- </a>
81
- <% end %>
42
+ <div class="edit-image-container">
43
+ <%= link_to "", '#', class: :previous %>
44
+ <%= link_to "", '#', class: :next %>
45
+ <div class="edit-image">
46
+ </div>
82
47
  </div>
48
+ </div>
83
49
 
50
+ <div class="uploadButton">
51
+ <p>
52
+ <button type="button" class="upload-images-button">
53
+ Upload images
54
+ </button>
55
+ </p>
56
+ </div>
57
+
58
+ <div class="no_images">
59
+ <p>No images have been uploaded.</p>
60
+ </div>
61
+
62
+ <div class="primary_container">
63
+ <% if @page.image? &&
64
+ (page_image = @page.page_images.select{|pi| pi.primary?}.first) %>
65
+ <a class="image primary"
66
+ data-page-image-id="<%= page_image.id %>"
67
+ data-uncropped-url="<%= uncropped_dynamic_image_path(
68
+ page_image.image,
69
+ size: '2000x2000')
70
+ %>"
71
+ href="<%= dynamic_image_url page_image.image, size: '2000x2000' %>">
72
+ <%= dynamic_image_tag(page_image.image,
73
+ size: '380x380',
74
+ crop: true,
75
+ upscale: true) %>
76
+ </a>
77
+ <% end %>
78
+ </div>
79
+ <div class="images clearfix">
80
+ <% @page.page_images.reject{|pi| pi.primary?}.each do |i| %>
81
+ <a class="image"
82
+ data-page-image-id="<%= i.id %>"
83
+ data-uncropped-url="<%= uncropped_dynamic_image_path(
84
+ i.image,
85
+ size: '2000x2000')
86
+ %>"
87
+ href="<%= dynamic_image_url i.image, size: '2000x2000' %>">
88
+ <%= dynamic_image_tag(i.image,
89
+ size: '240x240',
90
+ crop: true,
91
+ upscale: true) %>
92
+ </a>
93
+ <% end %>
84
94
  </div>
95
+ </div>