Compare commits

..

No commits in common. "c5e82c60b686ba864889996738bfdfefd8d028cd" and "0ea953a34c7238295826113bcc56d807d9d6a061" have entirely different histories.

51 changed files with 636 additions and 1947 deletions

View File

@ -13,24 +13,20 @@ steps:
mount: mount:
- _build - _build
- deps - deps
- .npm - assets/node_modules/
- .mix
- name: test - name: test
image: elixir:1.14.1-alpine image: elixir:1.14.1-alpine
environment: environment:
TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test
HOST: testing.example.tld HOST: testing.example.tld
MIX_HOME: /drone/src/.mix
MIX_ARCHIVES: /drone/src/.mix/archives
MIX_ENV: test
commands: commands:
- apk add --no-cache build-base npm git - apk add --no-cache build-base npm git python3
- mix local.rebar --force --if-missing - mix local.rebar --force
- mix local.hex --force --if-missing - mix local.hex --force
- mix deps.get - mix deps.get
- npm set cache .npm - mix deps.compile
- npm --prefix ./assets ci --no-audit --prefer-offline - npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
- npm run --prefix ./assets deploy - npm run --prefix ./assets deploy
- mix do phx.digest, gettext.extract - mix do phx.digest, gettext.extract
- mix test.all - mix test.all
@ -80,8 +76,7 @@ steps:
mount: mount:
- _build - _build
- deps - deps
- .npm - assets/node_modules/
- .mix
services: services:
- name: database - name: database

View File

@ -1,3 +1,3 @@
elixir 1.14.1-otp-25 elixir 1.14.1-otp-25
erlang 25.1.2 erlang 25.1.2
nodejs 18.9.1 nodejs 16.18.0

View File

@ -11,7 +11,6 @@
} }
.checkbox { .checkbox {
@apply bg-primary-900;
-ms-transform: scale(1.5); -ms-transform: scale(1.5);
-moz-transform: scale(1.5); -moz-transform: scale(1.5);
-webkit-transform: scale(1.5); -webkit-transform: scale(1.5);
@ -27,31 +26,25 @@
.btn { .btn {
@apply focus:outline-none px-4 py-2 rounded-lg; @apply focus:outline-none px-4 py-2 rounded-lg;
@apply shadow-sm active:shadow-lg; @apply shadow-sm focus:shadow-lg;
@apply border; @apply border;
@apply transition-all duration-300 ease-in-out; @apply transition-all duration-300 ease-in-out;
} }
.btn-primary { .btn-primary {
@apply bg-primary-900 active:bg-primary-800; @apply bg-primary-900 focus:bg-primary-900 active:bg-primary-800;
@apply border-primary-900 hover:border-primary-800 active:border-primary-700; @apply border-primary-900 hover:border-primary-800 active:border-primary-700;
@apply text-primary-400; @apply text-primary-400;
} }
.btn-secondary {
@apply bg-primary-800 active:bg-primary-700;
@apply border-primary-800 hover:border-primary-700 active:border-primary-600;
@apply text-primary-400;
}
.btn-alert { .btn-alert {
@apply bg-red-700 active:bg-red-900; @apply bg-red-700 focus:bg-red-800 active:bg-red-900;
@apply border-red-700 active:border-red-900; @apply border-red-700 focus:border-red-800 active:border-red-900;
@apply text-primary-300; @apply text-primary-300;
} }
.hr { .hr {
@apply mx-auto border border-primary-600 w-full max-w-3xl; @apply mx-auto border border-primary-600 w-full max-w-2xl;
} }
.link { .link {

View File

@ -3,8 +3,8 @@
"description": " ", "description": " ",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": "v18.9.1", "node": "18.12.1",
"npm": "8.10.0" "npm": "8.19.2"
}, },
"scripts": { "scripts": {
"deploy": "NODE_ENV=production webpack --mode production", "deploy": "NODE_ENV=production webpack --mode production",

View File

@ -1,8 +1,3 @@
# v0.1.9
- Improve server log
- Style 大一點
- Various minor improvements
# v0.1.8 # v0.1.8
- Fix bug with public registration - Fix bug with public registration
- Improve templates - Improve templates

View File

@ -16,8 +16,9 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> get_user_by_email("foo@example.com") iex> register_user(%{email: "foo@example.com", password: "valid_password"})
%User{} iex> with %User{} <- get_user_by_email("foo@example.com"), do: :passed
:passed
iex> get_user_by_email("unknown@example.com") iex> get_user_by_email("unknown@example.com")
nil nil
@ -33,8 +34,9 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> get_user_by_email_and_password("foo@example.com", "valid_password") iex> register_user(%{email: "foo@example.com", password: "valid_password"})
%User{} iex> with %User{} <- get_user_by_email_and_password("foo@example.com", "valid_password"), do: :passed
:passed
iex> get_user_by_email_and_password("foo@example.com", "invalid_password") iex> get_user_by_email_and_password("foo@example.com", "invalid_password")
nil nil
@ -55,14 +57,15 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> get_user!(user_id) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> get_user!(user.id)
user user
iex> get_user!() > get_user!()
** (Ecto.NoResultsError) ** (Ecto.NoResultsError)
""" """
@spec get_user!(User.id()) :: User.t() @spec get_user!(User.t()) :: User.t()
def get_user!(id) do def get_user!(id) do
Repo.get!(User, id) Repo.get!(User, id)
end end
@ -72,8 +75,10 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> list_all_users_by_role(user1) iex> {:ok, user1} = register_user(%{email: "foo1@example.com", password: "valid_password"})
%{admin: [%User{role: :admin}], user: [%User{role: :user}]} iex> {:ok, user2} = register_user(%{email: "foo2@example.com", password: "valid_password"})
iex> with %{admin: [^user1], user: [^user2]} <- list_all_users_by_role(user1), do: :passed
:passed
""" """
@spec list_all_users_by_role(User.t()) :: %{User.role() => [User.t()]} @spec list_all_users_by_role(User.t()) :: %{User.role() => [User.t()]}
@ -86,8 +91,9 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> list_users_by_role(:admin) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
[%User{role: :admin}] iex> with [^user] <- list_users_by_role(:admin), do: :passed
:passed
""" """
@spec list_users_by_role(:admin) :: [User.t()] @spec list_users_by_role(:admin) :: [User.t()]
@ -102,11 +108,13 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> register_user(%{email: "foo@example.com", password: "valid_password"}) iex> with {:ok, %User{email: "foo@example.com"}} <-
{:ok, %User{email: "foo@example.com"}} ...> register_user(%{email: "foo@example.com", password: "valid_password"}),
...> do: :passed
:passed
iex> register_user(%{email: "foo@example"}) iex> with {:error, %Changeset{}} <- register_user(%{email: "foo@example"}), do: :passed
{:error, %Changeset{}} :passed
""" """
@spec register_user(attrs :: map()) :: @spec register_user(attrs :: map()) ::
@ -141,11 +149,11 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> change_user_registration() iex> with %Changeset{} <- change_user_registration(), do: :passed
%Changeset{} :passed
iex> change_user_registration(%{password: "hi"} iex> with %Changeset{} <- change_user_registration(%{password: "hi"}), do: :passed
%Changeset{} :passed
""" """
@spec change_user_registration() :: User.changeset() @spec change_user_registration() :: User.changeset()
@ -161,8 +169,8 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> change_user_email(%User{email: "foo@example.com"}) iex> with %Changeset{} <- change_user_email(%User{email: "foo@example.com"}), do: :passed
%Changeset{} :passed
""" """
@spec change_user_email(User.t()) :: User.changeset() @spec change_user_email(User.t()) :: User.changeset()
@ -176,8 +184,8 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> change_user_role(%User{}, :user) iex> with %Changeset{} <- change_user_role(%User{}, :user), do: :passed
%Changeset{} :passed
""" """
@spec change_user_role(User.t(), User.role()) :: User.changeset() @spec change_user_role(User.t(), User.role()) :: User.changeset()
@ -191,11 +199,17 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> apply_user_email(user, "valid_password", %{email: "new_email@account.com"}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
{:ok, %User{}} iex> with {:ok, %User{}} <-
...> apply_user_email(user, "valid_password", %{email: "new_email@account.com"}),
...> do: :passed
:passed
iex> apply_user_email(user, "invalid password", %{email: "new_email@account"}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
{:error, %Changeset{}} iex> with {:error, %Changeset{}} <-
...> apply_user_email(user, "invalid password", %{email: "new_email@account"}),
...> do: :passed
:passed
""" """
@spec apply_user_email(User.t(), email :: String.t(), attrs :: map()) :: @spec apply_user_email(User.t(), email :: String.t(), attrs :: map()) ::
@ -240,8 +254,12 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> deliver_update_email_instructions(user, "new_foo@example.com", fn _token -> "example url" end) iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%Oban.Job{args: %{email: :update_email, user_id: ^user_id, attrs: %{url: "example url"}}} iex> with %Oban.Job{
...> args: %{email: :update_email, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_update_email_instructions(user, "new_foo@example.com", fn _token -> "example url" end),
...> do: :passed
:passed
""" """
@spec deliver_update_email_instructions(User.t(), current_email :: String.t(), function) :: @spec deliver_update_email_instructions(User.t(), current_email :: String.t(), function) ::
@ -258,8 +276,8 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> change_user_password(%User{}) iex> with %Changeset{} <- change_user_password(%User{}), do: :passed
%Changeset{} :passed
""" """
@spec change_user_password(User.t(), attrs :: map()) :: User.changeset() @spec change_user_password(User.t(), attrs :: map()) :: User.changeset()
@ -272,14 +290,20 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> reset_user_password(user, %{ iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
...> password: "new password", iex> with {:ok, %User{}} <-
...> password_confirmation: "new password" ...> reset_user_password(user, %{
...> }) ...> password: "new password",
{:ok, %User{}} ...> password_confirmation: "new password"
...> }),
...> do: :passed
:passed
iex> update_user_password(user, "invalid password", %{password: "123"}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
{:error, %Changeset{}} iex> with {:error, %Changeset{}} <-
...> update_user_password(user, "invalid password", %{password: "123"}),
...> do: :passed
:passed
""" """
@spec update_user_password(User.t(), String.t(), attrs :: map()) :: @spec update_user_password(User.t(), String.t(), attrs :: map()) ::
@ -305,8 +329,8 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> change_user_locale(%User{}) iex> with %Changeset{} <- change_user_locale(%User{}), do: :passed
%Changeset{} :passed
""" """
@spec change_user_locale(User.t()) :: User.changeset() @spec change_user_locale(User.t()) :: User.changeset()
@ -319,8 +343,9 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> update_user_locale(user, "en_US") iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
{:ok, %User{}} iex> with {:ok, %User{}} <- update_user_locale(user, "en_US"), do: :passed
:passed
""" """
@spec update_user_locale(User.t(), locale :: String.t()) :: @spec update_user_locale(User.t(), locale :: String.t()) ::
@ -334,11 +359,13 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> delete_user!(user, %User{id: 123, role: :admin}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%User{} iex> with %User{} <- delete_user!(user, %User{id: 123, role: :admin}), do: :passed
:passed
iex> delete_user!(user, user) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%User{} iex> with %User{} <- delete_user!(user, user), do: :passed
:passed
""" """
@spec delete_user!(user_to_delete :: User.t(), User.t()) :: User.t() @spec delete_user!(user_to_delete :: User.t(), User.t()) :: User.t()
@ -394,10 +421,11 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> is_admin?(%User{role: :admin}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> is_admin?(user)
true true
iex> is_admin?(%User{}) iex> is_admin?(%User{id: Ecto.UUID.generate()})
false false
""" """
@ -411,7 +439,8 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> is_already_admin?(%User{role: :admin}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> is_already_admin?(user)
true true
iex> is_already_admin?(%User{}) iex> is_already_admin?(%User{})
@ -429,9 +458,15 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> deliver_user_confirmation_instructions(user, fn _token -> "example url" end) iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%Oban.Job{args: %{email: :welcome, user_id: ^user_id, attrs: %{url: "example url"}}} iex> with %Oban.Job{
...> args: %{email: :welcome, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_user_confirmation_instructions(user, fn _token -> "example url" end),
...> do: :passed
:passed
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
iex> user = user |> User.confirm_changeset() |> Repo.update!()
iex> deliver_user_confirmation_instructions(user, fn _token -> "example url" end) iex> deliver_user_confirmation_instructions(user, fn _token -> "example url" end)
{:error, :already_confirmed} {:error, :already_confirmed}
@ -479,8 +514,12 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> deliver_user_reset_password_instructions(user, fn _token -> "example url" end) iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%Oban.Job{args: %{email: :reset_password, user_id: ^user_id, attrs: %{url: "example url"}}} iex> with %Oban.Job{args: %{
...> email: :reset_password, user_id: ^user_id, attrs: %{url: "example url"}}
...> } <- deliver_user_reset_password_instructions(user, fn _token -> "example url" end),
...> do: :passed
:passed
""" """
@spec deliver_user_reset_password_instructions(User.t(), function()) :: Job.t() @spec deliver_user_reset_password_instructions(User.t(), function()) :: Job.t()
@ -496,8 +535,11 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> get_user_by_reset_password_token(encoded_token) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
%User{} iex> {encoded_token, user_token} = UserToken.build_email_token(user, "reset_password")
iex> Repo.insert!(user_token)
iex> with %User{} <- get_user_by_reset_password_token(encoded_token), do: :passed
:passed
iex> get_user_by_reset_password_token("invalidtoken") iex> get_user_by_reset_password_token("invalidtoken")
nil nil
@ -518,14 +560,20 @@ defmodule Memex.Accounts do
## Examples ## Examples
iex> reset_user_password(user, %{ iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
...> password: "new password", iex> with {:ok, %User{}} <-
...> password_confirmation: "new password" ...> reset_user_password(user, %{
...> }) ...> password: "new password",
{:ok, %User{}} ...> password_confirmation: "new password"
...> }),
...> do: :passed
:passed
iex> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"}) iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
{:error, %Changeset{}} iex> with {:error, %Changeset{}} <-
...> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"}),
...> do: :passed
:passed
""" """
@spec reset_user_password(User.t(), attrs :: map()) :: @spec reset_user_password(User.t(), attrs :: map()) ::

View File

@ -0,0 +1,77 @@
defmodule Memex.Accounts.UserNotifier do
@moduledoc """
Contains templates and messages for user messages
"""
# For simplicity, this module simply logs messages to the terminal.
# You should replace it by a proper email or notification tool, such as:
#
# * Swoosh - https://hexdocs.pm/swoosh
# * Bamboo - https://hexdocs.pm/bamboo
#
defp deliver(to, body) do
require Logger
Logger.debug(body)
{:ok, %{to: to, body: body}}
end
@doc """
Deliver instructions to confirm account.
"""
def deliver_confirmation_instructions(user, url) do
deliver(user.email, """
==============================
Hi #{user.email},
You can confirm your account by visiting the URL below:
#{url}
If you didn't create an account with us, please ignore this.
==============================
""")
end
@doc """
Deliver instructions to reset a user password.
"""
def deliver_reset_password_instructions(user, url) do
deliver(user.email, """
==============================
Hi #{user.email},
You can reset your password by visiting the URL below:
#{url}
If you didn't request this change, please ignore this.
==============================
""")
end
@doc """
Deliver instructions to update a user email.
"""
def deliver_update_email_instructions(user, url) do
deliver(user.email, """
==============================
Hi #{user.email},
You can change your email by visiting the URL below:
#{url}
If you didn't request this change, please ignore this.
==============================
""")
end
end

View File

@ -4,7 +4,7 @@ defmodule Memex.Application do
@moduledoc false @moduledoc false
use Application use Application
alias Memex.Logger alias Memex.ErrorReporter
@impl true @impl true
def start(_type, _args) do def start(_type, _args) do
@ -33,7 +33,7 @@ defmodule Memex.Application do
[:oban, :job, :start], [:oban, :job, :start],
[:oban, :job, :stop] [:oban, :job, :stop]
], ],
&Logger.handle_event/4, &ErrorReporter.handle_event/4,
[] []
) )

View File

@ -1,4 +1,4 @@
defmodule Memex.Logger do defmodule Memex.ErrorReporter do
@moduledoc """ @moduledoc """
Custom logger for telemetry events Custom logger for telemetry events
@ -12,47 +12,41 @@ defmodule Memex.Logger do
data = data =
get_oban_job_data(meta, measure) get_oban_job_data(meta, measure)
|> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace)) |> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace))
|> pretty_encode()
Logger.error(meta.reason, data: data) Logger.error(meta.reason, data: pretty_encode(data))
end end
def handle_event([:oban, :job, :start], measure, meta, _config) do 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: get_oban_job_data(meta, measure) |> pretty_encode())
Logger.info("Started oban job", data: data)
end end
def handle_event([:oban, :job, :stop], measure, meta, _config) do 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: get_oban_job_data(meta, measure) |> pretty_encode())
Logger.info("Finished oban job", data: data)
end end
def handle_event([:oban, :job, unhandled_event], measure, meta, _config) do def handle_event([:oban, :job, unhandled_event], measure, meta, _config) do
data = data =
get_oban_job_data(meta, measure) get_oban_job_data(meta, measure)
|> Map.put(:event, unhandled_event) |> Map.put(:event, unhandled_event)
|> pretty_encode()
Logger.warning("Unhandled oban job event", data: data) Logger.warning("Unhandled oban job event", data: pretty_encode(data))
end end
def handle_event(unhandled_event, measure, meta, config) do def handle_event(unhandled_event, measure, meta, config) do
data = data = %{
pretty_encode(%{ event: unhandled_event,
event: unhandled_event, meta: meta,
meta: meta, measurements: measure,
measurements: measure, config: config
config: config }
})
Logger.warning("Unhandled telemetry event", data: data) Logger.warning("Unhandled telemetry event", data: pretty_encode(data))
end end
defp get_oban_job_data(%{job: job}, measure) do defp get_oban_job_data(%{job: job}, measure) do
%{ job
job: job |> Map.take([:id, :args, :meta, :queue, :worker]), |> Map.take([:id, :args, :meta, :queue, :worker])
measurements: measure |> Map.merge(measure)
}
end end
defp pretty_encode(data) do defp pretty_encode(data) do

View File

@ -93,7 +93,7 @@ defmodule MemexWeb do
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse # credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
use Phoenix.HTML use Phoenix.HTML
# Import LiveView and .heex helpers (live_render, link, <.form>, etc) # Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
# Import basic rendering functionality (render, render_layout, etc) # Import basic rendering functionality (render, render_layout, etc)
import Phoenix.{Component, View} import Phoenix.{Component, View}
import MemexWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers} import MemexWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers}

View File

@ -19,8 +19,7 @@ defmodule MemexWeb.Components.InviteCard do
|> assign_new(:code_actions, fn -> [] end) |> assign_new(:code_actions, fn -> [] end)
~H""" ~H"""
<div class="px-8 py-4 flex flex-col justify-center items-center space-y-4 <div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
bg-primary-900
border border-gray-400 rounded-lg shadow-lg hover:shadow-md border border-gray-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out"> transition-all duration-300 ease-in-out">
<h1 class="title text-xl"> <h1 class="title text-xl">
@ -56,8 +55,7 @@ defmodule MemexWeb.Components.InviteCard do
<div class="flex flex-row flex-wrap justify-center items-center"> <div class="flex flex-row flex-wrap justify-center items-center">
<code <code
id={"code-#{@invite.id}"} id={"code-#{@invite.id}"}
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
text-primary-400 bg-primary-800"
phx-no-format phx-no-format
><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code> ><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code>
<%= render_slot(@code_actions) %> <%= render_slot(@code_actions) %>

View File

@ -11,8 +11,7 @@
phx-value-sort-key={key} phx-value-sort-key={key}
phx-target={@myself} phx-target={@myself}
> >
<i class="w-0 float-right fas fa-sm fa-chevron-up opacity-0"></i> <span><%= label %></span>
<span class={if @last_sort_key == key, do: "underline"}><%= label %></span>
<%= if @last_sort_key == key do %> <%= if @last_sort_key == key do %>
<%= case @sort_mode do %> <%= case @sort_mode do %>
<% :asc -> %> <% :asc -> %>
@ -26,7 +25,7 @@
</span> </span>
</th> </th>
<% else %> <% else %>
<th class={["p-2 cursor-not-allowed", column[:class]]}> <th class={["p-2", column[:class]]}>
<%= label %> <%= label %>
</th> </th>
<% end %> <% end %>

View File

@ -82,6 +82,7 @@ defmodule MemexWeb.Components.Topbar do
<%= @current_user.email %> <%= @current_user.email %>
</.link> </.link>
</li> </li>
<li class="mx-2 my-1"> <li class="mx-2 my-1">
<.link <.link
href={Routes.user_session_path(Endpoint, :delete)} href={Routes.user_session_path(Endpoint, :delete)}
@ -91,6 +92,7 @@ defmodule MemexWeb.Components.Topbar do
<i class="fas fa-sign-out-alt"></i> <i class="fas fa-sign-out-alt"></i>
</.link> </.link>
</li> </li>
<li <li
:if={ :if={
@current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2) @current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2)
@ -107,7 +109,7 @@ defmodule MemexWeb.Components.Topbar do
<% else %> <% else %>
<li :if={Accounts.allow_registration?()} class="mx-2 my-1"> <li :if={Accounts.allow_registration?()} class="mx-2 my-1">
<.link <.link
href={Routes.user_registration_path(Endpoint, :new)} navigate={Routes.user_registration_path(Endpoint, :new)}
class="text-primary-400 text-primary-400 hover:underline truncate" class="text-primary-400 text-primary-400 hover:underline truncate"
> >
<%= dgettext("actions", "register") %> <%= dgettext("actions", "register") %>
@ -116,7 +118,7 @@ defmodule MemexWeb.Components.Topbar do
<li class="mx-2 my-1"> <li class="mx-2 my-1">
<.link <.link
href={Routes.user_session_path(Endpoint, :new)} navigate={Routes.user_session_path(Endpoint, :new)}
class="text-primary-400 text-primary-400 hover:underline truncate" class="text-primary-400 text-primary-400 hover:underline truncate"
> >
<%= dgettext("actions", "log in") %> <%= dgettext("actions", "log in") %>

View File

@ -4,17 +4,12 @@ defmodule MemexWeb.Components.UserCard do
""" """
use MemexWeb, :component use MemexWeb, :component
alias Memex.Accounts.User
attr :user, User, required: true
slot(:inner_block, required: true)
def user_card(assigns) do def user_card(assigns) do
~H""" ~H"""
<div <div
id={"user-#{@user.id}"} id={"user-#{@user.id}"}
class="px-8 py-4 flex flex-col justify-center items-center text-center class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center text-center
bg-primary-900
border border-gray-400 rounded-lg shadow-lg hover:shadow-md border border-gray-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out" transition-all duration-300 ease-in-out"
> >

View File

@ -2,7 +2,7 @@ defmodule MemexWeb.UserRegistrationController do
use MemexWeb, :controller use MemexWeb, :controller
import MemexWeb.Gettext import MemexWeb.Gettext
alias Memex.{Accounts, Accounts.Invites} alias Memex.{Accounts, Accounts.Invites}
alias MemexWeb.HomeLive alias MemexWeb.{Endpoint, HomeLive}
def new(conn, %{"invite" => invite_token}) do def new(conn, %{"invite" => invite_token}) do
if Invites.valid_invite_token?(invite_token) do if Invites.valid_invite_token?(invite_token) do

View File

@ -1,5 +1,5 @@
<div class="mx-auto flex flex-col justify-center items-stretch space-y-8 text-center max-w-3xl"> <div class="mx-auto flex flex-col justify-center items-stretch space-y-8 text-center max-w-3xl">
<h1 class="title text-primary-400 text-xl text-left"> <h1 class="title text-primary-400 text-2xl">
<%= gettext("faq") %> <%= gettext("faq") %>
</h1> </h1>
@ -7,13 +7,16 @@
<ul class="flex flex-col justify-center items-stretch space-y-8"> <ul class="flex flex-col justify-center items-stretch space-y-8">
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("what is this?") %> <%= gettext("what is this?") %>
</b> </b>
<p> <p>
<%= gettext( <%= gettext(
"this is a memex, used to document not just your notes, but also your perspectives and processes." "this is a memex, used to document not just your notes, but also your perspectives and processes."
) %> ) %>
</p>
<p>
<%= gettext("some things that this memex is very loosely inspired by:") %> <%= gettext("some things that this memex is very loosely inspired by:") %>
</p> </p>
@ -52,16 +55,20 @@
</li> </li>
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("why split up into notes, contexts and pipelines?") %> <%= gettext("why split up into notes, contexts and pipelines?") %>
</b> </b>
<p> <p>
<%= gettext( <%= gettext(
"i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy." "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively." "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
) %> ) %>
@ -69,13 +76,15 @@
</li> </li>
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("what should my notes be like?") %> <%= gettext("what should my notes be like?") %>
</b> </b>
<p> <p>
<%= gettext( <%= gettext(
"in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life." "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"spoons? probably not. a particular brand of spoons that you really like? why not :)" "spoons? probably not. a particular brand of spoons that you really like? why not :)"
) %> ) %>
@ -83,11 +92,13 @@
</li> </li>
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("what should my contexts be like?") %> <%= gettext("what should my contexts be like?") %>
</b> </b>
<p> <p>
<%= gettext("in my opinion, contexts should be like single-topic blog posts.") %> <%= gettext("in my opinion, contexts should be like single-topic blog posts.") %>
</p>
<p>
<%= gettext( <%= gettext(
"for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand." "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand."
) %> ) %>
@ -95,13 +106,15 @@
</li> </li>
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("what should my pipelines be like?") %> <%= gettext("what should my pipelines be like?") %>
</b> </b>
<p> <p>
<%= gettext( <%= gettext(
"in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting." "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case." "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case."
) %> ) %>
@ -109,16 +122,20 @@
</li> </li>
<li class="flex flex-col justify-center items-stretch space-y-2"> <li class="flex flex-col justify-center items-stretch space-y-2">
<b class="whitespace-nowrap text-left"> <b class="whitespace-nowrap">
<%= gettext("how many people should i invite?") %> <%= gettext("how many people should i invite?") %>
</b> </b>
<p> <p>
<%= gettext( <%= gettext(
"while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document." "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you." "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
) %> ) %>
</p>
<p>
<%= gettext( <%= gettext(
"so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)" "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)"
) %> ) %>

View File

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

View File

@ -1,9 +1,11 @@
<div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-lg"> <div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-3xl">
<h1 class="title text-primary-400 text-xl"> <h1 class="title text-primary-400 text-2xl text-center">
<%= gettext("memEx") %> <%= gettext("memEx") %>
</h1> </h1>
<ul class="flex flex-col space-y-4"> <hr class="hr" />
<ul class="flex flex-col space-y-4 text-center">
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-col justify-center items-center space-y-2">
<b class="whitespace-nowrap"> <b class="whitespace-nowrap">
<%= gettext("notes:") %> <%= gettext("notes:") %>
@ -31,8 +33,11 @@
</p> </p>
</li> </li>
<li class="flex flex-col justify-center items-center text-right space-y-2"> <li class="flex flex-col justify-center items-center space-y-2">
<.link navigate={Routes.live_path(Endpoint, FaqLive)} class="btn btn-primary"> <.link
navigate={Routes.live_path(Endpoint, FaqLive)}
class="link title text-primary-400 text-lg"
>
<%= gettext("read more on how to use memEx") %> <%= gettext("read more on how to use memEx") %>
</.link> </.link>
</li> </li>
@ -40,7 +45,7 @@
<hr class="hr" /> <hr class="hr" />
<ul class="flex flex-col space-y-4"> <ul class="flex flex-col space-y-4 text-center">
<h2 class="title text-primary-400 text-lg"> <h2 class="title text-primary-400 text-lg">
<%= gettext("features") %> <%= gettext("features") %>
</h2> </h2>
@ -75,29 +80,31 @@
<hr class="hr" /> <hr class="hr" />
<ul class="flex flex-col justify-center space-y-4"> <ul class="flex flex-col space-y-4 text-center">
<h2 class="title text-primary-400 text-lg"> <h2 class="title text-primary-400 text-lg">
<%= gettext("instance information") %> <%= gettext("instance information") %>
</h2> </h2>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-col justify-center space-x-2">
<b> <b>
<%= gettext("admins:") %> <%= gettext("admins:") %>
</b> </b>
<p class="flex flex-col justify-center items-center space-y-2"> <p>
<%= if @admins |> Enum.empty?() do %> <%= if @admins |> Enum.empty?() do %>
<.link href={Routes.user_registration_path(Endpoint, :new)} class="link"> <.link href={Routes.user_registration_path(Endpoint, :new)} class="link">
<%= dgettext("prompts", "register to setup memEx") %> <%= dgettext("prompts", "register to setup memEx") %>
</.link> </.link>
<% else %> <% else %>
<a :for={%{email: email} <- @admins} class="link" href={"mailto:#{email}"}> <div class="flex flex-wrap justify-center space-x-2">
<%= email %> <a :for={%{email: email} <- @admins} class="link" href={"mailto:#{email}"}>
</a> <%= email %>
</a>
</div>
<% end %> <% end %>
</p> </p>
</li> </li>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-row justify-center space-x-2">
<b><%= gettext("registration:") %></b> <b><%= gettext("registration:") %></b>
<p> <p>
<%= case Application.get_env(:memex, Memex.Accounts)[:registration] do <%= case Application.get_env(:memex, Memex.Accounts)[:registration] do
@ -107,7 +114,7 @@
</p> </p>
</li> </li>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-row justify-center items-center space-x-2">
<b><%= gettext("version:") %></b> <b><%= gettext("version:") %></b>
<.link <.link
href="https://gitea.bubbletea.dev/shibao/memEx/src/branch/stable/changelog.md" href="https://gitea.bubbletea.dev/shibao/memEx/src/branch/stable/changelog.md"
@ -123,12 +130,12 @@
<hr class="hr" /> <hr class="hr" />
<ul class="flex flex-col space-y-2"> <ul class="flex flex-col space-y-2 text-center justify-center">
<h2 class="title text-primary-400 text-lg"> <h2 class="title text-primary-400 text-lg">
<%= gettext("get involved") %> <%= gettext("get involved!") %>
</h2> </h2>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-col justify-center space-x-2">
<.link <.link
href="https://gitea.bubbletea.dev/shibao/memEx" href="https://gitea.bubbletea.dev/shibao/memEx"
class="flex flex-row justify-center items-center space-x-2 link" class="flex flex-row justify-center items-center space-x-2 link"
@ -139,7 +146,7 @@
<i class="fas fa-md fa-code"></i> <i class="fas fa-md fa-code"></i>
</.link> </.link>
</li> </li>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-col justify-center space-x-2">
<.link <.link
href="https://weblate.bubbletea.dev/engage/memEx" href="https://weblate.bubbletea.dev/engage/memEx"
class="flex flex-row justify-center items-center space-x-2 link" class="flex flex-row justify-center items-center space-x-2 link"
@ -150,7 +157,7 @@
<i class="fas fa-md fa-language"></i> <i class="fas fa-md fa-language"></i>
</.link> </.link>
</li> </li>
<li class="flex flex-col justify-center items-center space-y-2"> <li class="flex flex-col justify-center space-x-2">
<.link <.link
href="https://gitea.bubbletea.dev/shibao/memEx/issues/new" href="https://gitea.bubbletea.dev/shibao/memEx/issues/new"
class="flex flex-row justify-center items-center space-x-2 link" class="flex flex-row justify-center items-center space-x-2 link"

View File

@ -18,16 +18,13 @@
<%= changeset_errors(@changeset) %> <%= changeset_errors(@changeset) %>
</div> </div>
<%= label(f, :name, gettext("name"), class: "title text-lg text-primary-400") %> <%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-400") %>
<%= text_input(f, :name, class: "input input-primary col-span-2") %> <%= text_input(f, :name, class: "input input-primary col-span-2") %>
<%= error_tag(f, :name, "col-span-3") %> <%= error_tag(f, :name, "col-span-3") %>
<%= label(f, :uses_left, gettext("uses left"), class: "title text-lg text-primary-400") %> <%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-400") %>
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %> <%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %>
<%= error_tag(f, :uses_left, "col-span-3") %> <%= error_tag(f, :uses_left, "col-span-3") %>
<span class="col-span-3 text-primary-500 italic text-center">
<%= gettext(~s/Leave "Uses left" blank to make invite unlimited/) %>
</span>
<%= submit(dgettext("actions", "Save"), <%= submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3", class: "mx-auto btn btn-primary col-span-3",

View File

@ -7,7 +7,7 @@ defmodule MemexWeb.InviteLive.Index do
import MemexWeb.Components.{InviteCard, UserCard} import MemexWeb.Components.{InviteCard, UserCard}
alias Memex.Accounts alias Memex.Accounts
alias Memex.Accounts.{Invite, Invites} alias Memex.Accounts.{Invite, Invites}
alias MemexWeb.HomeLive alias MemexWeb.{Endpoint, HomeLive}
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
@impl true @impl true

View File

@ -1,5 +1,5 @@
<div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-3xl"> <div class="w-full flex flex-col space-y-8 justify-center items-center">
<h1 class="title text-xl title-primary-500"> <h1 class="title text-2xl title-primary-500">
<%= gettext("invites") %> <%= gettext("invites") %>
</h1> </h1>
@ -11,18 +11,22 @@
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary"> <.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
<%= dgettext("actions", "invite someone new!") %> <%= dgettext("actions", "invite someone new!") %>
</.link> </.link>
<% else %>
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
<%= dgettext("actions", "create invite") %>
</.link>
<% end %> <% end %>
<div class="flex flex-col justify-center items-stretch space-y-4"> <div class="w-full flex flex-row flex-wrap justify-center items-center">
<.invite_card :for={invite <- @invites} invite={invite} current_user={@current_user}> <.invite_card :for={invite <- @invites} invite={invite} current_user={@current_user}>
<:code_actions> <:code_actions>
<form phx-submit="copy_to_clipboard"> <form phx-submit="copy_to_clipboard">
<button <button
type="submit" type="submit"
class="mx-2 my-1 btn btn-secondary" class="mx-2 my-1 btn btn-primary"
phx-click={JS.dispatch("memex:clipcopy", to: "#code-#{invite.id}")} phx-click={JS.dispatch("memex:clipcopy", to: "#code-#{invite.id}")}
> >
<%= dgettext("actions", "copy") %> <%= dgettext("actions", "Copy to clipboard") %>
</button> </button>
</form> </form>
</:code_actions> </:code_actions>
@ -51,7 +55,7 @@
<a <a
href="#" href="#"
class="btn btn-secondary" class="btn btn-primary"
phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"} phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"}
phx-value-id={invite.id} phx-value-id={invite.id}
> >
@ -61,7 +65,7 @@
<a <a
:if={invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil())} :if={invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil())}
href="#" href="#"
class="btn btn-secondary" class="btn btn-primary"
phx-click="set_unlimited" phx-click="set_unlimited"
phx-value-id={invite.id} phx-value-id={invite.id}
data-confirm={ data-confirm={
@ -73,24 +77,16 @@
<%= gettext("set unlimited") %> <%= gettext("set unlimited") %>
</a> </a>
</.invite_card> </.invite_card>
<.link
:if={@invites != []}
patch={Routes.invite_index_path(Endpoint, :new)}
class="btn btn-primary ml-auto"
>
<%= dgettext("actions", "create invite") %>
</.link>
</div> </div>
<%= unless @admins |> Enum.empty?() do %> <%= unless @admins |> Enum.empty?() do %>
<hr class="hr" /> <hr class="hr" />
<h1 class="title text-xl text-primary-400"> <h1 class="title text-2xl text-primary-400">
<%= gettext("admins") %> <%= gettext("Admins") %>
</h1> </h1>
<div class="flex flex-col justify-center items-stretch space-y-4"> <div class="w-full flex flex-row flex-wrap justify-center items-center">
<.user_card :for={admin <- @admins} user={admin}> <.user_card :for={admin <- @admins} user={admin}>
<.link <.link
href="#" href="#"
@ -100,7 +96,7 @@
data-confirm={ data-confirm={
dgettext( dgettext(
"prompts", "prompts",
"are you sure you want to delete %{email}? this action is permanent!", "are you sure you want to delete %{email}? This action is permanent!",
email: admin.email email: admin.email
) )
} }
@ -114,11 +110,11 @@
<%= unless @users |> Enum.empty?() do %> <%= unless @users |> Enum.empty?() do %>
<hr class="hr" /> <hr class="hr" />
<h1 class="title text-xl text-primary-400"> <h1 class="title text-2xl text-primary-400">
<%= gettext("users") %> <%= gettext("users") %>
</h1> </h1>
<div class="flex flex-col justify-center items-stretch space-y-4"> <div class="w-full flex flex-row flex-wrap justify-center items-center">
<.user_card :for={user <- @users} user={user}> <.user_card :for={user <- @users} user={user}>
<.link <.link
href="#" href="#"
@ -128,7 +124,7 @@
data-confirm={ data-confirm={
dgettext( dgettext(
"prompts", "prompts",
"are you sure you want to delete %{email}? this action is permanent!", "are you sure you want to delete %{email}? This action is permanent!",
email: user.email email: user.email
) )
} }

View File

@ -28,8 +28,8 @@ defmodule MemexWeb.LiveHelpers do
def modal(assigns) do def modal(assigns) do
~H""" ~H"""
<.link <.link
id="modal-bg"
patch={@return_to} patch={@return_to}
id="modal-bg"
class="fade-in fixed z-10 left-0 top-0 class="fade-in fixed z-10 left-0 top-0
w-full h-full overflow-hidden w-full h-full overflow-hidden
p-8 flex flex-col justify-center items-center cursor-auto" p-8 flex flex-col justify-center items-center cursor-auto"
@ -42,7 +42,7 @@ defmodule MemexWeb.LiveHelpers do
<div <div
id="modal" id="modal"
class="fixed z-10 left-0 top-0 pointer-events-none class="fixed z-10 left-0 top-0 pointer-events-none
w-full h-full overflow-hidden w-screen h-screen overflow-hidden
p-4 sm:p-8 flex flex-col justify-center items-center" p-4 sm:p-8 flex flex-col justify-center items-center"
> >
<div <div

View File

@ -11,9 +11,9 @@
<script defer type="text/javascript" src="/js/app.js"> <script defer type="text/javascript" src="/js/app.js">
</script> </script>
</head> </head>
<body class="pb-8 m-0 p-0 w-full h-full bg-primary-800 text-primary-400 subpixel-antialiased"> <body class="m-0 p-0 w-full h-full bg-primary-800 text-primary-400 subpixel-antialiased">
<header> <header>
<.topbar current_user={assigns[:current_user]} /> <.topbar current_user={assigns[:current_user]}></.topbar>
</header> </header>
<div class="pb-8 w-full flex flex-col justify-center items-center text-center"> <div class="pb-8 w-full flex flex-col justify-center items-center text-center">

View File

@ -1,6 +1,6 @@
<main role="main" class="min-h-full min-w-full"> <main role="main" class="min-h-full min-w-full">
<header> <header>
<.topbar current_user={assigns[:current_user]} /> <.topbar current_user={assigns[:current_user]}></.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center"> <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"> <p :if={get_flash(@conn, :info)} class="alert alert-info" role="alert">

View File

@ -1,6 +1,6 @@
<main class="pb-8 min-w-full"> <main class="pb-8 min-w-full">
<header> <header>
<.topbar current_user={assigns[:current_user]} /> <.topbar current_user={assigns[:current_user]}></.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center"> <div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p <p
@ -33,7 +33,7 @@
<div <div
id="disconnect" id="disconnect"
class="z-50 fixed opacity-0 bottom-12 right-12 px-8 py-4 w-max h-max class="z-50 fixed opacity-0 bottom-12 right-12 px-8 py-4 w-max h-max
border border-primary-400 shadow-lg rounded-lg bg-primary-900 text-primary-400 border border-primary-400 shadow-lg rounded-lg bg-primary-800 text-primary-400
flex justify-center items-center space-x-4 flex justify-center items-center space-x-4
transition-opacity ease-in-out duration-500 delay-[2000ms]" transition-opacity ease-in-out duration-500 delay-[2000ms]"
> >

View File

@ -9,7 +9,7 @@
action={Routes.user_confirmation_path(@conn, :create)} action={Routes.user_confirmation_path(@conn, :create)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center" 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") %> <%= label(f, :email, class: "title text-lg text-primary-400") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %> <%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= submit(dgettext("actions", "Resend confirmation instructions"), <%= submit(dgettext("actions", "Resend confirmation instructions"),

View File

@ -17,11 +17,11 @@
<%= hidden_input(f, :invite_token, value: @invite_token) %> <%= hidden_input(f, :invite_token, value: @invite_token) %>
<% end %> <% end %>
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %> <%= label(f, :email, class: "title text-lg text-primary-400") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %> <%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :email, "col-span-3") %> <%= error_tag(f, :email, "col-span-3") %>
<%= label(f, :password, gettext("password"), class: "title text-lg text-primary-400") %> <%= label(f, :password, class: "title text-lg text-primary-400") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %> <%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %> <%= error_tag(f, :password, "col-span-3") %>

View File

@ -9,15 +9,17 @@
action={Routes.user_reset_password_path(@conn, :update, @token)} action={Routes.user_reset_password_path(@conn, :update, @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" 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"> <div :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
<%= dgettext("errors", "oops, something went wrong! please check the errors below.") %> <p>
</p> <%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= label(f, :password, gettext("new password"), class: "title text-lg text-primary-400") %> <%= label(f, :password, "new password", class: "title text-lg text-primary-400") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %> <%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %> <%= error_tag(f, :password, "col-span-3") %>
<%= label(f, :password_confirmation, gettext("confirm new password"), <%= label(f, :password_confirmation, "Confirm new password",
class: "title text-lg text-primary-400" class: "title text-lg text-primary-400"
) %> ) %>
<%= password_input(f, :password_confirmation, <%= password_input(f, :password_confirmation,

View File

@ -9,7 +9,7 @@
action={Routes.user_reset_password_path(@conn, :create)} action={Routes.user_reset_password_path(@conn, :create)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center" 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") %> <%= label(f, :email, class: "title text-lg text-primary-400") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %> <%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= submit(dgettext("actions", "send instructions to reset password"), <%= submit(dgettext("actions", "send instructions to reset password"),

View File

@ -10,17 +10,19 @@
as="user" 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" 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"> <div :if={@error_message} class="alert alert-danger col-span-3">
<%= @error_message %> <p>
</p> <%= @error_message %>
</p>
</div>
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %> <%= label(f, :email, class: "title text-lg text-primary-400") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %> <%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= label(f, :password, gettext("password"), class: "title text-lg text-primary-400") %> <%= label(f, :password, class: "title text-lg text-primary-400") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %> <%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= label(f, :remember_me, gettext("keep me logged in for 60 days"), <%= label(f, :remember_me, gettext("Keep me logged in for 60 days"),
class: "title text-lg text-primary-400" class: "title text-lg text-primary-400"
) %> ) %>
<%= checkbox(f, :remember_me, class: "checkbox col-span-2") %> <%= checkbox(f, :remember_me, class: "checkbox col-span-2") %>

View File

@ -1,5 +1,5 @@
<div class="mx-auto pb-8 max-w-3xl flex flex-col justify-center items-stretch text-right space-y-4"> <div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center text-center space-y-4">
<h1 class="title text-primary-400 text-xl text-left"> <h1 class="pb-4 title text-primary-400 text-xl">
<%= gettext("settings") %> <%= gettext("settings") %>
</h1> </h1>
@ -11,7 +11,7 @@
action={Routes.user_settings_path(@conn, :update)} action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center" 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"> <h3 class="title text-primary-400 text-lg col-span-3">
<%= dgettext("actions", "change email") %> <%= dgettext("actions", "change email") %>
</h3> </h3>
@ -19,7 +19,9 @@
:if={@email_changeset.action && not @email_changeset.valid?()} :if={@email_changeset.action && not @email_changeset.valid?()}
class="alert alert-danger col-span-3" class="alert alert-danger col-span-3"
> >
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %> <p>
<%= dgettext("errors", "oops, something went wrong! Please check the errors below") %>
</p>
</div> </div>
<%= hidden_input(f, :action, name: "action", value: "update_email") %> <%= hidden_input(f, :action, name: "action", value: "update_email") %>
@ -53,16 +55,18 @@
action={Routes.user_settings_path(@conn, :update)} action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center" 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"> <h3 class="title text-primary-400 text-lg col-span-3">
<%= dgettext("actions", "change password") %> <%= dgettext("actions", "change password") %>
</h3> </h3>
<p <div
:if={@password_changeset.action && not @password_changeset.valid?()} :if={@password_changeset.action && not @password_changeset.valid?()}
class="alert alert-danger col-span-3" class="alert alert-danger col-span-3"
> >
<%= dgettext("errors", "oops, something went wrong! please check the errors below.") %> <p>
</p> <%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
</p>
</div>
<%= hidden_input(f, :action, name: "action", value: "update_password") %> <%= hidden_input(f, :action, name: "action", value: "update_password") %>
@ -105,35 +109,37 @@
:let={f} :let={f}
for={@locale_changeset} for={@locale_changeset}
action={Routes.user_settings_path(@conn, :update)} action={Routes.user_settings_path(@conn, :update)}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center" class="flex flex-col space-y-4 justify-center items-center"
> >
<h3 class="title text-primary-400 text-lg text-center col-span-3"> <h3 class="title text-primary-400 text-lg">
<%= dgettext("actions", "change language") %> <%= dgettext("actions", "change language") %>
</h3> </h3>
<div <div
:if={@locale_changeset.action && not @locale_changeset.valid?()} :if={@locale_changeset.action && not @locale_changeset.valid?()}
class="alert alert-danger col-span-3" class="alert alert-danger"
> >
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %> <p>
<%= dgettext("errors", "oops, something went wrong! Please check the errors below") %>
</p>
</div> </div>
<%= hidden_input(f, :action, name: "action", value: "update_locale") %> <%= hidden_input(f, :action, name: "action", value: "update_locale") %>
<%= select(f, :locale, [{gettext("english"), "en_US"}, {"spanish", "es"}], <%= select(f, :locale, [{gettext("english"), "en_US"}, {"spanish", "es"}],
class: "mx-2 my-1 min-w-md input input-primary col-start-2" class: "mx-2 my-1 min-w-md input input-primary"
) %> ) %>
<%= error_tag(f, :locale, "col-span-3") %> <%= error_tag(f, :locale) %>
<%= submit(dgettext("actions", "change language"), <%= submit(dgettext("actions", "change language"),
class: "whitespace-nowrap mx-auto btn btn-primary col-span-3", class: "whitespace-nowrap mx-auto btn btn-primary",
data: [qa: dgettext("prompts", "are you sure you want to change your language?")] data: [qa: dgettext("prompts", "are you sure you want to change your language?")]
) %> ) %>
</.form> </.form>
<hr class="hr" /> <hr class="hr" />
<div class="flex justify-end items-center"> <div class="flex justify-center items-center">
<.link <.link
href={Routes.export_path(@conn, :export, :json)} href={Routes.export_path(@conn, :export, :json)}
class="mx-4 my-2 btn btn-primary" class="mx-4 my-2 btn btn-primary"

View File

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

View File

@ -71,7 +71,7 @@ defmodule MemexWeb.ViewHelpers do
img_data = img_data =
content content
|> EQRCode.encode() |> EQRCode.encode()
|> EQRCode.png(width: width, background_color: <<24, 24, 27>>, color: <<255, 255, 255>>) |> EQRCode.png(width: width, background_color: <<39, 39, 42>>, color: <<255, 255, 255>>)
|> Base.encode64() |> Base.encode64()
"data:image/png;base64," <> img_data "data:image/png;base64," <> img_data

View File

@ -4,8 +4,8 @@ defmodule Memex.MixProject do
def project do def project do
[ [
app: :memex, app: :memex,
version: "0.1.9", version: "0.1.8",
elixir: "1.14.1", elixir: "~> 1.14",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
compilers: Mix.compilers(), compilers: Mix.compilers(),
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,

View File

@ -10,6 +10,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "Copy to clipboard"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:3 #: lib/memex_web/templates/user_confirmation/new.html.heex:3
#: lib/memex_web/templates/user_confirmation/new.html.heex:15 #: lib/memex_web/templates/user_confirmation/new.html.heex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -17,35 +22,35 @@ msgid "Resend confirmation instructions"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:3 #: 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/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reset password" msgid "Reset password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:32 #: lib/memex_web/live/invite_live/form_component.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15 #: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43 #: lib/memex_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change email" msgid "change email"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:111 #: lib/memex_web/templates/user_settings/edit.html.heex:115
#: lib/memex_web/templates/user_settings/edit.html.heex:128 #: lib/memex_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change language" msgid "change language"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:57 #: lib/memex_web/templates/user_settings/edit.html.heex:59
#: lib/memex_web/templates/user_settings/edit.html.heex:97 #: lib/memex_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change password" msgid "change password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:82 #: lib/memex_web/live/invite_live/index.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "create invite" msgid "create invite"
msgstr "" msgstr ""
@ -61,7 +66,7 @@ msgstr ""
msgid "delete" msgid "delete"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151 #: lib/memex_web/templates/user_settings/edit.html.heex:157
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete user" msgid "delete user"
msgstr "" msgstr ""
@ -82,13 +87,13 @@ msgstr ""
msgid "invite someone new!" msgid "invite someone new!"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:122 #: lib/memex_web/components/topbar.ex:124
#: lib/memex_web/templates/user_confirmation/new.html.heex:31 #: lib/memex_web/templates/user_confirmation/new.html.heex:31
#: lib/memex_web/templates/user_registration/new.html.heex:44 #: 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/edit.html.heex:47
#: lib/memex_web/templates/user_reset_password/new.html.heex:31 #: lib/memex_web/templates/user_reset_password/new.html.heex:31
#: lib/memex_web/templates/user_session/new.html.heex:3 #: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28 #: lib/memex_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "log in" msgid "log in"
msgstr "" msgstr ""
@ -108,13 +113,13 @@ msgstr ""
msgid "new pipeline" msgid "new pipeline"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:113 #: lib/memex_web/components/topbar.ex:115
#: lib/memex_web/templates/user_confirmation/new.html.heex:28 #: lib/memex_web/templates/user_confirmation/new.html.heex:28
#: lib/memex_web/templates/user_registration/new.html.heex:3 #: 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_registration/new.html.heex:37
#: lib/memex_web/templates/user_reset_password/edit.html.heex:42 #: lib/memex_web/templates/user_reset_password/edit.html.heex:44
#: lib/memex_web/templates/user_reset_password/new.html.heex:28 #: lib/memex_web/templates/user_reset_password/new.html.heex:28
#: lib/memex_web/templates/user_session/new.html.heex:39 #: lib/memex_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register" msgid "register"
msgstr "" msgstr ""
@ -141,7 +146,7 @@ msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:47 #: 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_reset_password/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:42 #: lib/memex_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "forgot your password?" msgid "forgot your password?"
msgstr "" msgstr ""
@ -151,12 +156,7 @@ msgstr ""
msgid "send instructions to reset password" msgid "send instructions to reset password"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142 #: lib/memex_web/templates/user_settings/edit.html.heex:148
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "export data as json" msgid "export data as json"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:25
#, elixir-autogen, elixir-format
msgid "copy"
msgstr ""

View File

@ -10,6 +10,11 @@ msgid ""
msgstr "" msgstr ""
"Language: de\n" "Language: de\n"
#: lib/memex_web/live/invite_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "Copy to clipboard"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:3 #: lib/memex_web/templates/user_confirmation/new.html.heex:3
#: lib/memex_web/templates/user_confirmation/new.html.heex:15 #: lib/memex_web/templates/user_confirmation/new.html.heex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -17,35 +22,35 @@ msgid "Resend confirmation instructions"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:3 #: 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/templates/user_reset_password/edit.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reset password" msgid "Reset password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:32 #: lib/memex_web/live/invite_live/form_component.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15 #: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43 #: lib/memex_web/templates/user_settings/edit.html.heex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change email" msgid "change email"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:111 #: lib/memex_web/templates/user_settings/edit.html.heex:115
#: lib/memex_web/templates/user_settings/edit.html.heex:128 #: lib/memex_web/templates/user_settings/edit.html.heex:134
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change language" msgid "change language"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:57 #: lib/memex_web/templates/user_settings/edit.html.heex:59
#: lib/memex_web/templates/user_settings/edit.html.heex:97 #: lib/memex_web/templates/user_settings/edit.html.heex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "change password" msgid "change password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:82 #: lib/memex_web/live/invite_live/index.html.heex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "create invite" msgid "create invite"
msgstr "" msgstr ""
@ -61,7 +66,7 @@ msgstr ""
msgid "delete" msgid "delete"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151 #: lib/memex_web/templates/user_settings/edit.html.heex:157
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete user" msgid "delete user"
msgstr "" msgstr ""
@ -82,13 +87,13 @@ msgstr ""
msgid "invite someone new!" msgid "invite someone new!"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:122 #: lib/memex_web/components/topbar.ex:124
#: lib/memex_web/templates/user_confirmation/new.html.heex:31 #: lib/memex_web/templates/user_confirmation/new.html.heex:31
#: lib/memex_web/templates/user_registration/new.html.heex:44 #: 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/edit.html.heex:47
#: lib/memex_web/templates/user_reset_password/new.html.heex:31 #: lib/memex_web/templates/user_reset_password/new.html.heex:31
#: lib/memex_web/templates/user_session/new.html.heex:3 #: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28 #: lib/memex_web/templates/user_session/new.html.heex:30
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "log in" msgid "log in"
msgstr "" msgstr ""
@ -108,13 +113,13 @@ msgstr ""
msgid "new pipeline" msgid "new pipeline"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:113 #: lib/memex_web/components/topbar.ex:115
#: lib/memex_web/templates/user_confirmation/new.html.heex:28 #: lib/memex_web/templates/user_confirmation/new.html.heex:28
#: lib/memex_web/templates/user_registration/new.html.heex:3 #: 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_registration/new.html.heex:37
#: lib/memex_web/templates/user_reset_password/edit.html.heex:42 #: lib/memex_web/templates/user_reset_password/edit.html.heex:44
#: lib/memex_web/templates/user_reset_password/new.html.heex:28 #: lib/memex_web/templates/user_reset_password/new.html.heex:28
#: lib/memex_web/templates/user_session/new.html.heex:39 #: lib/memex_web/templates/user_session/new.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register" msgid "register"
msgstr "" msgstr ""
@ -141,7 +146,7 @@ msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:47 #: 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_reset_password/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:42 #: lib/memex_web/templates/user_session/new.html.heex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "forgot your password?" msgid "forgot your password?"
msgstr "" msgstr ""
@ -151,12 +156,7 @@ msgstr ""
msgid "send instructions to reset password" msgid "send instructions to reset password"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142 #: lib/memex_web/templates/user_settings/edit.html.heex:148
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "export data as json" msgid "export data as json"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:25
#, elixir-autogen, elixir-format
msgid "copy"
msgstr ""

View File

@ -12,11 +12,35 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.7.4\n" "X-Generator: Translate Toolkit 3.7.4\n"
## This file is a PO Template file.
##
## "msgid"s here are often extracted from source code.
## Add new translations manually only if they're dynamic
## translations that can't be statically extracted.
##
## Run "mix gettext.extract" to bring this file up to
## date. Leave "msgstr"s empty as changing them here has no
## effect: edit them in PO (.po) files instead.
#: lib/memex_web/live/invite_live/index.html.heex:86
#, elixir-autogen, elixir-format
msgid "Admins"
msgstr ""
#: lib/memex_web/controllers/user_confirmation_controller.ex:8 #: lib/memex_web/controllers/user_confirmation_controller.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Confirm your account" msgid "Confirm your account"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21
#, elixir-autogen, elixir-format
msgid "Name"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43 #: lib/memex_web/templates/layout/live.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
@ -27,6 +51,11 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "Uses left"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:19 #: lib/memex_web/live/context_live/show.html.heex:19
#: lib/memex_web/live/note_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/pipeline_live/show.html.heex:27
@ -34,23 +63,22 @@ msgstr ""
msgid "Visibility: %{visibility}" msgid "Visibility: %{visibility}"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:71 #: lib/memex_web/live/home_live.html.heex:76
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "accessible from any internet-capable device" msgid "accessible from any internet-capable device"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:85 #: lib/memex_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "admins:" msgid "admins:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:53 #: lib/memex_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "built with sharing and collaboration in mind" msgid "built with sharing and collaboration in mind"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:20 #: lib/memex_web/templates/user_settings/edit.html.heex:80
#: lib/memex_web/templates/user_settings/edit.html.heex:76
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "confirm new password" msgid "confirm new password"
msgstr "" msgstr ""
@ -68,33 +96,33 @@ msgstr ""
msgid "contexts" msgid "contexts"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:18 #: lib/memex_web/live/home_live.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "contexts:" msgid "contexts:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:68 #: lib/memex_web/live/home_live.html.heex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "convenient:" msgid "convenient:"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31 #: lib/memex_web/templates/user_settings/edit.html.heex:33
#: lib/memex_web/templates/user_settings/edit.html.heex:85 #: lib/memex_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "current password" msgid "current password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58 #: lib/memex_web/live/invite_live/index.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "disable" msgid "disable"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:12 #: lib/memex_web/live/home_live.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "document notes about individual items or concepts" msgid "document notes about individual items or concepts"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:30 #: lib/memex_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "document your processes, attaching contexts to each step" msgid "document your processes, attaching contexts to each step"
msgstr "" msgstr ""
@ -104,51 +132,53 @@ msgstr ""
msgid "edit invite" msgid "edit invite"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20 #: lib/memex_web/templates/user_settings/edit.html.heex:29
#: lib/memex_web/templates/user_reset_password/new.html.heex:12
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "email" msgid "email"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:34 #: lib/memex_web/components/user_card.ex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "email unconfirmed" msgid "email unconfirmed"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58 #: lib/memex_web/live/invite_live/index.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "enable" msgid "enable"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32 #: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123 #: lib/memex_web/templates/user_settings/edit.html.heex:129
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "english" msgid "english"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:45 #: lib/memex_web/live/home_live.html.heex:50
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "features" msgid "features"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:149 #: lib/memex_web/live/home_live.html.heex:135
#, elixir-autogen, elixir-format
msgid "get involved!"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:156
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "help translate" msgid "help translate"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:80 #: lib/memex_web/live/home_live.html.heex:85
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "instance information" msgid "instance information"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:43 #: lib/memex_web/components/invite_card.ex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "invite disabled" msgid "invite disabled"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:105 #: lib/memex_web/live/home_live.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "invite only" msgid "invite only"
msgstr "" msgstr ""
@ -165,7 +195,7 @@ msgstr ""
msgid "log in" msgid "log in"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:50 #: lib/memex_web/live/home_live.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "multi-user:" msgid "multi-user:"
msgstr "" msgstr ""
@ -175,8 +205,7 @@ msgstr ""
msgid "new invite" msgid "new invite"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:16 #: lib/memex_web/templates/user_settings/edit.html.heex:73
#: lib/memex_web/templates/user_settings/edit.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "new password" msgid "new password"
msgstr "" msgstr ""
@ -199,7 +228,7 @@ msgstr ""
msgid "notes" msgid "notes"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:9 #: lib/memex_web/live/home_live.html.heex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "notes:" msgid "notes:"
msgstr "" msgstr ""
@ -212,27 +241,27 @@ msgstr ""
msgid "pipelines" msgid "pipelines"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:27 #: lib/memex_web/live/home_live.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "pipelines:" msgid "pipelines:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:62 #: lib/memex_web/live/home_live.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "privacy controls on a per-note, context or pipeline basis" msgid "privacy controls on a per-note, context or pipeline basis"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:59 #: lib/memex_web/live/home_live.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "privacy:" msgid "privacy:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:21 #: lib/memex_web/live/home_live.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "provide context around a single topic and hotlink to your notes" msgid "provide context around a single topic and hotlink to your notes"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:104 #: lib/memex_web/live/home_live.html.heex:111
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "public signups" msgid "public signups"
msgstr "" msgstr ""
@ -242,12 +271,12 @@ msgstr ""
msgid "register" msgid "register"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:101 #: lib/memex_web/live/home_live.html.heex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "registration:" msgid "registration:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:160 #: lib/memex_web/live/home_live.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "report bugs or request features" msgid "report bugs or request features"
msgstr "" msgstr ""
@ -267,7 +296,7 @@ msgstr ""
msgid "select privacy" msgid "select privacy"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:73 #: lib/memex_web/live/invite_live/index.html.heex:77
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "set unlimited" msgid "set unlimited"
msgstr "" msgstr ""
@ -292,17 +321,17 @@ msgstr ""
msgid "tags" msgid "tags"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:118 #: lib/memex_web/live/invite_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "users" msgid "users"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:111 #: lib/memex_web/live/home_live.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "version:" msgid "version:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:138 #: lib/memex_web/live/home_live.html.heex:145
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "view the source code" msgid "view the source code"
msgstr "" msgstr ""
@ -479,62 +508,62 @@ msgstr ""
msgid "use [[context-slug]] to link to a context" msgid "use [[context-slug]] to link to a context"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65 #: lib/memex_web/live/faq_live.html.heex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:91 #: lib/memex_web/live/faq_live.html.heex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand." msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:105 #: lib/memex_web/live/faq_live.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case." msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:59 #: lib/memex_web/live/faq_live.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy." msgid "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:62 #: lib/memex_web/live/faq_live.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively." msgid "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:90 #: lib/memex_web/live/faq_live.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, contexts should be like single-topic blog posts." msgid "in my opinion, contexts should be like single-topic blog posts."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:76 #: lib/memex_web/live/faq_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life." msgid "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:102 #: lib/memex_web/live/faq_live.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting." msgid "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:28 #: lib/memex_web/live/faq_live.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "memex" msgid "memex"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:48 #: lib/memex_web/live/faq_live.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "org-mode" msgid "org-mode"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:17 #: lib/memex_web/live/faq_live.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "some things that this memex is very loosely inspired by:" msgid "some things that this memex is very loosely inspired by:"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:79 #: lib/memex_web/live/faq_live.html.heex:88
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "spoons? probably not. a particular brand of spoons that you really like? why not :)" msgid "spoons? probably not. a particular brand of spoons that you really like? why not :)"
msgstr "" msgstr ""
@ -544,27 +573,27 @@ msgstr ""
msgid "this is a memex, used to document not just your notes, but also your perspectives and processes." msgid "this is a memex, used to document not just your notes, but also your perspectives and processes."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:87 #: lib/memex_web/live/faq_live.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my contexts be like?" msgid "what should my contexts be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:73 #: lib/memex_web/live/faq_live.html.heex:80
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my notes be like?" msgid "what should my notes be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:99 #: lib/memex_web/live/faq_live.html.heex:110
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my pipelines be like?" msgid "what should my pipelines be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:56 #: lib/memex_web/live/faq_live.html.heex:59
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "why split up into notes, contexts and pipelines?" msgid "why split up into notes, contexts and pipelines?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:38 #: lib/memex_web/live/faq_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "zettelkasten" msgid "zettelkasten"
msgstr "" msgstr ""
@ -579,22 +608,22 @@ msgstr ""
msgid "forgot your password?" msgid "forgot your password?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:113 #: lib/memex_web/live/faq_live.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "how many people should i invite?" msgid "how many people should i invite?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:119 #: lib/memex_web/live/faq_live.html.heex:134
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you." msgid "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:122 #: lib/memex_web/live/faq_live.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)" msgid "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:116 #: lib/memex_web/live/faq_live.html.heex:129
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document." msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
msgstr "" msgstr ""
@ -604,73 +633,32 @@ msgstr ""
msgid "language" msgid "language"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:28 #: lib/memex_web/components/user_card.ex:23
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "user confirmed on%{confirmed_datetime}" msgid "user confirmed on%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:39 #: lib/memex_web/components/user_card.ex:34
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "user registered on%{registered_datetime}" msgid "user registered on%{registered_datetime}"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:38 #: lib/memex_web/components/invite_card.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses left: unlimited" msgid "uses left: unlimited"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:36 #: lib/memex_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "read more on how to use memEx" msgid "read more on how to use memEx"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:33 #: lib/memex_web/components/invite_card.ex:32
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "uses left: %{uses_left_count}" msgid "uses left: %{uses_left_count}"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:53 #: lib/memex_web/components/invite_card.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses: %{uses_count}" msgid "uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:128
#, elixir-autogen, elixir-format, fuzzy
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:12
#, elixir-autogen, elixir-format, fuzzy
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29
#, elixir-autogen, elixir-format
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format, fuzzy
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#, elixir-autogen, elixir-format, fuzzy
msgid "keep me logged in for 60 days"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21
#, elixir-autogen, elixir-format, fuzzy
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format, fuzzy
msgid "password"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25
#, elixir-autogen, elixir-format, fuzzy
msgid "uses left"
msgstr ""

View File

@ -20,6 +20,12 @@ msgstr ""
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:14
#: lib/memex_web/templates/user_settings/edit.html.heex:67
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:63 #: lib/memex_web/controllers/user_reset_password_controller.ex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
@ -73,6 +79,12 @@ msgstr ""
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:23
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! Please check the errors below"
msgstr ""
#: lib/memex/contexts/context.ex:58 #: lib/memex/contexts/context.ex:58
#: lib/memex/contexts/context.ex:71 #: lib/memex/contexts/context.ex:71
#: lib/memex/notes/note.ex:57 #: lib/memex/notes/note.ex:57
@ -111,8 +123,6 @@ msgid "invalid format: only numbers, letters and hyphen are accepted. tags must
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:13 #: 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
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "oops, something went wrong! please check the errors below." msgid "oops, something went wrong! please check the errors below."
msgstr "" msgstr ""
@ -136,9 +146,3 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "unable to delete user" msgid "unable to delete user"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:22
#: lib/memex_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format, fuzzy
msgid "oops, something went wrong! please check the errors below"
msgstr ""

View File

@ -55,32 +55,38 @@ msgstr ""
msgid "Password reset successfully." msgid "Password reset successfully."
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34 #: lib/memex_web/live/invite_live/form_component.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130 #: lib/memex_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?" msgid "are you sure you want to change your language?"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:43 #: lib/memex_web/live/invite_live/index.html.heex:97
#: lib/memex_web/live/invite_live/index.html.heex:125
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to delete the invite for %{invite_name}?" msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149 #: lib/memex_web/templates/user_settings/edit.html.heex:155
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?" msgid "are you sure you want to delete your account?"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:89 #: lib/memex_web/components/topbar.ex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to log out?" msgid "are you sure you want to log out?"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:68 #: lib/memex_web/live/invite_live/index.html.heex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to make %{invite_name} unlimited?" msgid "are you sure you want to make %{invite_name} unlimited?"
msgstr "" msgstr ""
@ -106,7 +112,7 @@ msgstr ""
msgid "language updated successfully." msgid "language updated successfully."
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:90 #: lib/memex_web/live/home_live.html.heex:95
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "register to setup memEx" msgid "register to setup memEx"
msgstr "" msgstr ""
@ -150,9 +156,3 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "your account has been deleted" msgid "your account has been deleted"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:101
#: lib/memex_web/live/invite_live/index.html.heex:129
#, elixir-autogen, elixir-format, fuzzy
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -10,11 +10,26 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:86
#, elixir-autogen, elixir-format
msgid "Admins"
msgstr ""
#: lib/memex_web/controllers/user_confirmation_controller.ex:8 #: lib/memex_web/controllers/user_confirmation_controller.ex:8
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Confirm your account" msgid "Confirm your account"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:25
#, elixir-autogen, elixir-format
msgid "Keep me logged in for 60 days"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21
#, elixir-autogen, elixir-format
msgid "Name"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43 #: lib/memex_web/templates/layout/live.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
@ -25,6 +40,11 @@ msgstr ""
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "Uses left"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:19 #: lib/memex_web/live/context_live/show.html.heex:19
#: lib/memex_web/live/note_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/pipeline_live/show.html.heex:27
@ -32,23 +52,22 @@ msgstr ""
msgid "Visibility: %{visibility}" msgid "Visibility: %{visibility}"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:71 #: lib/memex_web/live/home_live.html.heex:76
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "accessible from any internet-capable device" msgid "accessible from any internet-capable device"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:85 #: lib/memex_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "admins:" msgid "admins:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:53 #: lib/memex_web/live/home_live.html.heex:58
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "built with sharing and collaboration in mind" msgid "built with sharing and collaboration in mind"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:20 #: lib/memex_web/templates/user_settings/edit.html.heex:80
#: lib/memex_web/templates/user_settings/edit.html.heex:76
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "confirm new password" msgid "confirm new password"
msgstr "" msgstr ""
@ -66,33 +85,33 @@ msgstr ""
msgid "contexts" msgid "contexts"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:18 #: lib/memex_web/live/home_live.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "contexts:" msgid "contexts:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:68 #: lib/memex_web/live/home_live.html.heex:73
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "convenient:" msgid "convenient:"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31 #: lib/memex_web/templates/user_settings/edit.html.heex:33
#: lib/memex_web/templates/user_settings/edit.html.heex:85 #: lib/memex_web/templates/user_settings/edit.html.heex:89
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "current password" msgid "current password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58 #: lib/memex_web/live/invite_live/index.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "disable" msgid "disable"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:12 #: lib/memex_web/live/home_live.html.heex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "document notes about individual items or concepts" msgid "document notes about individual items or concepts"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:30 #: lib/memex_web/live/home_live.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "document your processes, attaching contexts to each step" msgid "document your processes, attaching contexts to each step"
msgstr "" msgstr ""
@ -102,51 +121,53 @@ msgstr ""
msgid "edit invite" msgid "edit invite"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20 #: lib/memex_web/templates/user_settings/edit.html.heex:29
#: lib/memex_web/templates/user_reset_password/new.html.heex:12
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "email" msgid "email"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:34 #: lib/memex_web/components/user_card.ex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "email unconfirmed" msgid "email unconfirmed"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58 #: lib/memex_web/live/invite_live/index.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "enable" msgid "enable"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32 #: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123 #: lib/memex_web/templates/user_settings/edit.html.heex:129
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "english" msgid "english"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:45 #: lib/memex_web/live/home_live.html.heex:50
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "features" msgid "features"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:149 #: lib/memex_web/live/home_live.html.heex:135
#, elixir-autogen, elixir-format
msgid "get involved!"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:156
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "help translate" msgid "help translate"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:80 #: lib/memex_web/live/home_live.html.heex:85
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "instance information" msgid "instance information"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:43 #: lib/memex_web/components/invite_card.ex:42
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "invite disabled" msgid "invite disabled"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:105 #: lib/memex_web/live/home_live.html.heex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "invite only" msgid "invite only"
msgstr "" msgstr ""
@ -163,7 +184,7 @@ msgstr ""
msgid "log in" msgid "log in"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:50 #: lib/memex_web/live/home_live.html.heex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "multi-user:" msgid "multi-user:"
msgstr "" msgstr ""
@ -173,8 +194,7 @@ msgstr ""
msgid "new invite" msgid "new invite"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:16 #: lib/memex_web/templates/user_settings/edit.html.heex:73
#: lib/memex_web/templates/user_settings/edit.html.heex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "new password" msgid "new password"
msgstr "" msgstr ""
@ -197,7 +217,7 @@ msgstr ""
msgid "notes" msgid "notes"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:9 #: lib/memex_web/live/home_live.html.heex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "notes:" msgid "notes:"
msgstr "" msgstr ""
@ -210,27 +230,27 @@ msgstr ""
msgid "pipelines" msgid "pipelines"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:27 #: lib/memex_web/live/home_live.html.heex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "pipelines:" msgid "pipelines:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:62 #: lib/memex_web/live/home_live.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "privacy controls on a per-note, context or pipeline basis" msgid "privacy controls on a per-note, context or pipeline basis"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:59 #: lib/memex_web/live/home_live.html.heex:64
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "privacy:" msgid "privacy:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:21 #: lib/memex_web/live/home_live.html.heex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "provide context around a single topic and hotlink to your notes" msgid "provide context around a single topic and hotlink to your notes"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:104 #: lib/memex_web/live/home_live.html.heex:111
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "public signups" msgid "public signups"
msgstr "" msgstr ""
@ -240,12 +260,12 @@ msgstr ""
msgid "register" msgid "register"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:101 #: lib/memex_web/live/home_live.html.heex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "registration:" msgid "registration:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:160 #: lib/memex_web/live/home_live.html.heex:167
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "report bugs or request features" msgid "report bugs or request features"
msgstr "" msgstr ""
@ -265,7 +285,7 @@ msgstr ""
msgid "select privacy" msgid "select privacy"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:73 #: lib/memex_web/live/invite_live/index.html.heex:77
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "set unlimited" msgid "set unlimited"
msgstr "" msgstr ""
@ -290,17 +310,17 @@ msgstr ""
msgid "tags" msgid "tags"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:118 #: lib/memex_web/live/invite_live/index.html.heex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "users" msgid "users"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:111 #: lib/memex_web/live/home_live.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "version:" msgid "version:"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:138 #: lib/memex_web/live/home_live.html.heex:145
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "view the source code" msgid "view the source code"
msgstr "" msgstr ""
@ -477,62 +497,62 @@ msgstr ""
msgid "use [[context-slug]] to link to a context" msgid "use [[context-slug]] to link to a context"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65 #: lib/memex_web/live/faq_live.html.heex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:91 #: lib/memex_web/live/faq_live.html.heex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand." msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:105 #: lib/memex_web/live/faq_live.html.heex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case." msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:59 #: lib/memex_web/live/faq_live.html.heex:62
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy." msgid "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:62 #: lib/memex_web/live/faq_live.html.heex:67
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively." msgid "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:90 #: lib/memex_web/live/faq_live.html.heex:99
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, contexts should be like single-topic blog posts." msgid "in my opinion, contexts should be like single-topic blog posts."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:76 #: lib/memex_web/live/faq_live.html.heex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life." msgid "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:102 #: lib/memex_web/live/faq_live.html.heex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting." msgid "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:28 #: lib/memex_web/live/faq_live.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "memex" msgid "memex"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:48 #: lib/memex_web/live/faq_live.html.heex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "org-mode" msgid "org-mode"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:17 #: lib/memex_web/live/faq_live.html.heex:20
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "some things that this memex is very loosely inspired by:" msgid "some things that this memex is very loosely inspired by:"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:79 #: lib/memex_web/live/faq_live.html.heex:88
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "spoons? probably not. a particular brand of spoons that you really like? why not :)" msgid "spoons? probably not. a particular brand of spoons that you really like? why not :)"
msgstr "" msgstr ""
@ -542,27 +562,27 @@ msgstr ""
msgid "this is a memex, used to document not just your notes, but also your perspectives and processes." msgid "this is a memex, used to document not just your notes, but also your perspectives and processes."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:87 #: lib/memex_web/live/faq_live.html.heex:96
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my contexts be like?" msgid "what should my contexts be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:73 #: lib/memex_web/live/faq_live.html.heex:80
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my notes be like?" msgid "what should my notes be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:99 #: lib/memex_web/live/faq_live.html.heex:110
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "what should my pipelines be like?" msgid "what should my pipelines be like?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:56 #: lib/memex_web/live/faq_live.html.heex:59
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "why split up into notes, contexts and pipelines?" msgid "why split up into notes, contexts and pipelines?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:38 #: lib/memex_web/live/faq_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "zettelkasten" msgid "zettelkasten"
msgstr "" msgstr ""
@ -577,22 +597,22 @@ msgstr ""
msgid "forgot your password?" msgid "forgot your password?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:113 #: lib/memex_web/live/faq_live.html.heex:126
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "how many people should i invite?" msgid "how many people should i invite?"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:119 #: lib/memex_web/live/faq_live.html.heex:134
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you." msgid "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:122 #: lib/memex_web/live/faq_live.html.heex:139
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)" msgid "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)"
msgstr "" msgstr ""
#: lib/memex_web/live/faq_live.html.heex:116 #: lib/memex_web/live/faq_live.html.heex:129
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document." msgid "while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
msgstr "" msgstr ""
@ -602,73 +622,32 @@ msgstr ""
msgid "language" msgid "language"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:28 #: lib/memex_web/components/user_card.ex:23
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "user confirmed on%{confirmed_datetime}" msgid "user confirmed on%{confirmed_datetime}"
msgstr "" msgstr ""
#: lib/memex_web/components/user_card.ex:39 #: lib/memex_web/components/user_card.ex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "user registered on%{registered_datetime}" msgid "user registered on%{registered_datetime}"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:38 #: lib/memex_web/components/invite_card.ex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses left: unlimited" msgid "uses left: unlimited"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:36 #: lib/memex_web/live/home_live.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "read more on how to use memEx" msgid "read more on how to use memEx"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:33 #: lib/memex_web/components/invite_card.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses left: %{uses_left_count}" msgid "uses left: %{uses_left_count}"
msgstr "" msgstr ""
#: lib/memex_web/components/invite_card.ex:53 #: lib/memex_web/components/invite_card.ex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses: %{uses_count}" msgid "uses: %{uses_count}"
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:128
#, elixir-autogen, elixir-format
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:12
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29
#, elixir-autogen, elixir-format
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "keep me logged in for 60 days"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21
#, elixir-autogen, elixir-format
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "password"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "uses left"
msgstr ""

View File

@ -1,163 +0,0 @@
## "msgid"s in this file come from POT (.pot) files.
###
### Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file
### (with the same domain).
###
### Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files.
msgid ""
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:15
#, 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
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:32
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:15
#: lib/memex_web/templates/user_settings/edit.html.heex:43
#, elixir-autogen, elixir-format
msgid "change email"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:111
#: lib/memex_web/templates/user_settings/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
#, elixir-autogen, elixir-format
msgid "change password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:82
#, elixir-autogen, elixir-format
msgid "create invite"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:48
#: lib/memex_web/live/context_live/show.html.heex:41
#: lib/memex_web/live/note_live/index.html.heex:48
#: lib/memex_web/live/note_live/show.html.heex:41
#: lib/memex_web/live/pipeline_live/index.html.heex:48
#: lib/memex_web/live/pipeline_live/show.html.heex:49
#: lib/memex_web/live/pipeline_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "delete"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:151
#, elixir-autogen, elixir-format
msgid "delete user"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:38
#: lib/memex_web/live/context_live/show.html.heex:31
#: lib/memex_web/live/note_live/index.html.heex:38
#: lib/memex_web/live/note_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/index.html.heex:38
#: lib/memex_web/live/pipeline_live/show.html.heex:39
#: lib/memex_web/live/pipeline_live/show.html.heex:107
#, elixir-autogen, elixir-format
msgid "edit"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:12
#, elixir-autogen, elixir-format
msgid "invite someone new!"
msgstr ""
#: lib/memex_web/components/topbar.ex:122
#: lib/memex_web/templates/user_confirmation/new.html.heex:31
#: 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:31
#: lib/memex_web/templates/user_session/new.html.heex:3
#: lib/memex_web/templates/user_session/new.html.heex:28
#, elixir-autogen, elixir-format
msgid "log in"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new context"
msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new note"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:59
#, elixir-autogen, elixir-format
msgid "new pipeline"
msgstr ""
#: lib/memex_web/components/topbar.ex:113
#: lib/memex_web/templates/user_confirmation/new.html.heex:28
#: 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:28
#: lib/memex_web/templates/user_session/new.html.heex:39
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:40
#: lib/memex_web/live/note_live/form_component.html.heex:40
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40
#: lib/memex_web/live/step_live/form_component.html.heex:28
#, elixir-autogen, elixir-format
msgid "save"
msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:24
#: lib/memex_web/live/note_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/show.html.heex:32
#, elixir-autogen, elixir-format
msgid "back"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:134
#, 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
#, elixir-autogen, elixir-format
msgid "forgot your password?"
msgstr ""
#: lib/memex_web/templates/user_reset_password/new.html.heex:15
#, elixir-autogen, elixir-format
msgid "send instructions to reset password"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:142
#, elixir-autogen, elixir-format
msgid "export data as json"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:25
#, elixir-autogen, elixir-format
msgid "copy"
msgstr ""

View File

@ -1,675 +0,0 @@
## "msgid"s in this file come from POT (.pot) files.
###
### Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file
### (with the same domain).
###
### Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files.
msgid ""
msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/controllers/user_confirmation_controller.ex:8
#, elixir-autogen, elixir-format
msgid "Confirm your account"
msgstr ""
#: lib/memex_web/templates/layout/live.html.heex:43
#, elixir-autogen, elixir-format
msgid "Reconnecting..."
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:36
#, elixir-autogen, elixir-format
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
#, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:71
#, elixir-autogen, elixir-format
msgid "accessible from any internet-capable device"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:85
#, elixir-autogen, elixir-format
msgid "admins:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:53
#, elixir-autogen, elixir-format
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
#, elixir-autogen, elixir-format
msgid "confirm new password"
msgstr ""
#: lib/memex_web/live/note_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "content"
msgstr ""
#: lib/memex_web/components/topbar.ex:52
#: 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
#, elixir-autogen, elixir-format
msgid "contexts"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:18
#, elixir-autogen, elixir-format
msgid "contexts:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:68
#, elixir-autogen, elixir-format
msgid "convenient:"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:31
#: lib/memex_web/templates/user_settings/edit.html.heex:85
#, elixir-autogen, elixir-format
msgid "current password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format
msgid "disable"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:12
#, elixir-autogen, elixir-format
msgid "document notes about individual items or concepts"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:30
#, elixir-autogen, elixir-format
msgid "document your processes, attaching contexts to each step"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:34
#, elixir-autogen, elixir-format
msgid "edit invite"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:20
#: lib/memex_web/templates/user_reset_password/new.html.heex:12
#: lib/memex_web/templates/user_session/new.html.heex:17
#: lib/memex_web/templates/user_settings/edit.html.heex:27
#, elixir-autogen, elixir-format
msgid "email"
msgstr ""
#: lib/memex_web/components/user_card.ex:34
#, elixir-autogen, elixir-format
msgid "email unconfirmed"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:58
#, elixir-autogen, elixir-format
msgid "enable"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:32
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "english"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:45
#, elixir-autogen, elixir-format
msgid "features"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:149
#, elixir-autogen, elixir-format
msgid "help translate"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:80
#, elixir-autogen, elixir-format
msgid "instance information"
msgstr ""
#: lib/memex_web/components/invite_card.ex:43
#, elixir-autogen, elixir-format
msgid "invite disabled"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:105
#, elixir-autogen, elixir-format
msgid "invite only"
msgstr ""
#: lib/memex_web/components/topbar.ex:73
#: lib/memex_web/live/invite_live/index.ex:42
#: lib/memex_web/live/invite_live/index.html.heex:3
#, elixir-autogen, elixir-format
msgid "invites"
msgstr ""
#: lib/memex_web/controllers/user_session_controller.ex:8
#, elixir-autogen, elixir-format
msgid "log in"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:50
#, elixir-autogen, elixir-format
msgid "multi-user:"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:38
#, elixir-autogen, elixir-format
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
#, elixir-autogen, elixir-format
msgid "new password"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:8
#, elixir-autogen, elixir-format
msgid "no invites 😔"
msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:23
#, elixir-autogen, elixir-format
msgid "no notes found"
msgstr ""
#: lib/memex_web/components/topbar.ex:43
#: 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
#, elixir-autogen, elixir-format
msgid "notes"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:9
#, elixir-autogen, elixir-format
msgid "notes:"
msgstr ""
#: lib/memex_web/components/topbar.ex:61
#: 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
#, elixir-autogen, elixir-format
msgid "pipelines"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:27
#, elixir-autogen, elixir-format
msgid "pipelines:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:62
#, elixir-autogen, elixir-format
msgid "privacy controls on a per-note, context or pipeline basis"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:59
#, elixir-autogen, elixir-format
msgid "privacy:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:21
#, elixir-autogen, elixir-format
msgid "provide context around a single topic and hotlink to your notes"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:104
#, elixir-autogen, elixir-format
msgid "public signups"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format
msgid "register"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:101
#, elixir-autogen, elixir-format
msgid "registration:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:160
#, elixir-autogen, elixir-format
msgid "report bugs or request features"
msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:41
#: lib/memex_web/live/note_live/form_component.html.heex:41
#: lib/memex_web/live/pipeline_live/form_component.html.heex:41
#: lib/memex_web/live/step_live/form_component.html.heex:29
#, elixir-autogen, elixir-format
msgid "saving..."
msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:37
#: lib/memex_web/live/note_live/form_component.html.heex:37
#: lib/memex_web/live/pipeline_live/form_component.html.heex:37
#, elixir-autogen, elixir-format
msgid "select privacy"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:73
#, elixir-autogen, elixir-format
msgid "set unlimited"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:10
#: lib/memex_web/templates/user_settings/edit.html.heex:3
#, elixir-autogen, elixir-format
msgid "settings"
msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:30
#: lib/memex_web/live/note_live/form_component.html.heex:30
#: lib/memex_web/live/pipeline_live/form_component.html.heex:30
#, elixir-autogen, elixir-format
msgid "tag1,tag2"
msgstr ""
#: lib/memex_web/components/contexts_table_component.ex:48
#: lib/memex_web/components/notes_table_component.ex:48
#: lib/memex_web/components/pipelines_table_component.ex:49
#, elixir-autogen, elixir-format
msgid "tags"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:118
#, elixir-autogen, elixir-format
msgid "users"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:111
#, elixir-autogen, elixir-format
msgid "version:"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:138
#, elixir-autogen, elixir-format
msgid "view the source code"
msgstr ""
#: lib/memex_web/components/contexts_table_component.ex:49
#: lib/memex_web/components/notes_table_component.ex:49
#: lib/memex_web/components/pipelines_table_component.ex:50
#, elixir-autogen, elixir-format
msgid "visibility"
msgstr ""
#: lib/memex_web/live/note_live/index.ex:29
#, elixir-autogen, elixir-format
msgid "new note"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:17
#: lib/memex_web/live/note_live/index.html.heex:17
#: lib/memex_web/live/pipeline_live/index.html.heex:17
#, elixir-autogen, elixir-format
msgid "search"
msgstr ""
#: lib/memex_web/live/context_live/index.ex:29
#, elixir-autogen, elixir-format
msgid "new context"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:23
#, elixir-autogen, elixir-format
msgid "no contexts found"
msgstr ""
#: lib/memex_web/components/pipelines_table_component.ex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "description"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.ex:29
#, elixir-autogen, elixir-format
msgid "new pipeline"
msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:23
#, elixir-autogen, elixir-format
msgid "no pipelines found"
msgstr ""
#: lib/memex_web/live/context_live/form_component.ex:61
#: lib/memex_web/live/note_live/form_component.ex:60
#: lib/memex_web/live/pipeline_live/form_component.ex:65
#, elixir-autogen, elixir-format
msgid "%{slug} created"
msgstr ""
#: lib/memex_web/live/context_live/index.ex:57
#: lib/memex_web/live/context_live/show.ex:41
#: lib/memex_web/live/note_live/index.ex:57
#: lib/memex_web/live/note_live/show.ex:41
#: lib/memex_web/live/pipeline_live/index.ex:57
#: lib/memex_web/live/pipeline_live/show.ex:77
#, elixir-autogen, elixir-format
msgid "%{slug} deleted"
msgstr ""
#: lib/memex_web/live/context_live/form_component.ex:44
#: lib/memex_web/live/note_live/form_component.ex:43
#: lib/memex_web/live/pipeline_live/form_component.ex:48
#, elixir-autogen, elixir-format
msgid "%{slug} saved"
msgstr ""
#: lib/memex_web/live/context_live/index.ex:23
#: lib/memex_web/live/context_live/show.ex:48
#: lib/memex_web/live/note_live/index.ex:23
#: lib/memex_web/live/note_live/show.ex:48
#: lib/memex_web/live/pipeline_live/index.ex:23
#: lib/memex_web/live/pipeline_live/show.ex:125
#, elixir-autogen, elixir-format
msgid "edit %{slug}"
msgstr ""
#: lib/memex_web/components/contexts_table_component.ex:47
#: lib/memex_web/components/notes_table_component.ex:47
#: lib/memex_web/components/pipelines_table_component.ex:47
#: lib/memex_web/live/context_live/form_component.html.heex:14
#: lib/memex_web/live/note_live/form_component.html.heex:14
#: lib/memex_web/live/pipeline_live/form_component.html.heex:14
#, elixir-autogen, elixir-format
msgid "slug"
msgstr ""
#: lib/memex_web/live/context_live/show.ex:19
#: lib/memex_web/live/note_live/show.ex:19
#: lib/memex_web/live/pipeline_live/show.ex:20
#, elixir-autogen, elixir-format
msgid "%{slug} could not be found"
msgstr ""
#: lib/memex_web/live/home_live.ex:15
#, elixir-autogen, elixir-format
msgid "home"
msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "use [[note-slug]] to link to a note"
msgstr ""
#: lib/memex_web/live/faq_live.ex:10
#: lib/memex_web/live/faq_live.html.heex:3
#, elixir-autogen, elixir-format
msgid "faq"
msgstr ""
#: lib/memex_web/components/topbar.ex:23
#: 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:15
#, elixir-autogen, elixir-format
msgid "memEx"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:11
#, elixir-autogen, elixir-format
msgid "what is this?"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:67
#, elixir-autogen, elixir-format
msgid "%{position}. %{title}"
msgstr ""
#: lib/memex_web/live/step_live/form_component.ex:67
#, elixir-autogen, elixir-format
msgid "%{title} created"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:96
#, elixir-autogen, elixir-format
msgid "%{title} deleted"
msgstr ""
#: lib/memex_web/live/step_live/form_component.ex:43
#, elixir-autogen, elixir-format
msgid "%{title} saved"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.ex:127
#, elixir-autogen, elixir-format
msgid "add step to %{slug}"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:61
#, elixir-autogen, elixir-format
msgid "no steps"
msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "steps:"
msgstr ""
#: lib/memex_web/live/step_live/form_component.html.heex:14
#, elixir-autogen, elixir-format
msgid "title"
msgstr ""
#: lib/memex_web/live/step_live/form_component.html.heex:23
#, elixir-autogen, elixir-format
msgid "use [[context-slug]] to link to a context"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65
#, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:91
#, elixir-autogen, elixir-format
msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:105
#, elixir-autogen, elixir-format
msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:59
#, elixir-autogen, elixir-format
msgid "i really admired the idea of a zettelkasten, especially with org-mode backlinks, however I felt like my notes would immediately become too messy by just putting everything into a single hierarchy."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:62
#, elixir-autogen, elixir-format
msgid "i wanted to separate between a personal dictionary of concepts and then my thought processes that are built off of my experiences and life lessons. these are notes, and contexts, respectively."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:90
#, elixir-autogen, elixir-format
msgid "in my opinion, contexts should be like single-topic blog posts."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:76
#, elixir-autogen, elixir-format
msgid "in my opinion, notes should be written by any of the discrete objects or concepts that are meaningful to you in your life."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:102
#, elixir-autogen, elixir-format
msgid "in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:28
#, elixir-autogen, elixir-format
msgid "memex"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:48
#, elixir-autogen, elixir-format
msgid "org-mode"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:17
#, elixir-autogen, elixir-format
msgid "some things that this memex is very loosely inspired by:"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:79
#, elixir-autogen, elixir-format
msgid "spoons? probably not. a particular brand of spoons that you really like? why not :)"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:14
#, elixir-autogen, elixir-format
msgid "this is a memex, used to document not just your notes, but also your perspectives and processes."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:87
#, elixir-autogen, elixir-format
msgid "what should my contexts be like?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:73
#, elixir-autogen, elixir-format
msgid "what should my notes be like?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:99
#, elixir-autogen, elixir-format
msgid "what should my pipelines be like?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:56
#, elixir-autogen, elixir-format
msgid "why split up into notes, contexts and pipelines?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:38
#, elixir-autogen, elixir-format
msgid "zettelkasten"
msgstr ""
#: lib/memex_web/views/layout_view.ex:11
#, elixir-autogen, elixir-format
msgid "memEx | %{title}"
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:9
#, elixir-autogen, elixir-format
msgid "forgot your password?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:113
#, elixir-autogen, elixir-format
msgid "how many people should i invite?"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:119
#, elixir-autogen, elixir-format
msgid "note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:122
#, elixir-autogen, elixir-format
msgid "so, i'd recommend inviting anyone you'd like to work on your collective memEx. however, when in doubt, hopefully setting up a new instance is easy enough. if it isn't, then feel free to let me know :)"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:116
#, elixir-autogen, elixir-format
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
#, elixir-autogen, elixir-format
msgid "language"
msgstr ""
#: lib/memex_web/components/user_card.ex:28
#, elixir-autogen, elixir-format
msgid "user confirmed on%{confirmed_datetime}"
msgstr ""
#: lib/memex_web/components/user_card.ex:39
#, elixir-autogen, elixir-format
msgid "user registered on%{registered_datetime}"
msgstr ""
#: lib/memex_web/components/invite_card.ex:38
#, elixir-autogen, elixir-format
msgid "uses left: unlimited"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:36
#, elixir-autogen, elixir-format
msgid "read more on how to use memEx"
msgstr ""
#: lib/memex_web/components/invite_card.ex:33
#, elixir-autogen, elixir-format
msgid "uses left: %{uses_left_count}"
msgstr ""
#: lib/memex_web/components/invite_card.ex:53
#, elixir-autogen, elixir-format
msgid "uses: %{uses_count}"
msgstr ""
#: lib/memex_web/live/home_live.html.heex:128
#, elixir-autogen, elixir-format
msgid "get involved"
msgstr ""
#: lib/memex_web/templates/user_confirmation/new.html.heex:12
#, elixir-autogen, elixir-format
msgid "Email"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29
#, elixir-autogen, elixir-format
msgid "Leave \"Uses left\" blank to make invite unlimited"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:90
#, elixir-autogen, elixir-format
msgid "admins"
msgstr ""
#: lib/memex_web/templates/user_session/new.html.heex:23
#, elixir-autogen, elixir-format
msgid "keep me logged in for 60 days"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21
#, elixir-autogen, elixir-format
msgid "name"
msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:24
#: lib/memex_web/templates/user_session/new.html.heex:20
#, elixir-autogen, elixir-format
msgid "password"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "uses left"
msgstr ""

View File

@ -1,93 +0,0 @@
## "msgid"s in this file come from POT (.pot) files.
###
### Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file
### (with the same domain).
###
### Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files.
msgid ""
msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex/accounts/email.ex:30
#, 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
#, elixir-autogen, elixir-format
msgid "Hi %{email},"
msgstr ""
#: lib/memex_web/templates/email/confirm_email.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
#, elixir-autogen, elixir-format
msgid "If you didn't request this change from %{url}, please ignore this."
msgstr ""
#: lib/memex/accounts/email.ex:37
#, elixir-autogen, elixir-format
msgid "Reset your Memex password"
msgstr ""
#: lib/memex/accounts/email.ex:44
#, 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
#, 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
#, 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
#, 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
#, elixir-autogen, elixir-format
msgid "This email was sent from memEx"
msgstr ""
#: lib/memex_web/templates/layout/email.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
#, 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
#, 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
#, elixir-autogen, elixir-format
msgid "Welcome to memEx"
msgstr ""

View File

@ -1,145 +0,0 @@
## "msgid"s in this file come from POT (.pot) files.
###
### Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file
### (with the same domain).
###
### Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files.
msgid ""
msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/templates/error/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Error"
msgstr ""
#: lib/memex_web/controllers/user_session_controller.ex:17
#, elixir-autogen, elixir-format
msgid "Invalid email or password"
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:63
#, elixir-autogen, elixir-format
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
#, 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
#, elixir-autogen, elixir-format
msgid "Sorry, this invite was not found or expired"
msgstr ""
#: lib/memex_web/controllers/user_confirmation_controller.ex:54
#, elixir-autogen, elixir-format
msgid "User confirmation link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_auth.ex:177
#, 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
#, elixir-autogen, elixir-format
msgid "You must confirm your account and log in to access this page."
msgstr ""
#: lib/memex/accounts/user.ex:144
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr ""
#: lib/memex/accounts/user.ex:165
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr ""
#: lib/memex/accounts/user.ex:202
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr ""
#: lib/memex/accounts/user.ex:99
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr ""
#: 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:28
#, elixir-autogen, elixir-format
msgid "go back home"
msgstr ""
#: lib/memex_web/views/error_view.ex:11
#, elixir-autogen, elixir-format
msgid "internal server error"
msgstr ""
#: lib/memex_web/views/error_view.ex:9
#, elixir-autogen, elixir-format
msgid "not found"
msgstr ""
#: lib/memex_web/views/error_view.ex:10
#, elixir-autogen, elixir-format
msgid "unauthorized"
msgstr ""
#: 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
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format
msgid "sorry, this invite was not found or expired"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:19
#, elixir-autogen, elixir-format
msgid "you are not authorized to view this page"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:84
#, elixir-autogen, elixir-format
msgid "email change link is invalid or it has expired."
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:99
#, elixir-autogen, elixir-format
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
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below"
msgstr ""

View File

@ -1,159 +0,0 @@
## "msgid"s in this file come from POT (.pot) files.
###
### Do not add, change, or remove "msgid"s manually here as
### they're tied to the ones in the corresponding POT file
### (with the same domain).
###
### Use "mix gettext.extract --merge" or "mix gettext.merge"
### to merge POT files into PO files.
msgid ""
msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/controllers/user_confirmation_controller.ex:38
#, elixir-autogen, elixir-format
msgid "%{email} confirmed successfully."
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:54
#, elixir-autogen, elixir-format
msgid "%{invite_name} deleted succesfully"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:115
#, elixir-autogen, elixir-format
msgid "%{invite_name} disabled succesfully"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:91
#, elixir-autogen, elixir-format
msgid "%{invite_name} enabled succesfully"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:69
#, elixir-autogen, elixir-format
msgid "%{invite_name} updated succesfully"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:140
#, elixir-autogen, elixir-format
msgid "%{user_email} deleted succesfully"
msgstr ""
#: lib/memex_web/controllers/user_confirmation_controller.ex:23
#, elixir-autogen, elixir-format
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:24
#, elixir-autogen, elixir-format
msgid "If your email is in our system, you will receive instructions to reset your password shortly."
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:46
#, elixir-autogen, elixir-format
msgid "Password reset successfully."
msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130
#, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:43
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?"
msgstr ""
#: lib/memex_web/components/topbar.ex:89
#, elixir-autogen, elixir-format
msgid "are you sure you want to log out?"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:68
#, elixir-autogen, elixir-format
msgid "are you sure you want to make %{invite_name} unlimited?"
msgstr ""
#: lib/memex_web/live/context_live/index.html.heex:45
#: lib/memex_web/live/context_live/show.html.heex:38
#: lib/memex_web/live/note_live/index.html.heex:45
#: lib/memex_web/live/note_live/show.html.heex:38
#: lib/memex_web/live/pipeline_live/index.html.heex:45
#: lib/memex_web/live/pipeline_live/show.html.heex:46
#: lib/memex_web/live/pipeline_live/show.html.heex:115
#, elixir-autogen, elixir-format
msgid "are you sure?"
msgstr ""
#: lib/memex_web/controllers/user_session_controller.ex:23
#, elixir-autogen, elixir-format
msgid "logged out successfully."
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:65
#, elixir-autogen, elixir-format
msgid "language updated successfully."
msgstr ""
#: lib/memex_web/live/home_live.html.heex:90
#, elixir-autogen, elixir-format
msgid "register to setup memEx"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.ex:80
#, elixir-autogen, elixir-format
msgid "%{name} created successfully"
msgstr ""
#: lib/memex_web/live/invite_live/form_component.ex:62
#, elixir-autogen, elixir-format
msgid "%{name} updated successfully"
msgstr ""
#: lib/memex_web/live/invite_live/index.ex:128
#, elixir-autogen, elixir-format
msgid "copied to clipboard"
msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format
msgid "please check your email to verify your account"
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:29
#, elixir-autogen, elixir-format
msgid "a link to confirm your email change has been sent to the new address."
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:77
#, elixir-autogen, elixir-format
msgid "email changed successfully."
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:49
#, elixir-autogen, elixir-format
msgid "password updated successfully."
msgstr ""
#: lib/memex_web/controllers/user_settings_controller.ex:95
#, elixir-autogen, elixir-format
msgid "your account has been deleted"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:101
#: lib/memex_web/live/invite_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -20,6 +20,12 @@ msgstr ""
msgid "Invalid email or password" msgid "Invalid email or password"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_reset_password/edit.html.heex:14
#: lib/memex_web/templates/user_settings/edit.html.heex:67
#, elixir-autogen, elixir-format
msgid "Oops, something went wrong! Please check the errors below."
msgstr ""
#: lib/memex_web/controllers/user_reset_password_controller.ex:63 #: lib/memex_web/controllers/user_reset_password_controller.ex:63
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reset password link is invalid or it has expired." msgid "Reset password link is invalid or it has expired."
@ -73,6 +79,12 @@ msgstr ""
msgid "must have the @ sign and no spaces" msgid "must have the @ sign and no spaces"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:23
#: lib/memex_web/templates/user_settings/edit.html.heex:123
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! Please check the errors below"
msgstr ""
#: lib/memex/contexts/context.ex:58 #: lib/memex/contexts/context.ex:58
#: lib/memex/contexts/context.ex:71 #: lib/memex/contexts/context.ex:71
#: lib/memex/notes/note.ex:57 #: lib/memex/notes/note.ex:57
@ -111,8 +123,6 @@ msgid "invalid format: only numbers, letters and hyphen are accepted. tags must
msgstr "" msgstr ""
#: lib/memex_web/templates/user_registration/new.html.heex:13 #: 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
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below." msgid "oops, something went wrong! please check the errors below."
msgstr "" msgstr ""
@ -136,9 +146,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "unable to delete user" msgid "unable to delete user"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:22
#: lib/memex_web/templates/user_settings/edit.html.heex:118
#, elixir-autogen, elixir-format
msgid "oops, something went wrong! please check the errors below"
msgstr ""

View File

@ -55,32 +55,38 @@ msgstr ""
msgid "Password reset successfully." msgid "Password reset successfully."
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34 #: lib/memex_web/live/invite_live/form_component.html.heex:31
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:130 #: lib/memex_web/templates/user_settings/edit.html.heex:136
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to change your language?" msgid "are you sure you want to change your language?"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:43 #: lib/memex_web/live/invite_live/index.html.heex:97
#: lib/memex_web/live/invite_live/index.html.heex:125
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? This action is permanent!"
msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:47
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to delete the invite for %{invite_name}?" msgid "are you sure you want to delete the invite for %{invite_name}?"
msgstr "" msgstr ""
#: lib/memex_web/templates/user_settings/edit.html.heex:149 #: lib/memex_web/templates/user_settings/edit.html.heex:155
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to delete your account?" msgid "are you sure you want to delete your account?"
msgstr "" msgstr ""
#: lib/memex_web/components/topbar.ex:89 #: lib/memex_web/components/topbar.ex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to log out?" msgid "are you sure you want to log out?"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:68 #: lib/memex_web/live/invite_live/index.html.heex:72
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure you want to make %{invite_name} unlimited?" msgid "are you sure you want to make %{invite_name} unlimited?"
msgstr "" msgstr ""
@ -106,7 +112,7 @@ msgstr ""
msgid "language updated successfully." msgid "language updated successfully."
msgstr "" msgstr ""
#: lib/memex_web/live/home_live.html.heex:90 #: lib/memex_web/live/home_live.html.heex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register to setup memEx" msgid "register to setup memEx"
msgstr "" msgstr ""
@ -150,9 +156,3 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "your account has been deleted" msgid "your account has been deleted"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/index.html.heex:101
#: lib/memex_web/live/invite_live/index.html.heex:129
#, elixir-autogen, elixir-format
msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr ""

View File

@ -1,176 +0,0 @@
defmodule Memex.InvitesTest do
@moduledoc """
This module tests the Memex.Accounts.Invites context
"""
use Memex.DataCase
alias Ecto.Changeset
alias Memex.Accounts
alias Memex.Accounts.{Invite, Invites}
@moduletag :invites_test
@valid_attrs %{
"name" => "some name"
}
@invalid_attrs %{
"name" => nil,
"token" => nil
}
describe "invites" do
setup do
current_user = admin_fixture()
{:ok, invite} = Invites.create_invite(current_user, @valid_attrs)
[invite: invite, current_user: current_user]
end
test "list_invites/0 returns all invites", %{invite: invite, current_user: current_user} do
assert Invites.list_invites(current_user) == [invite]
end
test "get_invite!/1 returns the invite with given id",
%{invite: invite, current_user: current_user} do
assert Invites.get_invite!(invite.id, current_user) == invite
end
test "valid_invite_token? returns for valid and invalid invite tokens",
%{invite: %{token: token}} do
refute Invites.valid_invite_token?(nil)
refute Invites.valid_invite_token?("")
assert Invites.valid_invite_token?(token)
end
test "valid_invite_token? does not return true for a disabled invite by token",
%{invite: %{token: token} = invite, current_user: current_user} do
assert Invites.valid_invite_token?(token)
{:ok, _invite} = Invites.update_invite(invite, %{uses_left: 1}, current_user)
{:ok, _invite} = Invites.use_invite(token)
refute Invites.valid_invite_token?(token)
end
test "get_use_count/2 returns the correct invite usage",
%{invite: %{token: token} = invite, current_user: current_user} do
assert 0 == Invites.get_use_count(invite, current_user)
assert {:ok, _user} =
Accounts.register_user(
%{"email" => unique_user_email(), "password" => valid_user_password()},
token
)
assert 1 == Invites.get_use_count(invite, current_user)
assert {:ok, _user} =
Accounts.register_user(
%{"email" => unique_user_email(), "password" => valid_user_password()},
token
)
assert 2 == Invites.get_use_count(invite, current_user)
end
test "use_invite/1 successfully uses an unlimited invite",
%{invite: %{token: token} = invite, current_user: current_user} do
{:ok, invite} = Invites.update_invite(invite, %{uses_left: nil}, current_user)
assert {:ok, ^invite} = Invites.use_invite(token)
assert {:ok, ^invite} = Invites.use_invite(token)
assert {:ok, ^invite} = Invites.use_invite(token)
end
test "use_invite/1 successfully decrements an invite",
%{invite: %{token: token} = invite, current_user: current_user} do
{:ok, _invite} = Invites.update_invite(invite, %{uses_left: 10}, current_user)
assert {:ok, %{uses_left: 9}} = Invites.use_invite(token)
assert {:ok, %{uses_left: 8}} = Invites.use_invite(token)
assert {:ok, %{uses_left: 7}} = Invites.use_invite(token)
end
test "use_invite/1 successfully disactivates an invite",
%{invite: %{token: token} = invite, current_user: current_user} do
{:ok, _invite} = Invites.update_invite(invite, %{uses_left: 1}, current_user)
assert {:ok, %{uses_left: 0, disabled_at: disabled_at}} = Invites.use_invite(token)
assert not is_nil(disabled_at)
end
test "use_invite/1 does not work on disactivated invite",
%{invite: %{token: token} = invite, current_user: current_user} do
{:ok, _invite} = Invites.update_invite(invite, %{uses_left: 1}, current_user)
{:ok, _invite} = Invites.use_invite(token)
assert {:error, :invalid_token} = Invites.use_invite(token)
end
test "create_invite/1 with valid data creates an unlimited invite",
%{current_user: current_user} do
assert {:ok, %Invite{} = invite} =
Invites.create_invite(current_user, %{
"name" => "some name"
})
assert invite.name == "some name"
end
test "create_invite/1 with valid data creates a limited invite",
%{current_user: current_user} do
assert {:ok, %Invite{} = invite} =
Invites.create_invite(current_user, %{
"name" => "some name",
"uses_left" => 10
})
assert invite.name == "some name"
assert invite.uses_left == 10
end
test "create_invite/1 with invalid data returns error changeset",
%{current_user: current_user} do
assert {:error, %Changeset{}} = Invites.create_invite(current_user, @invalid_attrs)
end
test "update_invite/2 can set an invite to be limited",
%{invite: invite, current_user: current_user} do
assert {:ok, %Invite{} = new_invite} =
Invites.update_invite(
invite,
%{"name" => "some updated name", "uses_left" => 5},
current_user
)
assert new_invite.name == "some updated name"
assert new_invite.uses_left == 5
end
test "update_invite/2 can set an invite to be unlimited",
%{invite: invite, current_user: current_user} do
{:ok, invite} = Invites.update_invite(invite, %{"uses_left" => 5}, current_user)
assert {:ok, %Invite{} = new_invite} =
Invites.update_invite(
invite,
%{"name" => "some updated name", "uses_left" => nil},
current_user
)
assert new_invite.name == "some updated name"
assert new_invite.uses_left |> is_nil()
end
test "update_invite/2 with invalid data returns error changeset",
%{invite: invite, current_user: current_user} do
assert {:error, %Changeset{}} = Invites.update_invite(invite, @invalid_attrs, current_user)
assert invite == Invites.get_invite!(invite.id, current_user)
end
test "delete_invite/1 deletes the invite", %{invite: invite, current_user: current_user} do
assert {:ok, %Invite{}} = Invites.delete_invite(invite, current_user)
assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end
end
test "delete_invite!/1 deletes the invite", %{invite: invite, current_user: current_user} do
assert %Invite{} = Invites.delete_invite!(invite, current_user)
assert_raise Ecto.NoResultsError, fn -> Invites.get_invite!(invite.id, current_user) end
end
end
end

View File

@ -10,6 +10,8 @@ defmodule Memex.AccountsTest do
@moduletag :accounts_test @moduletag :accounts_test
doctest Accounts, import: true
describe "get_user_by_email/1" do describe "get_user_by_email/1" do
test "does not return the user if the email does not exist" do test "does not return the user if the email does not exist" do
refute Accounts.get_user_by_email("unknown@example.com") refute Accounts.get_user_by_email("unknown@example.com")
@ -512,7 +514,7 @@ defmodule Memex.AccountsTest do
test "deletes all tokens for the given user", %{user: user} do test "deletes all tokens for the given user", %{user: user} do
_session_token = Accounts.generate_user_session_token(user) _session_token = Accounts.generate_user_session_token(user)
{:ok, _user} = Accounts.reset_user_password(user, %{"password" => "new valid password"}) {:ok, _} = Accounts.reset_user_password(user, %{"password" => "new valid password"})
refute Repo.get_by(UserToken, user_id: user.id) refute Repo.get_by(UserToken, user_id: user.id)
end end
end end

View File

@ -22,12 +22,13 @@ defmodule MemexWeb.ConnCase do
using do using do
quote do quote do
# Import conveniences for testing with connections
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse # credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import Memex.Fixtures import Memex.Fixtures
import MemexWeb.ConnCase import MemexWeb.ConnCase
# Import conveniences for testing with connections # credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import Plug.Conn
import Phoenix.ConnTest import Phoenix.ConnTest
import Plug.Conn
alias MemexWeb.Router.Helpers, as: Routes alias MemexWeb.Router.Helpers, as: Routes

View File

@ -2,7 +2,6 @@ defmodule Memex.Fixtures do
@moduledoc """ @moduledoc """
This module defines test helpers for creating entities This module defines test helpers for creating entities
""" """
alias Memex.{Accounts, Accounts.User, Email, Repo} alias Memex.{Accounts, Accounts.User, Email, Repo}
def unique_user_email, do: "user#{System.unique_integer()}@example.com" def unique_user_email, do: "user#{System.unique_integer()}@example.com"