From 5f7382737325c64ecb1cd123212cc4f56451aabb Mon Sep 17 00:00:00 2001 From: Ivan Reshetnikov Date: Mon, 29 Jul 2024 20:19:37 +0500 Subject: [PATCH] feat: markdown parsing --- lib/comfycamp_web/controllers/notes_controller.ex | 10 +++++++++- .../controllers/notes_html/show.html.heex | 4 +--- mix.exs | 4 +++- mix.lock | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/comfycamp_web/controllers/notes_controller.ex b/lib/comfycamp_web/controllers/notes_controller.ex index 06ac336..61e2186 100644 --- a/lib/comfycamp_web/controllers/notes_controller.ex +++ b/lib/comfycamp_web/controllers/notes_controller.ex @@ -12,6 +12,14 @@ defmodule ComfycampWeb.NotesController do def show(conn, %{"id" => id}) do note = Notes.get_note!(id) - render(conn, :show, page_title: note.title, note: note) + case Earmark.as_html(note.markdown) do + {:ok, note_body, _deprecation_messages} -> + render(conn, :show, page_title: note.title, note: note, note_body: note_body) + + {:error, note_body, error_messages} -> + conn + |> put_flash(:error, error_messages) + |> render(:show, page_title: note.title, note: note, note_body: note_body) + end end end diff --git a/lib/comfycamp_web/controllers/notes_html/show.html.heex b/lib/comfycamp_web/controllers/notes_html/show.html.heex index 1abdcf4..a602eb5 100644 --- a/lib/comfycamp_web/controllers/notes_html/show.html.heex +++ b/lib/comfycamp_web/controllers/notes_html/show.html.heex @@ -6,7 +6,5 @@

Создана: <%= @note.inserted_at %>

Обновлена: <%= @note.updated_at %>

-
-    <%= @note.markdown %>
-  
+ <%= raw(@note_body) %> diff --git a/mix.exs b/mix.exs index f0cc956..00168eb 100644 --- a/mix.exs +++ b/mix.exs @@ -50,7 +50,9 @@ defmodule Comfycamp.MixProject do {:gettext, "~> 0.20"}, {:jason, "~> 1.2"}, {:dns_cluster, "~> 0.1.1"}, - {:bandit, "~> 1.2"} + {:bandit, "~> 1.2"}, + # Markdown rendering + {:earmark, "~> 1.4"} ] end diff --git a/mix.lock b/mix.lock index e691621..9e4d289 100644 --- a/mix.lock +++ b/mix.lock @@ -6,6 +6,7 @@ "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "dns_cluster": {:hex, :dns_cluster, "0.1.3", "0bc20a2c88ed6cc494f2964075c359f8c2d00e1bf25518a6a6c7fd277c9b0c66", [:mix], [], "hexpm", "46cb7c4a1b3e52c7ad4cbe33ca5079fbde4840dedeafca2baf77996c2da1bc33"}, + "earmark": {:hex, :earmark, "1.4.47", "7e7596b84fe4ebeb8751e14cbaeaf4d7a0237708f2ce43630cfd9065551f94ca", [:mix], [], "hexpm", "3e96bebea2c2d95f3b346a7ff22285bc68a99fbabdad9b655aa9c6be06c698f8"}, "ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"}, "ecto_sql": {:hex, :ecto_sql, "3.11.2", "c7cc7f812af571e50b80294dc2e535821b3b795ce8008d07aa5f336591a185a8", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "73c07f995ac17dbf89d3cfaaf688fcefabcd18b7b004ac63b0dc4ef39499ed6b"}, "elixir_make": {:hex, :elixir_make, "0.8.4", "4960a03ce79081dee8fe119d80ad372c4e7badb84c493cc75983f9d3bc8bde0f", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "6e7f1d619b5f61dfabd0a20aa268e575572b542ac31723293a4c1a567d5ef040"},