workarea-blog 3.4.9 → 3.5.0

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 (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) } }