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 }