add backlinks
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| # v0.1.19 | ||||
| - Add backlinks | ||||
| - Fix visibility issues with multiple users | ||||
|  | ||||
| # v0.1.18 | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								home.png
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								home.png
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 340 KiB | 
| @@ -88,6 +88,42 @@ defmodule Memex.Contexts do | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Returns the list of contexts that link to a particular slug. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> backlink(%User{id: 123}) | ||||
|       [%Context{}, ...] | ||||
|  | ||||
|       iex> backlink("[other-context]", %User{id: 123}) | ||||
|       [%Context{content: "[other-context]"}, ...] | ||||
|  | ||||
|   """ | ||||
|   @spec backlink(String.t(), User.t()) :: [Context.t()] | ||||
|   def backlink(link, %{id: user_id}) when user_id |> is_binary() do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from c in Context, | ||||
|         where: fragment("? ~ ?", c.content, ^link_regex), | ||||
|         order_by: c.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   def backlink(link, _invalid_user) do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from c in Context, | ||||
|         where: fragment("? ~ ?", c.content, ^link_regex), | ||||
|         where: c.visibility == :public, | ||||
|         order_by: c.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Gets a single context. | ||||
|  | ||||
|   | ||||
| @@ -86,6 +86,42 @@ defmodule Memex.Notes do | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Returns the list of notes that link to a particular slug. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> backlink(%User{id: 123}) | ||||
|       [%Note{}, ...] | ||||
|  | ||||
|       iex> backlink("[other-note]", %User{id: 123}) | ||||
|       [%Note{content: "[other-note]"}, ...] | ||||
|  | ||||
|   """ | ||||
|   @spec backlink(String.t(), User.t()) :: [Note.t()] | ||||
|   def backlink(link, %{id: user_id}) when user_id |> is_binary() do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from n in Note, | ||||
|         where: fragment("? ~ ?", n.content, ^link_regex), | ||||
|         order_by: n.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   def backlink(link, _invalid_user) do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from n in Note, | ||||
|         where: fragment("? ~ ?", n.content, ^link_regex), | ||||
|         where: n.visibility == :public, | ||||
|         order_by: n.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Gets a single note. | ||||
|  | ||||
|   | ||||
| @@ -142,6 +142,50 @@ defmodule Memex.Pipelines do | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Returns the list of pipelines that link to a particular slug. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> backlink(%User{id: 123}) | ||||
|       [%Pipeline{}, ...] | ||||
|  | ||||
|       iex> backlink("[other-pipeline]", %User{id: 123}) | ||||
|       [%Pipeline{description: "[other-pipeline]"}, ...] | ||||
|  | ||||
|   """ | ||||
|   @spec backlink(String.t(), User.t()) :: [Pipeline.t()] | ||||
|   def backlink(link, %{id: user_id}) when user_id |> is_binary() do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from p in Pipeline, | ||||
|         left_join: s in assoc(p, :steps), | ||||
|         where: | ||||
|           fragment("? ~ ?", p.description, ^link_regex) or | ||||
|             fragment("? ~ ?", s.content, ^link_regex), | ||||
|         distinct: true, | ||||
|         order_by: p.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   def backlink(link, _invalid_user) do | ||||
|     link = link |> String.replace("[", "\\[") |> String.replace("]", "\\]") | ||||
|     link_regex = "(^|[^\[])#{link}($|[^\]])" | ||||
|  | ||||
|     Repo.all( | ||||
|       from p in Pipeline, | ||||
|         left_join: s in assoc(p, :steps), | ||||
|         where: | ||||
|           fragment("? ~ ?", p.description, ^link_regex) or | ||||
|             fragment("? ~ ?", s.content, ^link_regex), | ||||
|         where: p.visibility == :public, | ||||
|         distinct: true, | ||||
|         order_by: p.slug | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Creates a pipeline. | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| defmodule MemexWeb.ContextLive.Show do | ||||
|   use MemexWeb, :live_view | ||||
|   alias Memex.Contexts | ||||
|   alias Memex.{Contexts, Pipelines} | ||||
|  | ||||
|   @impl true | ||||
|   def mount(_params, _session, socket) do | ||||
| @@ -23,7 +23,9 @@ defmodule MemexWeb.ContextLive.Show do | ||||
|       socket | ||||
|       |> assign( | ||||
|         context: context, | ||||
|         page_title: page_title(live_action, context) | ||||
|         page_title: page_title(live_action, context), | ||||
|         context_backlinks: Contexts.backlink("[#{context.slug}]", current_user), | ||||
|         pipeline_backlinks: Pipelines.backlink("[[#{context.slug}]]", current_user) | ||||
|       ) | ||||
|  | ||||
|     {:noreply, socket} | ||||
|   | ||||
| @@ -11,6 +11,27 @@ | ||||
|  | ||||
|   <.context_content context={@context} /> | ||||
|  | ||||
|   <div | ||||
|     :if={@context_backlinks ++ @pipeline_backlinks != []} | ||||
|     class="flex flex-wrap justify-end items-center self-end" | ||||
|   > | ||||
|     <p><%= gettext("Backlinked by:") %></p> | ||||
|     <.link | ||||
|       :for={backlink <- @context_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/context/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[%{slug}]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|     <.link | ||||
|       :for={backlink <- @pipeline_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/pipeline/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[[%{slug}]]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <p class="self-end"> | ||||
|     <%= gettext("Visibility: %{visibility}", visibility: @context.visibility) %> | ||||
|   </p> | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| <div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-lg"> | ||||
|   <h1 class="title text-primary-400 text-xl"> | ||||
| <div class="flex flex-col justify-center items-stretch mx-auto space-y-4 max-w-lg"> | ||||
|   <h1 class="text-xl title text-primary-400"> | ||||
|     <%= gettext("memEx") %> | ||||
|   </h1> | ||||
|  | ||||
| @@ -31,7 +31,7 @@ | ||||
|       </p> | ||||
|     </li> | ||||
|  | ||||
|     <li class="flex flex-col justify-center items-center text-right space-y-2"> | ||||
|     <li class="flex flex-col justify-center items-center space-y-2 text-right"> | ||||
|       <.link navigate={~p"/faq"} class="btn btn-primary"> | ||||
|         <%= gettext("read more on how to use memEx") %> | ||||
|       </.link> | ||||
| @@ -41,7 +41,7 @@ | ||||
|   <hr class="hr" /> | ||||
|  | ||||
|   <ul class="flex flex-col space-y-4"> | ||||
|     <h2 class="title text-primary-400 text-lg"> | ||||
|     <h2 class="text-lg title text-primary-400"> | ||||
|       <%= gettext("features") %> | ||||
|     </h2> | ||||
|  | ||||
| @@ -71,12 +71,21 @@ | ||||
|         <%= gettext("accessible from any internet-capable device") %> | ||||
|       </p> | ||||
|     </li> | ||||
|  | ||||
|     <li class="flex flex-col justify-center items-center space-y-2"> | ||||
|       <b class="whitespace-nowrap"> | ||||
|         <%= gettext("backlinks:") %> | ||||
|       </b> | ||||
|       <p> | ||||
|         <%= gettext("view referencing items from the referenced item") %> | ||||
|       </p> | ||||
|     </li> | ||||
|   </ul> | ||||
|  | ||||
|   <hr class="hr" /> | ||||
|  | ||||
|   <ul class="flex flex-col justify-center space-y-4"> | ||||
|     <h2 class="title text-primary-400 text-lg"> | ||||
|     <h2 class="text-lg title text-primary-400"> | ||||
|       <%= gettext("instance information") %> | ||||
|     </h2> | ||||
|  | ||||
| @@ -124,7 +133,7 @@ | ||||
|   <hr class="hr" /> | ||||
|  | ||||
|   <ul class="flex flex-col space-y-2"> | ||||
|     <h2 class="title text-primary-400 text-lg"> | ||||
|     <h2 class="text-lg title text-primary-400"> | ||||
|       <%= gettext("get involved") %> | ||||
|     </h2> | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| defmodule MemexWeb.NoteLive.Show do | ||||
|   use MemexWeb, :live_view | ||||
|   alias Memex.Notes | ||||
|   alias Memex.{Contexts, Notes, Pipelines} | ||||
|  | ||||
|   @impl true | ||||
|   def mount(_params, _session, socket) do | ||||
| @@ -22,8 +22,11 @@ defmodule MemexWeb.NoteLive.Show do | ||||
|     socket = | ||||
|       socket | ||||
|       |> assign( | ||||
|         context_backlinks: Contexts.backlink("[[#{note.slug}]]", current_user), | ||||
|         note_backlinks: Notes.backlink("[#{note.slug}]", current_user), | ||||
|         note: note, | ||||
|         page_title: page_title(live_action, note) | ||||
|         page_title: page_title(live_action, note), | ||||
|         pipeline_backlinks: Pipelines.backlink("[[[#{note.slug}]]]", current_user) | ||||
|       ) | ||||
|  | ||||
|     {:noreply, socket} | ||||
|   | ||||
| @@ -11,6 +11,34 @@ | ||||
|  | ||||
|   <.note_content note={@note} /> | ||||
|  | ||||
|   <div | ||||
|     :if={@note_backlinks ++ @context_backlinks ++ @pipeline_backlinks != []} | ||||
|     class="flex flex-wrap justify-end items-center self-end" | ||||
|   > | ||||
|     <p><%= gettext("Backlinked by:") %></p> | ||||
|     <.link | ||||
|       :for={backlink <- @note_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/note/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[%{slug}]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|     <.link | ||||
|       :for={backlink <- @context_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/context/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[[%{slug}]]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|     <.link | ||||
|       :for={backlink <- @pipeline_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/pipeline/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[[[%{slug}]]]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <p class="self-end"> | ||||
|     <%= gettext("Visibility: %{visibility}", visibility: @note.visibility) %> | ||||
|   </p> | ||||
|   | ||||
| @@ -23,6 +23,7 @@ defmodule MemexWeb.PipelineLive.Show do | ||||
|       socket | ||||
|       |> assign( | ||||
|         page_title: page_title(live_action, pipeline), | ||||
|         pipeline_backlinks: Pipelines.backlink("[#{pipeline.slug}]", current_user), | ||||
|         pipeline: pipeline, | ||||
|         steps: pipeline |> Steps.list_steps(current_user) | ||||
|       ) | ||||
|   | ||||
| @@ -11,6 +11,17 @@ | ||||
|  | ||||
|   <.pipeline_content pipeline={@pipeline} /> | ||||
|  | ||||
|   <div :if={@pipeline_backlinks != []} class="flex flex-wrap justify-end items-center self-end"> | ||||
|     <p><%= gettext("Backlinked by:") %></p> | ||||
|     <.link | ||||
|       :for={backlink <- @pipeline_backlinks} | ||||
|       class="m-1 hover:underline" | ||||
|       patch={~p"/pipeline/#{backlink}"} | ||||
|     > | ||||
|       <%= gettext("[%{slug}]", slug: backlink.slug) %> | ||||
|     </.link> | ||||
|   </div> | ||||
|  | ||||
|   <p class="self-end"> | ||||
|     <%= gettext("Visibility: %{visibility}", visibility: @pipeline.visibility) %> | ||||
|   </p> | ||||
|   | ||||
| @@ -40,12 +40,12 @@ msgid "create invite" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:51 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:58 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:52 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:112 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete" | ||||
| msgstr "" | ||||
| @@ -56,12 +56,12 @@ msgid "delete user" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:90 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit" | ||||
| msgstr "" | ||||
| @@ -112,7 +112,7 @@ msgstr "" | ||||
| msgid "save" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:116 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:127 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step" | ||||
| msgstr "" | ||||
| @@ -145,24 +145,24 @@ msgid "copy invite link for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:49 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{context_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:56 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{note_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:49 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:39 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{step_title}" | ||||
| msgstr "" | ||||
| @@ -187,7 +187,7 @@ msgstr "" | ||||
| msgid "edit %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:88 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{step_title}" | ||||
| msgstr "" | ||||
| @@ -197,12 +197,12 @@ msgstr "" | ||||
| msgid "edit invite for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:78 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} down" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:62 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:73 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} up" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -40,12 +40,12 @@ msgid "create invite" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:51 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:58 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:52 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:112 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete" | ||||
| msgstr "" | ||||
| @@ -56,12 +56,12 @@ msgid "delete user" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:90 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit" | ||||
| msgstr "" | ||||
| @@ -112,7 +112,7 @@ msgstr "" | ||||
| msgid "save" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:116 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:127 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step" | ||||
| msgstr "" | ||||
| @@ -145,24 +145,24 @@ msgid "copy invite link for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:49 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{context_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:56 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{note_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:49 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:39 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{step_title}" | ||||
| msgstr "" | ||||
| @@ -187,7 +187,7 @@ msgstr "" | ||||
| msgid "edit %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:88 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{step_title}" | ||||
| msgstr "" | ||||
| @@ -197,12 +197,12 @@ msgstr "" | ||||
| msgid "edit invite for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:78 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} down" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:62 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:73 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} up" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -17,9 +17,9 @@ msgstr "" | ||||
| msgid "Reconnecting..." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:36 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:43 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:26 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Visibility: %{visibility}" | ||||
| msgstr "" | ||||
| @@ -29,7 +29,7 @@ msgstr "" | ||||
| msgid "accessible from any internet-capable device" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:85 | ||||
| #: lib/memex_web/live/home_live.html.heex:94 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "admins:" | ||||
| msgstr "" | ||||
| @@ -118,12 +118,12 @@ msgstr "" | ||||
| msgid "features" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:149 | ||||
| #: lib/memex_web/live/home_live.html.heex:158 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "help translate" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #: lib/memex_web/live/home_live.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "instance information" | ||||
| msgstr "" | ||||
| @@ -133,7 +133,7 @@ msgstr "" | ||||
| msgid "invite disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:105 | ||||
| #: lib/memex_web/live/home_live.html.heex:114 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "invite only" | ||||
| msgstr "" | ||||
| @@ -217,7 +217,7 @@ msgstr "" | ||||
| msgid "provide context around a single topic and hotlink to your notes" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:104 | ||||
| #: lib/memex_web/live/home_live.html.heex:113 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "public signups" | ||||
| msgstr "" | ||||
| @@ -227,12 +227,12 @@ msgstr "" | ||||
| msgid "register" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:101 | ||||
| #: lib/memex_web/live/home_live.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "registration:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:160 | ||||
| #: lib/memex_web/live/home_live.html.heex:169 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "report bugs or request features" | ||||
| msgstr "" | ||||
| @@ -288,12 +288,12 @@ msgstr "" | ||||
| msgid "users" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:111 | ||||
| #: lib/memex_web/live/home_live.html.heex:120 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "version:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:138 | ||||
| #: lib/memex_web/live/home_live.html.heex:147 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view the source code" | ||||
| msgstr "" | ||||
| @@ -350,11 +350,11 @@ msgid "%{slug} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:65 | ||||
| #: lib/memex_web/live/context_live/show.ex:42 | ||||
| #: lib/memex_web/live/context_live/show.ex:44 | ||||
| #: lib/memex_web/live/note_live/index.ex:65 | ||||
| #: lib/memex_web/live/note_live/show.ex:42 | ||||
| #: lib/memex_web/live/note_live/show.ex:45 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:65 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:77 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:78 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{slug} deleted" | ||||
| msgstr "" | ||||
| @@ -367,11 +367,11 @@ msgid "%{slug} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:25 | ||||
| #: lib/memex_web/live/context_live/show.ex:49 | ||||
| #: lib/memex_web/live/context_live/show.ex:51 | ||||
| #: lib/memex_web/live/note_live/index.ex:25 | ||||
| #: lib/memex_web/live/note_live/show.ex:49 | ||||
| #: lib/memex_web/live/note_live/show.ex:52 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:123 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:124 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{slug}" | ||||
| msgstr "" | ||||
| @@ -422,7 +422,7 @@ msgstr "" | ||||
| msgid "what is this?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:59 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{position}. %{title}" | ||||
| msgstr "" | ||||
| @@ -432,7 +432,7 @@ msgstr "" | ||||
| msgid "%{title} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:95 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:96 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{title} deleted" | ||||
| msgstr "" | ||||
| @@ -442,17 +442,17 @@ msgstr "" | ||||
| msgid "%{title} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:125 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:126 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step to %{slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:42 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:53 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "no steps" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:37 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "steps:" | ||||
| msgstr "" | ||||
| @@ -598,7 +598,7 @@ msgstr "" | ||||
| msgid "uses: %{uses_count}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:128 | ||||
| #: lib/memex_web/live/home_live.html.heex:137 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "get involved" | ||||
| msgstr "" | ||||
| @@ -721,3 +721,38 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "(This note is empty)" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Backlinked by:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:21 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "[%{slug}]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:31 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[%{slug}]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/show.html.heex:38 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[[%{slug}]]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:77 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "backlinks:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view referencing items from the referenced item" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -66,12 +66,12 @@ msgid "are you sure you want to make %{invite_name} unlimited?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:55 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:98 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:38 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:109 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "are you sure?" | ||||
| msgstr "" | ||||
| @@ -86,7 +86,7 @@ msgstr "" | ||||
| msgid "language updated successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:90 | ||||
| #: lib/memex_web/live/home_live.html.heex:99 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "register to setup memEx" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -15,9 +15,9 @@ msgstr "" | ||||
| msgid "Reconnecting..." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:36 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:43 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:26 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Visibility: %{visibility}" | ||||
| msgstr "" | ||||
| @@ -27,7 +27,7 @@ msgstr "" | ||||
| msgid "accessible from any internet-capable device" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:85 | ||||
| #: lib/memex_web/live/home_live.html.heex:94 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "admins:" | ||||
| msgstr "" | ||||
| @@ -116,12 +116,12 @@ msgstr "" | ||||
| msgid "features" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:149 | ||||
| #: lib/memex_web/live/home_live.html.heex:158 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "help translate" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #: lib/memex_web/live/home_live.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "instance information" | ||||
| msgstr "" | ||||
| @@ -131,7 +131,7 @@ msgstr "" | ||||
| msgid "invite disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:105 | ||||
| #: lib/memex_web/live/home_live.html.heex:114 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "invite only" | ||||
| msgstr "" | ||||
| @@ -215,7 +215,7 @@ msgstr "" | ||||
| msgid "provide context around a single topic and hotlink to your notes" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:104 | ||||
| #: lib/memex_web/live/home_live.html.heex:113 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "public signups" | ||||
| msgstr "" | ||||
| @@ -225,12 +225,12 @@ msgstr "" | ||||
| msgid "register" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:101 | ||||
| #: lib/memex_web/live/home_live.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "registration:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:160 | ||||
| #: lib/memex_web/live/home_live.html.heex:169 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "report bugs or request features" | ||||
| msgstr "" | ||||
| @@ -286,12 +286,12 @@ msgstr "" | ||||
| msgid "users" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:111 | ||||
| #: lib/memex_web/live/home_live.html.heex:120 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "version:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:138 | ||||
| #: lib/memex_web/live/home_live.html.heex:147 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view the source code" | ||||
| msgstr "" | ||||
| @@ -348,11 +348,11 @@ msgid "%{slug} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:65 | ||||
| #: lib/memex_web/live/context_live/show.ex:42 | ||||
| #: lib/memex_web/live/context_live/show.ex:44 | ||||
| #: lib/memex_web/live/note_live/index.ex:65 | ||||
| #: lib/memex_web/live/note_live/show.ex:42 | ||||
| #: lib/memex_web/live/note_live/show.ex:45 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:65 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:77 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:78 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{slug} deleted" | ||||
| msgstr "" | ||||
| @@ -365,11 +365,11 @@ msgid "%{slug} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:25 | ||||
| #: lib/memex_web/live/context_live/show.ex:49 | ||||
| #: lib/memex_web/live/context_live/show.ex:51 | ||||
| #: lib/memex_web/live/note_live/index.ex:25 | ||||
| #: lib/memex_web/live/note_live/show.ex:49 | ||||
| #: lib/memex_web/live/note_live/show.ex:52 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:123 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:124 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{slug}" | ||||
| msgstr "" | ||||
| @@ -420,7 +420,7 @@ msgstr "" | ||||
| msgid "what is this?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:59 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{position}. %{title}" | ||||
| msgstr "" | ||||
| @@ -430,7 +430,7 @@ msgstr "" | ||||
| msgid "%{title} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:95 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:96 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{title} deleted" | ||||
| msgstr "" | ||||
| @@ -440,17 +440,17 @@ msgstr "" | ||||
| msgid "%{title} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:125 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:126 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step to %{slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:42 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:53 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "no steps" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:37 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "steps:" | ||||
| msgstr "" | ||||
| @@ -596,7 +596,7 @@ msgstr "" | ||||
| msgid "uses: %{uses_count}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:128 | ||||
| #: lib/memex_web/live/home_live.html.heex:137 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "get involved" | ||||
| msgstr "" | ||||
| @@ -719,3 +719,38 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "(This note is empty)" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Backlinked by:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:21 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[%{slug}]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:31 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[%{slug}]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/show.html.heex:38 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[[%{slug}]]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:77 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "backlinks:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view referencing items from the referenced item" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -41,12 +41,12 @@ msgid "create invite" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:51 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:50 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:58 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:52 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:30 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:112 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete" | ||||
| msgstr "" | ||||
| @@ -57,12 +57,12 @@ msgid "delete user" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:41 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:40 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:20 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:90 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:101 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit" | ||||
| msgstr "" | ||||
| @@ -113,7 +113,7 @@ msgstr "" | ||||
| msgid "save" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:116 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:127 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step" | ||||
| msgstr "" | ||||
| @@ -146,24 +146,24 @@ msgid "copy invite link for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:49 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{context_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/index.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:56 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{note_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:49 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:28 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:39 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "delete %{step_title}" | ||||
| msgstr "" | ||||
| @@ -188,7 +188,7 @@ msgstr "" | ||||
| msgid "edit %{pipeline_slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:88 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:99 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{step_title}" | ||||
| msgstr "" | ||||
| @@ -198,12 +198,12 @@ msgstr "" | ||||
| msgid "edit invite for %{invite_name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:78 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} down" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:62 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:73 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "move %{step_title} up" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -16,9 +16,9 @@ msgstr "" | ||||
| msgid "Reconnecting..." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:36 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:43 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:26 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Visibility: %{visibility}" | ||||
| msgstr "" | ||||
| @@ -28,7 +28,7 @@ msgstr "" | ||||
| msgid "accessible from any internet-capable device" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:85 | ||||
| #: lib/memex_web/live/home_live.html.heex:94 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "admins:" | ||||
| msgstr "" | ||||
| @@ -117,12 +117,12 @@ msgstr "" | ||||
| msgid "features" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:149 | ||||
| #: lib/memex_web/live/home_live.html.heex:158 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "help translate" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #: lib/memex_web/live/home_live.html.heex:89 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "instance information" | ||||
| msgstr "" | ||||
| @@ -132,7 +132,7 @@ msgstr "" | ||||
| msgid "invite disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:105 | ||||
| #: lib/memex_web/live/home_live.html.heex:114 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "invite only" | ||||
| msgstr "" | ||||
| @@ -216,7 +216,7 @@ msgstr "" | ||||
| msgid "provide context around a single topic and hotlink to your notes" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:104 | ||||
| #: lib/memex_web/live/home_live.html.heex:113 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "public signups" | ||||
| msgstr "" | ||||
| @@ -226,12 +226,12 @@ msgstr "" | ||||
| msgid "register" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:101 | ||||
| #: lib/memex_web/live/home_live.html.heex:110 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "registration:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:160 | ||||
| #: lib/memex_web/live/home_live.html.heex:169 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "report bugs or request features" | ||||
| msgstr "" | ||||
| @@ -287,12 +287,12 @@ msgstr "" | ||||
| msgid "users" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:111 | ||||
| #: lib/memex_web/live/home_live.html.heex:120 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "version:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:138 | ||||
| #: lib/memex_web/live/home_live.html.heex:147 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view the source code" | ||||
| msgstr "" | ||||
| @@ -349,11 +349,11 @@ msgid "%{slug} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:65 | ||||
| #: lib/memex_web/live/context_live/show.ex:42 | ||||
| #: lib/memex_web/live/context_live/show.ex:44 | ||||
| #: lib/memex_web/live/note_live/index.ex:65 | ||||
| #: lib/memex_web/live/note_live/show.ex:42 | ||||
| #: lib/memex_web/live/note_live/show.ex:45 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:65 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:77 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:78 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{slug} deleted" | ||||
| msgstr "" | ||||
| @@ -366,11 +366,11 @@ msgid "%{slug} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.ex:25 | ||||
| #: lib/memex_web/live/context_live/show.ex:49 | ||||
| #: lib/memex_web/live/context_live/show.ex:51 | ||||
| #: lib/memex_web/live/note_live/index.ex:25 | ||||
| #: lib/memex_web/live/note_live/show.ex:49 | ||||
| #: lib/memex_web/live/note_live/show.ex:52 | ||||
| #: lib/memex_web/live/pipeline_live/index.ex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:123 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:124 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "edit %{slug}" | ||||
| msgstr "" | ||||
| @@ -421,7 +421,7 @@ msgstr "" | ||||
| msgid "what is this?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:59 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{position}. %{title}" | ||||
| msgstr "" | ||||
| @@ -431,7 +431,7 @@ msgstr "" | ||||
| msgid "%{title} created" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:95 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:96 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "%{title} deleted" | ||||
| msgstr "" | ||||
| @@ -441,17 +441,17 @@ msgstr "" | ||||
| msgid "%{title} saved" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:125 | ||||
| #: lib/memex_web/live/pipeline_live/show.ex:126 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "add step to %{slug}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:42 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:53 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "no steps" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:37 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:48 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "steps:" | ||||
| msgstr "" | ||||
| @@ -597,7 +597,7 @@ msgstr "" | ||||
| msgid "uses: %{uses_count}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:128 | ||||
| #: lib/memex_web/live/home_live.html.heex:137 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "get involved" | ||||
| msgstr "" | ||||
| @@ -720,3 +720,38 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "(This note is empty)" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:18 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:15 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Backlinked by:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:24 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:21 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "[%{slug}]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/show.html.heex:31 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:31 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[%{slug}]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/note_live/show.html.heex:38 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "[[[%{slug}]]]" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:77 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "backlinks:" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:80 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "view referencing items from the referenced item" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -67,12 +67,12 @@ msgid "are you sure you want to make %{invite_name} unlimited?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:55 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:98 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:38 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:109 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "are you sure?" | ||||
| msgstr "" | ||||
| @@ -87,7 +87,7 @@ msgstr "" | ||||
| msgid "language updated successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:90 | ||||
| #: lib/memex_web/live/home_live.html.heex:99 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "register to setup memEx" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -66,12 +66,12 @@ msgid "are you sure you want to make %{invite_name} unlimited?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/context_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/context_live/show.html.heex:48 | ||||
| #: lib/memex_web/live/note_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/note_live/show.html.heex:55 | ||||
| #: lib/memex_web/live/pipeline_live/index.html.heex:47 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:27 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:98 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:38 | ||||
| #: lib/memex_web/live/pipeline_live/show.html.heex:109 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "are you sure?" | ||||
| msgstr "" | ||||
| @@ -86,7 +86,7 @@ msgstr "" | ||||
| msgid "language updated successfully." | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/memex_web/live/home_live.html.heex:90 | ||||
| #: lib/memex_web/live/home_live.html.heex:99 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "register to setup memEx" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| # memEx | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| memEx is an easy way to digitize the structured processes of your life. | ||||
| A structured personal knowledge base, inspired by zettlekasten and org-mode. | ||||
|  | ||||
| - Notes: Document notes about individual items or concepts | ||||
| - Contexts: Provide context around a single topic and hotlink to individual | ||||
| @@ -14,6 +14,7 @@ memEx is an easy way to digitize the structured processes of your life. | ||||
| - Multi-user: Built with sharing and collaboration in mind | ||||
| - Privacy: Privacy controls on a per-note, context or pipeline basis | ||||
| - Convenient: Accessible from any internet-capable device | ||||
| - Backlinks: View referencing items from the referenced item | ||||
|  | ||||
| # Installation | ||||
|  | ||||
|   | ||||
| @@ -108,6 +108,25 @@ defmodule Memex.ContextsTest do | ||||
|       assert Contexts.get_context_by_slug("c", user) == context | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 returns contexts with backlinks", %{user: user} do | ||||
|       context_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       assert Contexts.backlink("[a]", user) == [] | ||||
|  | ||||
|       context = context_fixture(%{slug: "b", content: "[a]", visibility: :unlisted}, user) | ||||
|       assert Contexts.backlink("[a]", user) == [context] | ||||
|       assert Contexts.backlink("[b]", user) == [] | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 only returns public contexts for empty user", %{user: user} do | ||||
|       context_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       context_fixture(%{slug: "b", content: "[a]", visibility: :unlisted}, user) | ||||
|       context_fixture(%{slug: "c", content: "[a]", visibility: :private}, user) | ||||
|       assert Contexts.backlink("[a]", nil) == [] | ||||
|  | ||||
|       context = context_fixture(%{slug: "d", content: "[a]", visibility: :public}, user) | ||||
|       assert Contexts.backlink("[a]", nil) == [context] | ||||
|     end | ||||
|  | ||||
|     test "create_context/1 with valid data creates a context", %{user: user} do | ||||
|       valid_attrs = %{ | ||||
|         content: "some content", | ||||
|   | ||||
| @@ -109,6 +109,25 @@ defmodule Memex.NotesTest do | ||||
|       assert Notes.get_note_by_slug("c", user) == note | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 returns notes with backlinks", %{user: user} do | ||||
|       note_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       assert Notes.backlink("[a]", user) == [] | ||||
|  | ||||
|       note = note_fixture(%{slug: "b", content: "[a]", visibility: :unlisted}, user) | ||||
|       assert Notes.backlink("[a]", user) == [note] | ||||
|       assert Notes.backlink("[b]", user) == [] | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 only returns public notes for empty user", %{user: user} do | ||||
|       note_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       note_fixture(%{slug: "b", content: "[a]", visibility: :unlisted}, user) | ||||
|       note_fixture(%{slug: "c", content: "[a]", visibility: :private}, user) | ||||
|       assert Notes.backlink("[a]", nil) == [] | ||||
|  | ||||
|       note = note_fixture(%{slug: "d", content: "[a]", visibility: :public}, user) | ||||
|       assert Notes.backlink("[a]", nil) == [note] | ||||
|     end | ||||
|  | ||||
|     test "create_note/1 with valid data creates a note", %{user: user} do | ||||
|       valid_attrs = %{ | ||||
|         content: "some content", | ||||
|   | ||||
| @@ -108,6 +108,25 @@ defmodule Memex.PipelinesTest do | ||||
|       assert Pipelines.get_pipeline_by_slug("c", user) == pipeline | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 returns pipelines with backlinks", %{user: user} do | ||||
|       pipeline_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       assert Pipelines.backlink("[a]", user) == [] | ||||
|  | ||||
|       pipeline = pipeline_fixture(%{slug: "b", description: "[a]", visibility: :unlisted}, user) | ||||
|       assert Pipelines.backlink("[a]", user) == [pipeline] | ||||
|       assert Pipelines.backlink("[b]", user) == [] | ||||
|     end | ||||
|  | ||||
|     test "backlink/2 only returns public pipelines for empty user", %{user: user} do | ||||
|       pipeline_fixture(%{slug: "a", visibility: :public}, user) | ||||
|       pipeline_fixture(%{slug: "b", description: "[a]", visibility: :unlisted}, user) | ||||
|       pipeline_fixture(%{slug: "c", description: "[a]", visibility: :private}, user) | ||||
|       assert Pipelines.backlink("[a]", nil) == [] | ||||
|  | ||||
|       pipeline = pipeline_fixture(%{slug: "d", description: "[a]", visibility: :public}, user) | ||||
|       assert Pipelines.backlink("[a]", nil) == [pipeline] | ||||
|     end | ||||
|  | ||||
|     test "create_pipeline/1 with valid data creates a pipeline", %{user: user} do | ||||
|       valid_attrs = %{ | ||||
|         description: "some description", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user