26 Commits

Author SHA1 Message Date
fdfca3f7a5 bump version
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-26 11:25:29 -05:00
c61b2c67b7 fix issue with displaying content 2023-11-26 11:25:26 -05:00
d0d958a638 update npm deps
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-04 23:46:21 -04:00
a437b5966f update elixir deps 2023-11-04 23:40:15 -04:00
e2378279d7 change how backlinks work
All checks were successful
continuous-integration/drone/push Build is passing
2023-11-04 23:34:11 -04:00
1b49b668b3 add ctrl-enter submit 2023-11-04 22:40:56 -04:00
03021614b5 fix live flashes not dismissable by click 2023-11-04 22:22:46 -04:00
50af86798a fix warning in tests 2023-11-04 22:20:06 -04:00
be01723be2 make content previews resizable 2023-11-04 22:19:35 -04:00
0a27a4ee29 make step content not a required field 2023-11-04 22:10:16 -04:00
e2f8ac6b78 add bottom padding 2023-11-04 22:09:05 -04:00
d5e334dc09 tolerate spaces in tags 2023-11-04 22:07:25 -04:00
1d6ba5960c fix debounces 2023-11-04 22:05:20 -04:00
bc29ca6c20 update elixir/erlang version
All checks were successful
continuous-integration/drone/push Build is passing
2023-10-20 18:25:36 -04:00
bf9fd4880f run mix format
All checks were successful
continuous-integration/drone/push Build is passing
2023-09-07 18:43:25 -04:00
957e433847 update dependencies 2023-09-07 18:43:25 -04:00
edd631f520 run npm audit fix 2023-09-07 18:08:02 -04:00
2e1545a9f5 update npm 2023-09-07 18:07:21 -04:00
3e296080f5 fix user registration controller 2023-06-04 00:11:09 -04:00
d2ae6024ce fix error/404 pages not rendering properly 2023-05-12 22:59:04 -04:00
4615a29c11 disable arm builds
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-16 21:36:33 -04:00
eb48ff7dc0 build in arm64 and amd64
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-04-16 17:05:13 -04:00
fcfd9857d5 remove maintain attrs
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-16 01:12:07 -04:00
c5f96a9d9d change invite path slightly
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-16 00:48:04 -04:00
c1a0b4017f improve tests
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-15 21:40:57 -04:00
04ebe59afe ee cummings even more 2023-04-15 21:40:17 -04:00
56 changed files with 8831 additions and 5507 deletions

View File

@ -17,7 +17,7 @@ steps:
- .mix - .mix
- name: test - name: test
image: elixir:1.14.4-alpine image: elixir:1.15.6-alpine
environment: environment:
TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test
HOST: testing.example.tld HOST: testing.example.tld
@ -42,7 +42,8 @@ steps:
repo: shibaobun/memex repo: shibaobun/memex
purge: true purge: true
compress: true compress: true
platforms: linux/amd64,linux/arm/v7 platforms:
- linux/amd64
username: username:
from_secret: docker_username from_secret: docker_username
password: password:
@ -59,7 +60,8 @@ steps:
repo: shibaobun/memex repo: shibaobun/memex
purge: true purge: true
compress: true compress: true
platforms: linux/amd64,linux/arm/v7 platforms:
- linux/amd64
username: username:
from_secret: docker_username from_secret: docker_username
password: password:

View File

@ -1,3 +1,3 @@
elixir 1.14.4-otp-25 elixir 1.15.6-otp-26
erlang 25.3 erlang 26.1.2
nodejs 18.15.0 nodejs 20.6.0

View File

@ -1,4 +1,4 @@
FROM elixir:1.14.4-alpine AS build FROM elixir:1.15.6-alpine AS build
# install build dependencies # install build dependencies
RUN apk add --no-cache build-base npm git python3 RUN apk add --no-cache build-base npm git python3

View File

@ -26,16 +26,17 @@ import 'phoenix_html'
import { Socket } from 'phoenix' import { Socket } from 'phoenix'
import { LiveSocket } from 'phoenix_live_view' import { LiveSocket } from 'phoenix_live_view'
import topbar from 'topbar' import topbar from 'topbar'
import CtrlEnter from './ctrlenter'
import Date from './date' import Date from './date'
import DateTime from './datetime' import DateTime from './datetime'
import MaintainAttrs from './maintain_attrs'
const csrfTokenElement = document.querySelector("meta[name='csrf-token']") const csrfTokenElement = document.querySelector("meta[name='csrf-token']")
let csrfToken let csrfToken
if (csrfTokenElement) { csrfToken = csrfTokenElement.getAttribute('content') } if (csrfTokenElement) { csrfToken = csrfTokenElement.getAttribute('content') }
const liveSocket = new LiveSocket('/live', Socket, { const liveSocket = new LiveSocket('/live', Socket, {
params: { _csrf_token: csrfToken }, params: { _csrf_token: csrfToken },
hooks: { Date, DateTime, MaintainAttrs } hooks: { CtrlEnter, Date, DateTime }
}) })
// Show progress bar on live navigation and form submits // Show progress bar on live navigation and form submits

12
assets/js/ctrlenter.js Normal file
View File

@ -0,0 +1,12 @@
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) },
updated () { this.addFormSubmit(this) }
}

View File

@ -1,22 +0,0 @@
// maintain user adjusted attributes, like textbox length on phoenix liveview
// update. https://github.com/phoenixframework/phoenix_live_view/issues/1011
export default {
attrs () {
if (this.el && this.el.getAttribute('data-attrs')) {
return this.el.getAttribute('data-attrs').split(', ')
} else {
return []
}
},
beforeUpdate () {
if (this.el) {
this.prevAttrs = this.attrs().map(name => [name, this.el.getAttribute(name)])
}
},
updated () {
if (this.el) {
this.prevAttrs.forEach(([name, val]) => this.el.setAttribute(name, val))
}
}
}

13129
assets/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,8 @@
"description": " ", "description": " ",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": "v18.15.0", "node": "v20.6.0",
"npm": "9.5.0" "npm": "9.8.1"
}, },
"scripts": { "scripts": {
"deploy": "NODE_ENV=production webpack --mode production", "deploy": "NODE_ENV=production webpack --mode production",
@ -13,35 +13,35 @@
"test": "standard" "test": "standard"
}, },
"dependencies": { "dependencies": {
"@fontsource/nunito-sans": "^4.5.10", "@fontsource/nunito-sans": "^5.0.8",
"@fortawesome/fontawesome-free": "^6.4.0", "@fortawesome/fontawesome-free": "^6.4.2",
"phoenix": "file:../deps/phoenix", "phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html", "phoenix_html": "file:../deps/phoenix_html",
"phoenix_live_view": "file:../deps/phoenix_live_view", "phoenix_live_view": "file:../deps/phoenix_live_view",
"topbar": "^2.0.1" "topbar": "^2.0.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.21.4", "@babel/core": "^7.23.2",
"@babel/preset-env": "^7.21.4", "@babel/preset-env": "^7.23.2",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.16",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.3",
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.7.3", "css-loader": "^6.8.1",
"css-minimizer-webpack-plugin": "^5.0.0", "css-minimizer-webpack-plugin": "^5.0.1",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"mini-css-extract-plugin": "^2.7.5", "mini-css-extract-plugin": "^2.7.6",
"npm-check-updates": "^16.10.8", "npm-check-updates": "^16.14.6",
"postcss": "^8.4.21", "postcss": "^8.4.31",
"postcss-import": "^15.1.0", "postcss-import": "^15.1.0",
"postcss-loader": "^7.2.4", "postcss-loader": "^7.3.3",
"postcss-preset-env": "^8.3.1", "postcss-preset-env": "^9.3.0",
"sass": "^1.62.0", "sass": "^1.69.5",
"sass-loader": "^13.2.2", "sass-loader": "^13.3.2",
"standard": "^17.0.0", "standard": "^17.1.0",
"tailwindcss": "^3.3.1", "tailwindcss": "^3.3.5",
"terser-webpack-plugin": "^5.3.7", "terser-webpack-plugin": "^5.3.9",
"webpack": "^5.79.0", "webpack": "^5.89.0",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.15.1"
} }
} }

View File

@ -1,5 +1,30 @@
# 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
- Update dependencies
# v0.1.11 # v0.1.11
- Update dependencies - Update dependencies
- ee cummings even more
- Improve tests
- Change invite path slightly
- Disable arm builds since ci fails to build
# v0.1.10 # v0.1.10
- Improve accessibility - Improve accessibility

View File

@ -18,7 +18,10 @@ config :memex, MemexWeb.Endpoint,
url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"], url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"],
http: [port: String.to_integer(System.get_env("PORT") || "4000")], http: [port: String.to_integer(System.get_env("PORT") || "4000")],
secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I", secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I",
render_errors: [view: MemexWeb.ErrorView, accepts: ~w(html json), layout: false], render_errors: [
formats: [html: MemexWeb.ErrorHTML, json: MemexWeb.ErrorJSON],
layout: false
],
pubsub_server: Memex.PubSub, pubsub_server: Memex.PubSub,
live_view: [signing_salt: "zOLgd3lr"] live_view: [signing_salt: "zOLgd3lr"]

View File

@ -26,7 +26,7 @@ config :memex, Memex.Mailer, adapter: Swoosh.Adapters.Test
config :memex, Memex.Accounts, registration: "public" config :memex, Memex.Accounts, registration: "public"
# Print only warnings and errors during test # Print only warnings and errors during test
config :logger, level: :warn config :logger, level: :warning
# Initialize plugs at runtime for faster test compilation # Initialize plugs at runtime for faster test compilation
config :phoenix, :plug_init_mode, :runtime config :phoenix, :plug_init_mode, :runtime

View File

@ -79,11 +79,11 @@ defmodule Memex.Contexts.Context do
changeset changeset
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|> cast(attrs, [: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: message:
dgettext( dgettext(
"errors", "errors",
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
) )
) )
|> cast_tags() |> cast_tags()
@ -98,9 +98,9 @@ defmodule Memex.Contexts.Context do
defp process_tags(tags_string) when tags_string |> is_binary() do defp process_tags(tags_string) when tags_string |> is_binary() do
tags_string tags_string
|> String.split(",", trim: true) |> String.split([",", " "], trim: true)
|> Enum.map(fn str -> str |> String.trim() end) |> Enum.map(fn str -> str |> String.trim() end)
|> Enum.reject(fn str -> str |> is_nil() end) |> Enum.reject(fn str -> str in [nil, ""] end)
|> Enum.sort() |> Enum.sort()
end end

View File

@ -78,11 +78,11 @@ defmodule Memex.Notes.Note do
changeset changeset
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|> cast(attrs, [: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: message:
dgettext( dgettext(
"errors", "errors",
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
) )
) )
|> cast_tags() |> cast_tags()
@ -97,9 +97,9 @@ defmodule Memex.Notes.Note do
defp process_tags(tags_string) when tags_string |> is_binary() do defp process_tags(tags_string) when tags_string |> is_binary() do
tags_string tags_string
|> String.split(",", trim: true) |> String.split([",", " "], trim: true)
|> Enum.map(fn str -> str |> String.trim() end) |> Enum.map(fn str -> str |> String.trim() end)
|> Enum.reject(fn str -> str |> is_nil() end) |> Enum.reject(fn str -> str in [nil, ""] end)
|> Enum.sort() |> Enum.sort()
end end

View File

@ -81,11 +81,11 @@ defmodule Memex.Pipelines.Pipeline do
changeset changeset
|> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string()) |> put_change(:tags_string, changeset |> get_field(:tags) |> get_tags_string())
|> cast(attrs, [: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: message:
dgettext( dgettext(
"errors", "errors",
"invalid format: only numbers, letters and hyphen are accepted. tags must be comma-delimited" "invalid format: only numbers, letters and hyphen are accepted. tags must be comma or space delimited"
) )
) )
|> cast_tags() |> cast_tags()
@ -100,9 +100,9 @@ defmodule Memex.Pipelines.Pipeline do
defp process_tags(tags_string) when tags_string |> is_binary() do defp process_tags(tags_string) when tags_string |> is_binary() do
tags_string tags_string
|> String.split(",", trim: true) |> String.split([",", " "], trim: true)
|> Enum.map(fn str -> str |> String.trim() end) |> Enum.map(fn str -> str |> String.trim() end)
|> Enum.reject(fn str -> str |> is_nil() end) |> Enum.reject(fn str -> str in [nil, ""] end)
|> Enum.sort() |> Enum.sort()
end end

View File

@ -50,7 +50,7 @@ defmodule Memex.Pipelines.Steps.Step do
%__MODULE__{} %__MODULE__{}
|> cast(attrs, [:title, :content]) |> cast(attrs, [:title, :content])
|> change(pipeline_id: pipeline_id, user_id: user_id, position: position) |> change(pipeline_id: pipeline_id, user_id: user_id, position: position)
|> validate_required([:title, :content, :user_id, :position]) |> validate_required([:title, :user_id, :position])
end end
@spec update_changeset(t(), attrs :: map(), User.t()) :: @spec update_changeset(t(), attrs :: map(), User.t()) ::
@ -62,7 +62,7 @@ defmodule Memex.Pipelines.Steps.Step do
) do ) do
step step
|> cast(attrs, [:title, :content]) |> cast(attrs, [:title, :content])
|> validate_required([:title, :content, :user_id, :position]) |> validate_required([:title, :user_id, :position])
end end
@spec position_changeset(t(), position :: non_neg_integer(), User.t()) :: changeset() @spec position_changeset(t(), position :: non_neg_integer(), User.t()) :: changeset()
@ -73,6 +73,6 @@ defmodule Memex.Pipelines.Steps.Step do
) do ) do
step step
|> change(position: position) |> change(position: position)
|> validate_required([:title, :content, :user_id, :position]) |> validate_required([:title, :user_id, :position])
end end
end end

View File

@ -4,12 +4,11 @@ defmodule MemexWeb.CoreComponents do
""" """
use Phoenix.Component use Phoenix.Component
use MemexWeb, :verified_routes use MemexWeb, :verified_routes
import MemexWeb.{Gettext, HTMLHelpers} import MemexWeb.{Gettext, HTMLHelpers}
alias Memex.{Accounts, Accounts.Invite, Accounts.User} alias Memex.{Accounts, Accounts.Invite, Accounts.User}
alias Memex.Contexts.Context alias Memex.Contexts.Context
alias Memex.Notes.Note alias Memex.Notes.Note
alias Memex.Pipelines.Steps.Step alias Memex.Pipelines.{Pipeline, Steps.Step}
alias Phoenix.HTML alias Phoenix.HTML
alias Phoenix.LiveView.JS alias Phoenix.LiveView.JS
@ -131,53 +130,126 @@ defmodule MemexWeb.CoreComponents do
def step_content(assigns) def step_content(assigns)
defp add_links_to_content(content, data_qa_prefix) do attr :pipeline, Pipeline, required: true
# replace links
# link regex from def pipeline_content(assigns)
# 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
content = defp display_links(record) do
Regex.replace( record
~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()@:%_\+.~#?&//=]*))>, |> get_content()
content, |> replace_hyperlinks(record)
fn _whole_match, link -> |> replace_triple_links(record)
link = |> replace_double_links(record)
HTML.Link.link( |> replace_single_links(record)
link, |> HTML.raw()
to: link, end
class: "link inline",
target: "_blank",
rel: "noopener noreferrer"
)
|> HTML.Safe.to_iodata()
|> IO.iodata_to_binary()
"</p>#{link}<p class=\"inline\">" defp get_content(%{content: content}), do: content |> get_text()
end defp get_content(%{description: description}), do: description |> get_text()
) defp get_content(_fallthrough), do: nil |> get_text()
content = defp get_text(string) when is_binary(string), do: string
Regex.replace( defp get_text(_fallthrough), do: ""
~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()
"</p>#{link}<p class=\"inline\">" # replaces hyperlinks like https://bubbletea.dev
end #
) # 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 =
HTML.Link.link(
link,
to: link,
class: "link inline",
target: "_blank",
rel: "noopener noreferrer"
)
|> HTML.Safe.to_iodata()
|> IO.iodata_to_binary()
content |> HTML.raw() "</p>#{link}<p class=\"inline\">"
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 =
HTML.Link.link(
"[[[#{slug}]]]",
to: ~p"/note/#{slug}",
class: "link inline"
)
|> HTML.Safe.to_iodata()
|> IO.iodata_to_binary()
"#{prefix}</p>#{link}<p class=\"inline\">#{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 =
HTML.Link.link(
"[[#{slug}]]",
to: target,
class: "link inline"
)
|> HTML.Safe.to_iodata()
|> IO.iodata_to_binary()
"#{prefix}</p>#{link}<p class=\"inline\">#{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 =
HTML.Link.link(
"[#{slug}]",
to: target,
class: "link inline"
)
|> HTML.Safe.to_iodata()
|> IO.iodata_to_binary()
"#{prefix}</p>#{link}<p class=\"inline\">#{suffix}"
end
)
end end
end end

View File

@ -1,8 +1,7 @@
<div <div
id={"show-context-content-#{@context.id}"} 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" class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
phx-hook="MaintainAttrs"
phx-update="ignore" phx-update="ignore"
readonly readonly
phx-no-format phx-no-format
><p class="inline"><%= add_links_to_content(@context.content, "context-note") %></p></div> ><p class="inline"><%= display_links(@context) %></p></div>

View File

@ -1,8 +1,7 @@
<div <div
id={"show-note-content-#{@note.id}"} 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" class="input input-primary h-128 min-h-128 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
phx-hook="MaintainAttrs"
phx-update="ignore" phx-update="ignore"
readonly readonly
phx-no-format phx-no-format
><p class="inline"><%= add_links_to_content(@note.content, "note-link") %></p></div> ><p class="inline"><%= display_links(@note) %></p></div>

View File

@ -0,0 +1,7 @@
<div
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>

View File

@ -1,8 +1,7 @@
<div <div
id={"show-step-content-#{@step.id}"} 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" class="input input-primary h-32 min-h-32 inline-block whitespace-pre-wrap overflow-x-hidden overflow-y-auto resize-y"
phx-hook="MaintainAttrs"
phx-update="ignore" phx-update="ignore"
readonly readonly
phx-no-format phx-no-format
><p class="inline"><%= add_links_to_content(@step.content, "step-context") %></p></div> ><p class="inline"><%= display_links(@step) %></p></div>

View File

@ -1,13 +1,26 @@
<main role="main" class="min-h-full min-w-full"> <main role="main" class="pb-8 min-w-full">
<header> <header>
<.topbar current_user={assigns[:current_user]} /> <.topbar current_user={assigns[:current_user]} />
<div class="mx-8 my-2 flex flex-col space-y-4 text-center"> <div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p :if={@flash["info"]} class="alert alert-info" role="alert"> <p
<%= @flash["info"] %> :if={@flash && @flash |> Map.has_key?("info")}
class="alert alert-info cursor-pointer"
role="alert"
phx-click="lv:clear-flash"
phx-value-key="info"
>
<%= live_flash(@flash, :info) %>
</p> </p>
<p :if={@flash["error"]} class="alert alert-danger" role="alert">
<%= @flash["error"] %> <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"
>
<%= live_flash(@flash, :error) %>
</p> </p>
</div> </div>
</header> </header>
@ -16,3 +29,17 @@
<%= @inner_content %> <%= @inner_content %>
</div> </div>
</main> </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>

View File

@ -1,45 +0,0 @@
<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>

View File

@ -1,6 +1,7 @@
defmodule MemexWeb.UserRegistrationController do defmodule MemexWeb.UserRegistrationController do
use MemexWeb, :controller use MemexWeb, :controller
import MemexWeb.Gettext import MemexWeb.Gettext
alias Ecto.Changeset
alias Memex.{Accounts, Accounts.Invites} alias Memex.{Accounts, Accounts.Invites}
def new(conn, %{"invite" => invite_token}) do def new(conn, %{"invite" => invite_token}) do
@ -69,8 +70,8 @@ defmodule MemexWeb.UserRegistrationController do
|> put_flash(:error, dgettext("errors", "sorry, this invite was not found or expired")) |> put_flash(:error, dgettext("errors", "sorry, this invite was not found or expired"))
|> redirect(to: ~p"/") |> redirect(to: ~p"/")
{:error, %Ecto.Changeset{} = changeset} -> {:error, %Changeset{} = changeset} ->
conn |> render("new.html", changeset: changeset, invite_token: invite_token) conn |> render(:new, changeset: changeset, invite_token: invite_token)
end end
end end
end end

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4"> <div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-400 text-xl"> <h1 class="title text-primary-400 text-xl">
<%= dgettext("actions", "Reset password") %> <%= dgettext("actions", "reset password") %>
</h1> </h1>
<.form <.form
@ -26,7 +26,7 @@
) %> ) %>
<%= error_tag(f, :password_confirmation, "col-span-3") %> <%= error_tag(f, :password_confirmation, "col-span-3") %>
<%= submit(dgettext("actions", "Reset password"), <%= submit(dgettext("actions", "reset password"),
class: "mx-auto btn btn-primary col-span-3" class: "mx-auto btn btn-primary col-span-3"
) %> ) %>
</.form> </.form>

View File

@ -6,23 +6,26 @@
phx-target={@myself} phx-target={@myself}
phx-change="validate" phx-change="validate"
phx-submit="save" phx-submit="save"
phx-debounce="300" phx-hook="CtrlEnter"
class="flex flex-col justify-start items-stretch space-y-4" class="flex flex-col justify-start items-stretch space-y-4"
> >
<%= text_input(f, :slug, <%= text_input(f, :slug,
class: "input input-primary", class: "input input-primary",
placeholder: gettext("slug"), placeholder: gettext("slug"),
aria_label: gettext("slug") aria_label: gettext("slug"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :slug) %> <%= error_tag(f, :slug) %>
<%= textarea(f, :content, <%= textarea(f, :content,
id: "context-form-content", id: "context-form-content",
class: "input input-primary h-64 min-h-64", class: "input input-primary h-64 min-h-64",
phx_hook: "MaintainAttrs",
phx_update: "ignore", phx_update: "ignore",
placeholder: gettext("use [[note-slug]] to link to a note"), placeholder:
aria_label: gettext("use [[note-slug]] to link to a note") 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
) %> ) %>
<%= error_tag(f, :content) %> <%= error_tag(f, :content) %>
@ -30,7 +33,8 @@
id: "tags-input", id: "tags-input",
class: "input input-primary", class: "input input-primary",
placeholder: gettext("tag1,tag2"), placeholder: gettext("tag1,tag2"),
aria_label: gettext("tag1,tag2") aria_label: gettext("tag1,tag2"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :tags_string) %> <%= error_tag(f, :tags_string) %>
@ -38,7 +42,8 @@
<%= select(f, :visibility, Ecto.Enum.values(Memex.Contexts.Context, :visibility), <%= select(f, :visibility, Ecto.Enum.values(Memex.Contexts.Context, :visibility),
class: "grow input input-primary", class: "grow input input-primary",
prompt: gettext("select privacy"), prompt: gettext("select privacy"),
aria_label: gettext("select privacy") aria_label: gettext("select privacy"),
phx_debounce: 300
) %> ) %>
<%= submit(dgettext("actions", "save"), <%= submit(dgettext("actions", "save"),

View File

@ -10,6 +10,7 @@
phx-target={@myself} phx-target={@myself}
phx-change="validate" phx-change="validate"
phx-submit="save" phx-submit="save"
phx-hook="CtrlEnter"
> >
<div <div
:if={@changeset.action && not @changeset.valid?()} :if={@changeset.action && not @changeset.valid?()}
@ -18,13 +19,27 @@
<%= changeset_errors(@changeset) %> <%= changeset_errors(@changeset) %>
</div> </div>
<%= label(f, :name, gettext("name"), class: "title text-lg text-primary-400") %> <%= label(f, :name, gettext("name"),
<%= text_input(f, :name, class: "input input-primary col-span-2") %> class: "title text-lg text-primary-400",
phx_debounce: 300
) %>
<%= text_input(f, :name,
class: "input input-primary col-span-2",
phx_debounce: 300
) %>
<%= error_tag(f, :name, "col-span-3") %> <%= error_tag(f, :name, "col-span-3") %>
<%= label(f, :uses_left, gettext("uses left"), class: "title text-lg text-primary-400") %> <%= label(f, :uses_left, gettext("uses left"),
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %> 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
) %>
<%= error_tag(f, :uses_left, "col-span-3") %> <%= error_tag(f, :uses_left, "col-span-3") %>
<span class="col-span-3 text-primary-500 italic text-center"> <span class="col-span-3 text-primary-500 italic text-center">
<%= gettext(~s/leave "uses left" blank to make invite unlimited/) %> <%= gettext(~s/leave "uses left" blank to make invite unlimited/) %>
</span> </span>

View File

@ -35,7 +35,7 @@
</form> </form>
</:code_actions> </:code_actions>
<.link <.link
patch={~p"/invites/#{invite}/edit"} patch={~p"/invites/edit/#{invite}"}
class="text-primary-400 link" class="text-primary-400 link"
aria-label={ aria-label={
dgettext("actions", "edit invite for %{invite_name}", invite_name: invite.name) dgettext("actions", "edit invite for %{invite_name}", invite_name: invite.name)

View File

@ -6,23 +6,24 @@
phx-target={@myself} phx-target={@myself}
phx-change="validate" phx-change="validate"
phx-submit="save" phx-submit="save"
phx-debounce="300" phx-hook="CtrlEnter"
class="flex flex-col justify-start items-stretch space-y-4" class="flex flex-col justify-start items-stretch space-y-4"
> >
<%= text_input(f, :slug, <%= text_input(f, :slug,
class: "input input-primary", class: "input input-primary",
placeholder: gettext("slug"), placeholder: gettext("slug"),
aria_label: gettext("slug") aria_label: gettext("slug"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :slug) %> <%= error_tag(f, :slug) %>
<%= textarea(f, :content, <%= textarea(f, :content,
id: "note-form-content", id: "note-form-content",
class: "input input-primary h-64 min-h-64", class: "input input-primary h-64 min-h-64",
phx_hook: "MaintainAttrs",
phx_update: "ignore", phx_update: "ignore",
placeholder: gettext("content"), placeholder: gettext("use [note-slug] to link to a note"),
aria_label: gettext("content") aria_label: gettext("use [note-slug] to link to a note"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :content) %> <%= error_tag(f, :content) %>
@ -30,7 +31,8 @@
id: "tags-input", id: "tags-input",
class: "input input-primary", class: "input input-primary",
placeholder: gettext("tag1,tag2"), placeholder: gettext("tag1,tag2"),
aria_label: gettext("tag1,tag2") aria_label: gettext("tag1,tag2"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :tags_string) %> <%= error_tag(f, :tags_string) %>
@ -38,7 +40,8 @@
<%= select(f, :visibility, Ecto.Enum.values(Memex.Notes.Note, :visibility), <%= select(f, :visibility, Ecto.Enum.values(Memex.Notes.Note, :visibility),
class: "grow input input-primary", class: "grow input input-primary",
prompt: gettext("select privacy"), prompt: gettext("select privacy"),
aria_label: gettext("select privacy") aria_label: gettext("select privacy"),
phx_debounce: 300
) %> ) %>
<%= submit(dgettext("actions", "save"), <%= submit(dgettext("actions", "save"),

View File

@ -6,23 +6,30 @@
phx-target={@myself} phx-target={@myself}
phx-change="validate" phx-change="validate"
phx-submit="save" phx-submit="save"
phx-debounce="300" phx-hook="CtrlEnter"
class="flex flex-col justify-start items-stretch space-y-4" class="flex flex-col justify-start items-stretch space-y-4"
> >
<%= text_input(f, :slug, <%= text_input(f, :slug,
class: "input input-primary", class: "input input-primary",
placeholder: gettext("slug"), placeholder: gettext("slug"),
aria_label: gettext("slug") aria_label: gettext("slug"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :slug) %> <%= error_tag(f, :slug) %>
<%= textarea(f, :description, <%= textarea(f, :description,
id: "pipeline-form-description", id: "pipeline-form-description",
class: "input input-primary h-64 min-h-64", class: "input input-primary h-64 min-h-64",
phx_hook: "MaintainAttrs",
phx_update: "ignore", phx_update: "ignore",
placeholder: gettext("description"), placeholder:
aria_label: gettext("description") 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
) %> ) %>
<%= error_tag(f, :description) %> <%= error_tag(f, :description) %>
@ -30,7 +37,8 @@
id: "tags-input", id: "tags-input",
class: "input input-primary", class: "input input-primary",
placeholder: gettext("tag1,tag2"), placeholder: gettext("tag1,tag2"),
aria_label: gettext("tag1,tag2") aria_label: gettext("tag1,tag2"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :tags_string) %> <%= error_tag(f, :tags_string) %>
@ -38,7 +46,8 @@
<%= select(f, :visibility, Ecto.Enum.values(Memex.Pipelines.Pipeline, :visibility), <%= select(f, :visibility, Ecto.Enum.values(Memex.Pipelines.Pipeline, :visibility),
class: "grow input input-primary", class: "grow input input-primary",
prompt: gettext("select privacy"), prompt: gettext("select privacy"),
aria_label: gettext("select privacy") aria_label: gettext("select privacy"),
phx_debounce: 300
) %> ) %>
<%= submit(dgettext("actions", "save"), <%= submit(dgettext("actions", "save"),

View File

@ -9,15 +9,7 @@
</.link> </.link>
</div> </div>
<textarea <.pipeline_content pipeline={@pipeline} />
:if={@pipeline.description}
id="show-pipeline-description"
class="input input-primary h-32 min-h-32"
phx-hook="MaintainAttrs"
phx-update="ignore"
readonly
phx-no-format
><%= @pipeline.description %></textarea>
<p class="self-end"> <p class="self-end">
<%= gettext("Visibility: %{visibility}", visibility: @pipeline.visibility) %> <%= gettext("Visibility: %{visibility}", visibility: @pipeline.visibility) %>

View File

@ -6,23 +6,30 @@
phx-target={@myself} phx-target={@myself}
phx-change="validate" phx-change="validate"
phx-submit="save" phx-submit="save"
phx-debounce="300" phx-hook="CtrlEnter"
class="flex flex-col justify-start items-stretch space-y-4" class="flex flex-col justify-start items-stretch space-y-4"
> >
<%= text_input(f, :title, <%= text_input(f, :title,
class: "input input-primary", class: "input input-primary",
placeholder: gettext("title"), placeholder: gettext("title"),
aria_label: gettext("title") aria_label: gettext("title"),
phx_debounce: 300
) %> ) %>
<%= error_tag(f, :title) %> <%= error_tag(f, :title) %>
<%= textarea(f, :content, <%= textarea(f, :content,
id: "step-form-content", id: "step-form-content",
class: "input input-primary h-64 min-h-64", class: "input input-primary h-64 min-h-64",
phx_hook: "MaintainAttrs",
phx_update: "ignore", phx_update: "ignore",
placeholder: gettext("use [[context-slug]] to link to a context"), placeholder:
aria_label: gettext("use [[context-slug]] to link to a context") 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
) %> ) %>
<%= error_tag(f, :content) %> <%= error_tag(f, :content) %>

View File

@ -95,7 +95,7 @@ defmodule MemexWeb.Router do
live_session :admin, on_mount: [{MemexWeb.UserAuth, :ensure_admin}] do live_session :admin, on_mount: [{MemexWeb.UserAuth, :ensure_admin}] do
live "/invites", InviteLive.Index, :index live "/invites", InviteLive.Index, :index
live "/invites/new", InviteLive.Index, :new live "/invites/new", InviteLive.Index, :new
live "/invites/:id/edit", InviteLive.Index, :edit live "/invites/edit/:id", InviteLive.Index, :edit
end end
end end

View File

@ -4,8 +4,8 @@ defmodule Memex.MixProject do
def project do def project do
[ [
app: :memex, app: :memex,
version: "0.1.11", version: "0.1.14",
elixir: "1.14.4", elixir: "1.15.6",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod, start_permanent: Mix.env() == :prod,
aliases: aliases(), aliases: aliases(),
@ -51,8 +51,8 @@ defmodule Memex.MixProject do
{:phoenix_ecto, "~> 4.4"}, {:phoenix_ecto, "~> 4.4"},
{:phoenix_html, "~> 3.0"}, {:phoenix_html, "~> 3.0"},
{:phoenix_live_reload, "~> 1.2", only: :dev}, {:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.18.0"}, {:phoenix_live_view, "~> 0.20.0"},
{:phoenix_live_dashboard, "~> 0.6"}, {:phoenix_live_dashboard, "~> 0.8"},
{:ecto_sql, "~> 3.6"}, {:ecto_sql, "~> 3.6"},
{:postgrex, ">= 0.0.0"}, {:postgrex, ">= 0.0.0"},
{:floki, ">= 0.30.0", only: :test}, {:floki, ">= 0.30.0", only: :test},

View File

@ -1,54 +1,54 @@
%{ %{
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.0.1", "9be815469e6bfefec40fa74658ecbbe6897acfb57614df1416eeccd4903f602c", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "486bb95efb645d1efc6794c1ddd776a186a9a713abf06f45708a6ce324fb96cf"}, "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"}, "bunt": {:hex, :bunt, "0.2.1", "e2d4792f7bc0ced7583ab54922808919518d0e57ee162901a16a1b6664ef3b14", [:mix], [], "hexpm", "a330bfb4245239787b15005e66ae6845c9cd524a288f0d141c148b02603777a5"},
"castore": {:hex, :castore, "1.0.1", "240b9edb4e9e94f8f56ab39d8d2d0a57f49e46c56aced8f873892df8ff64ff5a", [:mix], [], "hexpm", "b4951de93c224d44fac71614beabd88b71932d0b1dea80d2f80fb9044e01bbb3"}, "castore": {:hex, :castore, "1.0.4", "ff4d0fb2e6411c0479b1d965a814ea6d00e51eb2f58697446e9c41a97d940b28", [:mix], [], "hexpm", "9418c1b8144e11656f0be99943db4caf04612e3eaecefb5dae9a2a87565584f8"},
"comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, "comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "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"}, "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.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "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"}, "credo": {:hex, :credo, "1.7.1", "6e26bbcc9e22eefbff7e43188e69924e78818e2fe6282487d0703652bc20fd62", [: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", "e9871c6095a4c0381c89b6aa98bc6260a8ba6addccf7f6a53da8849c748a58a2"},
"db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"}, "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"},
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"}, "dialyxir": {:hex, :dialyxir, "1.4.2", "764a6e8e7a354f0ba95d58418178d486065ead1f69ad89782817c296d0d746a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "516603d8067b2fd585319e4b13d3674ad4f314a5902ba8130cd97dc902ce6bbd"},
"earmark_parser": {:hex, :earmark_parser, "1.4.31", "a93921cdc6b9b869f519213d5bc79d9e218ba768d7270d46fdcf1c01bacff9e2", [:mix], [], "hexpm", "317d367ee0335ef037a87e46c91a2269fef6306413f731e8ec11fc45a7efd059"}, "earmark_parser": {:hex, :earmark_parser, "1.4.37", "2ad73550e27c8946648b06905a57e4d454e4d7229c2dafa72a0348c99d8be5f7", [:mix], [], "hexpm", "6b19783f2802f039806f375610faa22da130b8edc21209d0bff47918bb48360e"},
"ecto": {:hex, :ecto, "3.10.1", "c6757101880e90acc6125b095853176a02da8f1afe056f91f1f90b80c9389822", [: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", "d2ac4255f1601bdf7ac74c0ed971102c6829dc158719b94bd30041bbad77f87a"}, "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.10", "e14d400930f401ca9f541b3349212634e44027d7f919bbb71224d7ac0d0e8acd", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.15.7 or ~> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "505e8cd81e4f17c090be0f99e92b1b3f0fd915f98e76965130b8ccfb891e7088"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.14", "7a20cfe913b0476542b43870e67386461258734896035e3f284039fd18bd4c4c", [: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", "22f5f98592dd597db9416fcef00effae0787669fdcb6faf447e982b553798e98"},
"ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [: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", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"}, "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.6", "67716309dc5d43e16b5abbd00c01b8df6a0c2ab54a8f595468035a50189f9169", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5a0569756b0f7873a77687800c164cca6dfc03a09418e6fcf853d78991f49940"}, "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"}, "eqrcode": {:hex, :eqrcode, "0.1.10", "6294fece9d68ad64eef1c3c92cf111cfd6469f4fbf230a2d4cc905a682178f3f", [:mix], [], "hexpm", "da30e373c36a0fd37ab6f58664b16029919896d6c45a68a95cc4d713e81076f1"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [: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", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"}, "ex_doc": {:hex, :ex_doc, "0.30.9", "d691453495c47434c0f2052b08dd91cc32bc4e1a218f86884563448ee2502dd2", [: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", "d7aaaf21e95dc5cddabf89063327e96867d00013963eadf2c6ad135506a8bc10"},
"expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"}, "expo": {:hex, :expo, "0.4.1", "1c61d18a5df197dfda38861673d392e642649a9cef7694d2f97a587b2cfb319b", [:mix], [], "hexpm", "2ff7ba7a798c8c543c12550fa0e2cbc81b95d4974c65855d8d15ba7b37a1ce47"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"floki": {:hex, :floki, "0.34.2", "5fad07ef153b3b8ec110b6b155ec3780c4b2c4906297d0b4be1a7162d04a7e02", [:mix], [], "hexpm", "26b9d50f0f01796bc6be611ca815c5e0de034d2128e39cc9702eee6b66a4d1c8"}, "floki": {:hex, :floki, "0.35.2", "87f8c75ed8654b9635b311774308b2760b47e9a579dabf2e4d5f1e1d42c39e0b", [:mix], [], "hexpm", "6b05289a8e9eac475f644f09c2e4ba7e19201fd002b89c28c1293e7bd16773d9"},
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"}, "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.22.1", "e7942988383c3d9eed4bdc22fc63e712b655ae94a672a27e4900e3d4a2c43581", [:mix], [{:expo, "~> 0.4.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "ad105b8dab668ee3f90c0d3d94ba75e9aead27a62495c101d94f2657a190ac5d"}, "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.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, "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": {: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_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.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "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.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"}, "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
"nimble_parsec": {:hex, :nimble_parsec, "1.3.0", "9e18a119d9efc3370a3ef2a937bf0b24c088d9c4bf0ba9d7c3751d49d347d035", [:mix], [], "hexpm", "7977f183127a7cbe9346981e2f480dc04c55ffddaef746bd58debd566070eef8"}, "nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
"oban": {:hex, :oban, "2.15.0", "27b9c2845cdff30c98c8060b11a64318e79bbc1bd32b8dc95fa59a1580a8d90c", [: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", "22e181c540335d1dd5c995be00435927075519207d62b3de32477d95dbf9dfd3"}, "oban": {:hex, :oban, "2.16.3", "33ebe7da637cce4da5438c1636bc25448a8628994a0c064ac6078bbe6dc97bd6", [: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", "4d8a7fb62f63cf2f2080c78954425f5fd8916ef57196b7f79b5bc657abb2ac5f"},
"phoenix": {:hex, :phoenix, "1.7.2", "c375ffb482beb4e3d20894f84dd7920442884f5f5b70b9f4528cbe0cedefec63", [: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.4", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1ebca94b32b4d0e097ab2444a9742ed8ff3361acad17365e4e6b2e79b4792159"}, "phoenix": {:hex, :phoenix, "1.7.10", "02189140a61b2ce85bb633a9b6fd02dff705a5f1596869547aeb2b2b95edd729", [: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 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", "cf784932e010fd736d656d7fead6a584a4498efefe5b8227e9f383bf15bb79d0"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [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", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.3", "86e9878f833829c3f66da03d75254c155d91d72a201eb56ae83482328dc7ca93", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "d36c401206f3011fefd63d04e8ef626ec8791975d9d107f9a0817d426f61ac07"},
"phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, "phoenix_html": {:hex, :phoenix_html, "3.3.3", "380b8fb45912b5638d2f1d925a3771b4516b9a78587249cabe394e0a5d579dc9", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "923ebe6fec6e2e3b3e569dfbdc6560de932cd54b000ada0208b5f45024bdd76c"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.2", "97cc4ff2dba1ebe504db72cb45098cb8e91f11160528b980bd282cc45c73b29c", [: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]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.3", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "0e5fdf063c7a3b620c566a30fcf68b7ee02e5e46fe48ee46a6ec3ba382dc05b7"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.3", "7ff51c9b6609470f681fbea20578dede0e548302b0c8bdf338b5a753a4f045bf", [: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", "f9470a0a8bae4f56430a23d42f977b5a6205fdba6559d76f932b876bfaec652d"},
"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_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.18.18", "1f38fbd7c363723f19aad1a04b5490ff3a178e37daaf6999594d5f34796c47fc", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a5810d0472f3189ede6d2a95bda7f31c6113156b91784a3426cb0ab6a6d85214"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.1", "92a37acf07afca67ac98bd326532ba8f44ad7d4bdf3e4361b03f7f02594e5ae9", [: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]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "be494fd1215052729298b0e97d5c2ce8e719c00854b82cd8cf15c1cd7fcf6294"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, "phoenix_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": {:hex, :plug, "1.15.1", "b7efd81c1a1286f13efb3f769de343236bd8b7d23b4a9f40d3002fc39ad8f74c", [: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", "459497bd94d041d98d948054ec6c0b76feacd28eec38b219ca04c0de13c79d30"},
"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_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"}, "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
"postgrex": {:hex, :postgrex, "0.16.5", "fcc4035cc90e23933c5d69a9cd686e329469446ef7abba2cf70f08e2c4b69810", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {: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", "edead639dc6e882618c01d8fc891214c481ab9a3788dfe38dd5e37fd1d5fb2e8"}, "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"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"swoosh": {:hex, :swoosh, "1.9.1", "0a5d7bf9954eb41d7e55525bc0940379982b090abbaef67cd8e1fd2ed7f8ca1a", [: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", "76dffff3ffcab80f249d5937a592eaef7cc49ac6f4cdd27e622868326ed6371e"}, "swoosh": {:hex, :swoosh, "1.14.0", "710e363e114dedb4080b737e0307f5410887ffc9a239f818231e5618b6b84e1b", [: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, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {: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", "dccfc986ac99c18345ab3e1a8b934b2d817fd6d59a2494f0af78502184c71025"},
"table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"},
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "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_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"}, "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.0", "f6bbce90226121d62a0715bca7c986c5e43de0ccc9475d79c55381d1796368cc", [:mix], [], "hexpm", "b51ac706df8a7a48a2c622ee02d09d68be8c40418698ffa909d73ae207eb5fb8"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
"websock_adapter": {:hex, :websock_adapter, "0.5.0", "cea35d8bbf1a6964e32d4b02ceb561dfb769c04f16d60d743885587e7d2ca55b", [:mix], [{:bandit, "~> 0.6", [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", "16318b124effab8209b1eb7906c636374f623dc9511a8278ad09c083cea5bb83"}, "websock_adapter": {:hex, :websock_adapter, "0.5.5", "9dfeee8269b27e958a65b3e235b7e447769f66b5b5925385f5a569269164a210", [: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", "4b977ba4a01918acbf77045ff88de7f6972c2a009213c515a445c48f224ffce9"},
} }

View File

@ -16,12 +16,6 @@ msgstr ""
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -50,8 +44,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:50 #: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:34 #: 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/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:42 #: lib/memex_web/live/pipeline_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/show.html.heex:113 #: lib/memex_web/live/pipeline_live/show.html.heex:105
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete" msgid "delete"
msgstr "" msgstr ""
@ -66,8 +60,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:40 #: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:24 #: 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/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:32 #: lib/memex_web/live/pipeline_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/show.html.heex:102 #: lib/memex_web/live/pipeline_live/show.html.heex:94
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit" msgid "edit"
msgstr "" msgstr ""
@ -114,16 +108,16 @@ msgstr ""
msgid "register" msgid "register"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:44 #: lib/memex_web/live/context_live/form_component.html.heex:49
#: lib/memex_web/live/invite_live/form_component.html.heex:32 #: lib/memex_web/live/invite_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:47
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44 #: lib/memex_web/live/pipeline_live/form_component.html.heex:53
#: lib/memex_web/live/step_live/form_component.html.heex:30 #: lib/memex_web/live/step_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "save" msgid "save"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:128 #: lib/memex_web/live/pipeline_live/show.html.heex:120
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "add step" msgid "add step"
msgstr "" msgstr ""
@ -168,12 +162,12 @@ msgid "delete %{note_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:49 #: lib/memex_web/live/pipeline_live/index.html.heex:49
#: lib/memex_web/live/pipeline_live/show.html.heex:40 #: lib/memex_web/live/pipeline_live/show.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}" msgid "delete %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:111 #: lib/memex_web/live/pipeline_live/show.html.heex:103
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{step_title}" msgid "delete %{step_title}"
msgstr "" msgstr ""
@ -198,7 +192,7 @@ msgstr ""
msgid "edit %{pipeline_slug}" msgid "edit %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:100 #: lib/memex_web/live/pipeline_live/show.html.heex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit %{step_title}" msgid "edit %{step_title}"
msgstr "" msgstr ""
@ -208,12 +202,18 @@ msgstr ""
msgid "edit invite for %{invite_name}" msgid "edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:90 #: lib/memex_web/live/pipeline_live/show.html.heex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} down" msgid "move %{step_title} down"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:74 #: lib/memex_web/live/pipeline_live/show.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} up" msgid "move %{step_title} up"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "reset password"
msgstr ""

View File

@ -16,12 +16,6 @@ msgstr ""
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -50,8 +44,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:50 #: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:34 #: 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/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:42 #: lib/memex_web/live/pipeline_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/show.html.heex:113 #: lib/memex_web/live/pipeline_live/show.html.heex:105
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete" msgid "delete"
msgstr "" msgstr ""
@ -66,8 +60,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:40 #: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:24 #: 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/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:32 #: lib/memex_web/live/pipeline_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/show.html.heex:102 #: lib/memex_web/live/pipeline_live/show.html.heex:94
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit" msgid "edit"
msgstr "" msgstr ""
@ -114,16 +108,16 @@ msgstr ""
msgid "register" msgid "register"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:44 #: lib/memex_web/live/context_live/form_component.html.heex:49
#: lib/memex_web/live/invite_live/form_component.html.heex:32 #: lib/memex_web/live/invite_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:47
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44 #: lib/memex_web/live/pipeline_live/form_component.html.heex:53
#: lib/memex_web/live/step_live/form_component.html.heex:30 #: lib/memex_web/live/step_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "save" msgid "save"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:128 #: lib/memex_web/live/pipeline_live/show.html.heex:120
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "add step" msgid "add step"
msgstr "" msgstr ""
@ -168,12 +162,12 @@ msgid "delete %{note_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:49 #: lib/memex_web/live/pipeline_live/index.html.heex:49
#: lib/memex_web/live/pipeline_live/show.html.heex:40 #: lib/memex_web/live/pipeline_live/show.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}" msgid "delete %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:111 #: lib/memex_web/live/pipeline_live/show.html.heex:103
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{step_title}" msgid "delete %{step_title}"
msgstr "" msgstr ""
@ -198,7 +192,7 @@ msgstr ""
msgid "edit %{pipeline_slug}" msgid "edit %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:100 #: lib/memex_web/live/pipeline_live/show.html.heex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit %{step_title}" msgid "edit %{step_title}"
msgstr "" msgstr ""
@ -208,12 +202,18 @@ msgstr ""
msgid "edit invite for %{invite_name}" msgid "edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:90 #: lib/memex_web/live/pipeline_live/show.html.heex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} down" msgid "move %{step_title} down"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:74 #: lib/memex_web/live/pipeline_live/show.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} up" msgid "move %{step_title} up"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format, fuzzy
msgid "reset password"
msgstr ""

View File

@ -12,14 +12,14 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 3.7.4\n" "X-Generator: Translate Toolkit 3.7.4\n"
#: lib/memex_web/components/layouts/live.html.heex:43 #: lib/memex_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:15 #: lib/memex_web/live/context_live/show.html.heex:15
#: lib/memex_web/live/note_live/show.html.heex:15 #: lib/memex_web/live/note_live/show.html.heex:15
#: lib/memex_web/live/pipeline_live/show.html.heex:23 #: lib/memex_web/live/pipeline_live/show.html.heex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}" msgid "Visibility: %{visibility}"
msgstr "" msgstr ""
@ -45,12 +45,6 @@ msgstr ""
msgid "confirm new password" msgid "confirm new password"
msgstr "" msgstr ""
#: lib/memex_web/live/note_live/form_component.html.heex:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28 #: 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:35
#: lib/memex_web/live/context_live/index.ex:43 #: lib/memex_web/live/context_live/index.ex:43
@ -228,7 +222,7 @@ msgstr ""
msgid "public signups" msgid "public signups"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:31 #: lib/memex_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register" msgid "register"
msgstr "" msgstr ""
@ -243,20 +237,20 @@ msgstr ""
msgid "report bugs or request features" msgid "report bugs or request features"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:45 #: lib/memex_web/live/context_live/form_component.html.heex:50
#: lib/memex_web/live/note_live/form_component.html.heex:45 #: lib/memex_web/live/note_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:45 #: lib/memex_web/live/pipeline_live/form_component.html.heex:54
#: lib/memex_web/live/step_live/form_component.html.heex:31 #: lib/memex_web/live/step_live/form_component.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:40 #: lib/memex_web/live/context_live/form_component.html.heex:44
#: lib/memex_web/live/context_live/form_component.html.heex:41 #: lib/memex_web/live/context_live/form_component.html.heex:45
#: lib/memex_web/live/note_live/form_component.html.heex:40 #: lib/memex_web/live/note_live/form_component.html.heex:42
#: lib/memex_web/live/note_live/form_component.html.heex:41 #: lib/memex_web/live/note_live/form_component.html.heex:43
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40 #: lib/memex_web/live/pipeline_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:41 #: lib/memex_web/live/pipeline_live/form_component.html.heex:49
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "select privacy" msgid "select privacy"
msgstr "" msgstr ""
@ -272,12 +266,12 @@ msgstr ""
msgid "settings" msgid "settings"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:32 #: lib/memex_web/live/context_live/form_component.html.heex:35
#: lib/memex_web/live/context_live/form_component.html.heex:33 #: lib/memex_web/live/context_live/form_component.html.heex:36
#: lib/memex_web/live/note_live/form_component.html.heex:32
#: lib/memex_web/live/note_live/form_component.html.heex:33 #: lib/memex_web/live/note_live/form_component.html.heex:33
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32 #: lib/memex_web/live/note_live/form_component.html.heex:34
#: lib/memex_web/live/pipeline_live/form_component.html.heex:33 #: 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 #, elixir-autogen, elixir-format
msgid "tag1,tag2" msgid "tag1,tag2"
msgstr "" msgstr ""
@ -334,8 +328,6 @@ msgid "no contexts found"
msgstr "" msgstr ""
#: lib/memex_web/components/pipelines_table_component.ex:48 #: lib/memex_web/components/pipelines_table_component.ex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "description" msgid "description"
msgstr "" msgstr ""
@ -409,12 +401,6 @@ msgstr ""
msgid "home" msgid "home"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:24
#: lib/memex_web/live/context_live/form_component.html.heex:25
#, 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.ex:10
#: lib/memex_web/live/faq_live.html.heex:3 #: lib/memex_web/live/faq_live.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -436,7 +422,7 @@ msgstr ""
msgid "what is this?" msgid "what is this?"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:60 #: lib/memex_web/live/pipeline_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{position}. %{title}" msgid "%{position}. %{title}"
msgstr "" msgstr ""
@ -461,12 +447,12 @@ msgstr ""
msgid "add step to %{slug}" msgid "add step to %{slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:54 #: lib/memex_web/live/pipeline_live/show.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "no steps" msgid "no steps"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:49 #: lib/memex_web/live/pipeline_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "steps:" msgid "steps:"
msgstr "" msgstr ""
@ -477,12 +463,6 @@ msgstr ""
msgid "title" msgid "title"
msgstr "" msgstr ""
#: lib/memex_web/live/step_live/form_component.html.heex:24
#: lib/memex_web/live/step_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "use [[context-slug]] to link to a context"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65 #: lib/memex_web/live/faq_live.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
@ -658,7 +638,7 @@ msgstr ""
msgid "keep me logged in for 60 days" msgid "keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21 #: lib/memex_web/live/invite_live/form_component.html.heex:22
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "name" msgid "name"
msgstr "" msgstr ""
@ -669,12 +649,12 @@ msgstr ""
msgid "password" msgid "password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25 #: lib/memex_web/live/invite_live/form_component.html.heex:32
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "uses left" msgid "uses left"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29 #: lib/memex_web/live/invite_live/form_component.html.heex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "leave \"uses left\" blank to make invite unlimited" msgid "leave \"uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
@ -711,3 +691,23 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "reset your password" msgid "reset your password"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#: lib/memex_web/live/pipeline_live/form_component.html.heex:29
#: lib/memex_web/live/step_live/form_component.html.heex:25
#: lib/memex_web/live/step_live/form_component.html.heex:29
#, 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:25
#: lib/memex_web/live/context_live/form_component.html.heex:27
#, 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:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format, fuzzy
msgid "use [note-slug] to link to a note"
msgstr ""

View File

@ -79,13 +79,6 @@ msgstr ""
msgid "unauthorized" msgid "unauthorized"
msgstr "" 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_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.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 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
@ -93,9 +86,9 @@ msgstr ""
msgid "oops, something went wrong! please check the errors below." msgid "oops, something went wrong! please check the errors below."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:11 #: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:40 #: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:69 #: lib/memex_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "sorry, this invite was not found or expired" msgid "sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -136,8 +129,8 @@ msgstr ""
msgid "reset password link is invalid or it has expired." msgid "reset password link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:21 #: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:50 #: lib/memex_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "sorry, public registration is disabled" msgid "sorry, public registration is disabled"
msgstr "" msgstr ""
@ -146,3 +139,10 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "user confirmation link is invalid or it has expired." msgid "user confirmation link is invalid or it has expired."
msgstr "" 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 ""

View File

@ -70,8 +70,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:47 #: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:31 #: 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/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:39 #: lib/memex_web/live/pipeline_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/show.html.heex:110 #: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure?" msgid "are you sure?"
msgstr "" msgstr ""
@ -106,7 +106,7 @@ msgstr ""
msgid "copied to clipboard" msgid "copied to clipboard"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:64 #: lib/memex_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "please check your email to verify your account" msgid "please check your email to verify your account"
msgstr "" msgstr ""
@ -137,7 +137,7 @@ msgstr ""
msgid "are you sure you want to delete %{email}? this action is permanent!" msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34 #: lib/memex_web/live/invite_live/form_component.html.heex:49
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""

View File

@ -10,14 +10,14 @@
msgid "" msgid ""
msgstr "" msgstr ""
#: lib/memex_web/components/layouts/live.html.heex:43 #: lib/memex_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:15 #: lib/memex_web/live/context_live/show.html.heex:15
#: lib/memex_web/live/note_live/show.html.heex:15 #: lib/memex_web/live/note_live/show.html.heex:15
#: lib/memex_web/live/pipeline_live/show.html.heex:23 #: lib/memex_web/live/pipeline_live/show.html.heex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}" msgid "Visibility: %{visibility}"
msgstr "" msgstr ""
@ -43,12 +43,6 @@ msgstr ""
msgid "confirm new password" msgid "confirm new password"
msgstr "" msgstr ""
#: lib/memex_web/live/note_live/form_component.html.heex:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28 #: 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:35
#: lib/memex_web/live/context_live/index.ex:43 #: lib/memex_web/live/context_live/index.ex:43
@ -226,7 +220,7 @@ msgstr ""
msgid "public signups" msgid "public signups"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:31 #: lib/memex_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register" msgid "register"
msgstr "" msgstr ""
@ -241,20 +235,20 @@ msgstr ""
msgid "report bugs or request features" msgid "report bugs or request features"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:45 #: lib/memex_web/live/context_live/form_component.html.heex:50
#: lib/memex_web/live/note_live/form_component.html.heex:45 #: lib/memex_web/live/note_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:45 #: lib/memex_web/live/pipeline_live/form_component.html.heex:54
#: lib/memex_web/live/step_live/form_component.html.heex:31 #: lib/memex_web/live/step_live/form_component.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:40 #: lib/memex_web/live/context_live/form_component.html.heex:44
#: lib/memex_web/live/context_live/form_component.html.heex:41 #: lib/memex_web/live/context_live/form_component.html.heex:45
#: lib/memex_web/live/note_live/form_component.html.heex:40 #: lib/memex_web/live/note_live/form_component.html.heex:42
#: lib/memex_web/live/note_live/form_component.html.heex:41 #: lib/memex_web/live/note_live/form_component.html.heex:43
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40 #: lib/memex_web/live/pipeline_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:41 #: lib/memex_web/live/pipeline_live/form_component.html.heex:49
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "select privacy" msgid "select privacy"
msgstr "" msgstr ""
@ -270,12 +264,12 @@ msgstr ""
msgid "settings" msgid "settings"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:32 #: lib/memex_web/live/context_live/form_component.html.heex:35
#: lib/memex_web/live/context_live/form_component.html.heex:33 #: lib/memex_web/live/context_live/form_component.html.heex:36
#: lib/memex_web/live/note_live/form_component.html.heex:32
#: lib/memex_web/live/note_live/form_component.html.heex:33 #: lib/memex_web/live/note_live/form_component.html.heex:33
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32 #: lib/memex_web/live/note_live/form_component.html.heex:34
#: lib/memex_web/live/pipeline_live/form_component.html.heex:33 #: 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 #, elixir-autogen, elixir-format
msgid "tag1,tag2" msgid "tag1,tag2"
msgstr "" msgstr ""
@ -332,8 +326,6 @@ msgid "no contexts found"
msgstr "" msgstr ""
#: lib/memex_web/components/pipelines_table_component.ex:48 #: lib/memex_web/components/pipelines_table_component.ex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "description" msgid "description"
msgstr "" msgstr ""
@ -407,12 +399,6 @@ msgstr ""
msgid "home" msgid "home"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:24
#: lib/memex_web/live/context_live/form_component.html.heex:25
#, 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.ex:10
#: lib/memex_web/live/faq_live.html.heex:3 #: lib/memex_web/live/faq_live.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -434,7 +420,7 @@ msgstr ""
msgid "what is this?" msgid "what is this?"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:60 #: lib/memex_web/live/pipeline_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{position}. %{title}" msgid "%{position}. %{title}"
msgstr "" msgstr ""
@ -459,12 +445,12 @@ msgstr ""
msgid "add step to %{slug}" msgid "add step to %{slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:54 #: lib/memex_web/live/pipeline_live/show.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "no steps" msgid "no steps"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:49 #: lib/memex_web/live/pipeline_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "steps:" msgid "steps:"
msgstr "" msgstr ""
@ -475,12 +461,6 @@ msgstr ""
msgid "title" msgid "title"
msgstr "" msgstr ""
#: lib/memex_web/live/step_live/form_component.html.heex:24
#: lib/memex_web/live/step_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "use [[context-slug]] to link to a context"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65 #: lib/memex_web/live/faq_live.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
@ -656,7 +636,7 @@ msgstr ""
msgid "keep me logged in for 60 days" msgid "keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21 #: lib/memex_web/live/invite_live/form_component.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "name" msgid "name"
msgstr "" msgstr ""
@ -667,12 +647,12 @@ msgstr ""
msgid "password" msgid "password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25 #: lib/memex_web/live/invite_live/form_component.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses left" msgid "uses left"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29 #: lib/memex_web/live/invite_live/form_component.html.heex:44
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "leave \"uses left\" blank to make invite unlimited" msgid "leave \"uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
@ -709,3 +689,23 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "reset your password" msgid "reset your password"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#: lib/memex_web/live/pipeline_live/form_component.html.heex:29
#: lib/memex_web/live/step_live/form_component.html.heex:25
#: lib/memex_web/live/step_live/form_component.html.heex:29
#, 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:25
#: lib/memex_web/live/context_live/form_component.html.heex:27
#, 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:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "use [note-slug] to link to a note"
msgstr ""

View File

@ -17,12 +17,6 @@ msgstr ""
msgid "Resend confirmation instructions" msgid "Resend confirmation instructions"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format
msgid "Reset password"
msgstr ""
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:15 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:15
#: lib/memex_web/controllers/user_settings_html/edit.html.heex:43 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -51,8 +45,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:50 #: lib/memex_web/live/note_live/index.html.heex:50
#: lib/memex_web/live/note_live/show.html.heex:34 #: 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/index.html.heex:52
#: lib/memex_web/live/pipeline_live/show.html.heex:42 #: lib/memex_web/live/pipeline_live/show.html.heex:34
#: lib/memex_web/live/pipeline_live/show.html.heex:113 #: lib/memex_web/live/pipeline_live/show.html.heex:105
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete" msgid "delete"
msgstr "" msgstr ""
@ -67,8 +61,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:40 #: lib/memex_web/live/note_live/index.html.heex:40
#: lib/memex_web/live/note_live/show.html.heex:24 #: 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/index.html.heex:40
#: lib/memex_web/live/pipeline_live/show.html.heex:32 #: lib/memex_web/live/pipeline_live/show.html.heex:24
#: lib/memex_web/live/pipeline_live/show.html.heex:102 #: lib/memex_web/live/pipeline_live/show.html.heex:94
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit" msgid "edit"
msgstr "" msgstr ""
@ -115,16 +109,16 @@ msgstr ""
msgid "register" msgid "register"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:44 #: lib/memex_web/live/context_live/form_component.html.heex:49
#: lib/memex_web/live/invite_live/form_component.html.heex:32 #: lib/memex_web/live/invite_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:47
#: lib/memex_web/live/pipeline_live/form_component.html.heex:44 #: lib/memex_web/live/pipeline_live/form_component.html.heex:53
#: lib/memex_web/live/step_live/form_component.html.heex:30 #: lib/memex_web/live/step_live/form_component.html.heex:37
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "save" msgid "save"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:128 #: lib/memex_web/live/pipeline_live/show.html.heex:120
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "add step" msgid "add step"
msgstr "" msgstr ""
@ -169,12 +163,12 @@ msgid "delete %{note_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/index.html.heex:49 #: lib/memex_web/live/pipeline_live/index.html.heex:49
#: lib/memex_web/live/pipeline_live/show.html.heex:40 #: lib/memex_web/live/pipeline_live/show.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{pipeline_slug}" msgid "delete %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:111 #: lib/memex_web/live/pipeline_live/show.html.heex:103
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "delete %{step_title}" msgid "delete %{step_title}"
msgstr "" msgstr ""
@ -199,7 +193,7 @@ msgstr ""
msgid "edit %{pipeline_slug}" msgid "edit %{pipeline_slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:100 #: lib/memex_web/live/pipeline_live/show.html.heex:92
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "edit %{step_title}" msgid "edit %{step_title}"
msgstr "" msgstr ""
@ -209,12 +203,18 @@ msgstr ""
msgid "edit invite for %{invite_name}" msgid "edit invite for %{invite_name}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:90 #: lib/memex_web/live/pipeline_live/show.html.heex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} down" msgid "move %{step_title} down"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:74 #: lib/memex_web/live/pipeline_live/show.html.heex:66
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "move %{step_title} up" msgid "move %{step_title} up"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:3
#: lib/memex_web/controllers/user_reset_password_html/edit.html.heex:29
#, elixir-autogen, elixir-format, fuzzy
msgid "reset password"
msgstr ""

View File

@ -11,14 +11,14 @@ msgstr ""
"Language: en\n" "Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/memex_web/components/layouts/live.html.heex:43 #: lib/memex_web/components/layouts/app.html.heex:43
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Reconnecting..." msgid "Reconnecting..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/show.html.heex:15 #: lib/memex_web/live/context_live/show.html.heex:15
#: lib/memex_web/live/note_live/show.html.heex:15 #: lib/memex_web/live/note_live/show.html.heex:15
#: lib/memex_web/live/pipeline_live/show.html.heex:23 #: lib/memex_web/live/pipeline_live/show.html.heex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Visibility: %{visibility}" msgid "Visibility: %{visibility}"
msgstr "" msgstr ""
@ -44,12 +44,6 @@ msgstr ""
msgid "confirm new password" msgid "confirm new password"
msgstr "" msgstr ""
#: lib/memex_web/live/note_live/form_component.html.heex:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "content"
msgstr ""
#: lib/memex_web/components/core_components/topbar.html.heex:28 #: 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:35
#: lib/memex_web/live/context_live/index.ex:43 #: lib/memex_web/live/context_live/index.ex:43
@ -227,7 +221,7 @@ msgstr ""
msgid "public signups" msgid "public signups"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:31 #: lib/memex_web/controllers/user_registration_controller.ex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "register" msgid "register"
msgstr "" msgstr ""
@ -242,20 +236,20 @@ msgstr ""
msgid "report bugs or request features" msgid "report bugs or request features"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:45 #: lib/memex_web/live/context_live/form_component.html.heex:50
#: lib/memex_web/live/note_live/form_component.html.heex:45 #: lib/memex_web/live/note_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:45 #: lib/memex_web/live/pipeline_live/form_component.html.heex:54
#: lib/memex_web/live/step_live/form_component.html.heex:31 #: lib/memex_web/live/step_live/form_component.html.heex:38
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:40 #: lib/memex_web/live/context_live/form_component.html.heex:44
#: lib/memex_web/live/context_live/form_component.html.heex:41 #: lib/memex_web/live/context_live/form_component.html.heex:45
#: lib/memex_web/live/note_live/form_component.html.heex:40 #: lib/memex_web/live/note_live/form_component.html.heex:42
#: lib/memex_web/live/note_live/form_component.html.heex:41 #: lib/memex_web/live/note_live/form_component.html.heex:43
#: lib/memex_web/live/pipeline_live/form_component.html.heex:40 #: lib/memex_web/live/pipeline_live/form_component.html.heex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:41 #: lib/memex_web/live/pipeline_live/form_component.html.heex:49
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "select privacy" msgid "select privacy"
msgstr "" msgstr ""
@ -271,12 +265,12 @@ msgstr ""
msgid "settings" msgid "settings"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:32 #: lib/memex_web/live/context_live/form_component.html.heex:35
#: lib/memex_web/live/context_live/form_component.html.heex:33 #: lib/memex_web/live/context_live/form_component.html.heex:36
#: lib/memex_web/live/note_live/form_component.html.heex:32
#: lib/memex_web/live/note_live/form_component.html.heex:33 #: lib/memex_web/live/note_live/form_component.html.heex:33
#: lib/memex_web/live/pipeline_live/form_component.html.heex:32 #: lib/memex_web/live/note_live/form_component.html.heex:34
#: lib/memex_web/live/pipeline_live/form_component.html.heex:33 #: 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 #, elixir-autogen, elixir-format
msgid "tag1,tag2" msgid "tag1,tag2"
msgstr "" msgstr ""
@ -333,8 +327,6 @@ msgid "no contexts found"
msgstr "" msgstr ""
#: lib/memex_web/components/pipelines_table_component.ex:48 #: lib/memex_web/components/pipelines_table_component.ex:48
#: lib/memex_web/live/pipeline_live/form_component.html.heex:24
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "description" msgid "description"
msgstr "" msgstr ""
@ -408,12 +400,6 @@ msgstr ""
msgid "home" msgid "home"
msgstr "" msgstr ""
#: lib/memex_web/live/context_live/form_component.html.heex:24
#: lib/memex_web/live/context_live/form_component.html.heex:25
#, 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.ex:10
#: lib/memex_web/live/faq_live.html.heex:3 #: lib/memex_web/live/faq_live.html.heex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -435,7 +421,7 @@ msgstr ""
msgid "what is this?" msgid "what is this?"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:60 #: lib/memex_web/live/pipeline_live/show.html.heex:52
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "%{position}. %{title}" msgid "%{position}. %{title}"
msgstr "" msgstr ""
@ -460,12 +446,12 @@ msgstr ""
msgid "add step to %{slug}" msgid "add step to %{slug}"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:54 #: lib/memex_web/live/pipeline_live/show.html.heex:46
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "no steps" msgid "no steps"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/show.html.heex:49 #: lib/memex_web/live/pipeline_live/show.html.heex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "steps:" msgid "steps:"
msgstr "" msgstr ""
@ -476,12 +462,6 @@ msgstr ""
msgid "title" msgid "title"
msgstr "" msgstr ""
#: lib/memex_web/live/step_live/form_component.html.heex:24
#: lib/memex_web/live/step_live/form_component.html.heex:25
#, elixir-autogen, elixir-format
msgid "use [[context-slug]] to link to a context"
msgstr ""
#: lib/memex_web/live/faq_live.html.heex:65 #: lib/memex_web/live/faq_live.html.heex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!" msgid "finally, i wanted to externalize the processes for common situations that use these thought processes at discrete steps. these are pipelines!"
@ -657,7 +637,7 @@ msgstr ""
msgid "keep me logged in for 60 days" msgid "keep me logged in for 60 days"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:21 #: lib/memex_web/live/invite_live/form_component.html.heex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "name" msgid "name"
msgstr "" msgstr ""
@ -668,12 +648,12 @@ msgstr ""
msgid "password" msgid "password"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:25 #: lib/memex_web/live/invite_live/form_component.html.heex:32
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "uses left" msgid "uses left"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:29 #: lib/memex_web/live/invite_live/form_component.html.heex:44
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "leave \"uses left\" blank to make invite unlimited" msgid "leave \"uses left\" blank to make invite unlimited"
msgstr "" msgstr ""
@ -710,3 +690,23 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "reset your password" msgid "reset your password"
msgstr "" msgstr ""
#: lib/memex_web/live/pipeline_live/form_component.html.heex:25
#: lib/memex_web/live/pipeline_live/form_component.html.heex:29
#: lib/memex_web/live/step_live/form_component.html.heex:25
#: lib/memex_web/live/step_live/form_component.html.heex:29
#, 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:25
#: lib/memex_web/live/context_live/form_component.html.heex:27
#, 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:24
#: lib/memex_web/live/note_live/form_component.html.heex:25
#, elixir-autogen, elixir-format, fuzzy
msgid "use [note-slug] to link to a note"
msgstr ""

View File

@ -80,13 +80,6 @@ msgstr ""
msgid "unauthorized" msgid "unauthorized"
msgstr "" 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_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.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 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
@ -94,9 +87,9 @@ msgstr ""
msgid "oops, something went wrong! please check the errors below." msgid "oops, something went wrong! please check the errors below."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:11 #: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:40 #: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:69 #: lib/memex_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "sorry, this invite was not found or expired" msgid "sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -137,8 +130,8 @@ msgstr ""
msgid "reset password link is invalid or it has expired." msgid "reset password link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:21 #: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:50 #: lib/memex_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "sorry, public registration is disabled" msgid "sorry, public registration is disabled"
msgstr "" msgstr ""
@ -147,3 +140,10 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "user confirmation link is invalid or it has expired." msgid "user confirmation link is invalid or it has expired."
msgstr "" 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 ""

View File

@ -71,8 +71,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:47 #: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:31 #: 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/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:39 #: lib/memex_web/live/pipeline_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/show.html.heex:110 #: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure?" msgid "are you sure?"
msgstr "" msgstr ""
@ -107,7 +107,7 @@ msgstr ""
msgid "copied to clipboard" msgid "copied to clipboard"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:64 #: lib/memex_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "please check your email to verify your account" msgid "please check your email to verify your account"
msgstr "" msgstr ""
@ -138,7 +138,7 @@ msgstr ""
msgid "are you sure you want to delete %{email}? this action is permanent!" msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34 #: lib/memex_web/live/invite_live/form_component.html.heex:49
#, elixir-autogen, elixir-format, fuzzy #, elixir-autogen, elixir-format, fuzzy
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""

View File

@ -79,13 +79,6 @@ msgstr ""
msgid "unauthorized" msgid "unauthorized"
msgstr "" 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_registration_html/new.html.heex:13
#: lib/memex_web/controllers/user_reset_password_html/edit.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 #: lib/memex_web/controllers/user_settings_html/edit.html.heex:64
@ -93,9 +86,9 @@ msgstr ""
msgid "oops, something went wrong! please check the errors below." msgid "oops, something went wrong! please check the errors below."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:11 #: lib/memex_web/controllers/user_registration_controller.ex:12
#: lib/memex_web/controllers/user_registration_controller.ex:40 #: lib/memex_web/controllers/user_registration_controller.ex:41
#: lib/memex_web/controllers/user_registration_controller.ex:69 #: lib/memex_web/controllers/user_registration_controller.ex:70
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "sorry, this invite was not found or expired" msgid "sorry, this invite was not found or expired"
msgstr "" msgstr ""
@ -136,8 +129,8 @@ msgstr ""
msgid "reset password link is invalid or it has expired." msgid "reset password link is invalid or it has expired."
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:21 #: lib/memex_web/controllers/user_registration_controller.ex:22
#: lib/memex_web/controllers/user_registration_controller.ex:50 #: lib/memex_web/controllers/user_registration_controller.ex:51
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "sorry, public registration is disabled" msgid "sorry, public registration is disabled"
msgstr "" msgstr ""
@ -146,3 +139,10 @@ msgstr ""
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "user confirmation link is invalid or it has expired." msgid "user confirmation link is invalid or it has expired."
msgstr "" 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 ""

View File

@ -70,8 +70,8 @@ msgstr ""
#: lib/memex_web/live/note_live/index.html.heex:47 #: lib/memex_web/live/note_live/index.html.heex:47
#: lib/memex_web/live/note_live/show.html.heex:31 #: 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/index.html.heex:47
#: lib/memex_web/live/pipeline_live/show.html.heex:39 #: lib/memex_web/live/pipeline_live/show.html.heex:31
#: lib/memex_web/live/pipeline_live/show.html.heex:110 #: lib/memex_web/live/pipeline_live/show.html.heex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "are you sure?" msgid "are you sure?"
msgstr "" msgstr ""
@ -106,7 +106,7 @@ msgstr ""
msgid "copied to clipboard" msgid "copied to clipboard"
msgstr "" msgstr ""
#: lib/memex_web/controllers/user_registration_controller.ex:64 #: lib/memex_web/controllers/user_registration_controller.ex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "please check your email to verify your account" msgid "please check your email to verify your account"
msgstr "" msgstr ""
@ -137,7 +137,7 @@ msgstr ""
msgid "are you sure you want to delete %{email}? this action is permanent!" msgid "are you sure you want to delete %{email}? this action is permanent!"
msgstr "" msgstr ""
#: lib/memex_web/live/invite_live/form_component.html.heex:34 #: lib/memex_web/live/invite_live/form_component.html.heex:49
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "saving..." msgid "saving..."
msgstr "" msgstr ""

View File

@ -26,8 +26,8 @@ defmodule MemexWeb.UserConfirmationControllerTest do
conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}}) conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}})
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly." "if your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "confirm" assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "confirm"
end end
@ -38,16 +38,16 @@ defmodule MemexWeb.UserConfirmationControllerTest do
conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}}) conn = post(conn, ~p"/users/confirm", %{user: %{email: user.email}})
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly." "if your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
end end
test "does not send confirmation token if email is invalid", %{conn: conn} do test "does not send confirmation token if email is invalid", %{conn: conn} do
conn = post(conn, ~p"/users/confirm", %{user: %{email: "unknown@example.com"}}) conn = post(conn, ~p"/users/confirm", %{user: %{email: "unknown@example.com"}})
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly." "if your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
assert Repo.all(Accounts.UserToken) == [] assert Repo.all(Accounts.UserToken) == []
end end
@ -62,9 +62,7 @@ defmodule MemexWeb.UserConfirmationControllerTest do
conn = get(conn, ~p"/users/confirm/#{token}") conn = get(conn, ~p"/users/confirm/#{token}")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
assert conn.assigns.flash["info"] =~ "#{user.email} confirmed successfully"
conn.assigns.flash["info"] =~ "#{user.email} confirmed successfully"
assert Accounts.get_user!(user.id).confirmed_at assert Accounts.get_user!(user.id).confirmed_at
refute get_session(conn, :user_token) refute get_session(conn, :user_token)
assert Repo.all(Accounts.UserToken) == [] assert Repo.all(Accounts.UserToken) == []
@ -72,7 +70,7 @@ defmodule MemexWeb.UserConfirmationControllerTest do
# When not logged in # When not logged in
conn = get(conn, ~p"/users/confirm/#{token}") conn = get(conn, ~p"/users/confirm/#{token}")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["error"] =~ "User confirmation link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "user confirmation link is invalid or it has expired"
# When logged in # When logged in
conn = conn =
@ -85,10 +83,9 @@ defmodule MemexWeb.UserConfirmationControllerTest do
end end
test "does not confirm email with invalid token", %{conn: conn, user: user} do test "does not confirm email with invalid token", %{conn: conn, user: user} do
conn = get(conn, ~p"/users/confirm/#{"oops"}") conn = get(conn, ~p"/users/confirm/oops")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["error"] =~ "User confirmation link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "user confirmation link is invalid or it has expired"
refute Accounts.get_user!(user.id).confirmed_at refute Accounts.get_user!(user.id).confirmed_at
end end
end end

View File

@ -32,6 +32,12 @@ defmodule MemexWeb.UserRegistrationControllerTest do
} }
assert redirected_to(conn) =~ ~p"/" assert redirected_to(conn) =~ ~p"/"
# Now do a logged in request and assert on the menu
conn = get(conn, ~p"/")
response = html_response(conn, 200)
# user's email is recorded as admin
assert response =~ email
end end
test "render errors for invalid data", %{conn: conn} do test "render errors for invalid data", %{conn: conn} do

View File

@ -26,8 +26,8 @@ defmodule MemexWeb.UserResetPasswordControllerTest do
conn = post(conn, ~p"/users/reset_password", %{user: %{email: user.email}}) conn = post(conn, ~p"/users/reset_password", %{user: %{email: user.email}})
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"If your email is in our system, you will receive instructions to reset your password shortly." "if your email is in our system, you will receive instructions to reset your password shortly."
assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "reset_password" assert Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "reset_password"
end end
@ -36,8 +36,8 @@ defmodule MemexWeb.UserResetPasswordControllerTest do
conn = post(conn, ~p"/users/reset_password", %{user: %{email: "unknown@example.com"}}) conn = post(conn, ~p"/users/reset_password", %{user: %{email: "unknown@example.com"}})
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"If your email is in our system, you will receive instructions to reset your password shortly." "if your email is in our system, you will receive instructions to reset your password shortly."
assert Repo.all(Accounts.UserToken) == [] assert Repo.all(Accounts.UserToken) == []
end end
@ -55,13 +55,13 @@ defmodule MemexWeb.UserResetPasswordControllerTest do
test "renders reset password", %{conn: conn, token: token} do test "renders reset password", %{conn: conn, token: token} do
conn = get(conn, ~p"/users/reset_password/#{token}") conn = get(conn, ~p"/users/reset_password/#{token}")
assert html_response(conn, 200) =~ "Reset password" assert html_response(conn, 200) =~ "reset password"
end end
test "does not render reset password with invalid token", %{conn: conn} do test "does not render reset password with invalid token", %{conn: conn} do
conn = get(conn, ~p"/users/reset_password/#{"oops"}") conn = get(conn, ~p"/users/reset_password/oops")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["error"] =~ "Reset password link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "reset password link is invalid or it has expired"
end end
end end
@ -86,7 +86,7 @@ defmodule MemexWeb.UserResetPasswordControllerTest do
assert redirected_to(conn) == ~p"/users/log_in" assert redirected_to(conn) == ~p"/users/log_in"
refute get_session(conn, :user_token) refute get_session(conn, :user_token)
conn.assigns.flash["info"] =~ "Password reset successfully" assert conn.assigns.flash["info"] =~ "password reset successfully"
assert Accounts.get_user_by_email_and_password(user.email, "new valid password") assert Accounts.get_user_by_email_and_password(user.email, "new valid password")
end end
@ -100,15 +100,15 @@ defmodule MemexWeb.UserResetPasswordControllerTest do
}) })
response = html_response(conn, 200) response = html_response(conn, 200)
assert response =~ "Reset password" assert response =~ "reset password"
assert response =~ "should be at least 12 character(s)" assert response =~ "should be at least 12 character(s)"
assert response =~ "does not match password" assert response =~ "does not match password"
end end
test "does not reset password with invalid token", %{conn: conn} do test "does not reset password with invalid token", %{conn: conn} do
conn = put(conn, ~p"/users/reset_password/#{"oops"}") conn = put(conn, ~p"/users/reset_password/oops")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
conn.assigns.flash["error"] =~ "Reset password link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "reset password link is invalid or it has expired"
end end
end end
end end

View File

@ -83,14 +83,14 @@ defmodule MemexWeb.UserSessionControllerTest do
conn = conn |> log_in_user(current_user) |> delete(~p"/users/log_out") conn = conn |> log_in_user(current_user) |> delete(~p"/users/log_out")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
refute get_session(conn, :user_token) refute get_session(conn, :user_token)
conn.assigns.flash["info"] =~ "logged out successfully" assert conn.assigns.flash["info"] =~ "logged out successfully"
end end
test "succeeds even if the user is not logged in", %{conn: conn} do test "succeeds even if the user is not logged in", %{conn: conn} do
conn = delete(conn, ~p"/users/log_out") conn = delete(conn, ~p"/users/log_out")
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
refute get_session(conn, :user_token) refute get_session(conn, :user_token)
conn.assigns.flash["info"] =~ "logged out successfully" assert conn.assigns.flash["info"] =~ "logged out successfully"
end end
end end
end end

View File

@ -39,8 +39,7 @@ defmodule MemexWeb.UserSettingsControllerTest do
assert redirected_to(new_password_conn) == ~p"/users/settings" assert redirected_to(new_password_conn) == ~p"/users/settings"
assert get_session(new_password_conn, :user_token) != get_session(conn, :user_token) assert get_session(new_password_conn, :user_token) != get_session(conn, :user_token)
new_password_conn.assigns.flash["info"] =~ "password updated successfully" assert new_password_conn.assigns.flash["info"] =~ "password updated successfully"
assert Accounts.get_user_by_email_and_password(current_user.email, "new valid password") assert Accounts.get_user_by_email_and_password(current_user.email, "new valid password")
end end
@ -60,7 +59,6 @@ defmodule MemexWeb.UserSettingsControllerTest do
assert response =~ "should be at least 12 character(s)" assert response =~ "should be at least 12 character(s)"
assert response =~ "does not match password" assert response =~ "does not match password"
assert response =~ "is not valid" assert response =~ "is not valid"
assert get_session(old_password_conn, :user_token) == get_session(conn, :user_token) assert get_session(old_password_conn, :user_token) == get_session(conn, :user_token)
end end
end end
@ -72,13 +70,13 @@ defmodule MemexWeb.UserSettingsControllerTest do
put(conn, ~p"/users/settings", %{ put(conn, ~p"/users/settings", %{
action: "update_email", action: "update_email",
current_password: valid_user_password(), current_password: valid_user_password(),
user: %{"email" => unique_user_email()} user: %{email: unique_user_email()}
}) })
assert redirected_to(conn) == ~p"/users/settings" assert redirected_to(conn) == ~p"/users/settings"
conn.assigns.flash["info"] =~ assert conn.assigns.flash["info"] =~
"a link to confirm your email change has been sent to the new address." "a link to confirm your email change has been sent to the new address."
assert Accounts.get_user_by_email(current_user.email) assert Accounts.get_user_by_email(current_user.email)
end end
@ -86,9 +84,9 @@ defmodule MemexWeb.UserSettingsControllerTest do
test "does not update email on invalid data", %{conn: conn} do test "does not update email on invalid data", %{conn: conn} do
conn = conn =
put(conn, ~p"/users/settings", %{ put(conn, ~p"/users/settings", %{
"action" => "update_email", action: "update_email",
"current_password" => "invalid", current_password: "invalid",
"user" => %{"email" => "with spaces"} user: %{email: "with spaces"}
}) })
response = html_response(conn, 200) response = html_response(conn, 200)
@ -118,19 +116,19 @@ defmodule MemexWeb.UserSettingsControllerTest do
%{conn: conn, current_user: current_user, token: token, email: email} do %{conn: conn, current_user: current_user, token: token, email: email} do
conn = get(conn, ~p"/users/settings/confirm_email/#{token}") conn = get(conn, ~p"/users/settings/confirm_email/#{token}")
assert redirected_to(conn) == ~p"/users/settings" assert redirected_to(conn) == ~p"/users/settings"
conn.assigns.flash["info"] =~ "email changed successfully" assert conn.assigns.flash["info"] =~ "email changed successfully"
refute Accounts.get_user_by_email(current_user.email) refute Accounts.get_user_by_email(current_user.email)
assert Accounts.get_user_by_email(email) assert Accounts.get_user_by_email(email)
conn = get(conn, ~p"/users/settings/confirm_email/#{token}") conn = get(conn, ~p"/users/settings/confirm_email/#{token}")
assert redirected_to(conn) == ~p"/users/settings" assert redirected_to(conn) == ~p"/users/settings"
conn.assigns.flash["error"] =~ "email change link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "email change link is invalid or it has expired"
end end
test "does not update email with invalid token", %{conn: conn, current_user: current_user} do test "does not update email with invalid token", %{conn: conn, current_user: current_user} do
conn = get(conn, ~p"/users/settings/confirm_email/#{"oops"}") conn = get(conn, ~p"/users/settings/confirm_email/oops")
assert redirected_to(conn) == ~p"/users/settings" assert redirected_to(conn) == ~p"/users/settings"
conn.assigns.flash["error"] =~ "email change link is invalid or it has expired" assert conn.assigns.flash["error"] =~ "email change link is invalid or it has expired"
assert Accounts.get_user_by_email(current_user.email) assert Accounts.get_user_by_email(current_user.email)
end end

View File

@ -17,7 +17,7 @@ defmodule MemexWeb.ContextLiveTest do
} }
@invalid_attrs %{ @invalid_attrs %{
content: nil, content: nil,
tags_string: "invalid tags", tags_string: "invalid_tag or_tags",
slug: nil, slug: nil,
visibility: nil visibility: nil
} }
@ -114,7 +114,7 @@ defmodule MemexWeb.ContextLiveTest do
|> render_change(context: @invalid_attrs) |> render_change(context: @invalid_attrs)
assert html =~ "can&#39;t be blank" assert html =~ "can&#39;t be blank"
assert html =~ "tags must be comma-delimited" assert html =~ "tags must be comma or space delimited"
{:ok, _live, html} = {:ok, _live, html} =
show_live show_live

View File

@ -22,7 +22,6 @@ defmodule MemexWeb.InviteLiveTest do
test "lists all invites", %{conn: conn, invite: invite} do test "lists all invites", %{conn: conn, invite: invite} do
{:ok, _index_live, html} = live(conn, ~p"/invites") {:ok, _index_live, html} = live(conn, ~p"/invites")
assert html =~ "invites" assert html =~ "invites"
assert html =~ invite.name assert html =~ invite.name
end end
@ -52,7 +51,7 @@ defmodule MemexWeb.InviteLiveTest do
|> element(~s/a[aria-label="edit invite for #{invite.name}"]/) |> element(~s/a[aria-label="edit invite for #{invite.name}"]/)
|> render_click() =~ "edit invite" |> render_click() =~ "edit invite"
assert_patch(index_live, ~p"/invites/#{invite}/edit") assert_patch(index_live, ~p"/invites/edit/#{invite}")
assert index_live assert index_live
|> form("#invite-form") |> form("#invite-form")

View File

@ -17,7 +17,7 @@ defmodule MemexWeb.NoteLiveTest do
} }
@invalid_attrs %{ @invalid_attrs %{
content: nil, content: nil,
tags_string: "invalid tags", tags_string: "invalid_tag or_tags",
slug: nil, slug: nil,
visibility: nil visibility: nil
} }
@ -55,7 +55,7 @@ defmodule MemexWeb.NoteLiveTest do
|> render_change(note: @invalid_attrs) |> render_change(note: @invalid_attrs)
assert html =~ "can&#39;t be blank" assert html =~ "can&#39;t be blank"
assert html =~ "tags must be comma-delimited" assert html =~ "tags must be comma or space delimited"
{:ok, _live, html} = {:ok, _live, html} =
index_live index_live

View File

@ -17,7 +17,7 @@ defmodule MemexWeb.PipelineLiveTest do
} }
@invalid_attrs %{ @invalid_attrs %{
description: nil, description: nil,
tags_string: "invalid tags", tags_string: "invalid_tag or_tags",
slug: nil, slug: nil,
visibility: nil visibility: nil
} }
@ -130,7 +130,7 @@ defmodule MemexWeb.PipelineLiveTest do
|> render_change(pipeline: @invalid_attrs) |> render_change(pipeline: @invalid_attrs)
assert html =~ "can&#39;t be blank" assert html =~ "can&#39;t be blank"
assert html =~ "tags must be comma-delimited" assert html =~ "tags must be comma or space delimited"
{:ok, _live, html} = {:ok, _live, html} =
show_live show_live

View File

@ -61,7 +61,7 @@ defmodule Memex.DataCase do
def valid_user_password, do: "hello world!" def valid_user_password, do: "hello world!"
def random_slug(length \\ 20) do def random_slug(length \\ 20) do
symbols = '0123456789abcdef-' symbols = ~c"0123456789abcdef-"
symbol_count = Enum.count(symbols) symbol_count = Enum.count(symbols)
for _ <- Range.new(1, length), for _ <- Range.new(1, length),