mirror of https://github.com/mastodon/mastodon
				
				
				
			Adjusting public display of statuses to look similar to logged-in UI,
fix #361 with rich OEmbed display via iframe, fix #237 by hiding sensitive content behind a spoiler on public pagespull/362/merge
							parent
							
								
									aed25932b5
								
							
						
					
					
						commit
						5ae1b39ec9
					
				@ -1,8 +1,20 @@
 | 
			
		||||
import emojify from './components/emoji'
 | 
			
		||||
 | 
			
		||||
$(() => {
 | 
			
		||||
  $.each($('.entry .content, .name, .account__header__content'), (_, content) => {
 | 
			
		||||
  $.each($('.entry .content, .entry .status__content, .display-name, .name, .account__header__content'), (_, content) => {
 | 
			
		||||
    const $content = $(content);
 | 
			
		||||
    $content.html(emojify($content.html()));
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  $('.video-player video').on('click', e => {
 | 
			
		||||
    if (e.target.paused) {
 | 
			
		||||
      e.target.play();
 | 
			
		||||
    } else {
 | 
			
		||||
      e.target.pause();
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  $('.media-spoiler').on('click', e => {
 | 
			
		||||
    $(e.target).hide();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,3 @@
 | 
			
		||||
.media-spoiler
 | 
			
		||||
  %span= t('stream_entries.sensitive_content')
 | 
			
		||||
  %span= t('stream_entries.click_to_show')
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
.detailed-status.light
 | 
			
		||||
  = link_to TagManager.instance.url_for(status.account), class: 'detailed-status__display-name', target: @external_links ? '_blank' : nil, rel: 'noopener' do
 | 
			
		||||
    %div
 | 
			
		||||
      %div.avatar
 | 
			
		||||
        = image_tag status.account.avatar.url(:original), width: 48, height: 48, alt: ''
 | 
			
		||||
    %span.display-name
 | 
			
		||||
      %strong= display_name(status.account)
 | 
			
		||||
      %span= acct(status.account)
 | 
			
		||||
 | 
			
		||||
  .status__content= Formatter.instance.format(status)
 | 
			
		||||
 | 
			
		||||
  - unless status.media_attachments.empty?
 | 
			
		||||
    - if status.media_attachments.first.video?
 | 
			
		||||
      .video-player
 | 
			
		||||
        - if status.sensitive?
 | 
			
		||||
          = render partial: 'stream_entries/content_spoiler'
 | 
			
		||||
        %video{ src: status.media_attachments.first.file.url(:original), loop: true }
 | 
			
		||||
    - else
 | 
			
		||||
      .detailed-status__attachments
 | 
			
		||||
        - if status.sensitive?
 | 
			
		||||
          = render partial: 'stream_entries/content_spoiler'
 | 
			
		||||
        - status.media_attachments.each do |media|
 | 
			
		||||
          .media-item
 | 
			
		||||
            = link_to '', (media.remote_url.blank? ? media.file.url(:original) : media.remote_url), style: "background-image: url(#{media.file.url(:original)})", target: '_blank', rel: 'noopener'
 | 
			
		||||
 | 
			
		||||
  %div.detailed-status__meta
 | 
			
		||||
    = link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: @external_links ? '_blank' : nil, rel: 'noopener' do
 | 
			
		||||
      %span= l(status.created_at)
 | 
			
		||||
    ·
 | 
			
		||||
    %span
 | 
			
		||||
      = fa_icon('retweet')
 | 
			
		||||
      %span= status.reblogs.count
 | 
			
		||||
    ·
 | 
			
		||||
    %span
 | 
			
		||||
      = fa_icon('star')
 | 
			
		||||
      %span= status.favourites.count
 | 
			
		||||
@ -0,0 +1,28 @@
 | 
			
		||||
.status.light
 | 
			
		||||
  .status__header
 | 
			
		||||
    .status__meta
 | 
			
		||||
      = link_to time_ago_in_words(status.created_at), TagManager.instance.url_for(status), class: 'status__relative-time', title: l(status.created_at), target: @external_links ? '_blank' : nil, rel: 'noopener'
 | 
			
		||||
 | 
			
		||||
    = link_to TagManager.instance.url_for(status.account), class: 'status__display-name', target: @external_links ? '_blank' : nil, rel: 'noopener' do
 | 
			
		||||
      .status__avatar
 | 
			
		||||
        %div
 | 
			
		||||
          = image_tag status.account.avatar(:original), width: 48, height: 48, alt: ''
 | 
			
		||||
      %span.display-name
 | 
			
		||||
        %strong= display_name(status.account)
 | 
			
		||||
        %span= acct(status.account)
 | 
			
		||||
 | 
			
		||||
  .status__content= Formatter.instance.format(status)
 | 
			
		||||
 | 
			
		||||
  - unless status.media_attachments.empty?
 | 
			
		||||
    .status__attachments
 | 
			
		||||
      - if status.sensitive?
 | 
			
		||||
        = render partial: 'stream_entries/content_spoiler'
 | 
			
		||||
      - if status.media_attachments.first.video?
 | 
			
		||||
        .video-item
 | 
			
		||||
          = link_to (status.media_attachments.first.remote_url.blank? ? status.media_attachments.first.file.url(:original) : status.media_attachments.first.remote_url), style: "background-image: url(#{status.media_attachments.first.file.url(:small)})", target: '_blank', rel: 'noopener' do
 | 
			
		||||
            .video-item__play
 | 
			
		||||
              = fa_icon('play')
 | 
			
		||||
      - else
 | 
			
		||||
        - status.media_attachments.each do |media|
 | 
			
		||||
          .media-item
 | 
			
		||||
            = link_to '', (media.remote_url.blank? ? media.file.url(:original) : media.remote_url), style: "background-image: url(#{media.file.url(:original)})", target: '_blank', rel: 'noopener'
 | 
			
		||||
@ -1,2 +1,2 @@
 | 
			
		||||
.activity-stream.activity-stream-headless
 | 
			
		||||
  = render partial: @type, locals: { @type.to_sym => @stream_entry.activity }
 | 
			
		||||
  = render partial: @type, locals: { @type.to_sym => @stream_entry.activity, centered: true }
 | 
			
		||||
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue