update deps
This commit is contained in:
		| @@ -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
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -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/ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
| { | ||||
|     "presets": [ | ||||
|         "@babel/preset-env" | ||||
|     ] | ||||
| } | ||||
| @@ -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; | ||||
| } | ||||
| @@ -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; | ||||
|   } | ||||
| } | ||||
| @@ -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
									
									
									
								
							
							
						
						
									
										10401
									
								
								assets/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -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" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,7 +0,0 @@ | ||||
| module.exports = { | ||||
|   plugins: { | ||||
|     'postcss-import': {}, | ||||
|     tailwindcss: {}, | ||||
|     autoprefixer: {} | ||||
|   } | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 14 KiB | 
| @@ -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: [] | ||||
| } | ||||
| @@ -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: '../' }] }) | ||||
|     ] | ||||
|   } | ||||
| } | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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") | ||||
|  | ||||
|   | ||||
| @@ -17,7 +17,7 @@ defmodule Cannery.Accounts.Invite do | ||||
|  | ||||
|     has_many :users, User | ||||
|  | ||||
|     timestamps() | ||||
|     timestamps(type: :utc_datetime) | ||||
|   end | ||||
|  | ||||
|   @type t :: %__MODULE__{ | ||||
|   | ||||
| @@ -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")) | ||||
|   | ||||
| @@ -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__{ | ||||
|   | ||||
| @@ -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__{ | ||||
|   | ||||
| @@ -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__{ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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__{ | ||||
|   | ||||
| @@ -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__{ | ||||
|   | ||||
| @@ -20,7 +20,7 @@ defmodule Cannery.Containers.Tag do | ||||
|  | ||||
|     field :user_id, :binary_id | ||||
|  | ||||
|     timestamps() | ||||
|     timestamps(type: :utc_datetime) | ||||
|   end | ||||
|  | ||||
|   @type t :: %__MODULE__{ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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} | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| <time :if={@datetime} id={@id} datetime={cast_datetime(@datetime)} phx-hook="DateTime"> | ||||
|   <%= cast_datetime(@datetime) %> | ||||
|   {cast_datetime(@datetime)} | ||||
| </time> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 %> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| <%= @inner_block %> | ||||
| {@inner_block} | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|     """ | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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}> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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"> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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"> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								mix.exs
									
									
									
									
									
								
							| @@ -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 | ||||
|   | ||||
							
								
								
									
										54
									
								
								mix.lock
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								mix.lock
									
									
									
									
									
								
							| @@ -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"}, | ||||
| } | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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?" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 "" | ||||
|   | ||||
| @@ -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 l’invitation" | ||||
| 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 d’amorce" | ||||
| @@ -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 d’arme à 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 d’allumage" | ||||
| @@ -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 n’est 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 d’amorce" | ||||
|  | ||||
| #: 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" | ||||
|   | ||||
| @@ -116,22 +116,22 @@ msgstr "Le lien de confirmation d’utilisateur·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 "n’est 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
		Reference in New Issue
	
	Block a user