Compare commits
75 Commits
0ea953a34c
...
c5e82c60b6
Author | SHA1 | Date | |
---|---|---|---|
c5e82c60b6 | |||
c7debb331c | |||
bc2c936480 | |||
9b4837a044 | |||
bd5dd57c6c | |||
4f0f3ec610 | |||
6b7abdb3e1 | |||
db2ec3b4a3 | |||
f8a1d88e0e | |||
0eafb54266 | |||
b1d442ea88 | |||
8b59339f74 | |||
563bbaedf8 | |||
12814be5e1 | |||
bc034c0361 | |||
eb9280fa7e | |||
ad1e44fd42 | |||
482a3902b5 | |||
2fa1105f40 | |||
df44be2b1b | |||
56dae6cdfe | |||
8ef3bd65a3 | |||
6e635d1b30 | |||
ebe09bcf84 | |||
fd0b2c455a | |||
f1139d0ec4 | |||
cd6bb6fbc3 | |||
5c05f3b6fe | |||
30d3f76fe1 | |||
ed8c20e967 | |||
7b60938a75 | |||
f19d024d8a | |||
1fbed50b0f | |||
737484c36e | |||
6dbadc58ae | |||
f155a43ee8 | |||
bbaa1dfd6b | |||
2c2b9fefc9 | |||
bafc824a32 | |||
8c2f7e0509 | |||
22abc7a8d0 | |||
5a685ac00e | |||
a5c12b3e17 | |||
27af5acf8b | |||
469428c007 | |||
1cd28e43b8 | |||
695002c9d9 | |||
dde60d71d1 | |||
91794ddc55 | |||
1e3cec95fe | |||
f0a8c515f9 | |||
e99775eef2 | |||
6760f83ca0 | |||
10877bb754 | |||
38a581b639 | |||
9408705430 | |||
302aa7eeda | |||
fd4fdcc36b | |||
3cb723b9e4 | |||
1f92c452d1 | |||
c10cff63ea | |||
70faed71d0 | |||
b5c46c09ec | |||
7745765fc0 | |||
e16fbba810 | |||
e35bdf101b | |||
aa314e5ca1 | |||
616de3c117 | |||
74bcec6cfe | |||
41090c46d0 | |||
c3f5744ad6 | |||
95a339fe02 | |||
1e3b027367 | |||
dd46e1795f | |||
9e517e6477 |
19
.drone.yml
19
.drone.yml
@ -13,20 +13,24 @@ steps:
|
||||
mount:
|
||||
- _build
|
||||
- deps
|
||||
- assets/node_modules/
|
||||
- .npm
|
||||
- .mix
|
||||
|
||||
- name: test
|
||||
image: elixir:1.14.1-alpine
|
||||
environment:
|
||||
TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test
|
||||
HOST: testing.example.tld
|
||||
MIX_HOME: /drone/src/.mix
|
||||
MIX_ARCHIVES: /drone/src/.mix/archives
|
||||
MIX_ENV: test
|
||||
commands:
|
||||
- apk add --no-cache build-base npm git python3
|
||||
- mix local.rebar --force
|
||||
- mix local.hex --force
|
||||
- apk add --no-cache build-base npm git
|
||||
- mix local.rebar --force --if-missing
|
||||
- mix local.hex --force --if-missing
|
||||
- mix deps.get
|
||||
- mix deps.compile
|
||||
- npm --prefix ./assets ci --progress=false --no-audit --loglevel=error
|
||||
- npm set cache .npm
|
||||
- npm --prefix ./assets ci --no-audit --prefer-offline
|
||||
- npm run --prefix ./assets deploy
|
||||
- mix do phx.digest, gettext.extract
|
||||
- mix test.all
|
||||
@ -76,7 +80,8 @@ steps:
|
||||
mount:
|
||||
- _build
|
||||
- deps
|
||||
- assets/node_modules/
|
||||
- .npm
|
||||
- .mix
|
||||
|
||||
services:
|
||||
- name: database
|
||||
|
@ -1,3 +1,3 @@
|
||||
elixir 1.14.1-otp-25
|
||||
erlang 25.1.2
|
||||
nodejs 16.18.0
|
||||
nodejs 18.9.1
|
||||
|
@ -11,6 +11,7 @@
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
@apply bg-primary-900;
|
||||
-ms-transform: scale(1.5);
|
||||
-moz-transform: scale(1.5);
|
||||
-webkit-transform: scale(1.5);
|
||||
@ -26,25 +27,31 @@
|
||||
|
||||
.btn {
|
||||
@apply focus:outline-none px-4 py-2 rounded-lg;
|
||||
@apply shadow-sm focus:shadow-lg;
|
||||
@apply shadow-sm active:shadow-lg;
|
||||
@apply border;
|
||||
@apply transition-all duration-300 ease-in-out;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
@apply bg-primary-900 focus:bg-primary-900 active:bg-primary-800;
|
||||
@apply bg-primary-900 active:bg-primary-800;
|
||||
@apply border-primary-900 hover:border-primary-800 active:border-primary-700;
|
||||
@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 {
|
||||
@apply bg-red-700 focus:bg-red-800 active:bg-red-900;
|
||||
@apply border-red-700 focus:border-red-800 active:border-red-900;
|
||||
@apply bg-red-700 active:bg-red-900;
|
||||
@apply border-red-700 active:border-red-900;
|
||||
@apply text-primary-300;
|
||||
}
|
||||
|
||||
.hr {
|
||||
@apply mx-auto border border-primary-600 w-full max-w-2xl;
|
||||
@apply mx-auto border border-primary-600 w-full max-w-3xl;
|
||||
}
|
||||
|
||||
.link {
|
||||
|
@ -3,8 +3,8 @@
|
||||
"description": " ",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "18.12.1",
|
||||
"npm": "8.19.2"
|
||||
"node": "v18.9.1",
|
||||
"npm": "8.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"deploy": "NODE_ENV=production webpack --mode production",
|
||||
|
@ -1,3 +1,8 @@
|
||||
# v0.1.9
|
||||
- Improve server log
|
||||
- Style 大一點
|
||||
- Various minor improvements
|
||||
|
||||
# v0.1.8
|
||||
- Fix bug with public registration
|
||||
- Improve templates
|
||||
|
@ -16,9 +16,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with %User{} <- get_user_by_email("foo@example.com"), do: :passed
|
||||
:passed
|
||||
iex> get_user_by_email("foo@example.com")
|
||||
%User{}
|
||||
|
||||
iex> get_user_by_email("unknown@example.com")
|
||||
nil
|
||||
@ -34,9 +33,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
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", "valid_password")
|
||||
%User{}
|
||||
|
||||
iex> get_user_by_email_and_password("foo@example.com", "invalid_password")
|
||||
nil
|
||||
@ -57,15 +55,14 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> get_user!(user.id)
|
||||
iex> get_user!(user_id)
|
||||
user
|
||||
|
||||
> get_user!()
|
||||
iex> get_user!()
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
@spec get_user!(User.t()) :: User.t()
|
||||
@spec get_user!(User.id()) :: User.t()
|
||||
def get_user!(id) do
|
||||
Repo.get!(User, id)
|
||||
end
|
||||
@ -75,10 +72,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user1} = register_user(%{email: "foo1@example.com", password: "valid_password"})
|
||||
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
|
||||
iex> list_all_users_by_role(user1)
|
||||
%{admin: [%User{role: :admin}], user: [%User{role: :user}]}
|
||||
|
||||
"""
|
||||
@spec list_all_users_by_role(User.t()) :: %{User.role() => [User.t()]}
|
||||
@ -91,9 +86,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with [^user] <- list_users_by_role(:admin), do: :passed
|
||||
:passed
|
||||
iex> list_users_by_role(:admin)
|
||||
[%User{role: :admin}]
|
||||
|
||||
"""
|
||||
@spec list_users_by_role(:admin) :: [User.t()]
|
||||
@ -108,13 +102,11 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with {:ok, %User{email: "foo@example.com"}} <-
|
||||
...> register_user(%{email: "foo@example.com", password: "valid_password"}),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
{:ok, %User{email: "foo@example.com"}}
|
||||
|
||||
iex> with {:error, %Changeset{}} <- register_user(%{email: "foo@example"}), do: :passed
|
||||
:passed
|
||||
iex> register_user(%{email: "foo@example"})
|
||||
{:error, %Changeset{}}
|
||||
|
||||
"""
|
||||
@spec register_user(attrs :: map()) ::
|
||||
@ -149,11 +141,11 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with %Changeset{} <- change_user_registration(), do: :passed
|
||||
:passed
|
||||
iex> change_user_registration()
|
||||
%Changeset{}
|
||||
|
||||
iex> with %Changeset{} <- change_user_registration(%{password: "hi"}), do: :passed
|
||||
:passed
|
||||
iex> change_user_registration(%{password: "hi"}
|
||||
%Changeset{}
|
||||
|
||||
"""
|
||||
@spec change_user_registration() :: User.changeset()
|
||||
@ -169,8 +161,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with %Changeset{} <- change_user_email(%User{email: "foo@example.com"}), do: :passed
|
||||
:passed
|
||||
iex> change_user_email(%User{email: "foo@example.com"})
|
||||
%Changeset{}
|
||||
|
||||
"""
|
||||
@spec change_user_email(User.t()) :: User.changeset()
|
||||
@ -184,8 +176,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with %Changeset{} <- change_user_role(%User{}, :user), do: :passed
|
||||
:passed
|
||||
iex> change_user_role(%User{}, :user)
|
||||
%Changeset{}
|
||||
|
||||
"""
|
||||
@spec change_user_role(User.t(), User.role()) :: User.changeset()
|
||||
@ -199,17 +191,11 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:ok, %User{}} <-
|
||||
...> apply_user_email(user, "valid_password", %{email: "new_email@account.com"}),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> apply_user_email(user, "valid_password", %{email: "new_email@account.com"})
|
||||
{:ok, %User{}}
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:error, %Changeset{}} <-
|
||||
...> apply_user_email(user, "invalid password", %{email: "new_email@account"}),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> apply_user_email(user, "invalid password", %{email: "new_email@account"})
|
||||
{:error, %Changeset{}}
|
||||
|
||||
"""
|
||||
@spec apply_user_email(User.t(), email :: String.t(), attrs :: map()) ::
|
||||
@ -254,12 +240,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
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
|
||||
iex> deliver_update_email_instructions(user, "new_foo@example.com", fn _token -> "example url" end)
|
||||
%Oban.Job{args: %{email: :update_email, user_id: ^user_id, attrs: %{url: "example url"}}}
|
||||
|
||||
"""
|
||||
@spec deliver_update_email_instructions(User.t(), current_email :: String.t(), function) ::
|
||||
@ -276,8 +258,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with %Changeset{} <- change_user_password(%User{}), do: :passed
|
||||
:passed
|
||||
iex> change_user_password(%User{})
|
||||
%Changeset{}
|
||||
|
||||
"""
|
||||
@spec change_user_password(User.t(), attrs :: map()) :: User.changeset()
|
||||
@ -290,20 +272,14 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:ok, %User{}} <-
|
||||
...> reset_user_password(user, %{
|
||||
...> password: "new password",
|
||||
...> password_confirmation: "new password"
|
||||
...> }),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> reset_user_password(user, %{
|
||||
...> password: "new password",
|
||||
...> password_confirmation: "new password"
|
||||
...> })
|
||||
{:ok, %User{}}
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:error, %Changeset{}} <-
|
||||
...> update_user_password(user, "invalid password", %{password: "123"}),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> update_user_password(user, "invalid password", %{password: "123"})
|
||||
{:error, %Changeset{}}
|
||||
|
||||
"""
|
||||
@spec update_user_password(User.t(), String.t(), attrs :: map()) ::
|
||||
@ -329,8 +305,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> with %Changeset{} <- change_user_locale(%User{}), do: :passed
|
||||
:passed
|
||||
iex> change_user_locale(%User{})
|
||||
%Changeset{}
|
||||
|
||||
"""
|
||||
@spec change_user_locale(User.t()) :: User.changeset()
|
||||
@ -343,9 +319,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:ok, %User{}} <- update_user_locale(user, "en_US"), do: :passed
|
||||
:passed
|
||||
iex> update_user_locale(user, "en_US")
|
||||
{:ok, %User{}}
|
||||
|
||||
"""
|
||||
@spec update_user_locale(User.t(), locale :: String.t()) ::
|
||||
@ -359,13 +334,11 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with %User{} <- delete_user!(user, %User{id: 123, role: :admin}), do: :passed
|
||||
:passed
|
||||
iex> delete_user!(user, %User{id: 123, role: :admin})
|
||||
%User{}
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with %User{} <- delete_user!(user, user), do: :passed
|
||||
:passed
|
||||
iex> delete_user!(user, user)
|
||||
%User{}
|
||||
|
||||
"""
|
||||
@spec delete_user!(user_to_delete :: User.t(), User.t()) :: User.t()
|
||||
@ -421,11 +394,10 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> is_admin?(user)
|
||||
iex> is_admin?(%User{role: :admin})
|
||||
true
|
||||
|
||||
iex> is_admin?(%User{id: Ecto.UUID.generate()})
|
||||
iex> is_admin?(%User{})
|
||||
false
|
||||
|
||||
"""
|
||||
@ -439,8 +411,7 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> is_already_admin?(user)
|
||||
iex> is_already_admin?(%User{role: :admin})
|
||||
true
|
||||
|
||||
iex> is_already_admin?(%User{})
|
||||
@ -458,15 +429,9 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
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> deliver_user_confirmation_instructions(user, fn _token -> "example url" end)
|
||||
%Oban.Job{args: %{email: :welcome, user_id: ^user_id, attrs: %{url: "example url"}}}
|
||||
|
||||
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)
|
||||
{:error, :already_confirmed}
|
||||
|
||||
@ -514,12 +479,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, %{id: user_id} = user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
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
|
||||
iex> deliver_user_reset_password_instructions(user, fn _token -> "example url" end)
|
||||
%Oban.Job{args: %{email: :reset_password, user_id: ^user_id, attrs: %{url: "example url"}}}
|
||||
|
||||
"""
|
||||
@spec deliver_user_reset_password_instructions(User.t(), function()) :: Job.t()
|
||||
@ -535,11 +496,8 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
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(encoded_token)
|
||||
%User{}
|
||||
|
||||
iex> get_user_by_reset_password_token("invalidtoken")
|
||||
nil
|
||||
@ -560,20 +518,14 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:ok, %User{}} <-
|
||||
...> reset_user_password(user, %{
|
||||
...> password: "new password",
|
||||
...> password_confirmation: "new password"
|
||||
...> }),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> reset_user_password(user, %{
|
||||
...> password: "new password",
|
||||
...> password_confirmation: "new password"
|
||||
...> })
|
||||
{:ok, %User{}}
|
||||
|
||||
iex> {:ok, user} = register_user(%{email: "foo@example.com", password: "valid_password"})
|
||||
iex> with {:error, %Changeset{}} <-
|
||||
...> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"}),
|
||||
...> do: :passed
|
||||
:passed
|
||||
iex> reset_user_password(user, %{password: "valid", password_confirmation: "not the same"})
|
||||
{:error, %Changeset{}}
|
||||
|
||||
"""
|
||||
@spec reset_user_password(User.t(), attrs :: map()) ::
|
||||
|
@ -1,77 +0,0 @@
|
||||
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
|
@ -4,7 +4,7 @@ defmodule Memex.Application do
|
||||
@moduledoc false
|
||||
|
||||
use Application
|
||||
alias Memex.ErrorReporter
|
||||
alias Memex.Logger
|
||||
|
||||
@impl true
|
||||
def start(_type, _args) do
|
||||
@ -33,7 +33,7 @@ defmodule Memex.Application do
|
||||
[:oban, :job, :start],
|
||||
[:oban, :job, :stop]
|
||||
],
|
||||
&ErrorReporter.handle_event/4,
|
||||
&Logger.handle_event/4,
|
||||
[]
|
||||
)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
defmodule Memex.ErrorReporter do
|
||||
defmodule Memex.Logger do
|
||||
@moduledoc """
|
||||
Custom logger for telemetry events
|
||||
|
||||
@ -12,41 +12,47 @@ defmodule Memex.ErrorReporter do
|
||||
data =
|
||||
get_oban_job_data(meta, measure)
|
||||
|> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace))
|
||||
|> pretty_encode()
|
||||
|
||||
Logger.error(meta.reason, data: pretty_encode(data))
|
||||
Logger.error(meta.reason, data: data)
|
||||
end
|
||||
|
||||
def handle_event([:oban, :job, :start], measure, meta, _config) do
|
||||
Logger.info("Started oban job", data: get_oban_job_data(meta, measure) |> pretty_encode())
|
||||
data = get_oban_job_data(meta, measure) |> pretty_encode()
|
||||
Logger.info("Started oban job", data: data)
|
||||
end
|
||||
|
||||
def handle_event([:oban, :job, :stop], measure, meta, _config) do
|
||||
Logger.info("Finished oban job", data: get_oban_job_data(meta, measure) |> pretty_encode())
|
||||
data = get_oban_job_data(meta, measure) |> pretty_encode()
|
||||
Logger.info("Finished oban job", data: data)
|
||||
end
|
||||
|
||||
def handle_event([:oban, :job, unhandled_event], measure, meta, _config) do
|
||||
data =
|
||||
get_oban_job_data(meta, measure)
|
||||
|> Map.put(:event, unhandled_event)
|
||||
|> pretty_encode()
|
||||
|
||||
Logger.warning("Unhandled oban job event", data: pretty_encode(data))
|
||||
Logger.warning("Unhandled oban job event", data: data)
|
||||
end
|
||||
|
||||
def handle_event(unhandled_event, measure, meta, config) do
|
||||
data = %{
|
||||
event: unhandled_event,
|
||||
meta: meta,
|
||||
measurements: measure,
|
||||
config: config
|
||||
}
|
||||
data =
|
||||
pretty_encode(%{
|
||||
event: unhandled_event,
|
||||
meta: meta,
|
||||
measurements: measure,
|
||||
config: config
|
||||
})
|
||||
|
||||
Logger.warning("Unhandled telemetry event", data: pretty_encode(data))
|
||||
Logger.warning("Unhandled telemetry event", data: data)
|
||||
end
|
||||
|
||||
defp get_oban_job_data(%{job: job}, measure) do
|
||||
job
|
||||
|> Map.take([:id, :args, :meta, :queue, :worker])
|
||||
|> Map.merge(measure)
|
||||
%{
|
||||
job: job |> Map.take([:id, :args, :meta, :queue, :worker]),
|
||||
measurements: measure
|
||||
}
|
||||
end
|
||||
|
||||
defp pretty_encode(data) do
|
@ -93,7 +93,7 @@ defmodule MemexWeb do
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
use Phoenix.HTML
|
||||
|
||||
# Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
|
||||
# Import LiveView and .heex helpers (live_render, link, <.form>, etc)
|
||||
# Import basic rendering functionality (render, render_layout, etc)
|
||||
import Phoenix.{Component, View}
|
||||
import MemexWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers}
|
||||
|
@ -19,7 +19,8 @@ defmodule MemexWeb.Components.InviteCard do
|
||||
|> assign_new(:code_actions, fn -> [] end)
|
||||
|
||||
~H"""
|
||||
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
|
||||
<div class="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
|
||||
transition-all duration-300 ease-in-out">
|
||||
<h1 class="title text-xl">
|
||||
@ -55,7 +56,8 @@ defmodule MemexWeb.Components.InviteCard do
|
||||
<div class="flex flex-row flex-wrap justify-center items-center">
|
||||
<code
|
||||
id={"code-#{@invite.id}"}
|
||||
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
|
||||
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all
|
||||
text-primary-400 bg-primary-800"
|
||||
phx-no-format
|
||||
><%= Routes.user_registration_url(Endpoint, :new, invite: @invite.token) %></code>
|
||||
<%= render_slot(@code_actions) %>
|
||||
|
@ -11,7 +11,8 @@
|
||||
phx-value-sort-key={key}
|
||||
phx-target={@myself}
|
||||
>
|
||||
<span><%= label %></span>
|
||||
<i class="w-0 float-right fas fa-sm fa-chevron-up opacity-0"></i>
|
||||
<span class={if @last_sort_key == key, do: "underline"}><%= label %></span>
|
||||
<%= if @last_sort_key == key do %>
|
||||
<%= case @sort_mode do %>
|
||||
<% :asc -> %>
|
||||
@ -25,7 +26,7 @@
|
||||
</span>
|
||||
</th>
|
||||
<% else %>
|
||||
<th class={["p-2", column[:class]]}>
|
||||
<th class={["p-2 cursor-not-allowed", column[:class]]}>
|
||||
<%= label %>
|
||||
</th>
|
||||
<% end %>
|
||||
|
@ -82,7 +82,6 @@ defmodule MemexWeb.Components.Topbar do
|
||||
<%= @current_user.email %>
|
||||
</.link>
|
||||
</li>
|
||||
|
||||
<li class="mx-2 my-1">
|
||||
<.link
|
||||
href={Routes.user_session_path(Endpoint, :delete)}
|
||||
@ -92,7 +91,6 @@ defmodule MemexWeb.Components.Topbar do
|
||||
<i class="fas fa-sign-out-alt"></i>
|
||||
</.link>
|
||||
</li>
|
||||
|
||||
<li
|
||||
:if={
|
||||
@current_user.role == :admin and function_exported?(Routes, :live_dashboard_path, 2)
|
||||
@ -109,7 +107,7 @@ defmodule MemexWeb.Components.Topbar do
|
||||
<% else %>
|
||||
<li :if={Accounts.allow_registration?()} class="mx-2 my-1">
|
||||
<.link
|
||||
navigate={Routes.user_registration_path(Endpoint, :new)}
|
||||
href={Routes.user_registration_path(Endpoint, :new)}
|
||||
class="text-primary-400 text-primary-400 hover:underline truncate"
|
||||
>
|
||||
<%= dgettext("actions", "register") %>
|
||||
@ -118,7 +116,7 @@ defmodule MemexWeb.Components.Topbar do
|
||||
|
||||
<li class="mx-2 my-1">
|
||||
<.link
|
||||
navigate={Routes.user_session_path(Endpoint, :new)}
|
||||
href={Routes.user_session_path(Endpoint, :new)}
|
||||
class="text-primary-400 text-primary-400 hover:underline truncate"
|
||||
>
|
||||
<%= dgettext("actions", "log in") %>
|
||||
|
@ -4,12 +4,17 @@ defmodule MemexWeb.Components.UserCard do
|
||||
"""
|
||||
|
||||
use MemexWeb, :component
|
||||
alias Memex.Accounts.User
|
||||
|
||||
attr :user, User, required: true
|
||||
slot(:inner_block, required: true)
|
||||
|
||||
def user_card(assigns) do
|
||||
~H"""
|
||||
<div
|
||||
id={"user-#{@user.id}"}
|
||||
class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center text-center
|
||||
class="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
|
||||
transition-all duration-300 ease-in-out"
|
||||
>
|
||||
|
@ -2,7 +2,7 @@ defmodule MemexWeb.UserRegistrationController do
|
||||
use MemexWeb, :controller
|
||||
import MemexWeb.Gettext
|
||||
alias Memex.{Accounts, Accounts.Invites}
|
||||
alias MemexWeb.{Endpoint, HomeLive}
|
||||
alias MemexWeb.HomeLive
|
||||
|
||||
def new(conn, %{"invite" => invite_token}) do
|
||||
if Invites.valid_invite_token?(invite_token) do
|
||||
|
@ -1,5 +1,5 @@
|
||||
<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-2xl">
|
||||
<h1 class="title text-primary-400 text-xl text-left">
|
||||
<%= gettext("faq") %>
|
||||
</h1>
|
||||
|
||||
@ -7,16 +7,13 @@
|
||||
|
||||
<ul class="flex flex-col justify-center items-stretch space-y-8">
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("what is this?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"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:") %>
|
||||
</p>
|
||||
|
||||
@ -55,20 +52,16 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("why split up into notes, contexts and pipelines?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= 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."
|
||||
) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= 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."
|
||||
) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
|
||||
) %>
|
||||
@ -76,15 +69,13 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("what should my notes be like?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"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(
|
||||
"spoons? probably not. a particular brand of spoons that you really like? why not :)"
|
||||
) %>
|
||||
@ -92,13 +83,11 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("what should my contexts be like?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext("in my opinion, contexts should be like single-topic blog posts.") %>
|
||||
</p>
|
||||
<p>
|
||||
<%= 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."
|
||||
) %>
|
||||
@ -106,15 +95,13 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("what should my pipelines be like?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
|
||||
) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= 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."
|
||||
) %>
|
||||
@ -122,20 +109,16 @@
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-stretch space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<b class="whitespace-nowrap text-left">
|
||||
<%= gettext("how many people should i invite?") %>
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
|
||||
) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
|
||||
) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= 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 :)"
|
||||
) %>
|
||||
|
@ -5,7 +5,7 @@ defmodule MemexWeb.HomeLive do
|
||||
|
||||
use MemexWeb, :live_view
|
||||
alias Memex.Accounts
|
||||
alias MemexWeb.{Endpoint, FaqLive}
|
||||
alias MemexWeb.FaqLive
|
||||
|
||||
@version Mix.Project.config()[:version]
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
<div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-3xl">
|
||||
<h1 class="title text-primary-400 text-2xl text-center">
|
||||
<div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-lg">
|
||||
<h1 class="title text-primary-400 text-xl">
|
||||
<%= gettext("memEx") %>
|
||||
</h1>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<ul class="flex flex-col space-y-4 text-center">
|
||||
<ul class="flex flex-col space-y-4">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b class="whitespace-nowrap">
|
||||
<%= gettext("notes:") %>
|
||||
@ -33,11 +31,8 @@
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<.link
|
||||
navigate={Routes.live_path(Endpoint, FaqLive)}
|
||||
class="link title text-primary-400 text-lg"
|
||||
>
|
||||
<li class="flex flex-col justify-center items-center text-right space-y-2">
|
||||
<.link navigate={Routes.live_path(Endpoint, FaqLive)} class="btn btn-primary">
|
||||
<%= gettext("read more on how to use memEx") %>
|
||||
</.link>
|
||||
</li>
|
||||
@ -45,7 +40,7 @@
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<ul class="flex flex-col space-y-4 text-center">
|
||||
<ul class="flex flex-col space-y-4">
|
||||
<h2 class="title text-primary-400 text-lg">
|
||||
<%= gettext("features") %>
|
||||
</h2>
|
||||
@ -80,31 +75,29 @@
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<ul class="flex flex-col space-y-4 text-center">
|
||||
<ul class="flex flex-col justify-center space-y-4">
|
||||
<h2 class="title text-primary-400 text-lg">
|
||||
<%= gettext("instance information") %>
|
||||
</h2>
|
||||
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b>
|
||||
<%= gettext("admins:") %>
|
||||
</b>
|
||||
<p>
|
||||
<p class="flex flex-col justify-center items-center space-y-2">
|
||||
<%= if @admins |> Enum.empty?() do %>
|
||||
<.link href={Routes.user_registration_path(Endpoint, :new)} class="link">
|
||||
<%= dgettext("prompts", "register to setup memEx") %>
|
||||
</.link>
|
||||
<% else %>
|
||||
<div class="flex flex-wrap justify-center space-x-2">
|
||||
<a :for={%{email: email} <- @admins} class="link" href={"mailto:#{email}"}>
|
||||
<%= email %>
|
||||
</a>
|
||||
</div>
|
||||
<a :for={%{email: email} <- @admins} class="link" href={"mailto:#{email}"}>
|
||||
<%= email %>
|
||||
</a>
|
||||
<% end %>
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li class="flex flex-row justify-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b><%= gettext("registration:") %></b>
|
||||
<p>
|
||||
<%= case Application.get_env(:memex, Memex.Accounts)[:registration] do
|
||||
@ -114,7 +107,7 @@
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li class="flex flex-row justify-center items-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<b><%= gettext("version:") %></b>
|
||||
<.link
|
||||
href="https://gitea.bubbletea.dev/shibao/memEx/src/branch/stable/changelog.md"
|
||||
@ -130,12 +123,12 @@
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<ul class="flex flex-col space-y-2 text-center justify-center">
|
||||
<ul class="flex flex-col space-y-2">
|
||||
<h2 class="title text-primary-400 text-lg">
|
||||
<%= gettext("get involved!") %>
|
||||
<%= gettext("get involved") %>
|
||||
</h2>
|
||||
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<.link
|
||||
href="https://gitea.bubbletea.dev/shibao/memEx"
|
||||
class="flex flex-row justify-center items-center space-x-2 link"
|
||||
@ -146,7 +139,7 @@
|
||||
<i class="fas fa-md fa-code"></i>
|
||||
</.link>
|
||||
</li>
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<.link
|
||||
href="https://weblate.bubbletea.dev/engage/memEx"
|
||||
class="flex flex-row justify-center items-center space-x-2 link"
|
||||
@ -157,7 +150,7 @@
|
||||
<i class="fas fa-md fa-language"></i>
|
||||
</.link>
|
||||
</li>
|
||||
<li class="flex flex-col justify-center space-x-2">
|
||||
<li class="flex flex-col justify-center items-center space-y-2">
|
||||
<.link
|
||||
href="https://gitea.bubbletea.dev/shibao/memEx/issues/new"
|
||||
class="flex flex-row justify-center items-center space-x-2 link"
|
||||
|
@ -18,13 +18,16 @@
|
||||
<%= changeset_errors(@changeset) %>
|
||||
</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") %>
|
||||
<%= 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") %>
|
||||
<%= 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"),
|
||||
class: "mx-auto btn btn-primary col-span-3",
|
||||
|
@ -7,7 +7,7 @@ defmodule MemexWeb.InviteLive.Index do
|
||||
import MemexWeb.Components.{InviteCard, UserCard}
|
||||
alias Memex.Accounts
|
||||
alias Memex.Accounts.{Invite, Invites}
|
||||
alias MemexWeb.{Endpoint, HomeLive}
|
||||
alias MemexWeb.HomeLive
|
||||
alias Phoenix.LiveView.JS
|
||||
|
||||
@impl true
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="w-full flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="mx-auto flex flex-col justify-center items-stretch space-y-4 max-w-3xl">
|
||||
<h1 class="title text-xl title-primary-500">
|
||||
<%= gettext("invites") %>
|
||||
</h1>
|
||||
|
||||
@ -11,22 +11,18 @@
|
||||
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||
<%= dgettext("actions", "invite someone new!") %>
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link patch={Routes.invite_index_path(Endpoint, :new)} class="btn btn-primary">
|
||||
<%= dgettext("actions", "create invite") %>
|
||||
</.link>
|
||||
<% end %>
|
||||
|
||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
<.invite_card :for={invite <- @invites} invite={invite} current_user={@current_user}>
|
||||
<:code_actions>
|
||||
<form phx-submit="copy_to_clipboard">
|
||||
<button
|
||||
type="submit"
|
||||
class="mx-2 my-1 btn btn-primary"
|
||||
class="mx-2 my-1 btn btn-secondary"
|
||||
phx-click={JS.dispatch("memex:clipcopy", to: "#code-#{invite.id}")}
|
||||
>
|
||||
<%= dgettext("actions", "Copy to clipboard") %>
|
||||
<%= dgettext("actions", "copy") %>
|
||||
</button>
|
||||
</form>
|
||||
</:code_actions>
|
||||
@ -55,7 +51,7 @@
|
||||
|
||||
<a
|
||||
href="#"
|
||||
class="btn btn-primary"
|
||||
class="btn btn-secondary"
|
||||
phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"}
|
||||
phx-value-id={invite.id}
|
||||
>
|
||||
@ -65,7 +61,7 @@
|
||||
<a
|
||||
:if={invite.disabled_at |> is_nil() and not (invite.uses_left |> is_nil())}
|
||||
href="#"
|
||||
class="btn btn-primary"
|
||||
class="btn btn-secondary"
|
||||
phx-click="set_unlimited"
|
||||
phx-value-id={invite.id}
|
||||
data-confirm={
|
||||
@ -77,16 +73,24 @@
|
||||
<%= gettext("set unlimited") %>
|
||||
</a>
|
||||
</.invite_card>
|
||||
|
||||
<.link
|
||||
:if={@invites != []}
|
||||
patch={Routes.invite_index_path(Endpoint, :new)}
|
||||
class="btn btn-primary ml-auto"
|
||||
>
|
||||
<%= dgettext("actions", "create invite") %>
|
||||
</.link>
|
||||
</div>
|
||||
|
||||
<%= unless @admins |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="title text-2xl text-primary-400">
|
||||
<%= gettext("Admins") %>
|
||||
<h1 class="title text-xl text-primary-400">
|
||||
<%= gettext("admins") %>
|
||||
</h1>
|
||||
|
||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
<.user_card :for={admin <- @admins} user={admin}>
|
||||
<.link
|
||||
href="#"
|
||||
@ -96,7 +100,7 @@
|
||||
data-confirm={
|
||||
dgettext(
|
||||
"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
|
||||
)
|
||||
}
|
||||
@ -110,11 +114,11 @@
|
||||
<%= unless @users |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="title text-2xl text-primary-400">
|
||||
<h1 class="title text-xl text-primary-400">
|
||||
<%= gettext("users") %>
|
||||
</h1>
|
||||
|
||||
<div class="w-full flex flex-row flex-wrap justify-center items-center">
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
<.user_card :for={user <- @users} user={user}>
|
||||
<.link
|
||||
href="#"
|
||||
@ -124,7 +128,7 @@
|
||||
data-confirm={
|
||||
dgettext(
|
||||
"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
|
||||
)
|
||||
}
|
||||
|
@ -28,8 +28,8 @@ defmodule MemexWeb.LiveHelpers do
|
||||
def modal(assigns) do
|
||||
~H"""
|
||||
<.link
|
||||
patch={@return_to}
|
||||
id="modal-bg"
|
||||
patch={@return_to}
|
||||
class="fade-in fixed z-10 left-0 top-0
|
||||
w-full h-full overflow-hidden
|
||||
p-8 flex flex-col justify-center items-center cursor-auto"
|
||||
@ -42,7 +42,7 @@ defmodule MemexWeb.LiveHelpers do
|
||||
<div
|
||||
id="modal"
|
||||
class="fixed z-10 left-0 top-0 pointer-events-none
|
||||
w-screen h-screen overflow-hidden
|
||||
w-full h-full overflow-hidden
|
||||
p-4 sm:p-8 flex flex-col justify-center items-center"
|
||||
>
|
||||
<div
|
||||
|
@ -11,9 +11,9 @@
|
||||
<script defer type="text/javascript" src="/js/app.js">
|
||||
</script>
|
||||
</head>
|
||||
<body class="m-0 p-0 w-full h-full bg-primary-800 text-primary-400 subpixel-antialiased">
|
||||
<body class="pb-8 m-0 p-0 w-full h-full bg-primary-800 text-primary-400 subpixel-antialiased">
|
||||
<header>
|
||||
<.topbar current_user={assigns[:current_user]}></.topbar>
|
||||
<.topbar current_user={assigns[:current_user]} />
|
||||
</header>
|
||||
|
||||
<div class="pb-8 w-full flex flex-col justify-center items-center text-center">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<main role="main" class="min-h-full min-w-full">
|
||||
<header>
|
||||
<.topbar current_user={assigns[:current_user]}></.topbar>
|
||||
<.topbar current_user={assigns[:current_user]} />
|
||||
|
||||
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
|
||||
<p :if={get_flash(@conn, :info)} class="alert alert-info" role="alert">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<main class="pb-8 min-w-full">
|
||||
<header>
|
||||
<.topbar current_user={assigns[:current_user]}></.topbar>
|
||||
<.topbar current_user={assigns[:current_user]} />
|
||||
|
||||
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
|
||||
<p
|
||||
@ -33,7 +33,7 @@
|
||||
<div
|
||||
id="disconnect"
|
||||
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-800 text-primary-400
|
||||
border border-primary-400 shadow-lg rounded-lg bg-primary-900 text-primary-400
|
||||
flex justify-center items-center space-x-4
|
||||
transition-opacity ease-in-out duration-500 delay-[2000ms]"
|
||||
>
|
||||
|
@ -9,7 +9,7 @@
|
||||
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"
|
||||
>
|
||||
<%= label(f, :email, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-400") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
|
||||
<%= submit(dgettext("actions", "Resend confirmation instructions"),
|
||||
|
@ -17,11 +17,11 @@
|
||||
<%= hidden_input(f, :invite_token, value: @invite_token) %>
|
||||
<% end %>
|
||||
|
||||
<%= label(f, :email, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :email, "col-span-3") %>
|
||||
|
||||
<%= label(f, :password, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :password, gettext("password"), class: "title text-lg text-primary-400") %>
|
||||
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :password, "col-span-3") %>
|
||||
|
||||
|
@ -9,17 +9,15 @@
|
||||
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"
|
||||
>
|
||||
<div :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
|
||||
<p>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
</p>
|
||||
</div>
|
||||
<p :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>
|
||||
|
||||
<%= label(f, :password, "new password", class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :password, gettext("new password"), class: "title text-lg text-primary-400") %>
|
||||
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
|
||||
<%= error_tag(f, :password, "col-span-3") %>
|
||||
|
||||
<%= label(f, :password_confirmation, "Confirm new password",
|
||||
<%= label(f, :password_confirmation, gettext("confirm new password"),
|
||||
class: "title text-lg text-primary-400"
|
||||
) %>
|
||||
<%= password_input(f, :password_confirmation,
|
||||
|
@ -9,7 +9,7 @@
|
||||
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"
|
||||
>
|
||||
<%= label(f, :email, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
|
||||
<%= submit(dgettext("actions", "send instructions to reset password"),
|
||||
|
@ -10,19 +10,17 @@
|
||||
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"
|
||||
>
|
||||
<div :if={@error_message} class="alert alert-danger col-span-3">
|
||||
<p>
|
||||
<%= @error_message %>
|
||||
</p>
|
||||
</div>
|
||||
<p :if={@error_message} class="alert alert-danger col-span-3">
|
||||
<%= @error_message %>
|
||||
</p>
|
||||
|
||||
<%= label(f, :email, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :email, gettext("email"), class: "title text-lg text-primary-400") %>
|
||||
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
|
||||
|
||||
<%= label(f, :password, class: "title text-lg text-primary-400") %>
|
||||
<%= label(f, :password, gettext("password"), class: "title text-lg text-primary-400") %>
|
||||
<%= 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"
|
||||
) %>
|
||||
<%= checkbox(f, :remember_me, class: "checkbox col-span-2") %>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center text-center space-y-4">
|
||||
<h1 class="pb-4 title text-primary-400 text-xl">
|
||||
<div class="mx-auto pb-8 max-w-3xl flex flex-col justify-center items-stretch text-right space-y-4">
|
||||
<h1 class="title text-primary-400 text-xl text-left">
|
||||
<%= gettext("settings") %>
|
||||
</h1>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
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"
|
||||
>
|
||||
<h3 class="title text-primary-400 text-lg col-span-3">
|
||||
<h3 class="title text-primary-400 text-lg text-center col-span-3">
|
||||
<%= dgettext("actions", "change email") %>
|
||||
</h3>
|
||||
|
||||
@ -19,9 +19,7 @@
|
||||
:if={@email_changeset.action && not @email_changeset.valid?()}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<p>
|
||||
<%= dgettext("errors", "oops, something went wrong! Please check the errors below") %>
|
||||
</p>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %>
|
||||
</div>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_email") %>
|
||||
@ -55,18 +53,16 @@
|
||||
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"
|
||||
>
|
||||
<h3 class="title text-primary-400 text-lg col-span-3">
|
||||
<h3 class="title text-primary-400 text-lg text-center col-span-3">
|
||||
<%= dgettext("actions", "change password") %>
|
||||
</h3>
|
||||
|
||||
<div
|
||||
<p
|
||||
:if={@password_changeset.action && not @password_changeset.valid?()}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<p>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
</p>
|
||||
</div>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below.") %>
|
||||
</p>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_password") %>
|
||||
|
||||
@ -109,37 +105,35 @@
|
||||
:let={f}
|
||||
for={@locale_changeset}
|
||||
action={Routes.user_settings_path(@conn, :update)}
|
||||
class="flex flex-col space-y-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">
|
||||
<h3 class="title text-primary-400 text-lg text-center col-span-3">
|
||||
<%= dgettext("actions", "change language") %>
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?()}
|
||||
class="alert alert-danger"
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<p>
|
||||
<%= dgettext("errors", "oops, something went wrong! Please check the errors below") %>
|
||||
</p>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %>
|
||||
</div>
|
||||
|
||||
<%= hidden_input(f, :action, name: "action", value: "update_locale") %>
|
||||
|
||||
<%= select(f, :locale, [{gettext("english"), "en_US"}, {"spanish", "es"}],
|
||||
class: "mx-2 my-1 min-w-md input input-primary"
|
||||
class: "mx-2 my-1 min-w-md input input-primary col-start-2"
|
||||
) %>
|
||||
<%= error_tag(f, :locale) %>
|
||||
<%= error_tag(f, :locale, "col-span-3") %>
|
||||
|
||||
<%= submit(dgettext("actions", "change language"),
|
||||
class: "whitespace-nowrap mx-auto btn btn-primary",
|
||||
class: "whitespace-nowrap mx-auto btn btn-primary col-span-3",
|
||||
data: [qa: dgettext("prompts", "are you sure you want to change your language?")]
|
||||
) %>
|
||||
</.form>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex justify-center items-center">
|
||||
<div class="flex justify-end items-center">
|
||||
<.link
|
||||
href={Routes.export_path(@conn, :export, :json)}
|
||||
class="mx-4 my-2 btn btn-primary"
|
||||
|
@ -1,13 +1,13 @@
|
||||
defmodule MemexWeb.LayoutView do
|
||||
use MemexWeb, :view
|
||||
import MemexWeb.{Components.Topbar, Gettext}
|
||||
import MemexWeb.Components.Topbar
|
||||
alias MemexWeb.HomeLive
|
||||
|
||||
# Phoenix LiveDashboard is available only in development by default,
|
||||
# so we instruct Elixir to not warn if the dashboard route is missing.
|
||||
@compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}}
|
||||
|
||||
def get_title(%{assigns: %{title: title}}) do
|
||||
def get_title(%{assigns: %{title: title}}) when title not in [nil, ""] do
|
||||
gettext("memEx | %{title}", title: title)
|
||||
end
|
||||
|
||||
|
@ -71,7 +71,7 @@ defmodule MemexWeb.ViewHelpers do
|
||||
img_data =
|
||||
content
|
||||
|> EQRCode.encode()
|
||||
|> EQRCode.png(width: width, background_color: <<39, 39, 42>>, color: <<255, 255, 255>>)
|
||||
|> EQRCode.png(width: width, background_color: <<24, 24, 27>>, color: <<255, 255, 255>>)
|
||||
|> Base.encode64()
|
||||
|
||||
"data:image/png;base64," <> img_data
|
||||
|
4
mix.exs
4
mix.exs
@ -4,8 +4,8 @@ defmodule Memex.MixProject do
|
||||
def project do
|
||||
[
|
||||
app: :memex,
|
||||
version: "0.1.8",
|
||||
elixir: "~> 1.14",
|
||||
version: "0.1.9",
|
||||
elixir: "1.14.1",
|
||||
elixirc_paths: elixirc_paths(Mix.env()),
|
||||
compilers: Mix.compilers(),
|
||||
start_permanent: Mix.env() == :prod,
|
||||
|
@ -10,11 +10,6 @@
|
||||
msgid ""
|
||||
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:15
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -22,35 +17,35 @@ 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:31
|
||||
#: 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:29
|
||||
#: 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:45
|
||||
#: 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:115
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:134
|
||||
#: 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:59
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:101
|
||||
#: 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:16
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "create invite"
|
||||
msgstr ""
|
||||
@ -66,7 +61,7 @@ msgstr ""
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:157
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:151
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete user"
|
||||
msgstr ""
|
||||
@ -87,13 +82,13 @@ msgstr ""
|
||||
msgid "invite someone new!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/topbar.ex:124
|
||||
#: 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:47
|
||||
#: 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:30
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "log in"
|
||||
msgstr ""
|
||||
@ -113,13 +108,13 @@ msgstr ""
|
||||
msgid "new pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/topbar.ex:115
|
||||
#: 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:44
|
||||
#: 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:41
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:39
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
@ -146,7 +141,7 @@ 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:44
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:42
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "forgot your password?"
|
||||
msgstr ""
|
||||
@ -156,7 +151,12 @@ msgstr ""
|
||||
msgid "send instructions to reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:148
|
||||
#: 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 ""
|
||||
|
@ -10,11 +10,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"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:15
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -22,35 +17,35 @@ 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:31
|
||||
#: 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:29
|
||||
#: 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:45
|
||||
#: 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:115
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:134
|
||||
#: 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:59
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:101
|
||||
#: 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:16
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "create invite"
|
||||
msgstr ""
|
||||
@ -66,7 +61,7 @@ msgstr ""
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:157
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:151
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete user"
|
||||
msgstr ""
|
||||
@ -87,13 +82,13 @@ msgstr ""
|
||||
msgid "invite someone new!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/topbar.ex:124
|
||||
#: 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:47
|
||||
#: 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:30
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "log in"
|
||||
msgstr ""
|
||||
@ -113,13 +108,13 @@ msgstr ""
|
||||
msgid "new pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/topbar.ex:115
|
||||
#: 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:44
|
||||
#: 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:41
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:39
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
@ -146,7 +141,7 @@ 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:44
|
||||
#: lib/memex_web/templates/user_session/new.html.heex:42
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "forgot your password?"
|
||||
msgstr ""
|
||||
@ -156,7 +151,12 @@ msgstr ""
|
||||
msgid "send instructions to reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:148
|
||||
#: 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 ""
|
||||
|
@ -12,35 +12,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Confirm your account"
|
||||
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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reconnecting..."
|
||||
@ -51,11 +27,6 @@ msgstr ""
|
||||
msgid "Reset your password"
|
||||
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/note_live/show.html.heex:19
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:27
|
||||
@ -63,22 +34,23 @@ msgstr ""
|
||||
msgid "Visibility: %{visibility}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:76
|
||||
#: 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:90
|
||||
#: lib/memex_web/live/home_live.html.heex:85
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "admins:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:58
|
||||
#: 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_settings/edit.html.heex:80
|
||||
#: 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 ""
|
||||
@ -96,33 +68,33 @@ msgstr ""
|
||||
msgid "contexts"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:20
|
||||
#: lib/memex_web/live/home_live.html.heex:18
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "contexts:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:73
|
||||
#: 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:33
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:89
|
||||
#: 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:62
|
||||
#: 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:14
|
||||
#: 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:32
|
||||
#: lib/memex_web/live/home_live.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "document your processes, attaching contexts to each step"
|
||||
msgstr ""
|
||||
@ -132,53 +104,51 @@ msgstr ""
|
||||
msgid "edit invite"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:29
|
||||
#: 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:29
|
||||
#: 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:62
|
||||
#: 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:129
|
||||
#: 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:50
|
||||
#: lib/memex_web/live/home_live.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "features"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: 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:85
|
||||
#: lib/memex_web/live/home_live.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "instance information"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/invite_card.ex:42
|
||||
#: lib/memex_web/components/invite_card.ex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite disabled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:112
|
||||
#: lib/memex_web/live/home_live.html.heex:105
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite only"
|
||||
msgstr ""
|
||||
@ -195,7 +165,7 @@ msgstr ""
|
||||
msgid "log in"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:55
|
||||
#: lib/memex_web/live/home_live.html.heex:50
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "multi-user:"
|
||||
msgstr ""
|
||||
@ -205,7 +175,8 @@ msgstr ""
|
||||
msgid "new invite"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:73
|
||||
#: 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 ""
|
||||
@ -228,7 +199,7 @@ msgstr ""
|
||||
msgid "notes"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:11
|
||||
#: lib/memex_web/live/home_live.html.heex:9
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "notes:"
|
||||
msgstr ""
|
||||
@ -241,27 +212,27 @@ msgstr ""
|
||||
msgid "pipelines"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:29
|
||||
#: lib/memex_web/live/home_live.html.heex:27
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "pipelines:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:67
|
||||
#: 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:64
|
||||
#: lib/memex_web/live/home_live.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "privacy:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:23
|
||||
#: 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:111
|
||||
#: lib/memex_web/live/home_live.html.heex:104
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "public signups"
|
||||
msgstr ""
|
||||
@ -271,12 +242,12 @@ msgstr ""
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:108
|
||||
#: lib/memex_web/live/home_live.html.heex:101
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "registration:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:167
|
||||
#: lib/memex_web/live/home_live.html.heex:160
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "report bugs or request features"
|
||||
msgstr ""
|
||||
@ -296,7 +267,7 @@ msgstr ""
|
||||
msgid "select privacy"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:77
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "set unlimited"
|
||||
msgstr ""
|
||||
@ -321,17 +292,17 @@ msgstr ""
|
||||
msgid "tags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:114
|
||||
#: 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:118
|
||||
#: lib/memex_web/live/home_live.html.heex:111
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "version:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:145
|
||||
#: lib/memex_web/live/home_live.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "view the source code"
|
||||
msgstr ""
|
||||
@ -508,62 +479,62 @@ msgstr ""
|
||||
msgid "use [[context-slug]] to link to a context"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:72
|
||||
#: 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:102
|
||||
#: 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:118
|
||||
#: 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:62
|
||||
#: 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:67
|
||||
#: 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:99
|
||||
#: 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:83
|
||||
#: 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:113
|
||||
#: 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:31
|
||||
#: lib/memex_web/live/faq_live.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "memex"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:51
|
||||
#: 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:20
|
||||
#: 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:88
|
||||
#: 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 ""
|
||||
@ -573,27 +544,27 @@ msgstr ""
|
||||
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:96
|
||||
#: 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:80
|
||||
#: 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:110
|
||||
#: 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:59
|
||||
#: 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:41
|
||||
#: lib/memex_web/live/faq_live.html.heex:38
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "zettelkasten"
|
||||
msgstr ""
|
||||
@ -608,22 +579,22 @@ msgstr ""
|
||||
msgid "forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:126
|
||||
#: 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:134
|
||||
#: 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:139
|
||||
#: 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:129
|
||||
#: 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 ""
|
||||
@ -633,32 +604,73 @@ msgstr ""
|
||||
msgid "language"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/user_card.ex:23
|
||||
#: lib/memex_web/components/user_card.ex:28
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "user confirmed on%{confirmed_datetime}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/user_card.ex:34
|
||||
#: lib/memex_web/components/user_card.ex:39
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "user registered on%{registered_datetime}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/invite_card.ex:37
|
||||
#: 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:41
|
||||
#: lib/memex_web/live/home_live.html.heex:36
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "read more on how to use memEx"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/invite_card.ex:32
|
||||
#: lib/memex_web/components/invite_card.ex:33
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "uses left: %{uses_left_count}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/invite_card.ex:52
|
||||
#: 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, 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 ""
|
||||
|
@ -20,12 +20,6 @@ msgstr ""
|
||||
msgid "Invalid email or password"
|
||||
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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reset password link is invalid or it has expired."
|
||||
@ -79,12 +73,6 @@ msgstr ""
|
||||
msgid "must have the @ sign and no spaces"
|
||||
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:71
|
||||
#: lib/memex/notes/note.ex:57
|
||||
@ -123,6 +111,8 @@ msgid "invalid format: only numbers, letters and hyphen are accepted. tags must
|
||||
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, fuzzy
|
||||
msgid "oops, something went wrong! please check the errors below."
|
||||
msgstr ""
|
||||
@ -146,3 +136,9 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
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, fuzzy
|
||||
msgid "oops, something went wrong! please check the errors below"
|
||||
msgstr ""
|
||||
|
@ -55,38 +55,32 @@ msgstr ""
|
||||
msgid "Password reset successfully."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:31
|
||||
#: 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:136
|
||||
#: 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: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
|
||||
#: 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:155
|
||||
#: 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:90
|
||||
#: 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:72
|
||||
#: 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 ""
|
||||
@ -112,7 +106,7 @@ msgstr ""
|
||||
msgid "language updated successfully."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:95
|
||||
#: lib/memex_web/live/home_live.html.heex:90
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "register to setup memEx"
|
||||
msgstr ""
|
||||
@ -156,3 +150,9 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
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, fuzzy
|
||||
msgid "are you sure you want to delete %{email}? this action is permanent!"
|
||||
msgstr ""
|
||||
|
@ -10,26 +10,11 @@
|
||||
msgid ""
|
||||
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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Confirm your account"
|
||||
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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reconnecting..."
|
||||
@ -40,11 +25,6 @@ msgstr ""
|
||||
msgid "Reset your password"
|
||||
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/note_live/show.html.heex:19
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:27
|
||||
@ -52,22 +32,23 @@ msgstr ""
|
||||
msgid "Visibility: %{visibility}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:76
|
||||
#: 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:90
|
||||
#: lib/memex_web/live/home_live.html.heex:85
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "admins:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:58
|
||||
#: 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_settings/edit.html.heex:80
|
||||
#: 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 ""
|
||||
@ -85,33 +66,33 @@ msgstr ""
|
||||
msgid "contexts"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:20
|
||||
#: lib/memex_web/live/home_live.html.heex:18
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "contexts:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:73
|
||||
#: 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:33
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:89
|
||||
#: 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:62
|
||||
#: 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:14
|
||||
#: 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:32
|
||||
#: lib/memex_web/live/home_live.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "document your processes, attaching contexts to each step"
|
||||
msgstr ""
|
||||
@ -121,53 +102,51 @@ msgstr ""
|
||||
msgid "edit invite"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:29
|
||||
#: 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:29
|
||||
#: 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:62
|
||||
#: 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:129
|
||||
#: 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:50
|
||||
#: lib/memex_web/live/home_live.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "features"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: 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:85
|
||||
#: lib/memex_web/live/home_live.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "instance information"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/invite_card.ex:42
|
||||
#: lib/memex_web/components/invite_card.ex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite disabled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:112
|
||||
#: lib/memex_web/live/home_live.html.heex:105
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite only"
|
||||
msgstr ""
|
||||
@ -184,7 +163,7 @@ msgstr ""
|
||||
msgid "log in"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:55
|
||||
#: lib/memex_web/live/home_live.html.heex:50
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "multi-user:"
|
||||
msgstr ""
|
||||
@ -194,7 +173,8 @@ msgstr ""
|
||||
msgid "new invite"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/templates/user_settings/edit.html.heex:73
|
||||
#: 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 ""
|
||||
@ -217,7 +197,7 @@ msgstr ""
|
||||
msgid "notes"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:11
|
||||
#: lib/memex_web/live/home_live.html.heex:9
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "notes:"
|
||||
msgstr ""
|
||||
@ -230,27 +210,27 @@ msgstr ""
|
||||
msgid "pipelines"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:29
|
||||
#: lib/memex_web/live/home_live.html.heex:27
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "pipelines:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:67
|
||||
#: 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:64
|
||||
#: lib/memex_web/live/home_live.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "privacy:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:23
|
||||
#: 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:111
|
||||
#: lib/memex_web/live/home_live.html.heex:104
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "public signups"
|
||||
msgstr ""
|
||||
@ -260,12 +240,12 @@ msgstr ""
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:108
|
||||
#: lib/memex_web/live/home_live.html.heex:101
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "registration:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:167
|
||||
#: lib/memex_web/live/home_live.html.heex:160
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "report bugs or request features"
|
||||
msgstr ""
|
||||
@ -285,7 +265,7 @@ msgstr ""
|
||||
msgid "select privacy"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:77
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "set unlimited"
|
||||
msgstr ""
|
||||
@ -310,17 +290,17 @@ msgstr ""
|
||||
msgid "tags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:114
|
||||
#: 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:118
|
||||
#: lib/memex_web/live/home_live.html.heex:111
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "version:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:145
|
||||
#: lib/memex_web/live/home_live.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "view the source code"
|
||||
msgstr ""
|
||||
@ -497,62 +477,62 @@ msgstr ""
|
||||
msgid "use [[context-slug]] to link to a context"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:72
|
||||
#: 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:102
|
||||
#: 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:118
|
||||
#: 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:62
|
||||
#: 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:67
|
||||
#: 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:99
|
||||
#: 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:83
|
||||
#: 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:113
|
||||
#: 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:31
|
||||
#: lib/memex_web/live/faq_live.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "memex"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:51
|
||||
#: 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:20
|
||||
#: 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:88
|
||||
#: 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 ""
|
||||
@ -562,27 +542,27 @@ msgstr ""
|
||||
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:96
|
||||
#: 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:80
|
||||
#: 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:110
|
||||
#: 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:59
|
||||
#: 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:41
|
||||
#: lib/memex_web/live/faq_live.html.heex:38
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "zettelkasten"
|
||||
msgstr ""
|
||||
@ -597,22 +577,22 @@ msgstr ""
|
||||
msgid "forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:126
|
||||
#: 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:134
|
||||
#: 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:139
|
||||
#: 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:129
|
||||
#: 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 ""
|
||||
@ -622,32 +602,73 @@ msgstr ""
|
||||
msgid "language"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/user_card.ex:23
|
||||
#: 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:34
|
||||
#: 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:37
|
||||
#: 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:41
|
||||
#: 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:32
|
||||
#: 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:52
|
||||
#: 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 ""
|
||||
|
163
priv/gettext/en/LC_MESSAGES/actions.po
Normal file
163
priv/gettext/en/LC_MESSAGES/actions.po
Normal file
@ -0,0 +1,163 @@
|
||||
## "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 ""
|
675
priv/gettext/en/LC_MESSAGES/default.po
Normal file
675
priv/gettext/en/LC_MESSAGES/default.po
Normal file
@ -0,0 +1,675 @@
|
||||
## "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 ""
|
93
priv/gettext/en/LC_MESSAGES/emails.po
Normal file
93
priv/gettext/en/LC_MESSAGES/emails.po
Normal file
@ -0,0 +1,93 @@
|
||||
## "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 ""
|
145
priv/gettext/en/LC_MESSAGES/errors.po
Normal file
145
priv/gettext/en/LC_MESSAGES/errors.po
Normal file
@ -0,0 +1,145 @@
|
||||
## "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 ""
|
159
priv/gettext/en/LC_MESSAGES/prompts.po
Normal file
159
priv/gettext/en/LC_MESSAGES/prompts.po
Normal file
@ -0,0 +1,159 @@
|
||||
## "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 ""
|
@ -20,12 +20,6 @@ msgstr ""
|
||||
msgid "Invalid email or password"
|
||||
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
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reset password link is invalid or it has expired."
|
||||
@ -79,12 +73,6 @@ msgstr ""
|
||||
msgid "must have the @ sign and no spaces"
|
||||
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:71
|
||||
#: lib/memex/notes/note.ex:57
|
||||
@ -123,6 +111,8 @@ msgid "invalid format: only numbers, letters and hyphen are accepted. tags must
|
||||
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 ""
|
||||
@ -146,3 +136,9 @@ msgstr ""
|
||||
#, 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 ""
|
||||
|
@ -55,38 +55,32 @@ msgstr ""
|
||||
msgid "Password reset successfully."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:31
|
||||
#: 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:136
|
||||
#: 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: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
|
||||
#: 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:155
|
||||
#: 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:90
|
||||
#: 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:72
|
||||
#: 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 ""
|
||||
@ -112,7 +106,7 @@ msgstr ""
|
||||
msgid "language updated successfully."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/home_live.html.heex:95
|
||||
#: lib/memex_web/live/home_live.html.heex:90
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "register to setup memEx"
|
||||
msgstr ""
|
||||
@ -156,3 +150,9 @@ msgstr ""
|
||||
#, 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 ""
|
||||
|
176
test/memex/accounts/invites_test.exs
Normal file
176
test/memex/accounts/invites_test.exs
Normal file
@ -0,0 +1,176 @@
|
||||
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
|
@ -10,8 +10,6 @@ defmodule Memex.AccountsTest do
|
||||
|
||||
@moduletag :accounts_test
|
||||
|
||||
doctest Accounts, import: true
|
||||
|
||||
describe "get_user_by_email/1" do
|
||||
test "does not return the user if the email does not exist" do
|
||||
refute Accounts.get_user_by_email("unknown@example.com")
|
||||
@ -514,7 +512,7 @@ defmodule Memex.AccountsTest do
|
||||
|
||||
test "deletes all tokens for the given user", %{user: user} do
|
||||
_session_token = Accounts.generate_user_session_token(user)
|
||||
{:ok, _} = Accounts.reset_user_password(user, %{"password" => "new valid password"})
|
||||
{:ok, _user} = Accounts.reset_user_password(user, %{"password" => "new valid password"})
|
||||
refute Repo.get_by(UserToken, user_id: user.id)
|
||||
end
|
||||
end
|
||||
|
@ -22,13 +22,12 @@ defmodule MemexWeb.ConnCase do
|
||||
|
||||
using do
|
||||
quote do
|
||||
# Import conveniences for testing with connections
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
import Memex.Fixtures
|
||||
import MemexWeb.ConnCase
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
import Phoenix.ConnTest
|
||||
# Import conveniences for testing with connections
|
||||
import Plug.Conn
|
||||
import Phoenix.ConnTest
|
||||
|
||||
alias MemexWeb.Router.Helpers, as: Routes
|
||||
|
||||
|
@ -2,6 +2,7 @@ defmodule Memex.Fixtures do
|
||||
@moduledoc """
|
||||
This module defines test helpers for creating entities
|
||||
"""
|
||||
|
||||
alias Memex.{Accounts, Accounts.User, Email, Repo}
|
||||
|
||||
def unique_user_email, do: "user#{System.unique_integer()}@example.com"
|
||||
|
Loading…
Reference in New Issue
Block a user