diff options
author | Tusooa Zhu <tusooa@kazv.moe> | 2022-03-08 23:00:51 -0500 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-03-08 23:00:51 -0500 |
commit | ebcda5265b9c82be26eae65b5ab39629a525c3fa (patch) | |
tree | 85060601c761bee20604e6ef61304d952ccf82d9 | |
parent | 0e0a1758f7f4526d0bec005f8fb94a15620b2500 (diff) | |
download | pleroma-ebcda5265b9c82be26eae65b5ab39629a525c3fa.tar.gz pleroma-ebcda5265b9c82be26eae65b5ab39629a525c3fa.zip |
Format announcements into html
-rw-r--r-- | lib/pleroma/announcement.ex | 30 | ||||
-rw-r--r-- | lib/pleroma/web/admin_api/views/announcement_view.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/api_spec/schemas/announcement.ex | 8 | ||||
-rw-r--r-- | priv/repo/migrations/20220308012601_create_announcements.exs | 1 | ||||
-rw-r--r-- | test/pleroma/announcement_test.exs | 27 | ||||
-rw-r--r-- | test/support/factory.ex | 1 |
6 files changed, 65 insertions, 4 deletions
diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex index 6c11eff7e..ad372629d 100644 --- a/lib/pleroma/announcement.ex +++ b/lib/pleroma/announcement.ex @@ -18,13 +18,14 @@ defmodule Pleroma.Announcement do field(:data, :map) field(:starts_at, :naive_datetime) field(:ends_at, :naive_datetime) + field(:rendered, :map) timestamps() end def change(struct, params \\ %{}) do struct - |> cast(validate_params(struct, params), [:data, :starts_at, :ends_at]) + |> cast(validate_params(struct, params), [:data, :starts_at, :ends_at, :rendered]) |> validate_required([:data]) end @@ -42,6 +43,21 @@ defmodule Pleroma.Announcement do params |> Map.merge(%{data: merged_data}) + |> add_rendered_properties() + end + + def add_rendered_properties(params) do + {content_html, _, _} = + Pleroma.Web.CommonAPI.Utils.format_input(params.data["content"], "text/plain", + mentions_format: :full + ) + + rendered = %{ + "content" => content_html + } + + params + |> Map.put(:rendered, rendered) end def add(params) do @@ -100,9 +116,18 @@ defmodule Pleroma.Announcement do %{} end + admin_extra_params = + case Keyword.fetch(opts, :admin) do + {:ok, true} -> + %{pleroma: %{raw_content: announcement.data["content"]}} + + _ -> + %{} + end + base = %{ id: announcement.id, - content: announcement.data["content"], + content: announcement.rendered["content"], starts_at: announcement.starts_at, ends_at: announcement.ends_at, all_day: announcement.data["all_day"], @@ -117,6 +142,7 @@ defmodule Pleroma.Announcement do base |> Map.merge(extra_params) + |> Map.merge(admin_extra_params) end # "visible" means: diff --git a/lib/pleroma/web/admin_api/views/announcement_view.ex b/lib/pleroma/web/admin_api/views/announcement_view.ex index 8fbdc338a..a35bd60cf 100644 --- a/lib/pleroma/web/admin_api/views/announcement_view.ex +++ b/lib/pleroma/web/admin_api/views/announcement_view.ex @@ -10,6 +10,6 @@ defmodule Pleroma.Web.AdminAPI.AnnouncementView do end def render("show.json", %{announcement: announcement}) do - Pleroma.Announcement.render_json(announcement) + Pleroma.Announcement.render_json(announcement, admin: true) end end diff --git a/lib/pleroma/web/api_spec/schemas/announcement.ex b/lib/pleroma/web/api_spec/schemas/announcement.ex index 094fd7c68..67d129ef6 100644 --- a/lib/pleroma/web/api_spec/schemas/announcement.ex +++ b/lib/pleroma/web/api_spec/schemas/announcement.ex @@ -33,7 +33,13 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Announcement do statuses: %Schema{type: :array}, tags: %Schema{type: :array}, emojis: %Schema{type: :array}, - reactions: %Schema{type: :array} + reactions: %Schema{type: :array}, + pleroma: %Schema{ + type: :object, + properties: %{ + raw_content: %Schema{type: :string} + } + } } }) end diff --git a/priv/repo/migrations/20220308012601_create_announcements.exs b/priv/repo/migrations/20220308012601_create_announcements.exs index 9f273fda9..01c9ce041 100644 --- a/priv/repo/migrations/20220308012601_create_announcements.exs +++ b/priv/repo/migrations/20220308012601_create_announcements.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Repo.Migrations.CreateAnnouncements do add(:data, :map) add(:starts_at, :naive_datetime) add(:ends_at, :naive_datetime) + add(:rendered, :map) timestamps() end diff --git a/test/pleroma/announcement_test.exs b/test/pleroma/announcement_test.exs index aa00f804b..a007c3718 100644 --- a/test/pleroma/announcement_test.exs +++ b/test/pleroma/announcement_test.exs @@ -68,4 +68,31 @@ defmodule Pleroma.AnnouncementTest do assert [] = Announcement.list_all_visible_when(time) end end + + describe "announcements formatting" do + test "it formats links" do + raw = "something on https://pleroma.social ." + announcement = insert(:announcement, %{data: %{"content" => raw}}) + + assert announcement.rendered["content"] =~ ~r(<a.+?https://pleroma.social) + assert announcement.data["content"] == raw + end + + test "it formats mentions" do + user = insert(:user) + raw = "something on @#{user.nickname} ." + announcement = insert(:announcement, %{data: %{"content" => raw}}) + + assert announcement.rendered["content"] =~ ~r(<a.+?#{user.nickname}) + assert announcement.data["content"] == raw + end + + test "it formats tags" do + raw = "something on #mew ." + announcement = insert(:announcement, %{data: %{"content" => raw}}) + + assert announcement.rendered["content"] =~ ~r(<a.+?#mew) + assert announcement.data["content"] == raw + end + end end diff --git a/test/support/factory.ex b/test/support/factory.ex index d28a56345..efbf3df2e 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -637,5 +637,6 @@ defmodule Pleroma.Factory do data: Map.merge(%{"content" => "test announcement", "all_day" => false}, data) } |> Map.merge(params) + |> Pleroma.Announcement.add_rendered_properties() end end |