update deps
Some checks failed
continuous-integration/drone/tag Build is failing
continuous-integration/drone/push Build is failing

This commit is contained in:
shibao 2025-04-05 00:13:01 +00:00
parent 449a92e4b7
commit 37d101a71e
130 changed files with 1748 additions and 12180 deletions

View File

@ -17,7 +17,7 @@ steps:
- .mix
- name: test
image: elixir:1.18.1-otp-27-alpine
image: elixir:1.18.3-otp-27-alpine
environment:
TEST_DATABASE_URL: ecto://postgres:postgres@database/cannery_test
HOST: testing.example.tld

9
.gitignore vendored
View File

@ -28,10 +28,11 @@ npm-debug.log
# The directory NPM downloads your dependencies sources to.
/assets/node_modules/
# Since we are building assets from assets/,
# we ignore priv/static. You may want to comment
# this depending on your deployment strategy.
/priv/static/
# Ignore assets that are produced by build tools.
/priv/static/assets/
# Ignore digested assets cache.
/priv/static/cache_manifest.json
# vs code
.elixir_ls/

View File

@ -1,3 +1,3 @@
elixir 1.18.1-otp-27
erlang 27.2.1
nodejs 23.7.0
elixir 1.18.3-otp-27
erlang 27.3.1
nodejs 23.10.0

View File

@ -1,3 +1,7 @@
# v0.9.14
- Update deps
- Fix wrapping issues with search bars
# v0.9.13
- Add button to resend email verification email
- Move staging to container, rather than ammo

View File

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

View File

@ -1,5 +0,0 @@
{
"presets": [
"@babel/preset-env"
]
}

View File

@ -1,16 +1,26 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@import "tailwindcss" source("../..");
$fa-font-path: "@fortawesome/fontawesome-free/webfonts";
@import "@fortawesome/fontawesome-free/scss/fontawesome";
@import "@fortawesome/fontawesome-free/scss/regular";
@import "@fortawesome/fontawesome-free/scss/solid";
@import "@fortawesome/fontawesome-free/scss/brands";
@theme {
--color-primary-50: oklch(0.985 0.002 247.839);
--color-primary-100: oklch(0.967 0.003 264.542);
--color-primary-200: oklch(0.928 0.006 264.531);
--color-primary-300: oklch(0.872 0.01 258.338);
--color-primary-400: oklch(0.707 0.022 261.325);
--color-primary-500: oklch(0.551 0.027 264.364);
--color-primary-600: oklch(0.446 0.03 256.802);
--color-primary-700: oklch(0.373 0.034 259.733);
--color-primary-800: oklch(0.278 0.033 256.848);
--color-primary-900: oklch(0.21 0.034 264.665);
--color-primary-950: oklch(0.13 0.028 261.692);
@import "slim-select/styles";
}
@import "components";
@import "@fortawesome/fontawesome-free/css/fontawesome" source("../..");
@import "@fortawesome/fontawesome-free/css/regular" source("../..");
@import "@fortawesome/fontawesome-free/css/solid" source("../..");
@import "@fortawesome/fontawesome-free/css/brands" source("../..");
@import "slim-select/styles" source("../..");
/* fix firefox scrollbars */
* {
@ -155,18 +165,68 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
100% { opacity: 0; }
}
.ss-main {
@apply input;
/* components */
.input, .ss-main, .ss-content, .ss-search input[type="search"] {
@apply px-4 py-2 rounded-lg border focus:outline-hidden;
@apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out;
}
.input-primary {
@apply border-primary-500 hover:border-primary-600 active:border-primary-600;
@apply text-black;
}
.checkbox {
-ms-transform: scale(1.5);
-moz-transform: scale(1.5);
-webkit-transform: scale(1.5);
-o-transform: scale(1.5);
transform: scale(1.5);
padding: 10px;
margin: 1em auto;
}
.title {
@apply tracking-wide leading-5;
}
.btn {
@apply px-4 py-2 rounded-lg focus:outline-hidden;
@apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out;
}
.btn-primary {
@apply bg-primary-500 focus:bg-primary-600 active:bg-primary-600;
@apply border-primary-500 focus:border-primary-600 active:border-primary-600;
@apply text-white;
}
.btn-alert {
@apply bg-rose-600 focus:bg-rose-700 active:bg-rose-800;
@apply border-rose-600 focus:border-rose-700 active:border-rose-800;
@apply text-white;
}
.hr {
@apply w-full max-w-2xl border border-primary-300;
}
.hr-light {
@apply w-full max-w-2xl border border-white;
}
.link {
@apply hover:underline;
@apply transition-colors duration-500 ease-in-out;
}
/* slim select */
.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;
}
@ -181,10 +241,6 @@ $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
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;
}

View File

@ -1,57 +0,0 @@
@layer components {
.input {
@apply rounded-lg px-4 py-2 border focus:outline-none;
@apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out;
}
.input-primary {
@apply border-primary-500 hover:border-primary-600 active:border-primary-600;
@apply text-black;
}
.checkbox {
-ms-transform: scale(1.5);
-moz-transform: scale(1.5);
-webkit-transform: scale(1.5);
-o-transform: scale(1.5);
transform: scale(1.5);
padding: 10px;
margin: 1em auto;
}
.title {
@apply leading-5 tracking-wide;
}
.btn {
@apply focus:outline-none px-4 py-2 rounded-lg;
@apply shadow-sm focus:shadow-lg;
@apply transition-all duration-300 ease-in-out;
}
.btn-primary {
@apply bg-primary-500 focus:bg-primary-600 active:bg-primary-600;
@apply border-primary-500 focus:border-primary-600 active:border-primary-600;
@apply text-white;
}
.btn-alert {
@apply bg-red-600 focus:bg-red-700 active:bg-red-800;
@apply border-red-600 focus:border-red-700 active:border-red-800;
@apply text-white;
}
.hr {
@apply border border-primary-300 w-full max-w-2xl;
}
.hr-light {
@apply border border-white w-full max-w-2xl;
}
.link {
@apply hover:underline;
@apply transition-colors duration-500 ease-in-out;
}
}

View File

@ -1,7 +1,3 @@
// We import the CSS which is extracted to its own file by esbuild.
// Remove this line if you add a your own CSS build pipeline (e.g postcss).
import '../css/app.scss'
// If you want to use Phoenix channels, run `mix help phx.gen.channel`
// to get started and then uncomment the line below.
// import "./user_socket.js"

10401
assets/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,50 +1,21 @@
{
"repository": {},
"description": " ",
"license": "MIT",
"engines": {
"node": "v23.7.0"
"node": "v23.10.0"
},
"scripts": {
"deploy": "NODE_ENV=production webpack --mode production",
"watch": "webpack --mode development --watch --watch-options-stdin",
"format": "standard --fix",
"test": "standard"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.7.2",
"chart.js": "^4.4.7",
"chart.js": "^4.4.8",
"chartjs-adapter-date-fns": "^3.0.0",
"date-fns": "^4.1.0",
"phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html",
"phoenix_live_view": "file:../deps/phoenix_live_view",
"slim-select": "^2.10.0",
"slim-select": "^2.11.0",
"topbar": "^3.0.0"
},
"devDependencies": {
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1",
"copy-webpack-plugin": "^12.0.2",
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.0",
"file-loader": "^6.2.0",
"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"
"npm-check-updates": "^17.1.16",
"standard": "^17.1.2"
}
}

View File

@ -1,7 +0,0 @@
module.exports = {
plugins: {
'postcss-import': {},
tailwindcss: {},
autoprefixer: {}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,43 +0,0 @@
const colors = require('tailwindcss/colors')
module.exports = {
content: [
'../lib/**/*.{ex,heex,leex,eex}',
'./js/**/*.js'
],
theme: {
colors: {
transparent: 'transparent',
current: 'currentColor',
primary: colors.gray,
black: colors.black,
white: colors.white,
gray: colors.neutral,
indigo: colors.indigo,
red: colors.rose,
yellow: colors.amber
},
extend: {
spacing: {
128: '32rem',
192: '48rem',
256: '64rem'
},
minWidth: {
4: '1rem',
8: '2rem',
12: '3rem',
16: '4rem',
20: '8rem'
},
maxWidth: {
4: '1rem',
8: '2rem',
12: '3rem',
16: '4rem',
20: '8rem'
}
}
},
plugins: []
}

View File

@ -1,57 +0,0 @@
const path = require('path')
const glob = require('glob')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = (env, options) => {
const devMode = options.mode !== 'production'
return {
optimization: {
minimizer: [
new TerserPlugin({ parallel: true, extractComments: true }),
new CssMinimizerPlugin({})
]
},
entry: {
app: glob.sync('./vendor/**/*.js').concat(['./js/app.js'])
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, '../priv/static/js'),
publicPath: '/js/'
},
devtool: devMode ? 'eval-cheap-module-source-map' : undefined,
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
},
{
test: /\.s?css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader'
]
},
{
test: /\.(woff(2)?|ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
type: 'asset/resource',
generator: { filename: 'fonts/[name].[ext]' }
}
]
},
plugins: [
new MiniCssExtractPlugin({ filename: '../css/app.css' }),
new CopyWebpackPlugin({ patterns: [{ from: 'static/', to: '../' }] })
]
}
}

View File

@ -10,12 +10,13 @@ import Config
config :cannery,
env: :dev,
ecto_repos: [Cannery.Repo],
generators: [binary_id: true]
generators: [binary_id: true, timestamp_type: :utc_datetime]
config :cannery, Cannery.Accounts, registration: System.get_env("REGISTRATION", "invite")
# Configures the endpoint
config :cannery, CanneryWeb.Endpoint,
adapter: Bandit.PhoenixAdapter,
url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"],
http: [port: String.to_integer(System.get_env("PORT") || "4000")],
secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I",
@ -55,14 +56,25 @@ config :cannery, Oban,
queues: [default: 10, mailers: 20]
# Configure esbuild (the version is required)
# config :esbuild,
# version: "0.14.0",
# default: [
# args:
# ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*),
# cd: Path.expand("../assets", __DIR__),
# env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
# ]
config :esbuild,
version: "0.17.11",
cannery: [
args:
~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*),
cd: Path.expand("../assets", __DIR__),
env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
]
# Configure tailwind (the version is required)
config :tailwind,
version: "4.0.0",
cannery: [
args: ~w(
--input=css/app.css
--output=../priv/static/assets/app.css
),
cd: Path.expand("../assets", __DIR__)
]
# Configures Elixir's Logger
config :logger, :console,

View File

@ -2,6 +2,7 @@ import Config
# Configure your database
config :cannery, Cannery.Repo,
stacktrace: true,
show_sensitive_data_on_connection_error: true,
pool_size: 10
@ -12,21 +13,14 @@ config :cannery, Cannery.Repo,
# watchers to your application. For example, we use it
# with esbuild to bundle .js and .css sources.
config :cannery, CanneryWeb.Endpoint,
http: [ip: {0, 0, 0, 0}, port: 4000],
check_origin: false,
code_reloader: true,
debug_errors: true,
secret_key_base: "dg2lccMgaY3+ZeKppR+ondk4ZRaANZGIN0LMZT1u1uzscH4jO5W9a9b9V9BkC+MW",
watchers: [
# Start the esbuild watcher by calling Esbuild.install_and_run(:default, args)
# esbuild: {Esbuild, :install_and_run, [:default, ~w(--sourcemap=inline --watch)]}
node: [
"node_modules/webpack/bin/webpack.js",
"--mode",
"development",
"--watch",
"--watch-options-stdin",
cd: Path.expand("../assets", __DIR__)
]
esbuild: {Esbuild, :install_and_run, [:cannery, ~w(--sourcemap=inline --watch)]},
tailwind: {Tailwind, :install_and_run, [:cannery, ~w(--watch)]}
]
# ## SSL Support
@ -57,7 +51,7 @@ config :cannery, CanneryWeb.Endpoint,
config :cannery, CanneryWeb.Endpoint,
live_reload: [
patterns: [
~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$",
~r"priv/static/(?!uploads/).*(js|css|png|jpeg|jpg|gif|svg)$",
~r"priv/gettext/.*(po)$",
~r"lib/cannery_web/*/.*(ex)$"
]
@ -73,3 +67,9 @@ config :phoenix, :stacktrace_depth, 20
# Initialize plugs at runtime for faster development compilation
config :phoenix, :plug_init_mode, :runtime
config :phoenix_live_view,
# Include HEEx debug annotations as HTML comments in rendered markup
debug_heex_annotations: true,
# Enable helpful, but potentially expensive runtime checks
enable_expensive_runtime_checks: true

View File

@ -7,13 +7,23 @@ import Config
# any compile-time configuration in here, as it won't be applied.
# The block below contains prod specific runtime configuration.
# Start the phoenix server if environment is set and running in a release
if System.get_env("PHX_SERVER") && System.get_env("RELEASE_NAME") do
# ## Using releases
#
# If you use `mix release`, you need to explicitly enable the server
# by passing the PHX_SERVER=true when you start it:
#
# PHX_SERVER=true bin/cannery start
#
# Alternatively, you can use `mix phx.gen.release` to generate a `bin/server`
# script that automatically sets the env var above.
if System.get_env("PHX_SERVER") do
config :cannery, CanneryWeb.Endpoint, server: true
end
config :cannery, CanneryWeb.HTMLHelpers, shibao_mode: System.get_env("SHIBAO_MODE") == "true"
config :cannery, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY")
# Set default locale
config :gettext, :default_locale, System.get_env("LOCALE", "en_US")

View File

@ -17,7 +17,7 @@ defmodule Cannery.Accounts.Invite do
has_many :users, User
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -21,6 +21,7 @@ defmodule Cannery.Accounts.User do
field :email, :string
field :password, :string, virtual: true
field :hashed_password, :string
field :current_password, :string, virtual: true, redact: true
field :confirmed_at, :naive_datetime
field :role, Ecto.Enum, values: [:admin, :user], default: :user
field :locale, :string
@ -29,7 +30,7 @@ defmodule Cannery.Accounts.User do
belongs_to :invite, Invite
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %User{
@ -193,6 +194,8 @@ defmodule Cannery.Accounts.User do
"""
@spec validate_current_password(changeset(), String.t()) :: changeset()
def validate_current_password(changeset, password) do
changeset = cast(changeset, %{current_password: password}, [:current_password])
if valid_password?(changeset.data, password),
do: changeset,
else: changeset |> add_error(:current_password, dgettext("errors", "is not valid"))

View File

@ -24,7 +24,7 @@ defmodule Cannery.ActivityLog.ShotRecord do
field :user_id, :binary_id
field :pack_id, :binary_id
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -30,7 +30,7 @@ defmodule Cannery.Ammo.Pack do
field :container_id, :binary_id
field :user_id, :binary_id
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -90,7 +90,7 @@ defmodule Cannery.Ammo.Type do
field :user_id, :binary_id
has_many :packs, Pack
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -15,6 +15,7 @@ defmodule Cannery.Application do
CanneryWeb.Telemetry,
# Start the PubSub system
{Phoenix.PubSub, name: Cannery.PubSub},
{DNSCluster, query: Application.get_env(:cannery, :dns_cluster_query) || :ignore},
# Start the Endpoint (http/https)
CanneryWeb.Endpoint,
# Add Oban

View File

@ -27,7 +27,7 @@ defmodule Cannery.Containers.Container do
many_to_many :tags, Tag, join_through: ContainerTag
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -11,7 +11,7 @@ defmodule Cannery.Containers.ContainerTag do
belongs_to :container, Container
belongs_to :tag, Tag
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -20,7 +20,7 @@ defmodule Cannery.Containers.Tag do
field :user_id, :binary_id
timestamps()
timestamps(type: :utc_datetime)
end
@type t :: %__MODULE__{

View File

@ -17,7 +17,7 @@ defmodule CanneryWeb do
those modules here.
"""
def static_paths, do: ~w(css js fonts images favicon.ico robots.txt)
def static_paths, do: ~w(assets fonts images favicon.ico robots.txt webfonts)
def router do
quote do

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= gettext("Record shots") %>
{gettext("Record shots")}
</h2>
<.form
@ -16,47 +16,47 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :ammo_left, gettext("Rounds left"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :ammo_left,
{label(f, :ammo_left, gettext("Rounds left"), class: "title text-lg text-primary-600")}
{number_input(f, :ammo_left,
min: 0,
max: @pack.count - 1,
placeholder: gettext("Rounds left"),
class: "input input-primary"
) %>
)}
<button
type="button"
class="mx-2 my-1 text-sm btn btn-primary"
phx-click={JS.dispatch("cannery:set-zero", to: "#shot-record-form_ammo_left")}
>
<%= gettext("Used up!") %>
{gettext("Used up!")}
</button>
<%= error_tag(f, :ammo_left, "col-span-3") %>
{error_tag(f, :ammo_left, "col-span-3")}
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :notes,
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
{textarea(f, :notes,
class: "input input-primary col-span-2",
id: "add-shot-record-form-notes",
maxlength: 255,
phx_debounce: 300,
phx_update: "ignore",
placeholder: gettext("Really great weather")
) %>
<%= error_tag(f, :notes, "col-span-3") %>
)}
{error_tag(f, :notes, "col-span-3")}
<%= label(f, :date, gettext("Date"), class: "title text-lg text-primary-600") %>
<%= date_input(f, :date,
{label(f, :date, gettext("Date"), class: "title text-lg text-primary-600")}
{date_input(f, :date,
class: "input input-primary col-span-2",
phx_update: "ignore",
value: Date.utc_today()
) %>
<%= error_tag(f, :notes, "col-span-3") %>
)}
{error_tag(f, :notes, "col-span-3")}
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3",
phx_disable_with: dgettext("prompts", "Saving...")
) %>
)}
</.form>
</div>

View File

@ -135,7 +135,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
~H"""
<div class="flex flex-wrap justify-center items-center">
<.link navigate={~p"/container/#{@id}"} class="link">
<%= @name %>
{@name}
</.link>
</div>
"""}
@ -154,7 +154,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
{staged,
~H"""
<%= render_slot(@range, @container) %>
{render_slot(@range, @container)}
"""}
end
@ -172,7 +172,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
<div class="flex flex-wrap justify-center items-center">
<.simple_tag_card :for={tag <- @container.tags} :if={@container.tags} tag={tag} />
<%= render_slot(@tag_actions, @container) %>
{render_slot(@tag_actions, @container)}
</div>
"""}
end
@ -181,7 +181,7 @@ defmodule CanneryWeb.Components.ContainerTableComponent do
assigns = %{actions: actions, container: container}
~H"""
<%= render_slot(@actions, @container) %>
{render_slot(@actions, @container)}
"""
end

View File

@ -2,40 +2,40 @@
id={"container-#{@container.id}"}
class="overflow-hidden max-w-full mx-4 mb-4 px-8 py-4
flex flex-col justify-around items-center space-y-4
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out"
>
<.link navigate={~p"/container/#{@container}"} class="link">
<h1 class="px-4 py-2 rounded-lg title text-xl">
<%= @container.name %>
{@container.name}
</h1>
</.link>
<div class="flex flex-col justify-center items-center space-y-2">
<span :if={@container.desc} class="rounded-lg title text-lg">
<%= gettext("Description:") %>
<%= @container.desc %>
{gettext("Description:")}
{@container.desc}
</span>
<span class="rounded-lg title text-lg">
<%= gettext("Type:") %>
<%= @container.type %>
{gettext("Type:")}
{@container.type}
</span>
<span :if={@container.location} class="rounded-lg title text-lg">
<%= gettext("Location:") %>
<%= @container.location %>
{gettext("Location:")}
{@container.location}
</span>
<%= if Ammo.get_packs_count(@current_user, container_id: @container.id) != 0 do %>
<span class="rounded-lg title text-lg">
<%= gettext("Packs:") %>
<%= Ammo.get_packs_count(@current_user, container_id: @container.id) %>
{gettext("Packs:")}
{Ammo.get_packs_count(@current_user, container_id: @container.id)}
</span>
<span class="rounded-lg title text-lg">
<%= gettext("Rounds:") %>
<%= Ammo.get_round_count(@current_user, container_id: @container.id) %>
{gettext("Rounds:")}
{Ammo.get_round_count(@current_user, container_id: @container.id)}
</span>
<% end %>
@ -45,7 +45,7 @@
>
<.simple_tag_card :for={tag <- @container.tags} tag={tag} />
<%= if @tag_actions, do: render_slot(@tag_actions) %>
{if @tag_actions, do: render_slot(@tag_actions)}
</div>
</div>
@ -53,6 +53,6 @@
:if={assigns |> Map.has_key?(:inner_block)}
class="flex space-x-4 justify-center items-center"
>
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>
</div>

View File

@ -1,3 +1,3 @@
<time :if={@date} id={@id} datetime={Date.to_iso8601(@date, :extended)} phx-hook="Date">
<%= Date.to_iso8601(@date, :extended) %>
{Date.to_iso8601(@date, :extended)}
</time>

View File

@ -1,13 +1,13 @@
<div class="flex items-center mx-4 my-2 space-x-1">
<input
class="w-36 text-center input input-primary"
class="w-40 text-center input input-primary"
name={"#{@name}_start"}
type="date"
value={@start_date}
/>
<span>—</span>
<input
class="w-36 text-center input input-primary"
class="w-40 text-center input input-primary"
name={"#{@name}_end"}
type="date"
value={@end_date}

View File

@ -1,3 +1,3 @@
<time :if={@datetime} id={@id} datetime={cast_datetime(@datetime)} phx-hook="DateTime">
<%= cast_datetime(@datetime) %>
{cast_datetime(@datetime)}
</time>

View File

@ -1,24 +1,24 @@
<div class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center space-y-4
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out">
<h1 class="title text-xl">
<%= @invite.name %>
{@invite.name}
</h1>
<%= if @invite.disabled_at |> is_nil() do %>
<h2 class="title text-md">
<%= if @invite.uses_left do %>
<%= gettext(
{gettext(
"Uses Left: %{uses_left_count}",
uses_left_count: @invite.uses_left
) %>
)}
<% else %>
<%= gettext("Uses Left: Unlimited") %>
{gettext("Uses Left: Unlimited")}
<% end %>
</h2>
<% else %>
<h2 class="title text-md">
<%= gettext("Invite Disabled") %>
{gettext("Invite Disabled")}
</h2>
<% end %>
@ -28,19 +28,19 @@
/>
<h2 :if={@use_count && @use_count != 0} class="title text-md">
<%= gettext("Uses: %{uses_count}", uses_count: @use_count) %>
{gettext("Uses: %{uses_count}", uses_count: @use_count)}
</h2>
<div class="flex flex-row flex-wrap justify-center items-center">
<code
id={"code-#{@invite.id}"}
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-gray-100 bg-primary-800"
class="mx-2 my-1 text-xs px-4 py-2 rounded-lg text-center break-all text-zinc-100 bg-primary-800"
phx-no-format
><%= url(CanneryWeb.Endpoint, ~p"/users/register?invite=#{@invite.token}") %></code>
<%= if @code_actions, do: render_slot(@code_actions) %>
{if @code_actions, do: render_slot(@code_actions)}
</div>
<div :if={@inner_block} class="flex space-x-4 justify-center items-center">
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>
</div>

View File

@ -29,7 +29,7 @@
patch={@return_to}
id="close"
class="absolute top-8 right-10
text-gray-500 hover:text-gray-800
text-zinc-500 hover:text-zinc-800
transition-all duration-500 ease-in-out"
phx-remove={hide_modal()}
aria-label={gettext("Close modal")}
@ -38,7 +38,7 @@
</.link>
<div class="overflow-x-hidden overflow-y-auto w-full p-8 flex flex-col space-y-4 justify-start items-center">
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>
</div>
</div>

View File

@ -2,66 +2,66 @@
id={"pack-#{@pack.id}"}
class="mx-4 my-2 px-8 py-4
flex flex-col justify-center items-center
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out"
>
<.link navigate={~p"/ammo/show/#{@pack}"} class="mb-2 link">
<h1 class="title text-xl title-primary-500">
<%= @pack.type.name %>
{@pack.type.name}
</h1>
</.link>
<div class="flex flex-col justify-center items-center">
<span class="rounded-lg title text-lg">
<%= gettext("Count:") %>
<%= if @pack.count == 0, do: gettext("Empty"), else: @pack.count %>
{gettext("Count:")}
{if @pack.count == 0, do: gettext("Empty"), else: @pack.count}
</span>
<span :if={@original_count && @original_count != @pack.count} class="rounded-lg title text-lg">
<%= gettext("Original Count:") %>
<%= @original_count %>
{gettext("Original Count:")}
{@original_count}
</span>
<span :if={@pack.notes} class="rounded-lg title text-lg">
<%= gettext("Notes:") %>
<%= @pack.notes %>
{gettext("Notes:")}
{@pack.notes}
</span>
<span :if={@pack.purchased_on} class="rounded-lg title text-lg">
<%= gettext("Purchased on:") %>
{gettext("Purchased on:")}
<.date id={"#{@pack.id}-purchased-on"} date={@pack.purchased_on} />
</span>
<span :if={@last_used_date} class="rounded-lg title text-lg">
<%= gettext("Last used on:") %>
{gettext("Last used on:")}
<.date id={"#{@pack.id}-last-used-on"} date={@last_used_date} />
</span>
<span :if={@pack.price_paid} class="rounded-lg title text-lg">
<%= gettext("Price paid:") %>
<%= gettext("$%{amount}", amount: display_currency(@pack.price_paid)) %>
{gettext("Price paid:")}
{gettext("$%{amount}", amount: display_currency(@pack.price_paid))}
</span>
<span :if={@cpr} class="rounded-lg title text-lg">
<%= gettext("CPR:") %>
<%= gettext("$%{amount}", amount: display_currency(@cpr)) %>
{gettext("CPR:")}
{gettext("$%{amount}", amount: display_currency(@cpr))}
</span>
<span :if={@pack.lot_number} class="rounded-lg title text-lg">
<%= gettext("Lot number:") %>
<%= @pack.lot_number %>
{gettext("Lot number:")}
{@pack.lot_number}
</span>
<span :if={@container} class="rounded-lg title text-lg">
<%= gettext("Container:") %>
{gettext("Container:")}
<.link navigate={~p"/container/#{@container}"} class="link">
<%= @container.name %>
{@container.name}
</.link>
</span>
</div>
<div :if={@inner_block} class="mt-4 flex space-x-4 justify-center items-center">
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>
</div>

View File

@ -2,5 +2,5 @@
class="inline-block break-all mx-2 my-1 px-4 py-2 rounded-lg title text-xl"
style={"color: #{@tag.text_color}; background-color: #{@tag.bg_color}"}
>
<%= @tag.name %>
{@tag.name}
</h1>

View File

@ -1,9 +1,9 @@
<div
id={"tag-#{@tag.id}"}
class="mx-4 mb-4 px-8 py-4 space-x-4 flex justify-center items-center
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out"
>
<.simple_tag_card tag={@tag} />
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>

View File

@ -1,4 +1,4 @@
<label for={@id || @action} class="relative inline-flex items-center cursor-pointer">
<label for={@id || @action} class="inline-flex relative items-center cursor-pointer">
<input
id={@id || @action}
type="checkbox"
@ -12,19 +12,17 @@
else: %{"phx-click": @action, "phx-value-value": @value}
}
/>
<div class="w-11 h-6 bg-gray-300 rounded-full peer
peer-focus:ring-4 peer-focus:ring-teal-300 dark:peer-focus:ring-teal-800
peer-checked:bg-gray-600
peer-checked:after:translate-x-full peer-checked:after:border-white
after:content-[''] after:absolute after:top-1 after:left-[2px] after:bg-white after:border-gray-300
<div class="w-11 h-6 bg-zinc-300 rounded-full peer
peer-checked:bg-zinc-600 peer-checked:after:translate-x-full peer-checked:after:border-white
after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-zinc-300
after:border after:rounded-full after:h-5 after:w-5
after:transition-all after:duration-250 after:ease-in-out
transition-colors duration-250 ease-in-out">
</div>
<span
id={"#{@id || @action}-label"}
class="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300 whitespace-nowrap"
class="ml-3 text-sm font-medium whitespace-nowrap text-zinc-900 dark:text-zinc-300"
>
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</span>
</label>

View File

@ -14,7 +14,7 @@
<span class="mx-2 my-1">
|
</span>
<%= @title_content %>
{@title_content}
<% end %>
</div>
@ -25,37 +25,37 @@
<%= if @current_user do %>
<li class="mx-2 my-1">
<.link navigate={~p"/tags"} class="text-white hover:underline">
<%= gettext("Tags") %>
{gettext("Tags")}
</.link>
</li>
<li class="mx-2 my-1">
<.link navigate={~p"/containers"} class="text-white hover:underline">
<%= gettext("Containers") %>
{gettext("Containers")}
</.link>
</li>
<li class="mx-2 my-1">
<.link navigate={~p"/catalog"} class="text-white hover:underline">
<%= gettext("Catalog") %>
{gettext("Catalog")}
</.link>
</li>
<li class="mx-2 my-1">
<.link navigate={~p"/ammo"} class="text-white hover:underline">
<%= gettext("Ammo") %>
{gettext("Ammo")}
</.link>
</li>
<li class="mx-2 my-1">
<.link navigate={~p"/range"} class="text-white hover:underline">
<%= gettext("Range") %>
{gettext("Range")}
</.link>
</li>
<li :if={@current_user |> Accounts.already_admin?()} class="mx-2 my-1">
<.link navigate={~p"/invites"} class="text-white hover:underline">
<%= gettext("Invites") %>
{gettext("Invites")}
</.link>
</li>
<li class="mx-2 my-1">
<.link href={~p"/users/settings"} class="text-white hover:underline truncate">
<%= @current_user.email %>
{@current_user.email}
</.link>
</li>
<li class="mx-2 my-1">
@ -86,12 +86,12 @@
<% else %>
<li :if={Accounts.allow_registration?()} class="mx-2 my-1">
<.link href={~p"/users/register"} class="text-white hover:underline truncate">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</.link>
</li>
<li class="mx-2 my-1">
<.link href={~p"/users/log_in"} class="text-white hover:underline truncate">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</.link>
</li>
<% end %>

View File

@ -1,36 +1,36 @@
<div
id={"user-#{@user.id}"}
class="mx-4 my-2 px-8 py-4 flex flex-col justify-center items-center text-center
border border-gray-400 rounded-lg shadow-lg hover:shadow-md
border border-zinc-400 rounded-lg shadow-lg hover:shadow-md
transition-all duration-300 ease-in-out"
>
<h1 class="px-4 py-2 rounded-lg title text-xl break-all">
<%= @user.email %>
{@user.email}
</h1>
<h3 class="px-4 py-2 rounded-lg title text-lg">
<p>
<%= if @user.confirmed_at do %>
<%= gettext(
{gettext(
"User was confirmed at%{confirmed_datetime}",
confirmed_datetime: ""
) %>
)}
<.datetime id={"#{@user.id}-confirmed-at"} datetime={@user.confirmed_at} />
<% else %>
<%= gettext("Email unconfirmed") %>
{gettext("Email unconfirmed")}
<% end %>
</p>
<p>
<%= gettext(
{gettext(
"User registered on%{registered_datetime}",
registered_datetime: ""
) %>
)}
<.datetime id={"#{@user.id}-inserted-at"} datetime={@user.inserted_at} />
</p>
</h3>
<div :if={@inner_block} class="px-4 py-2 flex space-x-4 justify-center items-center">
<%= render_slot(@inner_block) %>
{render_slot(@inner_block)}
</div>
</div>

View File

@ -1,23 +1,23 @@
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
<span style="margin-bottom: 0.75em; font-size: 1.5em;">
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
{dgettext("emails", "Hi %{email},", email: @user.email)}
</span>
<br />
<span style="margin-bottom: 1em; font-size: 1.25em;">
<%= dgettext("emails", "Welcome to Cannery") %>
{dgettext("emails", "Welcome to Cannery")}
</span>
<br />
<%= dgettext("emails", "You can confirm your account by visiting the URL below:") %>
{dgettext("emails", "You can confirm your account by visiting the URL below:")}
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
<br />
<%= dgettext("emails", "If you didn't create an account at Cannery, please ignore this.") %>
{dgettext("emails", "If you didn't create an account at Cannery, please ignore this.")}
</div>

View File

@ -1,17 +1,17 @@
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
<span style="margin-bottom: 0.5em; font-size: 1.5em;">
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
{dgettext("emails", "Hi %{email},", email: @user.email)}
</span>
<br />
<%= dgettext("emails", "You can reset your password by visiting the URL below:") %>
{dgettext("emails", "You can reset your password by visiting the URL below:")}
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
<br />
<%= dgettext("emails", "If you didn't request this change from Cannery, please ignore this.") %>
{dgettext("emails", "If you didn't request this change from Cannery, please ignore this.")}
</div>

View File

@ -1,20 +1,20 @@
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
<span style="margin-bottom: 0.5em; font-size: 1.5em;">
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
{dgettext("emails", "Hi %{email},", email: @user.email)}
</span>
<br />
<%= dgettext("emails", "You can change your email by visiting the URL below:") %>
{dgettext("emails", "You can change your email by visiting the URL below:")}
<br />
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}><%= @url %></a>
<a style="margin: 1em; color: rgb(31, 31, 31);" href={@url}>{@url}</a>
<br />
<%= dgettext(
{dgettext(
"emails",
"If you didn't request this change from Cannery, please ignore this."
) %>
)}
</div>

View File

@ -10,7 +10,7 @@
phx-click="lv:clear-flash"
phx-value-key="info"
>
<%= Phoenix.Flash.get(@flash, :info) %>
{Phoenix.Flash.get(@flash, :info)}
</p>
<p
@ -20,13 +20,13 @@
phx-click="lv:clear-flash"
phx-value-key="error"
>
<%= Phoenix.Flash.get(@flash, :error) %>
{Phoenix.Flash.get(@flash, :error)}
</p>
</div>
</header>
<div class="mx-4 sm:mx-8 md:mx-16 flex flex-col justify-center items-stretch">
<%= @inner_content %>
{@inner_content}
</div>
</main>
@ -40,6 +40,6 @@
<i class="fas fa-fade text-md fa-satellite-dish"></i>
<h1 class="title text-md title-primary-500">
<%= gettext("Reconnecting...") %>
{gettext("Reconnecting...")}
</h1>
</div>

View File

@ -1,19 +1,19 @@
<html>
<head>
<title>
<%= @email.subject %>
{@email.subject}
</title>
</head>
<body style="padding: 2em; color: rgb(31, 31, 31); background-color: rgb(220, 220, 228); font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; text-align: center;">
<%= @inner_content %>
{@inner_content}
<hr style="margin: 2em auto; border-width: 1px; border-color: rgb(212, 212, 216); width: 100%; max-width: 42rem;" />
<a style="color: rgb(31, 31, 31);" href={~p"/"}>
<%= dgettext(
{dgettext(
"emails",
"This email was sent from Cannery, the self-hosted firearm tracker website."
) %>
)}
</a>
</body>
</html>

View File

@ -1 +1 @@
<%= @inner_block %>
{@inner_block}

View File

@ -1,20 +1,19 @@
<!DOCTYPE html>
<html lang="en" class="m-0 p-0 w-full h-full bg-white">
<html lang="en" class="p-0 m-0 w-full h-full bg-white [scrollbar-gutter:stable]">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%= csrf_meta_tag() %>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="csrf-token" content={get_csrf_token()} />
<link rel="shortcut icon" type="image/jpg" href={~p"/images/cannery.svg"} />
<.live_title suffix={" | #{gettext("Cannery")}"}>
<%= assigns[:page_title] || gettext("Cannery") %>
{assigns[:page_title] || gettext("Cannery")}
</.live_title>
<link phx-track-static rel="stylesheet" href={~p"/css/app.css"} />
<script defer phx-track-static type="text/javascript" src={~p"/js/app.js"}>
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
<script defer phx-track-static type="text/javascript" src={~p"/assets/app.js"}>
</script>
</head>
<body class="m-0 p-0 w-full h-full subpixel-antialiased">
<%= @inner_content %>
<body class="p-0 m-0 w-full h-full subpixel-antialiased">
{@inner_content}
</body>
</html>

View File

@ -74,17 +74,17 @@ defmodule CanneryWeb.Components.MovePackComponent do
~H"""
<div class="w-full flex flex-col space-y-8 justify-center items-center">
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= dgettext("actions", "Move ammo") %>
{dgettext("actions", "Move ammo")}
</h2>
<%= if @containers |> Enum.empty?() do %>
<h2 class="title text-xl text-primary-600">
<%= gettext("No other containers") %>
<%= display_emoji("😔") %>
{gettext("No other containers")}
{display_emoji("😔")}
</h2>
<.link navigate={~p"/containers/new"} class="btn btn-primary">
<%= dgettext("actions", "Add another container!") %>
{dgettext("actions", "Add another container!")}
</.link>
<% else %>
<.live_component
@ -120,7 +120,7 @@ defmodule CanneryWeb.Components.MovePackComponent do
phx-target={@myself}
phx-value-container_id={@container.id}
>
<%= dgettext("actions", "Select") %>
{dgettext("actions", "Select")}
</button>
</div>
"""

View File

@ -170,7 +170,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
{type_name,
~H"""
<%= render_slot(@type_block, @type) %>
{render_slot(@type_block, @type)}
"""}
end
@ -196,7 +196,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
<%= if @last_used_date do %>
<.date id={"#{@id}-last-used-date"} date={@last_used_date} />
<% else %>
<%= gettext("Never used") %>
{gettext("Never used")}
<% end %>
"""}
end
@ -205,7 +205,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
assigns = %{range: range, pack: pack}
~H"""
<%= render_slot(@range, @pack) %>
{render_slot(@range, @pack)}
"""
end
@ -222,7 +222,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
assigns = %{actions: actions, pack: pack}
~H"""
<%= render_slot(@actions, @pack) %>
{render_slot(@actions, @pack)}
"""
end
@ -243,7 +243,7 @@ defmodule CanneryWeb.Components.PackTableComponent do
{container_name,
~H"""
<%= render_slot(@container_block, {@pack, @container}) %>
{render_slot(@container_block, {@pack, @container})}
"""}
end

View File

@ -99,7 +99,7 @@ defmodule CanneryWeb.Components.ShotRecordTableComponent do
{pack.type.name,
~H"""
<.link navigate={~p"/ammo/show/#{@pack}"} class="link">
<%= @pack.type.name %>
{@pack.type.name}
</.link>
"""}
end
@ -115,7 +115,7 @@ defmodule CanneryWeb.Components.ShotRecordTableComponent do
assigns = %{actions: actions, shot_record: shot_record}
~H"""
<%= render_slot(@actions, @shot_record) %>
{render_slot(@actions, @shot_record)}
"""
end

View File

@ -76,7 +76,7 @@ defmodule CanneryWeb.Components.TableComponent do
sort_mode: initial_sort_mode
)
|> assign_new(:row_class, fn -> "bg-white" end)
|> assign_new(:alternate_row_class, fn -> "bg-gray-200" end)
|> assign_new(:alternate_row_class, fn -> "bg-zinc-200" end)
{:ok, socket}
end

View File

@ -1,4 +1,4 @@
<div id={@id} class="w-full overflow-x-auto border border-gray-600 rounded-lg shadow-lg bg-white">
<div id={@id} class="w-full overflow-x-auto border border-zinc-600 rounded-lg shadow-lg bg-white">
<table class="min-w-full table-auto text-center bg-white">
<thead class="border-b border-primary-600">
<tr>
@ -12,7 +12,7 @@
phx-target={@myself}
>
<i class="w-0 float-right fas fa-sm fa-chevron-up opacity-0"></i>
<span class={if @last_sort_key == key, do: "underline"}><%= label %></span>
<span class={if @last_sort_key == key, do: "underline"}>{label}</span>
<%= if @last_sort_key == key do %>
<%= case @sort_mode do %>
<% :asc -> %>
@ -27,7 +27,7 @@
</th>
<% else %>
<th class={["p-2 cursor-not-allowed", column[:class]]}>
<%= label %>
{label}
</th>
<% end %>
<% end %>
@ -41,9 +41,9 @@
<td :for={%{key: key} = value <- @columns} class={["p-2", value[:class]]}>
<%= case values |> Map.get(key) do %>
<% {_custom_sort_value, value} -> %>
<%= value %>
{value}
<% value -> %>
<%= value %>
{value}
<% end %>
</td>
</tr>

View File

@ -278,7 +278,7 @@ defmodule CanneryWeb.Components.TypeTableComponent do
{type_name,
~H"""
<.link navigate={~p"/type/#{@id}"} class="link">
<%= @name %>
{@name}
</.link>
"""}
end
@ -287,7 +287,7 @@ defmodule CanneryWeb.Components.TypeTableComponent do
assigns = %{actions: actions, type: type}
~H"""
<%= render_slot(@actions, @type) %>
{render_slot(@actions, @type)}
"""
end

View File

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
<%= dgettext("errors", "Error") %> | <%= gettext("Cannery") %>
{dgettext("errors", "Error")} | {gettext("Cannery")}
</title>
<link rel="stylesheet" href="/css/app.css" />
<script defer type="text/javascript" src="/js/app.js">
@ -19,13 +19,13 @@
<div class="pb-8 w-full flex flex-col justify-center items-center text-center">
<div class="p-8 sm:p-16 w-full flex flex-col justify-center items-center space-y-4 max-w-3xl">
<h1 class="title text-primary-600 text-3xl">
<%= @error_string %>
{@error_string}
</h1>
<hr class="w-full hr" />
<.link href={~p"/"} class="link title text-primary-600 text-lg">
<%= dgettext("errors", "Go back home") %>
{dgettext("errors", "Go back home")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-600 text-xl">
<%= dgettext("actions", "Resend confirmation instructions") %>
{dgettext("actions", "Resend confirmation instructions")}
</h1>
<.form
@ -10,22 +10,22 @@
action={~p"/users/confirm"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
<%= submit(dgettext("actions", "Resend confirmation instructions"),
{submit(dgettext("actions", "Resend confirmation instructions"),
class: "mx-auto btn btn-primary col-span-3"
) %>
)}
</.form>
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</.link>
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-600 text-xl">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</h1>
<.form
@ -10,23 +10,23 @@
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">
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</p>
<%= if @invite_token do %>
<%= hidden_input(f, :invite_token, value: @invite_token) %>
{hidden_input(f, :invite_token, value: @invite_token)}
<% end %>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :email, "col-span-3") %>
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
{error_tag(f, :email, "col-span-3")}
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %>
{label(f, :password, gettext("Password"), class: "title text-lg text-primary-600")}
{password_input(f, :password, required: true, class: "input input-primary col-span-2")}
{error_tag(f, :password, "col-span-3")}
<%= label(f, :locale, gettext("Language"), class: "title text-lg text-primary-600") %>
<%= select(
{label(f, :locale, gettext("Language"), class: "title text-lg text-primary-600")}
{select(
f,
:locale,
[
@ -36,20 +36,20 @@
{"Español", "es"}
],
class: "input input-primary col-span-2"
) %>
<%= error_tag(f, :locale) %>
)}
{error_tag(f, :locale)}
<%= submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3") %>
{submit(dgettext("actions", "Register"), class: "mx-auto btn btn-primary col-span-3")}
</.form>
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</.link>
<.link href={~p"/users/reset_password"} class="btn btn-primary">
<%= dgettext("actions", "Forgot your password?") %>
{dgettext("actions", "Forgot your password?")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-600 text-xl">
<%= dgettext("actions", "Reset password") %>
{dgettext("actions", "Reset password")}
</h1>
<.form
@ -10,35 +10,35 @@
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">
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</p>
<%= label(f, :password, gettext("New password"), class: "title text-lg text-primary-600") %>
<%= password_input(f, :password, required: true, class: "input input-primary col-span-2") %>
<%= error_tag(f, :password, "col-span-3") %>
{label(f, :password, gettext("New password"), class: "title text-lg text-primary-600")}
{password_input(f, :password, required: true, class: "input input-primary col-span-2")}
{error_tag(f, :password, "col-span-3")}
<%= label(f, :password_confirmation, gettext("Confirm new password"),
{label(f, :password_confirmation, gettext("Confirm new password"),
class: "title text-lg text-primary-600"
) %>
<%= password_input(f, :password_confirmation,
)}
{password_input(f, :password_confirmation,
required: true,
class: "input input-primary col-span-2"
) %>
<%= error_tag(f, :password_confirmation, "col-span-3") %>
)}
{error_tag(f, :password_confirmation, "col-span-3")}
<%= submit(dgettext("actions", "Reset password"),
{submit(dgettext("actions", "Reset password"),
class: "mx-auto btn btn-primary col-span-3"
) %>
)}
</.form>
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</.link>
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-600 text-xl">
<%= dgettext("actions", "Forgot your password?") %>
{dgettext("actions", "Forgot your password?")}
</h1>
<.form
@ -10,22 +10,22 @@
action={~p"/users/reset_password"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "input input-primary col-span-2") %>
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
{email_input(f, :email, required: true, class: "input input-primary col-span-2")}
<%= submit(dgettext("actions", "Send instructions to reset password"),
{submit(dgettext("actions", "Send instructions to reset password"),
class: "mx-auto btn btn-primary col-span-3"
) %>
)}
</.form>
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</.link>
<.link href={~p"/users/log_in"} class="btn btn-primary">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-2xl flex flex-col justify-center items-center space-y-4">
<h1 class="title text-primary-600 text-xl">
<%= dgettext("actions", "Log in") %>
{dgettext("actions", "Log in")}
</h1>
<.form
@ -11,39 +11,39 @@
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
>
<p :if={@error_message} class="alert alert-danger col-span-3">
<%= @error_message %>
{@error_message}
</p>
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email,
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
{email_input(f, :email,
autocomplete: :email,
class: "input input-primary col-span-2",
required: true
) %>
)}
<%= label(f, :password, gettext("Password"), class: "title text-lg text-primary-600") %>
<%= password_input(f, :password,
{label(f, :password, gettext("Password"), class: "title text-lg text-primary-600")}
{password_input(f, :password,
autocomplete: "current-password",
class: "input input-primary col-span-2",
required: true
) %>
)}
<%= label(f, :remember_me, gettext("Keep me logged in for 60 days"),
{label(f, :remember_me, gettext("Keep me logged in for 60 days"),
class: "title text-lg text-primary-600"
) %>
<%= checkbox(f, :remember_me, class: "checkbox col-span-2") %>
)}
{checkbox(f, :remember_me, class: "checkbox col-span-2")}
<%= submit(dgettext("actions", "Log in"), class: "mx-auto btn btn-primary col-span-3") %>
{submit(dgettext("actions", "Log in"), class: "mx-auto btn btn-primary col-span-3")}
</.form>
<hr class="hr" />
<div class="flex flex-row justify-center items-center space-x-4">
<.link :if={Accounts.allow_registration?()} href={~p"/users/register"} class="btn btn-primary">
<%= dgettext("actions", "Register") %>
{dgettext("actions", "Register")}
</.link>
<.link href={~p"/users/reset_password"} class="btn btn-primary">
<%= dgettext("actions", "Forgot your password?") %>
{dgettext("actions", "Forgot your password?")}
</.link>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="mx-auto pb-8 max-w-3xl flex flex-col justify-center items-center text-right space-y-4">
<h1 class="pb-4 title text-primary-600 text-2xl text-center">
<%= gettext("Settings") %>
<div class="flex flex-col justify-center items-center pb-8 mx-auto space-y-4 max-w-3xl text-right">
<h1 class="pb-4 text-2xl text-center title text-primary-600">
{gettext("Settings")}
</h1>
<hr class="hr" />
@ -9,40 +9,40 @@
:let={f}
for={@email_changeset}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
>
<h3 class="title text-primary-600 text-lg text-center col-span-3">
<%= dgettext("actions", "Change email") %>
<h3 class="col-span-3 text-lg text-center title text-primary-600">
{dgettext("actions", "Change email")}
</h3>
<div
:if={@email_changeset.action && not @email_changeset.valid?}
class="alert alert-danger col-span-3"
class="col-span-3 alert alert-danger"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</div>
<%= hidden_input(f, :action, name: "action", value: "update_email") %>
{hidden_input(f, :action, name: "action", value: "update_email")}
<%= label(f, :email, gettext("Email"), class: "title text-lg text-primary-600") %>
<%= email_input(f, :email, required: true, class: "mx-2 my-1 input input-primary col-span-2") %>
<%= error_tag(f, :email, "col-span-3") %>
{label(f, :email, gettext("Email"), class: "title text-lg text-primary-600")}
{email_input(f, :email, required: true, class: "mx-2 my-1 input input-primary col-span-2")}
{error_tag(f, :email, "col-span-3")}
<%= label(f, :current_password, gettext("Current password"),
{label(f, :current_password, gettext("Current password"),
for: "current_password_for_email",
class: "mx-2 my-1 title text-lg text-primary-600"
) %>
<%= password_input(f, :current_password,
)}
{password_input(f, :current_password,
required: true,
name: "current_password",
id: "current_password_for_email",
class: "mx-2 my-1 input input-primary col-span-2"
) %>
<%= error_tag(f, :current_password, "col-span-3") %>
)}
{error_tag(f, :current_password, "col-span-3")}
<%= submit(dgettext("actions", "Change email"),
{submit(dgettext("actions", "Change email"),
class: "mx-auto btn btn-primary col-span-3"
) %>
)}
</.form>
<hr class="hr" />
@ -51,52 +51,52 @@
:let={f}
for={@password_changeset}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
>
<h3 class="title text-primary-600 text-lg text-center col-span-3">
<%= dgettext("actions", "Change password") %>
<h3 class="col-span-3 text-lg text-center title text-primary-600">
{dgettext("actions", "Change password")}
</h3>
<div
:if={@password_changeset.action && not @password_changeset.valid?}
class="alert alert-danger col-span-3"
class="col-span-3 alert alert-danger"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</div>
<%= hidden_input(f, :action, name: "action", value: "update_password") %>
{hidden_input(f, :action, name: "action", value: "update_password")}
<%= label(f, :password, gettext("New password"), class: "title text-lg text-primary-600") %>
<%= password_input(f, :password,
{label(f, :password, gettext("New password"), class: "title text-lg text-primary-600")}
{password_input(f, :password,
required: true,
class: "mx-2 my-1 input input-primary col-span-2"
) %>
<%= error_tag(f, :password, "col-span-3") %>
)}
{error_tag(f, :password, "col-span-3")}
<%= label(f, :password_confirmation, gettext("Confirm new password"),
{label(f, :password_confirmation, gettext("Confirm new password"),
class: "title text-lg text-primary-600"
) %>
<%= password_input(f, :password_confirmation,
)}
{password_input(f, :password_confirmation,
required: true,
class: "mx-2 my-1 input input-primary col-span-2"
) %>
<%= error_tag(f, :password_confirmation, "col-span-3") %>
)}
{error_tag(f, :password_confirmation, "col-span-3")}
<%= label(f, :current_password, gettext("Current password"),
{label(f, :current_password, gettext("Current password"),
for: "current_password_for_password",
class: "title text-lg text-primary-600"
) %>
<%= password_input(f, :current_password,
)}
{password_input(f, :current_password,
required: true,
name: "current_password",
id: "current_password_for_password",
class: "mx-2 my-1 input input-primary col-span-2"
) %>
<%= error_tag(f, :current_password, "col-span-3") %>
)}
{error_tag(f, :current_password, "col-span-3")}
<%= submit(dgettext("actions", "Change password"),
{submit(dgettext("actions", "Change password"),
class: "mx-auto btn btn-primary col-span-3"
) %>
)}
</.form>
<hr class="hr" />
@ -105,22 +105,22 @@
:let={f}
for={@locale_changeset}
action={~p"/users/settings"}
class="flex flex-col space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4 justify-center items-center"
class="flex flex-col justify-center items-center space-y-4 sm:space-y-0 sm:grid sm:grid-cols-3 sm:gap-4"
>
<%= label(f, :locale, dgettext("actions", "Change Language"),
{label(f, :locale, dgettext("actions", "Change Language"),
class: "title text-primary-600 text-lg text-center col-span-3"
) %>
)}
<div
:if={@locale_changeset.action && not @locale_changeset.valid?}
class="alert alert-danger col-span-3"
class="col-span-3 alert alert-danger"
>
<%= dgettext("errors", "Oops, something went wrong! Please check the errors below.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</div>
<%= hidden_input(f, :action, name: "action", value: "update_locale") %>
{hidden_input(f, :action, name: "action", value: "update_locale")}
<%= select(
{select(
f,
:locale,
[
@ -129,21 +129,21 @@
{"Français", "fr"},
{"Español", "es"}
],
class: "my-1 min-w-md input input-primary col-span-3"
) %>
<%= error_tag(f, :locale, "col-span-3") %>
class: "my-1 min-w-20 input input-primary col-span-3"
)}
{error_tag(f, :locale, "col-span-3")}
<%= submit(dgettext("actions", "Change language"),
{submit(dgettext("actions", "Change language"),
class: "whitespace-nowrap mx-auto btn btn-primary col-span-3",
data: [qa: dgettext("prompts", "Are you sure you want to change your language?")]
) %>
)}
</.form>
<hr class="hr" />
<div class="flex justify-center items-center">
<.link href={~p"/export/json"} class="mx-4 my-2 btn btn-primary" target="_blank">
<%= dgettext("actions", "Export Data as JSON") %>
{dgettext("actions", "Export Data as JSON")}
</.link>
<.link
@ -152,7 +152,7 @@
class="mx-4 my-2 btn btn-alert"
data-confirm={dgettext("prompts", "Are you sure you want to delete your account?")}
>
<%= dgettext("actions", "Delete User") %>
{dgettext("actions", "Delete User")}
</.link>
</div>
</div>

View File

@ -4,7 +4,7 @@ defmodule CanneryWeb.ErrorHelpers do
"""
use PhoenixHTMLHelpers
import Phoenix.{Component, HTML.Form}
import Phoenix.Component
alias Ecto.Changeset
alias Phoenix.{HTML.Form, LiveView.Rendered}
@ -19,10 +19,10 @@ defmodule CanneryWeb.ErrorHelpers do
~H"""
<span
:for={error <- Keyword.get_values(@form.errors, @field)}
:if={used_input?(@form[@field])}
class={["invalid-feedback", @extra_class]}
phx-feedback-for={input_name(@form, @field)}
>
<%= translate_error(error) %>
{translate_error(error)}
</span>
"""
end

View File

@ -1,6 +1,6 @@
<div class="flex flex-col justify-center items-center text-center space-y-8">
<h2 class="title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<div class="flex flex-wrap justify-center items-center">
@ -21,13 +21,13 @@
)
}
>
<%= tag.name %>
{tag.name}
<i class="fa-fw fa-sm fas fa-trash"></i>
</.link>
<h2 :if={@container.tags |> Enum.empty?()} class="title text-xl text-primary-600">
<%= gettext("No tags") %>
<%= display_emoji("😔") %>
{gettext("No tags")}
{display_emoji("😔")}
</h2>
</div>
@ -43,17 +43,17 @@
phx-target={@myself}
phx-submit="save"
>
<%= select(f, :tag_id, tag_options(@tags, @container),
{select(f, :tag_id, tag_options(@tags, @container),
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") %>
)}
{error_tag(f, :tag_id, "col-span-3 text-center")}
<%= submit(dgettext("actions", "Add"),
{submit(dgettext("actions", "Add"),
class: "mx-auto btn btn-primary",
phx_disable_with: dgettext("prompts", "Adding...")
) %>
)}
</.form>
<% end %>
</div>

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
:let={f}
@ -15,50 +15,50 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :name,
{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,
phx_debounce: 300,
placeholder: gettext("My cool ammo can")
) %>
<%= error_tag(f, :name, "col-span-3 text-center") %>
)}
{error_tag(f, :name, "col-span-3 text-center")}
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :desc,
{label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600")}
{textarea(f, :desc,
class: "input input-primary col-span-2",
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") %>
)}
{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,
{label(f, :type, gettext("Type"), class: "title text-lg text-primary-600")}
{text_input(f, :type,
class: "input input-primary col-span-2",
maxlength: 255,
phx_debounce: 300,
placeholder: gettext("Magazine, Clip, Ammo Box, etc")
) %>
<%= error_tag(f, :type, "col-span-3 text-center") %>
)}
{error_tag(f, :type, "col-span-3 text-center")}
<%= label(f, :location, gettext("Location"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :location,
{label(f, :location, gettext("Location"), class: "title text-lg text-primary-600")}
{textarea(f, :location,
class: "input input-primary col-span-2",
id: "container-form-location",
phx_debounce: 300,
phx_update: "ignore",
placeholder: gettext("On the bookshelf")
) %>
<%= error_tag(f, :location, "col-span-3 text-center") %>
)}
{error_tag(f, :location, "col-span-3 text-center")}
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3",
phx_disable_with: dgettext("prompts", "Saving...")
) %>
)}
</.form>
</div>

View File

@ -1,23 +1,23 @@
<div class="flex flex-col justify-center items-center space-y-8">
<h1 class="text-2xl title title-primary-500">
<%= gettext("Containers") %>
{gettext("Containers")}
</h1>
<%= if @containers |> Enum.empty?() and @search |> is_nil() do %>
<h2 class="text-xl title text-primary-600">
<%= gettext("No containers") %>
<%= display_emoji("😔") %>
{gettext("No containers")}
{display_emoji("😔")}
</h2>
<.link patch={~p"/containers/new"} class="btn btn-primary">
<%= dgettext("actions", "Add your first container!") %>
{dgettext("actions", "Add your first container!")}
</.link>
<% else %>
<.link patch={~p"/containers/new"} class="btn btn-primary">
<%= dgettext("actions", "New Container") %>
{dgettext("actions", "New Container")}
</.link>
<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">
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
<.form
:let={f}
for={%{}}
@ -26,26 +26,26 @@
phx-submit="search"
class="flex items-center grow"
>
<%= text_input(f, :search_term,
{text_input(f, :search_term,
class: "grow input input-primary",
phx_debounce: 300,
placeholder: gettext("Search containers"),
role: "search",
value: @search
) %>
)}
</.form>
<.toggle_button action="toggle_table" value={@view_table}>
<span class="text-lg title text-primary-600">
<%= gettext("View as table") %>
{gettext("View as table")}
</span>
</.toggle_button>
</div>
<%= if @containers |> Enum.empty?() do %>
<h2 class="text-xl title text-primary-600">
<%= gettext("No containers") %>
<%= display_emoji("😔") %>
{gettext("No containers")}
{display_emoji("😔")}
</h2>
<% else %>
<%= if @view_table do %>
@ -57,16 +57,16 @@
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">
<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,
{if container.staged,
do: dgettext("actions", "Unstage"),
else: dgettext("actions", "Stage") %>
else: dgettext("actions", "Stage")}
</button>
</div>
</:range>

View File

@ -1,31 +1,31 @@
<div class="flex flex-col justify-center items-center space-y-4">
<h1 class="text-2xl title title-primary-500">
<%= @container.name %>
{@container.name}
</h1>
<span :if={@container.desc} class="text-lg rounded-lg title">
<%= gettext("Description:") %>
<%= @container.desc %>
{gettext("Description:")}
{@container.desc}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Type:") %>
<%= @container.type %>
{gettext("Type:")}
{@container.type}
</span>
<span :if={@container.location} class="text-lg rounded-lg title">
<%= gettext("Location:") %>
<%= @container.location %>
{gettext("Location:")}
{@container.location}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Packs:") %>
<%= @packs_count %>
{gettext("Packs:")}
{@packs_count}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Rounds:") %>
<%= @round_count %>
{gettext("Rounds:")}
{@round_count}
</span>
<div class="flex justify-center items-center space-x-4 text-primary-600">
@ -54,9 +54,9 @@
<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,
{if @container.staged,
do: dgettext("actions", "Unstage from range"),
else: dgettext("actions", "Stage for range") %>
else: dgettext("actions", "Stage for range")}
</button>
</div>
@ -65,12 +65,12 @@
<%= if @container.tags |> Enum.empty?() do %>
<div class="flex flex-row justify-center items-center space-x-4">
<h2 class="text-lg title text-primary-600">
<%= gettext("No tags for this container") %>
<%= display_emoji("😔") %>
{gettext("No tags for this container")}
{display_emoji("😔")}
</h2>
<.link patch={~p"/container/edit_tags/#{@container}"} class="btn btn-primary">
<%= dgettext("actions", "Why not add one?") %>
{dgettext("actions", "Why not add one?")}
</.link>
</div>
<% else %>
@ -96,9 +96,9 @@
phx-submit="change_class"
class="flex items-center"
>
<%= label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center") %>
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
<%= select(
{select(
f,
:class,
[
@ -107,14 +107,14 @@
{gettext("Shotgun"), :shotgun},
{gettext("Pistol"), :pistol}
],
class: "mx-2 my-1 min-w-md input input-primary",
class: "mx-2 my-1 min-w-20 input input-primary",
value: @class
) %>
)}
</.form>
<.toggle_button action="toggle_table" value={@view_table}>
<span class="text-lg title text-primary-600">
<%= gettext("View as table") %>
{gettext("View as table")}
</span>
</.toggle_button>
</div>
@ -122,7 +122,7 @@
<div class="p-4 w-full">
<%= if @packs |> Enum.empty?() do %>
<h2 class="mx-4 text-lg text-center title text-primary-600">
<%= gettext("No ammo in this container") %>
{gettext("No ammo in this container")}
</h2>
<% else %>
<%= if @view_table do %>
@ -135,7 +135,7 @@
>
<:type :let={%{name: type_name} = type}>
<.link navigate={~p"/type/#{type}"} class="link">
<%= type_name %>
{type_name}
</.link>
</:type>
<:actions :let={%{count: pack_count} = pack}>

View File

@ -7,11 +7,11 @@
/>
<h1 class="title text-primary-600 text-2xl">
<%= gettext("Welcome to Cannery") %>
{gettext("Welcome to Cannery")}
</h1>
<h2 class="title text-primary-600 text-lg">
<%= gettext("The self-hosted firearm tracker website") %>
{gettext("The self-hosted firearm tracker website")}
</h2>
<hr class="hr" />
@ -19,29 +19,29 @@
<ul class="flex flex-col space-y-4 text-center">
<li class="flex flex-col justify-center items-center space-y-2">
<b class="whitespace-nowrap">
<%= gettext("Easy to Use:") %>
{gettext("Easy to Use:")}
</b>
<p>
<%= gettext(
{gettext(
"Cannery lets you easily keep an eye on your ammo levels before and after range day"
) %>
)}
</p>
</li>
<li class="flex flex-col justify-center items-center space-y-2">
<b class="whitespace-nowrap">
<%= gettext("Secure:") %>
{gettext("Secure:")}
</b>
<p>
<%= gettext("Self-host your own instance, or use an instance from someone you trust.") %>
<%= gettext("Your data stays with you, period") %>
{gettext("Self-host your own instance, or use an instance from someone you trust.")}
{gettext("Your data stays with you, period")}
</p>
</li>
<li class="flex flex-col justify-center items-center space-y-2">
<b class="whitespace-nowrap">
<%= gettext("Simple:") %>
{gettext("Simple:")}
</b>
<p>
<%= gettext("Access from any internet-capable device") %>
{gettext("Access from any internet-capable device")}
</p>
</li>
</ul>
@ -50,17 +50,17 @@
<ul class="flex flex-col space-y-2 text-center justify-center">
<h2 class="title text-primary-600 text-lg">
<%= gettext("Instance Information") %>
{gettext("Instance Information")}
</h2>
<li class="flex flex-col justify-center space-x-2">
<b>
<%= gettext("Admins:") %>
{gettext("Admins:")}
</b>
<p>
<%= if @admins |> Enum.empty?() do %>
<.link href={~p"/users/register"} class="hover:underline">
<%= dgettext("prompts", "Register to setup Cannery") %>
{dgettext("prompts", "Register to setup Cannery")}
</.link>
<% else %>
<div class="flex flex-wrap justify-center space-x-2">
@ -69,7 +69,7 @@
class="hover:underline"
href={"mailto:#{email}"}
>
<%= email %>
{email}
</.link>
</div>
<% end %>
@ -77,17 +77,17 @@
</li>
<li class="flex flex-row justify-center space-x-2">
<b><%= gettext("Registration:") %></b>
<b>{gettext("Registration:")}</b>
<p>
<%= case Accounts.registration_mode() do
{case Accounts.registration_mode() do
:public -> gettext("Public Signups")
:invite_only -> gettext("Invite Only")
end %>
end}
</p>
</li>
<li class="flex flex-row justify-center items-center space-x-2">
<b><%= gettext("Version:") %></b>
<b>{gettext("Version:")}</b>
<.link
href="https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md"
class="flex flex-row justify-center items-center space-x-2 hover:underline"
@ -95,7 +95,7 @@
rel="noopener noreferrer"
>
<p>
<%= @version %>
{@version}
</p>
<i class="fas fa-md fa-info-circle"></i>
</.link>
@ -106,7 +106,7 @@
<ul class="flex flex-col space-y-2 text-center justify-center">
<h2 class="title text-primary-600 text-lg">
<%= gettext("Get involved!") %>
{gettext("Get involved!")}
</h2>
<li class="flex flex-col justify-center space-x-2">
@ -116,7 +116,7 @@
target="_blank"
rel="noopener noreferrer"
>
<p><%= gettext("View the source code") %></p>
<p>{gettext("View the source code")}</p>
<i class="fas fa-md fa-code"></i>
</.link>
</li>
@ -127,7 +127,7 @@
target="_blank"
rel="noopener noreferrer"
>
<p><%= gettext("Help translate") %></p>
<p>{gettext("Help translate")}</p>
<i class="fas fa-md fa-language"></i>
</.link>
</li>
@ -138,7 +138,7 @@
target="_blank"
rel="noopener noreferrer"
>
<p><%= gettext("Report bugs or request features") %></p>
<p>{gettext("Report bugs or request features")}</p>
<i class="fas fa-md fa-spider"></i>
</.link>
</li>

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
:let={f}
@ -15,29 +15,29 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :name, gettext("Name"),
{label(f, :name, gettext("Name"),
class: "title text-lg text-primary-600",
maxlength: 255
) %>
<%= text_input(f, :name,
)}
{text_input(f, :name,
class: "input input-primary col-span-2",
phx_debounce: 300
) %>
<%= error_tag(f, :name, "col-span-3") %>
)}
{error_tag(f, :name, "col-span-3")}
<%= label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2") %>
<%= error_tag(f, :uses_left, "col-span-3") %>
{label(f, :uses_left, gettext("Uses left"), class: "title text-lg text-primary-600")}
{number_input(f, :uses_left, min: 0, class: "input input-primary col-span-2")}
{error_tag(f, :uses_left, "col-span-3")}
<span class="col-span-3 text-primary-400 italic text-center">
<%= gettext(~s/Leave "Uses left" blank to make invite unlimited/) %>
{gettext(~s/Leave "Uses left" blank to make invite unlimited/)}
</span>
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3",
phx_disable_with: dgettext("prompts", "Saving...")
) %>
)}
</.form>
</div>

View File

@ -1,20 +1,20 @@
<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") %>
{gettext("Invites")}
</h1>
<%= if @invites |> Enum.empty?() do %>
<h1 class="text-xl title text-primary-600">
<%= gettext("No invites") %>
<%= display_emoji("😔") %>
{gettext("No invites")}
{display_emoji("😔")}
</h1>
<.link patch={~p"/invites/new"} class="btn btn-primary">
<%= dgettext("actions", "Invite someone new!") %>
{dgettext("actions", "Invite someone new!")}
</.link>
<% else %>
<.link patch={~p"/invites/new"} class="btn btn-primary">
<%= dgettext("actions", "Create Invite") %>
{dgettext("actions", "Create Invite")}
</.link>
<% end %>
@ -35,7 +35,7 @@
dgettext("actions", "Copy invite link for %{invite_name}", invite_name: invite.name)
}
>
<%= dgettext("actions", "Copy to clipboard") %>
{dgettext("actions", "Copy to clipboard")}
</button>
</form>
</:code_actions>
@ -72,7 +72,7 @@
phx-click={if invite.disabled_at, do: "enable_invite", else: "disable_invite"}
phx-value-id={invite.id}
>
<%= if invite.disabled_at, do: gettext("Enable"), else: gettext("Disable") %>
{if invite.disabled_at, do: gettext("Enable"), else: gettext("Disable")}
</.link>
<.link
@ -87,7 +87,7 @@
)
}
>
<%= dgettext("actions", "Set Unlimited") %>
{dgettext("actions", "Set Unlimited")}
</.link>
</.invite_card>
</div>
@ -96,7 +96,7 @@
<hr class="hr" />
<h1 class="text-2xl title text-primary-600">
<%= gettext("Admins") %>
{gettext("Admins")}
</h1>
<div class="flex flex-col justify-center items-stretch space-y-4">
@ -124,7 +124,7 @@
<hr class="hr" />
<h1 class="text-2xl title text-primary-600">
<%= gettext("Users") %>
{gettext("Users")}
</h1>
<div class="flex flex-col justify-center items-stretch space-y-4">

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
@ -16,11 +16,11 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
<%= select(
{label(f, :class, gettext("Class"), class: "title text-lg text-primary-600")}
{select(
f,
:class,
[
@ -31,86 +31,86 @@
],
class: "text-center col-span-2 input input-primary",
value: @class
) %>
<%= error_tag(f, :class, "col-span-3 text-center") %>
)}
{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),
{label(f, :type_id, gettext("Type"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :type_id, "col-span-3 text-center")}
<%= label(f, :count, gettext("Count"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :count,
{label(f, :count, gettext("Count"), class: "title text-lg text-primary-600")}
{number_input(f, :count,
class: "text-center col-span-2 input input-primary",
min: 0
) %>
<%= error_tag(f, :count, "col-span-3 text-center") %>
)}
{error_tag(f, :count, "col-span-3 text-center")}
<%= label(f, :price_paid, gettext("Price paid"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :price_paid,
{label(f, :price_paid, gettext("Price paid"), class: "title text-lg text-primary-600")}
{number_input(f, :price_paid,
step: 0.01,
class: "text-center col-span-2 input input-primary"
) %>
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
)}
{error_tag(f, :price_paid, "col-span-3 text-center")}
<%= label(f, :lot_number, gettext("Lot number"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :lot_number,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :price_paid, "col-span-3 text-center") %>
)}
{error_tag(f, :price_paid, "col-span-3 text-center")}
<%= label(f, :purchased_on, gettext("Purchased on"), class: "title text-lg text-primary-600") %>
<%= date_input(f, :purchased_on,
{label(f, :purchased_on, gettext("Purchased on"), class: "title text-lg text-primary-600")}
{date_input(f, :purchased_on,
class: "input input-primary col-span-2",
phx_update: "ignore",
value: @changeset |> Changeset.get_field(:purchased_on) || Date.utc_today()
) %>
<%= error_tag(f, :purchased_on, "col-span-3 text-center") %>
)}
{error_tag(f, :purchased_on, "col-span-3 text-center")}
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :notes,
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
{textarea(f, :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") %>
)}
{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),
{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",
id: "pack-form-container-select",
phx_hook: "SlimSelect"
) %>
<%= error_tag(f, :container_id, "col-span-3 text-center") %>
)}
{error_tag(f, :container_id, "col-span-3 text-center")}
<%= case @action do %>
<% action when action in [:new, :clone] -> %>
<hr class="hr col-span-3" />
<%= label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :multiplier,
{label(f, :multiplier, gettext("Copies"), class: "title text-lg text-primary-600")}
{number_input(f, :multiplier,
class: "text-center input input-primary",
value: 1,
phx_update: "ignore"
) %>
)}
<%= submit(dgettext("actions", "Create"),
{submit(dgettext("actions", "Create"),
phx_disable_with: dgettext("prompts", "Creating..."),
class: "mx-auto btn btn-primary"
) %>
)}
<%= error_tag(f, :multiplier, "col-span-3 text-center") %>
{error_tag(f, :multiplier, "col-span-3 text-center")}
<% :edit -> %>
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
phx_disable_with: dgettext("prompts", "Saving..."),
class: "mx-auto col-span-3 btn btn-primary"
) %>
)}
<% end %>
</.form>
</div>

View File

@ -1,44 +1,44 @@
<div class="flex flex-col justify-center items-center space-y-8">
<h1 class="text-2xl title title-primary-500">
<%= gettext("Ammo") %>
{gettext("Ammo")}
</h1>
<%= cond do %>
<% @containers_count == 0 -> %>
<div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %>
{dgettext("prompts", "You'll need to")}
</h2>
<.link navigate={~p"/containers/new"} class="btn btn-primary">
<%= dgettext("actions", "add a container first") %>
{dgettext("actions", "add a container first")}
</.link>
</div>
<% @types_count == 0 -> %>
<div class="flex justify-center items-center">
<h2 class="m-2 title text-md text-primary-600">
<%= dgettext("prompts", "You'll need to") %>
{dgettext("prompts", "You'll need to")}
</h2>
<.link navigate={~p"/catalog/new"} class="btn btn-primary">
<%= dgettext("actions", "add a type first") %>
{dgettext("actions", "add a type first")}
</.link>
</div>
<% @packs_count == 0 -> %>
<h2 class="text-xl title text-primary-600">
<%= gettext("No ammo") %>
<%= display_emoji("😔") %>
{gettext("No ammo")}
{display_emoji("😔")}
</h2>
<.link patch={~p"/ammo/new"} class="btn btn-primary">
<%= dgettext("actions", "Add your first box!") %>
{dgettext("actions", "Add your first box!")}
</.link>
<% true -> %>
<.link patch={~p"/ammo/new"} class="btn btn-primary">
<%= dgettext("actions", "Add Ammo") %>
{dgettext("actions", "Add Ammo")}
</.link>
<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">
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
<.form
:let={f}
for={%{}}
@ -47,11 +47,9 @@
phx-submit="change_class"
class="flex items-center"
>
<%= label(f, :class, gettext("Class"),
class: "title text-primary-600 text-lg text-center"
) %>
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
<%= select(
{select(
f,
:class,
[
@ -60,9 +58,9 @@
{gettext("Shotgun"), :shotgun},
{gettext("Pistol"), :pistol}
],
class: "mx-2 my-1 min-w-md input input-primary",
class: "mx-2 my-1 min-w-20 input input-primary",
value: @class
) %>
)}
</.form>
<.form
@ -73,26 +71,26 @@
phx-submit="search"
class="flex items-center grow"
>
<%= text_input(f, :search_term,
{text_input(f, :search_term,
class: "grow input input-primary",
phx_debounce: 300,
placeholder: gettext("Search ammo"),
role: "search",
value: @search
) %>
)}
</.form>
<.toggle_button action="toggle_show_used" value={@show_used}>
<span class="text-lg title text-primary-600">
<%= gettext("Show used") %>
{gettext("Show used")}
</span>
</.toggle_button>
</div>
<%= if @packs |> Enum.empty?() do %>
<h2 class="text-xl title text-primary-600">
<%= gettext("No Ammo") %>
<%= display_emoji("😔") %>
{gettext("No Ammo")}
{display_emoji("😔")}
</h2>
<% else %>
<.live_component
@ -104,7 +102,7 @@
>
<:type :let={%{name: type_name} = type}>
<.link navigate={~p"/type/#{type}"} class="link">
<%= type_name %>
{type_name}
</.link>
</:type>
<:range :let={pack}>
@ -113,18 +111,18 @@
patch={~p"/ammo/add_shot_record/#{pack}"}
class="mx-2 my-1 text-sm btn btn-primary"
>
<%= dgettext("actions", "Record shots") %>
{dgettext("actions", "Record shots")}
</.link>
</div>
</:range>
<:container :let={{pack, %{name: container_name} = container}}>
<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 %>
{container_name}
</.link>
<.link patch={~p"/ammo/move/#{pack}"} class="mx-2 my-1 text-sm btn btn-primary">
<%= dgettext("actions", "Move ammo") %>
{dgettext("actions", "Move ammo")}
</.link>
</div>
</:container>

View File

@ -1,47 +1,47 @@
<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 %>
{@pack.type.name}
</h1>
<div class="flex flex-col justify-center items-center space-y-2">
<span class="text-lg rounded-lg title">
<%= gettext("Count:") %>
<%= @pack.count %>
{gettext("Count:")}
{@pack.count}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Original count:") %>
<%= @original_count %>
{gettext("Original count:")}
{@original_count}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Percentage left:") %>
<%= gettext("%{percentage}%", percentage: @percentage_remaining) %>
{gettext("Percentage left:")}
{gettext("%{percentage}%", percentage: @percentage_remaining)}
</span>
<%= if @pack.notes do %>
<span class="text-lg rounded-lg title">
<%= gettext("Notes:") %>
<%= @pack.notes %>
{gettext("Notes:")}
{@pack.notes}
</span>
<% end %>
<span class="text-lg rounded-lg title">
<%= gettext("Purchased on:") %>
{gettext("Purchased on:")}
<.date id={"#{@pack.id}-purchased-on"} date={@pack.purchased_on} />
</span>
<%= if @pack.price_paid do %>
<span class="text-lg rounded-lg title">
<%= gettext("Original cost:") %>
<%= gettext("$%{amount}", amount: display_currency(@pack.price_paid)) %>
{gettext("Original cost:")}
{gettext("$%{amount}", amount: display_currency(@pack.price_paid))}
</span>
<span class="text-lg rounded-lg title">
<%= gettext("Current value:") %>
<%= gettext("$%{amount}",
{gettext("Current value:")}
{gettext("$%{amount}",
amount: display_currency(@pack.price_paid * @percentage_remaining / 100)
) %>
)}
</span>
<% end %>
</div>
@ -49,7 +49,7 @@
<div class="flex flex-col justify-center items-center">
<div class="flex flex-wrap justify-center items-center text-primary-600">
<.link navigate={~p"/type/#{@pack.type}"} class="mx-4 my-2 btn btn-primary">
<%= dgettext("actions", "View in Catalog") %>
{dgettext("actions", "View in Catalog")}
</.link>
<.link
@ -77,11 +77,11 @@
<div class="flex flex-wrap justify-center items-center text-primary-600">
<.link patch={~p"/ammo/show/move/#{@pack}"} class="btn btn-primary">
<%= dgettext("actions", "Move ammo") %>
{dgettext("actions", "Move ammo")}
</.link>
<.link patch={~p"/ammo/show/add_shot_record/#{@pack}"} class="mx-4 my-2 btn btn-primary">
<%= dgettext("actions", "Record shots") %>
{dgettext("actions", "Record shots")}
</.link>
</div>
</div>
@ -91,12 +91,12 @@
<div>
<%= if @container do %>
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
<%= gettext("Stored in") %>
{gettext("Stored in")}
</h1>
<.container_card container={@container} current_user={@current_user} />
<% else %>
<%= gettext("This ammo is not in a container") %>
{gettext("This ammo is not in a container")}
<% end %>
</div>
@ -104,7 +104,7 @@
<hr class="mb-4 w-full" />
<h1 class="px-4 py-2 mb-4 text-xl text-center rounded-lg title">
<%= gettext("Rounds used") %>
{gettext("Rounds used")}
</h1>
<.live_component

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
@ -16,35 +16,35 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :count, gettext("Shots fired"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :count,
{label(f, :count, gettext("Shots fired"), class: "title text-lg text-primary-600")}
{number_input(f, :count,
min: 1,
max: @shot_record.count + @pack.count,
class: "input input-primary col-span-2"
) %>
<%= error_tag(f, :count, "col-span-3") %>
)}
{error_tag(f, :count, "col-span-3")}
<%= label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :notes,
{label(f, :notes, gettext("Notes"), class: "title text-lg text-primary-600")}
{textarea(f, :notes,
class: "input input-primary col-span-2",
id: "shot-record-form-notes",
maxlength: 255,
phx_debounce: 300,
phx_update: "ignore",
placeholder: gettext("Really great weather")
) %>
<%= error_tag(f, :notes, "col-span-3") %>
)}
{error_tag(f, :notes, "col-span-3")}
<%= label(f, :date, gettext("Date"), class: "title text-lg text-primary-600") %>
<%= date_input(f, :date, class: "input input-primary col-span-2") %>
<%= error_tag(f, :notes, "col-span-3") %>
{label(f, :date, gettext("Date"), class: "title text-lg text-primary-600")}
{date_input(f, :date, class: "input input-primary col-span-2")}
{error_tag(f, :notes, "col-span-3")}
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3",
phx_disable_with: dgettext("prompts", "Saving...")
) %>
)}
</.form>
</div>

View File

@ -1,20 +1,20 @@
<div class="flex flex-col justify-center items-center space-y-8">
<h1 class="text-2xl title title-primary-500">
<%= gettext("Range day") %>
{gettext("Range day")}
</h1>
<%= if @containers |> Enum.empty?() do %>
<h1 class="text-xl title text-primary-600">
<%= gettext("No containers staged") %>
<%= display_emoji("😔") %>
{gettext("No containers staged")}
{display_emoji("😔")}
</h1>
<.link navigate={~p"/containers"} class="btn btn-primary">
<%= dgettext("actions", "Why not get some ready to shoot?") %>
{dgettext("actions", "Why not get some ready to shoot?")}
</.link>
<% else %>
<.link navigate={~p"/containers"} class="btn btn-primary">
<%= dgettext("actions", "Stage containers") %>
{dgettext("actions", "Stage containers")}
</.link>
<div class="flex flex-row flex-wrap justify-center items-stretch w-full">
@ -30,9 +30,9 @@
phx-click="toggle_staged"
phx-value-container_id={container_id}
>
<%= if container.staged,
{if container.staged,
do: dgettext("actions", "Unstage"),
else: dgettext("actions", "Stage") %>
else: dgettext("actions", "Stage")}
</button>
</div>
</.container_card>
@ -51,7 +51,7 @@
container={Map.fetch!(@containers, container_id)}
>
<.link patch={~p"/range/add_shot_record/#{pack}"} class="btn btn-primary">
<%= dgettext("actions", "Record shots") %>
{dgettext("actions", "Record shots")}
</.link>
</.pack_card>
</div>
@ -61,12 +61,12 @@
<%= if @shot_record_count == 0 do %>
<h1 class="text-xl title text-primary-600">
<%= gettext("No shots recorded") %>
<%= display_emoji("😔") %>
{gettext("No shots recorded")}
{display_emoji("😔")}
</h1>
<% else %>
<h1 class="text-2xl title text-primary-600">
<%= gettext("Shot log") %>
{gettext("Shot log")}
</h1>
<canvas
@ -80,10 +80,10 @@
aria-label={gettext("Rounds shot chart")}
role="img"
>
<%= dgettext("errors", "Your browser does not support the canvas element.") %>
{dgettext("errors", "Your browser does not support the canvas element.")}
</canvas>
<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">
<div class="flex flex-col flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
<.form
:let={f}
for={%{}}
@ -92,11 +92,9 @@
phx-submit="change_class"
class="flex items-center"
>
<%= label(f, :class, gettext("Class"),
class: "title text-primary-600 text-lg text-center"
) %>
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
<%= select(
{select(
f,
:class,
[
@ -105,9 +103,9 @@
{gettext("Shotgun"), :shotgun},
{gettext("Pistol"), :pistol}
],
class: "mx-2 my-1 min-w-md input input-primary",
class: "mx-2 my-1 min-w-20 input input-primary",
value: @class
) %>
)}
</.form>
<.form
@ -118,13 +116,13 @@
phx-submit="search"
class="flex items-center grow"
>
<%= text_input(f, :search_term,
{text_input(f, :search_term,
class: "grow input input-primary",
phx_debounce: 300,
placeholder: gettext("Search shot records"),
role: "search",
value: @search
) %>
)}
</.form>
<.form
@ -135,9 +133,9 @@
phx-submit="change_dates"
class="flex items-center"
>
<%= label(f, :dates_start, gettext("Dates"),
{label(f, :dates_start, gettext("Dates"),
class: "title text-primary-600 text-lg text-center"
) %>
)}
<.date_range name="dates" />
</.form>
@ -145,8 +143,8 @@
<%= if @shot_records |> Enum.empty?() do %>
<h1 class="text-xl title text-primary-600">
<%= gettext("No shots recorded") %>
<%= display_emoji("😔") %>
{gettext("No shots recorded")}
{display_emoji("😔")}
</h1>
<% else %>
<.live_component

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
:let={f}
@ -15,32 +15,32 @@
:if={@changeset.action && not @changeset.valid?}
class="invalid-feedback col-span-3 text-center"
>
<%= changeset_errors(@changeset) %>
{changeset_errors(@changeset)}
</div>
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :name,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :name, "col-span-3") %>
)}
{error_tag(f, :name, "col-span-3")}
<%= label(f, :bg_color, gettext("Background color"), class: "title text-lg text-primary-600") %>
{label(f, :bg_color, gettext("Background color"), class: "title text-lg text-primary-600")}
<span id="tag-bg-color-input" class="mx-auto col-span-2" phx-update="ignore">
<%= color_input(f, :bg_color) %>
{color_input(f, :bg_color)}
</span>
<%= error_tag(f, :bg_color, "col-span-3") %>
{error_tag(f, :bg_color, "col-span-3")}
<%= label(f, :text_color, gettext("Text color"), class: "title text-lg text-primary-600") %>
{label(f, :text_color, gettext("Text color"), class: "title text-lg text-primary-600")}
<span id="tag-text-color-input" class="mx-auto col-span-2" phx-update="ignore">
<%= color_input(f, :text_color) %>
{color_input(f, :text_color)}
</span>
<%= error_tag(f, :text_color, "col-span-3") %>
{error_tag(f, :text_color, "col-span-3")}
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
class: "mx-auto btn btn-primary col-span-3",
phx_disable_with: dgettext("prompts", "Saving...")
) %>
)}
</.form>
</div>

View File

@ -1,47 +1,47 @@
<div class="flex flex-col space-y-8 justify-center items-center">
<h1 class="title text-2xl title-primary-500">
<%= gettext("Tags") %>
<div class="flex flex-col justify-center items-center space-y-8">
<h1 class="text-2xl title title-primary-500">
{gettext("Tags")}
</h1>
<p class="title text-md text-primary-600">
<%= gettext("Tags can be added to your containers to help you organize") %>
{gettext("Tags can be added to your containers to help you organize")}
</p>
<%= if @tags |> Enum.empty?() and @search |> is_nil() do %>
<h2 class="title text-xl text-primary-600">
<%= gettext("No tags") %>
<%= display_emoji("😔") %>
<h2 class="text-xl title text-primary-600">
{gettext("No tags")}
{display_emoji("😔")}
</h2>
<.link patch={~p"/tags/new"} class="btn btn-primary">
<%= dgettext("actions", "Make your first tag!") %>
{dgettext("actions", "Make your first tag!")}
</.link>
<% else %>
<.link patch={~p"/tags/new"} class="btn btn-primary">
<%= dgettext("actions", "New Tag") %>
{dgettext("actions", "New Tag")}
</.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 flex-wrap justify-center items-center space-y-4 w-full 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,
{text_input(f, :search_term,
class: "grow input input-primary",
phx_debounce: 300,
placeholder: gettext("Search tags"),
role: "search",
value: @search
) %>
)}
</.form>
</div>
<%= if @tags |> Enum.empty?() do %>
<h2 class="title text-xl text-primary-600">
<%= gettext("No tags") %>
<%= display_emoji("😔") %>
<h2 class="text-xl title text-primary-600">
{gettext("No tags")}
{display_emoji("😔")}
</h2>
<% else %>
<div class="flex flex-row flex-wrap justify-center items-stretch">

View File

@ -1,6 +1,6 @@
<div>
<h2 class="mb-8 text-center title text-xl text-primary-600">
<%= @title %>
{@title}
</h2>
<.form
:let={f}
@ -15,11 +15,11 @@
: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.") %>
{dgettext("errors", "Oops, something went wrong! Please check the errors below.")}
</div>
<%= label(f, :class, gettext("Class"), class: "title text-lg text-primary-600") %>
<%= select(
{label(f, :class, gettext("Class"), class: "title text-lg text-primary-600")}
{select(
f,
:class,
[
@ -29,44 +29,44 @@
],
class: "text-center col-span-2 input input-primary",
maxlength: 255
) %>
<%= error_tag(f, :class, "col-span-3 text-center") %>
)}
{error_tag(f, :class, "col-span-3 text-center")}
<%= label(f, :name, gettext("Name"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :name,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :name, "col-span-3 text-center") %>
)}
{error_tag(f, :name, "col-span-3 text-center")}
<%= label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600") %>
<%= textarea(f, :desc,
{label(f, :desc, gettext("Description"), class: "title text-lg text-primary-600")}
{textarea(f, :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") %>
)}
{error_tag(f, :desc, "col-span-3 text-center")}
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Dimensions") %>
{gettext("Dimensions")}
</h2>
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
<%= label(f, :cartridge, gettext("Cartridge"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :cartridge,
{label(f, :cartridge, gettext("Cartridge"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :cartridge, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :cartridge, value: nil) %>
{hidden_input(f, :cartridge, value: nil)}
<% end %>
<%= label(
{label(
f,
:caliber,
if(Changeset.get_field(@changeset, :class) == :shotgun,
@ -74,66 +74,62 @@
else: gettext("Caliber")
),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :caliber,
)}
{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") %>
)}
{error_tag(f, :caliber, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
<%= label(f, :unfired_length, gettext("Unfired shell length"),
{label(f, :unfired_length, gettext("Unfired shell length"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :unfired_length,
)}
{text_input(f, :unfired_length,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :unfired_length, "col-span-3 text-center") %>
)}
{error_tag(f, :unfired_length, "col-span-3 text-center")}
<%= label(f, :brass_height, gettext("Brass height"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :brass_height,
{label(f, :brass_height, gettext("Brass height"), class: "title text-lg text-primary-600")}
{text_input(f, :brass_height,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :brass_height, "col-span-3 text-center") %>
)}
{error_tag(f, :brass_height, "col-span-3 text-center")}
<%= label(f, :chamber_size, gettext("Chamber size"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :chamber_size,
{label(f, :chamber_size, gettext("Chamber size"), class: "title text-lg text-primary-600")}
{text_input(f, :chamber_size,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :chamber_size, "col-span-3 text-center") %>
)}
{error_tag(f, :chamber_size, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :unfired_length, value: nil) %>
<%= hidden_input(f, :brass_height, value: nil) %>
<%= hidden_input(f, :chamber_size, value: nil) %>
{hidden_input(f, :unfired_length, value: nil)}
{hidden_input(f, :brass_height, value: nil)}
{hidden_input(f, :chamber_size, value: nil)}
<% end %>
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Projectile") %>
{gettext("Projectile")}
</h2>
<%= label(f, :grains, gettext("Grains"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :grains,
{label(f, :grains, gettext("Grains"), class: "title text-lg text-primary-600")}
{number_input(f, :grains,
step: "1",
class: "text-center col-span-2 input input-primary",
min: 1
) %>
<%= error_tag(f, :grains, "col-span-3 text-center") %>
)}
{error_tag(f, :grains, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
<%= label f, :bullet_type, class: "flex title text-lg text-primary-600 space-x-2" do %>
<p><%= gettext("Bullet type") %></p>
<p>{gettext("Bullet type")}</p>
<.link
href="https://shootersreference.com/reloadingdata/bullet_abbreviations/"
@ -144,18 +140,18 @@
<i class="fas fa-md fa-external-link-alt"></i>
</.link>
<% end %>
<%= text_input(f, :bullet_type,
{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") %>
)}
{error_tag(f, :bullet_type, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :bullet_type, value: nil) %>
{hidden_input(f, :bullet_type, value: nil)}
<% end %>
<%= label(
{label(
f,
:bullet_core,
if(Changeset.get_field(@changeset, :class) == :shotgun,
@ -163,229 +159,225 @@
else: gettext("Bullet core")
),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :bullet_core,
)}
{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") %>
)}
{error_tag(f, :bullet_core, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
<%= label(f, :jacket_type, gettext("Jacket type"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :jacket_type,
{label(f, :jacket_type, gettext("Jacket type"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :jacket_type, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :jacket_type, value: nil) %>
{hidden_input(f, :jacket_type, value: nil)}
<% end %>
<%= label(f, :case_material, gettext("Case material"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :case_material,
{label(f, :case_material, gettext("Case material"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :case_material, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
<%= label(f, :wadding, gettext("Wadding"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :wadding,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :wadding, "col-span-3 text-center") %>
)}
{error_tag(f, :wadding, "col-span-3 text-center")}
<%= label(f, :shot_type, gettext("Shot type"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :shot_type,
{label(f, :shot_type, gettext("Shot type"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :shot_type, "col-span-3 text-center")}
<%= label(f, :shot_material, gettext("Shot material"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :shot_material,
{label(f, :shot_material, gettext("Shot material"), class: "title text-lg text-primary-600")}
{text_input(f, :shot_material,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :shot_material, "col-span-3 text-center") %>
)}
{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,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :shot_size, "col-span-3 text-center") %>
)}
{error_tag(f, :shot_size, "col-span-3 text-center")}
<%= label(f, :load_grains, gettext("Load grains"), class: "title text-lg text-primary-600") %>
<%= number_input(f, :load_grains,
{label(f, :load_grains, gettext("Load grains"), class: "title text-lg text-primary-600")}
{number_input(f, :load_grains,
step: "1",
class: "text-center col-span-2 input input-primary",
min: 1
) %>
<%= error_tag(f, :load_grains, "col-span-3 text-center") %>
)}
{error_tag(f, :load_grains, "col-span-3 text-center")}
<%= label(f, :shot_charge_weight, gettext("Shot charge weight"),
{label(f, :shot_charge_weight, gettext("Shot charge weight"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :shot_charge_weight,
)}
{text_input(f, :shot_charge_weight,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :shot_charge_weight, "col-span-3 text-center") %>
)}
{error_tag(f, :shot_charge_weight, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :wadding, value: nil) %>
<%= hidden_input(f, :shot_type, value: nil) %>
<%= hidden_input(f, :shot_material, value: nil) %>
<%= hidden_input(f, :shot_size, value: nil) %>
<%= hidden_input(f, :load_grains, value: nil) %>
<%= hidden_input(f, :shot_charge_weight, value: nil) %>
{hidden_input(f, :wadding, value: nil)}
{hidden_input(f, :shot_type, value: nil)}
{hidden_input(f, :shot_material, value: nil)}
{hidden_input(f, :shot_size, value: nil)}
{hidden_input(f, :load_grains, value: nil)}
{hidden_input(f, :shot_charge_weight, value: nil)}
<% end %>
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Powder") %>
{gettext("Powder")}
</h2>
<%= label(f, :powder_type, gettext("Powder type"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :powder_type,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :powder_type, "col-span-3 text-center") %>
)}
{error_tag(f, :powder_type, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
<%= label(f, :powder_grains_per_charge, gettext("Powder grains per charge"),
{label(f, :powder_grains_per_charge, gettext("Powder grains per charge"),
class: "title text-lg text-primary-600"
) %>
<%= number_input(f, :powder_grains_per_charge,
)}
{number_input(f, :powder_grains_per_charge,
step: "1",
class: "text-center col-span-2 input input-primary",
min: 1
) %>
<%= error_tag(f, :powder_grains_per_charge, "col-span-3 text-center") %>
)}
{error_tag(f, :powder_grains_per_charge, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :powder_grains_per_charge, value: nil) %>
{hidden_input(f, :powder_grains_per_charge, value: nil)}
<% end %>
<%= label(f, :pressure, gettext("Pressure"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :pressure,
{label(f, :pressure, gettext("Pressure"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :pressure, "col-span-3 text-center")}
<%= if Changeset.get_field(@changeset, :class) == :shotgun do %>
<%= label(f, :dram_equivalent, gettext("Dram equivalent"),
{label(f, :dram_equivalent, gettext("Dram equivalent"),
class: "title text-lg text-primary-600"
) %>
<%= text_input(f, :dram_equivalent,
)}
{text_input(f, :dram_equivalent,
class: "text-center col-span-2 input input-primary",
maxlength: 255,
phx_debounce: 300
) %>
<%= error_tag(f, :dram_equivalent, "col-span-3 text-center") %>
)}
{error_tag(f, :dram_equivalent, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :dram_equivalent, value: nil) %>
{hidden_input(f, :dram_equivalent, value: nil)}
<% end %>
<%= if Changeset.get_field(@changeset, :class) in [:rifle, :pistol] do %>
<%= label(f, :muzzle_velocity, gettext("Muzzle velocity"),
{label(f, :muzzle_velocity, gettext("Muzzle velocity"),
class: "title text-lg text-primary-600"
) %>
<%= number_input(f, :muzzle_velocity,
)}
{number_input(f, :muzzle_velocity,
step: "1",
class: "text-center col-span-2 input input-primary",
min: 1
) %>
<%= error_tag(f, :muzzle_velocity, "col-span-3 text-center") %>
)}
{error_tag(f, :muzzle_velocity, "col-span-3 text-center")}
<% else %>
<%= hidden_input(f, :muzzle_velocity, value: nil) %>
{hidden_input(f, :muzzle_velocity, value: nil)}
<% end %>
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Primer") %>
{gettext("Primer")}
</h2>
<%= label(f, :primer_type, gettext("Primer type"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :primer_type,
{label(f, :primer_type, gettext("Primer type"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :primer_type, "col-span-3 text-center")}
<%= label(f, :firing_type, gettext("Firing type"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :firing_type,
{label(f, :firing_type, gettext("Firing type"), class: "title text-lg text-primary-600")}
{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") %>
)}
{error_tag(f, :firing_type, "col-span-3 text-center")}
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Attributes") %>
{gettext("Attributes")}
</h2>
<%= label(f, :tracer, gettext("Tracer"), class: "title text-lg text-primary-600") %>
<%= checkbox(f, :tracer, class: "text-center col-span-2 checkbox") %>
<%= error_tag(f, :tracer, "col-span-3 text-center") %>
{label(f, :tracer, gettext("Tracer"), class: "title text-lg text-primary-600")}
{checkbox(f, :tracer, class: "text-center col-span-2 checkbox")}
{error_tag(f, :tracer, "col-span-3 text-center")}
<%= label(f, :incendiary, gettext("Incendiary"), class: "title text-lg text-primary-600") %>
<%= checkbox(f, :incendiary, class: "text-center col-span-2 checkbox") %>
<%= error_tag(f, :incendiary, "col-span-3 text-center") %>
{label(f, :incendiary, gettext("Incendiary"), class: "title text-lg text-primary-600")}
{checkbox(f, :incendiary, class: "text-center col-span-2 checkbox")}
{error_tag(f, :incendiary, "col-span-3 text-center")}
<%= label(f, :blank, gettext("Blank"), class: "title text-lg text-primary-600") %>
<%= checkbox(f, :blank, class: "text-center col-span-2 checkbox") %>
<%= error_tag(f, :blank, "col-span-3 text-center") %>
{label(f, :blank, gettext("Blank"), class: "title text-lg text-primary-600")}
{checkbox(f, :blank, class: "text-center col-span-2 checkbox")}
{error_tag(f, :blank, "col-span-3 text-center")}
<%= label(f, :corrosive, gettext("Corrosive"), class: "title text-lg text-primary-600") %>
<%= checkbox(f, :corrosive, class: "text-center col-span-2 checkbox") %>
<%= error_tag(f, :corrosive, "col-span-3 text-center") %>
{label(f, :corrosive, gettext("Corrosive"), class: "title text-lg text-primary-600")}
{checkbox(f, :corrosive, class: "text-center col-span-2 checkbox")}
{error_tag(f, :corrosive, "col-span-3 text-center")}
<h2 class="text-center title text-lg text-primary-600 col-span-3">
<%= gettext("Manufacturer") %>
{gettext("Manufacturer")}
</h2>
<%= label(f, :manufacturer, gettext("Manufacturer"), class: "title text-lg text-primary-600") %>
<%= text_input(f, :manufacturer,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :manufacturer, "col-span-3 text-center") %>
)}
{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,
{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,
phx_debounce: 300
) %>
<%= error_tag(f, :upc, "col-span-3 text-center") %>
)}
{error_tag(f, :upc, "col-span-3 text-center")}
<%= submit(dgettext("actions", "Save"),
{submit(dgettext("actions", "Save"),
phx_disable_with: dgettext("prompts", "Saving..."),
class: "mx-auto col-span-3 btn btn-primary"
) %>
)}
</.form>
</div>

View File

@ -1,23 +1,23 @@
<div class="flex flex-col space-y-8 justify-center items-center">
<h1 class="title text-2xl title-primary-500">
<%= gettext("Catalog") %>
<div class="flex flex-col justify-center items-center space-y-8">
<h1 class="text-2xl title title-primary-500">
{gettext("Catalog")}
</h1>
<%= if @types_count == 0 do %>
<h2 class="title text-xl text-primary-600">
<%= gettext("No Types") %>
<%= display_emoji("😔") %>
<h2 class="text-xl title text-primary-600">
{gettext("No Types")}
{display_emoji("😔")}
</h2>
<.link patch={~p"/catalog/new"} class="btn btn-primary">
<%= dgettext("actions", "Add your first type!") %>
{dgettext("actions", "Add your first type!")}
</.link>
<% else %>
<.link patch={~p"/catalog/new"} class="btn btn-primary">
<%= dgettext("actions", "New Type") %>
{dgettext("actions", "New Type")}
</.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 flex-wrap justify-center items-center space-y-4 w-full sm:flex-row sm:space-y-0 sm:space-x-4">
<.form
:let={f}
for={%{}}
@ -26,11 +26,9 @@
phx-submit="change_class"
class="flex items-center"
>
<%= label(f, :class, gettext("Class"),
class: "title text-primary-600 text-lg text-center"
) %>
{label(f, :class, gettext("Class"), class: "title text-primary-600 text-lg text-center")}
<%= select(
{select(
f,
:class,
[
@ -39,9 +37,9 @@
{gettext("Shotgun"), :shotgun},
{gettext("Pistol"), :pistol}
],
class: "mx-2 my-1 min-w-md input input-primary",
class: "mx-2 my-1 min-w-20 input input-primary",
value: @class
) %>
)}
</.form>
<.form
@ -50,28 +48,28 @@
as={:search}
phx-change="search"
phx-submit="search"
class="grow flex items-center"
class="flex items-center grow"
>
<%= text_input(f, :search_term,
{text_input(f, :search_term,
class: "grow input input-primary",
phx_debounce: 300,
placeholder: gettext("Search catalog"),
role: "search",
value: @search
) %>
)}
</.form>
<.toggle_button action="toggle_show_used" value={@show_used}>
<span class="title text-lg text-primary-600">
<%= gettext("Show used") %>
<span class="text-lg title text-primary-600">
{gettext("Show used")}
</span>
</.toggle_button>
</div>
<%= if @types |> Enum.empty?() do %>
<h2 class="title text-xl text-primary-600">
<%= gettext("No Types") %>
<%= display_emoji("😔") %>
<h2 class="text-xl title text-primary-600">
{gettext("No Types")}
{display_emoji("😔")}
</h2>
<% else %>
<.live_component
@ -84,7 +82,7 @@
class={@class}
>
<:actions :let={type}>
<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
navigate={~p"/type/#{type}"}
class="text-primary-600 link"

View File

@ -1,18 +1,16 @@
<div class="space-y-4 flex flex-col justify-center items-center">
<h1 class="title text-2xl title-primary-500">
<%= @type.name %>
<div class="flex flex-col justify-center items-center space-y-4">
<h1 class="text-2xl title title-primary-500">
{@type.name}
</h1>
<span
:if={@type.desc}
class="max-w-2xl w-full px-8 py-4 rounded-lg
text-center title text-lg
border border-primary-600"
class="px-8 py-4 w-full max-w-2xl text-lg text-center rounded-lg border title border-primary-600"
>
<%= @type.desc %>
{@type.desc}
</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"/type/#{@type}/edit"}
class="text-primary-600 link"
@ -41,36 +39,36 @@
<hr class="hr" />
<%= if @type.class || @custom_fields? do %>
<div class="grid sm:grid-cols-2 gap-4 text-center justify-center items-center">
<h3 class="title text-lg">
<%= gettext("Class") %>
<div class="grid gap-4 justify-center items-center text-center sm:grid-cols-2">
<h3 class="text-lg title">
{gettext("Class")}
</h3>
<span class="text-primary-600">
<%= case @type.class do %>
<% :shotgun -> %>
<%= gettext("Shotgun") %>
{gettext("Shotgun")}
<% :rifle -> %>
<%= gettext("Rifle") %>
{gettext("Rifle")}
<% :pistol -> %>
<%= gettext("Pistol") %>
{gettext("Pistol")}
<% _ -> %>
<%= gettext("None specified") %>
{gettext("None specified")}
<% end %>
</span>
<%= for %{label: label, key: key, type: type} <- @fields_to_display do %>
<%= if @type |> Map.get(key) do %>
<h3 class="title text-lg">
<%= label %>
<h3 class="text-lg title">
{label}
</h3>
<span class="text-primary-600">
<%= case type do %>
<% :boolean -> %>
<%= @type |> Map.get(key) |> humanize() %>
{@type |> Map.get(key) |> humanize()}
<% _ -> %>
<%= @type |> Map.get(key) %>
{@type |> Map.get(key)}
<% end %>
</span>
<% end %>
@ -80,61 +78,61 @@
<hr class="hr" />
<% end %>
<div class="grid sm:grid-cols-2 gap-4 text-center justify-center items-center">
<h3 class="title text-lg">
<%= gettext("Rounds:") %>
<div class="grid gap-4 justify-center items-center text-center sm:grid-cols-2">
<h3 class="text-lg title">
{gettext("Rounds:")}
</h3>
<span class="text-primary-600">
<%= @rounds %>
{@rounds}
</span>
<%= if @show_used do %>
<h3 class="title text-lg">
<%= gettext("Used rounds:") %>
<h3 class="text-lg title">
{gettext("Used rounds:")}
</h3>
<span class="text-primary-600">
<%= @used_rounds %>
{@used_rounds}
</span>
<h3 class="title text-lg">
<%= gettext("Total ever rounds:") %>
<h3 class="text-lg title">
{gettext("Total ever rounds:")}
</h3>
<span class="text-primary-600">
<%= @historical_round_count %>
{@historical_round_count}
</span>
<% end %>
<h3 class="title text-lg">
<%= gettext("Packs:") %>
<h3 class="text-lg title">
{gettext("Packs:")}
</h3>
<span class="text-primary-600">
<%= @packs_count %>
{@packs_count}
</span>
<%= if @show_used do %>
<h3 class="title text-lg">
<%= gettext("Used packs:") %>
<h3 class="text-lg title">
{gettext("Used packs:")}
</h3>
<span class="text-primary-600">
<%= @used_packs_count %>
{@used_packs_count}
</span>
<h3 class="title text-lg">
<%= gettext("Total ever packs:") %>
<h3 class="text-lg title">
{gettext("Total ever packs:")}
</h3>
<span class="text-primary-600">
<%= @historical_packs_count %>
{@historical_packs_count}
</span>
<% end %>
<h3 class="title text-lg">
<%= gettext("Added on:") %>
<h3 class="text-lg title">
{gettext("Added on:")}
</h3>
<span class="text-primary-600">
@ -142,16 +140,16 @@
</span>
<%= if @avg_cost_per_round do %>
<h3 class="title text-lg">
<%= gettext("Average CPR") %>:
<h3 class="text-lg title">
{gettext("Average CPR")}:
</h3>
<span class="text-primary-600">
<%= gettext("$%{amount}", amount: display_currency(@avg_cost_per_round)) %>
{gettext("$%{amount}", amount: display_currency(@avg_cost_per_round))}
</span>
<% else %>
<h3 class="mx-8 my-4 title text-lg text-primary-600 col-span-2">
<%= gettext("No cost information") %>
<h3 class="col-span-2 mx-8 my-4 text-lg title text-primary-600">
{gettext("No cost information")}
</h3>
<% end %>
</div>
@ -160,23 +158,23 @@
<div class="flex justify-center items-center space-x-4">
<.toggle_button action="toggle_show_used" value={@show_used}>
<span class="title text-lg text-primary-600">
<%= gettext("Show used") %>
<span class="text-lg title text-primary-600">
{gettext("Show used")}
</span>
</.toggle_button>
<.toggle_button action="toggle_table" value={@view_table}>
<span class="title text-lg text-primary-600">
<%= gettext("View as table") %>
<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="px-4 title text-lg text-primary-600">
<%= gettext("No ammo for this type") %>
<%= display_emoji("😔") %>
<h2 class="px-4 text-lg title text-primary-600">
{gettext("No ammo for this type")}
{display_emoji("😔")}
</h2>
<% else %>
<%= if @view_table do %>
@ -189,11 +187,11 @@
>
<:container :let={{_pack, %{name: container_name} = container}}>
<.link navigate={~p"/container/#{container}"} class="mx-2 my-1 link">
<%= container_name %>
{container_name}
</.link>
</: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"

35
mix.exs
View File

@ -5,7 +5,7 @@ defmodule Cannery.MixProject do
[
app: :cannery,
version: "0.9.13",
elixir: "1.18.1",
elixir: "1.18.3",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
@ -46,13 +46,15 @@ defmodule Cannery.MixProject do
# Type `mix help deps` for examples and options.
defp deps do
[
{:bandit, "~> 1.5"},
{:bcrypt_elixir, "~> 3.0"},
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false},
{:dns_cluster, "~> 0.2"},
{:ecto_psql_extras, "~> 0.6"},
{:ecto_sql, "~> 3.6"},
{:eqrcode, "~> 0.1.10"},
# {:esbuild, "~> 0.3", runtime: Mix.env() == :dev},
{:eqrcode, "~> 0.2"},
{:esbuild, "~> 0.8", runtime: Mix.env() == :dev},
{:ex_doc, "~> 0.27", only: :dev, runtime: false},
{:floki, ">= 0.30.0", only: :test},
{:gen_smtp, "~> 1.0"},
@ -62,14 +64,15 @@ defmodule Cannery.MixProject do
{:phoenix_ecto, "~> 4.4"},
{:phoenix_html_helpers, "~> 1.0"},
{:phoenix_html, "~> 4.0"},
{:phoenix_live_dashboard, "~> 0.8"},
{:phoenix_live_dashboard, "~> 0.8.3"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:phoenix_live_view, "~> 0.20.0"},
{:phoenix, "~> 1.7.11"},
{:phoenix_live_view, "~> 1.0.0"},
{:phoenix, "~> 1.7.19"},
{:plug_cowboy, "~> 2.7"},
{:postgrex, ">= 0.0.0"},
{:swoosh, "~> 1.6"},
{:telemetry_metrics, "~> 0.6"},
{:tailwind, "~> 0.2", runtime: Mix.env() == :dev},
{:telemetry_metrics, "~> 1.1"},
{:telemetry_poller, "~> 1.0"}
]
end
@ -82,17 +85,23 @@ defmodule Cannery.MixProject do
# See the documentation for `Mix` for more info on aliases.
defp aliases do
[
setup: ["deps.get", "compile", "ecto.setup", "cmd npm install --prefix assets"],
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
"assets.build": ["tailwind cannery", "esbuild cannery"],
"assets.deploy": [
"tailwind cannery --minify",
"esbuild cannery --minify",
"phx.digest"
],
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
"ecto.reset": ["ecto.drop", "ecto.setup"],
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
"format.all": [
"cmd npm run format --prefix assets",
"assets.build",
"format",
"gettext.extract --merge",
"gettext.merge --no-fuzzy priv/gettext"
],
"test.all": [
"cmd npm run test --prefix assets",
"assets.build",
"dialyzer",
"credo --strict",
"format --check-formatted",
@ -101,7 +110,9 @@ defmodule Cannery.MixProject do
"ecto.create --quiet",
"ecto.migrate --quiet",
"test"
]
],
setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"],
test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"]
]
end
end

View File

@ -1,54 +1,60 @@
%{
"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"},
"bandit": {:hex, :bandit, "1.6.10", "ec218849b753b84ed52fb7f19f42bec4ab8b1ff3f74806c6525e4b53eafcad60", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "5c5e1d155cbdf98610197d2814934ef431e70b5fd4f487b19c341d9b49cc19a2"},
"bcrypt_elixir": {:hex, :bcrypt_elixir, "3.2.1", "e361261a0401d82dadc1ab7b969f91d250bf7577283e933fe8c5b72f8f5b3c46", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "81170177d5c2e280d12141a0b9d9e299bf731535e2d959982bdcd4cfe3c82865"},
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
"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"},
"castore": {:hex, :castore, "1.0.12", "053f0e32700cbec356280c0e835df425a3be4bc1e0627b714330ad9d0f05497f", [:mix], [], "hexpm", "3dca286b2186055ba0c9449b4e95b97bf1b57b47c1f2644555879e659960c224"},
"comeonin": {:hex, :comeonin, "5.5.1", "5113e5f3800799787de08a6e0db307133850e635d34e9fab23c70b6501669510", [:mix], [], "hexpm", "65aac8f19938145377cee73973f192c5645873dcf550a8a6b18187d17c13ccdb"},
"cowboy": {:hex, :cowboy, "2.13.0", "09d770dd5f6a22cc60c071f432cd7cb87776164527f205c5a6b0f24ff6b38990", [:make, :rebar3], [{:cowlib, ">= 2.14.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, ">= 1.8.0 and < 3.0.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "e724d3a70995025d654c1992c7b11dbfea95205c047d86ff9bf1cda92ddc5614"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
"cowlib": {:hex, :cowlib, "2.13.0", "db8f7505d8332d98ef50a3ef34b34c1afddec7506e4ee4dd4a3a266285d282ca", [:make, :rebar3], [], "hexpm", "e1e1284dc3fc030a64b1ad0d8382ae7e99da46c3246b815318a4b848873800a4"},
"cowlib": {:hex, :cowlib, "2.14.0", "623791c56c1cc9df54a71a9c55147a401549917f00a2e48a6ae12b812c586ced", [:make, :rebar3], [], "hexpm", "0af652d1550c8411c3b58eed7a035a7fb088c0b86aff6bc504b0bc3b7f791aa2"},
"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"},
"dns_cluster": {:hex, :dns_cluster, "0.2.0", "aa8eb46e3bd0326bd67b84790c561733b25c5ba2fe3c7e36f28e88f384ebcb33", [:mix], [], "hexpm", "ba6f1893411c69c01b9e8e8f772062535a4cf70f3f35bcc964a324078d8c8240"},
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
"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_psql_extras": {:hex, :ecto_psql_extras, "0.8.7", "49943fe6bce07281fe3adfc2a23d3794e2acc644dfe98411cb5712ffecb6ad1a", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "ac0a0bce57ffe36b30fac2a2d0d427b04de016e6af5db6f4b41afa1241f39cda"},
"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"},
"eqrcode": {:hex, :eqrcode, "0.2.1", "d12838813e8fc87b8940cc05f9baadb189031f6009facdc56ff074375ec73b6e", [:mix], [], "hexpm", "d5828a222b904c68360e7dc2a40c3ef33a1328b7c074583898040f389f928025"},
"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"},
"esbuild": {:hex, :esbuild, "0.9.0", "f043eeaca4932ca8e16e5429aebd90f7766f31ac160a25cbd9befe84f2bc068f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "b415027f71d5ab57ef2be844b2a10d0c1b5a492d431727f43937adce22ba45ae"},
"ex_doc": {:hex, :ex_doc, "0.37.3", "f7816881a443cd77872b7d6118e8a55f547f49903aef8747dbcb345a75b462f9", [: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", "e6aebca7156e7c29b5da4daa17f6361205b2ae5f26e5c7d8ca0d3f7e18972233"},
"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"},
"floki": {:hex, :floki, "0.37.1", "d7aaee758c8a5b4a7495799a4260754fec5530d95b9c383c03b27359dea117cf", [:mix], [], "hexpm", "673d040cb594d31318d514590246b6dd587ed341d3b67e17c1c0eb8ce7ca6f04"},
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
"gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"},
"hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"},
"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"},
"makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"},
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
"oban": {:hex, :oban, "2.18.3", "1608c04f8856c108555c379f2f56bc0759149d35fa9d3b825cb8a6769f8ae926", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "36ca6ca84ef6518f9c2c759ea88efd438a3c81d667ba23b02b062a0aa785475e"},
"phoenix": {:hex, :phoenix, "1.7.18", "5310c21443514be44ed93c422e15870aef254cf1b3619e4f91538e7529d2b2e4", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "1797fcc82108442a66f2c77a643a62980f342bfeb63d6c9a515ab8294870004e"},
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
"oban": {:hex, :oban, "2.19.4", "045adb10db1161dceb75c254782f97cdc6596e7044af456a59decb6d06da73c1", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5fcc6219e6464525b808d97add17896e724131f498444a292071bf8991c99f97"},
"phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [: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", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"},
"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": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"},
"phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"},
"phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.6", "7b1f0327f54c9eb69845fd09a77accf922f488c549a7e7b8618775eb603a62c7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "1681ab813ec26ca6915beb3414aa138f298e17721dc6a2bde9e6eb8a62360ff6"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.17", "f396bbdaf4ba227b82251eb75ac0afa6b3da5e509bc0d030206374237dfc9450", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a61d741ffb78c85fdbca0de084da6a48f8ceb5261a79165b5a0b59e5f65ce98b"},
"phoenix_live_view": {:hex, :phoenix_live_view, "1.0.9", "4dc5e535832733df68df22f9de168b11c0c74bca65b27b088a10ac36dfb75d04", [: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", "1dccb04ec8544340e01608e108f32724458d0ac4b07e551406b3b920c40ba2e5"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
"plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
"plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"},
"plug": {:hex, :plug, "1.17.0", "a0832e7af4ae0f4819e0c08dd2e7482364937aea6a8a997a679f2cbb7e026b2e", [: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", "f6692046652a69a00a5a21d0b7e11fcf401064839d59d6b8787f23af55b1e6bc"},
"plug_cowboy": {:hex, :plug_cowboy, "2.7.3", "1304d36752e8bdde213cea59ef424ca932910a91a07ef9f3874be709c4ddb94b", [: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", "77c95524b2aa5364b247fa17089029e73b951ebc1adeef429361eab0bb55819d"},
"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.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"},
"postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [: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", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"},
"ranch": {:hex, :ranch, "2.2.0", "25528f82bc8d7c6152c57666ca99ec716510fe0925cb188172f41ce93117b1b0", [:make, :rebar3], [], "hexpm", "fa0b99a1780c80218a4197a59ea8d3bdae32fbff7e88527d7d8a4787eff4f8e7"},
"swoosh": {:hex, :swoosh, "1.18.3", "ca12197550bd7456654179055b1446168cc0f55067f784a3707e0e4462e269f5", [: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.10 or ~> 0.6 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a533daccea84e887a061a919295212b37f4f2c7916436037eb8be7f1265bacba"},
"table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"},
"tailwind": {:hex, :tailwind, "0.3.1", "a89d2835c580748c7a975ad7dd3f2ea5e63216dc16d44f9df492fbd12c094bed", [:mix], [], "hexpm", "98a45febdf4a87bc26682e1171acdedd6317d0919953c353fcd1b4f9f4b676a2"},
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"},
"telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"},
"telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"},
"telemetry_poller": {:hex, :telemetry_poller, "1.2.0", "ba82e333215aed9dd2096f93bd1d13ae89d249f82760fcada0850ba33bac154b", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7216e21a6c326eb9aa44328028c34e9fd348fb53667ca837be59d0aa2a0156e8"},
"thousand_island": {:hex, :thousand_island, "1.3.12", "590ff651a6d2a59ed7eabea398021749bdc664e2da33e0355e6c64e7e1a2ef93", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "55d0b1c868b513a7225892b8a8af0234d7c8981a51b0740369f3125f7c99a549"},
"websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"},
"websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"},
}

View File

@ -121,7 +121,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
@ -146,7 +146,7 @@ msgstr ""
msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:116
#: lib/cannery_web/live/pack_live/index.html.heex:114
#: lib/cannery_web/live/pack_live/show.html.heex:84
#: lib/cannery_web/live/range_live/index.html.heex:54
#, elixir-autogen, elixir-format
@ -194,7 +194,7 @@ msgid "View in Catalog"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/index.html.heex:125
#: lib/cannery_web/live/pack_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Move ammo"
@ -283,55 +283,55 @@ msgstr ""
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:161
#: lib/cannery_web/live/pack_live/index.html.heex:159
#, elixir-autogen, elixir-format
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:176
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: 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:149
#: lib/cannery_web/live/pack_live/index.html.heex:147
#: 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:147
#: lib/cannery_web/live/pack_live/index.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:201
#: lib/cannery_web/live/pack_live/index.html.heex:135
#: lib/cannery_web/live/type_live/show.html.heex:199
#, elixir-autogen, elixir-format
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:149
#: lib/cannery_web/live/range_live/index.html.heex:181
#: lib/cannery_web/live/range_live/index.html.heex:179
#, elixir-autogen, elixir-format
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:134
#: lib/cannery_web/live/range_live/index.html.heex:164
#: lib/cannery_web/live/range_live/index.html.heex:162
#, elixir-autogen, elixir-format
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#: lib/cannery_web/live/type_live/index.html.heex:105
#, elixir-autogen, elixir-format
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#: lib/cannery_web/live/type_live/index.html.heex:122
#: lib/cannery_web/live/type_live/show.html.heex:33
#, elixir-autogen, elixir-format
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#: lib/cannery_web/live/type_live/index.html.heex:97
#: lib/cannery_web/live/type_live/show.html.heex:17
#, elixir-autogen, elixir-format
msgid "Edit %{type_name}"
msgstr ""
@ -341,7 +341,7 @@ msgstr ""
msgid "New Type"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:89
#, elixir-autogen, elixir-format
msgid "View %{type_name}"
msgstr ""

View File

@ -134,7 +134,7 @@ msgstr "Passwort zurücksetzen"
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#, elixir-autogen, elixir-format
msgid "Save"
msgstr "Speichern"
@ -159,7 +159,7 @@ msgstr "Hinzufügen"
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:116
#: lib/cannery_web/live/pack_live/index.html.heex:114
#: lib/cannery_web/live/pack_live/show.html.heex:84
#: lib/cannery_web/live/range_live/index.html.heex:54
#, elixir-autogen, elixir-format
@ -207,7 +207,7 @@ msgid "View in Catalog"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/index.html.heex:125
#: lib/cannery_web/live/pack_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Move ammo"
@ -296,55 +296,55 @@ msgstr ""
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:161
#: lib/cannery_web/live/pack_live/index.html.heex:159
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:176
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: 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:149
#: lib/cannery_web/live/pack_live/index.html.heex:147
#: 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:147
#: lib/cannery_web/live/pack_live/index.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:201
#: lib/cannery_web/live/pack_live/index.html.heex:135
#: lib/cannery_web/live/type_live/show.html.heex:199
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:149
#: lib/cannery_web/live/range_live/index.html.heex:181
#: lib/cannery_web/live/range_live/index.html.heex:179
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:134
#: lib/cannery_web/live/range_live/index.html.heex:164
#: lib/cannery_web/live/range_live/index.html.heex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#: lib/cannery_web/live/type_live/index.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#: lib/cannery_web/live/type_live/index.html.heex:122
#: lib/cannery_web/live/type_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#: lib/cannery_web/live/type_live/index.html.heex:97
#: lib/cannery_web/live/type_live/show.html.heex:17
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
@ -354,7 +354,7 @@ msgstr ""
msgid "New Type"
msgstr "Neue Munitionsart"
#: lib/cannery_web/live/type_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:89
#, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}"
msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Hintergrundfarbe"
#: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:358
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#, elixir-autogen, elixir-format
msgid "Blank"
msgstr "Knallpatrone"
#: lib/cannery_web/live/type_live/form_component.html.heex:195
#: lib/cannery_web/live/type_live/form_component.html.heex:189
#, 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:163
#: lib/cannery_web/live/type_live/form_component.html.heex:159
#, 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:136
#: lib/cannery_web/live/type_live/form_component.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bullet type"
msgstr "Patronenart"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Patrone"
#: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:188
#: lib/cannery_web/live/type_live/form_component.html.heex:184
#, elixir-autogen, elixir-format
msgid "Case material"
msgstr "Gehäusematerial"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Behälter"
#: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#, elixir-autogen, elixir-format
msgid "Corrosive"
msgstr "Korrosiv"
@ -145,19 +145,19 @@ msgstr "Einladung bearbeiten"
msgid "Edit Tag"
msgstr "Tag bearbeiten"
#: lib/cannery_web/live/type_live/form_component.html.heex:151
#: lib/cannery_web/live/type_live/form_component.html.heex:147
#, 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:126
#: lib/cannery_web/live/type_live/form_component.html.heex:122
#, 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:354
#: lib/cannery_web/live/type_live/form_component.html.heex:346
#, elixir-autogen, elixir-format
msgid "Incendiary"
msgstr "Brandmunition"
@ -208,8 +208,8 @@ 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:367
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#, elixir-autogen, elixir-format
msgid "Manufacturer"
msgstr "Hersteller"
@ -250,12 +250,12 @@ msgstr "Neue Einladung"
msgid "New Tag"
msgstr "Neuer Tag"
#: lib/cannery_web/live/pack_live/index.html.heex:94
#: lib/cannery_web/live/pack_live/index.html.heex:92
#, elixir-autogen, elixir-format
msgid "No Ammo"
msgstr "Keine Munition"
#: lib/cannery_web/live/type_live/show.html.heex:178
#: lib/cannery_web/live/type_live/show.html.heex:176
#, elixir-autogen, elixir-format
msgid "No ammo for this type"
msgstr "Keine Munition dieser Art"
@ -299,7 +299,7 @@ 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:287
#: lib/cannery_web/live/type_live/form_component.html.heex:279
#, elixir-autogen, elixir-format
msgid "Pressure"
msgstr "Druck"
@ -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:328
#: lib/cannery_web/live/type_live/form_component.html.heex:320
#, elixir-autogen, elixir-format
msgid "Primer type"
msgstr "Zündertyp"
@ -349,7 +349,7 @@ msgstr "Einstellungen"
msgid "Simple:"
msgstr "Einfach:"
#: lib/cannery_web/live/type_live/form_component.html.heex:171
#: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format
msgid "Steel"
msgstr "Stahl"
@ -384,7 +384,7 @@ 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:350
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#, elixir-autogen, elixir-format
msgid "Tracer"
msgstr "Leuchtspur"
@ -458,7 +458,7 @@ msgid "Record shots"
msgstr "Schüsse dokumentieren"
#: lib/cannery_web/live/range_live/index.html.heex:64
#: lib/cannery_web/live/range_live/index.html.heex:148
#: lib/cannery_web/live/range_live/index.html.heex:146
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "Keine Schüsse dokumentiert"
@ -492,41 +492,41 @@ msgstr "Schießkladde"
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:150
#: lib/cannery_web/live/type_live/show.html.heex:148
#, elixir-autogen, elixir-format
msgid "$%{amount}"
msgstr "$%{amount}"
#: lib/cannery_web/live/type_live/form_component.html.heex:181
#: lib/cannery_web/live/type_live/form_component.html.heex:177
#, 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:176
#: lib/cannery_web/live/type_live/form_component.html.heex:172
#, 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:311
#: lib/cannery_web/live/type_live/form_component.html.heex:303
#, 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:274
#: lib/cannery_web/live/type_live/form_component.html.heex:266
#, 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:265
#: lib/cannery_web/live/type_live/form_component.html.heex:257
#, elixir-autogen, elixir-format
msgid "Powder type"
msgstr "Pulverart"
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#, elixir-autogen, elixir-format
msgid "UPC"
msgstr "UPC"
@ -550,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:337
#: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format
msgid "Firing type"
msgstr "Patronenhülsenform"
@ -574,7 +574,7 @@ msgstr "Editiere %{name} Tags"
#: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/container_live/show.html.heex:27
#: lib/cannery_web/live/type_live/show.html.heex:85
#: lib/cannery_web/live/type_live/show.html.heex:83
#, elixir-autogen, elixir-format
msgid "Rounds:"
msgstr "Patronen:"
@ -582,7 +582,7 @@ msgstr "Patronen:"
#: lib/cannery_web/components/pack_table_component.ex:178
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:152
#, elixir-autogen, elixir-format
msgid "No cost information"
msgstr "Keine Preisinformationen"
@ -654,7 +654,7 @@ msgstr "Schüsse dokumentieren"
msgid "Copies"
msgstr "Kopien"
#: lib/cannery_web/live/type_live/show.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:135
#, elixir-autogen, elixir-format
msgid "Added on:"
msgstr "Hinzugefügt am:"
@ -719,7 +719,7 @@ msgstr "Diese Munitionsgruppe ist nicht in einem Behälter"
#: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/container_live/show.html.heex:22
#: lib/cannery_web/live/type_live/show.html.heex:111
#: lib/cannery_web/live/type_live/show.html.heex:109
#, elixir-autogen, elixir-format
msgid "Packs:"
msgstr ""
@ -745,9 +745,9 @@ msgstr ""
msgid "Container:"
msgstr "Behälter"
#: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164
#: lib/cannery_web/live/pack_live/index.html.heex:85
#: lib/cannery_web/live/type_live/index.html.heex:64
#: lib/cannery_web/live/type_live/show.html.heex:162
#, elixir-autogen, elixir-format
msgid "Show used"
msgstr ""
@ -777,7 +777,7 @@ msgstr "Patronen:"
#: lib/cannery_web/live/container_live/index.html.heex:40
#: lib/cannery_web/live/container_live/show.html.heex:117
#: lib/cannery_web/live/type_live/show.html.heex:170
#: lib/cannery_web/live/type_live/show.html.heex:168
#, elixir-autogen, elixir-format
msgid "View as table"
msgstr ""
@ -787,7 +787,7 @@ msgstr ""
msgid "Total ever packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:128
#: lib/cannery_web/live/type_live/show.html.heex:126
#, elixir-autogen, elixir-format
msgid "Total ever packs:"
msgstr ""
@ -797,7 +797,7 @@ msgstr ""
msgid "Total ever rounds"
msgstr "Summe aller Patronen"
#: lib/cannery_web/live/type_live/show.html.heex:102
#: lib/cannery_web/live/type_live/show.html.heex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Total ever rounds:"
msgstr "Summe abgegebener Schüsse:"
@ -807,7 +807,7 @@ msgstr "Summe abgegebener Schüsse:"
msgid "Used packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:120
#: lib/cannery_web/live/type_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "Used packs:"
msgstr ""
@ -817,7 +817,7 @@ msgstr ""
msgid "Used rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:94
#: lib/cannery_web/live/type_live/show.html.heex:92
#, elixir-autogen, elixir-format, fuzzy
msgid "Used rounds:"
msgstr ""
@ -923,7 +923,7 @@ msgid "UPC:"
msgstr "UPC"
#: lib/cannery_web/components/type_table_component.ex:101
#: lib/cannery_web/live/type_live/show.html.heex:146
#: lib/cannery_web/live/type_live/show.html.heex:144
#, elixir-autogen, elixir-format
msgid "Average CPR"
msgstr ""
@ -991,12 +991,12 @@ msgstr ""
msgid "Edit ammo"
msgstr "Munitionstyp bearbeiten"
#: lib/cannery_web/live/type_live/index.html.heex:58
#: lib/cannery_web/live/type_live/index.html.heex:56
#, elixir-autogen, elixir-format
msgid "Search catalog"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:79
#: lib/cannery_web/live/pack_live/index.html.heex:77
#, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo"
msgstr ""
@ -1011,14 +1011,14 @@ msgstr ""
msgid "Search tags"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:124
#: lib/cannery_web/live/range_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/components/layouts.ex:15
#: lib/cannery_web/components/layouts/root.html.heex:8
#: lib/cannery_web/components/layouts/root.html.heex:9
#: lib/cannery_web/components/layouts/root.html.heex:10
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
@ -1115,7 +1115,7 @@ msgstr ""
msgid "Password"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:292
#: lib/cannery_web/live/type_live/form_component.html.heex:284
#, elixir-autogen, elixir-format
msgid "+P"
msgstr ""
@ -1130,12 +1130,12 @@ msgstr ""
msgid "5.56x46mm NATO"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:333
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format
msgid "Boxer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:334
#, elixir-autogen, elixir-format
msgid "Centerfire"
msgstr ""
@ -1178,14 +1178,14 @@ msgid "Close modal"
msgstr ""
#: 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:103
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/pack_live/index.html.heex:56
#: lib/cannery_web/live/range_live/index.html.heex:101
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:347
#: lib/cannery_web/live/type_live/form_component.html.heex:339
#, elixir-autogen, elixir-format
msgid "Attributes"
msgstr ""
@ -1202,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:107
#: lib/cannery_web/live/type_live/form_component.html.heex:105
#, elixir-autogen, elixir-format
msgid "Chamber size"
msgstr ""
@ -1218,7 +1218,7 @@ msgid "Dimensions"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:297
#: lib/cannery_web/live/type_live/form_component.html.heex:289
#, elixir-autogen, elixir-format
msgid "Dram equivalent"
msgstr ""
@ -1240,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:235
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#, elixir-autogen, elixir-format
msgid "Load grains"
msgstr ""
@ -1255,50 +1255,50 @@ msgstr ""
msgid "No ammo"
msgstr "Keine Munition"
#: lib/cannery_web/live/type_live/show.html.heex:58
#: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "None specified"
msgstr ""
#: 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:106
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:104
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "Pistol"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:262
#: lib/cannery_web/live/type_live/form_component.html.heex:254
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder"
msgstr "Pulverart"
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer"
msgstr "Zündertyp"
#: lib/cannery_web/live/type_live/form_component.html.heex:123
#: lib/cannery_web/live/type_live/form_component.html.heex:119
#, elixir-autogen, elixir-format
msgid "Projectile"
msgstr ""
#: 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:104
#: lib/cannery_web/live/pack_live/index.html.heex:57
#: lib/cannery_web/live/range_live/index.html.heex:102
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "Rifle"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:243
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#, elixir-autogen, elixir-format
msgid "Shot charge weight"
msgstr ""
@ -1309,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:217
#: lib/cannery_web/live/type_live/form_component.html.heex:211
#, elixir-autogen, elixir-format
msgid "Shot material"
msgstr ""
@ -1320,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:227
#: lib/cannery_web/live/type_live/form_component.html.heex:219
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size"
msgstr "Schüsse abgegeben"
@ -1331,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:208
#: lib/cannery_web/live/type_live/form_component.html.heex:202
#, elixir-autogen, elixir-format
msgid "Shot type"
msgstr ""
@ -1343,22 +1343,22 @@ msgstr ""
#: 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:105
#: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:103
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:50
#, elixir-autogen, elixir-format
msgid "Shotgun"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:162
#: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format
msgid "Slug core"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:213
#: lib/cannery_web/live/type_live/form_component.html.heex:207
#, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc"
msgstr ""
@ -1375,7 +1375,7 @@ msgid "Unfired shell length"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:200
#: lib/cannery_web/live/type_live/form_component.html.heex:194
#, elixir-autogen, elixir-format
msgid "Wadding"
msgstr ""
@ -1392,7 +1392,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:44
#, elixir-autogen, elixir-format
msgid "Class"
msgstr ""
@ -1427,7 +1427,7 @@ msgid "New Type"
msgstr "Neuer Munitionstyp"
#: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:73
#: lib/cannery_web/live/type_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "No Types"
msgstr "Art"
@ -1448,7 +1448,7 @@ msgstr ""
msgid "Any"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:138
#: lib/cannery_web/live/range_live/index.html.heex:136
#, elixir-autogen, elixir-format, fuzzy
msgid "Dates"
msgstr "Datum"

View File

@ -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:140
#: lib/cannery/accounts/user.ex:141
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr "hat sich nicht geändert"
#: lib/cannery/accounts/user.ex:161
#: lib/cannery/accounts/user.ex:162
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr "Passwort stimmt nicht überein"
#: lib/cannery/accounts/user.ex:198
#: lib/cannery/accounts/user.ex:201
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr "ist nicht gültig"
#: lib/cannery/accounts/user.ex:95
#: lib/cannery/accounts/user.ex:96
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr "Muss ein @ Zeichen und keine Leerzeichen haben"

View File

@ -73,7 +73,7 @@ msgstr ""
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:174
#: lib/cannery_web/live/pack_live/index.html.heex:172
#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
@ -134,7 +134,7 @@ msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto"
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:379
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr "Speichere..."
@ -172,7 +172,7 @@ msgid "Shots recorded successfully"
msgstr "Schüsse erfolgreich dokumentiert"
#: lib/cannery_web/live/pack_live/show.ex:147
#: lib/cannery_web/live/range_live/index.html.heex:178
#: lib/cannery_web/live/range_live/index.html.heex:176
#, 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?"
@ -247,8 +247,8 @@ msgid_plural "Ammo added successfully"
msgstr[0] "Munitionsgruppe erfolgreich aktualisiert"
msgstr[1] "Munitionsgruppe erfolgreich aktualisiert"
#: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29
#: lib/cannery_web/live/type_live/index.html.heex:116
#: lib/cannery_web/live/type_live/show.html.heex:27
#, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr "Sind Sie sicher, dass sie %{name} löschen möchten?"

View File

@ -40,24 +40,24 @@ msgid "Background color"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:358
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#, elixir-autogen, elixir-format
msgid "Blank"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:195
#: lib/cannery_web/live/type_live/form_component.html.heex:189
#, 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:163
#: lib/cannery_web/live/type_live/form_component.html.heex:159
#, 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:136
#: lib/cannery_web/live/type_live/form_component.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bullet type"
msgstr ""
@ -75,7 +75,7 @@ msgid "Cartridge"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:188
#: lib/cannery_web/live/type_live/form_component.html.heex:184
#, elixir-autogen, elixir-format
msgid "Case material"
msgstr ""
@ -96,7 +96,7 @@ msgid "Containers"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#, elixir-autogen, elixir-format
msgid "Corrosive"
msgstr ""
@ -141,19 +141,19 @@ msgstr ""
msgid "Edit Tag"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:151
#: lib/cannery_web/live/type_live/form_component.html.heex:147
#, 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:126
#: lib/cannery_web/live/type_live/form_component.html.heex:122
#, 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:354
#: lib/cannery_web/live/type_live/form_component.html.heex:346
#, elixir-autogen, elixir-format
msgid "Incendiary"
msgstr ""
@ -204,8 +204,8 @@ 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:367
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#, elixir-autogen, elixir-format
msgid "Manufacturer"
msgstr ""
@ -246,12 +246,12 @@ msgstr ""
msgid "New Tag"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:94
#: lib/cannery_web/live/pack_live/index.html.heex:92
#, elixir-autogen, elixir-format
msgid "No Ammo"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:178
#: lib/cannery_web/live/type_live/show.html.heex:176
#, elixir-autogen, elixir-format
msgid "No ammo for this type"
msgstr ""
@ -295,7 +295,7 @@ msgid "On the bookshelf"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:287
#: lib/cannery_web/live/type_live/form_component.html.heex:279
#, elixir-autogen, elixir-format
msgid "Pressure"
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:328
#: lib/cannery_web/live/type_live/form_component.html.heex:320
#, elixir-autogen, elixir-format
msgid "Primer type"
msgstr ""
@ -343,7 +343,7 @@ msgstr ""
msgid "Simple:"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:171
#: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format
msgid "Steel"
msgstr ""
@ -378,7 +378,7 @@ 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:350
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#, elixir-autogen, elixir-format
msgid "Tracer"
msgstr ""
@ -452,7 +452,7 @@ msgid "Record shots"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64
#: lib/cannery_web/live/range_live/index.html.heex:148
#: lib/cannery_web/live/range_live/index.html.heex:146
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr ""
@ -486,41 +486,41 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:150
#: lib/cannery_web/live/type_live/show.html.heex:148
#, elixir-autogen, elixir-format
msgid "$%{amount}"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:181
#: lib/cannery_web/live/type_live/form_component.html.heex:177
#, 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:176
#: lib/cannery_web/live/type_live/form_component.html.heex:172
#, 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:311
#: lib/cannery_web/live/type_live/form_component.html.heex:303
#, 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:274
#: lib/cannery_web/live/type_live/form_component.html.heex:266
#, 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:265
#: lib/cannery_web/live/type_live/form_component.html.heex:257
#, elixir-autogen, elixir-format
msgid "Powder type"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#, elixir-autogen, elixir-format
msgid "UPC"
msgstr ""
@ -544,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:337
#: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format
msgid "Firing type"
msgstr ""
@ -568,7 +568,7 @@ msgstr ""
#: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/container_live/show.html.heex:27
#: lib/cannery_web/live/type_live/show.html.heex:85
#: lib/cannery_web/live/type_live/show.html.heex:83
#, elixir-autogen, elixir-format
msgid "Rounds:"
msgstr ""
@ -576,7 +576,7 @@ msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:178
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:152
#, elixir-autogen, elixir-format
msgid "No cost information"
msgstr ""
@ -648,7 +648,7 @@ msgstr ""
msgid "Copies"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:135
#, elixir-autogen, elixir-format
msgid "Added on:"
msgstr ""
@ -713,7 +713,7 @@ msgstr ""
#: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/container_live/show.html.heex:22
#: lib/cannery_web/live/type_live/show.html.heex:111
#: lib/cannery_web/live/type_live/show.html.heex:109
#, elixir-autogen, elixir-format
msgid "Packs:"
msgstr ""
@ -739,9 +739,9 @@ msgstr ""
msgid "Container:"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164
#: lib/cannery_web/live/pack_live/index.html.heex:85
#: lib/cannery_web/live/type_live/index.html.heex:64
#: lib/cannery_web/live/type_live/show.html.heex:162
#, elixir-autogen, elixir-format
msgid "Show used"
msgstr ""
@ -771,7 +771,7 @@ msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:40
#: lib/cannery_web/live/container_live/show.html.heex:117
#: lib/cannery_web/live/type_live/show.html.heex:170
#: lib/cannery_web/live/type_live/show.html.heex:168
#, elixir-autogen, elixir-format
msgid "View as table"
msgstr ""
@ -781,7 +781,7 @@ msgstr ""
msgid "Total ever packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:128
#: lib/cannery_web/live/type_live/show.html.heex:126
#, elixir-autogen, elixir-format
msgid "Total ever packs:"
msgstr ""
@ -791,7 +791,7 @@ msgstr ""
msgid "Total ever rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:102
#: lib/cannery_web/live/type_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Total ever rounds:"
msgstr ""
@ -801,7 +801,7 @@ msgstr ""
msgid "Used packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:120
#: lib/cannery_web/live/type_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "Used packs:"
msgstr ""
@ -811,7 +811,7 @@ msgstr ""
msgid "Used rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:94
#: lib/cannery_web/live/type_live/show.html.heex:92
#, elixir-autogen, elixir-format
msgid "Used rounds:"
msgstr ""
@ -917,7 +917,7 @@ msgid "UPC:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:101
#: lib/cannery_web/live/type_live/show.html.heex:146
#: lib/cannery_web/live/type_live/show.html.heex:144
#, elixir-autogen, elixir-format
msgid "Average CPR"
msgstr ""
@ -985,12 +985,12 @@ msgstr ""
msgid "Edit ammo"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:58
#: lib/cannery_web/live/type_live/index.html.heex:56
#, elixir-autogen, elixir-format
msgid "Search catalog"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:79
#: lib/cannery_web/live/pack_live/index.html.heex:77
#, elixir-autogen, elixir-format
msgid "Search ammo"
msgstr ""
@ -1005,14 +1005,14 @@ msgstr ""
msgid "Search tags"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:124
#: lib/cannery_web/live/range_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/components/layouts.ex:15
#: lib/cannery_web/components/layouts/root.html.heex:8
#: lib/cannery_web/components/layouts/root.html.heex:9
#: lib/cannery_web/components/layouts/root.html.heex:10
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format
msgid "Cannery"
@ -1098,7 +1098,7 @@ msgstr ""
msgid "Password"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:292
#: lib/cannery_web/live/type_live/form_component.html.heex:284
#, elixir-autogen, elixir-format
msgid "+P"
msgstr ""
@ -1113,12 +1113,12 @@ msgstr ""
msgid "5.56x46mm NATO"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:333
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format
msgid "Boxer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:334
#, elixir-autogen, elixir-format
msgid "Centerfire"
msgstr ""
@ -1161,14 +1161,14 @@ msgid "Close modal"
msgstr ""
#: 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:103
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/pack_live/index.html.heex:56
#: lib/cannery_web/live/range_live/index.html.heex:101
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:347
#: lib/cannery_web/live/type_live/form_component.html.heex:339
#, elixir-autogen, elixir-format
msgid "Attributes"
msgstr ""
@ -1185,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:107
#: lib/cannery_web/live/type_live/form_component.html.heex:105
#, elixir-autogen, elixir-format
msgid "Chamber size"
msgstr ""
@ -1201,7 +1201,7 @@ msgid "Dimensions"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:297
#: lib/cannery_web/live/type_live/form_component.html.heex:289
#, elixir-autogen, elixir-format
msgid "Dram equivalent"
msgstr ""
@ -1223,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:235
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#, elixir-autogen, elixir-format
msgid "Load grains"
msgstr ""
@ -1238,50 +1238,50 @@ msgstr ""
msgid "No ammo"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:58
#: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "None specified"
msgstr ""
#: 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:106
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:104
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "Pistol"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:262
#: lib/cannery_web/live/type_live/form_component.html.heex:254
#, elixir-autogen, elixir-format
msgid "Powder"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format
msgid "Primer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:123
#: lib/cannery_web/live/type_live/form_component.html.heex:119
#, elixir-autogen, elixir-format
msgid "Projectile"
msgstr ""
#: 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:104
#: lib/cannery_web/live/pack_live/index.html.heex:57
#: lib/cannery_web/live/range_live/index.html.heex:102
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "Rifle"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:243
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#, elixir-autogen, elixir-format
msgid "Shot charge weight"
msgstr ""
@ -1292,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:217
#: lib/cannery_web/live/type_live/form_component.html.heex:211
#, elixir-autogen, elixir-format
msgid "Shot material"
msgstr ""
@ -1303,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:227
#: lib/cannery_web/live/type_live/form_component.html.heex:219
#, elixir-autogen, elixir-format
msgid "Shot size"
msgstr ""
@ -1314,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:208
#: lib/cannery_web/live/type_live/form_component.html.heex:202
#, elixir-autogen, elixir-format
msgid "Shot type"
msgstr ""
@ -1326,22 +1326,22 @@ msgstr ""
#: 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:105
#: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:103
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:50
#, elixir-autogen, elixir-format
msgid "Shotgun"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:162
#: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format
msgid "Slug core"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:213
#: lib/cannery_web/live/type_live/form_component.html.heex:207
#, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc"
msgstr ""
@ -1358,7 +1358,7 @@ msgid "Unfired shell length"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:200
#: lib/cannery_web/live/type_live/form_component.html.heex:194
#, elixir-autogen, elixir-format
msgid "Wadding"
msgstr ""
@ -1375,7 +1375,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:44
#, elixir-autogen, elixir-format
msgid "Class"
msgstr ""
@ -1410,7 +1410,7 @@ msgid "New Type"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:73
#: lib/cannery_web/live/type_live/index.html.heex:71
#, elixir-autogen, elixir-format
msgid "No Types"
msgstr ""
@ -1431,7 +1431,7 @@ msgstr ""
msgid "Any"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:138
#: lib/cannery_web/live/range_live/index.html.heex:136
#, elixir-autogen, elixir-format
msgid "Dates"
msgstr ""

View File

@ -121,7 +121,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#, elixir-autogen, elixir-format
msgid "Save"
msgstr ""
@ -146,7 +146,7 @@ msgstr ""
msgid "Why not get some ready to shoot?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:116
#: lib/cannery_web/live/pack_live/index.html.heex:114
#: lib/cannery_web/live/pack_live/show.html.heex:84
#: lib/cannery_web/live/range_live/index.html.heex:54
#, elixir-autogen, elixir-format
@ -194,7 +194,7 @@ msgid "View in Catalog"
msgstr ""
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/index.html.heex:125
#: lib/cannery_web/live/pack_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Move ammo"
@ -283,55 +283,55 @@ msgstr ""
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:161
#: lib/cannery_web/live/pack_live/index.html.heex:159
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:176
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: 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:149
#: lib/cannery_web/live/pack_live/index.html.heex:147
#: 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:147
#: lib/cannery_web/live/pack_live/index.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:201
#: lib/cannery_web/live/pack_live/index.html.heex:135
#: lib/cannery_web/live/type_live/show.html.heex:199
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:149
#: lib/cannery_web/live/range_live/index.html.heex:181
#: lib/cannery_web/live/range_live/index.html.heex:179
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:134
#: lib/cannery_web/live/range_live/index.html.heex:164
#: lib/cannery_web/live/range_live/index.html.heex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#: lib/cannery_web/live/type_live/index.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#: lib/cannery_web/live/type_live/index.html.heex:122
#: lib/cannery_web/live/type_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#: lib/cannery_web/live/type_live/index.html.heex:97
#: lib/cannery_web/live/type_live/show.html.heex:17
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
@ -341,7 +341,7 @@ msgstr ""
msgid "New Type"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:89
#, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}"
msgstr ""

View File

@ -40,24 +40,24 @@ msgid "Background color"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:358
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#, elixir-autogen, elixir-format
msgid "Blank"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:195
#: lib/cannery_web/live/type_live/form_component.html.heex:189
#, 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:163
#: lib/cannery_web/live/type_live/form_component.html.heex:159
#, 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:136
#: lib/cannery_web/live/type_live/form_component.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bullet type"
msgstr ""
@ -75,7 +75,7 @@ msgid "Cartridge"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:188
#: lib/cannery_web/live/type_live/form_component.html.heex:184
#, elixir-autogen, elixir-format
msgid "Case material"
msgstr ""
@ -96,7 +96,7 @@ msgid "Containers"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#, elixir-autogen, elixir-format
msgid "Corrosive"
msgstr ""
@ -141,19 +141,19 @@ msgstr ""
msgid "Edit Tag"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:151
#: lib/cannery_web/live/type_live/form_component.html.heex:147
#, 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:126
#: lib/cannery_web/live/type_live/form_component.html.heex:122
#, 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:354
#: lib/cannery_web/live/type_live/form_component.html.heex:346
#, elixir-autogen, elixir-format
msgid "Incendiary"
msgstr ""
@ -204,8 +204,8 @@ 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:367
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#, elixir-autogen, elixir-format
msgid "Manufacturer"
msgstr ""
@ -246,12 +246,12 @@ msgstr ""
msgid "New Tag"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:94
#: lib/cannery_web/live/pack_live/index.html.heex:92
#, elixir-autogen, elixir-format
msgid "No Ammo"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:178
#: lib/cannery_web/live/type_live/show.html.heex:176
#, elixir-autogen, elixir-format
msgid "No ammo for this type"
msgstr ""
@ -295,7 +295,7 @@ msgid "On the bookshelf"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:287
#: lib/cannery_web/live/type_live/form_component.html.heex:279
#, elixir-autogen, elixir-format
msgid "Pressure"
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:328
#: lib/cannery_web/live/type_live/form_component.html.heex:320
#, elixir-autogen, elixir-format
msgid "Primer type"
msgstr ""
@ -343,7 +343,7 @@ msgstr ""
msgid "Simple:"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:171
#: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format
msgid "Steel"
msgstr ""
@ -378,7 +378,7 @@ 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:350
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#, elixir-autogen, elixir-format
msgid "Tracer"
msgstr ""
@ -452,7 +452,7 @@ msgid "Record shots"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:64
#: lib/cannery_web/live/range_live/index.html.heex:148
#: lib/cannery_web/live/range_live/index.html.heex:146
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr ""
@ -486,41 +486,41 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:150
#: lib/cannery_web/live/type_live/show.html.heex:148
#, elixir-autogen, elixir-format
msgid "$%{amount}"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:181
#: lib/cannery_web/live/type_live/form_component.html.heex:177
#, 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:176
#: lib/cannery_web/live/type_live/form_component.html.heex:172
#, 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:311
#: lib/cannery_web/live/type_live/form_component.html.heex:303
#, 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:274
#: lib/cannery_web/live/type_live/form_component.html.heex:266
#, 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:265
#: lib/cannery_web/live/type_live/form_component.html.heex:257
#, elixir-autogen, elixir-format
msgid "Powder type"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#, elixir-autogen, elixir-format
msgid "UPC"
msgstr ""
@ -544,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:337
#: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format
msgid "Firing type"
msgstr ""
@ -568,7 +568,7 @@ msgstr ""
#: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/container_live/show.html.heex:27
#: lib/cannery_web/live/type_live/show.html.heex:85
#: lib/cannery_web/live/type_live/show.html.heex:83
#, elixir-autogen, elixir-format, fuzzy
msgid "Rounds:"
msgstr ""
@ -576,7 +576,7 @@ msgstr ""
#: lib/cannery_web/components/pack_table_component.ex:178
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:152
#, elixir-autogen, elixir-format
msgid "No cost information"
msgstr ""
@ -648,7 +648,7 @@ msgstr ""
msgid "Copies"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:135
#, elixir-autogen, elixir-format
msgid "Added on:"
msgstr ""
@ -713,7 +713,7 @@ msgstr ""
#: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/container_live/show.html.heex:22
#: lib/cannery_web/live/type_live/show.html.heex:111
#: lib/cannery_web/live/type_live/show.html.heex:109
#, elixir-autogen, elixir-format
msgid "Packs:"
msgstr ""
@ -739,9 +739,9 @@ msgstr ""
msgid "Container:"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164
#: lib/cannery_web/live/pack_live/index.html.heex:85
#: lib/cannery_web/live/type_live/index.html.heex:64
#: lib/cannery_web/live/type_live/show.html.heex:162
#, elixir-autogen, elixir-format
msgid "Show used"
msgstr ""
@ -771,7 +771,7 @@ msgstr ""
#: lib/cannery_web/live/container_live/index.html.heex:40
#: lib/cannery_web/live/container_live/show.html.heex:117
#: lib/cannery_web/live/type_live/show.html.heex:170
#: lib/cannery_web/live/type_live/show.html.heex:168
#, elixir-autogen, elixir-format
msgid "View as table"
msgstr ""
@ -781,7 +781,7 @@ msgstr ""
msgid "Total ever packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:128
#: lib/cannery_web/live/type_live/show.html.heex:126
#, elixir-autogen, elixir-format
msgid "Total ever packs:"
msgstr ""
@ -791,7 +791,7 @@ msgstr ""
msgid "Total ever rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:102
#: lib/cannery_web/live/type_live/show.html.heex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Total ever rounds:"
msgstr ""
@ -801,7 +801,7 @@ msgstr ""
msgid "Used packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:120
#: lib/cannery_web/live/type_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "Used packs:"
msgstr ""
@ -811,7 +811,7 @@ msgstr ""
msgid "Used rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:94
#: lib/cannery_web/live/type_live/show.html.heex:92
#, elixir-autogen, elixir-format, fuzzy
msgid "Used rounds:"
msgstr ""
@ -917,7 +917,7 @@ msgid "UPC:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:101
#: lib/cannery_web/live/type_live/show.html.heex:146
#: lib/cannery_web/live/type_live/show.html.heex:144
#, elixir-autogen, elixir-format
msgid "Average CPR"
msgstr ""
@ -985,12 +985,12 @@ msgstr ""
msgid "Edit ammo"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:58
#: lib/cannery_web/live/type_live/index.html.heex:56
#, elixir-autogen, elixir-format
msgid "Search catalog"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:79
#: lib/cannery_web/live/pack_live/index.html.heex:77
#, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo"
msgstr ""
@ -1005,14 +1005,14 @@ msgstr ""
msgid "Search tags"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:124
#: lib/cannery_web/live/range_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/components/layouts.ex:15
#: lib/cannery_web/components/layouts/root.html.heex:8
#: lib/cannery_web/components/layouts/root.html.heex:9
#: lib/cannery_web/components/layouts/root.html.heex:10
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
@ -1098,7 +1098,7 @@ msgstr ""
msgid "Password"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:292
#: lib/cannery_web/live/type_live/form_component.html.heex:284
#, elixir-autogen, elixir-format
msgid "+P"
msgstr ""
@ -1113,12 +1113,12 @@ msgstr ""
msgid "5.56x46mm NATO"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:333
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format
msgid "Boxer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:334
#, elixir-autogen, elixir-format
msgid "Centerfire"
msgstr ""
@ -1161,14 +1161,14 @@ msgid "Close modal"
msgstr ""
#: 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:103
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/pack_live/index.html.heex:56
#: lib/cannery_web/live/range_live/index.html.heex:101
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:347
#: lib/cannery_web/live/type_live/form_component.html.heex:339
#, elixir-autogen, elixir-format
msgid "Attributes"
msgstr ""
@ -1185,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:107
#: lib/cannery_web/live/type_live/form_component.html.heex:105
#, elixir-autogen, elixir-format
msgid "Chamber size"
msgstr ""
@ -1201,7 +1201,7 @@ msgid "Dimensions"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:297
#: lib/cannery_web/live/type_live/form_component.html.heex:289
#, elixir-autogen, elixir-format
msgid "Dram equivalent"
msgstr ""
@ -1223,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:235
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#, elixir-autogen, elixir-format
msgid "Load grains"
msgstr ""
@ -1238,50 +1238,50 @@ msgstr ""
msgid "No ammo"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:58
#: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "None specified"
msgstr ""
#: 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:106
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:104
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "Pistol"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:262
#: lib/cannery_web/live/type_live/form_component.html.heex:254
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:123
#: lib/cannery_web/live/type_live/form_component.html.heex:119
#, elixir-autogen, elixir-format
msgid "Projectile"
msgstr ""
#: 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:104
#: lib/cannery_web/live/pack_live/index.html.heex:57
#: lib/cannery_web/live/range_live/index.html.heex:102
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "Rifle"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:243
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#, elixir-autogen, elixir-format
msgid "Shot charge weight"
msgstr ""
@ -1292,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:217
#: lib/cannery_web/live/type_live/form_component.html.heex:211
#, elixir-autogen, elixir-format
msgid "Shot material"
msgstr ""
@ -1303,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:227
#: lib/cannery_web/live/type_live/form_component.html.heex:219
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size"
msgstr ""
@ -1314,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:208
#: lib/cannery_web/live/type_live/form_component.html.heex:202
#, elixir-autogen, elixir-format
msgid "Shot type"
msgstr ""
@ -1326,22 +1326,22 @@ msgstr ""
#: 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:105
#: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:103
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:50
#, elixir-autogen, elixir-format
msgid "Shotgun"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:162
#: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format
msgid "Slug core"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:213
#: lib/cannery_web/live/type_live/form_component.html.heex:207
#, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc"
msgstr ""
@ -1358,7 +1358,7 @@ msgid "Unfired shell length"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:200
#: lib/cannery_web/live/type_live/form_component.html.heex:194
#, elixir-autogen, elixir-format
msgid "Wadding"
msgstr ""
@ -1375,7 +1375,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:44
#, elixir-autogen, elixir-format
msgid "Class"
msgstr ""
@ -1410,7 +1410,7 @@ msgid "New Type"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:73
#: lib/cannery_web/live/type_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "No Types"
msgstr ""
@ -1431,7 +1431,7 @@ msgstr ""
msgid "Any"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:138
#: lib/cannery_web/live/range_live/index.html.heex:136
#, elixir-autogen, elixir-format, fuzzy
msgid "Dates"
msgstr ""

View File

@ -101,23 +101,23 @@ msgstr ""
msgid "You are not authorized to view this page."
msgstr ""
#: lib/cannery/accounts/user.ex:140
#: lib/cannery/accounts/user.ex:141
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr ""
#: lib/cannery/accounts/user.ex:161
#: lib/cannery/accounts/user.ex:162
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr ""
## From Ecto.Changeset.put_change/3
#: lib/cannery/accounts/user.ex:198
#: lib/cannery/accounts/user.ex:201
#, elixir-autogen, elixir-format, fuzzy
msgid "is not valid"
msgstr ""
#: lib/cannery/accounts/user.ex:95
#: lib/cannery/accounts/user.ex:96
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr ""

View File

@ -58,7 +58,7 @@ msgstr ""
msgid "Are you sure you want to delete %{name}?"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: lib/cannery_web/live/pack_live/index.html.heex:172
#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
@ -115,7 +115,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:379
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr ""
@ -151,7 +151,7 @@ msgid "Shots recorded successfully"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:147
#: lib/cannery_web/live/range_live/index.html.heex:178
#: lib/cannery_web/live/range_live/index.html.heex:176
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr ""
@ -226,8 +226,8 @@ msgid_plural "Ammo added successfully"
msgstr[0] ""
msgstr[1] ""
#: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29
#: lib/cannery_web/live/type_live/index.html.heex:116
#: lib/cannery_web/live/type_live/show.html.heex:27
#, elixir-autogen, elixir-format, fuzzy
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -101,22 +101,22 @@ msgstr ""
msgid "You are not authorized to view this page."
msgstr ""
#: lib/cannery/accounts/user.ex:140
#: lib/cannery/accounts/user.ex:141
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr ""
#: lib/cannery/accounts/user.ex:161
#: lib/cannery/accounts/user.ex:162
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr ""
#: lib/cannery/accounts/user.ex:198
#: lib/cannery/accounts/user.ex:201
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr ""
#: lib/cannery/accounts/user.ex:95
#: lib/cannery/accounts/user.ex:96
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr ""

View File

@ -134,7 +134,7 @@ msgstr "Resetear contraseña"
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#, elixir-autogen, elixir-format
msgid "Save"
msgstr "Guardar"
@ -159,7 +159,7 @@ msgstr "Añadir"
msgid "Why not get some ready to shoot?"
msgstr "¿Por qué no preparar parte para disparar?"
#: lib/cannery_web/live/pack_live/index.html.heex:116
#: lib/cannery_web/live/pack_live/index.html.heex:114
#: lib/cannery_web/live/pack_live/show.html.heex:84
#: lib/cannery_web/live/range_live/index.html.heex:54
#, elixir-autogen, elixir-format
@ -207,7 +207,7 @@ msgid "View in Catalog"
msgstr "Ver en Catalogo"
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/index.html.heex:125
#: lib/cannery_web/live/pack_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Move ammo"
@ -296,55 +296,55 @@ msgstr ""
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:161
#: lib/cannery_web/live/pack_live/index.html.heex:159
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:176
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: 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:149
#: lib/cannery_web/live/pack_live/index.html.heex:147
#: 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:147
#: lib/cannery_web/live/pack_live/index.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:201
#: lib/cannery_web/live/pack_live/index.html.heex:135
#: lib/cannery_web/live/type_live/show.html.heex:199
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:149
#: lib/cannery_web/live/range_live/index.html.heex:181
#: lib/cannery_web/live/range_live/index.html.heex:179
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:134
#: lib/cannery_web/live/range_live/index.html.heex:164
#: lib/cannery_web/live/range_live/index.html.heex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#: lib/cannery_web/live/type_live/index.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#: lib/cannery_web/live/type_live/index.html.heex:122
#: lib/cannery_web/live/type_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#: lib/cannery_web/live/type_live/index.html.heex:97
#: lib/cannery_web/live/type_live/show.html.heex:17
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
@ -354,7 +354,7 @@ msgstr ""
msgid "New Type"
msgstr "Nuevo tipo de Munición"
#: lib/cannery_web/live/type_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:89
#, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}"
msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Color de fondo"
#: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:358
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#, elixir-autogen, elixir-format
msgid "Blank"
msgstr "Fogueo"
#: lib/cannery_web/live/type_live/form_component.html.heex:195
#: lib/cannery_web/live/type_live/form_component.html.heex:189
#, elixir-autogen, elixir-format
msgid "Brass"
msgstr "Latón"
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:163
#: lib/cannery_web/live/type_live/form_component.html.heex:159
#, elixir-autogen, elixir-format
msgid "Bullet core"
msgstr "Núcleo de bala"
#: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:136
#: lib/cannery_web/live/type_live/form_component.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bullet type"
msgstr "Tipo de bala"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Cartucho"
#: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:188
#: lib/cannery_web/live/type_live/form_component.html.heex:184
#, elixir-autogen, elixir-format
msgid "Case material"
msgstr "Material del casquillo"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Contenedores"
#: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#, elixir-autogen, elixir-format
msgid "Corrosive"
msgstr "Corrosiva"
@ -145,19 +145,19 @@ msgstr "Editar Invitación"
msgid "Edit Tag"
msgstr "Editar Etiqueta"
#: lib/cannery_web/live/type_live/form_component.html.heex:151
#: lib/cannery_web/live/type_live/form_component.html.heex:147
#, elixir-autogen, elixir-format
msgid "FMJ"
msgstr "Bala encamisada"
#: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:126
#: lib/cannery_web/live/type_live/form_component.html.heex:122
#, elixir-autogen, elixir-format
msgid "Grains"
msgstr "Grano"
#: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#: lib/cannery_web/live/type_live/form_component.html.heex:346
#, elixir-autogen, elixir-format
msgid "Incendiary"
msgstr "Incendiaria"
@ -208,8 +208,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Cargador, Clip, Caja de Munición, etc"
#: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:367
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#, elixir-autogen, elixir-format
msgid "Manufacturer"
msgstr "Fabricante"
@ -250,12 +250,12 @@ msgstr "Nueva Invitación"
msgid "New Tag"
msgstr "Nueva Etiqueta"
#: lib/cannery_web/live/pack_live/index.html.heex:94
#: lib/cannery_web/live/pack_live/index.html.heex:92
#, elixir-autogen, elixir-format
msgid "No Ammo"
msgstr "Sin Munición"
#: lib/cannery_web/live/type_live/show.html.heex:178
#: lib/cannery_web/live/type_live/show.html.heex:176
#, elixir-autogen, elixir-format
msgid "No ammo for this type"
msgstr "Sin munición para este tipo"
@ -299,7 +299,7 @@ msgid "On the bookshelf"
msgstr "En la estantería"
#: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:287
#: lib/cannery_web/live/type_live/form_component.html.heex:279
#, elixir-autogen, elixir-format
msgid "Pressure"
msgstr "Presión"
@ -316,7 +316,7 @@ msgid "Price paid:"
msgstr "Precio pagado:"
#: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:328
#: lib/cannery_web/live/type_live/form_component.html.heex:320
#, elixir-autogen, elixir-format
msgid "Primer type"
msgstr "Tipo de espoleta"
@ -349,7 +349,7 @@ msgstr "Ajustes"
msgid "Simple:"
msgstr "Simple:"
#: lib/cannery_web/live/type_live/form_component.html.heex:171
#: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format
msgid "Steel"
msgstr "Acero"
@ -385,7 +385,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "La página de seguimiento de armas autogestionada"
#: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#, elixir-autogen, elixir-format
msgid "Tracer"
msgstr "Trazadora"
@ -459,7 +459,7 @@ msgid "Record shots"
msgstr "Tiros récord"
#: lib/cannery_web/live/range_live/index.html.heex:64
#: lib/cannery_web/live/range_live/index.html.heex:148
#: lib/cannery_web/live/range_live/index.html.heex:146
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "No se han grabado tiros"
@ -493,41 +493,41 @@ msgstr "Registro de tiros"
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:150
#: lib/cannery_web/live/type_live/show.html.heex:148
#, elixir-autogen, elixir-format
msgid "$%{amount}"
msgstr "$%{amount}"
#: lib/cannery_web/live/type_live/form_component.html.heex:181
#: lib/cannery_web/live/type_live/form_component.html.heex:177
#, elixir-autogen, elixir-format
msgid "Bimetal"
msgstr "Bimetal"
#: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:176
#: lib/cannery_web/live/type_live/form_component.html.heex:172
#, elixir-autogen, elixir-format
msgid "Jacket type"
msgstr "Tipo de camisa"
#: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:311
#: lib/cannery_web/live/type_live/form_component.html.heex:303
#, elixir-autogen, elixir-format
msgid "Muzzle velocity"
msgstr "Velocidad de boca"
#: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:274
#: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format
msgid "Powder grains per charge"
msgstr "Granos de polvora por carga"
#: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:265
#: lib/cannery_web/live/type_live/form_component.html.heex:257
#, elixir-autogen, elixir-format
msgid "Powder type"
msgstr "Tipo de polvora"
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#, elixir-autogen, elixir-format
msgid "UPC"
msgstr ""
@ -551,7 +551,7 @@ msgid "New password"
msgstr "Nueva contraseña"
#: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:337
#: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format
msgid "Firing type"
msgstr "Tipo de fuego"
@ -575,7 +575,7 @@ msgstr "Editar etiquetas de %{name}"
#: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/container_live/show.html.heex:27
#: lib/cannery_web/live/type_live/show.html.heex:85
#: lib/cannery_web/live/type_live/show.html.heex:83
#, elixir-autogen, elixir-format
msgid "Rounds:"
msgstr "Balas:"
@ -583,7 +583,7 @@ msgstr "Balas:"
#: lib/cannery_web/components/pack_table_component.ex:178
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:152
#, elixir-autogen, elixir-format
msgid "No cost information"
msgstr "No hay información de coste"
@ -655,7 +655,7 @@ msgstr "Tiros Récord"
msgid "Copies"
msgstr "Copias"
#: lib/cannery_web/live/type_live/show.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:135
#, elixir-autogen, elixir-format
msgid "Added on:"
msgstr "Añadido en:"
@ -720,7 +720,7 @@ msgstr "Esta munición no está en un contenedor"
#: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/container_live/show.html.heex:22
#: lib/cannery_web/live/type_live/show.html.heex:111
#: lib/cannery_web/live/type_live/show.html.heex:109
#, elixir-autogen, elixir-format
msgid "Packs:"
msgstr "Paquetes:"
@ -747,9 +747,9 @@ msgstr ""
msgid "Container:"
msgstr "Contenedor:"
#: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164
#: lib/cannery_web/live/pack_live/index.html.heex:85
#: lib/cannery_web/live/type_live/index.html.heex:64
#: lib/cannery_web/live/type_live/show.html.heex:162
#, elixir-autogen, elixir-format
msgid "Show used"
msgstr "Mostrar usadas"
@ -779,7 +779,7 @@ msgstr "Balas"
#: lib/cannery_web/live/container_live/index.html.heex:40
#: lib/cannery_web/live/container_live/show.html.heex:117
#: lib/cannery_web/live/type_live/show.html.heex:170
#: lib/cannery_web/live/type_live/show.html.heex:168
#, elixir-autogen, elixir-format
msgid "View as table"
msgstr "Ver como tabla"
@ -789,7 +789,7 @@ msgstr "Ver como tabla"
msgid "Total ever packs"
msgstr "Paquetes totales"
#: lib/cannery_web/live/type_live/show.html.heex:128
#: lib/cannery_web/live/type_live/show.html.heex:126
#, elixir-autogen, elixir-format
msgid "Total ever packs:"
msgstr "Paquetes totales:"
@ -799,7 +799,7 @@ msgstr "Paquetes totales:"
msgid "Total ever rounds"
msgstr "Balas totales"
#: lib/cannery_web/live/type_live/show.html.heex:102
#: lib/cannery_web/live/type_live/show.html.heex:100
#, elixir-autogen, elixir-format
msgid "Total ever rounds:"
msgstr "Balas totales:"
@ -809,7 +809,7 @@ msgstr "Balas totales:"
msgid "Used packs"
msgstr "Paquetes usados"
#: lib/cannery_web/live/type_live/show.html.heex:120
#: lib/cannery_web/live/type_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "Used packs:"
msgstr "Paquetes usados:"
@ -819,7 +819,7 @@ msgstr "Paquetes usados:"
msgid "Used rounds"
msgstr "Balas usadas"
#: lib/cannery_web/live/type_live/show.html.heex:94
#: lib/cannery_web/live/type_live/show.html.heex:92
#, elixir-autogen, elixir-format
msgid "Used rounds:"
msgstr "Balas usadas:"
@ -925,7 +925,7 @@ msgid "UPC:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:101
#: lib/cannery_web/live/type_live/show.html.heex:146
#: lib/cannery_web/live/type_live/show.html.heex:144
#, elixir-autogen, elixir-format
msgid "Average CPR"
msgstr ""
@ -993,12 +993,12 @@ msgstr "Comprada en:"
msgid "Edit ammo"
msgstr "Editar munición"
#: lib/cannery_web/live/type_live/index.html.heex:58
#: lib/cannery_web/live/type_live/index.html.heex:56
#, elixir-autogen, elixir-format
msgid "Search catalog"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:79
#: lib/cannery_web/live/pack_live/index.html.heex:77
#, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo"
msgstr ""
@ -1013,14 +1013,14 @@ msgstr ""
msgid "Search tags"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:124
#: lib/cannery_web/live/range_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/components/layouts.ex:15
#: lib/cannery_web/components/layouts/root.html.heex:8
#: lib/cannery_web/components/layouts/root.html.heex:9
#: lib/cannery_web/components/layouts/root.html.heex:10
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
@ -1117,7 +1117,7 @@ msgstr ""
msgid "Password"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:292
#: lib/cannery_web/live/type_live/form_component.html.heex:284
#, elixir-autogen, elixir-format
msgid "+P"
msgstr ""
@ -1132,12 +1132,12 @@ msgstr ""
msgid "5.56x46mm NATO"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:333
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format
msgid "Boxer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:334
#, elixir-autogen, elixir-format
msgid "Centerfire"
msgstr ""
@ -1180,14 +1180,14 @@ msgid "Close modal"
msgstr ""
#: 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:103
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/pack_live/index.html.heex:56
#: lib/cannery_web/live/range_live/index.html.heex:101
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:347
#: lib/cannery_web/live/type_live/form_component.html.heex:339
#, elixir-autogen, elixir-format
msgid "Attributes"
msgstr ""
@ -1204,7 +1204,7 @@ msgid "Brass height:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:107
#: lib/cannery_web/live/type_live/form_component.html.heex:105
#, elixir-autogen, elixir-format
msgid "Chamber size"
msgstr ""
@ -1220,7 +1220,7 @@ msgid "Dimensions"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:297
#: lib/cannery_web/live/type_live/form_component.html.heex:289
#, elixir-autogen, elixir-format
msgid "Dram equivalent"
msgstr ""
@ -1242,7 +1242,7 @@ msgid "Gauge:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#, elixir-autogen, elixir-format
msgid "Load grains"
msgstr ""
@ -1257,50 +1257,50 @@ msgstr ""
msgid "No ammo"
msgstr "Sin Munición"
#: lib/cannery_web/live/type_live/show.html.heex:58
#: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "None specified"
msgstr ""
#: 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:106
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:104
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "Pistol"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:262
#: lib/cannery_web/live/type_live/form_component.html.heex:254
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder"
msgstr "Tipo de polvora"
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer"
msgstr "Tipo de espoleta"
#: lib/cannery_web/live/type_live/form_component.html.heex:123
#: lib/cannery_web/live/type_live/form_component.html.heex:119
#, elixir-autogen, elixir-format
msgid "Projectile"
msgstr ""
#: 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:104
#: lib/cannery_web/live/pack_live/index.html.heex:57
#: lib/cannery_web/live/range_live/index.html.heex:102
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "Rifle"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:243
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#, elixir-autogen, elixir-format
msgid "Shot charge weight"
msgstr ""
@ -1311,7 +1311,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:217
#: lib/cannery_web/live/type_live/form_component.html.heex:211
#, elixir-autogen, elixir-format
msgid "Shot material"
msgstr ""
@ -1322,7 +1322,7 @@ msgid "Shot material:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#: lib/cannery_web/live/type_live/form_component.html.heex:219
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size"
msgstr "Tiros disparados"
@ -1333,7 +1333,7 @@ msgid "Shot size:"
msgstr "Tiros disparados"
#: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:208
#: lib/cannery_web/live/type_live/form_component.html.heex:202
#, elixir-autogen, elixir-format
msgid "Shot type"
msgstr ""
@ -1345,22 +1345,22 @@ msgstr ""
#: 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:105
#: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:103
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:50
#, elixir-autogen, elixir-format
msgid "Shotgun"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:162
#: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format
msgid "Slug core"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:213
#: lib/cannery_web/live/type_live/form_component.html.heex:207
#, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc"
msgstr ""
@ -1377,7 +1377,7 @@ msgid "Unfired shell length"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:200
#: lib/cannery_web/live/type_live/form_component.html.heex:194
#, elixir-autogen, elixir-format
msgid "Wadding"
msgstr ""
@ -1394,7 +1394,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:44
#, elixir-autogen, elixir-format
msgid "Class"
msgstr ""
@ -1429,7 +1429,7 @@ msgid "New Type"
msgstr "Nuevo tipo de Munición"
#: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:73
#: lib/cannery_web/live/type_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "No Types"
msgstr "Tipo"
@ -1450,7 +1450,7 @@ msgstr ""
msgid "Any"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:138
#: lib/cannery_web/live/range_live/index.html.heex:136
#, elixir-autogen, elixir-format, fuzzy
msgid "Dates"
msgstr "Fecha"

View File

@ -117,22 +117,22 @@ msgstr "El enlace de confirmación de usuario no es válido o ha caducado."
msgid "You are not authorized to view this page."
msgstr "No está autorizado a ver esta página."
#: lib/cannery/accounts/user.ex:140
#: lib/cannery/accounts/user.ex:141
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr "no cambió"
#: lib/cannery/accounts/user.ex:161
#: lib/cannery/accounts/user.ex:162
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr "no coincide con la contraseña"
#: lib/cannery/accounts/user.ex:198
#: lib/cannery/accounts/user.ex:201
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr "no es válido"
#: lib/cannery/accounts/user.ex:95
#: lib/cannery/accounts/user.ex:96
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr "debe tener el signo @ y no contener espacios"

View File

@ -73,7 +73,7 @@ msgstr "Está seguro que desea eliminar %{email}? Esta acción es permanente!"
msgid "Are you sure you want to delete %{name}?"
msgstr "Está seguro que desea eliminar %{name}?"
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: lib/cannery_web/live/pack_live/index.html.heex:172
#: lib/cannery_web/live/pack_live/show.html.heex:69
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this ammo?"
@ -134,7 +134,7 @@ msgstr "Por favor chequea el correo para verificar tu cuenta"
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:379
#, elixir-autogen, elixir-format
msgid "Saving..."
msgstr "Guardando..."
@ -171,7 +171,7 @@ msgid "Shots recorded successfully"
msgstr "Tiros registrados exitosamente"
#: lib/cannery_web/live/pack_live/show.ex:147
#: lib/cannery_web/live/range_live/index.html.heex:178
#: lib/cannery_web/live/range_live/index.html.heex:176
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete this shot record?"
msgstr "¿Está segure que quiere borrar este récord de disparos?"
@ -246,8 +246,8 @@ msgid_plural "Ammo added successfully"
msgstr[0] "Munición añadida exitosamente"
msgstr[1] "Municiones añadidas exitosamente"
#: lib/cannery_web/live/type_live/index.html.heex:118
#: lib/cannery_web/live/type_live/show.html.heex:29
#: lib/cannery_web/live/type_live/index.html.heex:116
#: lib/cannery_web/live/type_live/show.html.heex:27
#, elixir-autogen, elixir-format
msgid "Are you sure you want to delete %{name}? This will delete all %{name} type ammo as well!"
msgstr ""

View File

@ -134,7 +134,7 @@ msgstr "Réinitialisé le mot de passe"
#: 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
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#, elixir-autogen, elixir-format
msgid "Save"
msgstr "Sauvegarder"
@ -159,7 +159,7 @@ msgstr "Ajouter"
msgid "Why not get some ready to shoot?"
msgstr "Pourquoi pas en préparer pour tirer?"
#: lib/cannery_web/live/pack_live/index.html.heex:116
#: lib/cannery_web/live/pack_live/index.html.heex:114
#: lib/cannery_web/live/pack_live/show.html.heex:84
#: lib/cannery_web/live/range_live/index.html.heex:54
#, elixir-autogen, elixir-format
@ -207,7 +207,7 @@ msgid "View in Catalog"
msgstr "Voir en catalogue"
#: lib/cannery_web/components/move_pack_component.ex:77
#: lib/cannery_web/live/pack_live/index.html.heex:127
#: lib/cannery_web/live/pack_live/index.html.heex:125
#: lib/cannery_web/live/pack_live/show.html.heex:80
#, elixir-autogen, elixir-format
msgid "Move ammo"
@ -296,55 +296,55 @@ msgstr ""
msgid "Unstage"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:161
#: lib/cannery_web/live/pack_live/index.html.heex:159
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:176
#: lib/cannery_web/live/pack_live/index.html.heex:174
#: 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:149
#: lib/cannery_web/live/pack_live/index.html.heex:147
#: 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:147
#: lib/cannery_web/live/pack_live/index.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:201
#: lib/cannery_web/live/pack_live/index.html.heex:135
#: lib/cannery_web/live/type_live/show.html.heex:199
#, elixir-autogen, elixir-format, fuzzy
msgid "View pack of %{pack_count} bullets"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:149
#: lib/cannery_web/live/range_live/index.html.heex:181
#: lib/cannery_web/live/range_live/index.html.heex:179
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/pack_live/show.ex:134
#: lib/cannery_web/live/range_live/index.html.heex:164
#: lib/cannery_web/live/range_live/index.html.heex:162
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit shot record of %{shot_record_count} shots"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:107
#: lib/cannery_web/live/type_live/index.html.heex:105
#, elixir-autogen, elixir-format, fuzzy
msgid "Clone %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:124
#: lib/cannery_web/live/type_live/show.html.heex:35
#: lib/cannery_web/live/type_live/index.html.heex:122
#: lib/cannery_web/live/type_live/show.html.heex:33
#, elixir-autogen, elixir-format, fuzzy
msgid "Delete %{type_name}"
msgstr ""
#: lib/cannery_web/live/type_live/index.html.heex:99
#: lib/cannery_web/live/type_live/show.html.heex:19
#: lib/cannery_web/live/type_live/index.html.heex:97
#: lib/cannery_web/live/type_live/show.html.heex:17
#, elixir-autogen, elixir-format, fuzzy
msgid "Edit %{type_name}"
msgstr ""
@ -354,7 +354,7 @@ msgstr ""
msgid "New Type"
msgstr "Nouveau type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:91
#: lib/cannery_web/live/type_live/index.html.heex:89
#, elixir-autogen, elixir-format, fuzzy
msgid "View %{type_name}"
msgstr ""

View File

@ -44,24 +44,24 @@ msgid "Background color"
msgstr "Couleur de fond"
#: lib/cannery_web/components/type_table_component.ex:86
#: lib/cannery_web/live/type_live/form_component.html.heex:358
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#, elixir-autogen, elixir-format
msgid "Blank"
msgstr "Vide"
#: lib/cannery_web/live/type_live/form_component.html.heex:195
#: lib/cannery_web/live/type_live/form_component.html.heex:189
#, elixir-autogen, elixir-format
msgid "Brass"
msgstr "Cuivre"
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:163
#: lib/cannery_web/live/type_live/form_component.html.heex:159
#, elixir-autogen, elixir-format
msgid "Bullet core"
msgstr "Noyau de balle"
#: lib/cannery_web/components/type_table_component.ex:59
#: lib/cannery_web/live/type_live/form_component.html.heex:136
#: lib/cannery_web/live/type_live/form_component.html.heex:132
#, elixir-autogen, elixir-format
msgid "Bullet type"
msgstr "Type de balle"
@ -79,7 +79,7 @@ msgid "Cartridge"
msgstr "Cartouche"
#: lib/cannery_web/components/type_table_component.ex:66
#: lib/cannery_web/live/type_live/form_component.html.heex:188
#: lib/cannery_web/live/type_live/form_component.html.heex:184
#, elixir-autogen, elixir-format
msgid "Case material"
msgstr "Matériau de la caisse"
@ -100,7 +100,7 @@ msgid "Containers"
msgstr "Conteneurs"
#: lib/cannery_web/components/type_table_component.ex:87
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#, elixir-autogen, elixir-format
msgid "Corrosive"
msgstr "Corrosive"
@ -145,19 +145,19 @@ msgstr "Modifier linvitation"
msgid "Edit Tag"
msgstr "Modifier le tag"
#: lib/cannery_web/live/type_live/form_component.html.heex:151
#: lib/cannery_web/live/type_live/form_component.html.heex:147
#, elixir-autogen, elixir-format
msgid "FMJ"
msgstr "FMJ"
#: lib/cannery_web/components/type_table_component.ex:58
#: lib/cannery_web/live/type_live/form_component.html.heex:126
#: lib/cannery_web/live/type_live/form_component.html.heex:122
#, elixir-autogen, elixir-format
msgid "Grains"
msgstr "Graines"
#: lib/cannery_web/components/type_table_component.ex:85
#: lib/cannery_web/live/type_live/form_component.html.heex:354
#: lib/cannery_web/live/type_live/form_component.html.heex:346
#, elixir-autogen, elixir-format
msgid "Incendiary"
msgstr "Incendiaire"
@ -208,8 +208,8 @@ msgid "Magazine, Clip, Ammo Box, etc"
msgstr "Chargeur, lame-chargeur, boite de munition, etc."
#: lib/cannery_web/components/type_table_component.ex:88
#: lib/cannery_web/live/type_live/form_component.html.heex:367
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#: lib/cannery_web/live/type_live/form_component.html.heex:359
#: lib/cannery_web/live/type_live/form_component.html.heex:362
#, elixir-autogen, elixir-format
msgid "Manufacturer"
msgstr "Fabricant"
@ -250,12 +250,12 @@ msgstr "Nouvelle invitation"
msgid "New Tag"
msgstr "Nouveau tag"
#: lib/cannery_web/live/pack_live/index.html.heex:94
#: lib/cannery_web/live/pack_live/index.html.heex:92
#, elixir-autogen, elixir-format
msgid "No Ammo"
msgstr "Aucune munition"
#: lib/cannery_web/live/type_live/show.html.heex:178
#: lib/cannery_web/live/type_live/show.html.heex:176
#, elixir-autogen, elixir-format
msgid "No ammo for this type"
msgstr "Aucune munition pour ce type"
@ -299,7 +299,7 @@ msgid "On the bookshelf"
msgstr "Sur létagère"
#: lib/cannery_web/components/type_table_component.ex:79
#: lib/cannery_web/live/type_live/form_component.html.heex:287
#: lib/cannery_web/live/type_live/form_component.html.heex:279
#, elixir-autogen, elixir-format
msgid "Pressure"
msgstr "Pression"
@ -316,7 +316,7 @@ msgid "Price paid:"
msgstr "Prix payé:"
#: lib/cannery_web/components/type_table_component.ex:82
#: lib/cannery_web/live/type_live/form_component.html.heex:328
#: lib/cannery_web/live/type_live/form_component.html.heex:320
#, elixir-autogen, elixir-format
msgid "Primer type"
msgstr "Type damorce"
@ -349,7 +349,7 @@ msgstr "Paramètres"
msgid "Simple:"
msgstr "Simple:"
#: lib/cannery_web/live/type_live/form_component.html.heex:171
#: lib/cannery_web/live/type_live/form_component.html.heex:167
#, elixir-autogen, elixir-format
msgid "Steel"
msgstr "Acier"
@ -386,7 +386,7 @@ msgid "The self-hosted firearm tracker website"
msgstr "Le site web de suivi darme à feux auto-hébergé"
#: lib/cannery_web/components/type_table_component.ex:84
#: lib/cannery_web/live/type_live/form_component.html.heex:350
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#, elixir-autogen, elixir-format
msgid "Tracer"
msgstr "Traceuse"
@ -460,7 +460,7 @@ msgid "Record shots"
msgstr "Tirs enregistrés"
#: lib/cannery_web/live/range_live/index.html.heex:64
#: lib/cannery_web/live/range_live/index.html.heex:148
#: lib/cannery_web/live/range_live/index.html.heex:146
#, elixir-autogen, elixir-format
msgid "No shots recorded"
msgstr "Aucun tir enregistré"
@ -494,41 +494,41 @@ msgstr "Évènements de tir"
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:150
#: lib/cannery_web/live/type_live/show.html.heex:148
#, elixir-autogen, elixir-format
msgid "$%{amount}"
msgstr "%{amount}$"
#: lib/cannery_web/live/type_live/form_component.html.heex:181
#: lib/cannery_web/live/type_live/form_component.html.heex:177
#, elixir-autogen, elixir-format
msgid "Bimetal"
msgstr "Bi-métal"
#: lib/cannery_web/components/type_table_component.ex:65
#: lib/cannery_web/live/type_live/form_component.html.heex:176
#: lib/cannery_web/live/type_live/form_component.html.heex:172
#, elixir-autogen, elixir-format
msgid "Jacket type"
msgstr "Type de douille"
#: lib/cannery_web/components/type_table_component.ex:81
#: lib/cannery_web/live/type_live/form_component.html.heex:311
#: lib/cannery_web/live/type_live/form_component.html.heex:303
#, elixir-autogen, elixir-format
msgid "Muzzle velocity"
msgstr "Vélocité du canon"
#: lib/cannery_web/components/type_table_component.ex:75
#: lib/cannery_web/live/type_live/form_component.html.heex:274
#: lib/cannery_web/live/type_live/form_component.html.heex:266
#, elixir-autogen, elixir-format
msgid "Powder grains per charge"
msgstr "Graines de poudre par charge"
#: lib/cannery_web/components/type_table_component.ex:73
#: lib/cannery_web/live/type_live/form_component.html.heex:265
#: lib/cannery_web/live/type_live/form_component.html.heex:257
#, elixir-autogen, elixir-format
msgid "Powder type"
msgstr "Type de poudre"
#: lib/cannery_web/live/type_live/form_component.html.heex:378
#: lib/cannery_web/live/type_live/form_component.html.heex:370
#, elixir-autogen, elixir-format
msgid "UPC"
msgstr "UPC"
@ -552,7 +552,7 @@ msgid "New password"
msgstr "Nouveau mot de passe"
#: lib/cannery_web/components/type_table_component.ex:83
#: lib/cannery_web/live/type_live/form_component.html.heex:337
#: lib/cannery_web/live/type_live/form_component.html.heex:329
#, elixir-autogen, elixir-format
msgid "Firing type"
msgstr "Type dallumage"
@ -576,7 +576,7 @@ msgstr "Éditer les tags de %{name}"
#: lib/cannery_web/components/core_components/container_card.html.heex:37
#: lib/cannery_web/live/container_live/show.html.heex:27
#: lib/cannery_web/live/type_live/show.html.heex:85
#: lib/cannery_web/live/type_live/show.html.heex:83
#, elixir-autogen, elixir-format
msgid "Rounds:"
msgstr "Cartouches:"
@ -584,7 +584,7 @@ msgstr "Cartouches:"
#: lib/cannery_web/components/pack_table_component.ex:178
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:152
#, elixir-autogen, elixir-format
msgid "No cost information"
msgstr "Aucune information de prix"
@ -656,7 +656,7 @@ msgstr "Enregistrer des tirs"
msgid "Copies"
msgstr "Exemplaires"
#: lib/cannery_web/live/type_live/show.html.heex:137
#: lib/cannery_web/live/type_live/show.html.heex:135
#, elixir-autogen, elixir-format
msgid "Added on:"
msgstr "Ajouté le:"
@ -721,7 +721,7 @@ msgstr "Ce groupe de munition nest pas dans un conteneur"
#: lib/cannery_web/components/core_components/container_card.html.heex:32
#: lib/cannery_web/live/container_live/show.html.heex:22
#: lib/cannery_web/live/type_live/show.html.heex:111
#: lib/cannery_web/live/type_live/show.html.heex:109
#, elixir-autogen, elixir-format
msgid "Packs:"
msgstr "Packages:"
@ -748,9 +748,9 @@ msgstr ""
msgid "Container:"
msgstr "Conteneur"
#: lib/cannery_web/live/pack_live/index.html.heex:87
#: lib/cannery_web/live/type_live/index.html.heex:66
#: lib/cannery_web/live/type_live/show.html.heex:164
#: lib/cannery_web/live/pack_live/index.html.heex:85
#: lib/cannery_web/live/type_live/index.html.heex:64
#: lib/cannery_web/live/type_live/show.html.heex:162
#, elixir-autogen, elixir-format
msgid "Show used"
msgstr ""
@ -780,7 +780,7 @@ msgstr "Cartouches:"
#: lib/cannery_web/live/container_live/index.html.heex:40
#: lib/cannery_web/live/container_live/show.html.heex:117
#: lib/cannery_web/live/type_live/show.html.heex:170
#: lib/cannery_web/live/type_live/show.html.heex:168
#, elixir-autogen, elixir-format
msgid "View as table"
msgstr ""
@ -790,7 +790,7 @@ msgstr ""
msgid "Total ever packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:128
#: lib/cannery_web/live/type_live/show.html.heex:126
#, elixir-autogen, elixir-format
msgid "Total ever packs:"
msgstr ""
@ -800,7 +800,7 @@ msgstr ""
msgid "Total ever rounds"
msgstr "Quantité de cartouches"
#: lib/cannery_web/live/type_live/show.html.heex:102
#: lib/cannery_web/live/type_live/show.html.heex:100
#, elixir-autogen, elixir-format, fuzzy
msgid "Total ever rounds:"
msgstr "Nombre totale de cartouches tirées:"
@ -810,7 +810,7 @@ msgstr "Nombre totale de cartouches tirées:"
msgid "Used packs"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:120
#: lib/cannery_web/live/type_live/show.html.heex:118
#, elixir-autogen, elixir-format
msgid "Used packs:"
msgstr ""
@ -820,7 +820,7 @@ msgstr ""
msgid "Used rounds"
msgstr ""
#: lib/cannery_web/live/type_live/show.html.heex:94
#: lib/cannery_web/live/type_live/show.html.heex:92
#, elixir-autogen, elixir-format, fuzzy
msgid "Used rounds:"
msgstr ""
@ -926,7 +926,7 @@ msgid "UPC:"
msgstr "UPC"
#: lib/cannery_web/components/type_table_component.ex:101
#: lib/cannery_web/live/type_live/show.html.heex:146
#: lib/cannery_web/live/type_live/show.html.heex:144
#, elixir-autogen, elixir-format
msgid "Average CPR"
msgstr ""
@ -994,12 +994,12 @@ msgstr ""
msgid "Edit ammo"
msgstr "Éditer le type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:58
#: lib/cannery_web/live/type_live/index.html.heex:56
#, elixir-autogen, elixir-format
msgid "Search catalog"
msgstr ""
#: lib/cannery_web/live/pack_live/index.html.heex:79
#: lib/cannery_web/live/pack_live/index.html.heex:77
#, elixir-autogen, elixir-format, fuzzy
msgid "Search ammo"
msgstr ""
@ -1014,14 +1014,14 @@ msgstr ""
msgid "Search tags"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:124
#: lib/cannery_web/live/range_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Search shot records"
msgstr ""
#: lib/cannery_web/components/layouts.ex:15
#: lib/cannery_web/components/layouts/root.html.heex:8
#: lib/cannery_web/components/layouts/root.html.heex:9
#: lib/cannery_web/components/layouts/root.html.heex:10
#: lib/cannery_web/controllers/error_html/error.html.heex:8
#, elixir-autogen, elixir-format, fuzzy
msgid "Cannery"
@ -1118,7 +1118,7 @@ msgstr ""
msgid "Password"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:292
#: lib/cannery_web/live/type_live/form_component.html.heex:284
#, elixir-autogen, elixir-format
msgid "+P"
msgstr ""
@ -1133,12 +1133,12 @@ msgstr ""
msgid "5.56x46mm NATO"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:333
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#, elixir-autogen, elixir-format
msgid "Boxer"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:342
#: lib/cannery_web/live/type_live/form_component.html.heex:334
#, elixir-autogen, elixir-format
msgid "Centerfire"
msgstr ""
@ -1181,14 +1181,14 @@ msgid "Close modal"
msgstr ""
#: 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:103
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/pack_live/index.html.heex:56
#: lib/cannery_web/live/range_live/index.html.heex:101
#: lib/cannery_web/live/type_live/index.html.heex:35
#, elixir-autogen, elixir-format
msgid "All"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:347
#: lib/cannery_web/live/type_live/form_component.html.heex:339
#, elixir-autogen, elixir-format
msgid "Attributes"
msgstr ""
@ -1205,7 +1205,7 @@ msgid "Brass height:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:57
#: lib/cannery_web/live/type_live/form_component.html.heex:107
#: lib/cannery_web/live/type_live/form_component.html.heex:105
#, elixir-autogen, elixir-format
msgid "Chamber size"
msgstr ""
@ -1221,7 +1221,7 @@ msgid "Dimensions"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:80
#: lib/cannery_web/live/type_live/form_component.html.heex:297
#: lib/cannery_web/live/type_live/form_component.html.heex:289
#, elixir-autogen, elixir-format
msgid "Dram equivalent"
msgstr ""
@ -1243,7 +1243,7 @@ msgid "Gauge:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:71
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#, elixir-autogen, elixir-format
msgid "Load grains"
msgstr ""
@ -1258,50 +1258,50 @@ msgstr ""
msgid "No ammo"
msgstr "Aucune munition"
#: lib/cannery_web/live/type_live/show.html.heex:58
#: lib/cannery_web/live/type_live/show.html.heex:56
#, elixir-autogen, elixir-format
msgid "None specified"
msgstr ""
#: 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:106
#: lib/cannery_web/live/pack_live/index.html.heex:59
#: lib/cannery_web/live/range_live/index.html.heex:104
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:38
#: lib/cannery_web/live/type_live/show.html.heex:54
#, elixir-autogen, elixir-format
msgid "Pistol"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:262
#: lib/cannery_web/live/type_live/form_component.html.heex:254
#, elixir-autogen, elixir-format, fuzzy
msgid "Powder"
msgstr "Type de poudre"
#: lib/cannery_web/live/type_live/form_component.html.heex:325
#: lib/cannery_web/live/type_live/form_component.html.heex:317
#, elixir-autogen, elixir-format, fuzzy
msgid "Primer"
msgstr "Type damorce"
#: lib/cannery_web/live/type_live/form_component.html.heex:123
#: lib/cannery_web/live/type_live/form_component.html.heex:119
#, elixir-autogen, elixir-format
msgid "Projectile"
msgstr ""
#: 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:104
#: lib/cannery_web/live/pack_live/index.html.heex:57
#: lib/cannery_web/live/range_live/index.html.heex:102
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:36
#: lib/cannery_web/live/type_live/show.html.heex:52
#, elixir-autogen, elixir-format
msgid "Rifle"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:72
#: lib/cannery_web/live/type_live/form_component.html.heex:243
#: lib/cannery_web/live/type_live/form_component.html.heex:235
#, elixir-autogen, elixir-format
msgid "Shot charge weight"
msgstr ""
@ -1312,7 +1312,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:217
#: lib/cannery_web/live/type_live/form_component.html.heex:211
#, elixir-autogen, elixir-format
msgid "Shot material"
msgstr ""
@ -1323,7 +1323,7 @@ msgid "Shot material:"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:70
#: lib/cannery_web/live/type_live/form_component.html.heex:227
#: lib/cannery_web/live/type_live/form_component.html.heex:219
#, elixir-autogen, elixir-format, fuzzy
msgid "Shot size"
msgstr "Tirs réalisés"
@ -1334,7 +1334,7 @@ msgid "Shot size:"
msgstr "Tirs réalisés"
#: lib/cannery_web/components/type_table_component.ex:68
#: lib/cannery_web/live/type_live/form_component.html.heex:208
#: lib/cannery_web/live/type_live/form_component.html.heex:202
#, elixir-autogen, elixir-format
msgid "Shot type"
msgstr ""
@ -1346,22 +1346,22 @@ msgstr ""
#: 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:105
#: lib/cannery_web/live/pack_live/index.html.heex:58
#: lib/cannery_web/live/range_live/index.html.heex:103
#: 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
#: lib/cannery_web/live/type_live/index.html.heex:37
#: lib/cannery_web/live/type_live/show.html.heex:50
#, elixir-autogen, elixir-format
msgid "Shotgun"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:61
#: lib/cannery_web/live/type_live/form_component.html.heex:162
#: lib/cannery_web/live/type_live/form_component.html.heex:158
#, elixir-autogen, elixir-format
msgid "Slug core"
msgstr ""
#: lib/cannery_web/live/type_live/form_component.html.heex:213
#: lib/cannery_web/live/type_live/form_component.html.heex:207
#, elixir-autogen, elixir-format
msgid "Target, bird, buck, etc"
msgstr ""
@ -1378,7 +1378,7 @@ msgid "Unfired shell length"
msgstr ""
#: lib/cannery_web/components/type_table_component.ex:67
#: lib/cannery_web/live/type_live/form_component.html.heex:200
#: lib/cannery_web/live/type_live/form_component.html.heex:194
#, elixir-autogen, elixir-format
msgid "Wadding"
msgstr ""
@ -1395,7 +1395,7 @@ msgstr ""
#: 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
#: lib/cannery_web/live/type_live/show.html.heex:44
#, elixir-autogen, elixir-format
msgid "Class"
msgstr ""
@ -1430,7 +1430,7 @@ msgid "New Type"
msgstr "Nouveau type de munition"
#: lib/cannery_web/live/type_live/index.html.heex:8
#: lib/cannery_web/live/type_live/index.html.heex:73
#: lib/cannery_web/live/type_live/index.html.heex:71
#, elixir-autogen, elixir-format, fuzzy
msgid "No Types"
msgstr "Type"
@ -1451,7 +1451,7 @@ msgstr ""
msgid "Any"
msgstr ""
#: lib/cannery_web/live/range_live/index.html.heex:138
#: lib/cannery_web/live/range_live/index.html.heex:136
#, elixir-autogen, elixir-format, fuzzy
msgid "Dates"
msgstr "Date"

View File

@ -116,22 +116,22 @@ msgstr "Le lien de confirmation dutilisateur·ice est invalide ou a expiré."
msgid "You are not authorized to view this page."
msgstr "Vous nêtes pas autorisé·e à voir cette page."
#: lib/cannery/accounts/user.ex:140
#: lib/cannery/accounts/user.ex:141
#, elixir-autogen, elixir-format
msgid "did not change"
msgstr "est inchangé"
#: lib/cannery/accounts/user.ex:161
#: lib/cannery/accounts/user.ex:162
#, elixir-autogen, elixir-format
msgid "does not match password"
msgstr "le mot de passe ne correspond pas"
#: lib/cannery/accounts/user.ex:198
#: lib/cannery/accounts/user.ex:201
#, elixir-autogen, elixir-format
msgid "is not valid"
msgstr "nest pas valide"
#: lib/cannery/accounts/user.ex:95
#: lib/cannery/accounts/user.ex:96
#, elixir-autogen, elixir-format
msgid "must have the @ sign and no spaces"
msgstr "doit contenir le symbole @ et aucune espace"

Some files were not shown because too many files have changed in this diff Show More