about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2022-10-06 02:26:34 +0200
committerGitHub <noreply@github.com>2022-10-06 02:26:34 +0200
commit62782babd08bc2385a604e275bf88af925d137c1 (patch)
tree320ab52d1bc39311c41ffa57859abf04511f2e77
parent58d5b28cb00ffadfeb7a3e1e03f7ae0d3b0d8486 (diff)
Change public statuses pages to mount the web UI (#19301)
-rw-r--r--app/controllers/concerns/web_app_controller_concern.rb18
-rw-r--r--app/controllers/home_controller.rb11
-rw-r--r--app/controllers/statuses_controller.rb12
-rw-r--r--app/views/home/index.html.haml18
-rw-r--r--app/views/shared/_web_app.html.haml17
-rw-r--r--app/views/statuses/show.html.haml7
-rw-r--r--spec/views/statuses/show.html.haml_spec.rb48
7 files changed, 42 insertions, 89 deletions
diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb
new file mode 100644
index 000000000..8a6c73af3
--- /dev/null
+++ b/app/controllers/concerns/web_app_controller_concern.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module WebAppControllerConcern
+  extend ActiveSupport::Concern
+
+  included do
+    before_action :set_body_classes
+    before_action :set_referrer_policy_header
+  end
+
+  def set_body_classes
+    @body_classes = 'app-body'
+  end
+
+  def set_referrer_policy_header
+    response.headers['Referrer-Policy'] = 'origin'
+  end
+end
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index 29478209d..b4d6578b9 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -1,13 +1,12 @@
 # frozen_string_literal: true
 
 class HomeController < ApplicationController
+  include WebAppControllerConcern
+
   before_action :redirect_unauthenticated_to_permalinks!
-  before_action :set_referrer_policy_header
   before_action :set_instance_presenter
 
-  def index
-    @body_classes = 'app-body'
-  end
+  def index; end
 
   private
 
@@ -19,10 +18,6 @@ class HomeController < ApplicationController
     redirect_to(redirect_path) if redirect_path.present?
   end
 
-  def set_referrer_policy_header
-    response.headers['Referrer-Policy'] = 'origin'
-  end
-
   def set_instance_presenter
     @instance_presenter = InstancePresenter.new
   end
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 7d9db4d5b..181c76c9a 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -5,17 +5,15 @@ class StatusesController < ApplicationController
   include SignatureAuthentication
   include Authorization
   include AccountOwnedConcern
-
-  layout 'public'
+  include WebAppControllerConcern
 
   before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? }
   before_action :set_status
   before_action :set_instance_presenter
   before_action :set_link_headers
   before_action :redirect_to_original, only: :show
-  before_action :set_referrer_policy_header, only: :show
   before_action :set_cache_headers
-  before_action :set_body_classes
+  before_action :set_body_classes, only: :embed
 
   skip_around_action :set_locale, if: -> { request.format == :json }
   skip_before_action :require_functional!, only: [:show, :embed], unless: :whitelist_mode?
@@ -28,8 +26,6 @@ class StatusesController < ApplicationController
     respond_to do |format|
       format.html do
         expires_in 10.seconds, public: true if current_account.nil?
-        set_ancestors
-        set_descendants
       end
 
       format.json do
@@ -77,8 +73,4 @@ class StatusesController < ApplicationController
   def redirect_to_original
     redirect_to ActivityPub::TagManager.instance.url_for(@status.reblog) if @status.reblog?
   end
-
-  def set_referrer_policy_header
-    response.headers['Referrer-Policy'] = 'origin' unless @status.distributable?
-  end
 end
diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml
index 19c5191d8..76a02e0f0 100644
--- a/app/views/home/index.html.haml
+++ b/app/views/home/index.html.haml
@@ -1,20 +1,4 @@
 - content_for :header_tags do
-  - if user_signed_in?
-    = preload_pack_asset 'features/getting_started.js', crossorigin: 'anonymous'
-    = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous'
-    = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous'
-    = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous'
-
   = render partial: 'shared/og'
 
-  %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key}
-
-  = render_initial_state
-  = javascript_pack_tag 'application', crossorigin: 'anonymous'
-
-.notranslate.app-holder#mastodon{ data: { props: Oj.dump(default_props) } }
-  %noscript
-    = image_pack_tag 'logo.svg', alt: 'Mastodon'
-
-    %div
-      = t('errors.noscript_html', apps_path: 'https://joinmastodon.org/apps')
+= render 'shared/web_app'
diff --git a/app/views/shared/_web_app.html.haml b/app/views/shared/_web_app.html.haml
new file mode 100644
index 000000000..998cee9fa
--- /dev/null
+++ b/app/views/shared/_web_app.html.haml
@@ -0,0 +1,17 @@
+- content_for :header_tags do
+  - if user_signed_in?
+    = preload_pack_asset 'features/compose.js', crossorigin: 'anonymous'
+    = preload_pack_asset 'features/home_timeline.js', crossorigin: 'anonymous'
+    = preload_pack_asset 'features/notifications.js', crossorigin: 'anonymous'
+
+  %meta{ name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key }
+
+  = render_initial_state
+  = javascript_pack_tag 'application', crossorigin: 'anonymous'
+
+.notranslate.app-holder#mastodon{ data: { props: Oj.dump(default_props) } }
+  %noscript
+    = image_pack_tag 'logo.svg', alt: 'Mastodon'
+
+    %div
+      = t('errors.noscript_html', apps_path: 'https://joinmastodon.org/apps')
diff --git a/app/views/statuses/show.html.haml b/app/views/statuses/show.html.haml
index 7ef7b09a2..5a3c94b84 100644
--- a/app/views/statuses/show.html.haml
+++ b/app/views/statuses/show.html.haml
@@ -17,9 +17,4 @@
   = render 'og_description', activity: @status
   = render 'og_image', activity: @status, account: @account
 
-.grid
-  .column-0
-    .activity-stream.h-entry
-      = render partial: 'status', locals: { status: @status, include_threads: true }
-  .column-1
-    = render 'application/sidebar'
+= render 'shared/web_app'
diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb
index 879a26959..a69843216 100644
--- a/spec/views/statuses/show.html.haml_spec.rb
+++ b/spec/views/statuses/show.html.haml_spec.rb
@@ -15,54 +15,6 @@ describe 'statuses/show.html.haml', without_verify_partial_doubles: true do
     assign(:instance_presenter, InstancePresenter.new)
   end
 
-  it 'has valid author h-card and basic data for a detailed_status' do
-    alice  = Fabricate(:account, username: 'alice', display_name: 'Alice')
-    bob    = Fabricate(:account, username: 'bob', display_name: 'Bob')
-    status = Fabricate(:status, account: alice, text: 'Hello World')
-    media  = Fabricate(:media_attachment, account: alice, status: status, type: :video)
-    reply  = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice')
-
-    assign(:status, status)
-    assign(:account, alice)
-    assign(:descendant_threads, [])
-
-    render
-
-    mf2 = Microformats.parse(rendered)
-
-    expect(mf2.entry.url.to_s).not_to be_empty
-    expect(mf2.entry.author.name.to_s).to eq alice.display_name
-    expect(mf2.entry.author.url.to_s).not_to be_empty
-  end
-
-  it 'has valid h-cites for p-in-reply-to and p-comment' do
-    alice   = Fabricate(:account, username: 'alice', display_name: 'Alice')
-    bob     = Fabricate(:account, username: 'bob', display_name: 'Bob')
-    carl    = Fabricate(:account, username: 'carl', display_name: 'Carl')
-    status  = Fabricate(:status, account: alice, text: 'Hello World')
-    media   = Fabricate(:media_attachment, account: alice, status: status, type: :video)
-    reply   = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice')
-    comment = Fabricate(:status, account: carl, thread: reply, text: 'Hello Bob')
-
-    assign(:status, reply)
-    assign(:account, alice)
-    assign(:ancestors, reply.ancestors(1, bob))
-    assign(:descendant_threads, [{ statuses: reply.descendants(1) }])
-
-    render
-
-    mf2 = Microformats.parse(rendered)
-
-    expect(mf2.entry.url.to_s).not_to be_empty
-    expect(mf2.entry.comment.url.to_s).not_to be_empty
-    expect(mf2.entry.comment.author.name.to_s).to eq carl.display_name
-    expect(mf2.entry.comment.author.url.to_s).not_to be_empty
-
-    expect(mf2.entry.in_reply_to.url.to_s).not_to be_empty
-    expect(mf2.entry.in_reply_to.author.name.to_s).to eq alice.display_name
-    expect(mf2.entry.in_reply_to.author.url.to_s).not_to be_empty
-  end
-
   it 'has valid opengraph tags' do
     alice  = Fabricate(:account, username: 'alice', display_name: 'Alice')
     status = Fabricate(:status, account: alice, text: 'Hello World')