diff options
author | William Pitcock <nenolod@dereferenced.org> | 2019-04-26 10:17:57 +0000 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2019-04-26 22:35:02 +0000 |
commit | 501af917b5a9611a4b1fabb4944b3af96b676568 (patch) | |
tree | 767a42ad28ad3f9e88198a6fe80a230beac64735 | |
parent | 2bd880be88839746040cd69e60380ab42a005ec4 (diff) | |
download | pleroma-501af917b5a9611a4b1fabb4944b3af96b676568.tar.gz |
add support for bbcode
-rw-r--r-- | config/config.exs | 3 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 12 | ||||
-rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 16 |
3 files changed, 30 insertions, 1 deletions
diff --git a/config/config.exs b/config/config.exs index a1cca06f8..1a9738cff 100644 --- a/config/config.exs +++ b/config/config.exs @@ -221,7 +221,8 @@ config :pleroma, :instance, allowed_post_formats: [ "text/plain", "text/html", - "text/markdown" + "text/markdown", + "text/bbcode" ], mrf_transparency: true, autofollowed_nicknames: [], diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 887f878c4..1dfe50b40 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -183,6 +183,18 @@ defmodule Pleroma.Web.CommonAPI.Utils do end @doc """ + Formatting text as BBCode. + """ + def format_input(text, "text/bbcode", options) do + text + |> String.replace(~r/\r/, "") + |> Formatter.html_escape("text/plain") + |> BBCode.to_html() + |> (fn {:ok, html} -> html end).() + |> Formatter.linkify(options) + end + + @doc """ Formatting text to html. """ def format_input(text, "text/html", options) do diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 837a66063..df9955d5d 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -119,6 +119,22 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do assert output == expected end + test "works for bare text/bbcode" do + text = "[b]hello world[/b]" + expected = "<strong>hello world</strong>" + + {output, [], []} = Utils.format_input(text, "text/bbcode") + + assert output == expected + + text = "[b]hello world![/b]\n\nsecond paragraph!" + expected = "<strong>hello world!</strong><br><br>second paragraph!" + + {output, [], []} = Utils.format_input(text, "text/bbcode") + + assert output == expected + end + test "works for text/markdown with mentions" do {:ok, user} = UserBuilder.insert(%{nickname: "user__test", ap_id: "http://foo.com/user__test"}) |