workarea-blog 3.4.9 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/{.eslintrc → .eslintrc.json} +12 -1
  3. data/.github/workflows/ci.yml +6 -0
  4. data/CHANGELOG.md +18 -36
  5. data/Gemfile +3 -3
  6. data/app/controllers/workarea/storefront/application_controller.decorator +5 -0
  7. data/app/helpers/workarea/storefront/blogs_helper.rb +44 -0
  8. data/app/view_models/workarea/admin/blog_entry_view_model.rb +1 -1
  9. data/app/view_models/workarea/storefront/blog_entry_view_model.rb +1 -1
  10. data/app/view_models/workarea/storefront/blog_view_model.rb +3 -3
  11. data/app/views/workarea/admin/content_blog_comments/_summary.html.haml +21 -9
  12. data/app/views/workarea/admin/content_blog_comments/index.html.haml +8 -7
  13. data/app/views/workarea/admin/content_blog_entries/_cards.html.haml +1 -1
  14. data/app/views/workarea/admin/content_blog_entries/edit.html.haml +2 -1
  15. data/app/views/workarea/admin/content_blogs/edit.html.haml +2 -1
  16. data/app/views/workarea/storefront/blog_entries/_summary.html.haml +12 -11
  17. data/app/views/workarea/storefront/blog_entries/show.html.haml +20 -20
  18. data/app/views/workarea/storefront/blog_metadata/_publisher.html.haml +3 -2
  19. data/app/views/workarea/storefront/blogs/index.html.haml +4 -4
  20. data/app/views/workarea/storefront/blogs/show.html.haml +2 -2
  21. data/config/initializers/content_block_types.rb +1 -1
  22. data/config/initializers/fields.rb +9 -0
  23. data/config/initializers/rack_attack.rb +11 -0
  24. data/config/initializers/workarea.rb +0 -3
  25. data/config/locales/en.yml +2 -0
  26. data/lib/workarea/blog/import/wordpress/content_cleaner.rb +1 -1
  27. data/lib/workarea/blog/version.rb +1 -1
  28. data/package.json +9 -0
  29. data/test/dummy/config/initializers/session_store.rb +1 -1
  30. data/test/factories/wordpress_import.rb +8 -10
  31. data/test/integration/workarea/blog/rack_attack_integration_test.rb +50 -0
  32. data/test/system/workarea/admin/blog_user_comments_system_test.rb +41 -1
  33. data/test/view_models/workarea/storefront/blog_view_model_test.rb +8 -7
  34. data/workarea-blog.gemspec +3 -3
  35. metadata +14 -9
  36. data/.scss-lint.yml +0 -188
  37. data/.tailor +0 -180
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05dd002e82b59940b44ec0428f8b851bf67df28ba9e927cedafd4c567e509386
4
- data.tar.gz: d65ee90babfb6388d41c1b4ad3e43ad6474ac51a58f23ed3e0a634eee6c3a336
3
+ metadata.gz: 1878d11681c83efaba7d10e166b5e023802ed47fc4d345557e20231d8162d976
4
+ data.tar.gz: 5cfe18cd84ae7856383d28260e3b2a365490bb7a312fe378ea14228298eabe84
5
5
  SHA512:
6
- metadata.gz: bc739ac4a5aec8e70a6326d0ac43a6d1a45b80cae2ff827d39f5e4fcd5a4c3ced652c0faca28616ea02d9b49c65ccd330ab880fa3d5892afd179d038c98ef564
7
- data.tar.gz: dcaec863fb1f1d7da54a4ee2ea96664fce82f355fa6782b8084887f03b2b06b85525198afc3715a310ecca2f405a248f07c892e91ea9af988abd432d38e093ef
6
+ metadata.gz: 2305993048e16f2308caac39eafd6368afe79582ff461b461f9b597436c3ea50ca13fc5af19b0f014dc1d6fffc947195bf6f0bd50426c9461798adab544f3597
7
+ data.tar.gz: 89c04450a1f4798f27085014d36077b55647a72b99d8a332d4381673ab90b551552017a909f0d72a5ecf23ca4db1587b1fa4ed88a519ae45c1f1edfb7dc4218c
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "extends": "eslint:recommended",
3
3
  "rules": {
4
- "semi": [1, "always"]
4
+ "semi": ["error", "always"],
5
+ "eqeqeq": ["error", "always"]
5
6
  },
6
7
  "globals": {
7
8
  "window": true,
@@ -20,5 +21,15 @@
20
21
  "Waypoint": true,
21
22
  "wysihtml": true,
22
23
  "LocalTime": true,
24
+ "describe": true,
25
+ "after": true,
26
+ "afterEach": true,
27
+ "before": true,
28
+ "beforeEach": true,
29
+ "it": true,
30
+ "expect": true,
31
+ "sinon": true,
32
+ "fixture": true,
33
+ "chai": true
23
34
  }
24
35
  }
@@ -8,6 +8,12 @@ jobs:
8
8
  - uses: actions/checkout@v1
9
9
  - uses: workarea-commerce/ci/bundler-audit@v1
10
10
  - uses: workarea-commerce/ci/rubocop@v1
11
+ - uses: workarea-commerce/ci/eslint@v1
12
+ with:
13
+ args: '**/*.js'
14
+ - uses: workarea-commerce/ci/stylelint@v1
15
+ with:
16
+ args: '**/*.scss'
11
17
 
12
18
  admin_tests:
13
19
  runs-on: ubuntu-latest
data/CHANGELOG.md CHANGED
@@ -1,53 +1,35 @@
1
- Workarea Blog 3.4.9 (2019-10-16)
1
+ Workarea Blog 3.5.0 (2019-11-26)
2
2
  --------------------------------------------------------------------------------
3
3
 
4
- * Fix Content Search Text for Blog Entries
4
+ * Fix Deprecation Warnings When Querying Entries
5
5
 
6
- Since workarea-commerce/workarea-content-search#1 seems to be on the
7
- back burner for now, and regardless of this blogs will have to handle
8
- their search summary text on their own anyway. Update
9
- `Search::Storefront::Content` to use the blog entry summary if it
10
- exists, falling back to whatever the content-search gem uses to generate
11
- its text. At the moment, this involves extracting text from content
12
- blocks that have more than 5 words in them, but this may change in the
13
- next major.
6
+ Use the `.select(&:active?)` format instead of the `.active` scope on
7
+ blog entries so that segmentation and releases are respected. Also fix
8
+ content block types syntax and add some test coverage when pulling
9
+ entries directly from the DB.
14
10
 
15
- (#6)
11
+ BLOG-11
16
12
  Tom Scott
17
13
 
14
+ * Replace usage of deprecated Content.define_block_types
18
15
 
16
+ Matt Duffy
19
17
 
20
- Workarea Blog 3.4.8 (2019-10-01)
21
- --------------------------------------------------------------------------------
22
-
23
- * Fix Blog Entries Total Count
24
-
25
- The `#total` method on `Storefront::BlogEntryViewModel` was not
26
- returning the actual total amount of entries if they exceeded 25, due to
27
- Kaminari's default pagination. Use `scoped_entries.total_count` here to
28
- avoid the problem.
29
- Tom Scott
30
-
31
-
32
-
33
- Workarea Blog 3.4.7 (2019-08-21)
34
- --------------------------------------------------------------------------------
35
-
36
- * Open Source!
18
+ * Replace usage of Content::Asset#placeholder with #image_placeholder
37
19
 
20
+ Workarea v3.5 removes the #placeholder method in favor of the more
21
+ specific #image_placeholder
38
22
 
23
+ BLOG-10
24
+ Matt Duffy
39
25
 
40
- Workarea Blog 3.4.6 (2019-06-11)
41
- --------------------------------------------------------------------------------
26
+ * Move blog_entries_on_index config to administrable fields (#1)
42
27
 
43
- * Remove Release Selector When Editing Blog Comments
28
+ Matt Duffy
44
29
 
45
- Since blog comments are not releasable, remove the current release
46
- selector from the top of the page which assumes that you're previewing
47
- content for a future release.
30
+ * Initial commit on master
48
31
 
49
- BLOG-184
50
- Tom Scott
32
+ Curt Howard
51
33
 
52
34
 
53
35
 
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'https://rubygems.org'
2
- git_source(:github) { |repo| "git@github.com:#{repo}.git" }
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
4
  gemspec
5
5
 
6
6
  gem 'listen'
7
- gem 'workarea'
8
- gem 'workarea-content_search'
7
+
8
+ gem 'workarea', github: 'workarea-commerce/workarea'
@@ -0,0 +1,5 @@
1
+ module Workarea
2
+ decorate Storefront::ApplicationController, with: :blog do
3
+ decorated { helper Storefront::BlogsHelper }
4
+ end
5
+ end
@@ -0,0 +1,44 @@
1
+ module Workarea
2
+ module Storefront
3
+ module BlogsHelper
4
+ def blog_posting_schema(entry)
5
+ {
6
+ '@context': 'http://schema.org',
7
+ '@type': 'BlogPosting',
8
+ 'url': blog_entry_url(entry),
9
+ 'image': entry.thumbnail_image_url.presence,
10
+ 'mainEntityOfPage': true,
11
+ 'headline': entry.name,
12
+ 'dateCreated': entry.created_at.to_date,
13
+ 'datePublished': entry.written_at.to_date,
14
+ 'dateModified': entry.updated_at.to_date,
15
+ 'commentCount': entry.comment_count,
16
+ 'keywords': entry.tags,
17
+ 'publisher': {
18
+ '@type': 'Organization',
19
+ 'name': Workarea.config.site_name,
20
+ 'url': root_url,
21
+ 'logo': image_url('workarea/storefront/logo.png')
22
+ },
23
+ 'author': {
24
+ '@type': 'Person',
25
+ 'name': entry.author
26
+ },
27
+ 'articleBody': strip_tags(
28
+ render_content_blocks(
29
+ entry.content_blocks_for('blog_content')
30
+ ).html_safe
31
+ ),
32
+ comment: entry.comments.map do |comment|
33
+ {
34
+ '@type': 'Comment',
35
+ 'author': comment.user_info,
36
+ 'dateCreated': comment.created_at.to_date,
37
+ 'text': comment.body
38
+ }
39
+ end
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -18,7 +18,7 @@ module Workarea
18
18
  hash[key] = begin
19
19
  Content::Asset.find(id)
20
20
  rescue StandardError
21
- Content::Asset.placeholder
21
+ Content::Asset.image_placeholder
22
22
  end
23
23
  end
24
24
 
@@ -29,7 +29,7 @@ module Workarea
29
29
  @assets[id.to_s] = begin
30
30
  Content::Asset.find(id)
31
31
  rescue StandardError
32
- Content::Asset.placeholder
32
+ Content::Asset.image_placeholder
33
33
  end
34
34
  end
35
35
 
@@ -48,7 +48,7 @@ module Workarea
48
48
  end
49
49
 
50
50
  def updated_at
51
- @updated_at ||= model.entries.active.newest.first.try(:updated_at)
51
+ @updated_at ||= model.entries.newest.select(&:active?).first.try(:updated_at)
52
52
  end
53
53
 
54
54
  private
@@ -58,7 +58,7 @@ module Workarea
58
58
  end
59
59
 
60
60
  def scoped_entries
61
- return scoped_entries_from_database if current_release.published?
61
+ return scoped_entries_from_database.page unless Release.current.present?
62
62
 
63
63
  Kaminari.paginate_array(scoped_entries_filtered_by_current_release)
64
64
  end
@@ -68,7 +68,7 @@ module Workarea
68
68
  end
69
69
 
70
70
  def scoped_entries_from_database
71
- scope = ordered_entries.active
71
+ scope = ordered_entries.where(active: true)
72
72
  scope = scope.tagged_with(options[:tag]) if options[:tag].present?
73
73
  scope
74
74
  end
@@ -7,18 +7,30 @@
7
7
  %p.comments__comment-time
8
8
  #{time_ago_in_words(model.created_at)} ago
9
9
  - if model.pending
10
- %span= t('workarea.admin.content_blogs_comments.summary.pending')
10
+ = t('workarea.admin.content_blogs_comments.summary.pending')
11
11
  .comments__comment-actions
12
12
  .grid.grid--auto
13
- %p.grid__cell
13
+ .grid__cell
14
14
  = link_to edit_content_blog_user_comment_path(model), class: 'text-button' do
15
- Edit
16
- = inline_svg('workarea/admin/icons/edit.svg', class: 'text-button__icon')
15
+ %span.grid.grid--auto.grid--middle
16
+ %span.grid__cell= t('workarea.admin.actions.edit')
17
+ %span.grid__cell= inline_svg('workarea/admin/icons/edit.svg', class: 'text-button__icon')
18
+ .grid__cell
19
+ = link_to content_blog_user_comment_path(model), class: 'text-button text-button--destroy', remote: true, data: { method: 'delete' } do
20
+ %span.grid.grid--auto.grid--middle
21
+ %span.grid__cell= t('workarea.admin.actions.delete')
22
+ %span.grid__cell= inline_svg('workarea/admin/icons/delete.svg', class: 'text-button__icon')
23
+ - if model.pending?
24
+ .grid__cell
25
+ = link_to content_blog_user_comment_path(model), class: 'text-button text-button--create', remote: true, data: { method: 'put', params: { 'blog_comment[approved]' => true } } do
26
+ %span.grid.grid--auto.grid--middle
27
+ %span.grid__cell= t('workarea.admin.content_blogs_comments.index.approve')
28
+ %span.grid__cell= inline_svg('workarea/admin/icons/recommendations.svg', class: 'text-button__icon')
29
+ .grid__cell
30
+ = link_to content_blog_user_comment_path(model), class: 'text-button text-button--destroy', remote: true, data: { method: 'put', params: { 'blog_comment[approved]' => false } } do
31
+ %span.grid.grid--auto.grid--middle
32
+ %span.grid__cell= t('workarea.admin.content_blogs_comments.index.deny')
33
+ %span.grid__cell= inline_svg('workarea/admin/icons/close.svg', class: 'text-button__icon')
17
34
 
18
- = form_tag content_blog_user_comment_path(model), method: 'delete', class: 'grid__cell' do
19
- %p
20
- = button_tag t('workarea.admin.actions.delete'), value: 'delete_comment', class: 'text-button text-button--destroy' do
21
- = t('workarea.admin.actions.delete')
22
- = inline_svg('workarea/admin/icons/delete.svg', class: 'text-button__icon')
23
35
  .comments__comment-body
24
36
  %p= model.body
@@ -18,7 +18,10 @@
18
18
  = render_aux_navigation_for(@blog_comments.blog_entry)
19
19
 
20
20
  .view__container.view__container--narrow
21
- - if @blog_comments.comments.any?
21
+ - if @blog_comments.comments.empty?
22
+ %p= t('workarea.admin.content_blogs_comments.index.no_comments_found')
23
+
24
+ - else
22
25
  - form_path = @blog_comments.blog_entry.present? ? content_blog_user_comments_path(content_blog_entry_id: @blog_comments.blog_entry) : content_blog_user_comments_path
23
26
  = form_tag form_path, method: 'get', id: 'blog_comments_sort_form' do
24
27
  = hidden_field_tag 'content_blog_entry_id', params[:content_blog_entry_id] if params[:content_blog_entry_id].present?
@@ -31,9 +34,10 @@
31
34
  %p.browsing-controls__count{ data: { browsing_controls_count: @blog_comments.comments.total_count } }
32
35
  = t('workarea.admin.content_blogs_comments.index.comments', count: @blog_comments.comments.total_count)
33
36
 
34
- .comments__comment-group
35
- - @blog_comments.comments.each do |blog_comment|
36
- = render_summary_for(blog_comment)
37
+ .section
38
+ .comments__comment-group
39
+ - @blog_comments.comments.each do |blog_comment|
40
+ = render_summary_for(blog_comment)
37
41
 
38
42
  - if @blog_comments.comments.total_pages > 1
39
43
  = render 'workarea/admin/shared/pagination', collection: @blog_comments.comments
@@ -44,6 +48,3 @@
44
48
  .grid.grid--auto
45
49
  .grid__cell= link_to t('workarea.admin.shared.bulk_actions.import'), new_data_file_import_path(model_type: Workarea::Content::BlogComment, return_to: form_path), class: 'workflow-bar__button'
46
50
  .grid__cell= link_to t('workarea.admin.shared.bulk_actions.export'), new_data_file_export_path(model_type: Workarea::Content::BlogComment, query_id: generic_admin_search_query_id(model_type: Workarea::Content::BlogComment, entry_id: @blog_comments&.blog_entry&.id), return_to: form_path), class: 'workflow-bar__button'
47
-
48
- - else
49
- %p= t('workarea.admin.content_blogs_comments.index.no_comments_found')
@@ -41,7 +41,7 @@
41
41
  - if local_assigns[:active].blank?
42
42
  .card__body
43
43
  - if model.thumbnail_image.present?
44
- = image_tag(model.thumbnail_image_url, itemprop: 'image' )
44
+ = image_tag(model.thumbnail_image_url)
45
45
  = link_to thumbnail_image_content_blog_entry_path(model), class: 'card__button' do
46
46
  %span.button.button--small= t('workarea.admin.content_blog_entries.cards.thumbnail_image.button_edit')
47
47
  - else
@@ -38,7 +38,8 @@
38
38
  .property
39
39
  = label_tag 'blog_entry[slug]', t('workarea.admin.content_blog_entries.edit.slug_label'), class: 'property__name'
40
40
  %span= storefront.blog_entry_url('')
41
- = text_field_tag 'blog_entry[slug]', @blog_entry.slug, class: 'text-box text-box--medium', placeholder: @blog_entry.slug || 'your-slug-here'
41
+ = text_field_tag 'blog_entry[slug]', @blog_entry.slug, class: 'text-box text-box--medium', placeholder: @blog_entry.slug || 'your-slug-here', disabled: current_release.present?
42
+ = render 'workarea/admin/shared/release_slug_tooltip'
42
43
 
43
44
  .property
44
45
  = label_tag 'blog_entry[author]', nil, class: 'property__name' do
@@ -32,8 +32,9 @@
32
32
  %span.property__text= t('workarea.admin.content_blogs.edit.page_url')
33
33
 
34
34
  %span= storefront.blog_url('')
35
- = text_field_tag 'blog[slug]', @blog.slug, class: 'text-box text-box--medium', placeholder: @blog.slug || 'your-slug-here'
35
+ = text_field_tag 'blog[slug]', @blog.slug, class: 'text-box text-box--medium', placeholder: @blog.slug || 'your-slug-here', disabled: current_release.present?
36
36
  %span.property__note= t('workarea.admin.content_blogs.edit.page_url_note')
37
+ = render 'workarea/admin/shared/release_slug_tooltip'
37
38
 
38
39
  .grid
39
40
  .grid__cell.grid__cell--50.grid__cell--25-at-medium
@@ -1,25 +1,26 @@
1
- %article.blog-entry-summary__entry{ class: entry.featured ? 'blog-entry-summary__entry--featured' : '', itemprop: 'blogPost', itemscope: true, itemtype: 'http://schema.org/BlogPosting', data: { pagination_item: '' } }
1
+ = render_schema_org(blog_posting_schema(entry))
2
+
3
+ %article.blog-entry-summary__entry{ class: entry.featured ? 'blog-entry-summary__entry--featured' : '', data: { pagination_item: '' } }
2
4
  %heading
3
- %h2.blog-entry-summary__entry-title{ itemprop: 'mainEntityOfPage' }
4
- %span{ itemprop: 'headline' }= link_to entry.name, blog_entry_path(entry), itemprop: 'url'
5
+ %h2.blog-entry-summary__entry-title
6
+ %span= link_to entry.name, blog_entry_path(entry)
5
7
 
6
- %p.blog-entry-summary__entry-author{ itemprop: 'author', itemscope: '', itemType: 'http://schema.org/Person' }
7
- %span{ itemprop: 'name' }= entry.author
8
+ %p.blog-entry-summary__entry-author
9
+ %span= entry.author
8
10
  %p.blog-entry-summary__entry-datetime
9
- = local_time(entry.written_at, format: :long, itemprop: 'datePublished dateModified')
10
- %p.blog-entry-summary__entry-comment-count{ itemprop: 'commentCount' }= link_to t('workarea.storefront.blogs.comments', count: entry.comment_count), blog_entry_path(entry, anchor: 'blog-entry-comments')
11
- = render 'workarea/storefront/blog_metadata/publisher'
11
+ = local_time(entry.written_at, format: :long)
12
+ %p.blog-entry-summary__entry-comment-count= link_to t('workarea.storefront.blogs.comments', count: entry.comment_count), blog_entry_path(entry, anchor: 'blog-entry-comments')
12
13
 
13
14
  - if entry.has_thumbnail_image?
14
- %p.blog-entry-summary__entry-thumbnail= image_tag(entry.thumbnail_image_url, itemprop: 'image' )
15
+ %p.blog-entry-summary__entry-thumbnail= image_tag(entry.thumbnail_image_url)
15
16
 
16
17
  - if entry.tags.present?
17
18
  .blog-entry-summary__entry-tags
18
19
  %p.blog-entry-summary__entry-label= t('workarea.storefront.blogs.tags')
19
- %ul.blog-entry-summary__entry-tags-list{ itemprop: 'keywords' }
20
+ %ul.blog-entry-summary__entry-tags-list
20
21
  - entry.tags.each do |tag|
21
22
  %li.blog-entry-summary__entry-tags-list-item= link_to tag, blog_tagged_path(entry.blog, tag)
22
23
 
23
- .blog-entry-summary__content{ itemprop: 'description' }
24
+ .blog-entry-summary__content
24
25
  = entry.summary
25
26
  = link_to t('workarea.storefront.blogs.read_more'), blog_entry_path(entry)
@@ -4,13 +4,16 @@
4
4
  - add_css(@entry.css)
5
5
  - add_javascript(@entry.javascript)
6
6
 
7
+ = render_schema_org(breadcrumb_list_schema([[t('workarea.storefront.layouts.home'), root_url], [@entry.blog.name, blog_url(@entry.blog)], [@entry.name, blog_entry_url(@entry)]]))
8
+ = render_schema_org(blog_posting_schema(@entry))
9
+
7
10
  - content_for :breadcrumbs do
8
11
  %p.breadcrumbs__node-group
9
- %span.breadcrumbs__node{ itemprop: 'breadcrumb' }
12
+ %span.breadcrumbs__node
10
13
  = link_to t('workarea.storefront.layouts.home'), root_path, rel: 'home'
11
- %span.breadcrumbs__node{ itemprop: 'breadcrumb' }
14
+ %span.breadcrumbs__node
12
15
  = link_to @entry.blog.name, blog_path(@entry.blog)
13
- %span.breadcrumbs__node{ itemprop: 'breadcrumb' } #{@entry.name}
16
+ %span.breadcrumbs__node= @entry.name
14
17
 
15
18
  - content_for :head do
16
19
  %link{ href: blog_entry_path(@entry), rel: 'canonical' }
@@ -26,32 +29,27 @@
26
29
  - content_for :page_aside do
27
30
  = render 'workarea/storefront/blogs/blog_navigation', blog: @entry.blog
28
31
 
29
- %article.blog-entry.view{ itemscope: true, itemtype: 'http://schema.org/BlogPosting' }
32
+ %article.blog-entry.view
30
33
 
31
34
  %heading.blog-entry__header
32
35
  - if @entry.content_blocks_for(:blog_header).present?
33
36
  != render_content_blocks(@entry.content_blocks_for('blog_header'))
34
37
 
35
- - if @entry.has_thumbnail_image?
36
- %meta{ itemprop: 'image', content: @entry.thumbnail_image_url }
37
-
38
- %h1.blog-entry__title{ itemprop: 'mainEntityOfPage' }
39
- %span{ itemprop: 'headline' }= @entry.name
40
- %p.blog-entry__author{ itemprop: 'author' }= @entry.author
38
+ %h1.blog-entry__title
39
+ %span= @entry.name
40
+ %p.blog-entry__author= @entry.author
41
41
  %p.blog-entry__datetime
42
- %meta{ itemprop: 'dateModified', content: @entry.written_at }
43
- = local_time(@entry.written_at, format: :long, itemprop: 'datePublished')
44
- %p.blog-entry__comment-count{ itemprop: 'commentCount' }= link_to t('workarea.storefront.blogs.comments', count: @entry.comment_count), blog_entry_path(@entry, anchor: 'blog-entry-comments')
45
- = render 'workarea/storefront/blog_metadata/publisher'
42
+ = local_time(@entry.written_at, format: :long)
43
+ %p.blog-entry__comment-count= link_to t('workarea.storefront.blogs.comments', count: @entry.comment_count), blog_entry_path(@entry, anchor: 'blog-entry-comments')
46
44
 
47
45
  - if @entry.tags.present?
48
46
  .blog-entry__tags
49
47
  %p.blog-entry__label= t('workarea.storefront.blogs.tags')
50
- %ul.blog-entry__tags-list{ itemprop: 'keywords' }
48
+ %ul.blog-entry__tags-list
51
49
  - @entry.tags.each do |tag|
52
50
  %li.blog-entry__tags-list-item= link_to tag, blog_tagged_path(@entry.blog, tag)
53
51
 
54
- .blog-entry__body{ itemprop: 'articleBody' }
52
+ .blog-entry__body
55
53
  - if @entry.content_blocks_for(:blog_content).present?
56
54
  != render_content_blocks(@entry.content_blocks_for('blog_content'))
57
55
 
@@ -60,8 +58,10 @@
60
58
  %h2.blog-entry__products-heading= t('workarea.storefront.blogs.related_products')
61
59
  %ul.grid.grid--auto
62
60
  - @entry.products.each do |product|
61
+ = render_schema_org(product_schema(product))
62
+
63
63
  %li.grid__cell>
64
- .product-summary{ itemscope: true, itemtype: 'http://schema.org/Product' }
64
+ .product-summary
65
65
  = render 'workarea/storefront/products/summary', product: product
66
66
 
67
67
  #blog-entry-comments.blog-entry__comments
@@ -73,13 +73,13 @@
73
73
  %p.blog-entry__write-comment-link= link_to t('workarea.storefront.blogs.write_comment'), '#write-comment', class: 'button'
74
74
  %ul.blog-entry__comment-group
75
75
  - @entry.comments.each do |comment|
76
- %li.blog-entry__comment{ itemprop: 'comment', itemscope: true, itemType: 'http://schema.org/Comment' }
76
+ %li.blog-entry__comment
77
77
  %p.blog-entry__comment-item.blog-entry__comment-item--author
78
78
  = comment.user_info
79
79
  %p.blog-entry__comment-item.blog-entry__comment-item--datetime
80
- = local_time(comment.created_at, format: :long, itemprop: 'dateCreated');
80
+ = local_time(comment.created_at, format: :long);
81
81
 
82
- %p.blog-entry__comment-item.blog-entry__comment-item--body{itemprop: 'text'}
82
+ %p.blog-entry__comment-item.blog-entry__comment-item--body
83
83
  = comment.body
84
84
 
85
85
  #write-comment.blog-entry__section{ data: { blog_comment_placeholder: blog_entry_comments_path(@entry) } }