From 462e956164f7f82f5ae7e1a1419e339ff77cf80f Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Wed, 12 Apr 2017 14:04:33 -0400 Subject: [PATCH] significant improvement in microformats markup (#1063) * significant improvement in microformats markup This is a huge improvement and I believe will close #965. Had these microformats reviewed by others in the community to help ensure they are at least correct, if not complete. I did not want to change the structure of the page, and so there it does not fully mark up the entire ancestry chain, or reply chain, only the direct decendants and direct ancestors are correctly associated, but this is likely fine as the most important bit is to have access to the urls for those toots which are now correctly fetchable. * improve code climate * trying to pass code climate tests * code climate * fix p-summary for content warning posts * fix error introduced when merging via github --- app/helpers/stream_entries_helper.rb | 24 +++++++++++++++---- app/lib/formatter.rb | 2 +- app/views/accounts/_header.html.haml | 2 +- .../stream_entries/_detailed_status.html.haml | 9 +++---- .../stream_entries/_simple_status.html.haml | 8 +++---- app/views/stream_entries/_status.html.haml | 16 ++++++++++--- app/views/stream_entries/show.html.haml | 2 +- 7 files changed, 44 insertions(+), 19 deletions(-) diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb index 18ef8b909f..00a01df44d 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/stream_entries_helper.rb @@ -13,15 +13,29 @@ module StreamEntriesHelper "@#{account.acct}#{embedded_view? && account.local? ? "@#{Rails.configuration.x.local_domain}" : ''}" end - def entry_classes(status, is_predecessor, is_successor, include_threads) + def style_classes(status, is_predecessor, is_successor, include_threads) classes = ['entry'] - classes << 'entry-reblog u-repost-of h-cite' if status.reblog? - classes << 'entry-predecessor u-in-reply-to h-cite' if is_predecessor - classes << 'entry-successor u-comment h-cite' if is_successor - classes << 'entry-center h-entry' if include_threads + classes << 'entry-predecessor' if is_predecessor + classes << 'entry-reblog' if status.reblog? + classes << 'entry-successor' if is_successor + classes << 'entry-center' if include_threads classes.join(' ') end + def microformats_classes(status, is_direct_parent, is_direct_child) + classes = [] + classes << 'p-in-reply-to' if is_direct_parent + classes << 'p-repost-of' if status.reblog? && is_direct_parent + classes << 'p-comment' if is_direct_child + classes.join(' ') + end + + def microformats_h_class(status, is_predecessor, is_successor, include_threads) + return 'h-cite' if is_predecessor || status.reblog || is_successor + return 'h-entry' unless include_threads + '' + end + def rtl?(text) return false if text.empty? diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index c3f331ff7d..b6d371ed2d 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -95,6 +95,6 @@ class Formatter end def mention_html(match, account) - "#{match.split('@').first}@#{account.username}" + "#{match.split('@').first}@#{account.username}" end end diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index 0d43fba304..beee96cd8d 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -13,7 +13,7 @@ %h1.name %span.p-name.emojify= display_name(@account) %small - %span.p-nickname= "@#{@account.username}" + %span= "@#{@account.username}" = fa_icon('lock') if @account.locked? .details .bio diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml index 466e0dd5ae..e3cc522be2 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/stream_entries/_detailed_status.html.haml @@ -5,14 +5,15 @@ = image_tag status.account.avatar.url(:original), width: 48, height: 48, alt: '', class: 'u-photo' %span.display-name %strong.p-name.emojify= display_name(status.account) - %span.p-nickname= acct(status.account) + %span= acct(status.account) - .status__content.e-content.p-name.emojify< + .status__content.p-name.emojify< - if status.spoiler_text? %p{ style: 'margin-bottom: 0' }< - %span>= "#{status.spoiler_text} " + %span.p-summary>= "#{status.spoiler_text} " %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') - %div{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) + %div.e-content{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) + - unless status.media_attachments.empty? - if status.media_attachments.first.video? diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml index a758d5ccdf..52905ff5e0 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/stream_entries/_simple_status.html.haml @@ -10,14 +10,14 @@ = image_tag status.account.avatar(:original), width: 48, height: 48, alt: '', class: 'u-photo' %span.display-name %strong.p-name.emojify= display_name(status.account) - %span.p-nickname= acct(status.account) + %span= acct(status.account) - .status__content.e-content.p-name.emojify< + .status__content.p-name.emojify< - if status.spoiler_text? %p{ style: 'margin-bottom: 0' }< - %span>= "#{status.spoiler_text} " + %span.p-summary>= "#{status.spoiler_text} " %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') - %div{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) + %div.e-content{ style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status) - unless status.media_attachments.empty? .status__attachments diff --git a/app/views/stream_entries/_status.html.haml b/app/views/stream_entries/_status.html.haml index 1333d4d82a..f389a8dfe7 100644 --- a/app/views/stream_entries/_status.html.haml +++ b/app/views/stream_entries/_status.html.haml @@ -1,12 +1,22 @@ - include_threads ||= false - is_predecessor ||= false - is_successor ||= false +- direct_reply_id ||= false +- parent_id ||= false +- is_direct_parent = direct_reply_id == status.id +- is_direct_child = parent_id == status.in_reply_to_id +- parent_id ||= false - centered ||= include_threads && !is_predecessor && !is_successor +- h_class = microformats_h_class(status, is_predecessor, is_successor, include_threads) +- style_classes = style_classes(status, is_predecessor, is_successor, include_threads) +- mf_classes = microformats_classes(status, is_direct_parent, is_direct_child) +- entry_classes = h_class + ' ' + mf_classes + ' ' + style_classes - if status.reply? && include_threads - = render partial: 'stream_entries/status', collection: @ancestors, as: :status, locals: { is_predecessor: true } + = render partial: 'stream_entries/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id} + +.entry{ class: entry_classes } -.entry{ class: entry_classes(status, is_predecessor, is_successor, include_threads) } - if status.reblog? .pre-header %div.pre-header__icon @@ -19,4 +29,4 @@ = render partial: centered ? 'stream_entries/detailed_status' : 'stream_entries/simple_status', locals: { status: status.proper } - if include_threads - = render partial: 'stream_entries/status', collection: @descendants, as: :status, locals: { is_successor: true } + = render partial: 'stream_entries/status', collection: @descendants, as: :status, locals: { is_successor: true, parent_id: status.id} diff --git a/app/views/stream_entries/show.html.haml b/app/views/stream_entries/show.html.haml index 088881b11f..f37fb79196 100644 --- a/app/views/stream_entries/show.html.haml +++ b/app/views/stream_entries/show.html.haml @@ -23,5 +23,5 @@ - if !user_signed_in? && !Rails.configuration.x.single_user_mode = render partial: 'shared/landing_strip', locals: { account: @stream_entry.account } -.activity-stream.activity-stream-headless +.activity-stream.activity-stream-headless.h-entry = render partial: "stream_entries/#{@type}", locals: { @type.to_sym => @stream_entry.activity, include_threads: true }