add support for bbcode
authorWilliam Pitcock <nenolod@dereferenced.org>
Fri, 26 Apr 2019 10:17:57 +0000 (10:17 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Fri, 26 Apr 2019 22:35:02 +0000 (22:35 +0000)
config/config.exs
lib/pleroma/web/common_api/utils.ex
test/web/common_api/common_api_utils_test.exs

index a1cca06f868985cb1600332d1513626193794ad0..1a9738cff4676551ea2f72c7c8b50d562be37195 100644 (file)
@@ -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: [],
index 887f878c440ed2a6e6550017596c3f3764d1db12..1dfe50b408266efd29f341ac37f5dc3b7b652d53 100644 (file)
@@ -182,6 +182,18 @@ defmodule Pleroma.Web.CommonAPI.Utils do
         end).()
   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.
   """
index 837a660638597c8397b05b520d6790087f4ea1e9..df9955d5deb3a953548b34ea0c8d3bf3b4b19d08 100644 (file)
@@ -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"})