about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorBen Roberts <ben@thatmustbe.me>2017-04-12 14:04:33 -0400
committerEugen <eugen@zeonfederated.com>2017-04-12 20:04:33 +0200
commit0254ee9795822ec75ff64ace6ec2b91573bc9a52 (patch)
tree2e06fe9639cbfb568eedcddbc9515939158ef3cc /app
parente32edd247f04916270d5b2477c1ff1777e75cf51 (diff)
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
Diffstat (limited to 'app')
-rw-r--r--app/helpers/stream_entries_helper.rb24
-rw-r--r--app/lib/formatter.rb2
-rw-r--r--app/views/accounts/_header.html.haml2
-rw-r--r--app/views/stream_entries/_detailed_status.html.haml9
-rw-r--r--app/views/stream_entries/_simple_status.html.haml8
-rw-r--r--app/views/stream_entries/_status.html.haml16
-rw-r--r--app/views/stream_entries/show.html.haml2
7 files changed, 44 insertions, 19 deletions
diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb
index 18ef8b909..00a01df44 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 c3f331ff7..b6d371ed2 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}<a href=\"#{TagManager.instance.url_for(account)}\" class=\"h-card u-url p-nickname mention\">@<span>#{account.username}</span></a>"
+    "#{match.split('@').first}<span class=\"h-card\"><a href=\"#{TagManager.instance.url_for(account)}\" class=\"u-url mention\">@#{account.username}</a></span>"
   end
 end
diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml
index 0d43fba30..beee96cd8 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 466e0dd5a..e3cc522be 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 a758d5ccd..52905ff5e 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 1333d4d82..f389a8dfe 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 088881b11..f37fb7919 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 }