From 7c82b8219734102ff24d9dc24226c08351e608cc Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sat, 16 Sep 2017 16:49:46 +0200 Subject: [PATCH] Make emoji configurable in files. --- config/emoji.txt | 1 + lib/pleroma/formatter.ex | 14 +++++++++++++- lib/pleroma/web/endpoint.ex | 2 +- priv/static/emoji/Firefox.gif | Bin 0 -> 20790 bytes test/support/httpoison_mock.ex | 13 +++++++++++++ 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 config/emoji.txt create mode 100644 priv/static/emoji/Firefox.gif diff --git a/config/emoji.txt b/config/emoji.txt new file mode 100644 index 000000000..0e668e609 --- /dev/null +++ b/config/emoji.txt @@ -0,0 +1 @@ +firefox, /emoji/Firefox.gif diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index e9f4bf06b..728d2b3e8 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -93,7 +93,19 @@ defmodule Pleroma.Formatter do {finmoji, "/finmoji/128px/#{finmoji}-128.png"} end) - @emoji @finmoji_with_filenames + @emoji_from_file (with {:ok, file} <- File.read("config/emoji.txt") do + file + |> String.trim + |> String.split("\n") + |> Enum.map(fn(line) -> + [name, file] = String.split(line, ", ") + {name, file} + end) + else + _ -> [] + end) + + @emoji @finmoji_with_filenames ++ @emoji_from_file def emojify(text, additional \\ nil) do all_emoji = if additional do diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index e869448de..a1b4108cd 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -11,7 +11,7 @@ defmodule Pleroma.Web.Endpoint do at: "/media", from: "uploads", gzip: false plug Plug.Static, at: "/", from: :pleroma, - only: ~w(index.html static finmoji) + only: ~w(index.html static finmoji emoji) # Code reloading can be explicitly enabled under the # :code_reloader configuration of your endpoint. diff --git a/priv/static/emoji/Firefox.gif b/priv/static/emoji/Firefox.gif new file mode 100644 index 0000000000000000000000000000000000000000..27e29b97a1b293ddc36411e0093ce75e90163e26 GIT binary patch literal 20790 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