upgrade to phoenix 1.7
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
shibao 2023-04-13 23:29:29 -04:00
parent a1c846be33
commit 63d854ffbe
116 changed files with 1156 additions and 1111 deletions

View File

@ -1,6 +1,6 @@
[
import_deps: [:ecto, :phoenix],
inputs: ["*.{heex,ex,exs}", "priv/*/seeds.exs", "{config,lib,test}/**/*.{heex,ex,exs}"],
import_deps: [:ecto, :ecto_sql, :phoenix],
inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}", "priv/*/seeds.exs"],
subdirectories: ["priv/*/migrations"],
plugins: [Phoenix.LiveView.HTMLFormatter]
]

View File

@ -374,8 +374,8 @@ defmodule Memex.Accounts do
@doc """
Deletes the signed token with the given context.
"""
@spec delete_session_token(token :: String.t()) :: :ok
def delete_session_token(token) do
@spec delete_user_session_token(token :: String.t()) :: :ok
def delete_user_session_token(token) do
UserToken.token_and_context_query(token, "session") |> Repo.delete_all()
:ok
end

View File

@ -7,10 +7,11 @@ defmodule Memex.Email do
`lib/memex_web/templates/layout/email.txt.heex` for text emails.
"""
use Phoenix.Swoosh, view: MemexWeb.EmailView, layout: {MemexWeb.LayoutView, :email}
import Swoosh.Email
import MemexWeb.Gettext
import Phoenix.Template
alias Memex.Accounts.User
alias MemexWeb.EmailView
alias MemexWeb.{EmailHTML, Layouts}
@typedoc """
Represents an HTML and text body email that can be sent
@ -28,21 +29,33 @@ defmodule Memex.Email do
def generate_email("welcome", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Confirm your Memex account"))
|> render_body("confirm_email.html", %{user: user, url: url})
|> text_body(EmailView.render("confirm_email.txt", %{user: user, url: url}))
|> html_email(:confirm_email_html, %{user: user, url: url})
|> text_email(:confirm_email_text, %{user: user, url: url})
end
def generate_email("reset_password", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Reset your Memex password"))
|> render_body("reset_password.html", %{user: user, url: url})
|> text_body(EmailView.render("reset_password.txt", %{user: user, url: url}))
|> html_email(:reset_password_html, %{user: user, url: url})
|> text_email(:reset_password_text, %{user: user, url: url})
end
def generate_email("update_email", user, %{"url" => url}) do
user
|> base_email(dgettext("emails", "Update your Memex email"))
|> render_body("update_email.html", %{user: user, url: url})
|> text_body(EmailView.render("update_email.txt", %{user: user, url: url}))
|> html_email(:update_email_html, %{user: user, url: url})
|> text_email(:update_email_text, %{user: user, url: url})
end
defp html_email(email, atom, assigns) do
heex = apply(EmailHTML, atom, [assigns])
html = render_to_string(Layouts, "email_html", "html", email: email, inner_content: heex)
email |> html_body(html)
end
defp text_email(email, atom, assigns) do
heex = apply(EmailHTML, atom, [assigns])
text = render_to_string(Layouts, "email_text", "text", email: email, inner_content: heex)
email |> text_body(text)
end
end

View File

@ -9,6 +9,7 @@ defmodule Memex.Contexts.Context do
alias Ecto.{Changeset, UUID}
alias Memex.{Accounts.User, Repo}
@derive {Phoenix.Param, key: :slug}
@derive {Jason.Encoder,
only: [
:slug,

View File

@ -14,17 +14,17 @@ defmodule Memex.Logger do
|> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace))
|> pretty_encode()
Logger.error(meta.reason, data: data)
Logger.error("#{meta.reason} #{data}")
end
def handle_event([:oban, :job, :start], measure, meta, _config) do
data = get_oban_job_data(meta, measure) |> pretty_encode()
Logger.info("Started oban job", data: data)
Logger.info("Started oban job: #{data}")
end
def handle_event([:oban, :job, :stop], measure, meta, _config) do
data = get_oban_job_data(meta, measure) |> pretty_encode()
Logger.info("Finished oban job", data: data)
Logger.info("Finished oban job: #{data}")
end
def handle_event([:oban, :job, unhandled_event], measure, meta, _config) do
@ -33,7 +33,7 @@ defmodule Memex.Logger do
|> Map.put(:event, unhandled_event)
|> pretty_encode()
Logger.warning("Unhandled oban job event", data: data)
Logger.warning("Unhandled oban job event: #{data}")
end
def handle_event(unhandled_event, measure, meta, config) do
@ -45,7 +45,7 @@ defmodule Memex.Logger do
config: config
})
Logger.warning("Unhandled telemetry event", data: data)
Logger.warning("Unhandled telemetry event: #{data}")
end
defp get_oban_job_data(%{job: job}, measure) do

View File

@ -8,6 +8,7 @@ defmodule Memex.Notes.Note do
alias Ecto.{Changeset, UUID}
alias Memex.{Accounts.User, Repo}
@derive {Phoenix.Param, key: :slug}
@derive {Jason.Encoder,
only: [
:slug,

View File

@ -8,6 +8,7 @@ defmodule Memex.Pipelines.Pipeline do
alias Ecto.{Changeset, UUID}
alias Memex.{Accounts.User, Pipelines.Steps.Step, Repo}
@derive {Phoenix.Param, key: :slug}
@derive {Jason.Encoder,
only: [
:slug,

View File

@ -1,54 +1,61 @@
defmodule MemexWeb do
@moduledoc """
The entrypoint for defining your web interface, such
as controllers, views, channels and so on.
as controllers, components, channels, and so on.
This can be used in your application as:
use MemexWeb, :controller
use MemexWeb, :view
use MemexWeb, :html
The definitions below will be executed for every view,
controller, etc, so keep them short and clean, focused
The definitions below will be executed for every controller,
component, etc, so keep them short and clean, focused
on imports, uses and aliases.
Do NOT define functions inside the quoted expressions
below. Instead, define any helper function in modules
and import those modules here.
below. Instead, define additional modules and import
those modules here.
"""
def static_paths, do: ~w(css js fonts images favicon.ico robots.txt)
def router do
quote do
use Phoenix.Router, helpers: false
# Import common connection and controller functions to use in pipelines
import Plug.Conn
import Phoenix.Controller
import Phoenix.LiveView.Router
end
end
def channel do
quote do
use Phoenix.Channel
end
end
def controller do
quote do
use Phoenix.Controller, namespace: MemexWeb
use Phoenix.Controller,
formats: [:html, :json],
layouts: [html: MemexWeb.Layouts]
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import Plug.Conn
import MemexWeb.Gettext
alias MemexWeb.Endpoint
alias MemexWeb.Router.Helpers, as: Routes
end
end
def view do
quote do
use Phoenix.View,
root: "lib/memex_web/templates",
namespace: MemexWeb
# Import convenience functions from controllers
import Phoenix.Controller,
only: [get_flash: 1, get_flash: 2, view_module: 1, view_template: 1]
# Include shared imports and aliases for views
unquote(view_helpers())
unquote(verified_routes())
end
end
def live_view do
quote do
use Phoenix.LiveView, layout: {MemexWeb.LayoutView, :live}
use Phoenix.LiveView,
layout: {MemexWeb.Layouts, :app}
on_mount MemexWeb.InitAssigns
unquote(view_helpers())
unquote(html_helpers())
end
end
@ -56,50 +63,46 @@ defmodule MemexWeb do
quote do
use Phoenix.LiveComponent
unquote(view_helpers())
unquote(html_helpers())
end
end
def component do
def html do
quote do
use Phoenix.Component
unquote(view_helpers())
# Import convenience functions from controllers
import Phoenix.Controller,
only: [get_csrf_token: 0, view_module: 1, view_template: 1]
# Include general helpers for rendering HTML
unquote(html_helpers())
end
end
def router do
defp html_helpers do
quote do
use Phoenix.Router
import Phoenix.{Controller, LiveView.Router}
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import Plug.Conn
end
end
def channel do
quote do
use Phoenix.Channel
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import MemexWeb.Gettext
end
end
defp view_helpers do
quote do
# Use all HTML functionality (forms, tags, etc)
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
use Phoenix.HTML
# Import LiveView and .heex helpers (live_render, link, <.form>, etc)
# Import basic rendering functionality (render, render_layout, etc)
import Phoenix.{Component, View}
import MemexWeb.{ErrorHelpers, Gettext, CoreComponents, ViewHelpers}
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
alias MemexWeb.Endpoint
alias MemexWeb.Router.Helpers, as: Routes
import Phoenix.Component
import MemexWeb.{ErrorHelpers, Gettext, CoreComponents, HTMLHelpers}
# Shortcut for generating JS commands
alias Phoenix.LiveView.JS
# Routes generation with the ~p sigil
unquote(verified_routes())
end
end
def verified_routes do
quote do
use Phoenix.VerifiedRoutes,
endpoint: MemexWeb.Endpoint,
router: MemexWeb.Router,
statics: MemexWeb.static_paths()
end
end

View File

@ -88,11 +88,9 @@ defmodule MemexWeb.Components.ContextsTableComponent do
@spec get_value_for_key(atom(), Context.t(), additional_data :: map()) ::
any() | {any(), Rendered.t()}
defp get_value_for_key(:slug, %{slug: slug}, _additional_data) do
assigns = %{slug: slug}
defp get_value_for_key(:slug, %{slug: slug} = assigns, _additional_data) do
slug_block = ~H"""
<.link navigate={Routes.context_show_path(Endpoint, :show, @slug)} class="link">
<.link navigate={~p"/context/#{@slug}"} class="link">
<%= @slug %>
</.link>
"""
@ -100,16 +98,10 @@ defmodule MemexWeb.Components.ContextsTableComponent do
{slug, slug_block}
end
defp get_value_for_key(:tags, %{tags: tags}, _additional_data) do
assigns = %{tags: tags}
defp get_value_for_key(:tags, assigns, _additional_data) do
~H"""
<div class="flex flex-wrap justify-center space-x-1">
<.link
:for={tag <- @tags}
patch={Routes.context_index_path(Endpoint, :search, tag)}
class="link"
>
<.link :for={tag <- @tags} patch={~p"/contexts/#{tag}"} class="link">
<%= tag %>
</.link>
</div>

View File

@ -3,13 +3,13 @@ defmodule MemexWeb.CoreComponents do
Provides core UI components.
"""
use Phoenix.Component
import MemexWeb.{Gettext, ViewHelpers}
use MemexWeb, :verified_routes
import MemexWeb.{Gettext, HTMLHelpers}
alias Memex.{Accounts, Accounts.Invite, Accounts.User}
alias Memex.Contexts.Context
alias Memex.Notes.Note
alias Memex.Pipelines.Steps.Step
alias MemexWeb.{Endpoint, HomeLive}
alias MemexWeb.Router.Helpers, as: Routes
alias Phoenix.HTML
alias Phoenix.LiveView.JS
@ -31,13 +31,13 @@ defmodule MemexWeb.CoreComponents do
## Examples
<.modal return_to={Routes.<%= schema.singular %>_index_path(Endpoint, :index)}>
<.modal return_to={~p"/\#{<%= schema.plural %>}"}>
<.live_component
module={<%= inspect context.web_module %>.<%= inspect Module.concat(schema.web_namespace, schema.alias) %>Live.FormComponent}
id={@<%= schema.singular %>.id || :new}
title={@page_title}
action={@live_action}
return_to={Routes.<%= schema.singular %>_index_path(Endpoint, :index)}
return_to={~p"/\#{<%= schema.singular %>}"}
<%= schema.singular %>: @<%= schema.singular %>
/>
</.modal>
@ -167,7 +167,7 @@ defmodule MemexWeb.CoreComponents do
link =
HTML.Link.link(
"[[#{slug}]]",
to: Routes.note_show_path(Endpoint, :show, slug),
to: ~p"/note/#{slug}",
class: "link inline",
data: [qa: "#{data_qa_prefix}-#{slug}"]
)

View File

@ -24,7 +24,7 @@
<% end %>
<.qr_code
content={Routes.user_registration_url(Endpoint, :new, invite: @invite.token)}
content={url(MemexWeb.Endpoint, ~p"/users/register?invite=#{@invite.token}")}
filename={@invite.name}
/>
@ -38,7 +38,7 @@
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all
text-primary-400 bg-primary-800"
phx-no-format
><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code>
><%= url(MemexWeb.Endpoint, ~p"/users/register?invite=#{@invite.token}") %></code>
<%= if @code_actions, do: render_slot(@code_actions) %>
</div>

View File

@ -1,10 +1,7 @@
<nav role="navigation" class="mb-8 px-8 py-4 w-full bg-primary-900 text-primary-400">
<div class="flex flex-col sm:flex-row justify-between items-center">
<div class="mb-4 sm:mb-0 sm:mr-8 flex flex-row justify-start items-center space-x-2">
<.link
navigate={Routes.live_path(Endpoint, HomeLive)}
class="mx-2 my-1 leading-5 text-xl text-primary-400 hover:underline"
>
<.link navigate={~p"/"} class="mx-2 my-1 leading-5 text-xl text-primary-400 hover:underline">
<%= gettext("memEx") %>
</.link>
@ -21,28 +18,19 @@
<ul class="flex flex-row flex-wrap justify-center items-center
text-lg text-primary-400 text-ellipsis">
<li class="mx-2 my-1">
<.link
navigate={Routes.note_index_path(Endpoint, :index)}
class="text-primary-400 hover:underline truncate"
>
<.link navigate={~p"/notes"} class="text-primary-400 hover:underline truncate">
<%= gettext("notes") %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
navigate={Routes.context_index_path(Endpoint, :index)}
class="text-primary-400 hover:underline truncate"
>
<.link navigate={~p"/contexts"} class="text-primary-400 hover:underline truncate">
<%= gettext("contexts") %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
navigate={Routes.pipeline_index_path(Endpoint, :index)}
class="text-primary-400 hover:underline truncate"
>
<.link navigate={~p"/pipelines"} class="text-primary-400 hover:underline truncate">
<%= gettext("pipelines") %>
</.link>
</li>
@ -51,25 +39,19 @@
<%= if @current_user do %>
<li :if={@current_user |> Accounts.is_already_admin?()} class="mx-2 my-1">
<.link
navigate={Routes.invite_index_path(Endpoint, :index)}
class="text-primary-400 hover:underline"
>
<.link navigate={~p"/invites"} class="text-primary-400 hover:underline">
<%= gettext("invites") %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
navigate={Routes.user_settings_path(Endpoint, :edit)}
class="text-primary-400 hover:underline truncate"
>
<.link navigate={~p"/users/settings"} class="text-primary-400 hover:underline truncate">
<%= @current_user.email %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
href={Routes.user_session_path(Endpoint, :delete)}
href={~p"/users/log_out"}
method="delete"
data-confirm={dgettext("prompts", "are you sure you want to log out?")}
aria-label={gettext("log out")}
@ -84,7 +66,7 @@
class="mx-2 my-1"
>
<.link
navigate={Routes.live_dashboard_path(Endpoint, :home)}
navigate={~p"/dashboard"}
class="text-primary-400 hover:underline"
aria-label={gettext("live dashboard")}
>
@ -93,19 +75,13 @@
</li>
<% else %>
<li :if={Accounts.allow_registration?()} class="mx-2 my-1">
<.link
href={Routes.user_registration_path(Endpoint, :new)}
class="text-primary-400 hover:underline truncate"
>
<.link href={~p"/users/register"} class="text-primary-400 hover:underline truncate">
<%= dgettext("actions", "register") %>
</.link>
</li>
<li class="mx-2 my-1">
<.link
href={Routes.user_session_path(Endpoint, :new)}
class="text-primary-400 hover:underline truncate"
>
<.link href={~p"/users/log_in"} class="text-primary-400 hover:underline truncate">
<%= dgettext("actions", "log in") %>
</.link>
</li>

View File

@ -0,0 +1,17 @@
defmodule MemexWeb.Layouts do
@moduledoc """
The root layouts for the entire application
"""
use MemexWeb, :html
embed_templates "layouts/*"
def get_title(%{assigns: %{title: title}}) when title not in [nil, ""] do
gettext("memEx | %{title}", title: title)
end
def get_title(_conn) do
gettext("memEx")
end
end

View File

@ -3,11 +3,11 @@
<.topbar current_user={assigns[:current_user]} />
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p :if={get_flash(@conn, :info)} class="alert alert-info" role="alert">
<%= get_flash(@conn, :info) %>
<p :if={@flash["info"]} class="alert alert-info" role="alert">
<%= @flash["info"] %>
</p>
<p :if={get_flash(@conn, :error)} class="alert alert-danger" role="alert">
<%= get_flash(@conn, :error) %>
<p :if={@flash["error"]} class="alert alert-danger" role="alert">
<%= @flash["error"] %>
</p>
</div>
</header>

View File

@ -9,11 +9,8 @@
<hr style="margin: 2em auto; border-width: 1px; border-color: rgb(161, 161, 170); width: 100%; max-width: 42rem;" />
<a style="color: rgb(161, 161, 170);" href={Routes.live_url(Endpoint, HomeLive)}>
<%= dgettext(
"emails",
"This email was sent from memEx"
) %>
<a style="color: rgb(161, 161, 170);" href={~p"/"}>
<%= dgettext("emails", "This email was sent from memEx") %>
</a>
</body>
</html>

View File

@ -0,0 +1,9 @@
<%= @email.subject %>
====================
<%= @inner_content %>
=====================
<%= dgettext("emails", "This email was sent from memEx at %{url}", url: ~p"/") %>

View File

@ -8,13 +8,8 @@
<.live_title suffix={" | #{gettext("memEx")}"}>
<%= assigns[:page_title] || gettext("memEx") %>
</.live_title>
<link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/css/app.css")} />
<script
defer
phx-track-static
type="text/javascript"
src={Routes.static_path(@conn, "/js/app.js")}
>
<link phx-track-static rel="stylesheet" href={~p"/css/app.css"} />
<script defer phx-track-static type="text/javascript" src={~p"/js/app.js"}>
</script>
</head>

View File

@ -92,7 +92,7 @@ defmodule MemexWeb.Components.NotesTableComponent do
assigns = %{slug: slug}
slug_block = ~H"""
<.link navigate={Routes.note_show_path(Endpoint, :show, @slug)} class="link">
<.link navigate={~p"/note/#{@slug}"} class="link">
<%= @slug %>
</.link>
"""
@ -105,7 +105,7 @@ defmodule MemexWeb.Components.NotesTableComponent do
~H"""
<div class="flex flex-wrap justify-center space-x-1">
<.link :for={tag <- @tags} patch={Routes.note_index_path(Endpoint, :search, tag)} class="link">
<.link :for={tag <- @tags} patch={~p"/notes/#{tag}"} class="link">
<%= tag %>
</.link>
</div>

View File

@ -93,7 +93,7 @@ defmodule MemexWeb.Components.PipelinesTableComponent do
assigns = %{slug: slug}
slug_block = ~H"""
<.link navigate={Routes.pipeline_show_path(Endpoint, :show, @slug)} class="link">
<.link navigate={~p"/pipeline/#{@slug}"} class="link">
<%= @slug %>
</.link>
"""
@ -118,11 +118,7 @@ defmodule MemexWeb.Components.PipelinesTableComponent do
~H"""
<div class="flex flex-wrap justify-center space-x-1">
<.link
:for={tag <- @tags}
patch={Routes.pipeline_index_path(Endpoint, :search, tag)}
class="link"
>
<.link :for={tag <- @tags} patch={~p"/pipelines/#{tag}"} class="link">
<%= tag %>
</.link>
</div>

View File

@ -6,7 +6,8 @@ defmodule MemexWeb.EmailController do
use MemexWeb, :controller
alias Memex.Accounts.User
plug :put_layout, {MemexWeb.LayoutView, :email}
plug :put_root_layout, html: {MemexWeb.Layouts, :email_html}
plug :put_layout, false
@sample_assigns %{
email: %{subject: "Example subject"},
@ -18,6 +19,6 @@ defmodule MemexWeb.EmailController do
Debug route used to preview emails
"""
def preview(conn, %{"id" => template}) do
render(conn, "#{template |> to_string()}.html", @sample_assigns)
render(conn, String.to_existing_atom(template), @sample_assigns)
end
end

View File

@ -0,0 +1,9 @@
defmodule MemexWeb.EmailHTML do
@moduledoc """
Renders email templates
"""
use MemexWeb, :html
embed_templates "email_html/*"
end

View File

@ -15,7 +15,7 @@
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(161, 161, 170);" href={@url}><%= @url %></a>
<br />

View File

@ -9,4 +9,4 @@
<%= dgettext("emails",
"If you didn't create an account at %{url}, please ignore this.",
url: Routes.live_url(Endpoint, HomeLive)) %>
url: ~p"/") %>

View File

@ -9,7 +9,7 @@
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(161, 161, 170);" href={@url}><%= @url %></a>
<br />

View File

@ -7,4 +7,4 @@
<%= dgettext("emails",
"If you didn't request this change from %{url}, please ignore this.",
url: Routes.live_url(Endpoint, HomeLive)) %>
url: ~p"/") %>

View File

@ -9,7 +9,7 @@
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(161, 161, 170);" href={@url}><%= @url %></a>
<br />

View File

@ -7,4 +7,4 @@
<%= dgettext("emails",
"If you didn't request this change from %{url}, please ignore this.",
url: Routes.live_url(Endpoint, HomeLive)) %>
url: ~p"/") %>

View File

@ -1,15 +1,16 @@
defmodule MemexWeb.ErrorView do
use MemexWeb, :view
alias MemexWeb.HomeLive
defmodule MemexWeb.ErrorHTML do
use MemexWeb, :html
def template_not_found(error_path, _assigns) do
embed_templates "error_html/*"
def render(template, _assigns) do
error_string =
case error_path do
case template do
"404.html" -> dgettext("errors", "not found")
"401.html" -> dgettext("errors", "unauthorized")
_other_path -> dgettext("errors", "internal server error")
end
render("error.html", %{error_string: error_string})
error(%{error_string: error_string})
end
end

View File

@ -24,10 +24,7 @@
<hr class="w-full hr" />
<.link
href={Routes.live_path(Endpoint, HomeLive)}
class="link title text-primary-400 text-lg"
>
<.link href={~p"/"} class="link title text-primary-400 text-lg">
<%= dgettext("errors", "go back home") %>
</.link>
</div>

View File

@ -0,0 +1,14 @@
defmodule MemexWeb.ErrorJSON do
import MemexWeb.Gettext
def render(template, _assigns) do
error_string =
case template do
"404.json" -> dgettext("errors", "not found")
"401.json" -> dgettext("errors", "unauthorized")
_other_path -> dgettext("errors", "internal server error")
end
%{errors: %{detail: error_string}}
end
end

View File

@ -1,11 +0,0 @@
defmodule MemexWeb.HomeController do
@moduledoc """
Controller for home page
"""
use MemexWeb, :controller
def index(conn, _params) do
render(conn, "index.html")
end
end

View File

@ -0,0 +1,5 @@
defmodule MemexWeb.HomeHTML do
use MemexWeb, :html
embed_templates "home_html/*"
end

View File

@ -3,12 +3,11 @@ defmodule MemexWeb.UserAuth do
Functions for user session and authentication
"""
use MemexWeb, :verified_routes
import Plug.Conn
import Phoenix.Controller
import MemexWeb.Gettext
alias Memex.{Accounts, Accounts.User}
alias MemexWeb.HomeLive
alias MemexWeb.Router.Helpers, as: Routes
# Make the remember me cookie valid for 60 days.
# If you want bump or reduce this value, also change
@ -39,7 +38,7 @@ defmodule MemexWeb.UserAuth do
dgettext("errors", "You must confirm your account and log in to access this page.")
)
|> maybe_store_return_to()
|> redirect(to: Routes.user_session_path(conn, :new))
|> redirect(to: ~p"/users/log_in")
|> halt()
end
@ -49,8 +48,7 @@ defmodule MemexWeb.UserAuth do
conn
|> renew_session()
|> put_session(:user_token, token)
|> put_session(:live_socket_id, "users_sessions:#{Base.url_encode64(token)}")
|> put_token_in_session(token)
|> maybe_write_remember_me_cookie(token, params)
|> redirect(to: user_return_to || signed_in_path(conn))
end
@ -96,7 +94,7 @@ defmodule MemexWeb.UserAuth do
"""
def log_out_user(conn) do
user_token = get_session(conn, :user_token)
user_token && Accounts.delete_session_token(user_token)
user_token && Accounts.delete_user_session_token(user_token)
if live_socket_id = get_session(conn, :live_socket_id) do
MemexWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
@ -105,7 +103,7 @@ defmodule MemexWeb.UserAuth do
conn
|> renew_session()
|> delete_resp_cookie(@remember_me_cookie)
|> redirect(to: "/")
|> redirect(to: ~p"/")
end
@doc """
@ -119,19 +117,110 @@ defmodule MemexWeb.UserAuth do
end
defp ensure_user_token(conn) do
if user_token = get_session(conn, :user_token) do
{user_token, conn}
if token = get_session(conn, :user_token) do
{token, conn}
else
conn = fetch_cookies(conn, signed: [@remember_me_cookie])
if user_token = conn.cookies[@remember_me_cookie] do
{user_token, put_session(conn, :user_token, user_token)}
if token = conn.cookies[@remember_me_cookie] do
{token, put_token_in_session(conn, token)}
else
{nil, conn}
end
end
end
@doc """
Handles mounting and authenticating the current_user in LiveViews.
## `on_mount` arguments
* `:mount_current_user` - Assigns current_user
to socket assigns based on user_token, or nil if
there's no user_token or no matching user.
* `:ensure_authenticated` - Authenticates the user from the session,
and assigns the current_user to socket assigns based
on user_token.
Redirects to login page if there's no logged user.
* `:redirect_if_user_is_authenticated` - Authenticates the user from the session.
Redirects to signed_in_path if there's a logged user.
## Examples
Use the `on_mount` lifecycle macro in LiveViews to mount or authenticate
the current_user:
defmodule MemexWeb.PageLive do
use MemexWeb, :live_view
on_mount {MemexWeb.UserAuth, :mount_current_user}
...
end
Or use the `live_session` of your router to invoke the on_mount callback:
live_session :authenticated, on_mount: [{MemexWeb.UserAuth, :ensure_authenticated}] do
live "/profile", ProfileLive, :index
end
"""
def on_mount(:mount_current_user, _params, session, socket) do
{:cont, mount_current_user(session, socket)}
end
def on_mount(:ensure_authenticated, _params, session, socket) do
socket = mount_current_user(session, socket)
if socket.assigns.current_user do
{:cont, socket}
else
error_flash = dgettext("errors", "You must log in to access this page.")
socket =
socket
|> Phoenix.LiveView.put_flash(:error, error_flash)
|> Phoenix.LiveView.redirect(to: ~p"/users/log_in")
{:halt, socket}
end
end
def on_mount(:ensure_admin, _params, session, socket) do
socket = mount_current_user(session, socket)
if socket.assigns.current_user && socket.assigns.current_user.role == :admin do
{:cont, socket}
else
error_flash = dgettext("errors", "You must log in as an administrator to access this page.")
socket =
socket
|> Phoenix.LiveView.put_flash(:error, error_flash)
|> Phoenix.LiveView.redirect(to: ~p"/users/log_in")
{:halt, socket}
end
end
def on_mount(:redirect_if_user_is_authenticated, _params, session, socket) do
socket = mount_current_user(session, socket)
if socket.assigns.current_user do
{:halt, Phoenix.LiveView.redirect(socket, to: signed_in_path(socket))}
else
{:cont, socket}
end
end
defp mount_current_user(session, socket) do
Phoenix.Component.assign_new(socket, :current_user, fn ->
if user_token = session["user_token"] do
Accounts.get_user_by_session_token(user_token)
end
end)
end
@doc """
Used for routes that require the user to not be authenticated.
"""
@ -161,7 +250,7 @@ defmodule MemexWeb.UserAuth do
dgettext("errors", "You must confirm your account and log in to access this page.")
)
|> maybe_store_return_to()
|> redirect(to: Routes.user_session_path(conn, :new))
|> redirect(to: ~p"/users/log_in")
|> halt()
end
end
@ -176,16 +265,34 @@ defmodule MemexWeb.UserAuth do
conn
|> put_flash(:error, dgettext("errors", "You are not authorized to view this page."))
|> maybe_store_return_to()
|> redirect(to: Routes.live_path(conn, HomeLive))
|> redirect(to: ~p"/")
|> halt()
end
end
def put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, _opts) do
default = Application.fetch_env!(:gettext, :default_locale)
Gettext.put_locale(locale || default)
conn |> put_session(:locale, locale || default)
end
def put_user_locale(conn, _opts) do
default = Application.fetch_env!(:gettext, :default_locale)
Gettext.put_locale(default)
conn |> put_session(:locale, default)
end
defp put_token_in_session(conn, token) do
conn
|> put_session(:user_token, token)
|> put_session(:live_socket_id, "users_sessions:#{Base.url_encode64(token)}")
end
defp maybe_store_return_to(%{method: "GET"} = conn) do
put_session(conn, :user_return_to, current_path(conn))
end
defp maybe_store_return_to(conn), do: conn
defp signed_in_path(_conn), do: "/"
defp signed_in_path(_conn), do: ~p"/"
end

View File

@ -5,14 +5,14 @@ defmodule MemexWeb.UserConfirmationController do
alias Memex.Accounts
def new(conn, _params) do
render(conn, "new.html", page_title: gettext("Confirm your account"))
render(conn, :new, page_title: gettext("Confirm your account"))
end
def create(conn, %{"user" => %{"email" => email}}) do
if user = Accounts.get_user_by_email(email) do
Accounts.deliver_user_confirmation_instructions(
user,
&Routes.user_confirmation_url(conn, :confirm, &1)
fn token -> url(MemexWeb.Endpoint, ~p"/users/confirm/#{token}") end
)
end

View File

@ -0,0 +1,6 @@
defmodule MemexWeb.UserConfirmationHTML do
use MemexWeb, :html
alias Memex.Accounts
embed_templates "user_confirmation_html/*"
end

View File

@ -7,7 +7,7 @@
:let={f}
for={%{}}
as={:user}
action={Routes.user_confirmation_path(@conn, :create)}
action={~p"/users/confirm"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-400") %>
@ -21,14 +21,10 @@
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link
:if={Accounts.allow_registration?()}
href={Routes.user_registration_path(@conn, :new)}
class="btn btn-primary"
>
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "register") %>
</.link>
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "log in") %>
</.link>
</div>

View File

@ -2,7 +2,6 @@ defmodule MemexWeb.UserRegistrationController do
use MemexWeb, :controller
import MemexWeb.Gettext
alias Memex.{Accounts, Accounts.Invites}
alias MemexWeb.HomeLive
def new(conn, %{"invite" => invite_token}) do
if Invites.valid_invite_token?(invite_token) do
@ -10,7 +9,7 @@ defmodule MemexWeb.UserRegistrationController do
else
conn
|> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive))
|> redirect(to: ~p"/")
end
end
@ -20,13 +19,13 @@ defmodule MemexWeb.UserRegistrationController do
else
conn
|> put_flash(:error, dgettext("errors", "Sorry, public registration is disabled"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive))
|> redirect(to: ~p"/")
end
end
# renders new user registration page
defp render_new(conn, invite_token \\ nil) do
render(conn, "new.html",
render(conn, :new,
changeset: Accounts.change_user_registration(),
invite_token: invite_token,
page_title: gettext("register")
@ -39,7 +38,7 @@ defmodule MemexWeb.UserRegistrationController do
else
conn
|> put_flash(:error, dgettext("errors", "Sorry, this invite was not found or expired"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive))
|> redirect(to: ~p"/")
end
end
@ -49,7 +48,7 @@ defmodule MemexWeb.UserRegistrationController do
else
conn
|> put_flash(:error, dgettext("errors", "Sorry, public registration is disabled"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive))
|> redirect(to: ~p"/")
end
end
@ -58,17 +57,17 @@ defmodule MemexWeb.UserRegistrationController do
{:ok, user} ->
Accounts.deliver_user_confirmation_instructions(
user,
&Routes.user_confirmation_url(conn, :confirm, &1)
fn token -> url(MemexWeb.Endpoint, ~p"/users/confirm/#{token}") end
)
conn
|> put_flash(:info, dgettext("prompts", "please check your email to verify your account"))
|> redirect(to: Routes.user_session_path(Endpoint, :new))
|> redirect(to: ~p"/users/log_in")
{:error, :invalid_token} ->
conn
|> put_flash(:error, dgettext("errors", "sorry, this invite was not found or expired"))
|> redirect(to: Routes.live_path(Endpoint, HomeLive))
|> redirect(to: ~p"/")
{:error, %Ecto.Changeset{} = changeset} ->
conn |> render("new.html", changeset: changeset, invite_token: invite_token)

View File

@ -0,0 +1,5 @@
defmodule MemexWeb.UserRegistrationHTML do
use MemexWeb, :html
embed_templates "user_registration_html/*"
end

View File

@ -6,7 +6,7 @@
<.form
:let={f}
for={@changeset}
action={Routes.user_registration_path(@conn, :create)}
action={~p"/users/register"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
@ -40,10 +40,10 @@
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "log in") %>
</.link>
<.link href={Routes.user_reset_password_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/reset_password"} class="btn btn-primary">
<%= dgettext("actions", "forgot your password?") %>
</.link>
</div>

View File

@ -6,14 +6,14 @@ defmodule MemexWeb.UserResetPasswordController do
plug :get_user_by_reset_password_token when action in [:edit, :update]
def new(conn, _params) do
render(conn, "new.html", page_title: gettext("forgot your password?"))
render(conn, :new, page_title: gettext("forgot your password?"))
end
def create(conn, %{"user" => %{"email" => email}}) do
if user = Accounts.get_user_by_email(email) do
Accounts.deliver_user_reset_password_instructions(
user,
&Routes.user_reset_password_url(conn, :edit, &1)
fn token -> url(MemexWeb.Endpoint, ~p"/users/reset_password/#{token}") end
)
end
@ -31,7 +31,7 @@ defmodule MemexWeb.UserResetPasswordController do
end
def edit(conn, _params) do
render(conn, "edit.html",
render(conn, :edit,
changeset: Accounts.change_user_password(conn.assigns.user),
page_title: gettext("Reset your password")
)
@ -44,10 +44,10 @@ defmodule MemexWeb.UserResetPasswordController do
{:ok, _} ->
conn
|> put_flash(:info, dgettext("prompts", "Password reset successfully."))
|> redirect(to: Routes.user_session_path(conn, :new))
|> redirect(to: ~p"/users/log_in")
{:error, changeset} ->
render(conn, "edit.html", changeset: changeset)
render(conn, :edit, changeset: changeset)
end
end

View File

@ -0,0 +1,6 @@
defmodule MemexWeb.UserResetPasswordHTML do
use MemexWeb, :html
alias Memex.Accounts
embed_templates "user_reset_password_html/*"
end

View File

@ -6,7 +6,7 @@
<.form
:let={f}
for={@changeset}
action={Routes.user_reset_password_path(@conn, :update, @token)}
action={~p"/users/reset_password/#{@token}"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
@ -34,14 +34,10 @@
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link
:if={Accounts.allow_registration?()}
href={Routes.user_registration_path(@conn, :new)}
class="btn btn-primary"
>
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "register") %>
</.link>
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "log in") %>
</.link>
</div>

View File

@ -7,7 +7,7 @@
:let={f}
for={%{}}
as={:user}
action={Routes.user_reset_password_path(@conn, :create)}
action={~p"/users/reset_password"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %>
@ -21,14 +21,10 @@
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link
:if={Accounts.allow_registration?()}
href={Routes.user_registration_path(@conn, :new)}
class="btn btn-primary"
>
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "register") %>
</.link>
<.link href={Routes.user_session_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "log in") %>
</.link>
</div>

View File

@ -5,7 +5,7 @@ defmodule MemexWeb.UserSessionController do
alias MemexWeb.UserAuth
def new(conn, _params) do
render(conn, "new.html", error_message: nil, page_title: gettext("log in"))
render(conn, :new, error_message: nil, page_title: gettext("log in"))
end
def create(conn, %{"user" => user_params}) do
@ -14,7 +14,7 @@ defmodule MemexWeb.UserSessionController do
if user = Accounts.get_user_by_email_and_password(email, password) do
UserAuth.log_in_user(conn, user, user_params)
else
render(conn, "new.html", error_message: dgettext("errors", "Invalid email or password"))
render(conn, :new, error_message: dgettext("errors", "Invalid email or password"))
end
end

View File

@ -0,0 +1,6 @@
defmodule MemexWeb.UserSessionHTML do
use MemexWeb, :html
alias Memex.Accounts
embed_templates "user_session_html/*"
end

View File

@ -6,8 +6,8 @@
<.form
:let={f}
for={@conn}
action={Routes.user_session_path(@conn, :create)}
as="user"
action={~p"/users/log_in"}
as={:user}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@error_message} class="alert alert-danger col-span-3">
@ -31,14 +31,10 @@
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link
:if={Accounts.allow_registration?()}
href={Routes.user_registration_path(@conn, :new)}
class="btn btn-primary"
>
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "register") %>
</.link>
<.link href={Routes.user_reset_password_path(@conn, :new)} class="btn btn-primary">
<.link href={~p"/users/reset_password"} class="btn btn-primary">
<%= dgettext("actions", "forgot your password?") %>
</.link>
</div>

View File

@ -2,12 +2,12 @@ defmodule MemexWeb.UserSettingsController do
use MemexWeb, :controller
import MemexWeb.Gettext
alias Memex.Accounts
alias MemexWeb.{HomeLive, UserAuth}
alias MemexWeb.UserAuth
plug :assign_email_and_password_changesets
def edit(conn, _params) do
render(conn, "edit.html", page_title: gettext("settings"))
render(conn, :edit, page_title: gettext("settings"))
end
def update(%{assigns: %{current_user: user}} = conn, %{
@ -20,7 +20,7 @@ defmodule MemexWeb.UserSettingsController do
Accounts.deliver_update_email_instructions(
applied_user,
user.email,
&Routes.user_settings_url(conn, :confirm_email, &1)
fn token -> url(MemexWeb.Endpoint, ~p"/users/settings/confirm_email/#{token}") end
)
conn
@ -31,10 +31,10 @@ defmodule MemexWeb.UserSettingsController do
"a link to confirm your email change has been sent to the new address."
)
)
|> redirect(to: Routes.user_settings_path(conn, :edit))
|> redirect(to: ~p"/users/settings")
{:error, changeset} ->
conn |> render("edit.html", email_changeset: changeset)
conn |> render(:edit, email_changeset: changeset)
end
end
@ -47,11 +47,11 @@ defmodule MemexWeb.UserSettingsController do
{:ok, user} ->
conn
|> put_flash(:info, dgettext("prompts", "password updated successfully."))
|> put_session(:user_return_to, Routes.user_settings_path(conn, :edit))
|> put_session(:user_return_to, ~p"/users/settings")
|> UserAuth.log_in_user(user)
{:error, changeset} ->
conn |> render("edit.html", password_changeset: changeset)
conn |> render(:edit, password_changeset: changeset)
end
end
@ -63,10 +63,10 @@ defmodule MemexWeb.UserSettingsController do
{:ok, _user} ->
conn
|> put_flash(:info, dgettext("prompts", "language updated successfully."))
|> redirect(to: Routes.user_settings_path(conn, :edit))
|> redirect(to: ~p"/users/settings")
{:error, changeset} ->
conn |> render("edit.html", locale_changeset: changeset)
conn |> render(:edit, locale_changeset: changeset)
end
end
@ -75,7 +75,7 @@ defmodule MemexWeb.UserSettingsController do
:ok ->
conn
|> put_flash(:info, dgettext("prompts", "email changed successfully."))
|> redirect(to: Routes.user_settings_path(conn, :edit))
|> redirect(to: ~p"/users/settings")
:error ->
conn
@ -83,7 +83,7 @@ defmodule MemexWeb.UserSettingsController do
:error,
dgettext("errors", "email change link is invalid or it has expired.")
)
|> redirect(to: Routes.user_settings_path(conn, :edit))
|> redirect(to: ~p"/users/settings")
end
end
@ -93,11 +93,11 @@ defmodule MemexWeb.UserSettingsController do
conn
|> put_flash(:error, dgettext("prompts", "your account has been deleted"))
|> redirect(to: Routes.live_path(conn, HomeLive))
|> redirect(to: ~p"/")
else
conn
|> put_flash(:error, dgettext("errors", "unable to delete user"))
|> redirect(to: Routes.user_settings_path(conn, :edit))
|> redirect(to: ~p"/users/settings")
end
end

View File

@ -0,0 +1,5 @@
defmodule MemexWeb.UserSettingsHTML do
use MemexWeb, :html
embed_templates "user_settings_html/*"
end

View File

@ -8,7 +8,7 @@
<.form
:let={f}
for={@email_changeset}
action={Routes.user_settings_path(@conn, :update)}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<h3 class="title text-primary-400 text-lg text-center col-span-3">
@ -50,7 +50,7 @@
<.form
:let={f}
for={@password_changeset}
action={Routes.user_settings_path(@conn, :update)}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<h3 class="title text-primary-400 text-lg text-center col-span-3">
@ -104,7 +104,7 @@
<.form
:let={f}
for={@locale_changeset}
action={Routes.user_settings_path(@conn, :update)}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :locale, dgettext("actions", "change language"),
@ -134,17 +134,13 @@
<hr class="hr" />
<div class="flex justify-end items-center">
<.link
href={Routes.export_path(@conn, :export, :json)}
class="mx-4 my-2 btn btn-primary"
target="_blank"
>
<.link href={~p"/export/json"} class="mx-4 my-2 btn btn-primary" target="_blank">
<%= dgettext("actions", "export data as json") %>
</.link>
<.link
href={Routes.user_settings_path(@conn, :delete, @current_user)}
method={:delete}
href={~p"/users/settings/#{@current_user}"}
method="delete"
class="mx-4 my-2 btn btn-alert"
data-confirm={dgettext("prompts", "are you sure you want to delete your account?")}
>

View File

@ -20,7 +20,7 @@ defmodule MemexWeb.Endpoint do
at: "/",
from: :memex,
gzip: false,
only: ~w(css fonts images js favicon.ico robots.txt)
only: MemexWeb.static_paths()
# Code reloading can be explicitly enabled under the
# :code_reloader configuration of your endpoint.

View File

@ -60,11 +60,11 @@ defmodule MemexWeb.ContextLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
{:noreply, socket |> push_patch(to: Routes.context_index_path(Endpoint, :index))}
{:noreply, socket |> push_patch(to: ~p"/contexts")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
redirect_to = Routes.context_index_path(Endpoint, :search, search_term)
redirect_to = ~p"/contexts/#{search_term}"
{:noreply, socket |> push_patch(to: redirect_to)}
end

View File

@ -34,7 +34,7 @@
<:actions :let={context}>
<.link
:if={Contexts.is_owner?(context, @current_user)}
patch={Routes.context_index_path(@socket, :edit, context.slug)}
patch={~p"/contexts/#{context}/edit"}
aria-label={dgettext("actions", "edit %{context_slug}", context_slug: context.slug)}
>
<%= dgettext("actions", "edit") %>
@ -53,16 +53,12 @@
</.live_component>
<% end %>
<.link
:if={@current_user}
patch={Routes.context_index_path(@socket, :new)}
class="self-end btn btn-primary"
>
<.link :if={@current_user} patch={~p"/contexts/new"} class="self-end btn btn-primary">
<%= dgettext("actions", "new context") %>
</.link>
</div>
<.modal :if={@live_action in [:new, :edit]} return_to={Routes.context_index_path(@socket, :index)}>
<.modal :if={@live_action in [:new, :edit]} return_to={~p"/contexts"}>
<.live_component
module={MemexWeb.ContextLive.FormComponent}
id={@context.id || :new}
@ -70,6 +66,6 @@
title={@page_title}
action={@live_action}
context={@context}
return_to={Routes.context_index_path(@socket, :index)}
return_to={~p"/contexts"}
/>
</.modal>

View File

@ -38,7 +38,7 @@ defmodule MemexWeb.ContextLive.Show do
socket =
socket
|> put_flash(:info, gettext("%{slug} deleted", slug: slug))
|> push_navigate(to: Routes.context_index_path(Endpoint, :index))
|> push_navigate(to: ~p"/contexts")
{:noreply, socket}
end

View File

@ -4,11 +4,7 @@
</h1>
<div class="flex flex-wrap space-x-1">
<.link
:for={tag <- @context.tags}
navigate={Routes.context_index_path(Endpoint, :search, tag)}
class="link"
>
<.link :for={tag <- @context.tags} navigate={~p"/contexts/#{tag}"} class="link">
<%= tag %>
</.link>
</div>
@ -23,7 +19,7 @@
<.link
:if={Contexts.is_owner?(@context, @current_user)}
class="btn btn-primary"
patch={Routes.context_show_path(@socket, :edit, @context.slug)}
patch={~p"/context/#{@context}/edit"}
>
<%= dgettext("actions", "edit") %>
</.link>
@ -40,10 +36,7 @@
</div>
</div>
<.modal
:if={@live_action == :edit}
return_to={Routes.context_show_path(@socket, :show, @context.slug)}
>
<.modal :if={@live_action == :edit} return_to={~p"/context/#{@context}"}>
<.live_component
module={MemexWeb.ContextLive.FormComponent}
id={@context.id}
@ -51,6 +44,6 @@
title={@page_title}
action={@live_action}
context={@context}
return_to={Routes.context_show_path(@socket, :show, @context.slug)}
return_to={~p"/context/#{@context}"}
/>
</.modal>

View File

@ -5,7 +5,6 @@ defmodule MemexWeb.HomeLive do
use MemexWeb, :live_view
alias Memex.Accounts
alias MemexWeb.FaqLive
@version Mix.Project.config()[:version]

View File

@ -32,7 +32,7 @@
</li>
<li class="flex flex-col justify-center items-center text-right space-y-2">
<.link navigate={Routes.live_path(Endpoint, FaqLive)} class="btn btn-primary">
<.link navigate={~p"/faq"} class="btn btn-primary">
<%= gettext("read more on how to use memEx") %>
</.link>
</li>
@ -86,7 +86,7 @@
</b>
<p class="flex flex-col justify-center items-center space-y-2">
<%= if @admins |> Enum.empty?() do %>
<.link href={Routes.user_registration_path(Endpoint, :new)} class="link">
<.link href={~p"/users/register"} class="link">
<%= dgettext("prompts", "register to setup memEx") %>
</.link>
<% else %>

View File

@ -8,7 +8,7 @@
<%= gettext("no invites 😔") %>
</h1>
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
<.link patch={~p"/invites"} class="btn btn-primary">
<%= dgettext("actions", "invite someone new!") %>
</.link>
<% end %>
@ -35,7 +35,7 @@
</form>
</:code_actions>
<.link
patch={Routes.invite_index_path(Endpoint, :edit, invite)}
patch={~p"/invites/#{invite}/edit"}
class="text-primary-400 link"
aria-label={
dgettext("actions", "edit invite for %{invite_name}", invite_name: invite.name)
@ -86,11 +86,7 @@
</.link>
</.invite_card>
<.link
:if={@invites != []}
patch={Routes.invite_index_path(Endpoint, :new)}
class="btn btn-primary ml-auto"
>
<.link :if={@invites != []} patch={~p"/invites/new"} class="btn btn-primary ml-auto">
<%= dgettext("actions", "create invite") %>
</.link>
</div>
@ -152,14 +148,14 @@
<% end %>
</div>
<.modal :if={@live_action in [:new, :edit]} return_to={Routes.invite_index_path(Endpoint, :index)}>
<.modal :if={@live_action in [:new, :edit]} return_to={~p"/invites"}>
<.live_component
module={MemexWeb.InviteLive.FormComponent}
id={@invite.id || :new}
title={@page_title}
action={@live_action}
invite={@invite}
return_to={Routes.invite_index_path(Endpoint, :index)}
return_to={~p"/invites"}
current_user={@current_user}
/>
</.modal>

View File

@ -60,11 +60,11 @@ defmodule MemexWeb.NoteLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
{:noreply, socket |> push_patch(to: Routes.note_index_path(Endpoint, :index))}
{:noreply, socket |> push_patch(to: ~p"/notes")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
{:noreply, socket |> push_patch(to: Routes.note_index_path(Endpoint, :search, search_term))}
{:noreply, socket |> push_patch(to: ~p"/notes/#{search_term}")}
end
defp display_notes(%{assigns: %{current_user: current_user, search: search}} = socket)

View File

@ -34,7 +34,7 @@
<:actions :let={note}>
<.link
:if={Notes.is_owner?(note, @current_user)}
patch={Routes.note_index_path(@socket, :edit, note.slug)}
patch={~p"/notes/#{note}/edit"}
aria-label={dgettext("actions", "edit %{note_slug}", note_slug: note.slug)}
>
<%= dgettext("actions", "edit") %>
@ -53,16 +53,12 @@
</.live_component>
<% end %>
<.link
:if={@current_user}
patch={Routes.note_index_path(@socket, :new)}
class="self-end btn btn-primary"
>
<.link :if={@current_user} patch={~p"/notes/new"} class="self-end btn btn-primary">
<%= dgettext("actions", "new note") %>
</.link>
</div>
<.modal :if={@live_action in [:new, :edit]} return_to={Routes.note_index_path(@socket, :index)}>
<.modal :if={@live_action in [:new, :edit]} return_to={~p"/notes"}>
<.live_component
module={MemexWeb.NoteLive.FormComponent}
id={@note.id || :new}
@ -70,6 +66,6 @@
title={@page_title}
action={@live_action}
note={@note}
return_to={Routes.note_index_path(@socket, :index)}
return_to={~p"/notes"}
/>
</.modal>

View File

@ -38,7 +38,7 @@ defmodule MemexWeb.NoteLive.Show do
socket =
socket
|> put_flash(:info, gettext("%{slug} deleted", slug: slug))
|> push_navigate(to: Routes.note_index_path(Endpoint, :index))
|> push_navigate(to: ~p"/notes")
{:noreply, socket}
end

View File

@ -4,11 +4,7 @@
</h1>
<div class="flex flex-wrap space-x-1">
<.link
:for={tag <- @note.tags}
navigate={Routes.note_index_path(Endpoint, :search, tag)}
class="link"
>
<.link :for={tag <- @note.tags} navigate={~p"/notes/#{tag}"} class="link">
<%= tag %>
</.link>
</div>
@ -23,7 +19,7 @@
<.link
:if={Notes.is_owner?(@note, @current_user)}
class="btn btn-primary"
patch={Routes.note_show_path(@socket, :edit, @note.slug)}
patch={~p"/note/#{@note}/edit"}
>
<%= dgettext("actions", "edit") %>
</.link>
@ -40,7 +36,7 @@
</div>
</div>
<.modal :if={@live_action == :edit} return_to={Routes.note_show_path(@socket, :show, @note.slug)}>
<.modal :if={@live_action == :edit} return_to={~p"/note/#{@note}"}>
<.live_component
module={MemexWeb.NoteLive.FormComponent}
id={@note.id}
@ -48,6 +44,6 @@
title={@page_title}
action={@live_action}
note={@note}
return_to={Routes.note_show_path(@socket, :show, @note.slug)}
return_to={~p"/note/#{@note}"}
/>
</.modal>

View File

@ -60,12 +60,11 @@ defmodule MemexWeb.PipelineLive.Index do
end
def handle_event("search", %{"search" => %{"search_term" => ""}}, socket) do
{:noreply, socket |> push_patch(to: Routes.pipeline_index_path(Endpoint, :index))}
{:noreply, socket |> push_patch(to: ~p"/pipelines")}
end
def handle_event("search", %{"search" => %{"search_term" => search_term}}, socket) do
redirect_to = Routes.pipeline_index_path(Endpoint, :search, search_term)
{:noreply, socket |> push_patch(to: redirect_to)}
{:noreply, socket |> push_patch(to: ~p"/pipelines/#{search_term}")}
end
defp display_pipelines(%{assigns: %{current_user: current_user, search: search}} = socket)

View File

@ -34,7 +34,7 @@
<:actions :let={pipeline}>
<.link
:if={Pipelines.is_owner?(pipeline, @current_user)}
patch={Routes.pipeline_index_path(@socket, :edit, pipeline.slug)}
patch={~p"/pipelines/#{pipeline}/edit"}
aria-label={dgettext("actions", "edit %{pipeline_slug}", pipeline_slug: pipeline.slug)}
>
<%= dgettext("actions", "edit") %>
@ -55,19 +55,12 @@
</.live_component>
<% end %>
<.link
:if={@current_user}
patch={Routes.pipeline_index_path(@socket, :new)}
class="self-end btn btn-primary"
>
<.link :if={@current_user} patch={~p"/pipelines/new"} class="self-end btn btn-primary">
<%= dgettext("actions", "new pipeline") %>
</.link>
</div>
<.modal
:if={@live_action in [:new, :edit]}
return_to={Routes.pipeline_index_path(@socket, :index)}
>
<.modal :if={@live_action in [:new, :edit]} return_to={~p"/pipelines"}>
<.live_component
module={MemexWeb.PipelineLive.FormComponent}
id={@pipeline.id || :new}
@ -75,6 +68,6 @@
title={@page_title}
action={@live_action}
pipeline={@pipeline}
return_to={Routes.pipeline_index_path(@socket, :index)}
return_to={~p"/pipelines"}
/>
</.modal>

View File

@ -73,7 +73,7 @@ defmodule MemexWeb.PipelineLive.Show do
socket =
socket
|> put_flash(:info, gettext("%{slug} deleted", slug: slug))
|> push_navigate(to: Routes.pipeline_index_path(Endpoint, :index))
|> push_navigate(to: ~p"/pipelines")
{:noreply, socket}
end
@ -91,7 +91,7 @@ defmodule MemexWeb.PipelineLive.Show do
socket =
socket
|> put_flash(:info, gettext("%{title} deleted", title: title))
|> push_patch(to: Routes.pipeline_show_path(Endpoint, :show, pipeline_slug))
|> push_patch(to: ~p"/pipeline/#{pipeline_slug}")
{:noreply, socket}
end
@ -110,7 +110,7 @@ defmodule MemexWeb.PipelineLive.Show do
socket =
socket
|> push_patch(to: Routes.pipeline_show_path(Endpoint, :show, pipeline_slug))
|> push_patch(to: ~p"/pipeline/#{pipeline_slug}")
{:noreply, socket}
end

View File

@ -4,11 +4,7 @@
</h1>
<div class="flex flex-wrap space-x-1">
<.link
:for={tag <- @pipeline.tags}
navigate={Routes.pipeline_index_path(Endpoint, :search, tag)}
class="link"
>
<.link :for={tag <- @pipeline.tags} navigate={~p"/pipelines/#{tag}"} class="link">
<%= tag %>
</.link>
</div>
@ -31,7 +27,7 @@
<.link
:if={Pipelines.is_owner?(@pipeline, @current_user)}
class="btn btn-primary"
patch={Routes.pipeline_show_path(@socket, :edit, @pipeline.slug)}
patch={~p"/pipeline/#{@pipeline}/edit"}
>
<%= dgettext("actions", "edit") %>
</.link>
@ -100,7 +96,7 @@
<.link
class="self-end btn btn-primary"
patch={Routes.pipeline_show_path(@socket, :edit_step, @pipeline.slug, step_id)}
patch={~p"/pipeline/#{@pipeline}/#{step_id}"}
aria-label={dgettext("actions", "edit %{step_title}", step_title: step.title)}
>
<%= dgettext("actions", "edit") %>
@ -127,7 +123,7 @@
<.link
:if={Pipelines.is_owner?(@pipeline, @current_user)}
class="self-end btn btn-primary"
patch={Routes.pipeline_show_path(@socket, :add_step, @pipeline.slug)}
patch={~p"/pipeline/#{@pipeline}/add_step"}
>
<%= dgettext("actions", "add step") %>
</.link>
@ -135,7 +131,7 @@
<%= case @live_action do %>
<% :edit -> %>
<.modal return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}>
<.modal return_to={~p"/pipeline/#{@pipeline}"}>
<.live_component
module={MemexWeb.PipelineLive.FormComponent}
id={@pipeline.id}
@ -143,11 +139,11 @@
title={@page_title}
action={@live_action}
pipeline={@pipeline}
return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}
return_to={~p"/pipeline/#{@pipeline}"}
/>
</.modal>
<% action when action in [:add_step, :edit_step] -> %>
<.modal return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}>
<.modal return_to={~p"/pipeline/#{@pipeline}"}>
<.live_component
module={MemexWeb.StepLive.FormComponent}
id={@pipeline.id || :new}
@ -156,7 +152,7 @@
action={@live_action}
pipeline={@pipeline}
step={@step}
return_to={Routes.pipeline_show_path(@socket, :show, @pipeline.slug)}
return_to={~p"/pipeline/#{@pipeline}"}
/>
</.modal>
<% _ -> %>

View File

@ -7,25 +7,13 @@ defmodule MemexWeb.Router do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, {MemexWeb.LayoutView, :root}
plug :put_root_layout, {MemexWeb.Layouts, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
plug :put_user_locale
end
defp put_user_locale(%{assigns: %{current_user: %{locale: locale}}} = conn, _opts) do
default = Application.fetch_env!(:gettext, :default_locale)
Gettext.put_locale(locale || default)
conn |> put_session(:locale, locale || default)
end
defp put_user_locale(conn, _opts) do
default = Application.fetch_env!(:gettext, :default_locale)
Gettext.put_locale(default)
conn |> put_session(:locale, default)
end
pipeline :require_admin do
plug :require_role, role: :admin
end
@ -34,13 +22,6 @@ defmodule MemexWeb.Router do
plug :accepts, ["json"]
end
scope "/", MemexWeb do
pipe_through :browser
live "/", HomeLive
live "/faq", FaqLive
end
## Authentication routes
scope "/", MemexWeb do
@ -56,10 +37,10 @@ defmodule MemexWeb.Router do
put "/users/reset_password/:token", UserResetPasswordController, :update
end
live_session :default do
scope "/", MemexWeb do
pipe_through [:browser, :require_authenticated_user]
live_session :default, on_mount: [{MemexWeb.UserAuth, :ensure_authenticated}] do
live "/notes/new", NoteLive.Index, :new
live "/notes/:slug/edit", NoteLive.Index, :edit
live "/note/:slug/edit", NoteLive.Show, :edit
@ -73,6 +54,7 @@ defmodule MemexWeb.Router do
live "/pipeline/:slug/edit", PipelineLive.Show, :edit
live "/pipeline/:slug/add_step", PipelineLive.Show, :add_step
live "/pipeline/:slug/:step_id", PipelineLive.Show, :edit_step
end
get "/users/settings", UserSettingsController, :edit
put "/users/settings", UserSettingsController, :update
@ -84,6 +66,10 @@ defmodule MemexWeb.Router do
scope "/", MemexWeb do
pipe_through [:browser]
live_session :public, on_mount: [{MemexWeb.UserAuth, :mount_current_user}] do
live "/", HomeLive
live "/faq", FaqLive
live "/notes", NoteLive.Index, :index
live "/notes/:search", NoteLive.Index, :search
live "/note/:slug", NoteLive.Show, :show
@ -98,10 +84,10 @@ defmodule MemexWeb.Router do
end
end
live_session :admin do
scope "/", MemexWeb do
pipe_through [:browser, :require_authenticated_user, :require_admin]
live_session :admin, on_mount: [{MemexWeb.UserAuth, :ensure_admin}] do
live "/invites", InviteLive.Index, :index
live "/invites/new", InviteLive.Index, :new
live "/invites/:id/edit", InviteLive.Index, :edit
@ -132,9 +118,6 @@ defmodule MemexWeb.Router do
pipe_through :browser
forward "/mailbox", Plug.Swoosh.MailboxPreview
end
scope "/dev" do
get "/preview/:id", MemexWeb.EmailController, :preview
end
end

View File

@ -1,11 +0,0 @@
<%= @email.subject %>
====================
<%= @inner_content %>
=====================
<%= dgettext("emails",
"This email was sent from memEx at %{url}",
url: Routes.live_url(Endpoint, HomeLive)) %>

View File

@ -1,7 +0,0 @@
defmodule MemexWeb.EmailView do
@moduledoc """
A view for email-related helper functions
"""
use MemexWeb, :view
alias MemexWeb.HomeLive
end

View File

@ -1,3 +0,0 @@
defmodule MemexWeb.PageView do
use MemexWeb, :view
end

View File

@ -1,8 +1,6 @@
defmodule MemexWeb.ViewHelpers do
defmodule MemexWeb.HTMLHelpers do
@moduledoc """
Contains common helpers that can be used in liveviews and regular views. These
are automatically imported into any Phoenix View using `use MemexWeb,
:view`
Contains common helpers that are used for rendering
"""
use Phoenix.Component

View File

@ -1,16 +0,0 @@
defmodule MemexWeb.LayoutView do
use MemexWeb, :view
alias MemexWeb.HomeLive
# Phoenix LiveDashboard is available only in development by default,
# so we instruct Elixir to not warn if the dashboard route is missing.
@compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}}
def get_title(%{assigns: %{title: title}}) when title not in [nil, ""] do
gettext("memEx | %{title}", title: title)
end
def get_title(_conn) do
gettext("memEx")
end
end

View File

@ -1,4 +0,0 @@
defmodule MemexWeb.UserConfirmationView do
use MemexWeb, :view
alias Memex.Accounts
end

View File

@ -1,3 +0,0 @@
defmodule MemexWeb.UserRegistrationView do
use MemexWeb, :view
end

View File

@ -1,4 +0,0 @@
defmodule MemexWeb.UserResetPasswordView do
use MemexWeb, :view
alias Memex.Accounts
end

View File

@ -1,4 +0,0 @@
defmodule MemexWeb.UserSessionView do
use MemexWeb, :view
alias Memex.Accounts
end

View File

@ -1,3 +0,0 @@
defmodule MemexWeb.UserSettingsView do
use MemexWeb, :view
end

View File

@ -7,7 +7,6 @@ defmodule Memex.MixProject do
version: "0.1.11",
elixir: "1.14.4",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: Mix.compilers(),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
@ -53,7 +52,6 @@ defmodule Memex.MixProject do
{:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.18.0"},
{:phoenix_view, "~> 2.0"},
{:phoenix_live_dashboard, "~> 0.6"},
{:ecto_sql, "~> 3.6"},
{:postgrex, ">= 0.0.0"},
@ -62,7 +60,6 @@ defmodule Memex.MixProject do
{:ex_doc, "~> 0.27", only: :dev, runtime: false},
{:swoosh, "~> 1.6"},
{:gen_smtp, "~> 1.0"},
{:phoenix_swoosh, "~> 1.0"},
{:oban, "~> 2.10"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},

View File

@ -38,9 +38,7 @@
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.18.18", "1f38fbd7c363723f19aad1a04b5490ff3a178e37daaf6999594d5f34796c47fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a5810d0472f3189ede6d2a95bda7f31c6113156b91784a3426cb0ab6a6d85214"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"},
"phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.0", "a544d83fde4a767efb78f45404a74c9e37b2a9c5ea3339692e65a6966731f935", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e88d117251e89a16b92222415a6d87b99a96747ddf674fc5c7631de734811dba"},
"phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"},
"phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"},
"plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"},
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"},
"plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"},

View File

@ -10,64 +10,64 @@
msgid ""
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:3
#: lib/memex_web/templates/user_confirmation/new.html.heex:16
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:3
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:3
#: lib/memex_web/templates/user_reset_password/edit.html.heex:29
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "change email"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:110
#: lib/memex_web/templates/user_settings/edit.html.heex:128
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:110
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "change language"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:57
#: lib/memex_web/templates/user_settings/edit.html.heex:97
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:57
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "change password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:94
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "create invite"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:50
#: lib/memex_web/live/context_live/show.html.heex:38
#: lib/memex_web/live/context_live/show.html.heex:34
#: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:38
#: lib/memex_web/live/note_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:46
#: lib/memex_web/live/pipeline_live/show.html.heex:117
#: lib/memex_web/live/pipeline_live/show.html.heex:42
#: lib/memex_web/live/pipeline_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "delete"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:147
#, elixir-autogen, elixir-format
msgid "delete user"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:40
#: lib/memex_web/live/context_live/show.html.heex:28
#: lib/memex_web/live/context_live/show.html.heex:24
#: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:28
#: lib/memex_web/live/note_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:36
#: lib/memex_web/live/pipeline_live/show.html.heex:106
#: lib/memex_web/live/pipeline_live/show.html.heex:32
#: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format
msgid "edit"
msgstr ""
@ -77,39 +77,39 @@ msgstr ""
msgid "invite someone new!"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:109
#: lib/memex_web/templates/user_confirmation/new.html.heex:32
#: lib/memex_web/templates/user_registration/new.html.heex:44
#: lib/memex_web/templates/user_reset_password/edit.html.heex:45
#: lib/memex_web/templates/user_reset_password/new.html.heex:32
#: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:85
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/memex_web/controllers/user_session_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "log in"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:61
#: lib/memex_web/live/context_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new context"
msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:61
#: lib/memex_web/live/note_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new note"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:63
#: lib/memex_web/live/pipeline_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new pipeline"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:100
#: lib/memex_web/templates/user_confirmation/new.html.heex:29
#: lib/memex_web/templates/user_registration/new.html.heex:3
#: lib/memex_web/templates/user_registration/new.html.heex:37
#: lib/memex_web/templates/user_reset_password/edit.html.heex:42
#: lib/memex_web/templates/user_reset_password/new.html.heex:29
#: lib/memex_web/templates/user_session/new.html.heex:39
#: lib/memex_web/components/core_components/topbar.html.heex:79
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:25
#: lib/memex_web/controllers/user_registration_html/new.html.heex:3
#: lib/memex_web/controllers/user_registration_html/new.html.heex:37
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/memex_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -123,24 +123,24 @@ msgstr ""
msgid "save"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:132
#: lib/memex_web/live/pipeline_live/show.html.heex:128
#, elixir-autogen, elixir-format
msgid "add step"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:47
#: lib/memex_web/templates/user_reset_password/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:42
#: lib/memex_web/controllers/user_registration_html/new.html.heex:47
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "forgot your password?"
msgstr ""
#: lib/memex_web/templates/user_reset_password/new.html.heex:16
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "send instructions to reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "export data as json"
msgstr ""
@ -156,24 +156,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:36
#: lib/memex_web/live/context_live/show.html.heex:32
#, 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:36
#: lib/memex_web/live/note_live/show.html.heex:32
#, 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:44
#: lib/memex_web/live/pipeline_live/show.html.heex:40
#, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:115
#: lib/memex_web/live/pipeline_live/show.html.heex:111
#, elixir-autogen, elixir-format
msgid "delete %{step_title}"
msgstr ""
@ -198,7 +198,7 @@ msgstr ""
msgid "edit %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:104
#: lib/memex_web/live/pipeline_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "edit %{step_title}"
msgstr ""
@ -208,12 +208,12 @@ msgstr ""
msgid "edit invite for %{invite_name}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:94
#: lib/memex_web/live/pipeline_live/show.html.heex:90
#, elixir-autogen, elixir-format
msgid "move %{step_title} down"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:78
#: lib/memex_web/live/pipeline_live/show.html.heex:74
#, elixir-autogen, elixir-format
msgid "move %{step_title} up"
msgstr ""

View File

@ -10,64 +10,64 @@ msgid ""
msgstr ""
"Language: de\n"
#: lib/memex_web/templates/user_confirmation/new.html.heex:3
#: lib/memex_web/templates/user_confirmation/new.html.heex:16
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:3
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:3
#: lib/memex_web/templates/user_reset_password/edit.html.heex:29
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "change email"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:110
#: lib/memex_web/templates/user_settings/edit.html.heex:128
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:110
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "change language"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:57
#: lib/memex_web/templates/user_settings/edit.html.heex:97
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:57
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "change password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:94
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "create invite"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:50
#: lib/memex_web/live/context_live/show.html.heex:38
#: lib/memex_web/live/context_live/show.html.heex:34
#: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:38
#: lib/memex_web/live/note_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:46
#: lib/memex_web/live/pipeline_live/show.html.heex:117
#: lib/memex_web/live/pipeline_live/show.html.heex:42
#: lib/memex_web/live/pipeline_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "delete"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:147
#, elixir-autogen, elixir-format
msgid "delete user"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:40
#: lib/memex_web/live/context_live/show.html.heex:28
#: lib/memex_web/live/context_live/show.html.heex:24
#: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:28
#: lib/memex_web/live/note_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:36
#: lib/memex_web/live/pipeline_live/show.html.heex:106
#: lib/memex_web/live/pipeline_live/show.html.heex:32
#: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format
msgid "edit"
msgstr ""
@ -77,39 +77,39 @@ msgstr ""
msgid "invite someone new!"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:109
#: lib/memex_web/templates/user_confirmation/new.html.heex:32
#: lib/memex_web/templates/user_registration/new.html.heex:44
#: lib/memex_web/templates/user_reset_password/edit.html.heex:45
#: lib/memex_web/templates/user_reset_password/new.html.heex:32
#: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:85
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/memex_web/controllers/user_session_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "log in"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:61
#: lib/memex_web/live/context_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new context"
msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:61
#: lib/memex_web/live/note_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new note"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:63
#: lib/memex_web/live/pipeline_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new pipeline"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:100
#: lib/memex_web/templates/user_confirmation/new.html.heex:29
#: lib/memex_web/templates/user_registration/new.html.heex:3
#: lib/memex_web/templates/user_registration/new.html.heex:37
#: lib/memex_web/templates/user_reset_password/edit.html.heex:42
#: lib/memex_web/templates/user_reset_password/new.html.heex:29
#: lib/memex_web/templates/user_session/new.html.heex:39
#: lib/memex_web/components/core_components/topbar.html.heex:79
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:25
#: lib/memex_web/controllers/user_registration_html/new.html.heex:3
#: lib/memex_web/controllers/user_registration_html/new.html.heex:37
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/memex_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -123,24 +123,24 @@ msgstr ""
msgid "save"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:132
#: lib/memex_web/live/pipeline_live/show.html.heex:128
#, elixir-autogen, elixir-format
msgid "add step"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:47
#: lib/memex_web/templates/user_reset_password/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:42
#: lib/memex_web/controllers/user_registration_html/new.html.heex:47
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format, fuzzy
msgid "forgot your password?"
msgstr ""
#: lib/memex_web/templates/user_reset_password/new.html.heex:16
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "send instructions to reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "export data as json"
msgstr ""
@ -156,24 +156,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:36
#: lib/memex_web/live/context_live/show.html.heex:32
#, 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:36
#: lib/memex_web/live/note_live/show.html.heex:32
#, 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:44
#: lib/memex_web/live/pipeline_live/show.html.heex:40
#, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:115
#: lib/memex_web/live/pipeline_live/show.html.heex:111
#, elixir-autogen, elixir-format
msgid "delete %{step_title}"
msgstr ""
@ -198,7 +198,7 @@ msgstr ""
msgid "edit %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:104
#: lib/memex_web/live/pipeline_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "edit %{step_title}"
msgstr ""
@ -208,12 +208,12 @@ msgstr ""
msgid "edit invite for %{invite_name}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:94
#: lib/memex_web/live/pipeline_live/show.html.heex:90
#, elixir-autogen, elixir-format
msgid "move %{step_title} down"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:78
#: lib/memex_web/live/pipeline_live/show.html.heex:74
#, elixir-autogen, elixir-format
msgid "move %{step_title} up"
msgstr ""

View File

@ -17,7 +17,7 @@ msgstr ""
msgid "Confirm your account"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43
#: lib/memex_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
@ -27,9 +27,9 @@ msgstr ""
msgid "Reset your password"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:19
#: lib/memex_web/live/note_live/show.html.heex:19
#: lib/memex_web/live/pipeline_live/show.html.heex:27
#: 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:23
#, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}"
msgstr ""
@ -49,8 +49,8 @@ msgstr ""
msgid "built with sharing and collaboration in mind"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:20
#: lib/memex_web/templates/user_settings/edit.html.heex:76
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:20
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "confirm new password"
msgstr ""
@ -61,7 +61,7 @@ msgstr ""
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:37
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/live/context_live/index.ex:35
#: lib/memex_web/live/context_live/index.ex:43
#: lib/memex_web/live/context_live/index.html.heex:3
@ -79,8 +79,8 @@ msgstr ""
msgid "convenient:"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31
#: lib/memex_web/templates/user_settings/edit.html.heex:85
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:31
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "current password"
msgstr ""
@ -105,10 +105,10 @@ msgstr ""
msgid "edit invite"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20
#: lib/memex_web/templates/user_reset_password/new.html.heex:13
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#: lib/memex_web/controllers/user_registration_html/new.html.heex:20
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:13
#: lib/memex_web/controllers/user_session_html/new.html.heex:17
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "email"
msgstr ""
@ -123,8 +123,8 @@ msgstr ""
msgid "enable"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#: lib/memex_web/controllers/user_registration_html/new.html.heex:32
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "english"
msgstr ""
@ -154,7 +154,7 @@ msgstr ""
msgid "invite only"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:58
#: lib/memex_web/components/core_components/topbar.html.heex:43
#: lib/memex_web/live/invite_live/index.ex:31
#: lib/memex_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -176,8 +176,8 @@ msgstr ""
msgid "new invite"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:16
#: lib/memex_web/templates/user_settings/edit.html.heex:69
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:16
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "new password"
msgstr ""
@ -192,7 +192,7 @@ msgstr ""
msgid "no notes found"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:22
#: lib/memex_web/live/note_live/index.ex:35
#: lib/memex_web/live/note_live/index.ex:43
#: lib/memex_web/live/note_live/index.html.heex:3
@ -205,7 +205,7 @@ msgstr ""
msgid "notes:"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:46
#: lib/memex_web/components/core_components/topbar.html.heex:34
#: lib/memex_web/live/pipeline_live/index.ex:35
#: lib/memex_web/live/pipeline_live/index.ex:43
#: lib/memex_web/live/pipeline_live/index.html.heex:3
@ -238,7 +238,7 @@ msgstr ""
msgid "public signups"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:32
#: lib/memex_web/controllers/user_registration_controller.ex:31
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -277,7 +277,7 @@ msgid "set unlimited"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:10
#: lib/memex_web/templates/user_settings/edit.html.heex:3
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "settings"
msgstr ""
@ -299,7 +299,7 @@ msgstr ""
msgid "tags"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:130
#: lib/memex_web/live/invite_live/index.html.heex:126
#, elixir-autogen, elixir-format
msgid "users"
msgstr ""
@ -414,7 +414,7 @@ msgstr ""
msgid "%{slug} could not be found"
msgstr ""
#: lib/memex_web/live/home_live.ex:15
#: lib/memex_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "home"
msgstr ""
@ -431,12 +431,12 @@ msgstr ""
msgid "faq"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:8
#: lib/memex_web/components/core_components/topbar.html.heex:5
#: lib/memex_web/components/layouts.ex:15
#: lib/memex_web/components/layouts/root.html.heex:8
#: lib/memex_web/components/layouts/root.html.heex:9
#: lib/memex_web/controllers/error_html/error.html.heex:8
#: lib/memex_web/live/home_live.html.heex:3
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:9
#: lib/memex_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format
msgid "memEx"
msgstr ""
@ -446,7 +446,7 @@ msgstr ""
msgid "what is this?"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:64
#: lib/memex_web/live/pipeline_live/show.html.heex:60
#, elixir-autogen, elixir-format
msgid "%{position}. %{title}"
msgstr ""
@ -471,12 +471,12 @@ msgstr ""
msgid "add step to %{slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:58
#: lib/memex_web/live/pipeline_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "no steps"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:53
#: lib/memex_web/live/pipeline_live/show.html.heex:49
#, elixir-autogen, elixir-format
msgid "steps:"
msgstr ""
@ -583,7 +583,7 @@ msgstr ""
msgid "zettelkasten"
msgstr ""
#: lib/memex_web/views/layout_view.ex:10
#: lib/memex_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "memEx | %{title}"
msgstr ""
@ -613,7 +613,7 @@ msgstr ""
msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format, fuzzy
msgid "language"
msgstr ""
@ -653,17 +653,17 @@ msgstr ""
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:13
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:13
#, elixir-autogen, elixir-format, fuzzy
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:102
#: lib/memex_web/live/invite_live/index.html.heex:98
#, elixir-autogen, elixir-format, fuzzy
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#: lib/memex_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format, fuzzy
msgid "keep me logged in for 60 days"
msgstr ""
@ -673,8 +673,8 @@ msgstr ""
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#: lib/memex_web/controllers/user_registration_html/new.html.heex:24
#: lib/memex_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format, fuzzy
msgid "password"
msgstr ""
@ -702,12 +702,12 @@ msgstr ""
msgid "close modal"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:89
#: lib/memex_web/components/core_components/topbar.html.heex:71
#, elixir-autogen, elixir-format
msgid "live dashboard"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:75
#: lib/memex_web/components/core_components/topbar.html.heex:57
#, elixir-autogen, elixir-format
msgid "log out"
msgstr ""

View File

@ -10,83 +10,83 @@ msgid ""
msgstr ""
"Language: de\n"
#: lib/memex/accounts/email.ex:30
#: lib/memex/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Memex account"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:3
#: lib/memex_web/templates/email/confirm_email.txt.eex:2
#: lib/memex_web/templates/email/reset_password.html.heex:3
#: lib/memex_web/templates/email/reset_password.txt.eex:2
#: lib/memex_web/templates/email/update_email.html.heex:3
#: lib/memex_web/templates/email/update_email.txt.eex:2
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:2
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:3
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:2
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.txt.eex:10
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.txt.eex:8
#: lib/memex_web/templates/email/update_email.txt.eex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/memex/accounts/email.ex:37
#: lib/memex/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Memex password"
msgstr ""
#: lib/memex/accounts/email.ex:44
#: lib/memex/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Memex email"
msgstr ""
#: lib/memex_web/templates/email/update_email.html.heex:8
#: lib/memex_web/templates/email/update_email.txt.eex:4
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:14
#: lib/memex_web/templates/email/confirm_email.txt.eex:6
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:14
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:8
#: lib/memex_web/templates/email/reset_password.txt.eex:4
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/layout/email.html.heex:13
#: lib/memex_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx"
msgstr ""
#: lib/memex_web/templates/layout/email.txt.eex:9
#: lib/memex_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx at %{url}"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:22
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:22
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't create an account at memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:16
#: lib/memex_web/templates/email/update_email.html.heex:16
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:16
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:16
#, elixir-autogen, elixir-format, fuzzy
msgid "If you didn't request this change from memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:9
#: lib/memex_web/templates/email/confirm_email.txt.eex:4
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:9
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:4
#, elixir-autogen, elixir-format, fuzzy
msgid "Welcome to memEx"
msgstr ""

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Language: de\n"
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
@ -25,14 +25,14 @@ msgstr ""
msgid "Reset password link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:51
#: lib/memex_web/controllers/user_registration_controller.ex:21
#: lib/memex_web/controllers/user_registration_controller.ex:50
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:11
#: lib/memex_web/controllers/user_registration_controller.ex:40
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@ -42,13 +42,13 @@ msgstr ""
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:177
#: lib/memex_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:39
#: lib/memex_web/controllers/user_auth.ex:161
#: lib/memex_web/controllers/user_auth.ex:38
#: lib/memex_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@ -73,51 +73,54 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
#: lib/memex/contexts/context.ex:57
#: lib/memex/contexts/context.ex:70
#: lib/memex/notes/note.ex:56
#: lib/memex/notes/note.ex:69
#: lib/memex/pipelines/pipeline.ex:59
#: lib/memex/pipelines/pipeline.ex:72
#: lib/memex/contexts/context.ex:58
#: lib/memex/contexts/context.ex:71
#: lib/memex/notes/note.ex:57
#: lib/memex/notes/note.ex:70
#: lib/memex/pipelines/pipeline.ex:60
#: lib/memex/pipelines/pipeline.ex:73
#, elixir-autogen, elixir-format
msgid "invalid format: only numbers, letters and hyphen are accepted"
msgstr ""
#: lib/memex_web/templates/error/error.html.heex:31
#: lib/memex_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "go back home"
msgstr ""
#: lib/memex_web/views/error_view.ex:10
#: lib/memex_web/controllers/error_html.ex:11
#: lib/memex_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format
msgid "internal server error"
msgstr ""
#: lib/memex_web/views/error_view.ex:8
#: lib/memex_web/controllers/error_html.ex:9
#: lib/memex_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "not found"
msgstr ""
#: lib/memex_web/views/error_view.ex:9
#: lib/memex_web/controllers/error_html.ex:10
#: lib/memex_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "unauthorized"
msgstr ""
#: lib/memex/contexts/context.ex:83
#: lib/memex/notes/note.ex:82
#: lib/memex/pipelines/pipeline.ex:85
#: lib/memex/contexts/context.ex:84
#: lib/memex/notes/note.ex:83
#: lib/memex/pipelines/pipeline.ex:86
#, elixir-autogen, elixir-format, fuzzy
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:13
#: lib/memex_web/templates/user_reset_password/edit.html.heex:13
#: lib/memex_web/templates/user_settings/edit.html.heex:64
#: lib/memex_web/controllers/user_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
#, elixir-autogen, elixir-format, fuzzy
msgid "oops, something went wrong! please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:70
#: lib/memex_web/controllers/user_registration_controller.ex:69
#, elixir-autogen, elixir-format, fuzzy
msgid "sorry, this invite was not found or expired"
msgstr ""
@ -132,8 +135,18 @@ msgstr ""
msgid "unable to delete user"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:22
#: lib/memex_web/templates/user_settings/edit.html.heex:118
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:22
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:118
#, elixir-autogen, elixir-format, fuzzy
msgid "oops, something went wrong! please check the errors below"
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:195
#, elixir-autogen, elixir-format
msgid "You must log in as an administrator to access this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:178
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""

View File

@ -55,7 +55,7 @@ msgstr ""
msgid "Password reset successfully."
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?"
msgstr ""
@ -65,12 +65,12 @@ msgstr ""
msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:145
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:74
#: lib/memex_web/components/core_components/topbar.html.heex:56
#, elixir-autogen, elixir-format
msgid "are you sure you want to log out?"
msgstr ""
@ -81,12 +81,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:35
#: lib/memex_web/live/context_live/show.html.heex:31
#: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:35
#: lib/memex_web/live/note_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:43
#: lib/memex_web/live/pipeline_live/show.html.heex:114
#: lib/memex_web/live/pipeline_live/show.html.heex:39
#: lib/memex_web/live/pipeline_live/show.html.heex:110
#, elixir-autogen, elixir-format
msgid "are you sure?"
msgstr ""
@ -121,7 +121,7 @@ msgstr ""
msgid "copied to clipboard"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:65
#: lib/memex_web/controllers/user_registration_controller.ex:64
#, elixir-autogen, elixir-format, fuzzy
msgid "please check your email to verify your account"
msgstr ""
@ -146,8 +146,8 @@ msgstr ""
msgid "your account has been deleted"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:113
#: lib/memex_web/live/invite_live/index.html.heex:141
#: lib/memex_web/live/invite_live/index.html.heex:109
#: lib/memex_web/live/invite_live/index.html.heex:137
#, elixir-autogen, elixir-format, fuzzy
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -15,7 +15,7 @@ msgstr ""
msgid "Confirm your account"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43
#: lib/memex_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
@ -25,9 +25,9 @@ msgstr ""
msgid "Reset your password"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:19
#: lib/memex_web/live/note_live/show.html.heex:19
#: lib/memex_web/live/pipeline_live/show.html.heex:27
#: 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:23
#, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}"
msgstr ""
@ -47,8 +47,8 @@ msgstr ""
msgid "built with sharing and collaboration in mind"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:20
#: lib/memex_web/templates/user_settings/edit.html.heex:76
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:20
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "confirm new password"
msgstr ""
@ -59,7 +59,7 @@ msgstr ""
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:37
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/live/context_live/index.ex:35
#: lib/memex_web/live/context_live/index.ex:43
#: lib/memex_web/live/context_live/index.html.heex:3
@ -77,8 +77,8 @@ msgstr ""
msgid "convenient:"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31
#: lib/memex_web/templates/user_settings/edit.html.heex:85
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:31
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "current password"
msgstr ""
@ -103,10 +103,10 @@ msgstr ""
msgid "edit invite"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20
#: lib/memex_web/templates/user_reset_password/new.html.heex:13
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#: lib/memex_web/controllers/user_registration_html/new.html.heex:20
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:13
#: lib/memex_web/controllers/user_session_html/new.html.heex:17
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "email"
msgstr ""
@ -121,8 +121,8 @@ msgstr ""
msgid "enable"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#: lib/memex_web/controllers/user_registration_html/new.html.heex:32
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "english"
msgstr ""
@ -152,7 +152,7 @@ msgstr ""
msgid "invite only"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:58
#: lib/memex_web/components/core_components/topbar.html.heex:43
#: lib/memex_web/live/invite_live/index.ex:31
#: lib/memex_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -174,8 +174,8 @@ msgstr ""
msgid "new invite"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:16
#: lib/memex_web/templates/user_settings/edit.html.heex:69
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:16
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "new password"
msgstr ""
@ -190,7 +190,7 @@ msgstr ""
msgid "no notes found"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:22
#: lib/memex_web/live/note_live/index.ex:35
#: lib/memex_web/live/note_live/index.ex:43
#: lib/memex_web/live/note_live/index.html.heex:3
@ -203,7 +203,7 @@ msgstr ""
msgid "notes:"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:46
#: lib/memex_web/components/core_components/topbar.html.heex:34
#: lib/memex_web/live/pipeline_live/index.ex:35
#: lib/memex_web/live/pipeline_live/index.ex:43
#: lib/memex_web/live/pipeline_live/index.html.heex:3
@ -236,7 +236,7 @@ msgstr ""
msgid "public signups"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:32
#: lib/memex_web/controllers/user_registration_controller.ex:31
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -275,7 +275,7 @@ msgid "set unlimited"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:10
#: lib/memex_web/templates/user_settings/edit.html.heex:3
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "settings"
msgstr ""
@ -297,7 +297,7 @@ msgstr ""
msgid "tags"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:130
#: lib/memex_web/live/invite_live/index.html.heex:126
#, elixir-autogen, elixir-format
msgid "users"
msgstr ""
@ -412,7 +412,7 @@ msgstr ""
msgid "%{slug} could not be found"
msgstr ""
#: lib/memex_web/live/home_live.ex:15
#: lib/memex_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "home"
msgstr ""
@ -429,12 +429,12 @@ msgstr ""
msgid "faq"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:8
#: lib/memex_web/components/core_components/topbar.html.heex:5
#: lib/memex_web/components/layouts.ex:15
#: lib/memex_web/components/layouts/root.html.heex:8
#: lib/memex_web/components/layouts/root.html.heex:9
#: lib/memex_web/controllers/error_html/error.html.heex:8
#: lib/memex_web/live/home_live.html.heex:3
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:9
#: lib/memex_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format
msgid "memEx"
msgstr ""
@ -444,7 +444,7 @@ msgstr ""
msgid "what is this?"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:64
#: lib/memex_web/live/pipeline_live/show.html.heex:60
#, elixir-autogen, elixir-format
msgid "%{position}. %{title}"
msgstr ""
@ -469,12 +469,12 @@ msgstr ""
msgid "add step to %{slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:58
#: lib/memex_web/live/pipeline_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "no steps"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:53
#: lib/memex_web/live/pipeline_live/show.html.heex:49
#, elixir-autogen, elixir-format
msgid "steps:"
msgstr ""
@ -581,7 +581,7 @@ msgstr ""
msgid "zettelkasten"
msgstr ""
#: lib/memex_web/views/layout_view.ex:10
#: lib/memex_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "memEx | %{title}"
msgstr ""
@ -611,7 +611,7 @@ msgstr ""
msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "language"
msgstr ""
@ -651,17 +651,17 @@ msgstr ""
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:13
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:13
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:102
#: lib/memex_web/live/invite_live/index.html.heex:98
#, elixir-autogen, elixir-format
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#: lib/memex_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "keep me logged in for 60 days"
msgstr ""
@ -671,8 +671,8 @@ msgstr ""
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#: lib/memex_web/controllers/user_registration_html/new.html.heex:24
#: lib/memex_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "password"
msgstr ""
@ -700,12 +700,12 @@ msgstr ""
msgid "close modal"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:89
#: lib/memex_web/components/core_components/topbar.html.heex:71
#, elixir-autogen, elixir-format
msgid "live dashboard"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:75
#: lib/memex_web/components/core_components/topbar.html.heex:57
#, elixir-autogen, elixir-format
msgid "log out"
msgstr ""

View File

@ -10,83 +10,83 @@
msgid ""
msgstr ""
#: lib/memex/accounts/email.ex:30
#: lib/memex/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Memex account"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:3
#: lib/memex_web/templates/email/confirm_email.txt.eex:2
#: lib/memex_web/templates/email/reset_password.html.heex:3
#: lib/memex_web/templates/email/reset_password.txt.eex:2
#: lib/memex_web/templates/email/update_email.html.heex:3
#: lib/memex_web/templates/email/update_email.txt.eex:2
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:2
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:3
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:2
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.txt.eex:10
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.txt.eex:8
#: lib/memex_web/templates/email/update_email.txt.eex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/memex/accounts/email.ex:37
#: lib/memex/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Memex password"
msgstr ""
#: lib/memex/accounts/email.ex:44
#: lib/memex/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Memex email"
msgstr ""
#: lib/memex_web/templates/email/update_email.html.heex:8
#: lib/memex_web/templates/email/update_email.txt.eex:4
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:14
#: lib/memex_web/templates/email/confirm_email.txt.eex:6
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:14
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:8
#: lib/memex_web/templates/email/reset_password.txt.eex:4
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/layout/email.html.heex:13
#: lib/memex_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx"
msgstr ""
#: lib/memex_web/templates/layout/email.txt.eex:9
#: lib/memex_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx at %{url}"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:22
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:16
#: lib/memex_web/templates/email/update_email.html.heex:16
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:16
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:9
#: lib/memex_web/templates/email/confirm_email.txt.eex:4
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:9
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to memEx"
msgstr ""

View File

@ -11,64 +11,64 @@ msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/templates/user_confirmation/new.html.heex:3
#: lib/memex_web/templates/user_confirmation/new.html.heex:16
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:3
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "Resend confirmation instructions"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:3
#: lib/memex_web/templates/user_reset_password/edit.html.heex:29
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "change email"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:110
#: lib/memex_web/templates/user_settings/edit.html.heex:128
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:110
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:128
#, elixir-autogen, elixir-format
msgid "change language"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:57
#: lib/memex_web/templates/user_settings/edit.html.heex:97
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:57
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:97
#, elixir-autogen, elixir-format
msgid "change password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:94
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "create invite"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:50
#: lib/memex_web/live/context_live/show.html.heex:38
#: lib/memex_web/live/context_live/show.html.heex:34
#: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:38
#: lib/memex_web/live/note_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:46
#: lib/memex_web/live/pipeline_live/show.html.heex:117
#: lib/memex_web/live/pipeline_live/show.html.heex:42
#: lib/memex_web/live/pipeline_live/show.html.heex:113
#, elixir-autogen, elixir-format
msgid "delete"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:147
#, elixir-autogen, elixir-format
msgid "delete user"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:40
#: lib/memex_web/live/context_live/show.html.heex:28
#: lib/memex_web/live/context_live/show.html.heex:24
#: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:28
#: lib/memex_web/live/note_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:36
#: lib/memex_web/live/pipeline_live/show.html.heex:106
#: lib/memex_web/live/pipeline_live/show.html.heex:32
#: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format
msgid "edit"
msgstr ""
@ -78,39 +78,39 @@ msgstr ""
msgid "invite someone new!"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:109
#: lib/memex_web/templates/user_confirmation/new.html.heex:32
#: lib/memex_web/templates/user_registration/new.html.heex:44
#: lib/memex_web/templates/user_reset_password/edit.html.heex:45
#: lib/memex_web/templates/user_reset_password/new.html.heex:32
#: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:85
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:41
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:28
#: lib/memex_web/controllers/user_session_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "log in"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:61
#: lib/memex_web/live/context_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new context"
msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:61
#: lib/memex_web/live/note_live/index.html.heex:57
#, elixir-autogen, elixir-format
msgid "new note"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:63
#: lib/memex_web/live/pipeline_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new pipeline"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:100
#: lib/memex_web/templates/user_confirmation/new.html.heex:29
#: lib/memex_web/templates/user_registration/new.html.heex:3
#: lib/memex_web/templates/user_registration/new.html.heex:37
#: lib/memex_web/templates/user_reset_password/edit.html.heex:42
#: lib/memex_web/templates/user_reset_password/new.html.heex:29
#: lib/memex_web/templates/user_session/new.html.heex:39
#: lib/memex_web/components/core_components/topbar.html.heex:79
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:25
#: lib/memex_web/controllers/user_registration_html/new.html.heex:3
#: lib/memex_web/controllers/user_registration_html/new.html.heex:37
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:38
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:25
#: lib/memex_web/controllers/user_session_html/new.html.heex:35
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -124,24 +124,24 @@ msgstr ""
msgid "save"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:132
#: lib/memex_web/live/pipeline_live/show.html.heex:128
#, elixir-autogen, elixir-format
msgid "add step"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:47
#: lib/memex_web/templates/user_reset_password/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:42
#: lib/memex_web/controllers/user_registration_html/new.html.heex:47
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:3
#: lib/memex_web/controllers/user_session_html/new.html.heex:38
#, elixir-autogen, elixir-format
msgid "forgot your password?"
msgstr ""
#: lib/memex_web/templates/user_reset_password/new.html.heex:16
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:16
#, elixir-autogen, elixir-format
msgid "send instructions to reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:138
#, elixir-autogen, elixir-format
msgid "export data as json"
msgstr ""
@ -157,24 +157,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:36
#: lib/memex_web/live/context_live/show.html.heex:32
#, 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:36
#: lib/memex_web/live/note_live/show.html.heex:32
#, 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:44
#: lib/memex_web/live/pipeline_live/show.html.heex:40
#, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:115
#: lib/memex_web/live/pipeline_live/show.html.heex:111
#, elixir-autogen, elixir-format
msgid "delete %{step_title}"
msgstr ""
@ -199,7 +199,7 @@ msgstr ""
msgid "edit %{pipeline_slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:104
#: lib/memex_web/live/pipeline_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "edit %{step_title}"
msgstr ""
@ -209,12 +209,12 @@ msgstr ""
msgid "edit invite for %{invite_name}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:94
#: lib/memex_web/live/pipeline_live/show.html.heex:90
#, elixir-autogen, elixir-format
msgid "move %{step_title} down"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:78
#: lib/memex_web/live/pipeline_live/show.html.heex:74
#, elixir-autogen, elixir-format
msgid "move %{step_title} up"
msgstr ""

View File

@ -16,7 +16,7 @@ msgstr ""
msgid "Confirm your account"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43
#: lib/memex_web/components/layouts/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
@ -26,9 +26,9 @@ msgstr ""
msgid "Reset your password"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:19
#: lib/memex_web/live/note_live/show.html.heex:19
#: lib/memex_web/live/pipeline_live/show.html.heex:27
#: 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:23
#, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}"
msgstr ""
@ -48,8 +48,8 @@ msgstr ""
msgid "built with sharing and collaboration in mind"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:20
#: lib/memex_web/templates/user_settings/edit.html.heex:76
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:20
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:76
#, elixir-autogen, elixir-format
msgid "confirm new password"
msgstr ""
@ -60,7 +60,7 @@ msgstr ""
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:37
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/live/context_live/index.ex:35
#: lib/memex_web/live/context_live/index.ex:43
#: lib/memex_web/live/context_live/index.html.heex:3
@ -78,8 +78,8 @@ msgstr ""
msgid "convenient:"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31
#: lib/memex_web/templates/user_settings/edit.html.heex:85
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:31
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "current password"
msgstr ""
@ -104,10 +104,10 @@ msgstr ""
msgid "edit invite"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20
#: lib/memex_web/templates/user_reset_password/new.html.heex:13
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#: lib/memex_web/controllers/user_registration_html/new.html.heex:20
#: lib/memex_web/controllers/user_reset_password_html/new.html.heex:13
#: lib/memex_web/controllers/user_session_html/new.html.heex:17
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "email"
msgstr ""
@ -122,8 +122,8 @@ msgstr ""
msgid "enable"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#: lib/memex_web/controllers/user_registration_html/new.html.heex:32
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "english"
msgstr ""
@ -153,7 +153,7 @@ msgstr ""
msgid "invite only"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:58
#: lib/memex_web/components/core_components/topbar.html.heex:43
#: lib/memex_web/live/invite_live/index.ex:31
#: lib/memex_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
@ -175,8 +175,8 @@ msgstr ""
msgid "new invite"
msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:16
#: lib/memex_web/templates/user_settings/edit.html.heex:69
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:16
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:69
#, elixir-autogen, elixir-format
msgid "new password"
msgstr ""
@ -191,7 +191,7 @@ msgstr ""
msgid "no notes found"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28
#: lib/memex_web/components/core_components/topbar.html.heex:22
#: lib/memex_web/live/note_live/index.ex:35
#: lib/memex_web/live/note_live/index.ex:43
#: lib/memex_web/live/note_live/index.html.heex:3
@ -204,7 +204,7 @@ msgstr ""
msgid "notes:"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:46
#: lib/memex_web/components/core_components/topbar.html.heex:34
#: lib/memex_web/live/pipeline_live/index.ex:35
#: lib/memex_web/live/pipeline_live/index.ex:43
#: lib/memex_web/live/pipeline_live/index.html.heex:3
@ -237,7 +237,7 @@ msgstr ""
msgid "public signups"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:32
#: lib/memex_web/controllers/user_registration_controller.ex:31
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
@ -276,7 +276,7 @@ msgid "set unlimited"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:10
#: lib/memex_web/templates/user_settings/edit.html.heex:3
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "settings"
msgstr ""
@ -298,7 +298,7 @@ msgstr ""
msgid "tags"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:130
#: lib/memex_web/live/invite_live/index.html.heex:126
#, elixir-autogen, elixir-format
msgid "users"
msgstr ""
@ -413,7 +413,7 @@ msgstr ""
msgid "%{slug} could not be found"
msgstr ""
#: lib/memex_web/live/home_live.ex:15
#: lib/memex_web/live/home_live.ex:14
#, elixir-autogen, elixir-format
msgid "home"
msgstr ""
@ -430,12 +430,12 @@ msgstr ""
msgid "faq"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:8
#: lib/memex_web/components/core_components/topbar.html.heex:5
#: lib/memex_web/components/layouts.ex:15
#: lib/memex_web/components/layouts/root.html.heex:8
#: lib/memex_web/components/layouts/root.html.heex:9
#: lib/memex_web/controllers/error_html/error.html.heex:8
#: lib/memex_web/live/home_live.html.heex:3
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:8
#: lib/memex_web/templates/layout/root.html.heex:9
#: lib/memex_web/views/layout_view.ex:14
#, elixir-autogen, elixir-format
msgid "memEx"
msgstr ""
@ -445,7 +445,7 @@ msgstr ""
msgid "what is this?"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:64
#: lib/memex_web/live/pipeline_live/show.html.heex:60
#, elixir-autogen, elixir-format
msgid "%{position}. %{title}"
msgstr ""
@ -470,12 +470,12 @@ msgstr ""
msgid "add step to %{slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:58
#: lib/memex_web/live/pipeline_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "no steps"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:53
#: lib/memex_web/live/pipeline_live/show.html.heex:49
#, elixir-autogen, elixir-format
msgid "steps:"
msgstr ""
@ -582,7 +582,7 @@ msgstr ""
msgid "zettelkasten"
msgstr ""
#: lib/memex_web/views/layout_view.ex:10
#: lib/memex_web/components/layouts.ex:11
#, elixir-autogen, elixir-format
msgid "memEx | %{title}"
msgstr ""
@ -612,7 +612,7 @@ msgstr ""
msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:28
#: lib/memex_web/controllers/user_registration_html/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "language"
msgstr ""
@ -652,17 +652,17 @@ msgstr ""
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:13
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:13
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:102
#: lib/memex_web/live/invite_live/index.html.heex:98
#, elixir-autogen, elixir-format
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#: lib/memex_web/controllers/user_session_html/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "keep me logged in for 60 days"
msgstr ""
@ -672,8 +672,8 @@ msgstr ""
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#: lib/memex_web/controllers/user_registration_html/new.html.heex:24
#: lib/memex_web/controllers/user_session_html/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "password"
msgstr ""
@ -701,12 +701,12 @@ msgstr ""
msgid "close modal"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:89
#: lib/memex_web/components/core_components/topbar.html.heex:71
#, elixir-autogen, elixir-format
msgid "live dashboard"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:75
#: lib/memex_web/components/core_components/topbar.html.heex:57
#, elixir-autogen, elixir-format
msgid "log out"
msgstr ""

View File

@ -11,83 +11,83 @@ msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex/accounts/email.ex:30
#: lib/memex/accounts/email.ex:31
#, elixir-autogen, elixir-format
msgid "Confirm your Memex account"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:3
#: lib/memex_web/templates/email/confirm_email.txt.eex:2
#: lib/memex_web/templates/email/reset_password.html.heex:3
#: lib/memex_web/templates/email/reset_password.txt.eex:2
#: lib/memex_web/templates/email/update_email.html.heex:3
#: lib/memex_web/templates/email/update_email.txt.eex:2
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:2
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:3
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:2
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:3
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:2
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.txt.eex:10
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:10
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at %{url}, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.txt.eex:8
#: lib/memex_web/templates/email/update_email.txt.eex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:8
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/memex/accounts/email.ex:37
#: lib/memex/accounts/email.ex:38
#, elixir-autogen, elixir-format
msgid "Reset your Memex password"
msgstr ""
#: lib/memex/accounts/email.ex:44
#: lib/memex/accounts/email.ex:45
#, elixir-autogen, elixir-format
msgid "Update your Memex email"
msgstr ""
#: lib/memex_web/templates/email/update_email.html.heex:8
#: lib/memex_web/templates/email/update_email.txt.eex:4
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:8
#: lib/memex_web/controllers/email_html/update_email_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can change your email by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:14
#: lib/memex_web/templates/email/confirm_email.txt.eex:6
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:14
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:6
#, elixir-autogen, elixir-format
msgid "You can confirm your account by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:8
#: lib/memex_web/templates/email/reset_password.txt.eex:4
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:8
#: lib/memex_web/controllers/email_html/reset_password_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "You can reset your password by visiting the URL below:"
msgstr ""
#: lib/memex_web/templates/layout/email.html.heex:13
#: lib/memex_web/components/layouts/email_html.html.heex:13
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx"
msgstr ""
#: lib/memex_web/templates/layout/email.txt.eex:9
#: lib/memex_web/components/layouts/email_text.txt.eex:9
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx at %{url}"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:22
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:22
#, elixir-autogen, elixir-format
msgid "If you didn't create an account at memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/reset_password.html.heex:16
#: lib/memex_web/templates/email/update_email.html.heex:16
#: lib/memex_web/controllers/email_html/reset_password_html.html.heex:16
#: lib/memex_web/controllers/email_html/update_email_html.html.heex:16
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from memEx, please ignore this."
msgstr ""
#: lib/memex_web/templates/email/confirm_email.html.heex:9
#: lib/memex_web/templates/email/confirm_email.txt.eex:4
#: lib/memex_web/controllers/email_html/confirm_email_html.html.heex:9
#: lib/memex_web/controllers/email_html/confirm_email_text.txt.eex:4
#, elixir-autogen, elixir-format
msgid "Welcome to memEx"
msgstr ""

View File

@ -11,7 +11,7 @@ msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
@ -26,14 +26,14 @@ msgstr ""
msgid "Reset password link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:51
#: lib/memex_web/controllers/user_registration_controller.ex:21
#: lib/memex_web/controllers/user_registration_controller.ex:50
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:11
#: lib/memex_web/controllers/user_registration_controller.ex:40
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@ -43,13 +43,13 @@ msgstr ""
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:177
#: lib/memex_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:39
#: lib/memex_web/controllers/user_auth.ex:161
#: lib/memex_web/controllers/user_auth.ex:38
#: lib/memex_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@ -74,51 +74,54 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
#: lib/memex/contexts/context.ex:57
#: lib/memex/contexts/context.ex:70
#: lib/memex/notes/note.ex:56
#: lib/memex/notes/note.ex:69
#: lib/memex/pipelines/pipeline.ex:59
#: lib/memex/pipelines/pipeline.ex:72
#: lib/memex/contexts/context.ex:58
#: lib/memex/contexts/context.ex:71
#: lib/memex/notes/note.ex:57
#: lib/memex/notes/note.ex:70
#: lib/memex/pipelines/pipeline.ex:60
#: lib/memex/pipelines/pipeline.ex:73
#, elixir-autogen, elixir-format
msgid "invalid format: only numbers, letters and hyphen are accepted"
msgstr ""
#: lib/memex_web/templates/error/error.html.heex:31
#: lib/memex_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "go back home"
msgstr ""
#: lib/memex_web/views/error_view.ex:10
#: lib/memex_web/controllers/error_html.ex:11
#: lib/memex_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format
msgid "internal server error"
msgstr ""
#: lib/memex_web/views/error_view.ex:8
#: lib/memex_web/controllers/error_html.ex:9
#: lib/memex_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "not found"
msgstr ""
#: lib/memex_web/views/error_view.ex:9
#: lib/memex_web/controllers/error_html.ex:10
#: lib/memex_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "unauthorized"
msgstr ""
#: lib/memex/contexts/context.ex:83
#: lib/memex/notes/note.ex:82
#: lib/memex/pipelines/pipeline.ex:85
#: lib/memex/contexts/context.ex:84
#: lib/memex/notes/note.ex:83
#: lib/memex/pipelines/pipeline.ex:86
#, elixir-autogen, elixir-format
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:13
#: lib/memex_web/templates/user_reset_password/edit.html.heex:13
#: lib/memex_web/templates/user_settings/edit.html.heex:64
#: lib/memex_web/controllers/user_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:70
#: lib/memex_web/controllers/user_registration_controller.ex:69
#, elixir-autogen, elixir-format
msgid "sorry, this invite was not found or expired"
msgstr ""
@ -133,8 +136,18 @@ msgstr ""
msgid "unable to delete user"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:22
#: lib/memex_web/templates/user_settings/edit.html.heex:118
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:22
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below"
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:195
#, elixir-autogen, elixir-format
msgid "You must log in as an administrator to access this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:178
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""

View File

@ -56,7 +56,7 @@ msgstr ""
msgid "Password reset successfully."
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?"
msgstr ""
@ -66,12 +66,12 @@ msgstr ""
msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:145
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:74
#: lib/memex_web/components/core_components/topbar.html.heex:56
#, elixir-autogen, elixir-format
msgid "are you sure you want to log out?"
msgstr ""
@ -82,12 +82,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:35
#: lib/memex_web/live/context_live/show.html.heex:31
#: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:35
#: lib/memex_web/live/note_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:43
#: lib/memex_web/live/pipeline_live/show.html.heex:114
#: lib/memex_web/live/pipeline_live/show.html.heex:39
#: lib/memex_web/live/pipeline_live/show.html.heex:110
#, elixir-autogen, elixir-format
msgid "are you sure?"
msgstr ""
@ -122,7 +122,7 @@ msgstr ""
msgid "copied to clipboard"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:65
#: lib/memex_web/controllers/user_registration_controller.ex:64
#, elixir-autogen, elixir-format
msgid "please check your email to verify your account"
msgstr ""
@ -147,8 +147,8 @@ msgstr ""
msgid "your account has been deleted"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:113
#: lib/memex_web/live/invite_live/index.html.heex:141
#: lib/memex_web/live/invite_live/index.html.heex:109
#: lib/memex_web/live/invite_live/index.html.heex:137
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -10,7 +10,7 @@
msgid ""
msgstr ""
#: lib/memex_web/templates/error/error.html.heex:8
#: lib/memex_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
@ -25,14 +25,14 @@ msgstr ""
msgid "Reset password link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:51
#: lib/memex_web/controllers/user_registration_controller.ex:21
#: lib/memex_web/controllers/user_registration_controller.ex:50
#, elixir-autogen, elixir-format
msgid "Sorry, public registration is disabled"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:11
#: lib/memex_web/controllers/user_registration_controller.ex:40
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
@ -42,13 +42,13 @@ msgstr ""
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:177
#: lib/memex_web/controllers/user_auth.ex:266
#, elixir-autogen, elixir-format
msgid "You are not authorized to view this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:39
#: lib/memex_web/controllers/user_auth.ex:161
#: lib/memex_web/controllers/user_auth.ex:38
#: lib/memex_web/controllers/user_auth.ex:250
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
@ -73,51 +73,54 @@ msgstr ""
msgid "must have the @ sign and no spaces"
msgstr ""
#: lib/memex/contexts/context.ex:57
#: lib/memex/contexts/context.ex:70
#: lib/memex/notes/note.ex:56
#: lib/memex/notes/note.ex:69
#: lib/memex/pipelines/pipeline.ex:59
#: lib/memex/pipelines/pipeline.ex:72
#: lib/memex/contexts/context.ex:58
#: lib/memex/contexts/context.ex:71
#: lib/memex/notes/note.ex:57
#: lib/memex/notes/note.ex:70
#: lib/memex/pipelines/pipeline.ex:60
#: lib/memex/pipelines/pipeline.ex:73
#, elixir-autogen, elixir-format
msgid "invalid format: only numbers, letters and hyphen are accepted"
msgstr ""
#: lib/memex_web/templates/error/error.html.heex:31
#: lib/memex_web/controllers/error_html/error.html.heex:28
#, elixir-autogen, elixir-format
msgid "go back home"
msgstr ""
#: lib/memex_web/views/error_view.ex:10
#: lib/memex_web/controllers/error_html.ex:11
#: lib/memex_web/controllers/error_json.ex:9
#, elixir-autogen, elixir-format
msgid "internal server error"
msgstr ""
#: lib/memex_web/views/error_view.ex:8
#: lib/memex_web/controllers/error_html.ex:9
#: lib/memex_web/controllers/error_json.ex:7
#, elixir-autogen, elixir-format
msgid "not found"
msgstr ""
#: lib/memex_web/views/error_view.ex:9
#: lib/memex_web/controllers/error_html.ex:10
#: lib/memex_web/controllers/error_json.ex:8
#, elixir-autogen, elixir-format
msgid "unauthorized"
msgstr ""
#: lib/memex/contexts/context.ex:83
#: lib/memex/notes/note.ex:82
#: lib/memex/pipelines/pipeline.ex:85
#: lib/memex/contexts/context.ex:84
#: lib/memex/notes/note.ex:83
#: lib/memex/pipelines/pipeline.ex:86
#, elixir-autogen, elixir-format
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:13
#: lib/memex_web/templates/user_reset_password/edit.html.heex:13
#: lib/memex_web/templates/user_settings/edit.html.heex:64
#: lib/memex_web/controllers/user_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:70
#: lib/memex_web/controllers/user_registration_controller.ex:69
#, elixir-autogen, elixir-format
msgid "sorry, this invite was not found or expired"
msgstr ""
@ -132,8 +135,18 @@ msgstr ""
msgid "unable to delete user"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:22
#: lib/memex_web/templates/user_settings/edit.html.heex:118
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:22
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below"
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:195
#, elixir-autogen, elixir-format
msgid "You must log in as an administrator to access this page."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:178
#, elixir-autogen, elixir-format
msgid "You must log in to access this page."
msgstr ""

View File

@ -55,7 +55,7 @@ msgstr ""
msgid "Password reset successfully."
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?"
msgstr ""
@ -65,12 +65,12 @@ msgstr ""
msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:145
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:74
#: lib/memex_web/components/core_components/topbar.html.heex:56
#, elixir-autogen, elixir-format
msgid "are you sure you want to log out?"
msgstr ""
@ -81,12 +81,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:35
#: lib/memex_web/live/context_live/show.html.heex:31
#: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:35
#: lib/memex_web/live/note_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:43
#: lib/memex_web/live/pipeline_live/show.html.heex:114
#: lib/memex_web/live/pipeline_live/show.html.heex:39
#: lib/memex_web/live/pipeline_live/show.html.heex:110
#, elixir-autogen, elixir-format
msgid "are you sure?"
msgstr ""
@ -121,7 +121,7 @@ msgstr ""
msgid "copied to clipboard"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:65
#: lib/memex_web/controllers/user_registration_controller.ex:64
#, elixir-autogen, elixir-format
msgid "please check your email to verify your account"
msgstr ""
@ -146,8 +146,8 @@ msgstr ""
msgid "your account has been deleted"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:113
#: lib/memex_web/live/invite_live/index.html.heex:141
#: lib/memex_web/live/invite_live/index.html.heex:109
#: lib/memex_web/live/invite_live/index.html.heex:137
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -368,11 +368,11 @@ defmodule Memex.AccountsTest do
end
end
describe "delete_session_token/1" do
describe "delete_user_session_token/1" do
test "deletes the token" do
user = user_fixture()
token = Accounts.generate_user_session_token(user)
assert Accounts.delete_session_token(token) == :ok
assert Accounts.delete_user_session_token(token) == :ok
refute Accounts.get_user_by_session_token(token)
end
end

View File

@ -0,0 +1,14 @@
defmodule MemexWeb.ErrorHTMLTest do
use MemexWeb.ConnCase, async: true
# Bring render_to_string/4 for testing custom views
import Phoenix.Template
alias MemexWeb.ErrorHTML
test "renders 404.html" do
assert render_to_string(ErrorHTML, "404", "html", []) =~ "not found"
end
test "renders 500.html" do
assert render_to_string(ErrorHTML, "500", "html", []) =~ "internal server error"
end
end

View File

@ -0,0 +1,12 @@
defmodule MemexWeb.ErrorJSONTest do
use MemexWeb.ConnCase, async: true
alias MemexWeb.ErrorJSON
test "renders 404" do
assert ErrorJSON.render("404.json", %{}) == %{errors: %{detail: "not found"}}
end
test "renders 500" do
assert ErrorJSON.render("500.json", %{}) == %{errors: %{detail: "internal server error"}}
end
end

View File

@ -35,7 +35,7 @@ defmodule MemexWeb.ExportControllerTest do
pipeline: pipeline,
step: step
} do
conn = get(conn, Routes.export_path(conn, :export, :json))
conn = get(conn, ~p"/export/json")
ideal_note = %{
"slug" => note.slug,

View File

@ -1,14 +0,0 @@
defmodule MemexWeb.HomeControllerTest do
@moduledoc """
Tests the home page
"""
use MemexWeb.ConnCase
@moduletag :home_controller_test
test "GET /", %{conn: conn} do
conn = get(conn, "/")
assert html_response(conn, 200) =~ "memEx"
end
end

Some files were not shown because too many files have changed in this diff Show More