Improve embeds (#7919)
* Make embeds cacheable by reverse proxy * Make follow button on embeds open remote follow modal Instead of web+mastodon://, also, turn the button blue, and add a sign up prompt to the remote follow modal
This commit is contained in:
		
							parent
							
								
									8fea9cc311
								
							
						
					
					
						commit
						2092d5c0ad
					
				
					 8 changed files with 21 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -5,6 +5,7 @@ class RemoteFollowController < ApplicationController
 | 
			
		|||
 | 
			
		||||
  before_action :set_account
 | 
			
		||||
  before_action :gone, if: :suspended_account?
 | 
			
		||||
  before_action :set_body_classes
 | 
			
		||||
 | 
			
		||||
  def new
 | 
			
		||||
    @remote_follow = RemoteFollow.new(session_params)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,12 @@ class StatusesController < ApplicationController
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def embed
 | 
			
		||||
    raise ActiveRecord::RecordNotFound if @status.hidden?
 | 
			
		||||
 | 
			
		||||
    skip_session!
 | 
			
		||||
    expires_in 180, public: true
 | 
			
		||||
    response.headers['X-Frame-Options'] = 'ALLOWALL'
 | 
			
		||||
 | 
			
		||||
    render 'stream_entries/embed', layout: 'embedded'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ function main() {
 | 
			
		|||
    [].forEach.call(document.querySelectorAll('.logo-button'), (content) => {
 | 
			
		||||
      content.addEventListener('click', (e) => {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        window.open(e.target.href, 'mastodon-intent', 'width=400,height=400,resizable=no,menubar=no,status=no,scrollbars=yes');
 | 
			
		||||
        window.open(e.target.href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -464,6 +464,7 @@
 | 
			
		|||
  background: $simple-background-color;
 | 
			
		||||
 | 
			
		||||
  &__header {
 | 
			
		||||
    background: $base-shadow-color;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    background-position: center center;
 | 
			
		||||
    height: 90px;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -324,6 +324,9 @@
 | 
			
		|||
        .button.button-secondary.logo-button {
 | 
			
		||||
          flex: 0 auto;
 | 
			
		||||
          font-size: 14px;
 | 
			
		||||
          background: $ui-highlight-color;
 | 
			
		||||
          color: $primary-text-color;
 | 
			
		||||
          border: 0;
 | 
			
		||||
 | 
			
		||||
          svg {
 | 
			
		||||
            width: 20px;
 | 
			
		||||
| 
						 | 
				
			
			@ -332,19 +335,21 @@
 | 
			
		|||
            margin-right: 5px;
 | 
			
		||||
 | 
			
		||||
            path:first-child {
 | 
			
		||||
              fill: $ui-primary-color;
 | 
			
		||||
              fill: $primary-text-color;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            path:last-child {
 | 
			
		||||
              fill: $simple-background-color;
 | 
			
		||||
              fill: $ui-highlight-color;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          &:active,
 | 
			
		||||
          &:focus,
 | 
			
		||||
          &:hover {
 | 
			
		||||
            svg path:first-child {
 | 
			
		||||
              fill: lighten($ui-primary-color, 4%);
 | 
			
		||||
            background: lighten($ui-highlight-color, 10%);
 | 
			
		||||
 | 
			
		||||
            svg path:last-child {
 | 
			
		||||
              fill: lighten($ui-highlight-color, 10%);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,3 +11,5 @@
 | 
			
		|||
 | 
			
		||||
    .actions
 | 
			
		||||
      = f.button :button, t('remote_follow.proceed'), type: :submit
 | 
			
		||||
 | 
			
		||||
    %p.hint.subtle-hint= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
      %span= acct(status.account)
 | 
			
		||||
 | 
			
		||||
  - if embedded_view?
 | 
			
		||||
    = link_to "web+mastodon://follow?uri=#{status.account.local_username_and_domain}", class: 'button button-secondary logo-button', target: '_new' do
 | 
			
		||||
    = link_to account_remote_follow_path(status.account), class: 'button button-secondary logo-button', target: '_new' do
 | 
			
		||||
      = render file: Rails.root.join('app', 'javascript', 'images', 'logo.svg')
 | 
			
		||||
      = t('accounts.follow')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -615,6 +615,7 @@ en:
 | 
			
		|||
  remote_follow:
 | 
			
		||||
    acct: Enter your username@domain you want to follow from
 | 
			
		||||
    missing_resource: Could not find the required redirect URL for your account
 | 
			
		||||
    no_account_html: Don't have an account? You can <a href='%{sign_up_path}' target='_blank'>sign up here</a>
 | 
			
		||||
    proceed: Proceed to follow
 | 
			
		||||
    prompt: 'You are going to follow:'
 | 
			
		||||
  remote_unfollow:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue