diff --git a/logsrv/apps/logsrv_api/lib/logsrv_api.ex b/logsrv/apps/logsrv_api/lib/logsrv_api.ex index 5a32204..0698f77 100644 --- a/logsrv/apps/logsrv_api/lib/logsrv_api.ex +++ b/logsrv/apps/logsrv_api/lib/logsrv_api.ex @@ -90,7 +90,7 @@ defmodule LogsrvApi do end def forward_links(post) do - post.markdown + to_post = post.markdown |> String.split(~r/[\[\]]/, trim: true) |> Enum.map(&( if(String.match?(post.markdown, Regex.compile!("\\[\\[" <> &1 <> "\\]\\]"))) do @@ -105,10 +105,30 @@ defmodule LogsrvApi do end ) |> Enum.map(fn(str) -> {title, true} = str - case title |> to_slug |> @repo.get_by_slug do + to_link = case title |> to_slug |> @repo.get_by_slug do {:ok, page} -> page {:no_such_page, slug} -> %{LogsrvApi.Page.empty | slug: slug, public: post.public, title: slug |> to_title} end + + context = post.markdown |> String.split("\n") |> Enum.find(&(&1 |> String.contains?(title))) + + {to_link, context} + + end) + end + + def forward_pages(post) do + post |> forward_links + |> Enum.map(fn(tuple) -> + {to_link, context} = tuple + to_link.slug + end) + end + def forward_contexts(post) do + post |> forward_links + |> Enum.map(fn(tuple) -> + {to_link, context} = tuple + context end) end diff --git a/logsrv/apps/logsrv_api/lib/logsrv_api/link.ex b/logsrv/apps/logsrv_api/lib/logsrv_api/link.ex index 557a973..958d02d 100644 --- a/logsrv/apps/logsrv_api/lib/logsrv_api/link.ex +++ b/logsrv/apps/logsrv_api/lib/logsrv_api/link.ex @@ -2,7 +2,7 @@ defmodule LogsrvApi.Link do use GenServer alias LogsrvApi.{Filesystem,Page,Journal,Link} - defstruct from: nil, to: nil + defstruct from: nil, to: nil, context: "" def start_link(_opts) do GenServer.start_link(__MODULE__, :ok, [name: __MODULE__]) @@ -14,7 +14,12 @@ defmodule LogsrvApi.Link do post |> LogsrvApi.forward_links |> Enum.map(fn(fwd_link) -> - %Link{from: post, to: fwd_link} + {to_post, context} = fwd_link + %Link{ + from: post, + to: to_post, + context: context + } end) end) |> List.flatten {:ok, links} @@ -40,7 +45,8 @@ defmodule LogsrvApi.Link do #GenServer.call(__MODULE__, {:get_links_to, post}) end - def get_links_to!(post), do: get_links_to(post) |> LogsrvApi.just + def to(post), do: get_links_to(post) |> LogsrvApi.just + def from(post), do: get_links_from(post) |> LogsrvApi.just def handle_call({:links}, _from, links) do {:reply, {:ok, links}, links} @@ -67,6 +73,6 @@ defimpl Inspect, for: LogsrvApi.Link do else "" end - "%#{is_broken}Link{'#{link.from.title}' => '#{link.to.title}'}" + "%#{is_broken}Link{'#{link.from.title}' => '#{link.to.title}' @ \"#{link.context}\"}" end end diff --git a/logsrv/apps/logsrv_web/lib/logsrv_web/controllers/post_controller.ex b/logsrv/apps/logsrv_web/lib/logsrv_web/controllers/post_controller.ex index 342339e..4680fc8 100644 --- a/logsrv/apps/logsrv_web/lib/logsrv_web/controllers/post_controller.ex +++ b/logsrv/apps/logsrv_web/lib/logsrv_web/controllers/post_controller.ex @@ -19,7 +19,7 @@ defmodule LogsrvWeb.PostController do case status do :ok -> - render(conn, "post.html", post: post, backlinks: post |> Link.get_links_to!) + render(conn, "post.html", post: post, backlinks: post |> Link.to) _ -> not_found(conn) @@ -28,7 +28,7 @@ defmodule LogsrvWeb.PostController do def home(conn, _params) do # render(conn, "home.html") - show(conn, %{"id" => "contents"}) + show(conn, %{"id" => "home"}) end def not_found(conn) do diff --git a/logsrv/apps/logsrv_web/lib/logsrv_web/templates/layout/root.html.heex b/logsrv/apps/logsrv_web/lib/logsrv_web/templates/layout/root.html.heex index ad70a37..5fe1f98 100644 --- a/logsrv/apps/logsrv_web/lib/logsrv_web/templates/layout/root.html.heex +++ b/logsrv/apps/logsrv_web/lib/logsrv_web/templates/layout/root.html.heex @@ -1,5 +1,5 @@ - +
@@ -12,7 +12,7 @@ diff --git a/logsrv/apps/logsrv_web/lib/logsrv_web/templates/post/post.html.heex b/logsrv/apps/logsrv_web/lib/logsrv_web/templates/post/post.html.heex index 18434ed..ae2cdf4 100644 --- a/logsrv/apps/logsrv_web/lib/logsrv_web/templates/post/post.html.heex +++ b/logsrv/apps/logsrv_web/lib/logsrv_web/templates/post/post.html.heex @@ -1,16 +1,25 @@