Compare commits
2 Commits
0.1.17
...
4770f5ed4b
Author | SHA1 | Date | |
---|---|---|---|
4770f5ed4b | |||
f1692526de |
@@ -17,7 +17,7 @@ steps:
|
||||
- .mix
|
||||
|
||||
- name: test
|
||||
image: elixir:1.18.0-alpine
|
||||
image: elixir:1.14.4-alpine
|
||||
environment:
|
||||
TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test
|
||||
HOST: testing.example.tld
|
||||
@@ -26,8 +26,8 @@ steps:
|
||||
MIX_ENV: test
|
||||
commands:
|
||||
- apk add --no-cache build-base npm git
|
||||
- mix local.rebar --force
|
||||
- mix local.hex --force
|
||||
- mix local.rebar --force --if-missing
|
||||
- mix local.hex --force --if-missing
|
||||
- mix deps.get
|
||||
- npm set cache .npm
|
||||
- npm --prefix ./assets ci --no-audit --prefer-offline
|
||||
|
@@ -1,3 +1,3 @@
|
||||
elixir 1.18.0-otp-27
|
||||
erlang 27.2
|
||||
nodejs 23.5.0
|
||||
elixir 1.15.5-otp-26
|
||||
erlang 26.0.2
|
||||
nodejs 20.6.0
|
||||
|
@@ -1,4 +1,4 @@
|
||||
FROM elixir:1.18.0-alpine AS build
|
||||
FROM elixir:1.14.4-alpine AS build
|
||||
|
||||
# install build dependencies
|
||||
RUN apk add --no-cache build-base npm git python3
|
||||
@@ -7,8 +7,8 @@ RUN apk add --no-cache build-base npm git python3
|
||||
WORKDIR /app
|
||||
|
||||
# install hex + rebar
|
||||
RUN mix local.rebar --force && \
|
||||
mix local.hex --force
|
||||
RUN mix local.hex --force && \
|
||||
mix local.rebar --force
|
||||
|
||||
# set build ENV
|
||||
ENV MIX_ENV=prod
|
||||
@@ -37,7 +37,7 @@ RUN mix do compile, release
|
||||
FROM alpine:latest AS app
|
||||
|
||||
RUN apk upgrade --no-cache && \
|
||||
apk add --no-cache bash openssl libssl3 libcrypto3 libgcc libstdc++ ncurses-libs
|
||||
apk add --no-cache bash openssl libssl1.1 libcrypto1.1 libgcc libstdc++ ncurses-libs
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
@use "tailwindcss/base";
|
||||
@use "tailwindcss/components";
|
||||
@use "tailwindcss/utilities";
|
||||
@use "components" as memex-components;
|
||||
@import "tailwindcss/base";
|
||||
@import "tailwindcss/components";
|
||||
@import "tailwindcss/utilities";
|
||||
|
||||
$fa-font-path: "@fortawesome/fontawesome-free/webfonts";
|
||||
@import "@fortawesome/fontawesome-free/scss/fontawesome";
|
||||
@@ -9,6 +8,8 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
|
||||
@import "@fortawesome/fontawesome-free/scss/solid";
|
||||
@import "@fortawesome/fontawesome-free/scss/brands";
|
||||
|
||||
@import "components";
|
||||
|
||||
/* fix firefox scrollbars */
|
||||
* {
|
||||
scrollbar-width: auto;
|
||||
|
@@ -26,19 +26,15 @@ import 'phoenix_html'
|
||||
import { Socket } from 'phoenix'
|
||||
import { LiveSocket } from 'phoenix_live_view'
|
||||
import topbar from 'topbar'
|
||||
|
||||
import CtrlEnter from './ctrlenter'
|
||||
import Date from './date'
|
||||
import DateTime from './datetime'
|
||||
import SanitizeTags from './sanitizetags'
|
||||
import SanitizeTitles from './sanitizetitles'
|
||||
|
||||
const csrfTokenElement = document.querySelector("meta[name='csrf-token']")
|
||||
let csrfToken
|
||||
if (csrfTokenElement) { csrfToken = csrfTokenElement.getAttribute('content') }
|
||||
const liveSocket = new LiveSocket('/live', Socket, {
|
||||
params: { _csrf_token: csrfToken },
|
||||
hooks: { CtrlEnter, Date, DateTime, SanitizeTags, SanitizeTitles }
|
||||
hooks: { Date, DateTime }
|
||||
})
|
||||
|
||||
// Show progress bar on live navigation and form submits
|
||||
|
@@ -1,11 +0,0 @@
|
||||
export default {
|
||||
addFormSubmit (context) {
|
||||
context.el.addEventListener('keydown', (e) => {
|
||||
if (e.ctrlKey && e.key === 'Enter') {
|
||||
context.el.dispatchEvent(
|
||||
new Event('submit', { bubbles: true, cancelable: true }))
|
||||
}
|
||||
})
|
||||
},
|
||||
mounted () { this.addFormSubmit(this) }
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
export default {
|
||||
SanitizeTags (context) {
|
||||
context.el.addEventListener('keyup', (e) => {
|
||||
e.target.value = e.target.value
|
||||
.replace(' ', ',')
|
||||
.replace(',,', ',')
|
||||
.replace(/[^a-zA-Z0-9,]/, '')
|
||||
})
|
||||
},
|
||||
mounted () { this.SanitizeTags(this) }
|
||||
}
|
@@ -1,10 +0,0 @@
|
||||
export default {
|
||||
SanitizeTitles (context) {
|
||||
context.el.addEventListener('keyup', (e) => {
|
||||
e.target.value = e.target.value
|
||||
.replace(' ', '-')
|
||||
.replace(/[^a-zA-Z0-9-]/, '')
|
||||
})
|
||||
},
|
||||
mounted () { this.SanitizeTitles(this) }
|
||||
}
|
20969
assets/package-lock.json
generated
20969
assets/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,8 @@
|
||||
"description": " ",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "v23.5.0"
|
||||
"node": "v20.6.0",
|
||||
"npm": "9.8.1"
|
||||
},
|
||||
"scripts": {
|
||||
"deploy": "NODE_ENV=production webpack --mode production",
|
||||
@@ -12,35 +13,35 @@
|
||||
"test": "standard"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fontsource/nunito-sans": "^5.1.1",
|
||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||
"@fontsource/nunito-sans": "^5.0.8",
|
||||
"@fortawesome/fontawesome-free": "^6.4.2",
|
||||
"phoenix": "file:../deps/phoenix",
|
||||
"phoenix_html": "file:../deps/phoenix_html",
|
||||
"phoenix_live_view": "file:../deps/phoenix_live_view",
|
||||
"topbar": "^3.0.0"
|
||||
"topbar": "^2.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.26.0",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"babel-loader": "^9.2.1",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"css-loader": "^7.1.2",
|
||||
"css-minimizer-webpack-plugin": "^7.0.0",
|
||||
"@babel/core": "^7.22.15",
|
||||
"@babel/preset-env": "^7.22.15",
|
||||
"autoprefixer": "^10.4.15",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"css-loader": "^6.8.1",
|
||||
"css-minimizer-webpack-plugin": "^5.0.1",
|
||||
"file-loader": "^6.2.0",
|
||||
"mini-css-extract-plugin": "^2.9.2",
|
||||
"npm-check-updates": "^17.1.13",
|
||||
"postcss": "^8.4.49",
|
||||
"postcss-import": "^16.1.0",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"postcss-preset-env": "^10.1.3",
|
||||
"sass": "^1.83.0",
|
||||
"sass-loader": "^16.0.4",
|
||||
"standard": "^17.1.2",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"terser-webpack-plugin": "^5.3.11",
|
||||
"webpack": "^5.97.1",
|
||||
"webpack-cli": "^6.0.1",
|
||||
"webpack-dev-server": "^5.2.0"
|
||||
"mini-css-extract-plugin": "^2.7.6",
|
||||
"npm-check-updates": "^16.13.3",
|
||||
"postcss": "^8.4.29",
|
||||
"postcss-import": "^15.1.0",
|
||||
"postcss-loader": "^7.3.3",
|
||||
"postcss-preset-env": "^9.1.3",
|
||||
"sass": "^1.66.1",
|
||||
"sass-loader": "^13.3.2",
|
||||
"standard": "^17.1.0",
|
||||
"tailwindcss": "^3.3.3",
|
||||
"terser-webpack-plugin": "^5.3.9",
|
||||
"webpack": "^5.88.2",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^4.15.1"
|
||||
}
|
||||
}
|
||||
|
34
changelog.md
34
changelog.md
@@ -1,37 +1,3 @@
|
||||
# v0.1.17
|
||||
- Fix new invite button not working
|
||||
- Fix some descriptions possibly overflowing widths
|
||||
- Update dependencies
|
||||
|
||||
# v0.1.16
|
||||
- Fix empty invite index page
|
||||
- Fix faq copy
|
||||
- Fix issue with emails
|
||||
- Update deps
|
||||
|
||||
# v0.1.15
|
||||
- Sanitize titles while they are being typed
|
||||
- Sanitize tags while they are being typed
|
||||
- Remove requirement for note and content to have content
|
||||
- Prevent possible additional submissions
|
||||
- Fix content being displayed when blank
|
||||
|
||||
# v0.1.14
|
||||
- Fix issue with item content not able to be displayed sometimes
|
||||
|
||||
# v0.1.13
|
||||
- Update dependencies
|
||||
- Fix debounces
|
||||
- Allow space as delimiter for tags
|
||||
- Add bottom padding to page
|
||||
- Make pipeline step not require content
|
||||
- Make content previews resizable
|
||||
- Fix live flashes not dismissable by click
|
||||
- Fix disconnection modal not displaying
|
||||
- Submit items with ctrl-enter
|
||||
- Display backlinks in pipeline description
|
||||
- Modify backlink format
|
||||
|
||||
# v0.1.12
|
||||
- Code quality fixes
|
||||
- Fix error/404 pages not rendering properly
|
||||
|
@@ -9,9 +9,8 @@ config :bcrypt_elixir, :log_rounds, 1
|
||||
# to provide built-in test partitioning in CI environment.
|
||||
# Run `mix help test` for more information.
|
||||
config :memex, Memex.Repo,
|
||||
pool_size: 10,
|
||||
pool: Ecto.Adapters.SQL.Sandbox,
|
||||
timeout: 60000
|
||||
pool_size: 10
|
||||
|
||||
# We don't run a server during test. If one is required,
|
||||
# you can enable the server option below.
|
||||
@@ -27,10 +26,10 @@ config :memex, Memex.Mailer, adapter: Swoosh.Adapters.Test
|
||||
config :memex, Memex.Accounts, registration: "public"
|
||||
|
||||
# Print only warnings and errors during test
|
||||
config :logger, level: :warning
|
||||
config :logger, level: :warn
|
||||
|
||||
# Initialize plugs at runtime for faster test compilation
|
||||
config :phoenix, :plug_init_mode, :runtime
|
||||
|
||||
# Disable Oban
|
||||
config :memex, Oban, queues: false, plugins: false, testing: :manual
|
||||
config :memex, Oban, queues: false, plugins: false
|
||||
|
@@ -219,7 +219,7 @@ defmodule Memex.Accounts do
|
||||
|
||||
with {:ok, query} <- UserToken.verify_change_email_token_query(token, context),
|
||||
%UserToken{sent_to: email} <- Repo.one(query),
|
||||
{:ok, _result} <- Repo.transaction(user_email_multi(user, email, context)) do
|
||||
{:ok, _} <- Repo.transaction(user_email_multi(user, email, context)) do
|
||||
:ok
|
||||
else
|
||||
_error_tuple -> :error
|
||||
@@ -405,15 +405,15 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> admin?(%User{role: :admin})
|
||||
iex> is_admin?(%User{role: :admin})
|
||||
true
|
||||
|
||||
iex> admin?(%User{})
|
||||
iex> is_admin?(%User{})
|
||||
false
|
||||
|
||||
"""
|
||||
@spec admin?(User.t()) :: boolean()
|
||||
def admin?(%User{id: user_id}) do
|
||||
@spec is_admin?(User.t()) :: boolean()
|
||||
def is_admin?(%User{id: user_id}) do
|
||||
Repo.exists?(from u in User, where: u.id == ^user_id, where: u.role == :admin)
|
||||
end
|
||||
|
||||
@@ -422,16 +422,16 @@ defmodule Memex.Accounts do
|
||||
|
||||
## Examples
|
||||
|
||||
iex> already_admin?(%User{role: :admin})
|
||||
iex> is_already_admin?(%User{role: :admin})
|
||||
true
|
||||
|
||||
iex> already_admin?(%User{})
|
||||
iex> is_already_admin?(%User{})
|
||||
false
|
||||
|
||||
"""
|
||||
@spec already_admin?(User.t() | nil) :: boolean()
|
||||
def already_admin?(%User{role: :admin}), do: true
|
||||
def already_admin?(_invalid_user), do: false
|
||||
@spec is_already_admin?(User.t() | nil) :: boolean()
|
||||
def is_already_admin?(%User{role: :admin}), do: true
|
||||
def is_already_admin?(_invalid_user), do: false
|
||||
|
||||
## Confirmation
|
||||
|
||||
|
@@ -7,8 +7,8 @@ defmodule Memex.Email do
|
||||
`lib/memex_web/components/layouts/email_text.txt.eex` for text emails.
|
||||
"""
|
||||
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Swoosh.Email
|
||||
import MemexWeb.Gettext
|
||||
import Phoenix.Template
|
||||
alias Memex.Accounts.User
|
||||
alias MemexWeb.{EmailHTML, Layouts}
|
@@ -4,8 +4,8 @@ defmodule Memex.Accounts.User do
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
import MemexWeb.Gettext
|
||||
alias Ecto.{Association, Changeset, UUID}
|
||||
alias Memex.Accounts.{Invite, User}
|
||||
|
||||
@@ -140,7 +140,7 @@ defmodule Memex.Accounts.User do
|
||||
|> cast(attrs, [:email])
|
||||
|> validate_email()
|
||||
|> case do
|
||||
%{changes: %{email: _email}} = changeset -> changeset
|
||||
%{changes: %{email: _}} = changeset -> changeset
|
||||
%{} = changeset -> add_error(changeset, :email, dgettext("errors", "did not change"))
|
||||
end
|
||||
end
|
||||
|
@@ -155,7 +155,7 @@ defmodule Memex.Accounts.UserToken do
|
||||
from t in __MODULE__, where: t.user_id == ^user.id
|
||||
end
|
||||
|
||||
def user_and_contexts_query(user, [_head | _rest] = contexts) do
|
||||
def user_and_contexts_query(user, [_ | _] = contexts) do
|
||||
from t in __MODULE__, where: t.user_id == ^user.id and t.context in ^contexts
|
||||
end
|
||||
end
|
||||
|
@@ -229,12 +229,12 @@ defmodule Memex.Contexts do
|
||||
context |> Context.update_changeset(attrs, user)
|
||||
end
|
||||
|
||||
@spec owner_or_admin?(Context.t(), User.t()) :: boolean()
|
||||
def owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def owner_or_admin?(_context, _other_user), do: false
|
||||
@spec is_owner_or_admin?(Context.t(), User.t()) :: boolean()
|
||||
def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def is_owner_or_admin?(_context, _other_user), do: false
|
||||
|
||||
@spec owner?(Context.t(), User.t()) :: boolean()
|
||||
def owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner?(_context, _other_user), do: false
|
||||
@spec is_owner?(Context.t(), User.t()) :: boolean()
|
||||
def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner?(_context, _other_user), do: false
|
||||
end
|
||||
|
@@ -4,8 +4,8 @@ defmodule Memex.Contexts.Context do
|
||||
into a single consideration
|
||||
"""
|
||||
use Ecto.Schema
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
import MemexWeb.Gettext
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Repo}
|
||||
|
||||
@@ -57,7 +57,7 @@ defmodule Memex.Contexts.Context do
|
||||
|> validate_format(:slug, ~r/^[\p{L}\p{N}\-]+$/,
|
||||
message: dgettext("errors", "invalid format: only numbers, letters and hyphen are accepted")
|
||||
)
|
||||
|> validate_required([:slug, :user_id, :visibility])
|
||||
|> validate_required([:slug, :content, :user_id, :visibility])
|
||||
|> unique_constraint(:slug)
|
||||
|> unsafe_validate_unique(:slug, Repo)
|
||||
end
|
||||
@@ -70,7 +70,7 @@ defmodule Memex.Contexts.Context do
|
||||
|> validate_format(:slug, ~r/^[\p{L}\p{N}\-]+$/,
|
||||
message: dgettext("errors", "invalid format: only numbers, letters and hyphen are accepted")
|
||||
)
|
||||
|> validate_required([:slug, :visibility])
|
||||
|> validate_required([:slug, :content, :visibility])
|
||||
|> unique_constraint(:slug)
|
||||
|> unsafe_validate_unique(:slug, Repo)
|
||||
end
|
||||
@@ -79,11 +79,11 @@ defmodule Memex.Contexts.Context do
|
||||
changeset
|
||||
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|
||||
|> cast(attrs, [:tags_string])
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/,
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/,
|
||||
message:
|
||||
dgettext(
|
||||
"errors",
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
|
||||
)
|
||||
)
|
||||
|> cast_tags()
|
||||
@@ -98,9 +98,9 @@ defmodule Memex.Contexts.Context do
|
||||
|
||||
defp process_tags(tags_string) when tags_string |> is_binary() do
|
||||
tags_string
|
||||
|> String.split([",", " "], trim: true)
|
||||
|> String.split(",", trim: true)
|
||||
|> Enum.map(fn str -> str |> String.trim() end)
|
||||
|> Enum.reject(fn str -> str in [nil, ""] end)
|
||||
|> Enum.reject(fn str -> str |> is_nil() end)
|
||||
|> Enum.sort()
|
||||
end
|
||||
|
||||
|
@@ -229,12 +229,12 @@ defmodule Memex.Notes do
|
||||
note |> Note.update_changeset(attrs, user)
|
||||
end
|
||||
|
||||
@spec owner_or_admin?(Note.t(), User.t()) :: boolean()
|
||||
def owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def owner_or_admin?(_context, _other_user), do: false
|
||||
@spec is_owner_or_admin?(Note.t(), User.t()) :: boolean()
|
||||
def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def is_owner_or_admin?(_context, _other_user), do: false
|
||||
|
||||
@spec owner?(Note.t(), User.t()) :: boolean()
|
||||
def owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner?(_context, _other_user), do: false
|
||||
@spec is_owner?(Note.t(), User.t()) :: boolean()
|
||||
def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner?(_context, _other_user), do: false
|
||||
end
|
||||
|
@@ -3,8 +3,8 @@ defmodule Memex.Notes.Note do
|
||||
Schema for a user-written note
|
||||
"""
|
||||
use Ecto.Schema
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
import MemexWeb.Gettext
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Repo}
|
||||
|
||||
@@ -56,7 +56,7 @@ defmodule Memex.Notes.Note do
|
||||
|> validate_format(:slug, ~r/^[\p{L}\p{N}\-]+$/,
|
||||
message: dgettext("errors", "invalid format: only numbers, letters and hyphen are accepted")
|
||||
)
|
||||
|> validate_required([:slug, :user_id, :visibility])
|
||||
|> validate_required([:slug, :content, :user_id, :visibility])
|
||||
|> unique_constraint(:slug)
|
||||
|> unsafe_validate_unique(:slug, Repo)
|
||||
end
|
||||
@@ -69,7 +69,7 @@ defmodule Memex.Notes.Note do
|
||||
|> validate_format(:slug, ~r/^[\p{L}\p{N}\-]+$/,
|
||||
message: dgettext("errors", "invalid format: only numbers, letters and hyphen are accepted")
|
||||
)
|
||||
|> validate_required([:slug, :visibility])
|
||||
|> validate_required([:slug, :content, :visibility])
|
||||
|> unique_constraint(:slug)
|
||||
|> unsafe_validate_unique(:slug, Repo)
|
||||
end
|
||||
@@ -78,11 +78,11 @@ defmodule Memex.Notes.Note do
|
||||
changeset
|
||||
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|
||||
|> cast(attrs, [:tags_string])
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/,
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/,
|
||||
message:
|
||||
dgettext(
|
||||
"errors",
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
|
||||
)
|
||||
)
|
||||
|> cast_tags()
|
||||
@@ -97,9 +97,9 @@ defmodule Memex.Notes.Note do
|
||||
|
||||
defp process_tags(tags_string) when tags_string |> is_binary() do
|
||||
tags_string
|
||||
|> String.split([",", " "], trim: true)
|
||||
|> String.split(",", trim: true)
|
||||
|> Enum.map(fn str -> str |> String.trim() end)
|
||||
|> Enum.reject(fn str -> str in [nil, ""] end)
|
||||
|> Enum.reject(fn str -> str |> is_nil() end)
|
||||
|> Enum.sort()
|
||||
end
|
||||
|
||||
|
@@ -231,12 +231,12 @@ defmodule Memex.Pipelines do
|
||||
pipeline |> Pipeline.update_changeset(attrs, user)
|
||||
end
|
||||
|
||||
@spec owner_or_admin?(Pipeline.t(), User.t()) :: boolean()
|
||||
def owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def owner_or_admin?(_context, _other_user), do: false
|
||||
@spec is_owner_or_admin?(Pipeline.t(), User.t()) :: boolean()
|
||||
def is_owner_or_admin?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner_or_admin?(_context, %{role: :admin}), do: true
|
||||
def is_owner_or_admin?(_context, _other_user), do: false
|
||||
|
||||
@spec owner?(Pipeline.t(), User.t()) :: boolean()
|
||||
def owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def owner?(_context, _other_user), do: false
|
||||
@spec is_owner?(Pipeline.t(), User.t()) :: boolean()
|
||||
def is_owner?(%{user_id: user_id}, %{id: user_id}), do: true
|
||||
def is_owner?(_context, _other_user), do: false
|
||||
end
|
||||
|
@@ -3,8 +3,8 @@ defmodule Memex.Pipelines.Pipeline do
|
||||
Represents a chain of considerations to take to accomplish a task
|
||||
"""
|
||||
use Ecto.Schema
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
import MemexWeb.Gettext
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Memex.{Accounts.User, Pipelines.Steps.Step, Repo}
|
||||
|
||||
@@ -81,11 +81,11 @@ defmodule Memex.Pipelines.Pipeline do
|
||||
changeset
|
||||
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|
||||
|> cast(attrs, [:tags_string])
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\, ]+$/,
|
||||
|> validate_format(:tags_string, ~r/^[\p{L}\p{N}\-\,]+$/,
|
||||
message:
|
||||
dgettext(
|
||||
"errors",
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
|
||||
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
|
||||
)
|
||||
)
|
||||
|> cast_tags()
|
||||
@@ -100,9 +100,9 @@ defmodule Memex.Pipelines.Pipeline do
|
||||
|
||||
defp process_tags(tags_string) when tags_string |> is_binary() do
|
||||
tags_string
|
||||
|> String.split([",", " "], trim: true)
|
||||
|> String.split(",", trim: true)
|
||||
|> Enum.map(fn str -> str |> String.trim() end)
|
||||
|> Enum.reject(fn str -> str in [nil, ""] end)
|
||||
|> Enum.reject(fn str -> str |> is_nil() end)
|
||||
|> Enum.sort()
|
||||
end
|
||||
|
||||
|
@@ -50,7 +50,7 @@ defmodule Memex.Pipelines.Steps.Step do
|
||||
%__MODULE__{}
|
||||
|> cast(attrs, [:title, :content])
|
||||
|> change(pipeline_id: pipeline_id, user_id: user_id, position: position)
|
||||
|> validate_required([:title, :user_id, :position])
|
||||
|> validate_required([:title, :content, :user_id, :position])
|
||||
end
|
||||
|
||||
@spec update_changeset(t(), attrs :: map(), User.t()) ::
|
||||
@@ -62,7 +62,7 @@ defmodule Memex.Pipelines.Steps.Step do
|
||||
) do
|
||||
step
|
||||
|> cast(attrs, [:title, :content])
|
||||
|> validate_required([:title, :user_id, :position])
|
||||
|> validate_required([:title, :content, :user_id, :position])
|
||||
end
|
||||
|
||||
@spec position_changeset(t(), position :: non_neg_integer(), User.t()) :: changeset()
|
||||
@@ -73,6 +73,6 @@ defmodule Memex.Pipelines.Steps.Step do
|
||||
) do
|
||||
step
|
||||
|> change(position: position)
|
||||
|> validate_required([:title, :user_id, :position])
|
||||
|> validate_required([:title, :content, :user_id, :position])
|
||||
end
|
||||
end
|
||||
|
@@ -42,9 +42,9 @@ defmodule MemexWeb do
|
||||
formats: [:html, :json],
|
||||
layouts: [html: MemexWeb.Layouts]
|
||||
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
import Plug.Conn
|
||||
import MemexWeb.Gettext
|
||||
|
||||
unquote(verified_routes())
|
||||
end
|
||||
@@ -69,7 +69,6 @@ defmodule MemexWeb do
|
||||
|
||||
def html do
|
||||
quote do
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
use Phoenix.Component
|
||||
|
||||
# Import convenience functions from controllers
|
||||
@@ -83,10 +82,12 @@ defmodule MemexWeb do
|
||||
|
||||
defp html_helpers do
|
||||
quote do
|
||||
use PhoenixHTMLHelpers
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Phoenix.{Component, HTML, HTML.Form}
|
||||
import MemexWeb.{ErrorHelpers, CoreComponents, HTMLHelpers}
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
use Phoenix.HTML
|
||||
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
import Phoenix.Component
|
||||
import MemexWeb.{ErrorHelpers, Gettext, CoreComponents, HTMLHelpers}
|
||||
|
||||
# Shortcut for generating JS commands
|
||||
alias Phoenix.LiveView.JS
|
||||
|
@@ -2,15 +2,13 @@ defmodule MemexWeb.CoreComponents do
|
||||
@moduledoc """
|
||||
Provides core UI components.
|
||||
"""
|
||||
use PhoenixHTMLHelpers
|
||||
use Phoenix.Component
|
||||
use MemexWeb, :verified_routes
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import MemexWeb.HTMLHelpers
|
||||
import MemexWeb.{Gettext, HTMLHelpers}
|
||||
alias Memex.{Accounts, Accounts.Invite, Accounts.User}
|
||||
alias Memex.Contexts.Context
|
||||
alias Memex.Notes.Note
|
||||
alias Memex.Pipelines.{Pipeline, Steps.Step}
|
||||
alias Memex.Pipelines.Steps.Step
|
||||
alias Phoenix.HTML
|
||||
alias Phoenix.LiveView.JS
|
||||
|
||||
@@ -132,126 +130,53 @@ defmodule MemexWeb.CoreComponents do
|
||||
|
||||
def step_content(assigns)
|
||||
|
||||
attr :pipeline, Pipeline, required: true
|
||||
defp add_links_to_content(content, data_qa_prefix) do
|
||||
# replace links
|
||||
|
||||
def pipeline_content(assigns)
|
||||
# link regex from
|
||||
# https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url
|
||||
# and modified with additional schemes from
|
||||
# https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
|
||||
|
||||
defp display_links(record) do
|
||||
record
|
||||
|> get_content()
|
||||
|> replace_hyperlinks(record)
|
||||
|> replace_triple_links(record)
|
||||
|> replace_double_links(record)
|
||||
|> replace_single_links(record)
|
||||
|> HTML.raw()
|
||||
end
|
||||
content =
|
||||
Regex.replace(
|
||||
~r<((file|git|https?|ipfs|ipns|irc|jabber|magnet|mailto|mumble|tel|udp|xmpp):\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*))>,
|
||||
content,
|
||||
fn _whole_match, link ->
|
||||
link =
|
||||
HTML.Link.link(
|
||||
link,
|
||||
to: link,
|
||||
class: "link inline",
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer"
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
defp get_content(%{content: content}), do: content |> get_text()
|
||||
defp get_content(%{description: description}), do: description |> get_text()
|
||||
defp get_content(_fallthrough), do: nil |> get_text()
|
||||
"</p>#{link}<p class=\"inline\">"
|
||||
end
|
||||
)
|
||||
|
||||
defp get_text(string) when is_binary(string), do: string
|
||||
defp get_text(_fallthrough), do: ""
|
||||
content =
|
||||
Regex.replace(
|
||||
~r/\[\[([\p{L}\p{N}\-]+)\]\]/,
|
||||
content,
|
||||
fn _whole_match, slug ->
|
||||
link =
|
||||
HTML.Link.link(
|
||||
"[[#{slug}]]",
|
||||
to: ~p"/note/#{slug}",
|
||||
class: "link inline",
|
||||
data: [qa: "#{data_qa_prefix}-#{slug}"]
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
# replaces hyperlinks like https://bubbletea.dev
|
||||
#
|
||||
# link regex from
|
||||
# https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url
|
||||
# and modified with additional schemes from
|
||||
# https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
|
||||
defp replace_hyperlinks(content, _record) do
|
||||
Regex.replace(
|
||||
~r<((file|git|https?|ipfs|ipns|irc|jabber|magnet|mailto|mumble|tel|udp|xmpp):\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*))>,
|
||||
content,
|
||||
fn _whole_match, link ->
|
||||
link =
|
||||
link(
|
||||
link,
|
||||
to: link,
|
||||
class: "link inline break-words",
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer"
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
"</p>#{link}<p class=\"inline\">"
|
||||
end
|
||||
)
|
||||
|
||||
"</p>#{link}<p class=\"inline break-words\">"
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
# replaces triple links like [[[slug-title]]]
|
||||
defp replace_triple_links(content, _record) do
|
||||
Regex.replace(
|
||||
~r/(^|[^\[])\[\[\[([\p{L}\p{N}\-]+)\]\]\]($|[^\]])/,
|
||||
content,
|
||||
fn _whole_match, prefix, slug, suffix ->
|
||||
link =
|
||||
link(
|
||||
"[[[#{slug}]]]",
|
||||
to: ~p"/note/#{slug}",
|
||||
class: "link inline break-words"
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
"#{prefix}</p>#{link}<p class=\"inline break-words\">#{suffix}"
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
# replaces double links like [[slug-title]]
|
||||
defp replace_double_links(content, record) do
|
||||
Regex.replace(
|
||||
~r/(^|[^\[])\[\[([\p{L}\p{N}\-]+)\]\]($|[^\]])/,
|
||||
content,
|
||||
fn _whole_match, prefix, slug, suffix ->
|
||||
target =
|
||||
case record do
|
||||
%Pipeline{} -> ~p"/context/#{slug}"
|
||||
%Step{} -> ~p"/context/#{slug}"
|
||||
_context -> ~p"/note/#{slug}"
|
||||
end
|
||||
|
||||
link =
|
||||
link(
|
||||
"[[#{slug}]]",
|
||||
to: target,
|
||||
class: "link inline break-words"
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
"#{prefix}</p>#{link}<p class=\"inline break-words\">#{suffix}"
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
# replaces single links like [slug-title]
|
||||
defp replace_single_links(content, record) do
|
||||
Regex.replace(
|
||||
~r/(^|[^\[])\[([\p{L}\p{N}\-]+)\]($|[^\]])/,
|
||||
content,
|
||||
fn _whole_match, prefix, slug, suffix ->
|
||||
target =
|
||||
case record do
|
||||
%Pipeline{} -> ~p"/pipeline/#{slug}"
|
||||
%Step{} -> ~p"/pipeline/#{slug}"
|
||||
%Context{} -> ~p"/context/#{slug}"
|
||||
_note -> ~p"/note/#{slug}"
|
||||
end
|
||||
|
||||
link =
|
||||
link(
|
||||
"[#{slug}]",
|
||||
to: target,
|
||||
class: "link inline break-words"
|
||||
)
|
||||
|> HTML.Safe.to_iodata()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
"#{prefix}</p>#{link}<p class=\"inline break-words\">#{suffix}"
|
||||
end
|
||||
)
|
||||
content |> HTML.raw()
|
||||
end
|
||||
end
|
||||
|
@@ -1,8 +1,7 @@
|
||||
<div
|
||||
:if={@context.content}
|
||||
id={"show-context-content-#{@context.id}"}
|
||||
class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
|
||||
class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto"
|
||||
phx-update="ignore"
|
||||
readonly
|
||||
phx-no-format
|
||||
><p class="inline"><%= display_links(@context) %></p></div>
|
||||
><p class="inline"><%= add_links_to_content(@context.content, "context-note") %></p></div>
|
||||
|
@@ -1,8 +1,7 @@
|
||||
<div
|
||||
:if={@note.content}
|
||||
id={"show-note-content-#{@note.id}"}
|
||||
class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
|
||||
class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto"
|
||||
phx-update="ignore"
|
||||
readonly
|
||||
phx-no-format
|
||||
><p class="inline"><%= display_links(@note) %></p></div>
|
||||
><p class="inline"><%= add_links_to_content(@note.content, "note-link") %></p></div>
|
||||
|
@@ -1,8 +0,0 @@
|
||||
<div
|
||||
:if={@pipeline.description}
|
||||
id={"show-pipeline-description-#{@pipeline.id}"}
|
||||
class="input input-primary h-32 min-h-32 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
|
||||
phx-update="ignore"
|
||||
readonly
|
||||
phx-no-format
|
||||
><p class="inline"><%= display_links(@pipeline) %></p></div>
|
@@ -1,8 +1,7 @@
|
||||
<div
|
||||
:if={@step.content}
|
||||
id={"show-step-content-#{@step.id}"}
|
||||
class="input input-primary h-32 min-h-32 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
|
||||
class="input input-primary h-32 min-h-32 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto"
|
||||
phx-update="ignore"
|
||||
readonly
|
||||
phx-no-format
|
||||
><p class="inline"><%= display_links(@step) %></p></div>
|
||||
><p class="inline"><%= add_links_to_content(@step.content, "step-context") %></p></div>
|
||||
|
@@ -38,7 +38,7 @@
|
||||
<li class="mx-2 my-1 border-left border border-primary-700"></li>
|
||||
|
||||
<%= if @current_user do %>
|
||||
<li :if={@current_user |> Accounts.already_admin?()} class="mx-2 my-1">
|
||||
<li :if={@current_user |> Accounts.is_already_admin?()} class="mx-2 my-1">
|
||||
<.link navigate={~p"/invites"} class="text-primary-400 hover:underline">
|
||||
<%= gettext("invites") %>
|
||||
</.link>
|
||||
|
@@ -1,26 +1,13 @@
|
||||
<main role="main" class="pb-8 min-w-full">
|
||||
<main role="main" class="min-h-full min-w-full">
|
||||
<header>
|
||||
<.topbar current_user={assigns[:current_user]} />
|
||||
|
||||
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
|
||||
<p
|
||||
:if={@flash && @flash |> Map.has_key?("info")}
|
||||
class="alert alert-info cursor-pointer"
|
||||
role="alert"
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="info"
|
||||
>
|
||||
<%= Phoenix.Flash.get(@flash, :info) %>
|
||||
<p :if={@flash["info"]} class="alert alert-info" role="alert">
|
||||
<%= @flash["info"] %>
|
||||
</p>
|
||||
|
||||
<p
|
||||
:if={@flash && @flash |> Map.has_key?("error")}
|
||||
class="alert alert-danger cursor-pointer"
|
||||
role="alert"
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="error"
|
||||
>
|
||||
<%= Phoenix.Flash.get(@flash, :error) %>
|
||||
<p :if={@flash["error"]} class="alert alert-danger" role="alert">
|
||||
<%= @flash["error"] %>
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
@@ -29,17 +16,3 @@
|
||||
<%= @inner_content %>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div
|
||||
id="disconnect"
|
||||
class="z-50 fixed opacity-0 bottom-8 right-12 px-8 py-4 w-max h-max
|
||||
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]"
|
||||
>
|
||||
<i class="fas fa-fade text-md fa-satellite-dish"></i>
|
||||
|
||||
<h1 class="title text-md">
|
||||
<%= gettext("Reconnecting...") %>
|
||||
</h1>
|
||||
</div>
|
||||
|
45
lib/memex_web/components/layouts/live.html.heex
Normal file
45
lib/memex_web/components/layouts/live.html.heex
Normal file
@@ -0,0 +1,45 @@
|
||||
<main class="pb-8 min-w-full">
|
||||
<header>
|
||||
<.topbar current_user={assigns[:current_user]} />
|
||||
|
||||
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
|
||||
<p
|
||||
:if={@flash && @flash |> Map.has_key?("info")}
|
||||
class="alert alert-info"
|
||||
role="alert"
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="info"
|
||||
>
|
||||
<%= live_flash(@flash, "info") %>
|
||||
</p>
|
||||
|
||||
<p
|
||||
:if={@flash && @flash |> Map.has_key?("error")}
|
||||
class="alert alert-danger"
|
||||
role="alert"
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="error"
|
||||
>
|
||||
<%= live_flash(@flash, "error") %>
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="mx-4 sm:mx-8 md:mx-16">
|
||||
<%= @inner_content %>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<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-900 text-primary-400
|
||||
flex justify-center items-center space-x-4
|
||||
transition-opacity ease-in-out duration-500 delay-[2000ms]"
|
||||
>
|
||||
<i class="fas fa-fade text-md fa-satellite-dish"></i>
|
||||
|
||||
<h1 class="title text-md">
|
||||
<%= gettext("Reconnecting...") %>
|
||||
</h1>
|
||||
</div>
|
@@ -1,5 +1,5 @@
|
||||
defmodule MemexWeb.ErrorJSON do
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import MemexWeb.Gettext
|
||||
|
||||
def render(template, _assigns) do
|
||||
error_string =
|
||||
|
@@ -4,9 +4,9 @@ defmodule MemexWeb.UserAuth do
|
||||
"""
|
||||
|
||||
use MemexWeb, :verified_routes
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import Plug.Conn
|
||||
import Phoenix.Controller
|
||||
import MemexWeb.Gettext
|
||||
alias Memex.{Accounts, Accounts.User}
|
||||
|
||||
# Make the remember me cookie valid for 60 days.
|
||||
|
@@ -1,6 +1,7 @@
|
||||
defmodule MemexWeb.UserConfirmationController do
|
||||
use MemexWeb, :controller
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
|
||||
import MemexWeb.Gettext
|
||||
alias Memex.Accounts
|
||||
|
||||
def new(conn, _params) do
|
||||
|
@@ -1,6 +1,6 @@
|
||||
defmodule MemexWeb.UserRegistrationController do
|
||||
use MemexWeb, :controller
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import MemexWeb.Gettext
|
||||
alias Ecto.Changeset
|
||||
alias Memex.{Accounts, Accounts.Invites}
|
||||
|
||||
|
@@ -9,7 +9,7 @@
|
||||
action={~p"/users/register"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<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>
|
||||
|
||||
|
@@ -40,7 +40,7 @@ defmodule MemexWeb.UserResetPasswordController do
|
||||
# leaked token giving the user access to the account.
|
||||
def update(conn, %{"user" => user_params}) do
|
||||
case Accounts.reset_user_password(conn.assigns.user, user_params) do
|
||||
{:ok, _user} ->
|
||||
{:ok, _} ->
|
||||
conn
|
||||
|> put_flash(:info, dgettext("prompts", "password reset successfully."))
|
||||
|> redirect(to: ~p"/users/log_in")
|
||||
|
@@ -9,7 +9,7 @@
|
||||
action={~p"/users/reset_password/#{@token}"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<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>
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
defmodule MemexWeb.UserSettingsController do
|
||||
use MemexWeb, :controller
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import MemexWeb.Gettext
|
||||
alias Memex.Accounts
|
||||
alias MemexWeb.UserAuth
|
||||
|
||||
|
@@ -16,7 +16,7 @@
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@email_changeset.action && not @email_changeset.valid?}
|
||||
:if={@email_changeset.action && not @email_changeset.valid?()}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %>
|
||||
@@ -58,7 +58,7 @@
|
||||
</h3>
|
||||
|
||||
<p
|
||||
:if={@password_changeset.action && not @password_changeset.valid?}
|
||||
:if={@password_changeset.action && not @password_changeset.valid?()}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below.") %>
|
||||
@@ -112,7 +112,7 @@
|
||||
) %>
|
||||
|
||||
<div
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?}
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?()}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "oops, something went wrong! please check the errors below") %>
|
||||
|
@@ -3,8 +3,8 @@ defmodule MemexWeb.ErrorHelpers do
|
||||
Conveniences for translating and building error messages.
|
||||
"""
|
||||
|
||||
use PhoenixHTMLHelpers
|
||||
import Phoenix.{Component, HTML.Form}
|
||||
use Phoenix.HTML
|
||||
import Phoenix.Component
|
||||
alias Ecto.Changeset
|
||||
alias Phoenix.{HTML.Form, LiveView.Rendered}
|
||||
|
||||
|
@@ -5,7 +5,7 @@ defmodule MemexWeb.Gettext do
|
||||
By using [Gettext](https://hexdocs.pm/gettext),
|
||||
your module gains a set of macros for translations, for example:
|
||||
|
||||
use Gettext, backend: MemexWeb.Gettext
|
||||
import MemexWeb.Gettext
|
||||
|
||||
# Simple translation
|
||||
gettext("Here is the string to translate")
|
||||
@@ -20,5 +20,5 @@ defmodule MemexWeb.Gettext do
|
||||
|
||||
See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.
|
||||
"""
|
||||
use Gettext.Backend, otp_app: :memex
|
||||
use Gettext, otp_app: :memex
|
||||
end
|
||||
|
@@ -6,15 +6,13 @@
|
||||
phx-target={@myself}
|
||||
phx-change="validate"
|
||||
phx-submit="save"
|
||||
phx-hook="CtrlEnter"
|
||||
phx-debounce="300"
|
||||
class="flex flex-col justify-start items-stretch space-y-4"
|
||||
>
|
||||
<%= text_input(f, :slug,
|
||||
aria_label: gettext("slug"),
|
||||
class: "input input-primary",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTitles",
|
||||
placeholder: gettext("slug")
|
||||
placeholder: gettext("slug"),
|
||||
aria_label: gettext("slug")
|
||||
) %>
|
||||
<%= error_tag(f, :slug) %>
|
||||
|
||||
@@ -22,21 +20,16 @@
|
||||
id: "context-form-content",
|
||||
class: "input input-primary h-64 min-h-64",
|
||||
phx_update: "ignore",
|
||||
placeholder:
|
||||
gettext("use [[note-slug]] to link to a note or [context-slug] to link to a context"),
|
||||
aria_label:
|
||||
gettext("use [[note-slug]] to link to a note or [context-slug] to link to a context"),
|
||||
phx_debounce: 300
|
||||
placeholder: gettext("use [[note-slug]] to link to a note"),
|
||||
aria_label: gettext("use [[note-slug]] to link to a note")
|
||||
) %>
|
||||
<%= error_tag(f, :content) %>
|
||||
|
||||
<%= text_input(f, :tags_string,
|
||||
aria_label: gettext("tag1,tag2"),
|
||||
class: "input input-primary",
|
||||
id: "tags-input",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTags",
|
||||
placeholder: gettext("tag1,tag2")
|
||||
class: "input input-primary",
|
||||
placeholder: gettext("tag1,tag2"),
|
||||
aria_label: gettext("tag1,tag2")
|
||||
) %>
|
||||
<%= error_tag(f, :tags_string) %>
|
||||
|
||||
@@ -44,8 +37,7 @@
|
||||
<%= select(f, :visibility, Ecto.Enum.values(Memex.Contexts.Context, :visibility),
|
||||
class: "grow input input-primary",
|
||||
prompt: gettext("select privacy"),
|
||||
aria_label: gettext("select privacy"),
|
||||
phx_debounce: 300
|
||||
aria_label: gettext("select privacy")
|
||||
) %>
|
||||
|
||||
<%= submit(dgettext("actions", "save"),
|
||||
|
@@ -33,14 +33,14 @@
|
||||
>
|
||||
<:actions :let={context}>
|
||||
<.link
|
||||
:if={Contexts.owner?(context, @current_user)}
|
||||
:if={Contexts.is_owner?(context, @current_user)}
|
||||
patch={~p"/contexts/#{context}/edit"}
|
||||
aria-label={dgettext("actions", "edit %{context_slug}", context_slug: context.slug)}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<.link
|
||||
:if={Contexts.owner_or_admin?(context, @current_user)}
|
||||
:if={Contexts.is_owner_or_admin?(context, @current_user)}
|
||||
href="#"
|
||||
phx-click="delete"
|
||||
phx-value-id={context.id}
|
||||
|
@@ -17,14 +17,14 @@
|
||||
|
||||
<div class="self-end flex space-x-4">
|
||||
<.link
|
||||
:if={Contexts.owner?(@context, @current_user)}
|
||||
:if={Contexts.is_owner?(@context, @current_user)}
|
||||
class="btn btn-primary"
|
||||
patch={~p"/context/#{@context}/edit"}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<button
|
||||
:if={Contexts.owner_or_admin?(@context, @current_user)}
|
||||
:if={Contexts.is_owner_or_admin?(@context, @current_user)}
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
phx-click="delete"
|
||||
|
@@ -89,7 +89,7 @@
|
||||
<p>
|
||||
<%= gettext("in my opinion, contexts should be like single-topic blog posts.") %>
|
||||
<%= gettext(
|
||||
"for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could link to the spoon note as an example of how it fits nicely into your hand."
|
||||
"for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could backlink to the spoon note as an example of how it fits nicely into your hand."
|
||||
) %>
|
||||
</p>
|
||||
</li>
|
||||
@@ -100,10 +100,10 @@
|
||||
</b>
|
||||
<p>
|
||||
<%= gettext(
|
||||
"in my opinion, pipelines should be pretty lightweight, and just link to contexts to provide most of the heavy lifting."
|
||||
"in my opinion, pipelines should be pretty lightweight, and just backlink to contexts to provide most of the heavy lifting."
|
||||
) %>
|
||||
<%= gettext(
|
||||
"for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could link to the physical designs context, maybe with some notes about how it applies in this case."
|
||||
"for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could backlink to the physical designs context, maybe with some notes about how it applies in this case."
|
||||
) %>
|
||||
</p>
|
||||
</li>
|
||||
@@ -117,7 +117,7 @@
|
||||
"while memEx fully supports multiple users, each memEx instance should be treated as a single cohesive and collaborative document."
|
||||
) %>
|
||||
<%= gettext(
|
||||
"note, context and pipeline slugs must be unique, and you are free to link to notes not written by you."
|
||||
"note, context and pipeline slugs must be unique, and you are free to backlink to notes not written by you."
|
||||
) %>
|
||||
<%= 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 :)"
|
||||
|
@@ -10,36 +10,21 @@
|
||||
phx-target={@myself}
|
||||
phx-change="validate"
|
||||
phx-submit="save"
|
||||
phx-hook="CtrlEnter"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
</div>
|
||||
|
||||
<%= label(f, :name, gettext("name"),
|
||||
class: "title text-lg text-primary-400",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= 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",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= number_input(f, :uses_left,
|
||||
min: 0,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= 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>
|
||||
|
@@ -1,15 +1,15 @@
|
||||
<div class="flex flex-col justify-center items-stretch mx-auto space-y-4 max-w-3xl">
|
||||
<h1 class="text-xl title 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>
|
||||
|
||||
<%= if @invites |> Enum.empty?() do %>
|
||||
<h1 class="text-xl text-center title text-primary-400">
|
||||
<h1 class="title text-xl text-primary-400">
|
||||
<%= gettext("no invites 😔") %>
|
||||
</h1>
|
||||
|
||||
<.link patch={~p"/invites/new"} class="ml-auto btn btn-primary">
|
||||
<%= dgettext("actions", "new invite") %>
|
||||
<.link patch={~p"/invites"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "invite someone new!") %>
|
||||
</.link>
|
||||
<% end %>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
</.link>
|
||||
</.invite_card>
|
||||
|
||||
<.link :if={@invites != []} patch={~p"/invites/new"} class="ml-auto btn btn-primary">
|
||||
<.link :if={@invites != []} patch={~p"/invites/new"} class="btn btn-primary ml-auto">
|
||||
<%= dgettext("actions", "create invite") %>
|
||||
</.link>
|
||||
</div>
|
||||
@@ -94,7 +94,7 @@
|
||||
<%= unless @admins |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="text-xl title text-primary-400">
|
||||
<h1 class="title text-xl text-primary-400">
|
||||
<%= gettext("admins") %>
|
||||
</h1>
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
<%= unless @users |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="text-xl title text-primary-400">
|
||||
<h1 class="title text-xl text-primary-400">
|
||||
<%= gettext("users") %>
|
||||
</h1>
|
||||
|
||||
|
@@ -6,15 +6,13 @@
|
||||
phx-target={@myself}
|
||||
phx-change="validate"
|
||||
phx-submit="save"
|
||||
phx-hook="CtrlEnter"
|
||||
phx-debounce="300"
|
||||
class="flex flex-col justify-start items-stretch space-y-4"
|
||||
>
|
||||
<%= text_input(f, :slug,
|
||||
aria_label: gettext("slug"),
|
||||
class: "input input-primary",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTitles",
|
||||
placeholder: gettext("slug")
|
||||
placeholder: gettext("slug"),
|
||||
aria_label: gettext("slug")
|
||||
) %>
|
||||
<%= error_tag(f, :slug) %>
|
||||
|
||||
@@ -22,19 +20,16 @@
|
||||
id: "note-form-content",
|
||||
class: "input input-primary h-64 min-h-64",
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("use [note-slug] to link to a note"),
|
||||
aria_label: gettext("use [note-slug] to link to a note"),
|
||||
phx_debounce: 300
|
||||
placeholder: gettext("content"),
|
||||
aria_label: gettext("content")
|
||||
) %>
|
||||
<%= error_tag(f, :content) %>
|
||||
|
||||
<%= text_input(f, :tags_string,
|
||||
aria_label: gettext("tag1,tag2"),
|
||||
class: "input input-primary",
|
||||
id: "tags-input",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTags",
|
||||
placeholder: gettext("tag1,tag2")
|
||||
class: "input input-primary",
|
||||
placeholder: gettext("tag1,tag2"),
|
||||
aria_label: gettext("tag1,tag2")
|
||||
) %>
|
||||
<%= error_tag(f, :tags_string) %>
|
||||
|
||||
@@ -42,8 +37,7 @@
|
||||
<%= select(f, :visibility, Ecto.Enum.values(Memex.Notes.Note, :visibility),
|
||||
class: "grow input input-primary",
|
||||
prompt: gettext("select privacy"),
|
||||
aria_label: gettext("select privacy"),
|
||||
phx_debounce: 300
|
||||
aria_label: gettext("select privacy")
|
||||
) %>
|
||||
|
||||
<%= submit(dgettext("actions", "save"),
|
||||
|
@@ -33,14 +33,14 @@
|
||||
>
|
||||
<:actions :let={note}>
|
||||
<.link
|
||||
:if={Notes.owner?(note, @current_user)}
|
||||
:if={Notes.is_owner?(note, @current_user)}
|
||||
patch={~p"/notes/#{note}/edit"}
|
||||
aria-label={dgettext("actions", "edit %{note_slug}", note_slug: note.slug)}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<.link
|
||||
:if={Notes.owner_or_admin?(note, @current_user)}
|
||||
:if={Notes.is_owner_or_admin?(note, @current_user)}
|
||||
href="#"
|
||||
phx-click="delete"
|
||||
phx-value-id={note.id}
|
||||
|
@@ -17,14 +17,14 @@
|
||||
|
||||
<div class="self-end flex space-x-4">
|
||||
<.link
|
||||
:if={Notes.owner?(@note, @current_user)}
|
||||
:if={Notes.is_owner?(@note, @current_user)}
|
||||
class="btn btn-primary"
|
||||
patch={~p"/note/#{@note}/edit"}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<button
|
||||
:if={Notes.owner_or_admin?(@note, @current_user)}
|
||||
:if={Notes.is_owner_or_admin?(@note, @current_user)}
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
phx-click="delete"
|
||||
|
@@ -6,15 +6,13 @@
|
||||
phx-target={@myself}
|
||||
phx-change="validate"
|
||||
phx-submit="save"
|
||||
phx-hook="CtrlEnter"
|
||||
phx-debounce="300"
|
||||
class="flex flex-col justify-start items-stretch space-y-4"
|
||||
>
|
||||
<%= text_input(f, :slug,
|
||||
aria_label: gettext("slug"),
|
||||
class: "input input-primary",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTitles",
|
||||
placeholder: gettext("slug")
|
||||
placeholder: gettext("slug"),
|
||||
aria_label: gettext("slug")
|
||||
) %>
|
||||
<%= error_tag(f, :slug) %>
|
||||
|
||||
@@ -22,25 +20,16 @@
|
||||
id: "pipeline-form-description",
|
||||
class: "input input-primary h-64 min-h-64",
|
||||
phx_update: "ignore",
|
||||
placeholder:
|
||||
gettext(
|
||||
"use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
),
|
||||
aria_label:
|
||||
gettext(
|
||||
"use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
),
|
||||
phx_debounce: 300
|
||||
placeholder: gettext("description"),
|
||||
aria_label: gettext("description")
|
||||
) %>
|
||||
<%= error_tag(f, :description) %>
|
||||
|
||||
<%= text_input(f, :tags_string,
|
||||
aria_label: gettext("tag1,tag2"),
|
||||
class: "input input-primary",
|
||||
id: "tags-input",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTags",
|
||||
placeholder: gettext("tag1,tag2")
|
||||
class: "input input-primary",
|
||||
placeholder: gettext("tag1,tag2"),
|
||||
aria_label: gettext("tag1,tag2")
|
||||
) %>
|
||||
<%= error_tag(f, :tags_string) %>
|
||||
|
||||
@@ -48,8 +37,7 @@
|
||||
<%= select(f, :visibility, Ecto.Enum.values(Memex.Pipelines.Pipeline, :visibility),
|
||||
class: "grow input input-primary",
|
||||
prompt: gettext("select privacy"),
|
||||
aria_label: gettext("select privacy"),
|
||||
phx_debounce: 300
|
||||
aria_label: gettext("select privacy")
|
||||
) %>
|
||||
|
||||
<%= submit(dgettext("actions", "save"),
|
||||
|
@@ -33,14 +33,14 @@
|
||||
>
|
||||
<:actions :let={pipeline}>
|
||||
<.link
|
||||
:if={Pipelines.owner?(pipeline, @current_user)}
|
||||
:if={Pipelines.is_owner?(pipeline, @current_user)}
|
||||
patch={~p"/pipelines/#{pipeline}/edit"}
|
||||
aria-label={dgettext("actions", "edit %{pipeline_slug}", pipeline_slug: pipeline.slug)}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<.link
|
||||
:if={Pipelines.owner_or_admin?(pipeline, @current_user)}
|
||||
:if={Pipelines.is_owner_or_admin?(pipeline, @current_user)}
|
||||
href="#"
|
||||
phx-click="delete"
|
||||
phx-value-id={pipeline.id}
|
||||
|
@@ -9,7 +9,14 @@
|
||||
</.link>
|
||||
</div>
|
||||
|
||||
<.pipeline_content pipeline={@pipeline} />
|
||||
<textarea
|
||||
:if={@pipeline.description}
|
||||
id="show-pipeline-description"
|
||||
class="input input-primary h-32 min-h-32"
|
||||
phx-update="ignore"
|
||||
readonly
|
||||
phx-no-format
|
||||
><%= @pipeline.description %></textarea>
|
||||
|
||||
<p class="self-end">
|
||||
<%= gettext("Visibility: %{visibility}", visibility: @pipeline.visibility) %>
|
||||
@@ -17,14 +24,14 @@
|
||||
|
||||
<div class="pb-4 self-end flex space-x-4">
|
||||
<.link
|
||||
:if={Pipelines.owner?(@pipeline, @current_user)}
|
||||
:if={Pipelines.is_owner?(@pipeline, @current_user)}
|
||||
class="btn btn-primary"
|
||||
patch={~p"/pipeline/#{@pipeline}/edit"}
|
||||
>
|
||||
<%= dgettext("actions", "edit") %>
|
||||
</.link>
|
||||
<button
|
||||
:if={Pipelines.owner_or_admin?(@pipeline, @current_user)}
|
||||
:if={Pipelines.is_owner_or_admin?(@pipeline, @current_user)}
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
phx-click="delete"
|
||||
@@ -52,7 +59,7 @@
|
||||
<%= gettext("%{position}. %{title}", position: position + 1, title: title) %>
|
||||
</h3>
|
||||
|
||||
<%= if Pipelines.owner?(@pipeline, @current_user) do %>
|
||||
<%= if Pipelines.is_owner?(@pipeline, @current_user) do %>
|
||||
<div class="flex justify-between items-center space-x-4">
|
||||
<%= if position <= 0 do %>
|
||||
<i class="fas text-xl fa-chevron-up cursor-not-allowed opacity-25"></i>
|
||||
@@ -113,7 +120,7 @@
|
||||
<% end %>
|
||||
|
||||
<.link
|
||||
:if={Pipelines.owner?(@pipeline, @current_user)}
|
||||
:if={Pipelines.is_owner?(@pipeline, @current_user)}
|
||||
class="self-end btn btn-primary"
|
||||
patch={~p"/pipeline/#{@pipeline}/add_step"}
|
||||
>
|
||||
|
@@ -6,15 +6,13 @@
|
||||
phx-target={@myself}
|
||||
phx-change="validate"
|
||||
phx-submit="save"
|
||||
phx-hook="CtrlEnter"
|
||||
phx-debounce="300"
|
||||
class="flex flex-col justify-start items-stretch space-y-4"
|
||||
>
|
||||
<%= text_input(f, :title,
|
||||
aria_label: gettext("title"),
|
||||
class: "input input-primary",
|
||||
phx_debounce: 300,
|
||||
phx_hook: "SanitizeTitles",
|
||||
placeholder: gettext("title")
|
||||
placeholder: gettext("title"),
|
||||
aria_label: gettext("title")
|
||||
) %>
|
||||
<%= error_tag(f, :title) %>
|
||||
|
||||
@@ -22,15 +20,8 @@
|
||||
id: "step-form-content",
|
||||
class: "input input-primary h-64 min-h-64",
|
||||
phx_update: "ignore",
|
||||
placeholder:
|
||||
gettext(
|
||||
"use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
),
|
||||
aria_label:
|
||||
gettext(
|
||||
"use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
),
|
||||
phx_debounce: 300
|
||||
placeholder: gettext("use [[context-slug]] to link to a context"),
|
||||
aria_label: gettext("use [[context-slug]] to link to a context")
|
||||
) %>
|
||||
<%= error_tag(f, :content) %>
|
||||
|
||||
|
39
mix.exs
39
mix.exs
@@ -4,8 +4,8 @@ defmodule Memex.MixProject do
|
||||
def project do
|
||||
[
|
||||
app: :memex,
|
||||
version: "0.1.17",
|
||||
elixir: "1.18.0",
|
||||
version: "0.1.12",
|
||||
elixir: "1.15.5",
|
||||
elixirc_paths: elixirc_paths(Mix.env()),
|
||||
start_permanent: Mix.env() == :prod,
|
||||
aliases: aliases(),
|
||||
@@ -47,30 +47,29 @@ defmodule Memex.MixProject do
|
||||
defp deps do
|
||||
[
|
||||
{:bcrypt_elixir, "~> 3.0"},
|
||||
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},
|
||||
{:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false},
|
||||
{:ecto_psql_extras, "~> 0.6"},
|
||||
{:phoenix, "~> 1.7.0"},
|
||||
{:phoenix_ecto, "~> 4.4"},
|
||||
{:phoenix_html, "~> 3.0"},
|
||||
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
||||
{:phoenix_live_view, "~> 0.19.0"},
|
||||
{:phoenix_live_dashboard, "~> 0.8"},
|
||||
{:ecto_sql, "~> 3.6"},
|
||||
{:eqrcode, "~> 0.1.10"},
|
||||
{:postgrex, ">= 0.0.0"},
|
||||
{:floki, ">= 0.30.0", only: :test},
|
||||
# {:esbuild, "~> 0.3", runtime: Mix.env() == :dev},
|
||||
{:ex_doc, "~> 0.27", only: :dev, runtime: false},
|
||||
{:floki, ">= 0.30.0", only: :test},
|
||||
{:swoosh, "~> 1.6"},
|
||||
{:gen_smtp, "~> 1.0"},
|
||||
{:oban, "~> 2.10"},
|
||||
{:telemetry_metrics, "~> 0.6"},
|
||||
{:telemetry_poller, "~> 1.0"},
|
||||
{:gettext, "~> 0.18"},
|
||||
{:jason, "~> 1.2"},
|
||||
{:oban, "~> 2.10"},
|
||||
{:phoenix_ecto, "~> 4.4"},
|
||||
{:phoenix_html_helpers, "~> 1.0"},
|
||||
{:phoenix_html, "~> 4.0"},
|
||||
{:phoenix_live_dashboard, "~> 0.8"},
|
||||
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
||||
{:phoenix_live_view, "~> 0.20.0"},
|
||||
{:phoenix, "~> 1.7.11"},
|
||||
{:plug_cowboy, "~> 2.7.0"},
|
||||
{:postgrex, ">= 0.0.0"},
|
||||
{:swoosh, "~> 1.6"},
|
||||
{:telemetry_metrics, "~> 0.6"},
|
||||
{:telemetry_poller, "~> 1.0"}
|
||||
{:plug_cowboy, "~> 2.5"},
|
||||
{:ecto_psql_extras, "~> 0.6"},
|
||||
{:eqrcode, "~> 0.1.10"},
|
||||
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},
|
||||
{:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false}
|
||||
]
|
||||
end
|
||||
|
||||
|
92
mix.lock
92
mix.lock
@@ -1,54 +1,54 @@
|
||||
%{
|
||||
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.2.0", "feab711974beba4cb348147170346fe097eea2e840db4e012a145e180ed4ab75", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "563e92a6c77d667b19c5f4ba17ab6d440a085696bdf4c68b9b0f5b30bc5422b8"},
|
||||
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
||||
"castore": {:hex, :castore, "1.0.10", "43bbeeac820f16c89f79721af1b3e092399b3a1ecc8df1a472738fd853574911", [:mix], [], "hexpm", "1b0b7ea14d889d9ea21202c43a4fa015eb913021cb535e8ed91946f4b77a8848"},
|
||||
"comeonin": {:hex, :comeonin, "5.5.0", "364d00df52545c44a139bad919d7eacb55abf39e86565878e17cebb787977368", [:mix], [], "hexpm", "6287fc3ba0aad34883cbe3f7949fc1d1e738e5ccdce77165bc99490aa69f47fb"},
|
||||
"cowboy": {:hex, :cowboy, "2.12.0", "f276d521a1ff88b2b9b4c54d0e753da6c66dd7be6c9fca3d9418b561828a3731", [:make, :rebar3], [{:cowlib, "2.13.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "8a7abe6d183372ceb21caa2709bec928ab2b72e18a3911aa1771639bef82651e"},
|
||||
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.1.0", "0b110a9a6c619b19a7f73fa3004aa11d6e719a67e672d1633dc36b6b2290a0f7", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "2ad2acb5a8bc049e8d5aa267802631912bb80d5f4110a178ae7999e69dca1bf7"},
|
||||
"bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
|
||||
"castore": {:hex, :castore, "1.0.3", "7130ba6d24c8424014194676d608cb989f62ef8039efd50ff4b3f33286d06db8", [:mix], [], "hexpm", "680ab01ef5d15b161ed6a95449fac5c6b8f60055677a8e79acf01b27baa4390b"},
|
||||
"comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
|
||||
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
|
||||
"cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"},
|
||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
|
||||
"credo": {:hex, :credo, "1.7.11", "d3e805f7ddf6c9c854fd36f089649d7cf6ba74c42bc3795d587814e3c9847102", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "56826b4306843253a66e47ae45e98e7d284ee1f95d53d1612bb483f88a8cf219"},
|
||||
"db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
|
||||
"decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.42", "f23d856f41919f17cd06a493923a722d87a2d684f143a1e663c04a2b93100682", [:mix], [], "hexpm", "6915b6ca369b5f7346636a2f41c6a6d78b5af419d61a611079189233358b8b8b"},
|
||||
"ecto": {:hex, :ecto, "3.12.5", "4a312960ce612e17337e7cefcf9be45b95a3be6b36b6f94dfb3d8c361d631866", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6eb18e80bef8bb57e17f5a7f068a1719fbda384d40fc37acb8eb8aeca493b6ea"},
|
||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.8.3", "0c1df205bd051eaf599b3671e75356b121aa71eac09b63ecf921cb1a080c072e", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0 and < 0.20.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "d0e35ea160359e759a2993a00c3a5389a9ca7ece6df5d0753fa927f988c7351a"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.12.1", "c0d0d60e85d9ff4631f12bafa454bc392ce8b9ec83531a412c12a0d415a3a4d0", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "aff5b958a899762c5f09028c847569f7dfb9cc9d63bdb8133bff8a5546de6bf5"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.9.0", "6484b3cd8c0cee58f09f05ecaf1a140a8c97670671a6a0e7ab4dc326c3109726", [:mix], [], "hexpm", "db23d4fd8b757462ad02f8aa73431a426fe6671c80b200d9710caf3d1dd0ffdb"},
|
||||
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
|
||||
"credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"},
|
||||
"db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"},
|
||||
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.1", "a22ed1e7bd3a3e3f197b68d806ef66acb61ee8f57b3ac85fc5d57354c5482a93", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "84b795d6d7796297cca5a3118444b80c7d94f7ce247d49886e7c291e1ae49801"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.33", "3c3fd9673bb5dcc9edc28dd90f50c87ce506d1f71b70e3de69aa8154bc695d44", [:mix], [], "hexpm", "2d526833729b59b9fdb85785078697c72ac5e5066350663e5be6a1182da61b8f"},
|
||||
"ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
|
||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.13", "9947637f82b92dcec93d44ad09ba24d1990bd7ca69e1c68981fb3b6f8bd18829", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "0f2288e6163f6aacd7e59545a56adc8df7d2079d18be7d3d6159d10f4dffc396"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.10.2", "6b98b46534b5c2f8b8b5f03f126e75e2a73c64f3c071149d32987a5378b0fdbd", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "68c018debca57cb9235e3889affdaec7a10616a4e3a80c99fa1d01fdafaa9007"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"},
|
||||
"eqrcode": {:hex, :eqrcode, "0.1.10", "6294fece9d68ad64eef1c3c92cf111cfd6469f4fbf230a2d4cc905a682178f3f", [:mix], [], "hexpm", "da30e373c36a0fd37ab6f58664b16029919896d6c45a68a95cc4d713e81076f1"},
|
||||
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.36.1", "4197d034f93e0b89ec79fac56e226107824adcce8d2dd0a26f5ed3a95efc36b1", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "d7d26a7cf965dacadcd48f9fa7b5953d7d0cfa3b44fa7a65514427da44eafd89"},
|
||||
"expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"},
|
||||
"file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"},
|
||||
"floki": {:hex, :floki, "0.37.0", "b83e0280bbc6372f2a403b2848013650b16640cd2470aea6701f0632223d719e", [:mix], [], "hexpm", "516a0c15a69f78c47dc8e0b9b3724b29608aa6619379f91b1ffa47109b5d0dd3"},
|
||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.30.6", "5f8b54854b240a2b55c9734c4b1d0dd7bdd41f71a095d42a70445c03cf05a281", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bd48f2ddacf4e482c727f9293d9498e0881597eae6ddc3d9562bd7923375109f"},
|
||||
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
|
||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
||||
"floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"},
|
||||
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
|
||||
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
|
||||
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
|
||||
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"},
|
||||
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
|
||||
"oban": {:hex, :oban, "2.18.3", "1608c04f8856c108555c379f2f56bc0759149d35fa9d3b825cb8a6769f8ae926", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "36ca6ca84ef6518f9c2c759ea88efd438a3c81d667ba23b02b062a0aa785475e"},
|
||||
"phoenix": {:hex, :phoenix, "1.7.18", "5310c21443514be44ed93c422e15870aef254cf1b3619e4f91538e7529d2b2e4", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1797fcc82108442a66f2c77a643a62980f342bfeb63d6c9a515ab8294870004e"},
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.6.3", "f686701b0499a07f2e3b122d84d52ff8a31f5def386e03706c916f6feddf69ef", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "909502956916a657a197f94cc1206d9a65247538de8a5e186f7537c895d95764"},
|
||||
"phoenix_html": {:hex, :phoenix_html, "4.2.0", "83a4d351b66f472ebcce242e4ae48af1b781866f00ef0eb34c15030d4e2069ac", [:mix], [], "hexpm", "9713b3f238d07043583a94296cc4bbdceacd3b3a6c74667f4df13971e7866ec8"},
|
||||
"phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.6", "7b1f0327f54c9eb69845fd09a77accf922f488c549a7e7b8618775eb603a62c7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "1681ab813ec26ca6915beb3414aa138f298e17721dc6a2bde9e6eb8a62360ff6"},
|
||||
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.17", "f396bbdaf4ba227b82251eb75ac0afa6b3da5e509bc0d030206374237dfc9450", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a61d741ffb78c85fdbca0de084da6a48f8ceb5261a79165b5a0b59e5f65ce98b"},
|
||||
"gettext": {:hex, :gettext, "0.23.1", "821e619a240e6000db2fc16a574ef68b3bd7fe0167ccc264a81563cc93e67a31", [:mix], [{:expo, "~> 0.4.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "19d744a36b809d810d610b57c27b934425859d158ebd56561bc41f7eeb8795db"},
|
||||
"jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
|
||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
|
||||
"mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
|
||||
"oban": {:hex, :oban, "2.15.4", "d49ab4ffb7153010e32f80fe9e56f592706238149ec579eb50f8a4e41d218856", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5fce611fdfffb13e9148df883116e5201adf1e731eb302cc88cde0588510079c"},
|
||||
"phoenix": {:hex, :phoenix, "1.7.7", "4cc501d4d823015007ba3cdd9c41ecaaf2ffb619d6fb283199fa8ddba89191e0", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "8966e15c395e5e37591b6ed0bd2ae7f48e961f0f60ac4c733f9566b519453085"},
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.2", "b21bd01fdeffcfe2fab49e4942aa938b6d3e89e93a480d4aee58085560a0bc0d", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "70242edd4601d50b69273b057ecf7b684644c19ee750989fd555625ae4ce8f5d"},
|
||||
"phoenix_html": {:hex, :phoenix_html, "3.3.2", "d6ce982c6d8247d2fc0defe625255c721fb8d5f1942c5ac051f6177bffa5973f", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "44adaf8e667c1c20fb9d284b6b0fa8dc7946ce29e81ce621860aa7e96de9a11d"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.1", "c4f2a2d3b26e6ca684d162ccf18aaeed8bed2181896e0393d0a2959789482e51", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "1ca0f954274ce1916f771f86b3d49a91d3447e7c32d171660676095c5f30abe9"},
|
||||
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.19.5", "6e730595e8e9b8c5da230a814e557768828fd8dfeeb90377d2d8dbb52d4ec00a", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b2eaa0dd3cfb9bd7fb949b88217df9f25aed915e986a28ad5c8a0d054e7ca9d3"},
|
||||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
|
||||
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
|
||||
"plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
|
||||
"plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"},
|
||||
"plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"},
|
||||
"postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"},
|
||||
"phoenix_template": {:hex, :phoenix_template, "1.0.3", "32de561eefcefa951aead30a1f94f1b5f0379bc9e340bb5c667f65f1edfa4326", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "16f4b6588a4152f3cc057b9d0c0ba7e82ee23afa65543da535313ad8d25d8e2c"},
|
||||
"plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"},
|
||||
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"},
|
||||
"plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"},
|
||||
"postgrex": {:hex, :postgrex, "0.17.3", "c92cda8de2033a7585dae8c61b1d420a1a1322421df84da9a82a6764580c503d", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "946cf46935a4fdca7a81448be76ba3503cff082df42c6ec1ff16a4bdfbfb098d"},
|
||||
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
|
||||
"swoosh": {:hex, :swoosh, "1.17.5", "14910d267a2633d4335917b37846e376e2067815601592629366c39845dad145", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "629113d477bc82c4c3bffd15a25e8becc1c7ccc0f0e67743b017caddebb06f04"},
|
||||
"table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"},
|
||||
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
|
||||
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
|
||||
"telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
|
||||
"swoosh": {:hex, :swoosh, "1.11.5", "429dccde78e2f60c6339e96917efecebca9d1f254d2878a150f580d2f782260b", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "21ee57dcd68d2f56d3bbe11e76d56d142b221bb12b6018c551cc68442b800040"},
|
||||
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},
|
||||
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
|
||||
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
|
||||
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
|
||||
"websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
|
||||
"websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"},
|
||||
"websock_adapter": {:hex, :websock_adapter, "0.5.4", "7af8408e7ed9d56578539594d1ee7d8461e2dd5c3f57b0f2a5352d610ddde757", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "d2c238c79c52cbe223fcdae22ca0bb5007a735b9e933870e241fce66afb4f4ab"},
|
||||
}
|
||||
|
@@ -44,8 +44,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:50
|
||||
#: lib/memex_web/live/note_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:105
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:112
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
@@ -60,12 +60,17 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:40
|
||||
#: lib/memex_web/live/note_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:94
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:101
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite someone new!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:85
|
||||
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
|
||||
@@ -103,16 +108,16 @@ msgstr ""
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:55
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "save"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:120
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:127
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "add step"
|
||||
msgstr ""
|
||||
@@ -157,12 +162,12 @@ msgid "delete %{note_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:32
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:39
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:103
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:110
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{step_title}"
|
||||
msgstr ""
|
||||
@@ -187,7 +192,7 @@ msgstr ""
|
||||
msgid "edit %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:92
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:99
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit %{step_title}"
|
||||
msgstr ""
|
||||
@@ -197,12 +202,12 @@ msgstr ""
|
||||
msgid "edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:82
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:89
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} down"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:66
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} up"
|
||||
msgstr ""
|
||||
@@ -212,8 +217,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "new invite"
|
||||
msgstr ""
|
||||
|
@@ -44,8 +44,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:50
|
||||
#: lib/memex_web/live/note_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:105
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:112
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
@@ -60,12 +60,17 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:40
|
||||
#: lib/memex_web/live/note_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:94
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:101
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite someone new!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:85
|
||||
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
|
||||
@@ -103,16 +108,16 @@ msgstr ""
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:55
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "save"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:120
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:127
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "add step"
|
||||
msgstr ""
|
||||
@@ -157,12 +162,12 @@ msgid "delete %{note_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:32
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:39
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:103
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:110
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{step_title}"
|
||||
msgstr ""
|
||||
@@ -187,7 +192,7 @@ msgstr ""
|
||||
msgid "edit %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:92
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:99
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit %{step_title}"
|
||||
msgstr ""
|
||||
@@ -197,12 +202,12 @@ msgstr ""
|
||||
msgid "edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:82
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:89
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} down"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:66
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} up"
|
||||
msgstr ""
|
||||
@@ -212,8 +217,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "new invite"
|
||||
msgstr ""
|
||||
|
@@ -12,14 +12,14 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Translate Toolkit 3.7.4\n"
|
||||
|
||||
#: lib/memex_web/components/layouts/app.html.heex:43
|
||||
#: lib/memex_web/components/layouts/live.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reconnecting..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/show.html.heex:15
|
||||
#: lib/memex_web/live/note_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:22
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Visibility: %{visibility}"
|
||||
msgstr ""
|
||||
@@ -45,6 +45,12 @@ msgstr ""
|
||||
msgid "confirm new password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "content"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/memex_web/live/context_live/index.ex:35
|
||||
#: lib/memex_web/live/context_live/index.ex:43
|
||||
@@ -237,20 +243,20 @@ msgstr ""
|
||||
msgid "report bugs or request features"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:52
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:56
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:46
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:45
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "select privacy"
|
||||
msgstr ""
|
||||
@@ -266,12 +272,12 @@ msgstr ""
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:34
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:37
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "tag1,tag2"
|
||||
msgstr ""
|
||||
@@ -328,6 +334,8 @@ 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
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "description"
|
||||
msgstr ""
|
||||
@@ -379,12 +387,12 @@ 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:13
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "slug"
|
||||
msgstr ""
|
||||
@@ -401,6 +409,12 @@ msgstr ""
|
||||
msgid "home"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:24
|
||||
#, 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
|
||||
@@ -422,7 +436,7 @@ msgstr ""
|
||||
msgid "what is this?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{position}. %{title}"
|
||||
msgstr ""
|
||||
@@ -447,27 +461,43 @@ msgstr ""
|
||||
msgid "add step to %{slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:46
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "no steps"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "steps:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:24
|
||||
#, 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."
|
||||
@@ -488,6 +518,11 @@ msgstr ""
|
||||
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"
|
||||
@@ -553,6 +588,11 @@ msgstr ""
|
||||
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 :)"
|
||||
@@ -618,7 +658,7 @@ msgstr ""
|
||||
msgid "keep me logged in for 60 days"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:22
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:21
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "name"
|
||||
msgstr ""
|
||||
@@ -629,12 +669,12 @@ msgstr ""
|
||||
msgid "password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:25
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "uses left"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "leave \"uses left\" blank to make invite unlimited"
|
||||
msgstr ""
|
||||
@@ -662,7 +702,7 @@ msgstr ""
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:7
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:8
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "confirm your account"
|
||||
msgstr ""
|
||||
@@ -671,43 +711,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset your password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:30
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:28
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "use [[note-slug]] to link to a note or [context-slug] to link to a context"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:25
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "use [note-slug] to link to a note"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:91
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could link 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, fuzzy
|
||||
msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could link 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:102
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "in my opinion, pipelines should be pretty lightweight, and just link to contexts to provide most of the heavy lifting."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:119
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "note, context and pipeline slugs must be unique, and you are free to link to notes not written by you."
|
||||
msgstr ""
|
||||
|
@@ -66,12 +66,12 @@ msgstr ""
|
||||
msgid "Welcome to memEx"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:31
|
||||
#: lib/memex/accounts/email.ex:31
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "confirm your memEx account"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:37
|
||||
#: lib/memex/accounts/email.ex:37
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset your memEx password"
|
||||
msgstr ""
|
||||
@@ -86,7 +86,7 @@ msgstr ""
|
||||
msgid "this email was sent from memEx at %{url}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:43
|
||||
#: lib/memex/accounts/email.ex:43
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "update your memEx email"
|
||||
msgstr ""
|
||||
|
@@ -79,6 +79,13 @@ msgstr ""
|
||||
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, fuzzy
|
||||
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_registration_html/new.html.heex:13
|
||||
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
|
||||
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
|
||||
@@ -135,14 +142,7 @@ msgstr ""
|
||||
msgid "sorry, public registration is disabled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:52
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:53
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "user confirmation link is invalid or it has expired."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/contexts/context.ex:84
|
||||
#: lib/memex/notes/note.ex:83
|
||||
#: lib/memex/pipelines/pipeline.ex:86
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
|
||||
msgstr ""
|
||||
|
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Language: de\n"
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:36
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{email} confirmed successfully."
|
||||
msgstr ""
|
||||
@@ -70,8 +70,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:47
|
||||
#: lib/memex_web/live/note_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:47
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:102
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:109
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "are you sure?"
|
||||
msgstr ""
|
||||
@@ -137,12 +137,12 @@ msgstr ""
|
||||
msgid "are you sure you want to delete %{email}? this action is permanent!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:34
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:22
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:23
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "if your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||
msgstr ""
|
||||
|
@@ -10,14 +10,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/layouts/app.html.heex:43
|
||||
#: lib/memex_web/components/layouts/live.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reconnecting..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/show.html.heex:15
|
||||
#: lib/memex_web/live/note_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:22
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Visibility: %{visibility}"
|
||||
msgstr ""
|
||||
@@ -43,6 +43,12 @@ msgstr ""
|
||||
msgid "confirm new password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "content"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/memex_web/live/context_live/index.ex:35
|
||||
#: lib/memex_web/live/context_live/index.ex:43
|
||||
@@ -235,20 +241,20 @@ msgstr ""
|
||||
msgid "report bugs or request features"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:52
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:56
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:46
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:45
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "select privacy"
|
||||
msgstr ""
|
||||
@@ -264,12 +270,12 @@ msgstr ""
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:34
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:37
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "tag1,tag2"
|
||||
msgstr ""
|
||||
@@ -326,6 +332,8 @@ 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
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "description"
|
||||
msgstr ""
|
||||
@@ -377,12 +385,12 @@ 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:13
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "slug"
|
||||
msgstr ""
|
||||
@@ -399,6 +407,12 @@ msgstr ""
|
||||
msgid "home"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:24
|
||||
#, 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
|
||||
@@ -420,7 +434,7 @@ msgstr ""
|
||||
msgid "what is this?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{position}. %{title}"
|
||||
msgstr ""
|
||||
@@ -445,27 +459,43 @@ msgstr ""
|
||||
msgid "add step to %{slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:46
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "no steps"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "steps:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:24
|
||||
#, 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."
|
||||
@@ -486,6 +516,11 @@ msgstr ""
|
||||
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"
|
||||
@@ -551,6 +586,11 @@ msgstr ""
|
||||
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 :)"
|
||||
@@ -616,7 +656,7 @@ msgstr ""
|
||||
msgid "keep me logged in for 60 days"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:22
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:21
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "name"
|
||||
msgstr ""
|
||||
@@ -627,12 +667,12 @@ msgstr ""
|
||||
msgid "password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:25
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "uses left"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:44
|
||||
#: 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 ""
|
||||
@@ -660,7 +700,7 @@ msgstr ""
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:7
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:8
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "confirm your account"
|
||||
msgstr ""
|
||||
@@ -669,43 +709,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "reset your password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:30
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "use [[note-slug]] to link to a note or [context-slug] to link to a context"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:25
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "use [note-slug] to link to a note"
|
||||
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 link 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 link 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:102
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "in my opinion, pipelines should be pretty lightweight, and just link to contexts to provide most of the heavy lifting."
|
||||
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 link to notes not written by you."
|
||||
msgstr ""
|
||||
|
@@ -66,12 +66,12 @@ msgstr ""
|
||||
msgid "Welcome to memEx"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:31
|
||||
#: lib/memex/accounts/email.ex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "confirm your memEx account"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:37
|
||||
#: lib/memex/accounts/email.ex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "reset your memEx password"
|
||||
msgstr ""
|
||||
@@ -86,7 +86,7 @@ msgstr ""
|
||||
msgid "this email was sent from memEx at %{url}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:43
|
||||
#: lib/memex/accounts/email.ex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "update your memEx email"
|
||||
msgstr ""
|
||||
|
@@ -45,8 +45,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:50
|
||||
#: lib/memex_web/live/note_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:34
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:105
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:112
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
@@ -61,12 +61,17 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:40
|
||||
#: lib/memex_web/live/note_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:24
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:94
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:101
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "invite someone new!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:85
|
||||
#: lib/memex_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/memex_web/controllers/user_registration_html/new.html.heex:44
|
||||
@@ -104,16 +109,16 @@ msgstr ""
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:55
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "save"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:120
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:127
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "add step"
|
||||
msgstr ""
|
||||
@@ -158,12 +163,12 @@ msgid "delete %{note_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:49
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:32
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:39
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:103
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:110
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "delete %{step_title}"
|
||||
msgstr ""
|
||||
@@ -188,7 +193,7 @@ msgstr ""
|
||||
msgid "edit %{pipeline_slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:92
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:99
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "edit %{step_title}"
|
||||
msgstr ""
|
||||
@@ -198,12 +203,12 @@ msgstr ""
|
||||
msgid "edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:82
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:89
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} down"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:66
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "move %{step_title} up"
|
||||
msgstr ""
|
||||
@@ -213,8 +218,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/index.html.heex:12
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "new invite"
|
||||
msgstr ""
|
||||
|
@@ -11,14 +11,14 @@ msgstr ""
|
||||
"Language: en\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/memex_web/components/layouts/app.html.heex:43
|
||||
#: lib/memex_web/components/layouts/live.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reconnecting..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/show.html.heex:15
|
||||
#: lib/memex_web/live/note_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:22
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Visibility: %{visibility}"
|
||||
msgstr ""
|
||||
@@ -44,6 +44,12 @@ msgstr ""
|
||||
msgid "confirm new password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "content"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/memex_web/live/context_live/index.ex:35
|
||||
#: lib/memex_web/live/context_live/index.ex:43
|
||||
@@ -236,20 +242,20 @@ msgstr ""
|
||||
msgid "report bugs or request features"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:52
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:56
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:46
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:47
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:45
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:50
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:51
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:40
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "select privacy"
|
||||
msgstr ""
|
||||
@@ -265,12 +271,12 @@ msgstr ""
|
||||
msgid "settings"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:34
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:39
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:37
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:43
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "tag1,tag2"
|
||||
msgstr ""
|
||||
@@ -327,6 +333,8 @@ 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
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "description"
|
||||
msgstr ""
|
||||
@@ -378,12 +386,12 @@ 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:13
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:15
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "slug"
|
||||
msgstr ""
|
||||
@@ -400,6 +408,12 @@ msgstr ""
|
||||
msgid "home"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:24
|
||||
#, 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
|
||||
@@ -421,7 +435,7 @@ msgstr ""
|
||||
msgid "what is this?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:52
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{position}. %{title}"
|
||||
msgstr ""
|
||||
@@ -446,27 +460,43 @@ msgstr ""
|
||||
msgid "add step to %{slug}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:46
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "no steps"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:41
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "steps:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:13
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:17
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:14
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:15
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:23
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:24
|
||||
#, 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."
|
||||
@@ -487,6 +517,11 @@ msgstr ""
|
||||
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"
|
||||
@@ -552,6 +587,11 @@ msgstr ""
|
||||
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 :)"
|
||||
@@ -617,7 +657,7 @@ msgstr ""
|
||||
msgid "keep me logged in for 60 days"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:22
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:21
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "name"
|
||||
msgstr ""
|
||||
@@ -628,12 +668,12 @@ msgstr ""
|
||||
msgid "password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:25
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "uses left"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:44
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "leave \"uses left\" blank to make invite unlimited"
|
||||
msgstr ""
|
||||
@@ -661,7 +701,7 @@ msgstr ""
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:7
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:8
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "confirm your account"
|
||||
msgstr ""
|
||||
@@ -670,43 +710,3 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset your password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/pipeline_live/form_component.html.heex:30
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/step_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "use [[[note-slug]]] to link to a note or use [[context-slug]] to link to a context or [pipeline-slug] to link to a pipeline"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:26
|
||||
#: lib/memex_web/live/context_live/form_component.html.heex:28
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "use [[note-slug]] to link to a note or [context-slug] to link to a context"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:25
|
||||
#: lib/memex_web/live/note_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "use [note-slug] to link to a note"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:91
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "for instance, a good context could be what makes some physical designs spark joy for you, and in that context you could link 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, fuzzy
|
||||
msgid "for instance, a pipeline for buying an object could have a step where you consider how much it sparks joy, and it could link 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:102
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "in my opinion, pipelines should be pretty lightweight, and just link to contexts to provide most of the heavy lifting."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/faq_live.html.heex:119
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "note, context and pipeline slugs must be unique, and you are free to link to notes not written by you."
|
||||
msgstr ""
|
||||
|
@@ -67,12 +67,12 @@ msgstr ""
|
||||
msgid "Welcome to memEx"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:31
|
||||
#: lib/memex/accounts/email.ex:31
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "confirm your memEx account"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:37
|
||||
#: lib/memex/accounts/email.ex:37
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "reset your memEx password"
|
||||
msgstr ""
|
||||
@@ -87,7 +87,7 @@ msgstr ""
|
||||
msgid "this email was sent from memEx at %{url}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/email.ex:43
|
||||
#: lib/memex/accounts/email.ex:43
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "update your memEx email"
|
||||
msgstr ""
|
||||
|
@@ -80,6 +80,13 @@ msgstr ""
|
||||
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/controllers/user_registration_html/new.html.heex:13
|
||||
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
|
||||
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
|
||||
@@ -136,14 +143,7 @@ msgstr ""
|
||||
msgid "sorry, public registration is disabled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:52
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:53
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "user confirmation link is invalid or it has expired."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex/contexts/context.ex:84
|
||||
#: lib/memex/notes/note.ex:83
|
||||
#: lib/memex/pipelines/pipeline.ex:86
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
|
||||
msgstr ""
|
||||
|
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Language: en\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:36
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{email} confirmed successfully."
|
||||
msgstr ""
|
||||
@@ -71,8 +71,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:47
|
||||
#: lib/memex_web/live/note_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:47
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:102
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:109
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "are you sure?"
|
||||
msgstr ""
|
||||
@@ -138,12 +138,12 @@ msgstr ""
|
||||
msgid "are you sure you want to delete %{email}? this action is permanent!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:34
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:22
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:23
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "if your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||
msgstr ""
|
||||
|
@@ -79,6 +79,13 @@ msgstr ""
|
||||
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/controllers/user_registration_html/new.html.heex:13
|
||||
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:13
|
||||
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
|
||||
@@ -135,14 +142,7 @@ msgstr ""
|
||||
msgid "sorry, public registration is disabled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:52
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "user confirmation link is invalid or it has expired."
|
||||
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 or space delimited"
|
||||
msgstr ""
|
||||
|
@@ -10,7 +10,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:36
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{email} confirmed successfully."
|
||||
msgstr ""
|
||||
@@ -70,8 +70,8 @@ msgstr ""
|
||||
#: lib/memex_web/live/note_live/index.html.heex:47
|
||||
#: lib/memex_web/live/note_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/index.html.heex:47
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:31
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:102
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:38
|
||||
#: lib/memex_web/live/pipeline_live/show.html.heex:109
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "are you sure?"
|
||||
msgstr ""
|
||||
@@ -137,12 +137,12 @@ msgstr ""
|
||||
msgid "are you sure you want to delete %{email}? this action is permanent!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:49
|
||||
#: lib/memex_web/live/invite_live/form_component.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "saving..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/memex_web/controllers/user_confirmation_controller.ex:22
|
||||
#: 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 ""
|
||||
|
@@ -316,7 +316,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, _user} =
|
||||
{:ok, _} =
|
||||
Accounts.update_user_password(user, valid_user_password(), %{
|
||||
"password" => "new valid password"
|
||||
})
|
||||
|
@@ -1,40 +0,0 @@
|
||||
defmodule Memex.EmailWorkerTest do
|
||||
use Memex.DataCase, async: true
|
||||
|
||||
def perform_job(worker, args) do
|
||||
Oban.Testing.perform_job(worker, args, [])
|
||||
end
|
||||
|
||||
test "sending welcome email" do
|
||||
user = user_fixture()
|
||||
|
||||
{:ok, _user} =
|
||||
perform_job(Memex.EmailWorker, %{
|
||||
"email" => "welcome",
|
||||
"user_id" => user.id,
|
||||
"attrs" => %{"url" => "test_url"}
|
||||
})
|
||||
end
|
||||
|
||||
test "sending reset password email" do
|
||||
user = user_fixture()
|
||||
|
||||
{:ok, _user} =
|
||||
perform_job(Memex.EmailWorker, %{
|
||||
"email" => "reset_password",
|
||||
"user_id" => user.id,
|
||||
"attrs" => %{"url" => "test_url"}
|
||||
})
|
||||
end
|
||||
|
||||
test "sending update email email" do
|
||||
user = user_fixture()
|
||||
|
||||
{:ok, _user} =
|
||||
perform_job(Memex.EmailWorker, %{
|
||||
"email" => "update_email",
|
||||
"user_id" => user.id,
|
||||
"attrs" => %{"url" => "test_url"}
|
||||
})
|
||||
end
|
||||
end
|
@@ -17,7 +17,7 @@ defmodule MemexWeb.ContextLiveTest do
|
||||
}
|
||||
@invalid_attrs %{
|
||||
content: nil,
|
||||
tags_string: "invalid_tag or_tags",
|
||||
tags_string: "invalid tags",
|
||||
slug: nil,
|
||||
visibility: nil
|
||||
}
|
||||
@@ -114,7 +114,7 @@ defmodule MemexWeb.ContextLiveTest do
|
||||
|> render_change(context: @invalid_attrs)
|
||||
|
||||
assert html =~ "can't be blank"
|
||||
assert html =~ "tags must be comma or space delimited"
|
||||
assert html =~ "tags must be comma-delimited"
|
||||
|
||||
{:ok, _live, html} =
|
||||
show_live
|
||||
|
@@ -17,7 +17,7 @@ defmodule MemexWeb.NoteLiveTest do
|
||||
}
|
||||
@invalid_attrs %{
|
||||
content: nil,
|
||||
tags_string: "invalid_tag or_tags",
|
||||
tags_string: "invalid tags",
|
||||
slug: nil,
|
||||
visibility: nil
|
||||
}
|
||||
@@ -55,7 +55,7 @@ defmodule MemexWeb.NoteLiveTest do
|
||||
|> render_change(note: @invalid_attrs)
|
||||
|
||||
assert html =~ "can't be blank"
|
||||
assert html =~ "tags must be comma or space delimited"
|
||||
assert html =~ "tags must be comma-delimited"
|
||||
|
||||
{:ok, _live, html} =
|
||||
index_live
|
||||
|
@@ -17,7 +17,7 @@ defmodule MemexWeb.PipelineLiveTest do
|
||||
}
|
||||
@invalid_attrs %{
|
||||
description: nil,
|
||||
tags_string: "invalid_tag or_tags",
|
||||
tags_string: "invalid tags",
|
||||
slug: nil,
|
||||
visibility: nil
|
||||
}
|
||||
@@ -130,7 +130,7 @@ defmodule MemexWeb.PipelineLiveTest do
|
||||
|> render_change(pipeline: @invalid_attrs)
|
||||
|
||||
assert html =~ "can't be blank"
|
||||
assert html =~ "tags must be comma or space delimited"
|
||||
assert html =~ "tags must be comma-delimited"
|
||||
|
||||
{:ok, _live, html} =
|
||||
show_live
|
||||
|
@@ -64,7 +64,7 @@ defmodule Memex.DataCase do
|
||||
symbols = ~c"0123456789abcdef-"
|
||||
symbol_count = Enum.count(symbols)
|
||||
|
||||
for _index <- 1..length//1,
|
||||
for _ <- Range.new(1, length),
|
||||
into: "",
|
||||
do: <<Enum.at(symbols, :rand.uniform(symbol_count - 1))>>
|
||||
end
|
||||
|
@@ -38,17 +38,16 @@ defmodule Memex.Fixtures do
|
||||
def extract_user_token(fun) do
|
||||
%{args: %{attrs: attrs, email: email_key, user_id: user_id}} = fun.(&"[TOKEN]#{&1}[TOKEN]")
|
||||
|
||||
attrs =
|
||||
attrs
|
||||
|> Map.new(fn {key, value} -> {Atom.to_string(key), value} end)
|
||||
# convert atoms to string keys
|
||||
attrs = attrs |> Map.new(fn {atom_key, value} -> {atom_key |> Atom.to_string(), value} end)
|
||||
|
||||
email =
|
||||
email_key
|
||||
|> Atom.to_string()
|
||||
|> Email.generate_email(Accounts.get_user!(user_id), attrs)
|
||||
|
||||
[_prefix, html_token | _postfix] = email.html_body |> String.split("[TOKEN]")
|
||||
[_prefix, text_token | _postfix] = email.text_body |> String.split("[TOKEN]")
|
||||
[_, html_token | _] = email.html_body |> String.split("[TOKEN]")
|
||||
[_, text_token | _] = email.text_body |> String.split("[TOKEN]")
|
||||
^text_token = html_token
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user