Merge remote-tracking branch 'origin/develop' into feature/embeddable-posts
authorEgor Kislitsyn <egor@kislitsyn.com>
Mon, 1 Jun 2020 13:38:57 +0000 (17:38 +0400)
committerEgor Kislitsyn <egor@kislitsyn.com>
Mon, 1 Jun 2020 13:38:57 +0000 (17:38 +0400)
1  2 
lib/pleroma/constants.ex
lib/pleroma/web/router.ex
lib/pleroma/web/templates/embed/show.html.eex
lib/pleroma/web/templates/layout/embed.html.eex
lib/pleroma/web/views/embed_view.ex

index 4ba39b53faeef6baebb89788c599d26626325288,06174f624a6d4d80a1c457a74f5e888122a5b516..13eeaa96b4762fbb91ced797cd93c7ad2dcf9255
@@@ -17,7 -17,13 +17,13 @@@ defmodule Pleroma.Constants d
        "announcement_count",
        "emoji",
        "context_id",
-       "deleted_activity_id"
+       "deleted_activity_id",
+       "pleroma_internal"
      ]
    )
 -      ~w(index.html robots.txt static static-fe finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc)
+   const(static_only_files,
+     do:
++      ~w(index.html robots.txt static static-fe finmoji emoji packs sounds images instance sw.js sw-pleroma.js favicon.png schemas doc embed.js embed.css)
+   )
  end
index eef0a80231e4bd6f2d9ca0aa3b3f97bcc1b9e9b3,e493a41534bb0f8b3a0a11e0eb6ec7714e4fd803..a2626521e1d8cc218226a2995ac854c09191ef66
@@@ -637,16 -664,9 +664,11 @@@ defmodule Pleroma.Web.Router d
      post("/auth/password", MastodonAPI.AuthController, :password_reset)
  
      get("/web/*path", MastoFEController, :index)
 +
 +    get("/embed/:id", EmbedController, :show)
    end
  
-   pipeline :remote_media do
-   end
    scope "/proxy/", Pleroma.Web.MediaProxy do
-     pipe_through(:remote_media)
      get("/:sig/:url", MediaProxyController, :remote)
      get("/:sig/:url/:filename", MediaProxyController, :remote)
    end
index 6bf8fac29509fe7ddbfd313e430f2d71eb8f501c,0000000000000000000000000000000000000000..05a3f0ee305acf26c0cc469ace6d0f8b7b82fee4
mode 100644,000000..100644
--- /dev/null
@@@ -1,76 -1,0 +1,76 @@@
-     <a class="u-url" rel="author noopener" href="<%= User.profile_url(@author) %>">
 +<div>
 +  <div class="p-author h-card">
-         <bdi><%= raw (@author.name |> Formatter.emojify(emoji_for_user(@author))) %></bdi>
++    <a class="u-url" rel="author noopener" href="<%= @author.ap_id %>">
 +      <div class="avatar">
 +        <img src="<%= User.avatar_url(@author) |> MediaProxy.url %>" width="48" height="48" alt="">
 +      </div>
 +      <span class="display-name" style="padding-left: 0.5em;">
++        <bdi><%= raw (@author.name |> Formatter.emojify(@author.emoji)) %></bdi>
 +        <span class="nickname"><%= full_nickname(@author) %></span>
 +      </span>
 +    </a>
 +  </div>
 +
 +  <div class="activity-content" >
 +    <%= if status_title(@activity) != "" do %>
 +      <details <%= if open_content?() do %>open<% end %>>
 +        <summary><%= raw status_title(@activity) %></summary>
 +        <div><%= activity_content(@activity) %></div>
 +      </details>
 +    <% else %>
 +      <div><%= activity_content(@activity) %></div>
 +    <% end %>
 +    <%= for %{"name" => name, "url" => [url | _]} <- attachments(@activity) do %>
 +      <div class="attachment">
 +      <%= if sensitive?(@activity) do %>
 +        <details class="nsfw">
 +          <summary onClick="updateHeight()"><%= Gettext.gettext("sensitive media") %></summary>
 +          <div class="nsfw-content">
 +            <%= render("_attachment.html", %{name: name, url: url["href"],
 +                                             mediaType: fetch_media_type(url)}) %>
 +          </div>
 +        </details>
 +      <% else %>
 +        <%= render("_attachment.html", %{name: name, url: url["href"],
 +                                         mediaType: fetch_media_type(url)}) %>
 +      <% end %>
 +      </div>
 +    <% end %>
 +  </div>
 +
 +  <dl class="counts pull-right">
 +    <dt><%= Gettext.gettext("replies") %></dt><dd><%= @counts.replies %></dd>
 +    <dt><%= Gettext.gettext("announces") %></dt><dd><%= @counts.announces %></dd>
 +    <dt><%= Gettext.gettext("likes") %></dt><dd><%= @counts.likes %></dd>
 +  </dl>
 +
 +  <p class="date pull-left">
 +    <%= link published(@activity), to: activity_url(@author, @activity) %>
 +  </p>
 +</div>
 +
 +<script>
 +function updateHeight() {
 +  window.requestAnimationFrame(function(){
 +    var height = document.getElementsByTagName('html')[0].scrollHeight;
 +
 +    window.parent.postMessage({
 +      type: 'setHeightPleromaEmbed',
 +      id: window.parentId,
 +      height: height,
 +    }, '*');
 +  })
 +}
 +
 +window.addEventListener('message', function(e){
 +  var data = e.data || {};
 +
 +  if (!window.parent || data.type !== 'setHeightPleromaEmbed') {
 +    return;
 +  }
 +
 +  window.parentId = data.id
 +
 +  updateHeight()
 +});
 +</script>
index 57ae4f802aa925c82fa48e1efff1073785e231b4,0000000000000000000000000000000000000000..8b905f0705d6aa1b3da25b848dbaa99f30b4dba9
mode 100644,000000..100644
--- /dev/null
@@@ -1,14 -1,0 +1,15 @@@
 +<!DOCTYPE html>
 +<html>
 +  <head>
 +    <meta charset="utf-8" />
 +    <meta name="viewport" content="width=device-width,initial-scale=1,minimal-ui" />
 +    <title><%= Pleroma.Config.get([:instance, :name]) %></title>
 +    <meta content='noindex' name='robots'>
 +    <%= Phoenix.HTML.raw(assigns[:meta] || "") %>
 +    <link rel="stylesheet" href="/embed.css">
++    <base target="_parent">
 +  </head>
 +  <body>
 +    <%= render @view_module, @view_template, assigns %>
 +  </body>
 +</html>
index 77536835bf7cc7fac5aed38ef8b72988cf01819f,0000000000000000000000000000000000000000..5f50bd155b7baa6d3bfcb7b61d33795919cb0ade
mode 100644,000000..100644
--- /dev/null
@@@ -1,83 -1,0 +1,74 @@@
-   defp emoji_for_user(%User{} = user) do
-     user.source_data
-     |> Map.get("tag", [])
-     |> Enum.filter(fn %{"type" => t} -> t == "Emoji" end)
-     |> Enum.map(fn %{"icon" => %{"url" => url}, "name" => name} ->
-       {String.trim(name, ":"), url}
-     end)
-   end
 +# Pleroma: A lightweight social networking server
 +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 +# SPDX-License-Identifier: AGPL-3.0-only
 +
 +defmodule Pleroma.Web.EmbedView do
 +  use Pleroma.Web, :view
 +
 +  alias Calendar.Strftime
 +  alias Pleroma.Activity
 +  alias Pleroma.Emoji.Formatter
 +  alias Pleroma.Object
 +  alias Pleroma.User
 +  alias Pleroma.Web.Gettext
 +  alias Pleroma.Web.MediaProxy
 +  alias Pleroma.Web.Metadata.Utils
 +  alias Pleroma.Web.Router.Helpers
 +
 +  use Phoenix.HTML
 +
 +  @media_types ["image", "audio", "video"]
 +
 +  defp fetch_media_type(%{"mediaType" => mediaType}) do
 +    Utils.fetch_media_type(@media_types, mediaType)
 +  end
 +
 +  defp open_content? do
 +    Pleroma.Config.get(
 +      [:frontend_configurations, :collapse_message_with_subjects],
 +      true
 +    )
 +  end
 +
 +  defp full_nickname(user) do
 +    %{host: host} = URI.parse(user.ap_id)
 +    "@" <> user.nickname <> "@" <> host
 +  end
 +
 +  defp status_title(%Activity{object: %Object{data: %{"name" => name}}}) when is_binary(name),
 +    do: name
 +
 +  defp status_title(%Activity{object: %Object{data: %{"summary" => summary}}})
 +       when is_binary(summary),
 +       do: summary
 +
 +  defp status_title(_), do: nil
 +
 +  defp activity_content(%Activity{object: %Object{data: %{"content" => content}}}) do
 +    content |> Pleroma.HTML.filter_tags() |> raw()
 +  end
 +
 +  defp activity_content(_), do: nil
 +
 +  defp activity_url(%User{local: true}, activity) do
 +    Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, activity)
 +  end
 +
 +  defp activity_url(%User{local: false}, %Activity{object: %Object{data: data}}) do
 +    data["url"] || data["external_url"] || data["id"]
 +  end
 +
 +  defp attachments(%Activity{object: %Object{data: %{"attachment" => attachments}}}) do
 +    attachments
 +  end
 +
 +  defp sensitive?(%Activity{object: %Object{data: %{"sensitive" => sensitive}}}) do
 +    sensitive
 +  end
 +
 +  defp published(%Activity{object: %Object{data: %{"published" => published}}}) do
 +    published
 +    |> NaiveDateTime.from_iso8601!()
 +    |> Strftime.strftime!("%B %d, %Y, %l:%M %p")
 +  end
 +end