Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
449a92e4b7 | |||
5d17ee0a11 | |||
b6b6cecc0a | |||
08916a504f | |||
3eda522903 | |||
2e6e26006d | |||
b66d0ea8a1 | |||
839e1d7124 | |||
76834845a3 | |||
cc1413ade5 | |||
668e4c611b | |||
ab3d3721d6 | |||
7e14f292a6 | |||
16a5cb9254 | |||
f722f9901b | |||
6adae82e94 | |||
a87bf15f72 | |||
|
75c0f8642b | ||
ec782515ac | |||
e1cb46cb97 | |||
56a49ed2e3 | |||
f25c151956 | |||
c2ddc2ae0d | |||
33e4d26a3d | |||
179d67a896 | |||
15354d6004 | |||
e358cd6e4e | |||
202b70dc66 | |||
b963baa49d | |||
70701a27d3 | |||
67dc16d222 | |||
fa35038426 | |||
d896257602 |
14
.drone.yml
14
.drone.yml
@ -17,7 +17,7 @@ steps:
|
||||
- .mix
|
||||
|
||||
- name: test
|
||||
image: elixir:1.16.1-alpine
|
||||
image: elixir:1.18.1-otp-27-alpine
|
||||
environment:
|
||||
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
|
||||
HOST: testing.example.tld
|
||||
@ -26,8 +26,8 @@ steps:
|
||||
MIX_ENV: test
|
||||
commands:
|
||||
- apk add --no-cache build-base npm git
|
||||
- mix local.rebar --force --if-missing
|
||||
- mix local.hex --force --if-missing
|
||||
- mix local.rebar --force
|
||||
- mix local.hex --force
|
||||
- mix deps.get
|
||||
- npm set cache .npm
|
||||
- npm --prefix ./assets ci --no-audit --prefer-offline
|
||||
@ -36,7 +36,7 @@ steps:
|
||||
- mix test.all
|
||||
|
||||
- name: build and publish stable
|
||||
image: thegeeklab/drone-docker-buildx
|
||||
image: plugins/docker
|
||||
privileged: true
|
||||
settings:
|
||||
repo: shibaobun/cannery
|
||||
@ -44,6 +44,8 @@ steps:
|
||||
compress: true
|
||||
platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
- linux/arm/v7
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
@ -54,7 +56,7 @@ steps:
|
||||
- stable
|
||||
|
||||
- name: build and publish tagged version
|
||||
image: thegeeklab/drone-docker-buildx
|
||||
image: plugins/docker
|
||||
privileged: true
|
||||
settings:
|
||||
repo: shibaobun/cannery
|
||||
@ -62,6 +64,8 @@ steps:
|
||||
compress: true
|
||||
platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
- linux/arm/v7
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
|
@ -1,3 +1,3 @@
|
||||
elixir 1.16.1-otp-26
|
||||
erlang 26.2.2
|
||||
nodejs 21.6.2
|
||||
elixir 1.18.1-otp-27
|
||||
erlang 27.2.1
|
||||
nodejs 23.7.0
|
||||
|
27
CHANGELOG.md
27
CHANGELOG.md
@ -1,3 +1,30 @@
|
||||
# v0.9.13
|
||||
- Add button to resend email verification email
|
||||
- Move staging to container, rather than ammo
|
||||
- Add date restriction dropdown to range page
|
||||
- Fix dates not rendering properly in table
|
||||
- Update deps
|
||||
|
||||
# v0.9.12
|
||||
- Allow filtering ammo types when creating new packs
|
||||
- Add SlimSelect to select elements with user content
|
||||
- Fix registration page not offering all translations
|
||||
- Update deps
|
||||
|
||||
# v0.9.11
|
||||
- Fix an issue with emails not being able to be sent for real this time
|
||||
- Fix some dropdowns not filling in the correct data
|
||||
- Add debounces to more fields
|
||||
- Update deps
|
||||
|
||||
# v0.9.10
|
||||
- Fix issue with logger failing on oban exceptions
|
||||
- Fix an issue with emails not being able to be sent
|
||||
- Update deps
|
||||
|
||||
# v0.9.9
|
||||
- Actually fix bar graph
|
||||
|
||||
# v0.9.8
|
||||
- Make bar graph ignore empty days
|
||||
- Update dependencies
|
||||
|
@ -127,7 +127,7 @@ In `test` mode (or in the Docker container), Cannery will listen for the same en
|
||||
In `prod` mode (or in the Docker container), Cannery will listen for the same environment variables as dev mode, but also include the following at runtime:
|
||||
|
||||
- `SECRET_KEY_BASE`: Secret key base used to sign cookies. Must be generated
|
||||
with `docker run -it shibaobun/cannery mix phx.gen.secret` and set for server to start.
|
||||
with `docker run -it shibaobun/cannery priv/random.sh` and set for server to start.
|
||||
- `SMTP_HOST`: The url for your SMTP email provider. Must be set
|
||||
- `SMTP_PORT`: The port for your SMTP relay. Defaults to `587`.
|
||||
- `SMTP_USERNAME`: The username for your SMTP relay. Must be set!
|
||||
|
@ -1,4 +1,4 @@
|
||||
FROM elixir:1.16.1-alpine AS build
|
||||
FROM elixir:1.18.1-otp-27-alpine AS build
|
||||
|
||||
# install build dependencies
|
||||
RUN apk add --no-cache build-base npm git python3
|
||||
@ -7,8 +7,8 @@ RUN apk add --no-cache build-base npm git python3
|
||||
WORKDIR /app
|
||||
|
||||
# install hex + rebar
|
||||
RUN mix local.hex --force && \
|
||||
mix local.rebar --force
|
||||
RUN mix local.rebar --force && \
|
||||
mix local.hex --force
|
||||
|
||||
# set build ENV
|
||||
ENV MIX_ENV=prod
|
||||
|
@ -60,7 +60,7 @@ You can use the following environment variables to configure Cannery in
|
||||
Defaults to `false`.
|
||||
- `POOL_SIZE`: Controls the pool size to use with PostgreSQL. Defaults to `10`.
|
||||
- `SECRET_KEY_BASE`: Secret key base used to sign cookies. Must be generated
|
||||
with `docker run -it shibaobun/cannery mix phx.gen.secret` and set for server to start.
|
||||
with `docker run -it shibaobun/cannery priv/random.sh` and set for server to start.
|
||||
- `REGISTRATION`: Controls if user sign-up should be invite only or set to
|
||||
public. Set to `public` to enable public registration. Defaults to `invite`.
|
||||
- `LOCALE`: Sets a custom default locale. Defaults to `en_US`
|
||||
@ -94,6 +94,7 @@ license can be found at
|
||||
|
||||
# Links
|
||||
|
||||
- [Website](https://cannery.app): Project website
|
||||
- [Gitea](https://gitea.bubbletea.dev/shibao/cannery): Main repo, feature
|
||||
requests and bug reports
|
||||
- [Github](https://github.com/shibaobun/cannery): Source code mirror, please
|
||||
|
@ -8,6 +8,8 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
|
||||
@import "@fortawesome/fontawesome-free/scss/solid";
|
||||
@import "@fortawesome/fontawesome-free/scss/brands";
|
||||
|
||||
@import "slim-select/styles";
|
||||
|
||||
@import "components";
|
||||
|
||||
/* fix firefox scrollbars */
|
||||
@ -25,7 +27,7 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
|
||||
100% { scale: 1.0; opacity: 1; }
|
||||
}
|
||||
|
||||
// disconnect toast
|
||||
/* disconnect toast */
|
||||
.phx-connected > #disconnect {
|
||||
opacity: 0 !important;
|
||||
pointer-events: none;
|
||||
@ -152,3 +154,57 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
|
||||
0% { opacity: 1; }
|
||||
100% { opacity: 0; }
|
||||
}
|
||||
|
||||
.ss-main {
|
||||
@apply input;
|
||||
}
|
||||
|
||||
.ss-main.input-primary {
|
||||
@apply border-primary-500 hover:border-primary-600 active:border-primary-600;
|
||||
}
|
||||
|
||||
.ss-content {
|
||||
@apply input;
|
||||
}
|
||||
|
||||
.ss-content.input-primary {
|
||||
@apply border-primary-500 hover:border-primary-600 active:border-primary-600;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-above {
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-below {
|
||||
border-top-left-radius: 0px;
|
||||
border-top-right-radius: 0px;
|
||||
}
|
||||
|
||||
.ss-search input[type="search"] {
|
||||
@apply input;
|
||||
}
|
||||
|
||||
.ss-content.input-primary .ss-search input[type="search"] {
|
||||
@apply border-primary-500 hover:border-primary-600 active:border-primary-600;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-above .ss-search {
|
||||
padding: var(--ss-spacing-l) 0 0 0;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-below .ss-search {
|
||||
padding: 0 0 var(--ss-spacing-l) 0;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-above .ss-list > *:not(:first-child) {
|
||||
margin: var(--ss-spacing-l) 0 0 0;
|
||||
}
|
||||
|
||||
.ss-content.ss-open-below .ss-list > *:not(:last-child) {
|
||||
margin: 0 0 var(--ss-spacing-l) 0;
|
||||
}
|
||||
|
||||
.ss-content .ss-list .ss-option {
|
||||
border-radius: var(--ss-border-radius);
|
||||
}
|
||||
|
@ -24,15 +24,16 @@ import 'phoenix_html'
|
||||
// Establish Phoenix Socket and LiveView configuration.
|
||||
import { Socket } from 'phoenix'
|
||||
import { LiveSocket } from 'phoenix_live_view'
|
||||
import topbar from 'topbar'
|
||||
import ShotLogChart from './shot_log_chart'
|
||||
import Date from './date'
|
||||
import DateTime from './datetime'
|
||||
import ShotLogChart from './shot_log_chart'
|
||||
import SlimSelect from './slim_select'
|
||||
import topbar from 'topbar'
|
||||
|
||||
const csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute('content')
|
||||
const liveSocket = new LiveSocket('/live', Socket, {
|
||||
params: { _csrf_token: csrfToken },
|
||||
hooks: { Date, DateTime, ShotLogChart }
|
||||
hooks: { Date, DateTime, ShotLogChart, SlimSelect }
|
||||
})
|
||||
|
||||
// Show progress bar on live navigation and form submits
|
||||
|
@ -1,7 +1,7 @@
|
||||
export default {
|
||||
displayDate (el) {
|
||||
const date =
|
||||
Intl.DateTimeFormat([], { timeZone: 'Etc/UTC', dateStyle: 'short' })
|
||||
Intl.DateTimeFormat([], { timeZone: 'UTC', dateStyle: 'short' })
|
||||
.format(new Date(el.dateTime))
|
||||
|
||||
el.innerText = date
|
||||
|
@ -1,7 +1,7 @@
|
||||
export default {
|
||||
displayDateTime (el) {
|
||||
const date =
|
||||
Intl.DateTimeFormat([], { dateStyle: 'short', timeStyle: 'long' })
|
||||
Intl.DateTimeFormat([], { timeZone: 'UTC', dateStyle: 'short', timeStyle: 'long' })
|
||||
.format(new Date(el.dateTime))
|
||||
|
||||
el.innerText = date
|
||||
|
@ -55,7 +55,7 @@ export default {
|
||||
}
|
||||
},
|
||||
x: {
|
||||
type: 'time',
|
||||
type: 'timeseries',
|
||||
time: {
|
||||
unit: 'day'
|
||||
},
|
||||
|
28
assets/js/slim_select.js
Normal file
28
assets/js/slim_select.js
Normal file
@ -0,0 +1,28 @@
|
||||
import SlimSelect from 'slim-select'
|
||||
|
||||
export default {
|
||||
initalizeSlimSelect (el) {
|
||||
// eslint-disable-next-line no-new
|
||||
el.slimselect = new SlimSelect({
|
||||
select: el,
|
||||
settings: {
|
||||
contentPosition: 'fixed'
|
||||
}
|
||||
})
|
||||
|
||||
const main = document.querySelector(`.ss-main[data-id="${el.dataset.id}"]`)
|
||||
main.setAttribute('id', `${el.dataset.id}-main`)
|
||||
main.setAttribute('phx-update', 'ignore')
|
||||
|
||||
const content = document.querySelector(`.ss-content[data-id="${el.dataset.id}"]`)
|
||||
content.setAttribute('id', `${el.dataset.id}-content`)
|
||||
content.setAttribute('phx-update', 'ignore')
|
||||
},
|
||||
updated () {
|
||||
this.el.slimselect?.destroy()
|
||||
this.initalizeSlimSelect(this.el)
|
||||
},
|
||||
mounted () {
|
||||
this.initalizeSlimSelect(this.el)
|
||||
}
|
||||
}
|
9608
assets/package-lock.json
generated
9608
assets/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -3,8 +3,7 @@
|
||||
"description": " ",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "v21.6.2",
|
||||
"npm": "10.2.4"
|
||||
"node": "v23.7.0"
|
||||
},
|
||||
"scripts": {
|
||||
"deploy": "NODE_ENV=production webpack --mode production",
|
||||
@ -13,37 +12,39 @@
|
||||
"test": "standard"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.5.1",
|
||||
"chart.js": "^4.4.1",
|
||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||
"chart.js": "^4.4.7",
|
||||
"chartjs-adapter-date-fns": "^3.0.0",
|
||||
"date-fns": "^3.3.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"phoenix": "file:../deps/phoenix",
|
||||
"phoenix_html": "file:../deps/phoenix_html",
|
||||
"phoenix_live_view": "file:../deps/phoenix_live_view",
|
||||
"topbar": "^2.0.2"
|
||||
"slim-select": "^2.10.0",
|
||||
"topbar": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.23.9",
|
||||
"@babel/preset-env": "^7.23.9",
|
||||
"autoprefixer": "^10.4.17",
|
||||
"babel-loader": "^9.1.3",
|
||||
"@babel/core": "^7.26.0",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"babel-loader": "^9.2.1",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"css-loader": "^6.10.0",
|
||||
"css-minimizer-webpack-plugin": "^6.0.0",
|
||||
"css-loader": "^7.1.2",
|
||||
"css-minimizer-webpack-plugin": "^7.0.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"mini-css-extract-plugin": "^2.8.0",
|
||||
"npm-check-updates": "^16.14.15",
|
||||
"postcss": "^8.4.35",
|
||||
"postcss-import": "^16.0.1",
|
||||
"postcss-loader": "^8.1.0",
|
||||
"postcss-preset-env": "^9.4.0",
|
||||
"sass": "^1.71.1",
|
||||
"sass-loader": "^14.1.1",
|
||||
"standard": "^17.1.0",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"terser-webpack-plugin": "^5.3.10",
|
||||
"webpack": "^5.90.3",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^5.0.2"
|
||||
"glob": "^11.0.1",
|
||||
"mini-css-extract-plugin": "^2.9.2",
|
||||
"npm-check-updates": "^17.1.13",
|
||||
"postcss": "^8.5.1",
|
||||
"postcss-import": "^16.1.0",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"postcss-preset-env": "^10.1.3",
|
||||
"sass": "^1.83.1",
|
||||
"sass-loader": "^16.0.4",
|
||||
"standard": "^17.1.2",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"terser-webpack-plugin": "^5.3.11",
|
||||
"webpack": "^5.97.1",
|
||||
"webpack-cli": "^6.0.1",
|
||||
"webpack-dev-server": "^5.2.0"
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
import Config
|
||||
|
||||
config :cannery,
|
||||
env: :dev,
|
||||
ecto_repos: [Cannery.Repo],
|
||||
generators: [binary_id: true]
|
||||
|
||||
|
@ -14,6 +14,8 @@ config :cannery, CanneryWeb.Endpoint, cache_static_manifest: "priv/static/cache_
|
||||
# Do not print debug messages in production
|
||||
config :logger, level: :info
|
||||
|
||||
config :cannery, env: :prod
|
||||
|
||||
# ## SSL Support
|
||||
#
|
||||
# To get SSL working, you will need to add the `https` key
|
||||
|
@ -68,7 +68,7 @@ if config_env() == :prod do
|
||||
System.get_env("SECRET_KEY_BASE") ||
|
||||
raise """
|
||||
environment variable SECRET_KEY_BASE is missing.
|
||||
You can generate one by calling: mix phx.gen.secret
|
||||
You can generate one by calling: priv/random.sh
|
||||
"""
|
||||
|
||||
config :cannery, CanneryWeb.Endpoint, secret_key_base: secret_key_base
|
||||
|
@ -9,8 +9,9 @@ config :bcrypt_elixir, :log_rounds, 1
|
||||
# to provide built-in test partitioning in CI environment.
|
||||
# Run `mix help test` for more information.
|
||||
config :cannery, Cannery.Repo,
|
||||
pool_size: 10,
|
||||
pool: Ecto.Adapters.SQL.Sandbox,
|
||||
pool_size: 10
|
||||
timeout: 60000
|
||||
|
||||
# We don't run a server during test. If one is required,
|
||||
# you can enable the server option below.
|
||||
@ -19,6 +20,8 @@ config :cannery, CanneryWeb.Endpoint,
|
||||
secret_key_base: "S3qq9QtUdsFtlYej+HTjAVN95uP5i5tf2sPYINWSQfCKJghFj2B1+wTAoljZyHOK",
|
||||
server: false
|
||||
|
||||
config :cannery, env: :test
|
||||
|
||||
# In test we don't send emails.
|
||||
config :cannery, Cannery.Mailer, adapter: Swoosh.Adapters.Test
|
||||
|
||||
@ -32,4 +35,4 @@ config :logger, level: :warning
|
||||
config :phoenix, :plug_init_mode, :runtime
|
||||
|
||||
# Disable Oban
|
||||
config :cannery, Oban, queues: false, plugins: false
|
||||
config :cannery, Oban, queues: false, plugins: false, testing: :manual
|
||||
|
@ -6,4 +6,34 @@ defmodule Cannery do
|
||||
Contexts are also responsible for managing your data, regardless
|
||||
if it comes from the database, an external API or others.
|
||||
"""
|
||||
|
||||
def context do
|
||||
quote do
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import Ecto.Query
|
||||
alias Cannery.Accounts.User
|
||||
alias Cannery.Repo
|
||||
alias Ecto.{Changeset, Multi, Queryable, UUID}
|
||||
end
|
||||
end
|
||||
|
||||
def schema do
|
||||
quote do
|
||||
use Ecto.Schema
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import Ecto.{Changeset, Query}
|
||||
alias Cannery.Accounts.User
|
||||
alias Ecto.{Association, Changeset, Queryable, UUID}
|
||||
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
When used, dispatch to the appropriate context/schema/etc.
|
||||
"""
|
||||
defmacro __using__(which) when is_atom(which) do
|
||||
apply(__MODULE__, which, [])
|
||||
end
|
||||
end
|
||||
|
@ -3,10 +3,9 @@ defmodule Cannery.Accounts do
|
||||
The Accounts context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Cannery.{Mailer, Repo}
|
||||
alias Cannery.Accounts.{Invite, Invites, User, UserToken}
|
||||
alias Ecto.{Changeset, Multi}
|
||||
use Cannery, :context
|
||||
alias Cannery.Mailer
|
||||
alias Cannery.Accounts.{Invite, Invites, UserToken}
|
||||
alias Oban.Job
|
||||
|
||||
## Database getters
|
||||
@ -219,7 +218,7 @@ defmodule Cannery.Accounts do
|
||||
|
||||
with {:ok, query} <- UserToken.verify_change_email_token_query(token, context),
|
||||
%UserToken{sent_to: email} <- Repo.one(query),
|
||||
{:ok, _} <- Repo.transaction(user_email_multi(user, email, context)) do
|
||||
{:ok, _result} <- Repo.transaction(user_email_multi(user, email, context)) do
|
||||
:ok
|
||||
else
|
||||
_error_tuple -> :error
|
||||
|
@ -5,13 +5,8 @@ defmodule Cannery.Accounts.Invite do
|
||||
`:uses_left` is defined.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Cannery.Accounts.User
|
||||
alias Ecto.{Association, Changeset, UUID}
|
||||
use Cannery, :schema
|
||||
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "invites" do
|
||||
field :name, :string
|
||||
field :token, :string
|
||||
|
@ -3,10 +3,8 @@ defmodule Cannery.Accounts.Invites do
|
||||
The Invites context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Ecto.Multi
|
||||
alias Cannery.Accounts.{Invite, User}
|
||||
alias Cannery.Repo
|
||||
use Cannery, :context
|
||||
alias Cannery.Accounts.Invite
|
||||
|
||||
@invite_token_length 20
|
||||
|
||||
|
@ -3,11 +3,8 @@ defmodule Cannery.Accounts.User do
|
||||
A Cannery user
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
import CanneryWeb.Gettext
|
||||
alias Ecto.{Association, Changeset, UUID}
|
||||
alias Cannery.Accounts.{Invite, User}
|
||||
use Cannery, :schema
|
||||
alias Cannery.Accounts.Invite
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
@ -20,8 +17,6 @@ defmodule Cannery.Accounts.User do
|
||||
:updated_at
|
||||
]}
|
||||
@derive {Inspect, except: [:password]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "users" do
|
||||
field :email, :string
|
||||
field :password, :string, virtual: true
|
||||
@ -141,7 +136,7 @@ defmodule Cannery.Accounts.User do
|
||||
|> cast(attrs, [:email])
|
||||
|> validate_email()
|
||||
|> case do
|
||||
%{changes: %{email: _}} = changeset -> changeset
|
||||
%{changes: %{email: _email}} = changeset -> changeset
|
||||
%{} = changeset -> add_error(changeset, :email, dgettext("errors", "did not change"))
|
||||
end
|
||||
end
|
||||
|
@ -3,10 +3,7 @@ defmodule Cannery.Accounts.UserToken do
|
||||
Schema for a user's session token
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Query
|
||||
alias Cannery.Accounts.User
|
||||
alias Ecto.{Association, UUID}
|
||||
use Cannery, :schema
|
||||
|
||||
@hash_algorithm :sha256
|
||||
@rand_size 32
|
||||
@ -18,8 +15,6 @@ defmodule Cannery.Accounts.UserToken do
|
||||
@change_email_validity_in_days 7
|
||||
@session_validity_in_days 60
|
||||
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "users_tokens" do
|
||||
field :token, :binary
|
||||
field :context, :string
|
||||
@ -155,7 +150,7 @@ defmodule Cannery.Accounts.UserToken do
|
||||
from t in __MODULE__, where: t.user_id == ^user.id
|
||||
end
|
||||
|
||||
def user_and_contexts_query(user, [_ | _] = contexts) do
|
||||
def user_and_contexts_query(user, [_first | _rest] = contexts) do
|
||||
from t in __MODULE__, where: t.user_id == ^user.id and t.context in ^contexts
|
||||
end
|
||||
end
|
||||
|
@ -3,14 +3,14 @@ defmodule Cannery.ActivityLog do
|
||||
The ActivityLog context.
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
alias Cannery.Ammo.{Pack, Type}
|
||||
alias Cannery.{Accounts.User, ActivityLog.ShotRecord, Repo}
|
||||
alias Ecto.{Multi, Queryable}
|
||||
use Cannery, :context
|
||||
alias Cannery.{ActivityLog.ShotRecord, Ammo.Pack, Ammo.Type}
|
||||
|
||||
@type list_shot_records_option ::
|
||||
{:search, String.t() | nil}
|
||||
| {:class, Type.class() | :all | nil}
|
||||
| {:start_date, String.t() | nil}
|
||||
| {:end_date, String.t() | nil}
|
||||
| {:pack_id, Pack.id() | nil}
|
||||
@type list_shot_records_options :: [list_shot_records_option()]
|
||||
|
||||
@ -51,6 +51,8 @@ defmodule Cannery.ActivityLog do
|
||||
|> list_shot_records_search(Keyword.get(opts, :search))
|
||||
|> list_shot_records_class(Keyword.get(opts, :class))
|
||||
|> list_shot_records_pack_id(Keyword.get(opts, :pack_id))
|
||||
|> list_shot_records_start_date(Keyword.get(opts, :start_date))
|
||||
|> list_shot_records_end_date(Keyword.get(opts, :end_date))
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@ -102,6 +104,20 @@ defmodule Cannery.ActivityLog do
|
||||
|
||||
defp list_shot_records_pack_id(query, _all), do: query
|
||||
|
||||
@spec list_shot_records_start_date(Queryable.t(), String.t() | nil) :: Queryable.t()
|
||||
defp list_shot_records_start_date(query, start_date) when start_date |> is_binary() do
|
||||
query |> where([sr: sr], sr.date >= ^Date.from_iso8601!(start_date))
|
||||
end
|
||||
|
||||
defp list_shot_records_start_date(query, _all), do: query
|
||||
|
||||
@spec list_shot_records_end_date(Queryable.t(), String.t() | nil) :: Queryable.t()
|
||||
defp list_shot_records_end_date(query, end_date) when end_date |> is_binary() do
|
||||
query |> where([sr: sr], sr.date <= ^Date.from_iso8601!(end_date))
|
||||
end
|
||||
|
||||
defp list_shot_records_end_date(query, _all), do: query
|
||||
|
||||
@doc """
|
||||
Returns a count of shot records.
|
||||
|
||||
|
@ -3,11 +3,8 @@ defmodule Cannery.ActivityLog.ShotRecord do
|
||||
A shot record records a group of ammo shot during a range trip
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import CanneryWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
alias Cannery.{Accounts.User, Ammo, Ammo.Pack}
|
||||
alias Ecto.{Changeset, UUID}
|
||||
use Cannery, :schema
|
||||
alias Cannery.{Ammo, Ammo.Pack}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
|
@ -3,13 +3,11 @@ defmodule Cannery.Ammo do
|
||||
The Ammo context.
|
||||
"""
|
||||
|
||||
import CanneryWeb.Gettext
|
||||
import Ecto.Query, warn: false
|
||||
alias Cannery.{Accounts.User, Containers, Repo}
|
||||
use Cannery, :context
|
||||
alias Cannery.Containers
|
||||
alias Cannery.Containers.{Container, ContainerTag, Tag}
|
||||
alias Cannery.{ActivityLog, ActivityLog.ShotRecord}
|
||||
alias Cannery.Ammo.{Pack, Type}
|
||||
alias Ecto.{Changeset, Queryable}
|
||||
|
||||
@pack_create_limit 10_000
|
||||
@pack_preloads [:type]
|
||||
@ -549,7 +547,7 @@ defmodule Cannery.Ammo do
|
||||
|
||||
@spec list_packs_staged(Queryable.t(), staged :: boolean() | nil) :: Queryable.t()
|
||||
defp list_packs_staged(query, staged) when staged |> is_boolean(),
|
||||
do: query |> where([p: p], p.staged == ^staged)
|
||||
do: query |> where([c: c], c.staged == ^staged)
|
||||
|
||||
defp list_packs_staged(query, _nil), do: query
|
||||
|
||||
@ -959,25 +957,79 @@ defmodule Cannery.Ammo do
|
||||
|
||||
defp do_create_packs(
|
||||
%{"type_id" => type_id, "container_id" => container_id} = attrs,
|
||||
_multiplier,
|
||||
multiplier,
|
||||
user
|
||||
)
|
||||
when is_binary(type_id) and is_binary(container_id) do
|
||||
changeset =
|
||||
%Pack{}
|
||||
|> Pack.create_changeset(
|
||||
get_type!(type_id, user),
|
||||
Containers.get_container!(container_id, user),
|
||||
user,
|
||||
attrs
|
||||
)
|
||||
|> Changeset.add_error(:multiplier, dgettext("errors", "Invalid multiplier"))
|
||||
|
||||
{:error, changeset}
|
||||
%Pack{}
|
||||
|> Pack.create_changeset(
|
||||
get_type!(type_id, user),
|
||||
Containers.get_container!(container_id, user),
|
||||
user,
|
||||
attrs
|
||||
)
|
||||
|> maybe_add_multiplier_error(multiplier)
|
||||
|> Changeset.apply_action(:insert)
|
||||
end
|
||||
|
||||
defp do_create_packs(invalid_attrs, _multiplier, user) do
|
||||
{:error, %Pack{} |> Pack.create_changeset(nil, nil, user, invalid_attrs)}
|
||||
defp do_create_packs(
|
||||
%{"type_id" => type_id} = attrs,
|
||||
multiplier,
|
||||
user
|
||||
)
|
||||
when is_binary(type_id) do
|
||||
%Pack{}
|
||||
|> Pack.create_changeset(
|
||||
get_type!(type_id, user),
|
||||
nil,
|
||||
user,
|
||||
attrs
|
||||
)
|
||||
|> maybe_add_multiplier_error(multiplier)
|
||||
|> Changeset.apply_action(:insert)
|
||||
end
|
||||
|
||||
defp do_create_packs(
|
||||
%{"container_id" => container_id} = attrs,
|
||||
multiplier,
|
||||
user
|
||||
)
|
||||
when is_binary(container_id) do
|
||||
%Pack{}
|
||||
|> Pack.create_changeset(
|
||||
nil,
|
||||
Containers.get_container!(container_id, user),
|
||||
user,
|
||||
attrs
|
||||
)
|
||||
|> maybe_add_multiplier_error(multiplier)
|
||||
|> Changeset.apply_action(:insert)
|
||||
end
|
||||
|
||||
defp do_create_packs(invalid_attrs, multiplier, user) do
|
||||
%Pack{}
|
||||
|> Pack.create_changeset(nil, nil, user, invalid_attrs)
|
||||
|> maybe_add_multiplier_error(multiplier)
|
||||
|> Changeset.apply_action(:insert)
|
||||
end
|
||||
|
||||
defp maybe_add_multiplier_error(changeset, multiplier)
|
||||
when multiplier >= 1 and
|
||||
multiplier <= @pack_create_limit do
|
||||
changeset
|
||||
end
|
||||
|
||||
defp maybe_add_multiplier_error(changeset, multiplier) do
|
||||
changeset
|
||||
|> Changeset.add_error(
|
||||
:multiplier,
|
||||
dgettext(
|
||||
"errors",
|
||||
"Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}",
|
||||
max: @pack_create_limit,
|
||||
multiplier: multiplier
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
@spec preload_pack(Pack.t()) :: Pack.t()
|
||||
|
@ -6,32 +6,24 @@ defmodule Cannery.Ammo.Pack do
|
||||
amount paid for that ammunition, or what condition it is in
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import CanneryWeb.Gettext
|
||||
import Ecto.Changeset
|
||||
alias Cannery.Ammo.Type
|
||||
alias Cannery.{Accounts.User, Containers, Containers.Container}
|
||||
alias Ecto.{Changeset, UUID}
|
||||
use Cannery, :schema
|
||||
alias Cannery.{Ammo.Type, Containers, Containers.Container}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:id,
|
||||
:container_id,
|
||||
:count,
|
||||
:id,
|
||||
:lot_number,
|
||||
:notes,
|
||||
:price_paid,
|
||||
:lot_number,
|
||||
:staged,
|
||||
:type_id,
|
||||
:container_id
|
||||
:type_id
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "packs" do
|
||||
field :count, :integer
|
||||
field :lot_number, :string
|
||||
field :notes, :string
|
||||
field :price_paid, :float
|
||||
field :staged, :boolean, default: false
|
||||
field :lot_number, :string
|
||||
field :purchased_on, :date
|
||||
|
||||
belongs_to :type, Type
|
||||
@ -42,12 +34,11 @@ defmodule Cannery.Ammo.Pack do
|
||||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
id: id(),
|
||||
count: integer,
|
||||
id: id(),
|
||||
lot_number: String.t() | nil,
|
||||
notes: String.t() | nil,
|
||||
price_paid: float() | nil,
|
||||
staged: boolean(),
|
||||
lot_number: String.t() | nil,
|
||||
purchased_on: Date.t(),
|
||||
type: Type.t() | nil,
|
||||
type_id: Type.id(),
|
||||
@ -70,34 +61,55 @@ defmodule Cannery.Ammo.Pack do
|
||||
) :: changeset()
|
||||
def create_changeset(
|
||||
pack,
|
||||
%Type{id: type_id},
|
||||
%Container{id: container_id, user_id: user_id},
|
||||
type,
|
||||
container,
|
||||
%User{id: user_id},
|
||||
attrs
|
||||
)
|
||||
when is_binary(type_id) and is_binary(container_id) and is_binary(user_id) do
|
||||
when is_binary(user_id) do
|
||||
type_id =
|
||||
case type do
|
||||
%Type{id: type_id} when is_binary(type_id) ->
|
||||
type_id
|
||||
|
||||
_invalid_type ->
|
||||
nil
|
||||
end
|
||||
|
||||
container_id =
|
||||
case container do
|
||||
%Container{id: container_id, user_id: ^user_id} when is_binary(container_id) ->
|
||||
container_id
|
||||
|
||||
_invalid_container ->
|
||||
nil
|
||||
end
|
||||
|
||||
pack
|
||||
|> change(type_id: type_id)
|
||||
|> change(user_id: user_id)
|
||||
|> change(container_id: container_id)
|
||||
|> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on, :lot_number])
|
||||
|> change(user_id: user_id)
|
||||
|> cast(attrs, [
|
||||
:count,
|
||||
:lot_number,
|
||||
:notes,
|
||||
:price_paid,
|
||||
:purchased_on
|
||||
])
|
||||
|> validate_required(:type_id, message: dgettext("errors", "Please select a valid type"))
|
||||
|> validate_required(:container_id,
|
||||
message: dgettext("errors", "Please select a valid container")
|
||||
)
|
||||
|> validate_number(:count, greater_than: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> validate_required([:count, :staged, :purchased_on, :type_id, :container_id, :user_id])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Invalid changeset, used to prompt user to select type and container
|
||||
"""
|
||||
def create_changeset(pack, _invalid_type, _invalid_container, _invalid_user, attrs) do
|
||||
pack
|
||||
|> cast(attrs, [:type_id, :container_id])
|
||||
|> validate_required([:type_id, :container_id])
|
||||
|> validate_number(:count, greater_than: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> add_error(:invalid, dgettext("errors", "Please select a type and container"))
|
||||
|> validate_required([
|
||||
:container_id,
|
||||
:count,
|
||||
:purchased_on,
|
||||
:type_id,
|
||||
:user_id
|
||||
])
|
||||
end
|
||||
|
||||
@doc false
|
||||
@ -105,19 +117,22 @@ defmodule Cannery.Ammo.Pack do
|
||||
def update_changeset(pack, attrs, user) do
|
||||
pack
|
||||
|> cast(attrs, [
|
||||
:container_id,
|
||||
:count,
|
||||
:price_paid,
|
||||
:notes,
|
||||
:staged,
|
||||
:purchased_on,
|
||||
:lot_number,
|
||||
:container_id
|
||||
:notes,
|
||||
:price_paid,
|
||||
:purchased_on
|
||||
])
|
||||
|> validate_number(:count, greater_than_or_equal_to: 0)
|
||||
|> validate_number(:price_paid, greater_than_or_equal_to: 0)
|
||||
|> validate_container_id(user)
|
||||
|> validate_length(:lot_number, max: 255)
|
||||
|> validate_required([:count, :staged, :purchased_on, :container_id])
|
||||
|> validate_required([
|
||||
:container_id,
|
||||
:count,
|
||||
:purchased_on
|
||||
])
|
||||
end
|
||||
|
||||
defp validate_container_id(changeset, user) do
|
||||
@ -137,7 +152,7 @@ defmodule Cannery.Ammo.Pack do
|
||||
@spec range_changeset(t() | new_pack(), attrs :: map()) :: changeset()
|
||||
def range_changeset(pack, attrs) do
|
||||
pack
|
||||
|> cast(attrs, [:count, :staged])
|
||||
|> validate_required([:count, :staged])
|
||||
|> cast(attrs, [:count])
|
||||
|> validate_required([:count])
|
||||
end
|
||||
end
|
||||
|
@ -5,11 +5,8 @@ defmodule Cannery.Ammo.Type do
|
||||
Contains statistical information about the ammunition.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Cannery.Accounts.User
|
||||
use Cannery, :schema
|
||||
alias Cannery.Ammo.Pack
|
||||
alias Ecto.{Changeset, UUID}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
@ -46,8 +43,6 @@ defmodule Cannery.Ammo.Type do
|
||||
:shot_charge_weight,
|
||||
:dram_equivalent
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "types" do
|
||||
field :name, :string
|
||||
field :desc, :string
|
||||
|
@ -3,15 +3,15 @@ defmodule Cannery.Containers do
|
||||
The Containers context.
|
||||
"""
|
||||
|
||||
import CanneryWeb.Gettext
|
||||
import Ecto.Query, warn: false
|
||||
alias Cannery.{Accounts.User, Ammo.Pack, Repo}
|
||||
use Cannery, :context
|
||||
alias Cannery.Ammo.Pack
|
||||
alias Cannery.Containers.{Container, ContainerTag, Tag}
|
||||
alias Ecto.{Changeset, Queryable}
|
||||
|
||||
@container_preloads [:tags]
|
||||
|
||||
@type list_containers_option :: {:search, String.t() | nil}
|
||||
@type list_containers_option ::
|
||||
{:search, String.t() | nil}
|
||||
| {:staged, boolean() | nil}
|
||||
@type list_containers_options :: [list_containers_option()]
|
||||
|
||||
@doc """
|
||||
@ -22,7 +22,10 @@ defmodule Cannery.Containers do
|
||||
iex> list_containers(%User{id: 123})
|
||||
[%Container{}, ...]
|
||||
|
||||
iex> list_containers(%User{id: 123}, search: "cool")
|
||||
iex> list_containers(%User{id: 123},
|
||||
...> search: "cool",
|
||||
...> staged: true
|
||||
...> )
|
||||
[%Container{name: "my cool container"}, ...]
|
||||
|
||||
"""
|
||||
@ -39,9 +42,16 @@ defmodule Cannery.Containers do
|
||||
preload: ^@container_preloads
|
||||
)
|
||||
|> list_containers_search(Keyword.get(opts, :search))
|
||||
|> list_containers_staged(Keyword.get(opts, :staged))
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
@spec list_containers_staged(Queryable.t(), staged :: boolean() | nil) :: Queryable.t()
|
||||
defp list_containers_staged(query, staged) when staged |> is_boolean(),
|
||||
do: query |> where([c: c], c.staged == ^staged)
|
||||
|
||||
defp list_containers_staged(query, _nil), do: query
|
||||
|
||||
@spec list_containers_search(Queryable.t(), search :: String.t() | nil) :: Queryable.t()
|
||||
defp list_containers_search(query, search) when search in ["", nil],
|
||||
do: query |> order_by([c: c], c.name)
|
||||
|
@ -3,26 +3,24 @@ defmodule Cannery.Containers.Container do
|
||||
A container that holds ammunition and belongs to a user.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Ecto.{Changeset, UUID}
|
||||
alias Cannery.{Accounts.User, Containers.ContainerTag, Containers.Tag}
|
||||
use Cannery, :schema
|
||||
alias Cannery.{Containers.ContainerTag, Containers.Tag}
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
:id,
|
||||
:name,
|
||||
:desc,
|
||||
:id,
|
||||
:location,
|
||||
:type,
|
||||
:tags
|
||||
:name,
|
||||
:staged,
|
||||
:tags,
|
||||
:type
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "containers" do
|
||||
field :name, :string
|
||||
field :desc, :string
|
||||
field :location, :string
|
||||
field :name, :string
|
||||
field :staged, :boolean, default: false
|
||||
field :type, :string
|
||||
|
||||
field :user_id, :binary_id
|
||||
@ -33,10 +31,11 @@ defmodule Cannery.Containers.Container do
|
||||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
id: id(),
|
||||
name: String.t(),
|
||||
desc: String.t(),
|
||||
id: id(),
|
||||
location: String.t(),
|
||||
name: String.t(),
|
||||
staged: boolean(),
|
||||
type: String.t(),
|
||||
user_id: User.id(),
|
||||
tags: [Tag.t()] | nil,
|
||||
@ -52,19 +51,40 @@ defmodule Cannery.Containers.Container do
|
||||
def create_changeset(container, %User{id: user_id}, attrs) do
|
||||
container
|
||||
|> change(user_id: user_id)
|
||||
|> cast(attrs, [:name, :desc, :type, :location])
|
||||
|> cast(attrs, [
|
||||
:desc,
|
||||
:location,
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
|> validate_length(:name, max: 255)
|
||||
|> validate_length(:type, max: 255)
|
||||
|> validate_required([:name, :type, :user_id])
|
||||
|> validate_required([
|
||||
:name,
|
||||
:staged,
|
||||
:type,
|
||||
:user_id
|
||||
])
|
||||
end
|
||||
|
||||
@doc false
|
||||
@spec update_changeset(t() | new_container(), attrs :: map()) :: changeset()
|
||||
def update_changeset(container, attrs) do
|
||||
container
|
||||
|> cast(attrs, [:name, :desc, :type, :location])
|
||||
|> cast(attrs, [
|
||||
:desc,
|
||||
:location,
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
|> validate_length(:name, max: 255)
|
||||
|> validate_length(:type, max: 255)
|
||||
|> validate_required([:name, :type])
|
||||
|> validate_required([
|
||||
:name,
|
||||
:staged,
|
||||
:type
|
||||
])
|
||||
end
|
||||
end
|
||||
|
@ -4,13 +4,9 @@ defmodule Cannery.Containers.ContainerTag do
|
||||
Cannery.Containers.Tag.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
use Cannery, :schema
|
||||
alias Cannery.Containers.{Container, Tag}
|
||||
alias Ecto.{Changeset, UUID}
|
||||
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "container_tags" do
|
||||
belongs_to :container, Container
|
||||
belongs_to :tag, Tag
|
||||
|
@ -4,10 +4,7 @@ defmodule Cannery.Containers.Tag do
|
||||
text and bg colors.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Cannery.Accounts.User
|
||||
alias Ecto.{Changeset, UUID}
|
||||
use Cannery, :schema
|
||||
|
||||
@derive {Jason.Encoder,
|
||||
only: [
|
||||
@ -16,8 +13,6 @@ defmodule Cannery.Containers.Tag do
|
||||
:bg_color,
|
||||
:text_color
|
||||
]}
|
||||
@primary_key {:id, :binary_id, autogenerate: true}
|
||||
@foreign_key_type :binary_id
|
||||
schema "tags" do
|
||||
field :name, :string
|
||||
field :bg_color, :string
|
||||
|
@ -7,8 +7,8 @@ defmodule Cannery.Email do
|
||||
`lib/cannery_web/components/layouts/email_text.txt.eex` for text emails.
|
||||
"""
|
||||
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import Swoosh.Email
|
||||
import CanneryWeb.Gettext
|
||||
import Phoenix.Template
|
||||
alias Cannery.Accounts.User
|
||||
alias CanneryWeb.{EmailHTML, Layouts}
|
@ -14,7 +14,7 @@ defmodule Cannery.Logger do
|
||||
|> Map.put(:stacktrace, Exception.format_stacktrace(stacktrace))
|
||||
|> pretty_encode()
|
||||
|
||||
Logger.error("#{meta.reason}: #{data}")
|
||||
Logger.error("Oban exception: #{data}")
|
||||
end
|
||||
|
||||
def handle_event([:oban, :job, :start], measure, meta, _config) do
|
||||
|
@ -42,9 +42,10 @@ defmodule CanneryWeb do
|
||||
formats: [:html, :json],
|
||||
layouts: [html: CanneryWeb.Layouts]
|
||||
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
|
||||
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
|
||||
import Plug.Conn
|
||||
import CanneryWeb.Gettext
|
||||
|
||||
unquote(verified_routes())
|
||||
end
|
||||
@ -84,8 +85,9 @@ defmodule CanneryWeb do
|
||||
defp html_helpers do
|
||||
quote do
|
||||
use PhoenixHTMLHelpers
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import Phoenix.{Component, HTML, HTML.Form}
|
||||
import CanneryWeb.{ErrorHelpers, Gettext, CoreComponents, HTMLHelpers}
|
||||
import CanneryWeb.{ErrorHelpers, CoreComponents, HTMLHelpers}
|
||||
|
||||
# Shortcut for generating JS commands
|
||||
alias Phoenix.LiveView.JS
|
||||
|
@ -33,7 +33,9 @@ defmodule CanneryWeb.Components.AddShotRecordComponent do
|
||||
) do
|
||||
params = shot_record_params |> process_params(pack)
|
||||
|
||||
changeset = %ShotRecord{} |> ShotRecord.create_changeset(current_user, pack, params)
|
||||
changeset =
|
||||
%ShotRecord{}
|
||||
|> ShotRecord.create_changeset(current_user, pack, params)
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(:validate) do
|
||||
|
@ -13,7 +13,7 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
@ -37,11 +37,12 @@
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
id: "add-shot-record-form-notes",
|
||||
class: "input input-primary col-span-2",
|
||||
id: "add-shot-record-form-notes",
|
||||
maxlength: 255,
|
||||
placeholder: gettext("Really great weather"),
|
||||
phx_update: "ignore"
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Really great weather")
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
|
||||
|
@ -4,6 +4,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
"""
|
||||
use CanneryWeb, :live_component
|
||||
alias Cannery.{Accounts.User, Ammo, Containers.Container}
|
||||
alias CanneryWeb.Components.TableComponent
|
||||
alias Ecto.UUID
|
||||
alias Phoenix.LiveView.{Rendered, Socket}
|
||||
|
||||
@ -13,6 +14,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
required(:id) => UUID.t(),
|
||||
required(:current_user) => User.t(),
|
||||
optional(:containers) => [Container.t()],
|
||||
optional(:range) => Rendered.t(),
|
||||
optional(:tag_actions) => Rendered.t(),
|
||||
optional(:actions) => Rendered.t(),
|
||||
optional(any()) => any()
|
||||
@ -23,6 +25,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
socket =
|
||||
socket
|
||||
|> assign(assigns)
|
||||
|> assign_new(:range, fn -> [] end)
|
||||
|> assign_new(:tag_actions, fn -> [] end)
|
||||
|> assign_new(:actions, fn -> [] end)
|
||||
|> display_containers()
|
||||
@ -35,6 +38,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
assigns: %{
|
||||
containers: containers,
|
||||
current_user: current_user,
|
||||
range: range,
|
||||
tag_actions: tag_actions,
|
||||
actions: actions
|
||||
}
|
||||
@ -62,13 +66,22 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
end)
|
||||
|> Enum.concat([
|
||||
%{label: gettext("Packs"), key: :packs, type: :integer},
|
||||
%{label: gettext("Rounds"), key: :rounds, type: :integer},
|
||||
%{label: gettext("Tags"), key: :tags, type: :tags},
|
||||
%{label: gettext("Actions"), key: :actions, sortable: false, type: :actions}
|
||||
%{label: gettext("Rounds"), key: :rounds, type: :integer}
|
||||
])
|
||||
|> Enum.concat(
|
||||
[
|
||||
%{label: gettext("Tags"), key: :tags, type: :tags},
|
||||
%{label: gettext("Actions"), key: :actions, sortable: false, type: :actions}
|
||||
]
|
||||
|> TableComponent.maybe_compose_columns(
|
||||
%{label: gettext("Range"), key: :range},
|
||||
range != []
|
||||
)
|
||||
)
|
||||
|
||||
extra_data = %{
|
||||
current_user: current_user,
|
||||
range: range,
|
||||
tag_actions: tag_actions,
|
||||
actions: actions,
|
||||
pack_count:
|
||||
@ -136,6 +149,15 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
|
||||
round_count |> Map.get(container_id, 0)
|
||||
end
|
||||
|
||||
defp get_value_for_key(:range, %{staged: staged} = container, %{range: range}) do
|
||||
assigns = %{range: range, container: container}
|
||||
|
||||
{staged,
|
||||
~H"""
|
||||
<%= render_slot(@range, @container) %>
|
||||
"""}
|
||||
end
|
||||
|
||||
defp get_value_for_key(:tags, container, %{tag_actions: tag_actions}) do
|
||||
assigns = %{tag_actions: tag_actions, container: container}
|
||||
|
||||
|
@ -4,7 +4,8 @@ defmodule CanneryWeb.CoreComponents do
|
||||
"""
|
||||
use Phoenix.Component
|
||||
use CanneryWeb, :verified_routes
|
||||
import CanneryWeb.{Gettext, HTMLHelpers}
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import CanneryWeb.HTMLHelpers
|
||||
alias Cannery.{Accounts, Accounts.Invite, Accounts.User}
|
||||
alias Cannery.{Ammo, Ammo.Pack}
|
||||
alias Cannery.{Containers.Container, Containers.Tag}
|
||||
@ -140,6 +141,18 @@ defmodule CanneryWeb.CoreComponents do
|
||||
"""
|
||||
def datetime(assigns)
|
||||
|
||||
attr :name, :string, required: true
|
||||
|
||||
attr :start_date, :string,
|
||||
default: Date.utc_today() |> Date.shift(year: -1) |> Date.to_iso8601()
|
||||
|
||||
attr :end_date, :string, default: Date.utc_today() |> Date.to_iso8601()
|
||||
|
||||
@doc """
|
||||
Phoenix.Component for an element that generates date fields for a range
|
||||
"""
|
||||
def date_range(assigns)
|
||||
|
||||
@spec cast_datetime(NaiveDateTime.t() | nil) :: String.t()
|
||||
defp cast_datetime(%NaiveDateTime{} = datetime) do
|
||||
datetime |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_iso8601(:extended)
|
||||
|
@ -0,0 +1,15 @@
|
||||
<div class="flex items-center mx-4 my-2 space-x-1">
|
||||
<input
|
||||
class="w-36 text-center input input-primary"
|
||||
name={"#{@name}_start"}
|
||||
type="date"
|
||||
value={@start_date}
|
||||
/>
|
||||
<span>—</span>
|
||||
<input
|
||||
class="w-36 text-center input input-primary"
|
||||
name={"#{@name}_end"}
|
||||
type="date"
|
||||
value={@end_date}
|
||||
/>
|
||||
</div>
|
@ -10,7 +10,7 @@
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="info"
|
||||
>
|
||||
<%= live_flash(@flash, "info") %>
|
||||
<%= Phoenix.Flash.get(@flash, :info) %>
|
||||
</p>
|
||||
|
||||
<p
|
||||
@ -20,7 +20,7 @@
|
||||
phx-click="lv:clear-flash"
|
||||
phx-value-key="error"
|
||||
>
|
||||
<%= live_flash(@flash, "error") %>
|
||||
<%= Phoenix.Flash.get(@flash, :error) %>
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
|
@ -201,13 +201,12 @@ defmodule CanneryWeb.Components.PackTableComponent do
|
||||
"""}
|
||||
end
|
||||
|
||||
defp get_value_for_key(:range, %{staged: staged} = pack, %{range: range}) do
|
||||
defp get_value_for_key(:range, pack, %{range: range}) do
|
||||
assigns = %{range: range, pack: pack}
|
||||
|
||||
{staged,
|
||||
~H"""
|
||||
<%= render_slot(@range, @pack) %>
|
||||
"""}
|
||||
~H"""
|
||||
<%= render_slot(@range, @pack) %>
|
||||
"""
|
||||
end
|
||||
|
||||
defp get_value_for_key(
|
||||
|
@ -20,6 +20,7 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
"""
|
||||
|
||||
use CanneryWeb, :live_component
|
||||
alias Cannery.{ComparableDate, ComparableDateTime}
|
||||
alias Phoenix.LiveView.Socket
|
||||
require Integer
|
||||
|
||||
@ -110,7 +111,7 @@ defmodule CanneryWeb.Components.TableComponent do
|
||||
end
|
||||
|
||||
defp sort_by_custom_sort_value_or_value(rows, key, sort_mode, type)
|
||||
when type in [Date, DateTime] do
|
||||
when type in [ComparableDate, ComparableDateTime, Date, DateTime] do
|
||||
rows
|
||||
|> Enum.sort_by(
|
||||
fn row ->
|
||||
|
@ -1,5 +1,5 @@
|
||||
defmodule CanneryWeb.ErrorJSON do
|
||||
import CanneryWeb.Gettext
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
|
||||
def render(template, _assigns) do
|
||||
error_string =
|
||||
|
@ -4,9 +4,9 @@ defmodule CanneryWeb.UserAuth do
|
||||
"""
|
||||
|
||||
use CanneryWeb, :verified_routes
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
import Plug.Conn
|
||||
import Phoenix.Controller
|
||||
import CanneryWeb.Gettext
|
||||
alias Cannery.{Accounts, Accounts.User}
|
||||
|
||||
# Make the remember me cookie valid for 60 days.
|
||||
|
@ -1,7 +1,5 @@
|
||||
defmodule CanneryWeb.UserConfirmationController do
|
||||
use CanneryWeb, :controller
|
||||
|
||||
import CanneryWeb.Gettext
|
||||
alias Cannery.Accounts
|
||||
|
||||
def new(conn, _params) do
|
||||
|
@ -1,6 +1,5 @@
|
||||
defmodule CanneryWeb.UserRegistrationController do
|
||||
use CanneryWeb, :controller
|
||||
import CanneryWeb.Gettext
|
||||
alias Cannery.{Accounts, Accounts.Invites}
|
||||
alias Ecto.Changeset
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
action={~p"/users/register"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
</p>
|
||||
|
||||
@ -29,7 +29,12 @@
|
||||
<%= select(
|
||||
f,
|
||||
:locale,
|
||||
[{gettext("English"), "en_US"}],
|
||||
[
|
||||
{"English", "en_US"},
|
||||
{"Deutsch", "de"},
|
||||
{"Français", "fr"},
|
||||
{"Español", "es"}
|
||||
],
|
||||
class: "input input-primary col-span-2"
|
||||
) %>
|
||||
<%= error_tag(f, :locale) %>
|
||||
|
@ -40,7 +40,7 @@ defmodule CanneryWeb.UserResetPasswordController do
|
||||
# leaked token giving the user access to the account.
|
||||
def update(conn, %{"user" => user_params}) do
|
||||
case Accounts.reset_user_password(conn.assigns.user, user_params) do
|
||||
{:ok, _} ->
|
||||
{:ok, _socket} ->
|
||||
conn
|
||||
|> put_flash(:info, dgettext("prompts", "Password reset successfully."))
|
||||
|> redirect(to: ~p"/users/log_in")
|
||||
|
@ -9,7 +9,7 @@
|
||||
action={~p"/users/reset_password/#{@token}"}
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<p :if={@changeset.action && not @changeset.valid?()} class="alert alert-danger col-span-3">
|
||||
<p :if={@changeset.action && not @changeset.valid?} class="alert alert-danger col-span-3">
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
</p>
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
defmodule CanneryWeb.UserSettingsController do
|
||||
use CanneryWeb, :controller
|
||||
import CanneryWeb.Gettext
|
||||
alias Cannery.Accounts
|
||||
alias CanneryWeb.UserAuth
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@email_changeset.action && not @email_changeset.valid?()}
|
||||
:if={@email_changeset.action && not @email_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
@ -58,7 +58,7 @@
|
||||
</h3>
|
||||
|
||||
<div
|
||||
:if={@password_changeset.action && not @password_changeset.valid?()}
|
||||
:if={@password_changeset.action && not @password_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
@ -112,7 +112,7 @@
|
||||
) %>
|
||||
|
||||
<div
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?()}
|
||||
:if={@locale_changeset.action && not @locale_changeset.valid?}
|
||||
class="alert alert-danger col-span-3"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
@ -124,12 +124,12 @@
|
||||
f,
|
||||
:locale,
|
||||
[
|
||||
{gettext("English"), "en_US"},
|
||||
{gettext("German"), "de"},
|
||||
{gettext("French"), "fr"},
|
||||
{gettext("Spanish"), "es"}
|
||||
{"English", "en_US"},
|
||||
{"Deutsch", "de"},
|
||||
{"Français", "fr"},
|
||||
{"Español", "es"}
|
||||
],
|
||||
class: "mx-2 my-1 min-w-md input input-primary col-span-3"
|
||||
class: "my-1 min-w-md input input-primary col-span-3"
|
||||
) %>
|
||||
<%= error_tag(f, :locale, "col-span-3") %>
|
||||
|
||||
|
@ -5,7 +5,7 @@ defmodule CanneryWeb.Gettext do
|
||||
By using [Gettext](https://hexdocs.pm/gettext),
|
||||
your module gains a set of macros for translations, for example:
|
||||
|
||||
import CanneryWeb.Gettext
|
||||
use Gettext, backend: CanneryWeb.Gettext
|
||||
|
||||
# Simple translation
|
||||
gettext("Here is the string to translate")
|
||||
@ -20,5 +20,5 @@ defmodule CanneryWeb.Gettext do
|
||||
|
||||
See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.
|
||||
"""
|
||||
use Gettext, otp_app: :cannery
|
||||
use Gettext.Backend, otp_app: :cannery
|
||||
end
|
||||
|
@ -44,7 +44,9 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<%= select(f, :tag_id, tag_options(@tags, @container),
|
||||
class: "text-center col-span-2 input input-primary"
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "#{@id}-tag-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :tag_id, "col-span-3 text-center") %>
|
||||
|
||||
|
@ -19,7 +19,7 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
||||
|
||||
@impl true
|
||||
def handle_event("validate", %{"container" => container_params}, socket) do
|
||||
{:noreply, socket |> assign_changeset(container_params)}
|
||||
{:noreply, socket |> assign_changeset(container_params, :validate)}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
@ -32,14 +32,9 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
||||
|
||||
defp assign_changeset(
|
||||
%{assigns: %{action: action, container: container, current_user: user}} = socket,
|
||||
container_params
|
||||
container_params,
|
||||
changeset_action \\ nil
|
||||
) do
|
||||
changeset_action =
|
||||
case action do
|
||||
create when create in [:new, :clone] -> :insert
|
||||
:edit -> :update
|
||||
end
|
||||
|
||||
changeset =
|
||||
case action do
|
||||
create when create in [:new, :clone] ->
|
||||
@ -50,9 +45,13 @@ defmodule CanneryWeb.ContainerLive.FormComponent do
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
|
@ -12,7 +12,7 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
@ -21,34 +21,38 @@
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
placeholder: gettext("My cool ammo can"),
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("My cool ammo can")
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :desc,
|
||||
id: "container-form-desc",
|
||||
class: "input input-primary col-span-2",
|
||||
placeholder: gettext("Metal ammo can with the anime girl sticker"),
|
||||
phx_update: "ignore"
|
||||
id: "container-form-desc",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Metal ammo can with the anime girl sticker")
|
||||
) %>
|
||||
<%= error_tag(f, :desc, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :type, gettext("Type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :type,
|
||||
class: "input input-primary col-span-2",
|
||||
placeholder: gettext("Magazine, Clip, Ammo Box, etc"),
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Magazine, Clip, Ammo Box, etc")
|
||||
) %>
|
||||
<%= error_tag(f, :type, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :location, gettext("Location"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :location,
|
||||
id: "container-form-location",
|
||||
class: "input input-primary col-span-2",
|
||||
placeholder: gettext("On the bookshelf"),
|
||||
phx_update: "ignore"
|
||||
id: "container-form-location",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("On the bookshelf")
|
||||
) %>
|
||||
<%= error_tag(f, :location, "col-span-3 text-center") %>
|
||||
|
||||
|
@ -112,6 +112,20 @@ defmodule CanneryWeb.ContainerLive.Index do
|
||||
{:noreply, socket |> push_patch(to: ~p"/containers/search/#{search_term}")}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"toggle_staged",
|
||||
%{"container_id" => id},
|
||||
%{assigns: %{current_user: current_user}} = socket
|
||||
) do
|
||||
container = Containers.get_container!(id, current_user)
|
||||
|
||||
{:ok, _container} =
|
||||
container
|
||||
|> Containers.update_container(current_user, %{"staged" => !container.staged})
|
||||
|
||||
{:noreply, socket |> display_containers()}
|
||||
end
|
||||
|
||||
defp display_containers(%{assigns: %{search: search, current_user: current_user}} = socket) do
|
||||
socket |> assign(:containers, Containers.list_containers(current_user, search: search))
|
||||
end
|
||||
|
@ -1,10 +1,10 @@
|
||||
<div class="flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Containers") %>
|
||||
</h1>
|
||||
|
||||
<%= if @containers |> Enum.empty?() and @search |> is_nil() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h2>
|
||||
@ -17,33 +17,33 @@
|
||||
<%= dgettext("actions", "New Container") %>
|
||||
</.link>
|
||||
|
||||
<div class="w-full flex flex-col sm:flex-row justify-center items-center space-y-4 sm:space-y-0 sm:space-x-4 max-w-2xl">
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
as={:search}
|
||||
phx-change="search"
|
||||
phx-submit="search"
|
||||
class="grow flex items-center"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
value: @search,
|
||||
role: "search",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search containers")
|
||||
placeholder: gettext("Search containers"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_table" value={@view_table}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("View as table") %>
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<%= if @containers |> Enum.empty?() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h2>
|
||||
@ -56,6 +56,20 @@
|
||||
containers={@containers}
|
||||
current_user={@current_user}
|
||||
>
|
||||
<:range :let={container}>
|
||||
<div class="flex justify-center items-center px-4 py-2 h-full min-w-20 flex-wrap">
|
||||
<button
|
||||
type="button"
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
phx-click="toggle_staged"
|
||||
phx-value-container_id={container.id}
|
||||
>
|
||||
<%= if container.staged,
|
||||
do: dgettext("actions", "Unstage"),
|
||||
else: dgettext("actions", "Stage") %>
|
||||
</button>
|
||||
</div>
|
||||
</:range>
|
||||
<:tag_actions :let={container}>
|
||||
<div class="mx-4 my-2">
|
||||
<.link
|
||||
@ -109,7 +123,7 @@
|
||||
</:actions>
|
||||
</.live_component>
|
||||
<% else %>
|
||||
<div class="w-full flex flex-row flex-wrap justify-center items-stretch">
|
||||
<div class="flex flex-row flex-wrap justify-center items-stretch w-full">
|
||||
<.container_card
|
||||
:for={container <- @containers}
|
||||
container={container}
|
||||
|
@ -78,6 +78,18 @@ defmodule CanneryWeb.ContainerLive.Show do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"toggle_staged",
|
||||
_params,
|
||||
%{assigns: %{container: container, current_user: current_user}} = socket
|
||||
) do
|
||||
{:ok, _container} =
|
||||
container
|
||||
|> Containers.update_container(current_user, %{"staged" => !container.staged})
|
||||
|
||||
{:noreply, socket |> render_container()}
|
||||
end
|
||||
|
||||
def handle_event("toggle_table", _params, %{assigns: %{view_table: view_table}} = socket) do
|
||||
{:noreply, socket |> assign(:view_table, !view_table) |> render_container()}
|
||||
end
|
||||
|
@ -1,34 +1,34 @@
|
||||
<div class="space-y-4 flex flex-col justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center space-y-4">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= @container.name %>
|
||||
</h1>
|
||||
|
||||
<span :if={@container.desc} class="rounded-lg title text-lg">
|
||||
<span :if={@container.desc} class="text-lg rounded-lg title">
|
||||
<%= gettext("Description:") %>
|
||||
<%= @container.desc %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Type:") %>
|
||||
<%= @container.type %>
|
||||
</span>
|
||||
|
||||
<span :if={@container.location} class="rounded-lg title text-lg">
|
||||
<span :if={@container.location} class="text-lg rounded-lg title">
|
||||
<%= gettext("Location:") %>
|
||||
<%= @container.location %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Packs:") %>
|
||||
<%= @packs_count %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Rounds:") %>
|
||||
<%= @round_count %>
|
||||
</span>
|
||||
|
||||
<div class="flex space-x-4 justify-center items-center text-primary-600">
|
||||
<div class="flex justify-center items-center space-x-4 text-primary-600">
|
||||
<.link
|
||||
patch={~p"/container/edit/#{@container}"}
|
||||
class="text-primary-600 link"
|
||||
@ -52,11 +52,19 @@
|
||||
</.link>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||
<button type="button" class="mx-4 my-2 btn btn-primary" phx-click="toggle_staged">
|
||||
<%= if @container.staged,
|
||||
do: dgettext("actions", "Unstage from range"),
|
||||
else: dgettext("actions", "Stage for range") %>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<hr class="mb-4 hr" />
|
||||
|
||||
<%= if @container.tags |> Enum.empty?() do %>
|
||||
<div class="flex flex-row justify-center items-center space-x-4">
|
||||
<h2 class="title text-lg text-primary-600">
|
||||
<h2 class="text-lg title text-primary-600">
|
||||
<%= gettext("No tags for this container") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h2>
|
||||
@ -105,15 +113,15 @@
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_table" value={@view_table}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("View as table") %>
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<div class="w-full p-4">
|
||||
<div class="p-4 w-full">
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h2 class="mx-4 title text-lg text-primary-600 text-center">
|
||||
<h2 class="mx-4 text-lg text-center title text-primary-600">
|
||||
<%= gettext("No ammo in this container") %>
|
||||
</h2>
|
||||
<% else %>
|
||||
@ -131,7 +139,7 @@
|
||||
</.link>
|
||||
</:type>
|
||||
<:actions :let={%{count: pack_count} = pack}>
|
||||
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4 h-full">
|
||||
<.link
|
||||
navigate={~p"/ammo/show/#{pack}"}
|
||||
class="text-primary-600 link"
|
||||
|
@ -19,7 +19,7 @@ defmodule CanneryWeb.InviteLive.FormComponent do
|
||||
|
||||
@impl true
|
||||
def handle_event("validate", %{"invite" => invite_params}, socket) do
|
||||
{:noreply, socket |> assign_changeset(invite_params)}
|
||||
{:noreply, socket |> assign_changeset(invite_params, :validate)}
|
||||
end
|
||||
|
||||
def handle_event("save", %{"invite" => invite_params}, %{assigns: %{action: action}} = socket) do
|
||||
@ -28,14 +28,9 @@ defmodule CanneryWeb.InviteLive.FormComponent do
|
||||
|
||||
defp assign_changeset(
|
||||
%{assigns: %{action: action, current_user: user, invite: invite}} = socket,
|
||||
invite_params
|
||||
invite_params,
|
||||
changeset_action \\ nil
|
||||
) do
|
||||
changeset_action =
|
||||
case action do
|
||||
:new -> :insert
|
||||
:edit -> :update
|
||||
end
|
||||
|
||||
changeset =
|
||||
case action do
|
||||
:new -> Invite.create_changeset(user, "example_token", invite_params)
|
||||
@ -43,9 +38,13 @@ defmodule CanneryWeb.InviteLive.FormComponent do
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
|
@ -12,7 +12,7 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
@ -22,7 +22,10 @@
|
||||
class: "title text-lg text-primary-600",
|
||||
maxlength: 255
|
||||
) %>
|
||||
<%= text_input(f, :name, class: "input input-primary col-span-2") %>
|
||||
<%= text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3") %>
|
||||
|
||||
<%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %>
|
||||
|
@ -116,6 +116,20 @@ defmodule CanneryWeb.InviteLive.Index do
|
||||
{:noreply, socket |> put_flash(:info, dgettext("prompts", "Copied to clipboard"))}
|
||||
end
|
||||
|
||||
def handle_event("resend_email_verification", %{"id" => id}, socket) do
|
||||
%{email: user_email} = user = Accounts.get_user!(id)
|
||||
|
||||
Accounts.deliver_user_confirmation_instructions(
|
||||
user,
|
||||
fn token -> url(CanneryWeb.Endpoint, ~p"/users/confirm/#{token}") end
|
||||
)
|
||||
|
||||
prompt =
|
||||
dgettext("prompts", "Email resent to %{user_email} succesfully", user_email: user_email)
|
||||
|
||||
{:noreply, socket |> put_flash(:info, prompt) |> display_invites()}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"delete_user",
|
||||
%{"id" => id},
|
||||
|
@ -1,10 +1,10 @@
|
||||
<div class="mx-auto flex flex-col justify-center items-center space-y-4 max-w-3xl">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center mx-auto space-y-4 max-w-3xl">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Invites") %>
|
||||
</h1>
|
||||
|
||||
<%= if @invites |> Enum.empty?() do %>
|
||||
<h1 class="title text-xl text-primary-600">
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No invites") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h1>
|
||||
@ -95,7 +95,7 @@
|
||||
<%= unless @admins |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="title text-2xl text-primary-600">
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Admins") %>
|
||||
</h1>
|
||||
|
||||
@ -123,27 +123,38 @@
|
||||
<%= unless @users |> Enum.empty?() do %>
|
||||
<hr class="hr" />
|
||||
|
||||
<h1 class="title text-2xl text-primary-600">
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Users") %>
|
||||
</h1>
|
||||
|
||||
<div class="flex flex-col justify-center items-stretch space-y-4">
|
||||
<.user_card :for={user <- @users} user={user}>
|
||||
<.link
|
||||
href="#"
|
||||
class="text-primary-600 link"
|
||||
phx-click="delete_user"
|
||||
phx-value-id={user.id}
|
||||
data-confirm={
|
||||
dgettext(
|
||||
"prompts",
|
||||
"Are you sure you want to delete %{email}? This action is permanent!",
|
||||
email: user.email
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||
</.link>
|
||||
<div class="flex justify-center items-center space-x-2">
|
||||
<.link
|
||||
:if={!user.confirmed_at}
|
||||
class="text-primary-600 link"
|
||||
href="#"
|
||||
phx-click="resend_email_verification"
|
||||
phx-value-id={user.id}
|
||||
>
|
||||
<i class="fa-fw fa-lg fas fa-paper-plane"></i>
|
||||
</.link>
|
||||
<.link
|
||||
class="text-primary-600 link"
|
||||
data-confirm={
|
||||
dgettext(
|
||||
"prompts",
|
||||
"Are you sure you want to delete %{email}? This action is permanent!",
|
||||
email: user.email
|
||||
)
|
||||
}
|
||||
href="#"
|
||||
phx-click="delete_user"
|
||||
phx-value-id={user.id}
|
||||
>
|
||||
<i class="fa-fw fa-lg fas fa-trash"></i>
|
||||
</.link>
|
||||
</div>
|
||||
</.user_card>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -9,7 +9,11 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
alias Ecto.Changeset
|
||||
alias Phoenix.LiveView.Socket
|
||||
|
||||
@pack_create_limit 10_000
|
||||
@impl true
|
||||
@spec mount(Socket.t()) :: {:ok, Socket.t()}
|
||||
def mount(socket) do
|
||||
{:ok, socket |> assign(:class, :all)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
@spec update(
|
||||
@ -22,29 +26,30 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
|
||||
@spec update(Socket.t()) :: {:ok, Socket.t()}
|
||||
def update(%{assigns: %{current_user: current_user}} = socket) do
|
||||
%{assigns: %{types: types, containers: containers}} =
|
||||
socket =
|
||||
socket =
|
||||
socket
|
||||
|> assign(:pack_create_limit, @pack_create_limit)
|
||||
|> assign(:types, Ammo.list_types(current_user))
|
||||
|> assign_new(:containers, fn -> Containers.list_containers(current_user) end)
|
||||
|
||||
params =
|
||||
if types |> List.first() |> is_nil(),
|
||||
do: %{},
|
||||
else: %{} |> Map.put("type_id", types |> List.first() |> Map.get(:id))
|
||||
|
||||
params =
|
||||
if containers |> List.first() |> is_nil(),
|
||||
do: params,
|
||||
else: params |> Map.put("container_id", containers |> List.first() |> Map.get(:id))
|
||||
|
||||
{:ok, socket |> assign_changeset(params)}
|
||||
{:ok, socket |> assign_changeset(%{})}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("validate", %{"pack" => pack_params}, socket) do
|
||||
{:noreply, socket |> assign_changeset(pack_params, :validate)}
|
||||
matched_class =
|
||||
case pack_params["class"] do
|
||||
"rifle" -> :rifle
|
||||
"shotgun" -> :shotgun
|
||||
"pistol" -> :pistol
|
||||
_other -> :all
|
||||
end
|
||||
|
||||
socket =
|
||||
socket
|
||||
|> assign_changeset(pack_params, :validate)
|
||||
|> assign(:class, matched_class)
|
||||
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
@ -62,11 +67,18 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
containers |> Enum.map(fn %{id: id, name: name} -> {name, id} end)
|
||||
end
|
||||
|
||||
@spec type_options([Type.t()]) :: [{String.t(), Type.id()}]
|
||||
defp type_options(types) do
|
||||
@spec type_options([Type.t()], Type.class() | :all) ::
|
||||
[{String.t(), Type.id()}]
|
||||
defp type_options(types, :all) do
|
||||
types |> Enum.map(fn %{id: id, name: name} -> {name, id} end)
|
||||
end
|
||||
|
||||
defp type_options(types, selected_class) do
|
||||
types
|
||||
|> Enum.filter(fn %{class: class} -> class == selected_class end)
|
||||
|> Enum.map(fn %{id: id, name: name} -> {name, id} end)
|
||||
end
|
||||
|
||||
# Save Helpers
|
||||
|
||||
defp assign_changeset(
|
||||
@ -92,9 +104,13 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(changeset_action || default_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
@ -133,53 +149,15 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
end
|
||||
|
||||
defp save_pack(
|
||||
%{assigns: %{changeset: changeset}} = socket,
|
||||
%{assigns: %{changeset: changeset, current_user: current_user, return_to: return_to}} =
|
||||
socket,
|
||||
action,
|
||||
%{"multiplier" => multiplier_str} = pack_params
|
||||
)
|
||||
when action in [:new, :clone] do
|
||||
socket =
|
||||
case multiplier_str |> Integer.parse() do
|
||||
{multiplier, _remainder}
|
||||
when multiplier >= 1 and multiplier <= @pack_create_limit ->
|
||||
socket |> create_multiple(pack_params, multiplier)
|
||||
|
||||
{multiplier, _remainder} ->
|
||||
error_msg =
|
||||
dgettext(
|
||||
"errors",
|
||||
"Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}",
|
||||
max: @pack_create_limit,
|
||||
multiplier: multiplier
|
||||
)
|
||||
|
||||
save_multiplier_error(socket, changeset, error_msg)
|
||||
|
||||
:error ->
|
||||
error_msg = dgettext("errors", "Could not parse number of copies")
|
||||
save_multiplier_error(socket, changeset, error_msg)
|
||||
end
|
||||
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
@spec save_multiplier_error(Socket.t(), Changeset.t(), String.t()) :: Socket.t()
|
||||
defp save_multiplier_error(socket, changeset, error_msg) do
|
||||
{:error, changeset} =
|
||||
changeset
|
||||
|> Changeset.add_error(:multiplier, error_msg)
|
||||
|> Changeset.apply_action(:insert)
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
end
|
||||
|
||||
defp create_multiple(
|
||||
%{assigns: %{current_user: current_user, return_to: return_to}} = socket,
|
||||
pack_params,
|
||||
multiplier
|
||||
) do
|
||||
case Ammo.create_packs(pack_params, multiplier, current_user) do
|
||||
{:ok, {count, _packs}} ->
|
||||
with {multiplier, _remainder} <- multiplier_str |> Integer.parse(),
|
||||
{:ok, {count, _packs}} <- Ammo.create_packs(pack_params, multiplier, current_user) do
|
||||
prompt =
|
||||
dngettext(
|
||||
"prompts",
|
||||
@ -189,9 +167,21 @@ defmodule CanneryWeb.PackLive.FormComponent do
|
||||
)
|
||||
|
||||
socket |> put_flash(:info, prompt) |> push_navigate(to: return_to)
|
||||
else
|
||||
{:error, %Changeset{} = changeset} ->
|
||||
socket |> assign(changeset: changeset)
|
||||
|
||||
{:error, %Changeset{} = changeset} ->
|
||||
socket |> assign(changeset: changeset)
|
||||
end
|
||||
:error ->
|
||||
error_msg = dgettext("errors", "Could not parse number of copies")
|
||||
|
||||
{:error, changeset} =
|
||||
changeset
|
||||
|> Changeset.add_error(:multiplier, error_msg)
|
||||
|> Changeset.apply_action(:insert)
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
end
|
||||
|
||||
{:noreply, socket}
|
||||
end
|
||||
end
|
||||
|
@ -13,15 +13,32 @@
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
</div>
|
||||
|
||||
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(
|
||||
f,
|
||||
:class,
|
||||
[
|
||||
{gettext("Any"), :all},
|
||||
{gettext("Rifle"), :rifle},
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
value: @class
|
||||
) %>
|
||||
<%= error_tag(f, :class, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :type_id, gettext("Type"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(f, :type_id, type_options(@types),
|
||||
class: "text-center col-span-2 input input-primary"
|
||||
<%= select(f, :type_id, type_options(@types, @class),
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-type-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :type_id, "col-span-3 text-center") %>
|
||||
|
||||
@ -42,7 +59,8 @@
|
||||
<%= label(f, :lot_number, gettext("Lot number"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :lot_number,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
|
||||
|
||||
@ -56,15 +74,18 @@
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
id: "pack-form-notes",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-notes",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore"
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :container, gettext("Container"), class: "title text-lg text-primary-600") %>
|
||||
<%= select(f, :container_id, container_options(@containers),
|
||||
class: "text-center col-span-2 input input-primary"
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "pack-form-container-select",
|
||||
phx_hook: "SlimSelect"
|
||||
) %>
|
||||
<%= error_tag(f, :container_id, "col-span-3 text-center") %>
|
||||
|
||||
@ -74,7 +95,6 @@
|
||||
|
||||
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
|
||||
<%= number_input(f, :multiplier,
|
||||
max: @pack_create_limit,
|
||||
class: "text-center input input-primary",
|
||||
value: 1,
|
||||
phx_update: "ignore"
|
||||
|
@ -96,18 +96,6 @@ defmodule CanneryWeb.PackLive.Index do
|
||||
{:noreply, socket |> put_flash(:info, prompt) |> display_packs()}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"toggle_staged",
|
||||
%{"pack_id" => id},
|
||||
%{assigns: %{current_user: current_user}} = socket
|
||||
) do
|
||||
pack = Ammo.get_pack!(id, current_user)
|
||||
|
||||
{:ok, _pack} = pack |> Ammo.update_pack(%{"staged" => !pack.staged}, current_user)
|
||||
|
||||
{:noreply, socket |> display_packs()}
|
||||
end
|
||||
|
||||
def handle_event("toggle_show_used", _params, %{assigns: %{show_used: show_used}} = socket) do
|
||||
{:noreply, socket |> assign(:show_used, !show_used) |> display_packs()}
|
||||
end
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Ammo") %>
|
||||
</h1>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
</.link>
|
||||
</div>
|
||||
<% @packs_count == 0 -> %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No ammo") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h2>
|
||||
@ -38,7 +38,7 @@
|
||||
<%= dgettext("actions", "Add Ammo") %>
|
||||
</.link>
|
||||
|
||||
<div class="w-full flex flex-col sm:flex-row justify-center items-center space-y-4 sm:space-y-0 sm:space-x-4 max-w-2xl">
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -71,26 +71,26 @@
|
||||
as={:search}
|
||||
phx-change="search"
|
||||
phx-submit="search"
|
||||
class="grow flex items-center"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
value: @search,
|
||||
role: "search",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search ammo")
|
||||
placeholder: gettext("Search ammo"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
</.form>
|
||||
|
||||
<.toggle_button action="toggle_show_used" value={@show_used}>
|
||||
<span class="title text-lg text-primary-600">
|
||||
<span class="text-lg title text-primary-600">
|
||||
<%= gettext("Show used") %>
|
||||
</span>
|
||||
</.toggle_button>
|
||||
</div>
|
||||
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h2 class="title text-xl text-primary-600">
|
||||
<h2 class="text-xl title text-primary-600">
|
||||
<%= gettext("No Ammo") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h2>
|
||||
@ -108,18 +108,7 @@
|
||||
</.link>
|
||||
</:type>
|
||||
<:range :let={pack}>
|
||||
<div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center">
|
||||
<button
|
||||
type="button"
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
phx-click="toggle_staged"
|
||||
phx-value-pack_id={pack.id}
|
||||
>
|
||||
<%= if pack.staged,
|
||||
do: dgettext("actions", "Unstage"),
|
||||
else: dgettext("actions", "Stage") %>
|
||||
</button>
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center px-4 py-2 h-full min-w-20">
|
||||
<.link
|
||||
patch={~p"/ammo/add_shot_record/#{pack}"}
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
@ -129,7 +118,7 @@
|
||||
</div>
|
||||
</:range>
|
||||
<:container :let={{pack, %{name: container_name} = container}}>
|
||||
<div class="min-w-20 py-2 px-4 h-full flex flew-wrap justify-center items-center">
|
||||
<div class="flex flex-wrap justify-center items-center px-4 py-2 h-full min-w-20">
|
||||
<.link navigate={~p"/container/#{container}"} class="mx-2 my-1 link">
|
||||
<%= container_name %>
|
||||
</.link>
|
||||
@ -140,7 +129,7 @@
|
||||
</div>
|
||||
</:container>
|
||||
<:actions :let={%{count: pack_count} = pack}>
|
||||
<div class="py-2 px-4 h-full space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4 h-full">
|
||||
<.link
|
||||
navigate={~p"/ammo/show/#{pack}"}
|
||||
class="text-primary-600 link"
|
||||
|
@ -57,22 +57,12 @@ defmodule CanneryWeb.PackLive.Show do
|
||||
{:noreply, socket |> put_flash(:info, prompt) |> push_navigate(to: redirect_to)}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"toggle_staged",
|
||||
_params,
|
||||
%{assigns: %{pack: pack, current_user: current_user}} = socket
|
||||
) do
|
||||
{:ok, pack} = pack |> Ammo.update_pack(%{"staged" => !pack.staged}, current_user)
|
||||
|
||||
{:noreply, socket |> display_pack(pack)}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"delete_shot_record",
|
||||
%{"id" => id},
|
||||
%{assigns: %{pack: %{id: pack_id}, current_user: current_user}} = socket
|
||||
) do
|
||||
{:ok, _} =
|
||||
{:ok, _shot_record} =
|
||||
ActivityLog.get_shot_record!(id, current_user)
|
||||
|> ActivityLog.delete_shot_record(current_user)
|
||||
|
||||
@ -136,7 +126,7 @@ defmodule CanneryWeb.PackLive.Show do
|
||||
|
||||
:actions ->
|
||||
~H"""
|
||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4">
|
||||
<.link
|
||||
patch={~p"/ammo/show/#{@pack}/edit/#{@shot_record}"}
|
||||
class="text-primary-600 link"
|
||||
|
@ -1,43 +1,43 @@
|
||||
<div class="mx-auto space-y-4 max-w-3xl flex flex-col justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center mx-auto space-y-4 max-w-3xl">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= @pack.type.name %>
|
||||
</h1>
|
||||
|
||||
<div class="space-y-2 flex flex-col justify-center items-center">
|
||||
<span class="rounded-lg title text-lg">
|
||||
<div class="flex flex-col justify-center items-center space-y-2">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Count:") %>
|
||||
<%= @pack.count %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Original count:") %>
|
||||
<%= @original_count %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Percentage left:") %>
|
||||
<%= gettext("%{percentage}%", percentage: @percentage_remaining) %>
|
||||
</span>
|
||||
|
||||
<%= if @pack.notes do %>
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Notes:") %>
|
||||
<%= @pack.notes %>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Purchased on:") %>
|
||||
<.date id={"#{@pack.id}-purchased-on"} date={@pack.purchased_on} />
|
||||
</span>
|
||||
|
||||
<%= if @pack.price_paid do %>
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Original cost:") %>
|
||||
<%= gettext("$%{amount}", amount: display_currency(@pack.price_paid)) %>
|
||||
</span>
|
||||
|
||||
<span class="rounded-lg title text-lg">
|
||||
<span class="text-lg rounded-lg title">
|
||||
<%= gettext("Current value:") %>
|
||||
<%= gettext("$%{amount}",
|
||||
amount: display_currency(@pack.price_paid * @percentage_remaining / 100)
|
||||
@ -76,12 +76,6 @@
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap justify-center items-center text-primary-600">
|
||||
<button type="button" class="mx-4 my-2 btn btn-primary" phx-click="toggle_staged">
|
||||
<%= if @pack.staged,
|
||||
do: dgettext("actions", "Unstage from range"),
|
||||
else: dgettext("actions", "Stage for range") %>
|
||||
</button>
|
||||
|
||||
<.link patch={~p"/ammo/show/move/#{@pack}"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Move ammo") %>
|
||||
</.link>
|
||||
@ -96,7 +90,7 @@
|
||||
|
||||
<div>
|
||||
<%= if @container do %>
|
||||
<h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl">
|
||||
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
|
||||
<%= gettext("Stored in") %>
|
||||
</h1>
|
||||
|
||||
@ -109,7 +103,7 @@
|
||||
<%= unless @shot_records |> Enum.empty?() do %>
|
||||
<hr class="mb-4 w-full" />
|
||||
|
||||
<h1 class="mb-4 px-4 py-2 text-center rounded-lg title text-xl">
|
||||
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
|
||||
<%= gettext("Rounds used") %>
|
||||
</h1>
|
||||
|
||||
|
@ -71,24 +71,25 @@ defmodule CanneryWeb.RangeLive.FormComponent do
|
||||
}
|
||||
} = socket,
|
||||
shot_record_params,
|
||||
action \\ nil
|
||||
changeset_action \\ nil
|
||||
) do
|
||||
default_action =
|
||||
changeset =
|
||||
case live_action do
|
||||
:add_shot_record -> :insert
|
||||
editing when editing in [:edit, :edit_shot_record] -> :update
|
||||
:add_shot_record ->
|
||||
shot_record |> ShotRecord.create_changeset(user, pack, shot_record_params)
|
||||
|
||||
editing when editing in [:edit, :edit_shot_record] ->
|
||||
shot_record |> ShotRecord.update_changeset(user, shot_record_params)
|
||||
end
|
||||
|
||||
changeset =
|
||||
case default_action do
|
||||
:insert -> shot_record |> ShotRecord.create_changeset(user, pack, shot_record_params)
|
||||
:update -> shot_record |> ShotRecord.update_changeset(user, shot_record_params)
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(action || default_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
|
@ -13,7 +13,7 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
@ -29,11 +29,12 @@
|
||||
|
||||
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :notes,
|
||||
id: "shot-record-form-notes",
|
||||
class: "input input-primary col-span-2",
|
||||
id: "shot-record-form-notes",
|
||||
maxlength: 255,
|
||||
placeholder: gettext("Really great weather"),
|
||||
phx_update: "ignore"
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore",
|
||||
placeholder: gettext("Really great weather")
|
||||
) %>
|
||||
<%= error_tag(f, :notes, "col-span-3") %>
|
||||
|
||||
|
@ -4,16 +4,37 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
"""
|
||||
|
||||
use CanneryWeb, :live_view
|
||||
alias Cannery.{ActivityLog, ActivityLog.ShotRecord, Ammo}
|
||||
alias Cannery.{ActivityLog, ActivityLog.ShotRecord}
|
||||
alias Cannery.{Ammo, Containers}
|
||||
alias Phoenix.LiveView.Socket
|
||||
|
||||
@impl true
|
||||
def mount(%{"search" => search}, _session, socket) do
|
||||
{:ok, socket |> assign(class: :all, search: search) |> display_shot_records()}
|
||||
socket =
|
||||
socket
|
||||
|> assign(
|
||||
class: :all,
|
||||
start_date: Date.shift(Date.utc_today(), year: -1),
|
||||
end_date: Date.utc_today(),
|
||||
search: search
|
||||
)
|
||||
|> display_shot_records()
|
||||
|
||||
{:ok, socket}
|
||||
end
|
||||
|
||||
def mount(_params, _session, socket) do
|
||||
{:ok, socket |> assign(class: :all, search: nil) |> display_shot_records()}
|
||||
socket =
|
||||
socket
|
||||
|> assign(
|
||||
class: :all,
|
||||
start_date: Date.shift(Date.utc_today(), year: -1),
|
||||
end_date: Date.utc_today(),
|
||||
search: nil
|
||||
)
|
||||
|> display_shot_records()
|
||||
|
||||
{:ok, socket}
|
||||
end
|
||||
|
||||
@impl true
|
||||
@ -71,7 +92,7 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
|
||||
@impl true
|
||||
def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do
|
||||
{:ok, _} =
|
||||
{:ok, _shot_record} =
|
||||
ActivityLog.get_shot_record!(id, current_user)
|
||||
|> ActivityLog.delete_shot_record(current_user)
|
||||
|
||||
@ -81,14 +102,16 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
|
||||
def handle_event(
|
||||
"toggle_staged",
|
||||
%{"pack_id" => pack_id},
|
||||
%{"container_id" => container_id},
|
||||
%{assigns: %{current_user: current_user}} = socket
|
||||
) do
|
||||
pack = Ammo.get_pack!(pack_id, current_user)
|
||||
container = Containers.get_container!(container_id, current_user)
|
||||
|
||||
{:ok, _pack} = pack |> Ammo.update_pack(%{"staged" => !pack.staged}, current_user)
|
||||
{:ok, _container} =
|
||||
container
|
||||
|> Containers.update_container(current_user, %{"staged" => !container.staged})
|
||||
|
||||
prompt = dgettext("prompts", "Ammo unstaged succesfully")
|
||||
prompt = dgettext("prompts", "Container unstaged succesfully")
|
||||
{:noreply, socket |> put_flash(:info, prompt) |> display_shot_records()}
|
||||
end
|
||||
|
||||
@ -116,11 +139,49 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
{:noreply, socket |> assign(:class, :all) |> display_shot_records()}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
"change_dates",
|
||||
%{
|
||||
"dates_start" => start_date,
|
||||
"dates_end" => end_date
|
||||
},
|
||||
socket
|
||||
) do
|
||||
socket =
|
||||
socket
|
||||
|> assign(
|
||||
start_date: start_date,
|
||||
end_date: end_date
|
||||
)
|
||||
|> display_shot_records()
|
||||
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
@spec display_shot_records(Socket.t()) :: Socket.t()
|
||||
defp display_shot_records(
|
||||
%{assigns: %{class: class, search: search, current_user: current_user}} = socket
|
||||
%{
|
||||
assigns: %{
|
||||
class: class,
|
||||
start_date: start_date,
|
||||
end_date: end_date,
|
||||
search: search,
|
||||
current_user: current_user
|
||||
}
|
||||
} = socket
|
||||
) do
|
||||
shot_records = ActivityLog.list_shot_records(current_user, search: search, class: class)
|
||||
shot_records =
|
||||
ActivityLog.list_shot_records(current_user,
|
||||
class: class,
|
||||
end_date: end_date,
|
||||
search: search,
|
||||
start_date: start_date
|
||||
)
|
||||
|
||||
containers =
|
||||
Containers.list_containers(current_user, staged: true)
|
||||
|> Map.new(fn container = %{id: container_id} -> {container_id, container} end)
|
||||
|
||||
packs = Ammo.list_packs(current_user, staged: true)
|
||||
chart_data = shot_records |> get_chart_data_for_shot_record()
|
||||
original_counts = packs |> Ammo.get_original_counts(current_user)
|
||||
@ -130,6 +191,7 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
|
||||
socket
|
||||
|> assign(
|
||||
containers: containers,
|
||||
packs: packs,
|
||||
original_counts: original_counts,
|
||||
cprs: cprs,
|
||||
@ -153,6 +215,5 @@ defmodule CanneryWeb.RangeLive.Index do
|
||||
label: gettext("Rounds shot: %{count}", count: sum)
|
||||
}
|
||||
end)
|
||||
|> Enum.sort_by(fn %{date: date} -> date end, Date)
|
||||
end
|
||||
end
|
||||
|
@ -1,43 +1,55 @@
|
||||
<div class="flex flex-col space-y-8 justify-center items-center">
|
||||
<h1 class="title text-2xl title-primary-500">
|
||||
<div class="flex flex-col justify-center items-center space-y-8">
|
||||
<h1 class="text-2xl title title-primary-500">
|
||||
<%= gettext("Range day") %>
|
||||
</h1>
|
||||
|
||||
<%= if @packs |> Enum.empty?() do %>
|
||||
<h1 class="title text-xl text-primary-600">
|
||||
<%= gettext("No ammo staged") %>
|
||||
<%= if @containers |> Enum.empty?() do %>
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No containers staged") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h1>
|
||||
|
||||
<.link navigate={~p"/ammo"} class="btn btn-primary">
|
||||
<.link navigate={~p"/containers"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Why not get some ready to shoot?") %>
|
||||
</.link>
|
||||
<% else %>
|
||||
<.link navigate={~p"/ammo"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Stage ammo") %>
|
||||
<.link navigate={~p"/containers"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Stage containers") %>
|
||||
</.link>
|
||||
|
||||
<div class="w-full flex flex-row flex-wrap justify-center items-stretch">
|
||||
<div class="flex flex-row flex-wrap justify-center items-stretch w-full">
|
||||
<.container_card
|
||||
:for={{container_id, container} <- @containers}
|
||||
container={container}
|
||||
current_user={@current_user}
|
||||
>
|
||||
<div class="flex flex-wrap justify-center items-center px-4 py-2 h-full min-w-20">
|
||||
<button
|
||||
type="button"
|
||||
class="mx-2 my-1 text-sm btn btn-primary"
|
||||
phx-click="toggle_staged"
|
||||
phx-value-container_id={container_id}
|
||||
>
|
||||
<%= if container.staged,
|
||||
do: dgettext("actions", "Unstage"),
|
||||
else: dgettext("actions", "Stage") %>
|
||||
</button>
|
||||
</div>
|
||||
</.container_card>
|
||||
</div>
|
||||
|
||||
<hr class="hr" />
|
||||
|
||||
<div class="flex flex-row flex-wrap justify-center items-stretch w-full">
|
||||
<.pack_card
|
||||
:for={%{id: pack_id} = pack <- @packs}
|
||||
:for={%{id: pack_id, container_id: container_id} = pack <- @packs}
|
||||
pack={pack}
|
||||
original_count={Map.fetch!(@original_counts, pack_id)}
|
||||
cpr={Map.get(@cprs, pack_id)}
|
||||
last_used_date={Map.get(@last_used_dates, pack_id)}
|
||||
current_user={@current_user}
|
||||
container={Map.fetch!(@containers, container_id)}
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
phx-click="toggle_staged"
|
||||
phx-value-pack_id={pack.id}
|
||||
data-confirm={"#{dgettext("prompts", "Are you sure you want to unstage this ammo?")}"}
|
||||
>
|
||||
<%= if pack.staged,
|
||||
do: dgettext("actions", "Unstage from range"),
|
||||
else: dgettext("actions", "Stage for range") %>
|
||||
</button>
|
||||
|
||||
<.link patch={~p"/range/add_shot_record/#{pack}"} class="btn btn-primary">
|
||||
<%= dgettext("actions", "Record shots") %>
|
||||
</.link>
|
||||
@ -48,12 +60,12 @@
|
||||
<hr class="hr" />
|
||||
|
||||
<%= if @shot_record_count == 0 do %>
|
||||
<h1 class="title text-xl text-primary-600">
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No shots recorded") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h1>
|
||||
<% else %>
|
||||
<h1 class="title text-2xl text-primary-600">
|
||||
<h1 class="text-2xl title text-primary-600">
|
||||
<%= gettext("Shot log") %>
|
||||
</h1>
|
||||
|
||||
@ -71,7 +83,7 @@
|
||||
<%= dgettext("errors", "Your browser does not support the canvas element.") %>
|
||||
</canvas>
|
||||
|
||||
<div class="w-full flex flex-col sm:flex-row justify-center items-center space-y-4 sm:space-y-0 sm:space-x-4 max-w-2xl">
|
||||
<div class="flex flex-col justify-center items-center space-y-4 w-full max-w-2xl sm:flex-row sm:space-y-0 sm:space-x-4">
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
@ -104,20 +116,35 @@
|
||||
as={:search}
|
||||
phx-change="search"
|
||||
phx-submit="search"
|
||||
class="grow flex items-center"
|
||||
class="flex items-center grow"
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
value: @search,
|
||||
role: "search",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search shot records")
|
||||
placeholder: gettext("Search shot records"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
</.form>
|
||||
|
||||
<.form
|
||||
:let={f}
|
||||
for={%{}}
|
||||
as={:shot_records}
|
||||
phx-change="change_dates"
|
||||
phx-submit="change_dates"
|
||||
class="flex items-center"
|
||||
>
|
||||
<%= label(f, :dates_start, gettext("Dates"),
|
||||
class: "title text-primary-600 text-lg text-center"
|
||||
) %>
|
||||
|
||||
<.date_range name="dates" />
|
||||
</.form>
|
||||
</div>
|
||||
|
||||
<%= if @shot_records |> Enum.empty?() do %>
|
||||
<h1 class="title text-xl text-primary-600">
|
||||
<h1 class="text-xl title text-primary-600">
|
||||
<%= gettext("No shots recorded") %>
|
||||
<%= display_emoji("😔") %>
|
||||
</h1>
|
||||
@ -129,7 +156,7 @@
|
||||
current_user={@current_user}
|
||||
>
|
||||
<:actions :let={shot_record}>
|
||||
<div class="px-4 py-2 space-x-4 flex justify-center items-center">
|
||||
<div class="flex justify-center items-center px-4 py-2 space-x-4">
|
||||
<.link
|
||||
patch={~p"/range/edit/#{shot_record}"}
|
||||
class="text-primary-600 link"
|
||||
|
@ -17,7 +17,7 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
||||
|
||||
@impl true
|
||||
def handle_event("validate", %{"tag" => tag_params}, socket) do
|
||||
{:noreply, socket |> assign_changeset(tag_params)}
|
||||
{:noreply, socket |> assign_changeset(tag_params, :validate)}
|
||||
end
|
||||
|
||||
def handle_event("save", %{"tag" => tag_params}, %{assigns: %{action: action}} = socket) do
|
||||
@ -26,14 +26,9 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
||||
|
||||
defp assign_changeset(
|
||||
%{assigns: %{action: action, current_user: user, tag: tag}} = socket,
|
||||
tag_params
|
||||
tag_params,
|
||||
changeset_action \\ nil
|
||||
) do
|
||||
changeset_action =
|
||||
case action do
|
||||
:new -> :insert
|
||||
:edit -> :update
|
||||
end
|
||||
|
||||
changeset =
|
||||
case action do
|
||||
:new -> tag |> Tag.create_changeset(user, tag_params)
|
||||
@ -41,9 +36,13 @@ defmodule CanneryWeb.TagLive.FormComponent do
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(:changeset, changeset)
|
||||
|
@ -12,14 +12,18 @@
|
||||
phx-submit="save"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= changeset_errors(@changeset) %>
|
||||
</div>
|
||||
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name, class: "input input-primary col-span-2", maxlength: 255) %>
|
||||
<%= text_input(f, :name,
|
||||
class: "input input-primary col-span-2",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3") %>
|
||||
|
||||
<%= label(f, :bg_color, gettext("Background color"), class: "title text-lg text-primary-600") %>
|
||||
|
@ -30,10 +30,10 @@
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
value: @search,
|
||||
role: "search",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search tags")
|
||||
placeholder: gettext("Search tags"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
</.form>
|
||||
</div>
|
||||
|
@ -19,7 +19,7 @@ defmodule CanneryWeb.TypeLive.FormComponent do
|
||||
|
||||
@impl true
|
||||
def handle_event("validate", %{"type" => type_params}, socket) do
|
||||
{:noreply, socket |> assign_changeset(type_params)}
|
||||
{:noreply, socket |> assign_changeset(type_params, :validate)}
|
||||
end
|
||||
|
||||
def handle_event(
|
||||
@ -32,14 +32,9 @@ defmodule CanneryWeb.TypeLive.FormComponent do
|
||||
|
||||
defp assign_changeset(
|
||||
%{assigns: %{action: action, type: type, current_user: user}} = socket,
|
||||
type_params
|
||||
type_params,
|
||||
changeset_action \\ nil
|
||||
) do
|
||||
changeset_action =
|
||||
case action do
|
||||
create when create in [:new, :clone] -> :insert
|
||||
:edit -> :update
|
||||
end
|
||||
|
||||
changeset =
|
||||
case action do
|
||||
create when create in [:new, :clone] ->
|
||||
@ -50,9 +45,13 @@ defmodule CanneryWeb.TypeLive.FormComponent do
|
||||
end
|
||||
|
||||
changeset =
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
if changeset_action do
|
||||
case changeset |> Changeset.apply_action(changeset_action) do
|
||||
{:ok, _data} -> changeset
|
||||
{:error, changeset} -> changeset
|
||||
end
|
||||
else
|
||||
changeset
|
||||
end
|
||||
|
||||
socket |> assign(changeset: changeset)
|
||||
|
@ -12,7 +12,7 @@
|
||||
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
|
||||
>
|
||||
<div
|
||||
:if={@changeset.action && not @changeset.valid?()}
|
||||
:if={@changeset.action && not @changeset.valid?}
|
||||
class="invalid-feedback col-span-3 text-center"
|
||||
>
|
||||
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
|
||||
@ -22,7 +22,11 @@
|
||||
<%= select(
|
||||
f,
|
||||
:class,
|
||||
[{gettext("Rifle"), :rifle}, {gettext("Shotgun"), :shotgun}, {gettext("Pistol"), :pistol}],
|
||||
[
|
||||
{gettext("Rifle"), :rifle},
|
||||
{gettext("Shotgun"), :shotgun},
|
||||
{gettext("Pistol"), :pistol}
|
||||
],
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
) %>
|
||||
@ -31,14 +35,16 @@
|
||||
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :name,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :name, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
|
||||
<%= textarea(f, :desc,
|
||||
id: "type-form-desc",
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
id: "type-form-desc",
|
||||
phx_debounce: 300,
|
||||
phx_update: "ignore"
|
||||
) %>
|
||||
<%= error_tag(f, :desc, "col-span-3 text-center") %>
|
||||
@ -52,6 +58,7 @@
|
||||
<%= text_input(f, :cartridge,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("5.56x46mm NATO")
|
||||
) %>
|
||||
<%= error_tag(f, :cartridge, "col-span-3 text-center") %>
|
||||
@ -71,6 +78,7 @@
|
||||
<%= text_input(f, :caliber,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext(".223")
|
||||
) %>
|
||||
<%= error_tag(f, :caliber, "col-span-3 text-center") %>
|
||||
@ -81,7 +89,8 @@
|
||||
) %>
|
||||
<%= text_input(f, :unfired_length,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :unfired_length, "col-span-3 text-center") %>
|
||||
|
||||
@ -90,7 +99,8 @@
|
||||
) %>
|
||||
<%= text_input(f, :brass_height,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :brass_height, "col-span-3 text-center") %>
|
||||
|
||||
@ -99,7 +109,8 @@
|
||||
) %>
|
||||
<%= text_input(f, :chamber_size,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :chamber_size, "col-span-3 text-center") %>
|
||||
<% else %>
|
||||
@ -136,6 +147,7 @@
|
||||
<%= text_input(f, :bullet_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("FMJ")
|
||||
) %>
|
||||
<%= error_tag(f, :bullet_type, "col-span-3 text-center") %>
|
||||
@ -155,6 +167,7 @@
|
||||
<%= text_input(f, :bullet_core,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Steel")
|
||||
) %>
|
||||
<%= error_tag(f, :bullet_core, "col-span-3 text-center") %>
|
||||
@ -164,6 +177,7 @@
|
||||
<%= text_input(f, :jacket_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Bimetal")
|
||||
) %>
|
||||
<%= error_tag(f, :jacket_type, "col-span-3 text-center") %>
|
||||
@ -177,6 +191,7 @@
|
||||
<%= text_input(f, :case_material,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Brass")
|
||||
) %>
|
||||
<%= error_tag(f, :case_material, "col-span-3 text-center") %>
|
||||
@ -185,7 +200,8 @@
|
||||
<%= label(f, :wadding, gettext("Wadding"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :wadding,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :wadding, "col-span-3 text-center") %>
|
||||
|
||||
@ -193,6 +209,7 @@
|
||||
<%= text_input(f, :shot_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Target, bird, buck, etc")
|
||||
) %>
|
||||
<%= error_tag(f, :shot_type, "col-span-3 text-center") %>
|
||||
@ -202,14 +219,16 @@
|
||||
) %>
|
||||
<%= text_input(f, :shot_material,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_material, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :shot_size, gettext("Shot size"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :shot_size,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_size, "col-span-3 text-center") %>
|
||||
|
||||
@ -226,7 +245,8 @@
|
||||
) %>
|
||||
<%= text_input(f, :shot_charge_weight,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :shot_charge_weight, "col-span-3 text-center") %>
|
||||
<% else %>
|
||||
@ -245,7 +265,8 @@
|
||||
<%= label(f, :powder_type, gettext("Powder type"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :powder_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :powder_type, "col-span-3 text-center") %>
|
||||
|
||||
@ -267,6 +288,7 @@
|
||||
<%= text_input(f, :pressure,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("+P")
|
||||
) %>
|
||||
<%= error_tag(f, :pressure, "col-span-3 text-center") %>
|
||||
@ -277,7 +299,8 @@
|
||||
) %>
|
||||
<%= text_input(f, :dram_equivalent,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :dram_equivalent, "col-span-3 text-center") %>
|
||||
<% else %>
|
||||
@ -306,6 +329,7 @@
|
||||
<%= text_input(f, :primer_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Boxer")
|
||||
) %>
|
||||
<%= error_tag(f, :primer_type, "col-span-3 text-center") %>
|
||||
@ -314,6 +338,7 @@
|
||||
<%= text_input(f, :firing_type,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255,
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Centerfire")
|
||||
) %>
|
||||
<%= error_tag(f, :firing_type, "col-span-3 text-center") %>
|
||||
@ -345,14 +370,16 @@
|
||||
<%= label(f, :manufacturer, gettext("Manufacturer"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :manufacturer,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :manufacturer, "col-span-3 text-center") %>
|
||||
|
||||
<%= label(f, :upc, gettext("UPC"), class: "title text-lg text-primary-600") %>
|
||||
<%= text_input(f, :upc,
|
||||
class: "text-center col-span-2 input input-primary",
|
||||
maxlength: 255
|
||||
maxlength: 255,
|
||||
phx_debounce: 300
|
||||
) %>
|
||||
<%= error_tag(f, :upc, "col-span-3 text-center") %>
|
||||
|
||||
|
@ -54,10 +54,10 @@
|
||||
>
|
||||
<%= text_input(f, :search_term,
|
||||
class: "grow input input-primary",
|
||||
value: @search,
|
||||
role: "search",
|
||||
phx_debounce: 300,
|
||||
placeholder: gettext("Search catalog")
|
||||
placeholder: gettext("Search catalog"),
|
||||
role: "search",
|
||||
value: @search
|
||||
) %>
|
||||
</.form>
|
||||
|
||||
|
@ -120,7 +120,7 @@ defmodule CanneryWeb.Router do
|
||||
#
|
||||
# Note that preview only shows emails that were sent by the same
|
||||
# node running the Phoenix server.
|
||||
if Mix.env() == :dev do
|
||||
if Application.compile_env(:cannery, :env) == :dev do
|
||||
scope "/dev" do
|
||||
pipe_through :browser
|
||||
|
||||
|
4
mix.exs
4
mix.exs
@ -4,8 +4,8 @@ defmodule Cannery.MixProject do
|
||||
def project do
|
||||
[
|
||||
app: :cannery,
|
||||
version: "0.9.8",
|
||||
elixir: "1.16.1",
|
||||
version: "0.9.13",
|
||||
elixir: "1.18.1",
|
||||
elixirc_paths: elixirc_paths(Mix.env()),
|
||||
start_permanent: Mix.env() == :prod,
|
||||
aliases: aliases(),
|
||||
|
80
mix.lock
80
mix.lock
@ -1,54 +1,54 @@
|
||||
%{
|
||||
"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"},
|
||||
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.2.0", "feab711974beba4cb348147170346fe097eea2e840db4e012a145e180ed4ab75", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "563e92a6c77d667b19c5f4ba17ab6d440a085696bdf4c68b9b0f5b30bc5422b8"},
|
||||
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
||||
"castore": {:hex, :castore, "1.0.6", "ffc42f110ebfdafab0ea159cd43d31365fa0af0ce4a02ecebf1707ae619ee727", [:mix], [], "hexpm", "374c6e7ca752296be3d6780a6d5b922854ffcc74123da90f2f328996b962d33a"},
|
||||
"comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
|
||||
"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"},
|
||||
"castore": {:hex, :castore, "1.0.11", "4bbd584741601eb658007339ea730b082cc61f3554cf2e8f39bf693a11b49073", [:mix], [], "hexpm", "e03990b4db988df56262852f20de0f659871c35154691427a5047f4967a16a62"},
|
||||
"comeonin": {:hex, :comeonin, "5.5.0", "364d00df52545c44a139bad919d7eacb55abf39e86565878e17cebb787977368", [:mix], [], "hexpm", "6287fc3ba0aad34883cbe3f7949fc1d1e738e5ccdce77165bc99490aa69f47fb"},
|
||||
"cowboy": {:hex, :cowboy, "2.12.0", "f276d521a1ff88b2b9b4c54d0e753da6c66dd7be6c9fca3d9418b561828a3731", [:make, :rebar3], [{:cowlib, "2.13.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "8a7abe6d183372ceb21caa2709bec928ab2b72e18a3911aa1771639bef82651e"},
|
||||
"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.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
|
||||
"credo": {:hex, :credo, "1.7.5", "643213503b1c766ec0496d828c90c424471ea54da77c8a168c725686377b9545", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "f799e9b5cd1891577d8c773d245668aa74a2fcd15eb277f51a0131690ebfb3fd"},
|
||||
"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.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
|
||||
"ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"},
|
||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.15", "0fc29dbae0e444a29bd6abeee4cf3c4c037e692a272478a234a1cc765077dbb1", [: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 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "b6127f3a5c6fc3d84895e4768cc7c199f22b48b67d6c99b13fbf4a374e73f039"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.11.1", "e9abf28ae27ef3916b43545f9578b4750956ccea444853606472089e7d169470", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.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", "ce14063ab3514424276e7e360108ad6c2308f6d88164a076aac8a387e1fea634"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.8.2", "cd4a5a75891362e9207adaac7e66223fd256ec2518ae013af7f10c9c85b50b5c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "9d9607d640c372a7291e5a56ce655aa2351897929be20bd211648fdb79e725dc"},
|
||||
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
|
||||
"credo": {:hex, :credo, "1.7.11", "d3e805f7ddf6c9c854fd36f089649d7cf6ba74c42bc3795d587814e3c9847102", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "56826b4306843253a66e47ae45e98e7d284ee1f95d53d1612bb483f88a8cf219"},
|
||||
"db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"},
|
||||
"decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.42", "f23d856f41919f17cd06a493923a722d87a2d684f143a1e663c04a2b93100682", [:mix], [], "hexpm", "6915b6ca369b5f7346636a2f41c6a6d78b5af419d61a611079189233358b8b8b"},
|
||||
"ecto": {:hex, :ecto, "3.12.5", "4a312960ce612e17337e7cefcf9be45b95a3be6b36b6f94dfb3d8c361d631866", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6eb18e80bef8bb57e17f5a7f068a1719fbda384d40fc37acb8eb8aeca493b6ea"},
|
||||
"ecto_psql_extras": {:hex, :ecto_psql_extras, "0.8.3", "0c1df205bd051eaf599b3671e75356b121aa71eac09b63ecf921cb1a080c072e", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0 and < 0.20.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "d0e35ea160359e759a2993a00c3a5389a9ca7ece6df5d0753fa927f988c7351a"},
|
||||
"ecto_sql": {:hex, :ecto_sql, "3.12.1", "c0d0d60e85d9ff4631f12bafa454bc392ce8b9ec83531a412c12a0d415a3a4d0", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "aff5b958a899762c5f09028c847569f7dfb9cc9d63bdb8133bff8a5546de6bf5"},
|
||||
"elixir_make": {:hex, :elixir_make, "0.9.0", "6484b3cd8c0cee58f09f05ecaf1a140a8c97670671a6a0e7ab4dc326c3109726", [:mix], [], "hexpm", "db23d4fd8b757462ad02f8aa73431a426fe6671c80b200d9710caf3d1dd0ffdb"},
|
||||
"eqrcode": {:hex, :eqrcode, "0.1.10", "6294fece9d68ad64eef1c3c92cf111cfd6469f4fbf230a2d4cc905a682178f3f", [:mix], [], "hexpm", "da30e373c36a0fd37ab6f58664b16029919896d6c45a68a95cc4d713e81076f1"},
|
||||
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.31.2", "8b06d0a5ac69e1a54df35519c951f1f44a7b7ca9a5bb7a260cd8a174d6322ece", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "317346c14febaba9ca40fd97b5b5919f7751fb85d399cc8e7e8872049f37e0af"},
|
||||
"expo": {:hex, :expo, "0.5.2", "beba786aab8e3c5431813d7a44b828e7b922bfa431d6bfbada0904535342efe2", [:mix], [], "hexpm", "8c9bfa06ca017c9cb4020fabe980bc7fdb1aaec059fd004c2ab3bff03b1c599c"},
|
||||
"file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"},
|
||||
"floki": {:hex, :floki, "0.36.1", "712b7f2ba19a4d5a47dfe3e74d81876c95bbcbee44fe551f0af3d2a388abb3da", [:mix], [], "hexpm", "21ba57abb8204bcc70c439b423fc0dd9f0286de67dc82773a14b0200ada0995f"},
|
||||
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.36.1", "4197d034f93e0b89ec79fac56e226107824adcce8d2dd0a26f5ed3a95efc36b1", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "d7d26a7cf965dacadcd48f9fa7b5953d7d0cfa3b44fa7a65514427da44eafd89"},
|
||||
"expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"},
|
||||
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
|
||||
"floki": {:hex, :floki, "0.37.0", "b83e0280bbc6372f2a403b2848013650b16640cd2470aea6701f0632223d719e", [:mix], [], "hexpm", "516a0c15a69f78c47dc8e0b9b3724b29608aa6619379f91b1ffa47109b5d0dd3"},
|
||||
"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.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"},
|
||||
"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.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [: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", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.5", "e0ff5a7c708dda34311f7522a8758e23bfcd7d8d8068dc312b5eb41c6fd76eba", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "94d2e986428585a21516d7d7149781480013c56e30c6a233534bedf38867a59a"},
|
||||
"mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
|
||||
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
|
||||
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
|
||||
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"},
|
||||
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
|
||||
"oban": {:hex, :oban, "2.17.6", "bac1dacd836edbf6a200ddd880db10faa2d39bb2e550ec6d19b3eb9c43852c2a", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "623f3554212e9a776e015156c47f076d66c7b74115ac47a7d3acba0294e65acb"},
|
||||
"phoenix": {:hex, :phoenix, "1.7.11", "1d88fc6b05ab0c735b250932c4e6e33bfa1c186f76dcf623d8dd52f07d6379c7", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "b1ec57f2e40316b306708fe59b92a16b9f6f4bf50ccfa41aa8c7feb79e0ec02a"},
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.5.1", "6fdbc334ea53620e71655664df6f33f670747b3a7a6c4041cdda3e2c32df6257", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ebe43aa580db129e54408e719fb9659b7f9e0d52b965c5be26cdca416ecead28"},
|
||||
"phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"},
|
||||
"oban": {:hex, :oban, "2.18.3", "1608c04f8856c108555c379f2f56bc0759149d35fa9d3b825cb8a6769f8ae926", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "36ca6ca84ef6518f9c2c759ea88efd438a3c81d667ba23b02b062a0aa785475e"},
|
||||
"phoenix": {:hex, :phoenix, "1.7.18", "5310c21443514be44ed93c422e15870aef254cf1b3619e4f91538e7529d2b2e4", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1797fcc82108442a66f2c77a643a62980f342bfeb63d6c9a515ab8294870004e"},
|
||||
"phoenix_ecto": {:hex, :phoenix_ecto, "4.6.3", "f686701b0499a07f2e3b122d84d52ff8a31f5def386e03706c916f6feddf69ef", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "909502956916a657a197f94cc1206d9a65247538de8a5e186f7537c895d95764"},
|
||||
"phoenix_html": {:hex, :phoenix_html, "4.2.0", "83a4d351b66f472ebcce242e4ae48af1b781866f00ef0eb34c15030d4e2069ac", [:mix], [], "hexpm", "9713b3f238d07043583a94296cc4bbdceacd3b3a6c74667f4df13971e7866ec8"},
|
||||
"phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.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.5.2", "354460993a480656b71c3887f5565f612b3bdbdd8688c83f9e6f512307067dd4", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "2bb3722f327e14a7aa47b1acf27ed633c8cd27b167e18b8237954b9b4804af39"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.14", "70fa101aa0539e81bed4238777498f6215e9dda3461bdaa067cad6908110c364", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "82f6d006c5264f979ed5eb75593d808bbe39020f20df2e78426f4f2d570e2402"},
|
||||
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.6", "7b1f0327f54c9eb69845fd09a77accf922f488c549a7e7b8618775eb603a62c7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "1681ab813ec26ca6915beb3414aa138f298e17721dc6a2bde9e6eb8a62360ff6"},
|
||||
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"},
|
||||
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.17", "f396bbdaf4ba227b82251eb75ac0afa6b3da5e509bc0d030206374237dfc9450", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a61d741ffb78c85fdbca0de084da6a48f8ceb5261a79165b5a0b59e5f65ce98b"},
|
||||
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
|
||||
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
|
||||
"plug": {:hex, :plug, "1.15.3", "712976f504418f6dff0a3e554c40d705a9bcf89a7ccef92fc6a5ef8f16a30a97", [: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", "cc4365a3c010a56af402e0809208873d113e9c38c401cabd88027ef4f5c01fd2"},
|
||||
"plug_cowboy": {:hex, :plug_cowboy, "2.7.0", "3ae9369c60641084363b08fe90267cbdd316df57e3557ea522114b30b63256ea", [:mix], [{:cowboy, "~> 2.7.0 or ~> 2.8.0 or ~> 2.9.0 or ~> 2.10.0", [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", "d85444fb8aa1f2fc62eabe83bbe387d81510d773886774ebdcb429b3da3c1a4a"},
|
||||
"plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
|
||||
"postgrex": {:hex, :postgrex, "0.17.5", "0483d054938a8dc069b21bdd636bf56c487404c241ce6c319c1f43588246b281", [: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", "50b8b11afbb2c4095a3ba675b4f055c416d0f3d7de6633a595fc131a828a67eb"},
|
||||
"plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
|
||||
"plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"},
|
||||
"plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"},
|
||||
"postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"},
|
||||
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
|
||||
"swoosh": {:hex, :swoosh, "1.16.3", "4ab7dc429e84afaf8ffe1c7c06ce1acbc7ddde758d2cb9152dd2ac32289d5498", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.1.0", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.4 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ff70980087650a72951ebd109a286d83c270e2b6610aba447140562adff8cf0a"},
|
||||
"swoosh": {:hex, :swoosh, "1.17.6", "27ff070f96246e35b7105ab1c52b2b689f523a3cb83ed9faadb2f33bd653ccba", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9798f3e72165f40c950f6762c06dab68afcdcf616138fc4a07965c09c250e1e2"},
|
||||
"table_rex": {:hex, :table_rex, "4.0.0", "3c613a68ebdc6d4d1e731bc973c233500974ec3993c99fcdabb210407b90959b", [:mix], [], "hexpm", "c35c4d5612ca49ebb0344ea10387da4d2afe278387d4019e4d8111e815df8f55"},
|
||||
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
|
||||
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
|
||||
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
|
||||
"telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
|
||||
"telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
|
||||
"websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
|
||||
"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"},
|
||||
"websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"},
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ msgstr ""
|
||||
msgid "Delete User"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:52
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:46
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -68,7 +68,7 @@ msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:94
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:49
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
|
||||
@ -95,7 +95,7 @@ msgstr ""
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:89
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:42
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:43
|
||||
@ -115,13 +115,13 @@ msgstr ""
|
||||
msgid "Reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:56
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:44
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:37
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:359
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:59
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:45
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:386
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
@ -131,29 +131,24 @@ msgstr ""
|
||||
msgid "Send instructions to reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not add one?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not get some ready to shoot?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:42
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:116
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:84
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:54
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr ""
|
||||
@ -178,7 +173,7 @@ msgstr ""
|
||||
msgid "add a container first"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:83
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
@ -199,8 +194,8 @@ msgid "View in Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:77
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:138
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:86
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Move ammo"
|
||||
msgstr ""
|
||||
@ -210,14 +205,12 @@ msgstr ""
|
||||
msgid "Set Unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:82
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage for range"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:81
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:37
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:58
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage from range"
|
||||
msgstr ""
|
||||
@ -227,8 +220,8 @@ msgstr ""
|
||||
msgid "Export Data as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:87
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:145
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:101
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:159
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Clone %{container_name}"
|
||||
msgstr ""
|
||||
@ -238,8 +231,8 @@ msgstr ""
|
||||
msgid "Copy invite link for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:104
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:162
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:118
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Delete %{container_name}"
|
||||
@ -255,8 +248,8 @@ msgstr ""
|
||||
msgid "Delete invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:77
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:135
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:91
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{container_name}"
|
||||
@ -272,54 +265,56 @@ msgstr ""
|
||||
msgid "Edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:120
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:69
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:124
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:79
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tag %{container_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:119
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:68
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:172
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:161
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Clone pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:187
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:71
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Delete pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:160
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:139
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:148
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:147
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:201
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "View pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:159
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:154
|
||||
#: lib/cannery_web/live/pack_live/show.ex:149
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:181
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Delete shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:144
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/pack_live/show.ex:134
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:164
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
@ -355,3 +350,8 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "add a type first"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage containers"
|
||||
msgstr ""
|
||||
|
@ -67,7 +67,7 @@ msgstr "Einladung erstellen"
|
||||
msgid "Delete User"
|
||||
msgstr "Benutzer löschen"
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:52
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:46
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -81,7 +81,7 @@ msgstr "Laden Sie jemanden ein!"
|
||||
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:94
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:49
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
|
||||
@ -108,7 +108,7 @@ msgstr "Neuer Tag"
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:89
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:42
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:43
|
||||
@ -128,13 +128,13 @@ msgstr "Bestätigungsmail erneut senden"
|
||||
msgid "Reset password"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:56
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:44
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:37
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:359
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:59
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:45
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:386
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
@ -144,29 +144,24 @@ msgstr "Speichern"
|
||||
msgid "Send instructions to reset password"
|
||||
msgstr "Anleitung zum Passwort zurücksetzen zusenden"
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not add one?"
|
||||
msgstr "Warum fügen Sie keine hinzu?"
|
||||
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage ammo"
|
||||
msgstr "Munition markieren"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not get some ready to shoot?"
|
||||
msgstr "Warum nicht einige für den Schießstand auswählen?"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:42
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:116
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:84
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:54
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr "Schüsse dokumentieren"
|
||||
@ -191,7 +186,7 @@ msgstr "In die Zwischenablage kopieren"
|
||||
msgid "add a container first"
|
||||
msgstr "Zuerst einen Behälter hinzufügen"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:83
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Create"
|
||||
msgstr "Erstellen"
|
||||
@ -212,8 +207,8 @@ msgid "View in Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:77
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:138
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:86
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Move ammo"
|
||||
msgstr ""
|
||||
@ -223,14 +218,12 @@ msgstr ""
|
||||
msgid "Set Unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:82
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage for range"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:81
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:37
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:58
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage from range"
|
||||
msgstr ""
|
||||
@ -240,8 +233,8 @@ msgstr ""
|
||||
msgid "Export Data as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:87
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:145
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:101
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:159
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Clone %{container_name}"
|
||||
msgstr ""
|
||||
@ -251,8 +244,8 @@ msgstr ""
|
||||
msgid "Copy invite link for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:104
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:162
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:118
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Delete %{container_name}"
|
||||
@ -268,8 +261,8 @@ msgstr ""
|
||||
msgid "Delete invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:77
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:135
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:91
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{container_name}"
|
||||
@ -285,54 +278,56 @@ msgstr ""
|
||||
msgid "Edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:120
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:69
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:35
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Stage"
|
||||
msgstr "Munition markieren"
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:124
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:79
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tag %{container_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:119
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:68
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:172
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:161
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Clone pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:187
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:71
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Delete pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:160
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Edit pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:139
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:148
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:147
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:201
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "View pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:159
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:154
|
||||
#: lib/cannery_web/live/pack_live/show.ex:149
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:181
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Delete shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:144
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/pack_live/show.ex:134
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:164
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Edit shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
@ -368,3 +363,8 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "add a type first"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage containers"
|
||||
msgstr ""
|
||||
|
@ -38,55 +38,55 @@ msgstr "Admins:"
|
||||
msgid "Ammo"
|
||||
msgstr "Munition"
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Background color"
|
||||
msgstr "Hintergrundfarbe"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:86
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:333
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:358
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Blank"
|
||||
msgstr "Knallpatrone"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:180
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:195
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Brass"
|
||||
msgstr "Messing"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:61
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet core"
|
||||
msgstr "Projektilkern"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:59
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:125
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:136
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet type"
|
||||
msgstr "Patronenart"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:67
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:74
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Caliber"
|
||||
msgstr "Kaliber"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:49
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:57
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Cartridge"
|
||||
msgstr "Patrone"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:66
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:174
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:188
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Case material"
|
||||
msgstr "Gehäusematerial"
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:64
|
||||
#: lib/cannery_web/components/pack_table_component.ex:76
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:65
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Container"
|
||||
msgstr "Behälter"
|
||||
@ -100,13 +100,13 @@ msgid "Containers"
|
||||
msgstr "Behälter"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:87
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:337
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:362
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Corrosive"
|
||||
msgstr "Korrosiv"
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:104
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Count"
|
||||
msgstr "Anzahl"
|
||||
@ -117,9 +117,9 @@ msgstr "Anzahl"
|
||||
msgid "Count:"
|
||||
msgstr "Anzahl:"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:29
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/components/container_table_component.ex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:30
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
@ -145,19 +145,19 @@ msgstr "Einladung bearbeiten"
|
||||
msgid "Edit Tag"
|
||||
msgstr "Tag bearbeiten"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:139
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "FMJ"
|
||||
msgstr "VM"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:58
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:115
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:126
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Grains"
|
||||
msgstr "Körner"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:85
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:329
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:354
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Incendiary"
|
||||
msgstr "Brandmunition"
|
||||
@ -189,9 +189,9 @@ msgstr "Einladungen"
|
||||
msgid "Keep me logged in for 60 days"
|
||||
msgstr "Für 60 Tage eingeloggt bleiben"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:47
|
||||
#: lib/cannery_web/components/container_table_component.ex:51
|
||||
#: lib/cannery_web/components/move_pack_component.ex:66
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:49
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Location"
|
||||
msgstr "Standort"
|
||||
@ -202,34 +202,34 @@ msgstr "Standort"
|
||||
msgid "Location:"
|
||||
msgstr "Standort:"
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Magazine, Clip, Ammo Box, etc"
|
||||
msgstr "Magazin, Ladestreifen, Munitionskiste usw."
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:88
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:342
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:345
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:367
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:370
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Manufacturer"
|
||||
msgstr "Hersteller"
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:33
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:36
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Metal ammo can with the anime girl sticker"
|
||||
msgstr "Metallene Munitionskiste mit Anime-Girl-Sticker"
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:24
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "My cool ammo can"
|
||||
msgstr "Meine coole Munitionskiste"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:45
|
||||
#: lib/cannery_web/components/container_table_component.ex:49
|
||||
#: lib/cannery_web/components/type_table_component.ex:152
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
@ -280,8 +280,8 @@ msgstr "Keine Tags"
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:46
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
|
||||
#: lib/cannery_web/live/pack_live/show.ex:90
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
|
||||
#: lib/cannery_web/live/pack_live/show.ex:80
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Notes"
|
||||
@ -293,19 +293,19 @@ msgstr "Bemerkungen"
|
||||
msgid "Notes:"
|
||||
msgstr "Bemerkungen:"
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "On the bookshelf"
|
||||
msgstr "Auf dem Bücherregal"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:79
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:266
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:287
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Pressure"
|
||||
msgstr "Druck"
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:92
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Price paid"
|
||||
msgstr "Kaufpreis"
|
||||
@ -316,7 +316,7 @@ msgid "Price paid:"
|
||||
msgstr "Kaufpreis:"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:82
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:305
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:328
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Primer type"
|
||||
msgstr "Zündertyp"
|
||||
@ -338,7 +338,7 @@ msgstr ""
|
||||
"Hosten Sie Ihre eigene Instanz oder verwenden Sie eine Instanz, der Sie "
|
||||
"vertrauen."
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:10
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:9
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Settings"
|
||||
@ -349,17 +349,17 @@ msgstr "Einstellungen"
|
||||
msgid "Simple:"
|
||||
msgstr "Einfach:"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:158
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:171
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Steel"
|
||||
msgstr "Stahl"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:100
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:94
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stored in"
|
||||
msgstr "Gelagert in"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:66
|
||||
#: lib/cannery_web/components/container_table_component.ex:73
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/cannery_web/live/tag_live/index.ex:43
|
||||
#: lib/cannery_web/live/tag_live/index.ex:53
|
||||
@ -373,7 +373,7 @@ msgstr "Tags"
|
||||
msgid "Tags can be added to your containers to help you organize"
|
||||
msgstr "Tags können zur besseren Ordnung einem Behälter hinzugefügt werden"
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Text color"
|
||||
msgstr "Textfarbe"
|
||||
@ -384,16 +384,16 @@ msgid "The self-hosted firearm tracker website"
|
||||
msgstr "Die selbst-gehostete Website zur Verwaltung von Schusswaffen"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:84
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:325
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:350
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tracer"
|
||||
msgstr "Leuchtspur"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:48
|
||||
#: lib/cannery_web/components/container_table_component.ex:52
|
||||
#: lib/cannery_web/components/move_pack_component.ex:65
|
||||
#: lib/cannery_web/components/pack_table_component.ex:108
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Type"
|
||||
msgstr "Art"
|
||||
@ -409,7 +409,7 @@ msgstr "Art:"
|
||||
msgid "Users"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Uses left"
|
||||
msgstr "Verbleibende Nutzung"
|
||||
@ -419,15 +419,16 @@ msgstr "Verbleibende Nutzung"
|
||||
msgid "Your data stays with you, period"
|
||||
msgstr "Ihre Daten bleiben bei Ihnen, Punkt"
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:60
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No tags for this container"
|
||||
msgstr "Keine Tags für diesen Behälter"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:77
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:48
|
||||
#: lib/cannery_web/components/pack_table_component.ex:80
|
||||
#: lib/cannery_web/live/range_live/index.ex:55
|
||||
#: lib/cannery_web/live/range_live/index.ex:65
|
||||
#: lib/cannery_web/live/range_live/index.ex:76
|
||||
#: lib/cannery_web/live/range_live/index.ex:86
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Range"
|
||||
msgstr "Schießplatz"
|
||||
@ -437,10 +438,10 @@ msgstr "Schießplatz"
|
||||
msgid "Range day"
|
||||
msgstr "Range Day"
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:48
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:47
|
||||
#: lib/cannery_web/live/pack_live/show.ex:91
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/show.ex:81
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:41
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
@ -450,26 +451,21 @@ msgstr "Datum"
|
||||
msgid "Shots fired"
|
||||
msgstr "Schüsse abgegeben"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:8
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No ammo staged"
|
||||
msgstr "Keine Munition selektiert"
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:3
|
||||
#: lib/cannery_web/live/pack_live/index.ex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr "Schüsse dokumentieren"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:52
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:121
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:64
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:148
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No shots recorded"
|
||||
msgstr "Keine Schüsse dokumentiert"
|
||||
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:45
|
||||
#: lib/cannery_web/live/pack_live/show.ex:89
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:66
|
||||
#: lib/cannery_web/live/pack_live/show.ex:79
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:78
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds shot"
|
||||
msgstr "Patronen abgefeuert"
|
||||
@ -484,7 +480,7 @@ msgstr "Munition verschieben"
|
||||
msgid "No other containers"
|
||||
msgstr "Kein weiterer Behälter"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:57
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:69
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot log"
|
||||
msgstr "Schießkladde"
|
||||
@ -492,7 +488,7 @@ msgstr "Schießkladde"
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:42
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:47
|
||||
#: lib/cannery_web/components/pack_table_component.ex:181
|
||||
#: lib/cannery_web/components/pack_table_component.ex:264
|
||||
#: lib/cannery_web/components/pack_table_component.ex:263
|
||||
#: lib/cannery_web/components/type_table_component.ex:273
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:37
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:42
|
||||
@ -501,36 +497,36 @@ msgstr "Schießkladde"
|
||||
msgid "$%{amount}"
|
||||
msgstr "$%{amount}"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:167
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:181
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bimetal"
|
||||
msgstr "Bimetall"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:65
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:176
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Jacket type"
|
||||
msgstr "Patronenhülse"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:81
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:288
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:311
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Muzzle velocity"
|
||||
msgstr "Mündungsgeschwindigkeit"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:75
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:253
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:274
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder grains per charge"
|
||||
msgstr "Pulverkörner pro Ladung"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:73
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:245
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:265
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder type"
|
||||
msgstr "Pulverart"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:352
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:378
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "UPC"
|
||||
msgstr "UPC"
|
||||
@ -554,7 +550,7 @@ msgid "New password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:83
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:313
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:337
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Firing type"
|
||||
msgstr "Patronenhülsenform"
|
||||
@ -565,13 +561,13 @@ msgid "Reconnecting..."
|
||||
msgstr "Neu verbinden..."
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.ex:28
|
||||
#: lib/cannery_web/live/container_live/show.ex:118
|
||||
#: lib/cannery_web/live/container_live/show.ex:130
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{name}"
|
||||
msgstr "%{name} bearbeiten"
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.ex:63
|
||||
#: lib/cannery_web/live/container_live/show.ex:119
|
||||
#: lib/cannery_web/live/container_live/show.ex:131
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{name} tags"
|
||||
msgstr "Editiere %{name} Tags"
|
||||
@ -584,7 +580,7 @@ msgid "Rounds:"
|
||||
msgstr "Patronen:"
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:178
|
||||
#: lib/cannery_web/components/pack_table_component.ex:260
|
||||
#: lib/cannery_web/components/pack_table_component.ex:259
|
||||
#: lib/cannery_web/components/type_table_component.ex:272
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:154
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -616,12 +612,12 @@ msgstr "Ursprüngliche Anzahl:"
|
||||
msgid "Percentage left:"
|
||||
msgstr "Prozent verbleibend:"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:113
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:107
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds used"
|
||||
msgstr "Patronen verbraucht"
|
||||
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:8
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:6
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Confirm your account"
|
||||
msgstr "Bestätigen Sie ihr Nutzerkonto"
|
||||
@ -636,7 +632,7 @@ msgstr "Passwort vergessen?"
|
||||
msgid "Log in"
|
||||
msgstr "Einloggen"
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:32
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Register"
|
||||
msgstr "Registrieren"
|
||||
@ -647,13 +643,13 @@ msgid "Reset your password"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:40
|
||||
#: lib/cannery_web/live/range_live/index.ex:31
|
||||
#: lib/cannery_web/live/range_live/index.ex:47
|
||||
#: lib/cannery_web/live/range_live/index.ex:52
|
||||
#: lib/cannery_web/live/range_live/index.ex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record Shots"
|
||||
msgstr "Schüsse dokumentieren"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Copies"
|
||||
msgstr "Kopien"
|
||||
@ -663,22 +659,6 @@ msgstr "Kopien"
|
||||
msgid "Added on:"
|
||||
msgstr "Hinzugefügt am:"
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "English"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "French"
|
||||
msgstr "Französisch"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "German"
|
||||
msgstr "Deutsch"
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Language"
|
||||
@ -722,7 +702,7 @@ msgstr "Munitionstyp bearbeiten"
|
||||
msgid "Move Ammo"
|
||||
msgstr "Munition verschieben"
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:117
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:125
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "No ammo in this container"
|
||||
msgstr "Keine Munitionsgruppe in diesem Behälter"
|
||||
@ -732,7 +712,7 @@ msgstr "Keine Munitionsgruppe in diesem Behälter"
|
||||
msgid "Show Ammo"
|
||||
msgstr "Zeige Munitionsarten"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:105
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:99
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "This ammo is not in a container"
|
||||
msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
|
||||
@ -755,7 +735,7 @@ msgstr ""
|
||||
msgid "isn't he cute >:3"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
|
||||
msgstr ""
|
||||
@ -772,31 +752,31 @@ msgstr "Behälter"
|
||||
msgid "Show used"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:219
|
||||
#: lib/cannery_web/components/pack_table_component.ex:218
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:19
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{percentage}%"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.ex:153
|
||||
#: lib/cannery_web/live/range_live/index.ex:215
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Rounds shot: %{count}"
|
||||
msgstr "Patronen abgefeuert"
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:64
|
||||
#: lib/cannery_web/components/container_table_component.ex:68
|
||||
#: lib/cannery_web/components/type_table_component.ex:122
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Packs"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:65
|
||||
#: lib/cannery_web/components/container_table_component.ex:69
|
||||
#: lib/cannery_web/components/type_table_component.ex:143
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Rounds"
|
||||
msgstr "Patronen:"
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:40
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:109
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:117
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:170
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "View as table"
|
||||
@ -842,7 +822,7 @@ msgstr ""
|
||||
msgid "Used rounds:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:68
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:80
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Rounds shot chart"
|
||||
msgstr "Patronen abgefeuert"
|
||||
@ -949,7 +929,7 @@ msgid "Average CPR"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:17
|
||||
#: lib/cannery_web/components/pack_table_component.ex:268
|
||||
#: lib/cannery_web/components/pack_table_component.ex:267
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Empty"
|
||||
msgstr ""
|
||||
@ -995,7 +975,7 @@ msgid "Never used"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:71
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:49
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Purchased on"
|
||||
msgstr ""
|
||||
@ -1011,36 +991,31 @@ msgstr ""
|
||||
msgid "Edit ammo"
|
||||
msgstr "Munitionstyp bearbeiten"
|
||||
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:60
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:58
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search catalog"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:81
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:79
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Search ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:34
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:32
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/index.html.heex:36
|
||||
#: lib/cannery_web/live/tag_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Search tags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:114
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:124
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search shot records"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/layouts.ex:15
|
||||
#: lib/cannery_web/components/layouts/root.html.heex:9
|
||||
#: lib/cannery_web/components/layouts/root.html.heex:10
|
||||
@ -1140,43 +1115,43 @@ msgstr ""
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:270
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:292
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "+P"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:74
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid ".223"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:55
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:62
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "5.56x46mm NATO"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:309
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:333
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Boxer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:317
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:342
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Centerfire"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:43
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:45
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Really great weather"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:67
|
||||
#: lib/cannery_web/components/container_table_component.ex:74
|
||||
#: lib/cannery_web/components/move_pack_component.ex:67
|
||||
#: lib/cannery_web/components/pack_table_component.ex:62
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:48
|
||||
#: lib/cannery_web/components/type_table_component.ex:99
|
||||
#: lib/cannery_web/live/pack_live/show.ex:92
|
||||
#: lib/cannery_web/live/pack_live/show.ex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
@ -1202,21 +1177,21 @@ msgstr ""
|
||||
msgid "Close modal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:105
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:58
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:91
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:103
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:322
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:347
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Attributes"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:56
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:88
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:97
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Brass height"
|
||||
msgstr "Messing"
|
||||
@ -1227,7 +1202,7 @@ msgid "Brass height:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:57
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:97
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:107
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Chamber size"
|
||||
msgstr ""
|
||||
@ -1237,13 +1212,13 @@ msgstr ""
|
||||
msgid "Chamber size:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:47
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Dimensions"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:80
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:275
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:297
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Dram equivalent"
|
||||
msgstr ""
|
||||
@ -1254,7 +1229,7 @@ msgid "Dram equivalent:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:66
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Gauge"
|
||||
msgstr ""
|
||||
@ -1265,7 +1240,7 @@ msgid "Gauge:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:71
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:216
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:235
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Load grains"
|
||||
msgstr ""
|
||||
@ -1285,35 +1260,37 @@ msgstr "Keine Munition"
|
||||
msgid "None specified"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:100
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:108
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:61
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:94
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:106
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:40
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:56
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Pistol"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:242
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:262
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Powder"
|
||||
msgstr "Pulverart"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:302
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:325
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Primer"
|
||||
msgstr "Zündertyp"
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:112
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:123
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Projectile"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:98
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:106
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:59
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:92
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:104
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:26
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:38
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:54
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -1321,7 +1298,7 @@ msgid "Rifle"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:72
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:224
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:243
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot charge weight"
|
||||
msgstr ""
|
||||
@ -1332,7 +1309,7 @@ msgid "Shot charge weight:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:69
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:200
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:217
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot material"
|
||||
msgstr ""
|
||||
@ -1343,7 +1320,7 @@ msgid "Shot material:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:70
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:209
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:227
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Shot size"
|
||||
msgstr "Schüsse abgegeben"
|
||||
@ -1354,7 +1331,7 @@ msgid "Shot size:"
|
||||
msgstr "Schüsse abgegeben"
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:68
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:192
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:208
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot type"
|
||||
msgstr ""
|
||||
@ -1364,10 +1341,11 @@ msgstr ""
|
||||
msgid "Shot type:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:99
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:107
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:60
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:93
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:105
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:27
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:39
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:52
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -1375,12 +1353,12 @@ msgid "Shotgun"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:61
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:150
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:162
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Slug core"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:196
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:213
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Target, bird, buck, etc"
|
||||
msgstr ""
|
||||
@ -1391,13 +1369,13 @@ msgid "Unfired length:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:55
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:79
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:87
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unfired shell length"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:67
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:185
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:200
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Wadding"
|
||||
msgstr ""
|
||||
@ -1408,9 +1386,10 @@ msgid "Wadding:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:149
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:91
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:99
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:50
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:83
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:95
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:29
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:46
|
||||
@ -1430,7 +1409,7 @@ msgid "Used up!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:41
|
||||
#: lib/cannery_web/live/range_live/index.ex:39
|
||||
#: lib/cannery_web/live/range_live/index.ex:60
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Edit Shot Record"
|
||||
msgstr "Schießkladde editieren"
|
||||
@ -1454,7 +1433,7 @@ msgid "No Types"
|
||||
msgstr "Art"
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:84
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:42
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Lot number"
|
||||
msgstr ""
|
||||
@ -1463,3 +1442,18 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Lot number:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Any"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:138
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Dates"
|
||||
msgstr "Datum"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:8
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "No containers staged"
|
||||
msgstr "Kein Behälter"
|
||||
|
@ -66,7 +66,7 @@ msgstr "Sie können ihr Passwort unter folgender URL zurücksetzen:"
|
||||
## Run "mix gettext.extract" to bring this file up to
|
||||
## date. Leave "msgstr"s empty as changing them here has no
|
||||
## effect: edit them in PO (.po) files instead.
|
||||
#: lib/cannery/accounts/email.ex:31
|
||||
#: lib/cannery/email.ex:31
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Confirm your Cannery account"
|
||||
msgstr "Bestätigen Sie ihr %{name} Nutzerkonto"
|
||||
@ -86,7 +86,7 @@ msgstr ""
|
||||
"Falls Sie die Änderung von %{name} nicht angefragt haben, ignorieren Sie "
|
||||
"diese Nachricht bitte."
|
||||
|
||||
#: lib/cannery/accounts/email.ex:38
|
||||
#: lib/cannery/email.ex:38
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Reset your Cannery password"
|
||||
msgstr "Passwort für %{name} zurücksetzen"
|
||||
@ -105,7 +105,7 @@ msgstr ""
|
||||
"Diese Nachricht wurde von %{name} gesandt, einem selbst-gehosteten "
|
||||
"Schusswaffenmanager."
|
||||
|
||||
#: lib/cannery/accounts/email.ex:45
|
||||
#: lib/cannery/email.ex:45
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Update your Cannery email"
|
||||
msgstr "Aktualisieren Sie %{name} Mailadresse"
|
||||
|
@ -23,7 +23,7 @@ msgstr ""
|
||||
## Run "mix gettext.extract" to bring this file up to
|
||||
## date. Leave "msgstr"s empty as changing them here has no
|
||||
## effect: edit them in PO (.po) files instead.
|
||||
#: lib/cannery/containers.ex:224
|
||||
#: lib/cannery/containers.ex:234
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Container must be empty before deleting"
|
||||
msgstr "Behälter muss vor dem Löschen leer sein"
|
||||
@ -39,7 +39,7 @@ msgstr "Konnte %{name} nicht löschen: %{error}"
|
||||
msgid "Could not find that container"
|
||||
msgstr "Konnte Behälter nicht finden"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:84
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:83
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Email change link is invalid or it has expired."
|
||||
msgstr "Mailadressenänderungs-Link ist ungültig oder abgelaufen."
|
||||
@ -80,21 +80,21 @@ msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten."
|
||||
msgid "Reset password link is invalid or it has expired."
|
||||
msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen."
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:22
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:51
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:21
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:50
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Sorry, public registration is disabled"
|
||||
msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert"
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:12
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:41
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:70
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:11
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:40
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:69
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Sorry, this invite was not found or expired"
|
||||
msgstr ""
|
||||
"Entschuldigung, aber diese Einladung wurde nicht gefunden oder ist abgelaufen"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:99
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:98
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unable to delete user"
|
||||
msgstr "Dieser Nutzer konnte nicht gelöscht werden"
|
||||
@ -105,7 +105,7 @@ msgstr "Dieser Nutzer konnte nicht gelöscht werden"
|
||||
msgid "Unauthorized"
|
||||
msgstr "Unbefugt"
|
||||
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:53
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:51
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "User confirmation link is invalid or it has expired."
|
||||
msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
|
||||
@ -115,22 +115,22 @@ msgstr "Nutzerkonto Bestätigungslink ist ungültig oder abgelaufen."
|
||||
msgid "You are not authorized to view this page."
|
||||
msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen."
|
||||
|
||||
#: lib/cannery/accounts/user.ex:145
|
||||
#: lib/cannery/accounts/user.ex:140
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "did not change"
|
||||
msgstr "hat sich nicht geändert"
|
||||
|
||||
#: lib/cannery/accounts/user.ex:166
|
||||
#: lib/cannery/accounts/user.ex:161
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "does not match password"
|
||||
msgstr "Passwort stimmt nicht überein"
|
||||
|
||||
#: lib/cannery/accounts/user.ex:203
|
||||
#: lib/cannery/accounts/user.ex:198
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "is not valid"
|
||||
msgstr "ist nicht gültig"
|
||||
|
||||
#: lib/cannery/accounts/user.ex:100
|
||||
#: lib/cannery/accounts/user.ex:95
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "must have the @ sign and no spaces"
|
||||
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"
|
||||
@ -158,58 +158,48 @@ msgstr ""
|
||||
msgid "Tag could not be removed"
|
||||
msgstr "Tag konnte nicht gelöscht werden"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:159
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:175
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Could not parse number of copies"
|
||||
msgstr "Konnte die Anzahl der Kopien nicht verstehen"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:149
|
||||
#: lib/cannery/ammo.ex:1026
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Invalid number of copies, must be between 1 and %{max}. Was %{multiplier}"
|
||||
msgstr ""
|
||||
"Ungültige Nummer an Kopien. Muss zwischen 1 and %{max} liegen. War "
|
||||
"%{multiplier}"
|
||||
|
||||
#: lib/cannery/ammo.ex:974
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Invalid multiplier"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:71
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:83
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Your browser does not support the canvas element."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/activity_log/shot_record.ex:74
|
||||
#: lib/cannery/activity_log/shot_record.ex:71
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Please select a valid user and ammo pack"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/activity_log/shot_record.ex:88
|
||||
#: lib/cannery/activity_log/shot_record.ex:85
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Ammo left can be at most %{count} rounds"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/activity_log/shot_record.ex:84
|
||||
#: lib/cannery/activity_log/shot_record.ex:81
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Ammo left must be at least 0"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/activity_log/shot_record.ex:119
|
||||
#: lib/cannery/activity_log/shot_record.ex:116
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Count can be at most %{count} shots"
|
||||
msgstr "Anzahl muss weniger als %{count} betragen"
|
||||
|
||||
#: lib/cannery/activity_log/shot_record.ex:80
|
||||
#: lib/cannery/activity_log/shot_record.ex:77
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "can't be blank"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/ammo/pack.ex:100
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Please select a type and container"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/error_html.ex:11
|
||||
#: lib/cannery_web/controllers/error_json.ex:9
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
@ -225,3 +215,13 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "You must log in to access this page."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/ammo/pack.ex:101
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Please select a valid container"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/ammo/pack.ex:99
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Please select a valid type"
|
||||
msgstr ""
|
||||
|
@ -23,10 +23,10 @@ msgstr ""
|
||||
## Run "mix gettext.extract" to bring this file up to
|
||||
## date. Leave "msgstr"s empty as changing them here has no
|
||||
## effect: edit them in PO (.po) files instead.
|
||||
#: lib/cannery_web/live/container_live/form_component.ex:89
|
||||
#: lib/cannery_web/live/invite_live/form_component.ex:80
|
||||
#: lib/cannery_web/live/tag_live/form_component.ex:78
|
||||
#: lib/cannery_web/live/type_live/form_component.ex:88
|
||||
#: lib/cannery_web/live/container_live/form_component.ex:88
|
||||
#: lib/cannery_web/live/invite_live/form_component.ex:79
|
||||
#: lib/cannery_web/live/tag_live/form_component.ex:77
|
||||
#: lib/cannery_web/live/type_live/form_component.ex:87
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{name} created successfully"
|
||||
msgstr "%{name} erfolgreich erstellt"
|
||||
@ -44,36 +44,36 @@ msgstr "%{name} erfolgreich gelöscht"
|
||||
msgid "%{name} has been deleted"
|
||||
msgstr "%{name} wurde gelöscht"
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.ex:70
|
||||
#: lib/cannery_web/live/invite_live/form_component.ex:62
|
||||
#: lib/cannery_web/live/tag_live/form_component.ex:60
|
||||
#: lib/cannery_web/live/type_live/form_component.ex:69
|
||||
#: lib/cannery_web/live/container_live/form_component.ex:69
|
||||
#: lib/cannery_web/live/invite_live/form_component.ex:61
|
||||
#: lib/cannery_web/live/tag_live/form_component.ex:59
|
||||
#: lib/cannery_web/live/type_live/form_component.ex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{name} updated successfully"
|
||||
msgstr "%{name} erfolgreich aktualisiert"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:29
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "A link to confirm your email change has been sent to the new address."
|
||||
msgstr "Eine Mail zum Bestätigen ihre Mailadresse wurde Ihnen zugesandt."
|
||||
|
||||
#: lib/cannery_web/live/invite_live/index.html.heex:110
|
||||
#: lib/cannery_web/live/invite_live/index.html.heex:138
|
||||
#: lib/cannery_web/live/invite_live/index.html.heex:145
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Are you sure you want to delete %{email}? This action is permanent!"
|
||||
msgstr ""
|
||||
"Sind Sie sicher, dass sie %{email} löschen möchten? Dies kann nicht "
|
||||
"zurückgenommen werden!"
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:99
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:157
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:113
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:171
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:45
|
||||
#: lib/cannery_web/live/tag_live/index.html.heex:63
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Are you sure you want to delete %{name}?"
|
||||
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:185
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:174
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:69
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Are you sure you want to delete this ammo?"
|
||||
@ -89,12 +89,12 @@ msgstr "Sind Sie sicher, dass sie Ihren Account löschen möchten?"
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr "Wirklich ausloggen?"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:77
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:76
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Email changed successfully."
|
||||
msgstr "Mailadresse erfolgreich geändert."
|
||||
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:23
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:21
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "If your email is in our system and it has not been confirmed yet, you will receive an email with instructions shortly."
|
||||
msgstr ""
|
||||
@ -118,28 +118,28 @@ msgstr "Erfolgreich ausgeloggt."
|
||||
msgid "Password reset successfully."
|
||||
msgstr "Passwort erfolgreich zurückgesetzt."
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:49
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Password updated successfully."
|
||||
msgstr "Passwort erfolgreich geändert."
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:65
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:64
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Please check your email to verify your account"
|
||||
msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:58
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:57
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:37
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:91
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:46
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:39
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:360
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:59
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:61
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:111
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:47
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:43
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:387
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Saving..."
|
||||
msgstr "Speichere..."
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:95
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:94
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Your account has been deleted"
|
||||
msgstr "Ihr Nutzerkonto wurde gelöscht"
|
||||
@ -161,29 +161,24 @@ msgstr "%{name} erfolgreich hinzugefügt"
|
||||
msgid "%{tag_name} has been removed from %{container_name}"
|
||||
msgstr "%{tag_name} wurde von %{container_name} entfernt"
|
||||
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:55
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Adding..."
|
||||
msgstr "Füge hinzu..."
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.ex:60
|
||||
#: lib/cannery_web/components/add_shot_record_component.ex:62
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shots recorded successfully"
|
||||
msgstr "Schüsse erfolgreich dokumentiert"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Are you sure you want to unstage this ammo?"
|
||||
msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:157
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:151
|
||||
#: lib/cannery_web/live/pack_live/show.ex:147
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:178
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Are you sure you want to delete this shot record?"
|
||||
msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:79
|
||||
#: lib/cannery_web/live/range_live/index.ex:78
|
||||
#: lib/cannery_web/live/pack_live/show.ex:69
|
||||
#: lib/cannery_web/live/range_live/index.ex:99
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot records deleted succesfully"
|
||||
msgstr "Schießkladde erfolgreich gelöscht"
|
||||
@ -193,7 +188,7 @@ msgstr "Schießkladde erfolgreich gelöscht"
|
||||
msgid "Shot records updated successfully"
|
||||
msgstr "Schießkladde erfolgreich aktualisiert"
|
||||
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:37
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{email} confirmed successfully."
|
||||
msgstr "%{email} erfolgreich bestätigt."
|
||||
@ -219,7 +214,7 @@ msgstr "%{name} erfolgreich entfernt"
|
||||
msgid "You'll need to"
|
||||
msgstr "Sie müssen"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:104
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Creating..."
|
||||
msgstr "Erstellen..."
|
||||
@ -229,7 +224,7 @@ msgstr "Erstellen..."
|
||||
msgid "Are you sure you want to change your language?"
|
||||
msgstr "Möchten Sie die Sprache wechseln?"
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:65
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:64
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Language updated successfully."
|
||||
msgstr "Spracheinstellung gespeichert."
|
||||
@ -240,17 +235,12 @@ msgstr "Spracheinstellung gespeichert."
|
||||
msgid "Ammo deleted succesfully"
|
||||
msgstr "Munitionsgruppe erfolgreich gelöscht"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.ex:91
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Ammo unstaged succesfully"
|
||||
msgstr "Munition erfolgreich demarkiert"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:125
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:141
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Ammo updated successfully"
|
||||
msgstr "Munitionsgruppe erfolgreich aktualisiert"
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:184
|
||||
#: lib/cannery_web/live/pack_live/form_component.ex:162
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Ammo added successfully"
|
||||
msgid_plural "Ammo added successfully"
|
||||
@ -288,7 +278,7 @@ msgstr "%{name} erfolgreich aktiviert"
|
||||
msgid "%{invite_name} updated succesfully"
|
||||
msgstr "%{name} erfolgreich aktualisiert"
|
||||
|
||||
#: lib/cannery_web/live/invite_live/index.ex:125
|
||||
#: lib/cannery_web/live/invite_live/index.ex:139
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "%{user_email} deleted succesfully"
|
||||
msgstr "%{name} erfolgreich gelöscht"
|
||||
@ -302,3 +292,13 @@ msgstr "Sind Sie sicher, dass sie die Einladung für %{name} löschen möchten?"
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Are you sure you want to make %{invite_name} unlimited?"
|
||||
msgstr "Sind Sie sicher, dass sie %{name} auf unbegrenzt setzen möchten?"
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.ex:114
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Container unstaged succesfully"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/invite_live/index.ex:128
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Email resent to %{user_email} succesfully"
|
||||
msgstr ""
|
||||
|
@ -34,55 +34,55 @@ msgstr ""
|
||||
msgid "Ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Background color"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:86
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:333
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:358
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Blank"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:180
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:195
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Brass"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:61
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet core"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:59
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:125
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:136
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:67
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:74
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Caliber"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:49
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:57
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Cartridge"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:66
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:174
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:188
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Case material"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:64
|
||||
#: lib/cannery_web/components/pack_table_component.ex:76
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:65
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Container"
|
||||
msgstr ""
|
||||
@ -96,13 +96,13 @@ msgid "Containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:87
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:337
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:362
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Corrosive"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:104
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
@ -113,9 +113,9 @@ msgstr ""
|
||||
msgid "Count:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:29
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/components/container_table_component.ex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:30
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
@ -141,19 +141,19 @@ msgstr ""
|
||||
msgid "Edit Tag"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:139
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "FMJ"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:58
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:115
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:126
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Grains"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:85
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:329
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:354
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Incendiary"
|
||||
msgstr ""
|
||||
@ -185,9 +185,9 @@ msgstr ""
|
||||
msgid "Keep me logged in for 60 days"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:47
|
||||
#: lib/cannery_web/components/container_table_component.ex:51
|
||||
#: lib/cannery_web/components/move_pack_component.ex:66
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:49
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
@ -198,34 +198,34 @@ msgstr ""
|
||||
msgid "Location:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Magazine, Clip, Ammo Box, etc"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:88
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:342
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:345
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:367
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:370
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Manufacturer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:33
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:36
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Metal ammo can with the anime girl sticker"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:24
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "My cool ammo can"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:45
|
||||
#: lib/cannery_web/components/container_table_component.ex:49
|
||||
#: lib/cannery_web/components/type_table_component.ex:152
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
@ -276,8 +276,8 @@ msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:46
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
|
||||
#: lib/cannery_web/live/pack_live/show.ex:90
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
|
||||
#: lib/cannery_web/live/pack_live/show.ex:80
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Notes"
|
||||
@ -289,19 +289,19 @@ msgstr ""
|
||||
msgid "Notes:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "On the bookshelf"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:79
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:266
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:287
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:92
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Price paid"
|
||||
msgstr ""
|
||||
@ -312,7 +312,7 @@ msgid "Price paid:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:82
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:305
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:328
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Primer type"
|
||||
msgstr ""
|
||||
@ -332,7 +332,7 @@ msgstr ""
|
||||
msgid "Self-host your own instance, or use an instance from someone you trust."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:10
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:9
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Settings"
|
||||
@ -343,17 +343,17 @@ msgstr ""
|
||||
msgid "Simple:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:158
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:171
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Steel"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:100
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:94
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stored in"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:66
|
||||
#: lib/cannery_web/components/container_table_component.ex:73
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/cannery_web/live/tag_live/index.ex:43
|
||||
#: lib/cannery_web/live/tag_live/index.ex:53
|
||||
@ -367,7 +367,7 @@ msgstr ""
|
||||
msgid "Tags can be added to your containers to help you organize"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Text color"
|
||||
msgstr ""
|
||||
@ -378,16 +378,16 @@ msgid "The self-hosted firearm tracker website"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:84
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:325
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:350
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tracer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:48
|
||||
#: lib/cannery_web/components/container_table_component.ex:52
|
||||
#: lib/cannery_web/components/move_pack_component.ex:65
|
||||
#: lib/cannery_web/components/pack_table_component.ex:108
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
@ -403,7 +403,7 @@ msgstr ""
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Uses left"
|
||||
msgstr ""
|
||||
@ -413,15 +413,16 @@ msgstr ""
|
||||
msgid "Your data stays with you, period"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:60
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No tags for this container"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:77
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:48
|
||||
#: lib/cannery_web/components/pack_table_component.ex:80
|
||||
#: lib/cannery_web/live/range_live/index.ex:55
|
||||
#: lib/cannery_web/live/range_live/index.ex:65
|
||||
#: lib/cannery_web/live/range_live/index.ex:76
|
||||
#: lib/cannery_web/live/range_live/index.ex:86
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Range"
|
||||
msgstr ""
|
||||
@ -431,10 +432,10 @@ msgstr ""
|
||||
msgid "Range day"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:48
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:47
|
||||
#: lib/cannery_web/live/pack_live/show.ex:91
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/show.ex:81
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:41
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
@ -444,26 +445,21 @@ msgstr ""
|
||||
msgid "Shots fired"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:8
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No ammo staged"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:3
|
||||
#: lib/cannery_web/live/pack_live/index.ex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:52
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:121
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:64
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:148
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No shots recorded"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:45
|
||||
#: lib/cannery_web/live/pack_live/show.ex:89
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:66
|
||||
#: lib/cannery_web/live/pack_live/show.ex:79
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:78
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds shot"
|
||||
msgstr ""
|
||||
@ -478,7 +474,7 @@ msgstr ""
|
||||
msgid "No other containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:57
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:69
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot log"
|
||||
msgstr ""
|
||||
@ -486,7 +482,7 @@ msgstr ""
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:42
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:47
|
||||
#: lib/cannery_web/components/pack_table_component.ex:181
|
||||
#: lib/cannery_web/components/pack_table_component.ex:264
|
||||
#: lib/cannery_web/components/pack_table_component.ex:263
|
||||
#: lib/cannery_web/components/type_table_component.ex:273
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:37
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:42
|
||||
@ -495,36 +491,36 @@ msgstr ""
|
||||
msgid "$%{amount}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:167
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:181
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bimetal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:65
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:176
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Jacket type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:81
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:288
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:311
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Muzzle velocity"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:75
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:253
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:274
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder grains per charge"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:73
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:245
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:265
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:352
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:378
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "UPC"
|
||||
msgstr ""
|
||||
@ -548,7 +544,7 @@ msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:83
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:313
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:337
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Firing type"
|
||||
msgstr ""
|
||||
@ -559,13 +555,13 @@ msgid "Reconnecting..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.ex:28
|
||||
#: lib/cannery_web/live/container_live/show.ex:118
|
||||
#: lib/cannery_web/live/container_live/show.ex:130
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.ex:63
|
||||
#: lib/cannery_web/live/container_live/show.ex:119
|
||||
#: lib/cannery_web/live/container_live/show.ex:131
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{name} tags"
|
||||
msgstr ""
|
||||
@ -578,7 +574,7 @@ msgid "Rounds:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:178
|
||||
#: lib/cannery_web/components/pack_table_component.ex:260
|
||||
#: lib/cannery_web/components/pack_table_component.ex:259
|
||||
#: lib/cannery_web/components/type_table_component.ex:272
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:154
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -610,12 +606,12 @@ msgstr ""
|
||||
msgid "Percentage left:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:113
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:107
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds used"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:8
|
||||
#: lib/cannery_web/controllers/user_confirmation_controller.ex:6
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Confirm your account"
|
||||
msgstr ""
|
||||
@ -630,7 +626,7 @@ msgstr ""
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:32
|
||||
#: lib/cannery_web/controllers/user_registration_controller.ex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
@ -641,13 +637,13 @@ msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:40
|
||||
#: lib/cannery_web/live/range_live/index.ex:31
|
||||
#: lib/cannery_web/live/range_live/index.ex:47
|
||||
#: lib/cannery_web/live/range_live/index.ex:52
|
||||
#: lib/cannery_web/live/range_live/index.ex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record Shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:96
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Copies"
|
||||
msgstr ""
|
||||
@ -657,22 +653,6 @@ msgstr ""
|
||||
msgid "Added on:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:32
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:127
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:129
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:128
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:28
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Language"
|
||||
@ -716,7 +696,7 @@ msgstr ""
|
||||
msgid "Move Ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:117
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:125
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No ammo in this container"
|
||||
msgstr ""
|
||||
@ -726,7 +706,7 @@ msgstr ""
|
||||
msgid "Show Ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:105
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:99
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "This ammo is not in a container"
|
||||
msgstr ""
|
||||
@ -749,7 +729,7 @@ msgstr ""
|
||||
msgid "isn't he cute >:3"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:32
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Leave \"Uses left\" blank to make invite unlimited"
|
||||
msgstr ""
|
||||
@ -766,31 +746,31 @@ msgstr ""
|
||||
msgid "Show used"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:219
|
||||
#: lib/cannery_web/components/pack_table_component.ex:218
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:19
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "%{percentage}%"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.ex:153
|
||||
#: lib/cannery_web/live/range_live/index.ex:215
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds shot: %{count}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:64
|
||||
#: lib/cannery_web/components/container_table_component.ex:68
|
||||
#: lib/cannery_web/components/type_table_component.ex:122
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Packs"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:65
|
||||
#: lib/cannery_web/components/container_table_component.ex:69
|
||||
#: lib/cannery_web/components/type_table_component.ex:143
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:40
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:109
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:117
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:170
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "View as table"
|
||||
@ -836,7 +816,7 @@ msgstr ""
|
||||
msgid "Used rounds:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:68
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds shot chart"
|
||||
msgstr ""
|
||||
@ -943,7 +923,7 @@ msgid "Average CPR"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:17
|
||||
#: lib/cannery_web/components/pack_table_component.ex:268
|
||||
#: lib/cannery_web/components/pack_table_component.ex:267
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Empty"
|
||||
msgstr ""
|
||||
@ -989,7 +969,7 @@ msgid "Never used"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:71
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:49
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:67
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Purchased on"
|
||||
msgstr ""
|
||||
@ -1005,36 +985,31 @@ msgstr ""
|
||||
msgid "Edit ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:60
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:58
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search catalog"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:81
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:79
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:34
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:32
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/index.html.heex:36
|
||||
#: lib/cannery_web/live/tag_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search tags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:114
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:124
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Search shot records"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:130
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/layouts.ex:15
|
||||
#: lib/cannery_web/components/layouts/root.html.heex:9
|
||||
#: lib/cannery_web/components/layouts/root.html.heex:10
|
||||
@ -1123,43 +1098,43 @@ msgstr ""
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:270
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:292
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "+P"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:74
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid ".223"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:55
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:62
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "5.56x46mm NATO"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:309
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:333
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Boxer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:317
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:342
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Centerfire"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:43
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:45
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Really great weather"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:67
|
||||
#: lib/cannery_web/components/container_table_component.ex:74
|
||||
#: lib/cannery_web/components/move_pack_component.ex:67
|
||||
#: lib/cannery_web/components/pack_table_component.ex:62
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:48
|
||||
#: lib/cannery_web/components/type_table_component.ex:99
|
||||
#: lib/cannery_web/live/pack_live/show.ex:92
|
||||
#: lib/cannery_web/live/pack_live/show.ex:82
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
@ -1185,21 +1160,21 @@ msgstr ""
|
||||
msgid "Close modal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:97
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:105
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:58
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:91
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:103
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:322
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:347
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Attributes"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:56
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:88
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:97
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Brass height"
|
||||
msgstr ""
|
||||
@ -1210,7 +1185,7 @@ msgid "Brass height:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:57
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:97
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:107
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Chamber size"
|
||||
msgstr ""
|
||||
@ -1220,13 +1195,13 @@ msgstr ""
|
||||
msgid "Chamber size:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:47
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Dimensions"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:80
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:275
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:297
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Dram equivalent"
|
||||
msgstr ""
|
||||
@ -1237,7 +1212,7 @@ msgid "Dram equivalent:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:66
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Gauge"
|
||||
msgstr ""
|
||||
@ -1248,7 +1223,7 @@ msgid "Gauge:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:71
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:216
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:235
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Load grains"
|
||||
msgstr ""
|
||||
@ -1268,35 +1243,37 @@ msgstr ""
|
||||
msgid "None specified"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:100
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:108
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:30
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:61
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:94
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:106
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:40
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:56
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Pistol"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:242
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:262
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:302
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:325
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Primer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:112
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:123
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Projectile"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:98
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:106
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:59
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:92
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:104
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:26
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:38
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:54
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -1304,7 +1281,7 @@ msgid "Rifle"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:72
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:224
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:243
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot charge weight"
|
||||
msgstr ""
|
||||
@ -1315,7 +1292,7 @@ msgid "Shot charge weight:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:69
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:200
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:217
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot material"
|
||||
msgstr ""
|
||||
@ -1326,7 +1303,7 @@ msgid "Shot material:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:70
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:209
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:227
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot size"
|
||||
msgstr ""
|
||||
@ -1337,7 +1314,7 @@ msgid "Shot size:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:68
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:192
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:208
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot type"
|
||||
msgstr ""
|
||||
@ -1347,10 +1324,11 @@ msgstr ""
|
||||
msgid "Shot type:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:99
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:107
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:29
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:60
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:93
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:105
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:27
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:39
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:52
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -1358,12 +1336,12 @@ msgid "Shotgun"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:61
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:150
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:162
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Slug core"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:196
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:213
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Target, bird, buck, etc"
|
||||
msgstr ""
|
||||
@ -1374,13 +1352,13 @@ msgid "Unfired length:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:55
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:79
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:87
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unfired shell length"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:67
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:185
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:200
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Wadding"
|
||||
msgstr ""
|
||||
@ -1391,9 +1369,10 @@ msgid "Wadding:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:149
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:91
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:99
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:50
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:83
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:95
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/type_live/index.html.heex:29
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:46
|
||||
@ -1413,7 +1392,7 @@ msgid "Used up!"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:41
|
||||
#: lib/cannery_web/live/range_live/index.ex:39
|
||||
#: lib/cannery_web/live/range_live/index.ex:60
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit Shot Record"
|
||||
msgstr ""
|
||||
@ -1437,7 +1416,7 @@ msgid "No Types"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:84
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:42
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Lot number"
|
||||
msgstr ""
|
||||
@ -1446,3 +1425,18 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Lot number:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:27
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Any"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:8
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No containers staged"
|
||||
msgstr ""
|
||||
|
@ -49,7 +49,7 @@ msgstr ""
|
||||
msgid "You can reset your password by visiting the URL below:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/accounts/email.ex:31
|
||||
#: lib/cannery/email.ex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Confirm your Cannery account"
|
||||
msgstr ""
|
||||
@ -65,7 +65,7 @@ msgstr ""
|
||||
msgid "If you didn't request this change from Cannery, please ignore this."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/accounts/email.ex:38
|
||||
#: lib/cannery/email.ex:38
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Reset your Cannery password"
|
||||
msgstr ""
|
||||
@ -80,7 +80,7 @@ msgstr ""
|
||||
msgid "This email was sent from Cannery, the self-hosted firearm tracker website."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery/accounts/email.ex:45
|
||||
#: lib/cannery/email.ex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Update your Cannery email"
|
||||
msgstr ""
|
||||
|
@ -54,7 +54,7 @@ msgstr ""
|
||||
msgid "Delete User"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:47
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:52
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:46
|
||||
#, elixir-autogen, elixir-format
|
||||
@ -68,7 +68,7 @@ msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:94
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:44
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:49
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:41
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:28
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:3
|
||||
@ -95,7 +95,7 @@ msgstr ""
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:89
|
||||
#: lib/cannery_web/controllers/user_confirmation_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:3
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:37
|
||||
#: lib/cannery_web/controllers/user_registration_html/new.html.heex:42
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/edit.html.heex:38
|
||||
#: lib/cannery_web/controllers/user_reset_password_html/new.html.heex:25
|
||||
#: lib/cannery_web/controllers/user_session_html/new.html.heex:43
|
||||
@ -115,13 +115,13 @@ msgstr ""
|
||||
msgid "Reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:56
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:44
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:37
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:359
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:57
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:59
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:110
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:45
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:386
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
@ -131,29 +131,24 @@ msgstr ""
|
||||
msgid "Send instructions to reset password"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:73
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not add one?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:51
|
||||
#: lib/cannery_web/live/container_live/edit_tags_component.html.heex:53
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:13
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Why not get some ready to shoot?"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:90
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:42
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:116
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:84
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:54
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr ""
|
||||
@ -178,7 +173,7 @@ msgstr ""
|
||||
msgid "add a container first"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:83
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:103
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
@ -199,8 +194,8 @@ msgid "View in Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:77
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:138
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:86
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:127
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:80
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Move ammo"
|
||||
msgstr ""
|
||||
@ -210,14 +205,12 @@ msgstr ""
|
||||
msgid "Set Unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:82
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:38
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage for range"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:81
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:37
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:58
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage from range"
|
||||
msgstr ""
|
||||
@ -227,8 +220,8 @@ msgstr ""
|
||||
msgid "Export Data as JSON"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:87
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:145
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:101
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:159
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Clone %{container_name}"
|
||||
msgstr ""
|
||||
@ -238,8 +231,8 @@ msgstr ""
|
||||
msgid "Copy invite link for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:104
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:162
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:118
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:48
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Delete %{container_name}"
|
||||
@ -255,8 +248,8 @@ msgstr ""
|
||||
msgid "Delete invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:77
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:135
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:91
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Edit %{container_name}"
|
||||
@ -272,54 +265,56 @@ msgstr ""
|
||||
msgid "Edit invite for %{invite_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:120
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:69
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:35
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:65
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:124
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:79
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:138
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tag %{container_name}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:119
|
||||
#: lib/cannery_web/live/container_live/index.html.heex:68
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:34
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Unstage"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:172
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:161
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Clone pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:187
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:176
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:71
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Delete pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:160
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:149
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:59
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Edit pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:139
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:148
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:147
|
||||
#: lib/cannery_web/live/pack_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/type_live/show.html.heex:201
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "View pack of %{pack_count} bullets"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:159
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:154
|
||||
#: lib/cannery_web/live/pack_live/show.ex:149
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:181
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Delete shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.ex:144
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:137
|
||||
#: lib/cannery_web/live/pack_live/show.ex:134
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:164
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "Edit shot record of %{shot_record_count} shots"
|
||||
msgstr ""
|
||||
@ -355,3 +350,8 @@ msgstr ""
|
||||
#, elixir-autogen, elixir-format, fuzzy
|
||||
msgid "add a type first"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:17
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stage containers"
|
||||
msgstr ""
|
||||
|
@ -34,55 +34,55 @@ msgstr ""
|
||||
msgid "Ammo"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:25
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:29
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Background color"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:86
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:333
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:358
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Blank"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:180
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:195
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Brass"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:61
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet core"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:59
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:125
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:136
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bullet type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:67
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:74
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Caliber"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:49
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:51
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:57
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Cartridge"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:66
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:174
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:188
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Case material"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/move_pack_component.ex:64
|
||||
#: lib/cannery_web/components/pack_table_component.ex:76
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:65
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:84
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Container"
|
||||
msgstr ""
|
||||
@ -96,13 +96,13 @@ msgid "Containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:87
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:337
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:362
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Corrosive"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:104
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
@ -113,9 +113,9 @@ msgstr ""
|
||||
msgid "Count:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:29
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/components/container_table_component.ex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:30
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:43
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
@ -141,19 +141,19 @@ msgstr ""
|
||||
msgid "Edit Tag"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:139
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:151
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "FMJ"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:58
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:115
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:126
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Grains"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:85
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:329
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:354
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Incendiary"
|
||||
msgstr ""
|
||||
@ -185,9 +185,9 @@ msgstr ""
|
||||
msgid "Keep me logged in for 60 days"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:47
|
||||
#: lib/cannery_web/components/container_table_component.ex:51
|
||||
#: lib/cannery_web/components/move_pack_component.ex:66
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:46
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:49
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
@ -198,34 +198,34 @@ msgstr ""
|
||||
msgid "Location:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:41
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:45
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Magazine, Clip, Ammo Box, etc"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:88
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:342
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:345
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:367
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:370
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Manufacturer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:33
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:36
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Metal ammo can with the anime girl sticker"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:24
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:26
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "My cool ammo can"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:45
|
||||
#: lib/cannery_web/components/container_table_component.ex:49
|
||||
#: lib/cannery_web/components/type_table_component.ex:152
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:21
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
@ -276,8 +276,8 @@ msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:38
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:46
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:57
|
||||
#: lib/cannery_web/live/pack_live/show.ex:90
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:75
|
||||
#: lib/cannery_web/live/pack_live/show.ex:80
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:30
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Notes"
|
||||
@ -289,19 +289,19 @@ msgstr ""
|
||||
msgid "Notes:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:50
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:55
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "On the bookshelf"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:79
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:266
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:287
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/pack_table_component.ex:92
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:35
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:52
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Price paid"
|
||||
msgstr ""
|
||||
@ -312,7 +312,7 @@ msgid "Price paid:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:82
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:305
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:328
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Primer type"
|
||||
msgstr ""
|
||||
@ -332,7 +332,7 @@ msgstr ""
|
||||
msgid "Self-host your own instance, or use an instance from someone you trust."
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:10
|
||||
#: lib/cannery_web/controllers/user_settings_controller.ex:9
|
||||
#: lib/cannery_web/controllers/user_settings_html/edit.html.heex:3
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Settings"
|
||||
@ -343,17 +343,17 @@ msgstr ""
|
||||
msgid "Simple:"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:158
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:171
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Steel"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:100
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:94
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Stored in"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:66
|
||||
#: lib/cannery_web/components/container_table_component.ex:73
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:28
|
||||
#: lib/cannery_web/live/tag_live/index.ex:43
|
||||
#: lib/cannery_web/live/tag_live/index.ex:53
|
||||
@ -367,7 +367,7 @@ msgstr ""
|
||||
msgid "Tags can be added to your containers to help you organize"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:31
|
||||
#: lib/cannery_web/live/tag_live/form_component.html.heex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Text color"
|
||||
msgstr ""
|
||||
@ -378,16 +378,16 @@ msgid "The self-hosted firearm tracker website"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:84
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:325
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:350
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Tracer"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:48
|
||||
#: lib/cannery_web/components/container_table_component.ex:52
|
||||
#: lib/cannery_web/components/move_pack_component.ex:65
|
||||
#: lib/cannery_web/components/pack_table_component.ex:108
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:38
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:22
|
||||
#: lib/cannery_web/live/container_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/form_component.html.heex:37
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
@ -403,7 +403,7 @@ msgstr ""
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:28
|
||||
#: lib/cannery_web/live/invite_live/form_component.html.heex:31
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Uses left"
|
||||
msgstr ""
|
||||
@ -413,15 +413,16 @@ msgstr ""
|
||||
msgid "Your data stays with you, period"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:60
|
||||
#: lib/cannery_web/live/container_live/show.html.heex:68
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No tags for this container"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/container_table_component.ex:77
|
||||
#: lib/cannery_web/components/core_components/topbar.html.heex:48
|
||||
#: lib/cannery_web/components/pack_table_component.ex:80
|
||||
#: lib/cannery_web/live/range_live/index.ex:55
|
||||
#: lib/cannery_web/live/range_live/index.ex:65
|
||||
#: lib/cannery_web/live/range_live/index.ex:76
|
||||
#: lib/cannery_web/live/range_live/index.ex:86
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Range"
|
||||
msgstr ""
|
||||
@ -431,10 +432,10 @@ msgstr ""
|
||||
msgid "Range day"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:48
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:49
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:47
|
||||
#: lib/cannery_web/live/pack_live/show.ex:91
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:40
|
||||
#: lib/cannery_web/live/pack_live/show.ex:81
|
||||
#: lib/cannery_web/live/range_live/form_component.html.heex:41
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
@ -444,26 +445,21 @@ msgstr ""
|
||||
msgid "Shots fired"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:8
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No ammo staged"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/add_shot_record_component.html.heex:3
|
||||
#: lib/cannery_web/live/pack_live/index.ex:35
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Record shots"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:52
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:121
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:64
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:148
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No shots recorded"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/shot_record_table_component.ex:45
|
||||
#: lib/cannery_web/live/pack_live/show.ex:89
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:66
|
||||
#: lib/cannery_web/live/pack_live/show.ex:79
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:78
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Rounds shot"
|
||||
msgstr ""
|
||||
@ -478,7 +474,7 @@ msgstr ""
|
||||
msgid "No other containers"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:57
|
||||
#: lib/cannery_web/live/range_live/index.html.heex:69
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Shot log"
|
||||
msgstr ""
|
||||
@ -486,7 +482,7 @@ msgstr ""
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:42
|
||||
#: lib/cannery_web/components/core_components/pack_card.html.heex:47
|
||||
#: lib/cannery_web/components/pack_table_component.ex:181
|
||||
#: lib/cannery_web/components/pack_table_component.ex:264
|
||||
#: lib/cannery_web/components/pack_table_component.ex:263
|
||||
#: lib/cannery_web/components/type_table_component.ex:273
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:37
|
||||
#: lib/cannery_web/live/pack_live/show.html.heex:42
|
||||
@ -495,36 +491,36 @@ msgstr ""
|
||||
msgid "$%{amount}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:167
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:181
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Bimetal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:65
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:163
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:176
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Jacket type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:81
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:288
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:311
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Muzzle velocity"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:75
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:253
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:274
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder grains per charge"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/components/type_table_component.ex:73
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:245
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:265
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Powder type"
|
||||
msgstr ""
|
||||
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:352
|
||||
#: lib/cannery_web/live/type_live/form_component.html.heex:378
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "UPC"
|
||||
msgstr ""
|
||||