diff --git a/lib/philomena/versions.ex b/lib/philomena/versions.ex index 28b30f3b..da171066 100644 --- a/lib/philomena/versions.ex +++ b/lib/philomena/versions.ex @@ -24,8 +24,7 @@ defmodule Philomena.Versions do {versions, _last_body} = versions - |> Enum.reverse() - |> Enum.map_reduce(nil, fn version, previous_body -> + |> Enum.map_reduce(parent.body, fn version, previous_body -> yaml = YamlElixir.read_from_string!(version.object || "") body = yaml["body"] || "" edit_reason = yaml["edit_reason"] @@ -37,16 +36,16 @@ defmodule Philomena.Versions do user: users[version.whodunnit], body: body, edit_reason: edit_reason, - difference: difference(previous_body, body) + difference: difference(body, previous_body) } {v, body} end) - Enum.reverse(versions) + versions end - defp difference(nil, next), do: [eq: next] + defp difference(previous, nil), do: [eq: previous] defp difference(previous, next), do: String.myers_difference(previous, next) @doc """ diff --git a/lib/philomena_web/controllers/image/comment/history_controller.ex b/lib/philomena_web/controllers/image/comment/history_controller.ex index 6cfd37aa..b2bae9e0 100644 --- a/lib/philomena_web/controllers/image/comment/history_controller.ex +++ b/lib/philomena_web/controllers/image/comment/history_controller.ex @@ -10,7 +10,7 @@ defmodule PhilomenaWeb.Image.Comment.HistoryController do plug PhilomenaWeb.CanaryMapPlug, index: :show plug :load_and_authorize_resource, model: Image, id_name: "image_id", persisted: true - plug :load_and_authorize_resource, model: Comment, id_name: "comment_id", persisted: true, preload: [:user, :image] + plug :load_and_authorize_resource, model: Comment, id_name: "comment_id", persisted: true, preload: [:image, user: [awards: :badge]] def index(conn, _params) do comment = conn.assigns.comment diff --git a/lib/philomena_web/templates/image/comment/history/index.html.slime b/lib/philomena_web/templates/image/comment/history/index.html.slime index 58fb3ecf..0ac2430a 100644 --- a/lib/philomena_web/templates/image/comment/history/index.html.slime +++ b/lib/philomena_web/templates/image/comment/history/index.html.slime @@ -22,13 +22,13 @@ h1 = for edit <- version.difference do = case edit do - {:eq, value} -> - = text_to_html(value) + = escape_nl2br(value) - {:ins, value} -> - ins.differ = text_to_html(value) + ins.differ = escape_nl2br(value) - {:del, value} -> - del.differ = text_to_html(value) + del.differ = escape_nl2br(value) .block__content.communication__options .flex.flex--wrap.flex--spaced-out @@ -41,6 +41,6 @@ h1 .flex__right ' Edited - = pretty_time(version.created_at) + => pretty_time(version.created_at) ' by - = render PhilomenaWeb.UserAttributionView, "_anon_user.html", object: @version, conn: @conn \ No newline at end of file + => render PhilomenaWeb.UserAttributionView, "_anon_user.html", object: version, conn: @conn \ No newline at end of file diff --git a/lib/philomena_web/views/app_view.ex b/lib/philomena_web/views/app_view.ex index dfa29b1f..89e1430d 100644 --- a/lib/philomena_web/views/app_view.ex +++ b/lib/philomena_web/views/app_view.ex @@ -93,6 +93,15 @@ defmodule PhilomenaWeb.AppView do end) end + def escape_nl2br(text) do + text + |> String.split("\n") + |> Enum.map(&html_escape/1) + |> Enum.map(&safe_to_string/1) + |> Enum.join("
") + |> raw() + end + defp datetime_string(time) do :io_lib.format("~2..0B:~2..0B:~2..0B, ~s ~B, ~B", [ time.hour,